Compare commits
4288 Commits
OpenSSL-fi
...
OpenSSL_1_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0d8776344c | ||
|
|
197e0ea817 | ||
|
|
c776a3f398 | ||
|
|
25c9fa6026 | ||
|
|
d2dc33d57c | ||
|
|
f3dcc8411e | ||
|
|
1c2c5e402a | ||
|
|
34628967f1 | ||
|
|
a6c62f0c25 | ||
|
|
ca989269a2 | ||
|
|
2ec4181ba9 | ||
|
|
0294b2be5f | ||
|
|
f1068a1ab7 | ||
|
|
cadde467a8 | ||
|
|
c2bdcba347 | ||
|
|
60df657b3a | ||
|
|
17a2d0801f | ||
|
|
accb3007ac | ||
|
|
b13dff6141 | ||
|
|
4ade6a8ca4 | ||
|
|
00fadef414 | ||
|
|
7ed244a0b3 | ||
|
|
e94a23876c | ||
|
|
041f681943 | ||
|
|
afec9f57da | ||
|
|
0ec1a77891 | ||
|
|
62c2b6d944 | ||
|
|
5b98979712 | ||
|
|
9abbf5cce7 | ||
|
|
ddfe486e4c | ||
|
|
834d30bc63 | ||
|
|
e26faa9e0c | ||
|
|
025f7dbdd1 | ||
|
|
44f4934bde | ||
|
|
453ca706cc | ||
|
|
5e1ff664f9 | ||
|
|
833a896681 | ||
|
|
34e43b909f | ||
|
|
62036c6fc3 | ||
|
|
68dd8512b7 | ||
|
|
bbf9f3c654 | ||
|
|
2583270191 | ||
|
|
3da721dac9 | ||
|
|
eb22b7ec75 | ||
|
|
b93916149d | ||
|
|
82f42a1d2e | ||
|
|
a4870de5aa | ||
|
|
39aabe59c8 | ||
|
|
f4c93b46ed | ||
|
|
4af793036f | ||
|
|
13bca90ac5 | ||
|
|
c9a6ddafc5 | ||
|
|
f4a51970d2 | ||
|
|
937f125efc | ||
|
|
4b61f6d2a6 | ||
|
|
d5bff72615 | ||
|
|
3b4be0018b | ||
|
|
125c2ed8a3 | ||
|
|
09da95542a | ||
|
|
cc53b38574 | ||
|
|
0aeeae0c9c | ||
|
|
00c991f028 | ||
|
|
55856a7b74 | ||
|
|
83a3af9f4e | ||
|
|
76bf0cf27c | ||
|
|
7cf0529b52 | ||
|
|
6c03af135b | ||
|
|
5cd1aa4f15 | ||
|
|
04b80f4003 | ||
|
|
591c55a981 | ||
|
|
cd2693862b | ||
|
|
25370e93c6 | ||
|
|
cdb6c48445 | ||
|
|
04b727b4dd | ||
|
|
cbd93a0636 | ||
|
|
b9e84f007f | ||
|
|
29a546720b | ||
|
|
0e9dd387ea | ||
|
|
79dabcc137 | ||
|
|
944bc29f90 | ||
|
|
03e1b3a153 | ||
|
|
9c95ff968a | ||
|
|
96b680f210 | ||
|
|
9ab3ce1246 | ||
|
|
3972dbe462 | ||
|
|
85615e33e5 | ||
|
|
f4cfc3444a | ||
|
|
24f599af21 | ||
|
|
bca0d7fdb5 | ||
|
|
bc4ae2cb0b | ||
|
|
ef4b9f001a | ||
|
|
08f8933fa3 | ||
|
|
41958376b5 | ||
|
|
9fe4603b82 | ||
|
|
147dbb2fe3 | ||
|
|
cbf9b4aed3 | ||
|
|
625a55324f | ||
|
|
3151e328e0 | ||
|
|
46ebd9e3bb | ||
|
|
f66db68e1f | ||
|
|
0c4b72e9c0 | ||
|
|
f88dbb8385 | ||
|
|
1113fc31ba | ||
|
|
0898147090 | ||
|
|
4d8da30fc1 | ||
|
|
579f3a631e | ||
|
|
47061af106 | ||
|
|
13e225300f | ||
|
|
26bc56d014 | ||
|
|
496681cd51 | ||
|
|
746c6f3a53 | ||
|
|
8545f73b89 | ||
|
|
32cc2479b4 | ||
|
|
f306b87d76 | ||
|
|
41cf07f0ec | ||
|
|
62f4033381 | ||
|
|
f9f6a8f96c | ||
|
|
df0d93564e | ||
|
|
0d589ac150 | ||
|
|
35d732fc2e | ||
|
|
896ddb9851 | ||
|
|
e630b3c218 | ||
|
|
f1ca56a69f | ||
|
|
529d27ea47 | ||
|
|
b2226c6c83 | ||
|
|
024de2174b | ||
|
|
125093b59f | ||
|
|
f3e99ea072 | ||
|
|
8bfd4c659f | ||
|
|
ec07246a08 | ||
|
|
04e45b52ee | ||
|
|
d5371324d9 | ||
|
|
36260233e7 | ||
|
|
cab13fc847 | ||
|
|
34ab3c8c71 | ||
|
|
25c93fd240 | ||
|
|
428c1064c3 | ||
|
|
81ce0e14e7 | ||
|
|
b908e88ec1 | ||
|
|
62e4506a7d | ||
|
|
014265eb02 | ||
|
|
9f27de170d | ||
|
|
6cb19b7681 | ||
|
|
e130841bcc | ||
|
|
2ee798880a | ||
|
|
ffcf4c6164 | ||
|
|
b286a96811 | ||
|
|
2a2df2e9f2 | ||
|
|
15481c5e42 | ||
|
|
366b60b9da | ||
|
|
4782444a35 | ||
|
|
8a17e161d1 | ||
|
|
72f27cd2df | ||
|
|
3b3674ae58 | ||
|
|
9d75e765bc | ||
|
|
bf07bd4d61 | ||
|
|
296cc7f4b8 | ||
|
|
3d92984689 | ||
|
|
51447d5db5 | ||
|
|
1dcf520fe2 | ||
|
|
fca84dabe6 | ||
|
|
3ea1e13569 | ||
|
|
dd6639bd3a | ||
|
|
bee0550397 | ||
|
|
fc57c58c81 | ||
|
|
5bb6d96558 | ||
|
|
28e1bd35bd | ||
|
|
dd83cc298d | ||
|
|
ea00598596 | ||
|
|
a650314f72 | ||
|
|
54fdc39a08 | ||
|
|
7dc98a62b2 | ||
|
|
f20ba1c9bb | ||
|
|
7c3562947a | ||
|
|
eb3a3911fc | ||
|
|
540f7c75ef | ||
|
|
d6342aab08 | ||
|
|
e7b85bc402 | ||
|
|
07eaaab2f6 | ||
|
|
96f7fafa24 | ||
|
|
487a0df700 | ||
|
|
09ef5f6258 | ||
|
|
bcc0e4ca7c | ||
|
|
caac8fefdc | ||
|
|
353e845120 | ||
|
|
d1451f18d9 | ||
|
|
c3a5b7b82a | ||
|
|
70d91d60bc | ||
|
|
bc78883017 | ||
|
|
f929f201fb | ||
|
|
554cf97f03 | ||
|
|
48ccbeefda | ||
|
|
7a217076d9 | ||
|
|
0720bf7df1 | ||
|
|
9d6727781d | ||
|
|
12c1621523 | ||
|
|
f9b48d60f2 | ||
|
|
5c29127666 | ||
|
|
78d767f5ec | ||
|
|
c8b979e929 | ||
|
|
2beaa91ca7 | ||
|
|
efa288ceac | ||
|
|
ad3bbd4a16 | ||
|
|
73913443a5 | ||
|
|
e133ff7190 | ||
|
|
25da47c3c8 | ||
|
|
4dc40f5eec | ||
|
|
a1a37575f0 | ||
|
|
c64c0e03d3 | ||
|
|
e1e882a368 | ||
|
|
36b0719793 | ||
|
|
7655044dd3 | ||
|
|
58fdd30664 | ||
|
|
7175dbaeba | ||
|
|
af454b5bb0 | ||
|
|
5b2bbf37fa | ||
|
|
6321ac9e15 | ||
|
|
eeca72f71e | ||
|
|
6e164e5c3d | ||
|
|
1b452133ae | ||
|
|
d9c34505e5 | ||
|
|
f9885acc8c | ||
|
|
fa9df48401 | ||
|
|
d414a5a0f0 | ||
|
|
9eb4460e68 | ||
|
|
6984d16671 | ||
|
|
5b9d0995a1 | ||
|
|
7ad8e1fc4e | ||
|
|
c9b31189a9 | ||
|
|
c76b7a1a82 | ||
|
|
c940e07014 | ||
|
|
88be4ebfbc | ||
|
|
effa47b80a | ||
|
|
067400b16e | ||
|
|
748628ced0 | ||
|
|
6791060eae | ||
|
|
502dfeb8de | ||
|
|
5bbed29518 | ||
|
|
2f2d33f470 | ||
|
|
be60a3feaa | ||
|
|
e504a829a0 | ||
|
|
0d829f6681 | ||
|
|
d9540579c5 | ||
|
|
ecf963b80d | ||
|
|
7fc6d35be0 | ||
|
|
e7d2a37158 | ||
|
|
531c6fc8f3 | ||
|
|
e011d0a3c4 | ||
|
|
8d5505d099 | ||
|
|
d36e0ee460 | ||
|
|
143619ccf6 | ||
|
|
9f339d75b5 | ||
|
|
28583660fb | ||
|
|
dedfe959dd | ||
|
|
4d936ace08 | ||
|
|
89bd25eb26 | ||
|
|
4a1cf50187 | ||
|
|
32e12316e5 | ||
|
|
ad7b24f145 | ||
|
|
c2770c0e0e | ||
|
|
371056f2b9 | ||
|
|
2d613908e8 | ||
|
|
18fb1fae08 | ||
|
|
39ef161c72 | ||
|
|
a7612c5066 | ||
|
|
6cbae10b5e | ||
|
|
ebe81134c0 | ||
|
|
a1d573e282 | ||
|
|
e959e24b47 | ||
|
|
3f98d7c0b5 | ||
|
|
d2f950c984 | ||
|
|
63e8f16737 | ||
|
|
9bf5fd894f | ||
|
|
6296729fae | ||
|
|
67d216801b | ||
|
|
0a5575f3f6 | ||
|
|
418044cbab | ||
|
|
8c67b13407 | ||
|
|
2a477ccf0b | ||
|
|
c34137bef9 | ||
|
|
914d91c5b3 | ||
|
|
e733dea3ce | ||
|
|
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 | ||
|
|
70b2186e24 | ||
|
|
64ecdaeca9 | ||
|
|
4e74239df1 | ||
|
|
aaf35f11d7 | ||
|
|
093f5d2c15 | ||
|
|
7f1c086b21 | ||
|
|
77ea8c3002 | ||
|
|
ddcfc25a6d | ||
|
|
4d7b7c62c3 | ||
|
|
dd009fe655 | ||
|
|
73ba116e96 | ||
|
|
80b2ff978d | ||
|
|
7ce8c95d58 | ||
|
|
38b6e6c07b | ||
|
|
e4e949192b | ||
|
|
4e52b9845e | ||
|
|
e22b864846 | ||
|
|
b6af2c7e3e | ||
|
|
57db09906b | ||
|
|
4c78bc05c4 | ||
|
|
ef8e772805 | ||
|
|
54571ba004 | ||
|
|
237d7b6cae | ||
|
|
854a225a27 | ||
|
|
e39acc1c90 | ||
|
|
a0b76569b2 | ||
|
|
78625cac82 | ||
|
|
c28a9165f2 | ||
|
|
617298dca3 | ||
|
|
33ab2e31f3 | ||
|
|
bb7ccdfbe2 | ||
|
|
c836f8ef73 | ||
|
|
4df100935f | ||
|
|
2a0ff7ad20 | ||
|
|
c2a548a884 | ||
|
|
77202a85a0 | ||
|
|
73bfcf2226 | ||
|
|
2121f15daf | ||
|
|
b2cf7c6452 | ||
|
|
7587347bc4 | ||
|
|
ae3b4f2336 | ||
|
|
605b04f661 | ||
|
|
97132a0f8e | ||
|
|
30e5e39a3d | ||
|
|
2c618ab993 | ||
|
|
b5d5c0a21f | ||
|
|
f8ea4757cc | ||
|
|
0ed6b52687 | ||
|
|
a63bf2c53c | ||
|
|
b3f3407850 | ||
|
|
477fd4596f | ||
|
|
30b1b28aff | ||
|
|
46400c97a9 | ||
|
|
c558c99fd8 | ||
|
|
13c3a1defa | ||
|
|
aaa29f9e83 | ||
|
|
ede6ef5e08 | ||
|
|
0f529cbdc3 | ||
|
|
eb55b9fc19 | ||
|
|
7012d2a8fa | ||
|
|
8626230a02 | ||
|
|
c23632d3f1 | ||
|
|
3859d7ee78 | ||
|
|
d615bceb2d | ||
|
|
7ca1cfbac3 | ||
|
|
d8e8fc4803 | ||
|
|
57f39cc826 | ||
|
|
6489573224 | ||
|
|
079e00e646 | ||
|
|
5871ddb016 | ||
|
|
c7ba21493a | ||
|
|
8bf5001612 | ||
|
|
6ed9dfb23a | ||
|
|
7f62532030 | ||
|
|
c2c99e2860 | ||
|
|
8125d9f99c | ||
|
|
8e6925b0cd | ||
|
|
d7ecd42255 | ||
|
|
41b7619596 | ||
|
|
211655fcdd | ||
|
|
363bd0b48e | ||
|
|
60aee6ce15 | ||
|
|
bab534057b | ||
|
|
cec2af7510 | ||
|
|
6de3683908 | ||
|
|
fceac0bc74 | ||
|
|
792bbc2374 | ||
|
|
4a94003a51 | ||
|
|
ab4d689832 | ||
|
|
23b973e600 | ||
|
|
b3b201b6f7 | ||
|
|
d41c785d69 | ||
|
|
a370537bde | ||
|
|
2bd45dc94c | ||
|
|
121f9e743c | ||
|
|
0eab41fb78 | ||
|
|
8aa02e97a7 | ||
|
|
a68c7b9171 | ||
|
|
5cabcf96e7 | ||
|
|
85e878f224 | ||
|
|
fe1c7fecf1 | ||
|
|
0e941da6fa | ||
|
|
2d1cbc85c8 | ||
|
|
d195d60a5f | ||
|
|
e81695205e | ||
|
|
fe150ac25d | ||
|
|
bec45a35bb | ||
|
|
3b0ee0d2bf | ||
|
|
dde5b979d2 | ||
|
|
57a6ac7c4f | ||
|
|
9b9cb004f7 | ||
|
|
6ba71a7173 | ||
|
|
4ded7b44a8 | ||
|
|
1457619e13 | ||
|
|
ccf529928f | ||
|
|
5ceb595dfa | ||
|
|
44390fadc0 | ||
|
|
974d05a323 | ||
|
|
0f76640fba | ||
|
|
a11974180f | ||
|
|
5d48a66a6a | ||
|
|
63fc7f848d | ||
|
|
830457ce4f | ||
|
|
ea4d5005d9 | ||
|
|
9f03d0fc04 | ||
|
|
2140659b00 | ||
|
|
e527201f6b | ||
|
|
70531c147c | ||
|
|
75bbf6e14c | ||
|
|
702e742515 | ||
|
|
be01f79d3d | ||
|
|
bf785c9849 | ||
|
|
4db4882402 | ||
|
|
6786f52ada | ||
|
|
2e6a7b3efc | ||
|
|
63461b8db1 | ||
|
|
e77228ba11 | ||
|
|
5c60b1637a | ||
|
|
26397d2e8c | ||
|
|
85b2c0ce7f | ||
|
|
f826bf7798 | ||
|
|
3ebbe8853f | ||
|
|
ac71d81e84 | ||
|
|
a9dbe71ee0 | ||
|
|
ecd3370ba0 | ||
|
|
19d300d07c | ||
|
|
071920d9f6 | ||
|
|
1f6e9bce21 | ||
|
|
434ba03ca9 | ||
|
|
d88d941c87 | ||
|
|
9d44cd1642 | ||
|
|
1d4e879106 | ||
|
|
ae381fef5c | ||
|
|
48114ec952 | ||
|
|
7a76219774 | ||
|
|
2900fc8ae1 | ||
|
|
e9afa08cd1 | ||
|
|
bcaa36fd11 | ||
|
|
71702f7ed0 | ||
|
|
fd252de312 | ||
|
|
349e78e2e8 | ||
|
|
79bd20fd17 | ||
|
|
d0c3628834 | ||
|
|
31636a3ed1 | ||
|
|
f3b7bdadbc | ||
|
|
ad7159ea84 | ||
|
|
0b0dbb2cac | ||
|
|
12bf56c017 | ||
|
|
93c4ba07d7 | ||
|
|
36d46234c7 | ||
|
|
774b2fe700 | ||
|
|
6c901ae8c1 | ||
|
|
90c65a9838 | ||
|
|
5eba1ab346 | ||
|
|
4e50072d56 | ||
|
|
dd9557a8ba | ||
|
|
ed551cddf7 | ||
|
|
5aca224ecd | ||
|
|
dab6293482 | ||
|
|
1416aec60d | ||
|
|
aa8f38e49b | ||
|
|
8525377265 | ||
|
|
2fbc8a2aad | ||
|
|
6343829a39 | ||
|
|
2401debe83 | ||
|
|
5c61111bff | ||
|
|
bc645199c0 | ||
|
|
0a8c9f7de1 | ||
|
|
7b808412c9 | ||
|
|
706c5a4d35 | ||
|
|
0afc9f5bc0 | ||
|
|
2e5975285e | ||
|
|
5947ca0409 | ||
|
|
d40a1b865f | ||
|
|
f80921b6a6 | ||
|
|
9be5481297 | ||
|
|
8fe8bae15a | ||
|
|
f2c0230518 | ||
|
|
e6e0c9018c | ||
|
|
9619b730b4 | ||
|
|
2766515fca | ||
|
|
87d52468aa | ||
|
|
70d71f6185 | ||
|
|
5ee92a5ec1 | ||
|
|
c76fd290be | ||
|
|
d0a20cafa1 | ||
|
|
8da07655ee | ||
|
|
befe1fbc29 | ||
|
|
5e4430e70d | ||
|
|
4d6e1e4f29 | ||
|
|
122396f2db | ||
|
|
09a60c9833 | ||
|
|
b444ac3e6f | ||
|
|
f768be81d8 | ||
|
|
91173829db | ||
|
|
bfaead2b12 | ||
|
|
e6b4578540 | ||
|
|
0dd4850ee0 | ||
|
|
c650168a4f | ||
|
|
ea71ec1b11 | ||
|
|
f1455b3063 | ||
|
|
b764f82c64 | ||
|
|
436bdcff4e | ||
|
|
27f864e8ac | ||
|
|
80aa9cc985 | ||
|
|
ab7e09f59b | ||
|
|
e9eda23ae6 | ||
|
|
6caa4edd3e | ||
|
|
ac786241a2 | ||
|
|
df0681e554 | ||
|
|
e19106f5fb | ||
|
|
ae7ec4c71d | ||
|
|
020d67fb89 | ||
|
|
3fdc6c11aa | ||
|
|
dcf6b3e9b6 | ||
|
|
606f6c477a | ||
|
|
1581f82243 | ||
|
|
0d6f9c7181 | ||
|
|
640b86cb24 | ||
|
|
111a6e2a23 | ||
|
|
d764e7edb8 | ||
|
|
aff8259510 | ||
|
|
256b3e9c5f | ||
|
|
762a2e3cab | ||
|
|
28b6d5020e | ||
|
|
d5bbead449 | ||
|
|
0f7efbc859 | ||
|
|
a7ae4abfd9 | ||
|
|
30661b1b01 | ||
|
|
1ea6472e60 | ||
|
|
b8dfde2a36 | ||
|
|
570006f3a2 | ||
|
|
babb379849 | ||
|
|
6665ef303e | ||
|
|
7e7af0bc51 | ||
|
|
87d3a0cd90 | ||
|
|
1e369b375e | ||
|
|
6bf24568bc | ||
|
|
837f2fc7a4 | ||
|
|
1a489c9af1 | ||
|
|
8c864e5466 | ||
|
|
be5707c820 | ||
|
|
4a4f3071ec | ||
|
|
d7235a9d68 | ||
|
|
fa0f834c20 | ||
|
|
96562f2fb3 | ||
|
|
b9790c1cd4 | ||
|
|
fcbdde0dfe | ||
|
|
51ec776b7d | ||
|
|
e65bcbcef0 | ||
|
|
e710de12ce | ||
|
|
db99c52509 | ||
|
|
f8d6be3f81 | ||
|
|
d493899579 | ||
|
|
492279f6f3 | ||
|
|
3ad74edce8 | ||
|
|
2b7b1cad10 | ||
|
|
43048d13c8 | ||
|
|
e8da6a1d0f | ||
|
|
305514000c | ||
|
|
0702150f53 | ||
|
|
a0ee081515 | ||
|
|
d43c4497ce | ||
|
|
4b96839f06 | ||
|
|
249a77f5fb | ||
|
|
d0fff69dc9 | ||
|
|
8c9bd89338 | ||
|
|
2e415778f2 | ||
|
|
1cbf663a6c | ||
|
|
9be8035b11 | ||
|
|
2ecd2edede | ||
|
|
9d84d4ed5e | ||
|
|
2e0c7db950 | ||
|
|
002e66c0e8 | ||
|
|
e9746e03ee | ||
|
|
ab9c689ad3 | ||
|
|
4c3296960d | ||
|
|
96826bfc84 | ||
|
|
eb1aa135d8 | ||
|
|
99649b5990 | ||
|
|
6d6c47980e | ||
|
|
474b3b1cc8 | ||
|
|
3e727a3b37 | ||
|
|
a9ff742e42 | ||
|
|
787287af40 | ||
|
|
5cbd203302 | ||
|
|
592a207b94 | ||
|
|
6bcbac0abb | ||
|
|
4c048211f1 | ||
|
|
b94551e823 | ||
|
|
9b634c9b37 | ||
|
|
5b331ab77a | ||
|
|
dd6f479ea8 | ||
|
|
87facba376 | ||
|
|
e4662fdb62 | ||
|
|
efa73a77e4 | ||
|
|
89778b7f3f | ||
|
|
c79c5a256b | ||
|
|
9960bdc6fa | ||
|
|
23dcb447ff | ||
|
|
39c63e162c | ||
|
|
34d05a4023 | ||
|
|
dcc0c29876 | ||
|
|
db50661fce | ||
|
|
f9afd9f861 | ||
|
|
d4cdbab99b | ||
|
|
5f834ab123 | ||
|
|
8528128b2a | ||
|
|
a0f3679b52 | ||
|
|
8228fd89fc | ||
|
|
869eb9e767 | ||
|
|
6c2878344f | ||
|
|
2836cb3816 | ||
|
|
46d4782888 | ||
|
|
a01a351cc2 | ||
|
|
adb92d56eb | ||
|
|
ce04f91951 | ||
|
|
6cb9fca70d | ||
|
|
ec0bfca7e7 | ||
|
|
1cd504e7be | ||
|
|
11f3cee93b | ||
|
|
6bf79e30ea | ||
|
|
7555c9337f | ||
|
|
ffc2b3e927 | ||
|
|
9ab89286a2 | ||
|
|
5329130333 | ||
|
|
e1451bb51d | ||
|
|
0b44c26d78 | ||
|
|
4db9677bac | ||
|
|
1381bf90f4 | ||
|
|
e0f7b87227 | ||
|
|
985de86340 | ||
|
|
b814c01a76 | ||
|
|
c07a126fb2 | ||
|
|
09a6e19431 | ||
|
|
863d447e0b | ||
|
|
5ce278a77b | ||
|
|
37cf49a3df | ||
|
|
f79262e94b | ||
|
|
7d537d4fc7 | ||
|
|
ca89fc1fb4 | ||
|
|
59d2d48f64 | ||
|
|
b3c8dd4eab | ||
|
|
45d3767d28 | ||
|
|
8671b89860 | ||
|
|
4f7f411719 | ||
|
|
eac442ddd3 | ||
|
|
55bef26d8a | ||
|
|
2aa2a5775f | ||
|
|
c451bd828f | ||
|
|
8ecfbedd85 | ||
|
|
c173fce4e2 | ||
|
|
953174f46e | ||
|
|
c621c7e432 | ||
|
|
2bbe8f9129 | ||
|
|
4be0a5d429 | ||
|
|
bdfe932dca | ||
|
|
3fc59c8406 | ||
|
|
c61915c659 | ||
|
|
368888bcb6 | ||
|
|
eafd6e5110 | ||
|
|
05935c47b2 | ||
|
|
d8bd55a364 | ||
|
|
841c91d6e4 | ||
|
|
a4792168ec | ||
|
|
90b96776cd | ||
|
|
408f906592 | ||
|
|
7a18ecb2df | ||
|
|
174c86a216 | ||
|
|
c6ddacf7f8 | ||
|
|
ab3eafd5b5 | ||
|
|
dd043cd501 | ||
|
|
a75c662fd1 | ||
|
|
83574cf808 | ||
|
|
2cd81830ef | ||
|
|
e194fe8f47 | ||
|
|
40a706286f | ||
|
|
c6f6c380c7 | ||
|
|
8f395e0f4d | ||
|
|
595852f3b5 | ||
|
|
0a56761f19 | ||
|
|
220903f92e | ||
|
|
3c1d6bbc92 | ||
|
|
cab14b9803 | ||
|
|
17a4a4dff8 | ||
|
|
c2c2e7a438 | ||
|
|
d18ef847f4 | ||
|
|
5c0d90a699 | ||
|
|
f434730524 | ||
|
|
65fd877515 | ||
|
|
64ddafc6b6 | ||
|
|
781f0a9bb5 | ||
|
|
3de5a7745f | ||
|
|
94fd382f8b | ||
|
|
4bd4afa34e | ||
|
|
148bb9515c | ||
|
|
51e00db226 | ||
|
|
a92ebf2290 | ||
|
|
f49c687507 | ||
|
|
8b99c79fae | ||
|
|
718f8f7a9e | ||
|
|
e718520cc5 | ||
|
|
4f46934269 | ||
|
|
fabe640f5e | ||
|
|
19048b5c8d | ||
|
|
156ee88285 | ||
|
|
c386f8ac38 | ||
|
|
4a954b56c9 | ||
|
|
d05a474556 | ||
|
|
8a2062fefe | ||
|
|
2f63ad5b35 | ||
|
|
c78bba2343 | ||
|
|
d26c905c67 | ||
|
|
8fcc9caecc | ||
|
|
e7b097f558 | ||
|
|
5ee6f96cea | ||
|
|
dc634aff25 | ||
|
|
8e3b2dbb31 | ||
|
|
ba6f95e81b | ||
|
|
281066cb03 | ||
|
|
830b8877ba | ||
|
|
9912ab6770 | ||
|
|
299ab428ce | ||
|
|
e6ef05d5f3 | ||
|
|
0f401ff08b | ||
|
|
5558128541 | ||
|
|
e33c72dfc6 | ||
|
|
44a877aa88 | ||
|
|
6b6fe3d8e4 | ||
|
|
4c1a6e004a | ||
|
|
6e6ada18c6 | ||
|
|
b35a131069 | ||
|
|
1728756255 | ||
|
|
a12a6b9962 | ||
|
|
852bd35065 | ||
|
|
a5db50d005 | ||
|
|
f3eba36c4c | ||
|
|
529d329ce1 | ||
|
|
47a6d388c7 | ||
|
|
c02b6b6b21 | ||
|
|
3b28bc9910 | ||
|
|
fc003bcecb | ||
|
|
38d3a73808 | ||
|
|
73b3c2d861 | ||
|
|
4670e00ff5 | ||
|
|
287df2fe49 | ||
|
|
e0fbd07309 | ||
|
|
eaee098e1f | ||
|
|
43d9e9d07f | ||
|
|
c420fab52b | ||
|
|
6469a1fda3 | ||
|
|
7f50d9a4b0 | ||
|
|
da6ea110b5 | ||
|
|
fb777e1f79 | ||
|
|
360bb61d86 | ||
|
|
847e551f39 | ||
|
|
d4122504a2 | ||
|
|
2c4226c42b | ||
|
|
86173db853 | ||
|
|
9034c56c6c | ||
|
|
e33ffaca12 | ||
|
|
853eae51e0 | ||
|
|
b4be380889 | ||
|
|
ff80280b01 | ||
|
|
e45641bd17 | ||
|
|
d5a37b0293 | ||
|
|
6819050722 | ||
|
|
88db4e6b9e | ||
|
|
be86dd85e4 | ||
|
|
3df9357103 | ||
|
|
992e92a46e | ||
|
|
3247812e34 | ||
|
|
a5cdb7d5bd | ||
|
|
4a6bb116c4 | ||
|
|
2819ffb520 | ||
|
|
964c7e8f6d | ||
|
|
f6a45ac5ac | ||
|
|
2e86f0d8d7 | ||
|
|
e2a29d49ca | ||
|
|
b99674103d | ||
|
|
41f81a0143 | ||
|
|
36309aa2be | ||
|
|
eb9d8d8cd4 | ||
|
|
f7ccba3edf | ||
|
|
eb77ebe26c | ||
|
|
f5e2354c9d | ||
|
|
f4cc56f494 | ||
|
|
be86c7fc87 | ||
|
|
6205171362 | ||
|
|
ab568a17cf | ||
|
|
fe591284be | ||
|
|
7122aafce5 | ||
|
|
5ffba305c8 | ||
|
|
ceee538af5 | ||
|
|
054307e7ed | ||
|
|
8cd358bef8 | ||
|
|
eeb9cdfc94 | ||
|
|
16fe5f8b50 | ||
|
|
041e7f2eee | ||
|
|
ab12438030 | ||
|
|
c220e58f9e | ||
|
|
6bd05ad472 | ||
|
|
90ec4c0af0 | ||
|
|
52e9196d7e | ||
|
|
f7e85c371e | ||
|
|
f5cbf8fbe1 | ||
|
|
7d7e640e0b | ||
|
|
e4f0e40eac | ||
|
|
6e3bc4f073 | ||
|
|
c36e936b60 | ||
|
|
761ffa729f | ||
|
|
1e26a8baed | ||
|
|
7c337e00d2 | ||
|
|
7e8481afd1 | ||
|
|
1266cec2fe | ||
|
|
3667a6f5b3 | ||
|
|
deb21fbae9 | ||
|
|
057039f782 | ||
|
|
d7c738a09a | ||
|
|
a981e2adbc | ||
|
|
88fce8539f | ||
|
|
4f1aa191b3 | ||
|
|
e540d1cd77 | ||
|
|
fd47c36136 | ||
|
|
d9f5f07e28 | ||
|
|
b31db9ee96 | ||
|
|
1021f9aa5e | ||
|
|
320bfc1be7 | ||
|
|
b820455c6e | ||
|
|
5c4436c977 | ||
|
|
a78a03744d | ||
|
|
a329fdde51 | ||
|
|
31d3c84422 | ||
|
|
afff52a3ba | ||
|
|
8931b30d84 | ||
|
|
27dc105f51 | ||
|
|
3964038fe6 | ||
|
|
b510d77535 | ||
|
|
56c7754cab | ||
|
|
92e2c81aff | ||
|
|
a70a49a018 | ||
|
|
61b05a0025 | ||
|
|
7c9882eb24 | ||
|
|
0d7f6fc76a | ||
|
|
a9e96d724d | ||
|
|
d9e427f09c | ||
|
|
a23e3dbee1 | ||
|
|
400ca0e467 | ||
|
|
9536b85c07 | ||
|
|
4d318c79b2 | ||
|
|
1ad90a916b | ||
|
|
8ab9025e31 | ||
|
|
9e5df8e448 | ||
|
|
96d13fe62b | ||
|
|
089458b096 | ||
|
|
7c1722c60d | ||
|
|
c020c3213e | ||
|
|
930875ef77 | ||
|
|
3b979c5450 | ||
|
|
339ad7ce73 | ||
|
|
676517e08e | ||
|
|
52108cecc0 | ||
|
|
addd641f3a | ||
|
|
f63e4be392 | ||
|
|
ca55d11f84 | ||
|
|
abe7f8b457 | ||
|
|
a078befcbe | ||
|
|
f12797a447 | ||
|
|
fa8e921f66 | ||
|
|
4287ade5b4 | ||
|
|
7398053149 | ||
|
|
4d1f3f7a6c | ||
|
|
aff686df91 | ||
|
|
637f90621d | ||
|
|
6d0624aca3 | ||
|
|
085ea80371 | ||
|
|
ab0ff06205 | ||
|
|
79eeb47031 | ||
|
|
9911b7496f | ||
|
|
3dbd453f41 | ||
|
|
731339627f | ||
|
|
26e71a1850 | ||
|
|
db01bad30f | ||
|
|
6ff28e017d | ||
|
|
4664eb5230 | ||
|
|
744ecaa5b6 | ||
|
|
76d761ccd3 | ||
|
|
eef0c1f34c | ||
|
|
82a2431327 | ||
|
|
96fc37f145 | ||
|
|
3a87756fed | ||
|
|
c8ec4a1b0b | ||
|
|
699e1a3a82 | ||
|
|
64214a2183 | ||
|
|
0fcb905b0d | ||
|
|
4be63cfb55 | ||
|
|
ca64056836 | ||
|
|
df77428443 | ||
|
|
3e583572b3 | ||
|
|
43d8f27dca | ||
|
|
b045299113 | ||
|
|
13baedc55b | ||
|
|
9400d9ac83 | ||
|
|
341e18b497 | ||
|
|
339a1820fd | ||
|
|
cec2538ca9 | ||
|
|
28f7e60d47 | ||
|
|
544b82e493 | ||
|
|
8789af8db8 | ||
|
|
1ad6a1b5e9 | ||
|
|
6e150083bb | ||
|
|
98d8baabbd | ||
|
|
c1d2e00ec5 | ||
|
|
ad8bd4ece8 | ||
|
|
2f0550c4c1 | ||
|
|
98057eba77 | ||
|
|
097f9d8c52 | ||
|
|
60447e59ef | ||
|
|
94e6ae7a69 | ||
|
|
f670738987 | ||
|
|
b6a338cb29 | ||
|
|
4726fcfc25 | ||
|
|
15bd07e923 | ||
|
|
fdf355878c | ||
|
|
da989402f2 | ||
|
|
10f0c85cfc | ||
|
|
70ba4ee5d5 | ||
|
|
31f528b15d | ||
|
|
86140095b5 | ||
|
|
8e1d3ba50e | ||
|
|
37210fe7e2 | ||
|
|
0e1dba934f | ||
|
|
11d01d371f | ||
|
|
76c3ef7446 | ||
|
|
659f7f3168 | ||
|
|
3d3bf9c730 | ||
|
|
4017e8706c | ||
|
|
3ce54f35b3 | ||
|
|
ebc06fba67 | ||
|
|
e979c039f9 | ||
|
|
90acf770b5 | ||
|
|
0d89e45690 | ||
|
|
1948c7e6dd | ||
|
|
a6db6a0070 | ||
|
|
fdb2fe6dc2 | ||
|
|
a2115c5d17 | ||
|
|
4fe55663df | ||
|
|
ae1552ee99 | ||
|
|
debf380122 | ||
|
|
ddb038d349 | ||
|
|
b7cc9dffac | ||
|
|
e1b81fed33 | ||
|
|
5d58f1bbfe | ||
|
|
fcd1cb666c | ||
|
|
4f19a9cb9f | ||
|
|
0023adb47a | ||
|
|
81fe8dcfe1 | ||
|
|
d527834a1d | ||
|
|
89c333e3e5 | ||
|
|
0d97d00b6c | ||
|
|
e7adda52b3 | ||
|
|
7432d073af | ||
|
|
04e2ab2c02 | ||
|
|
b7fcc08976 | ||
|
|
7722e53f12 | ||
|
|
2c3ee16272 | ||
|
|
19112771d6 | ||
|
|
4c7c5ff667 | ||
|
|
d7e915616d | ||
|
|
67c8e7f414 | ||
|
|
74eb3e0914 | ||
|
|
79fe664f19 | ||
|
|
5f0477f47b | ||
|
|
7bbce69721 | ||
|
|
870d6541f2 | ||
|
|
02c27b113c | ||
|
|
86d4bc3aea | ||
|
|
761772d7e1 | ||
|
|
54ef01b54b | ||
|
|
9311c4421a | ||
|
|
aaa4f448cf | ||
|
|
5f8b524619 | ||
|
|
08111768a2 | ||
|
|
1b827d7b6f | ||
|
|
a005fb019f | ||
|
|
b5e5760d01 | ||
|
|
cf2bc94e5c | ||
|
|
26f0cf69d3 | ||
|
|
61836c1b70 | ||
|
|
2a1b0c8d65 | ||
|
|
75a8e30f4f | ||
|
|
716b87a026 | ||
|
|
08b229e13f | ||
|
|
a529a80108 | ||
|
|
c81898cbc4 | ||
|
|
330591fdfc | ||
|
|
c7503f5240 | ||
|
|
eff371c866 | ||
|
|
8dc899dee4 | ||
|
|
cc3d7bd0fc | ||
|
|
7df4c86bdd | ||
|
|
c313e32a8b | ||
|
|
77519b51db | ||
|
|
1a01868e35 | ||
|
|
563d3e5948 | ||
|
|
1187ee7dad | ||
|
|
7c5921e736 | ||
|
|
399f94bfb4 | ||
|
|
1fa29843fa | ||
|
|
ee0449b17c | ||
|
|
e28eddc51f | ||
|
|
d82a612a90 | ||
|
|
e7e8f4b333 | ||
|
|
a6fbcb4220 | ||
|
|
8164032a2e | ||
|
|
a5804a750b | ||
|
|
81025661a9 | ||
|
|
4ece7eb6f4 | ||
|
|
0bb01b7df0 | ||
|
|
1c56e95e28 | ||
|
|
446124a258 | ||
|
|
583b0b67ab | ||
|
|
584502d4a0 | ||
|
|
d8803d5ae6 | ||
|
|
acfb4b5b9f | ||
|
|
0ddd3ea217 | ||
|
|
6a8517f274 | ||
|
|
94d511cdbd | ||
|
|
ec5d747328 | ||
|
|
c6880b2533 | ||
|
|
eb6eb3e630 | ||
|
|
ae4eb3c9ac | ||
|
|
ba0e826d83 | ||
|
|
f3fef74b09 | ||
|
|
014f62b649 | ||
|
|
55eab3b74b | ||
|
|
dc0fcb98df | ||
|
|
d24a9c8f5a | ||
|
|
42fe218b9f | ||
|
|
956006b741 | ||
|
|
167066fed4 | ||
|
|
525de5d335 | ||
|
|
367eb1f125 | ||
|
|
3444961787 | ||
|
|
710069c19e | ||
|
|
ddd3a617ca | ||
|
|
6434abbfc6 | ||
|
|
e45c100762 | ||
|
|
5a22a8e7f9 | ||
|
|
d6c764573c | ||
|
|
9d35d08ab6 | ||
|
|
f7b61702a0 | ||
|
|
983180bb8b | ||
|
|
cdb0392159 | ||
|
|
1891f5b395 | ||
|
|
a3963619f6 | ||
|
|
34994068a4 | ||
|
|
afaad0ada6 | ||
|
|
05f9cb3b77 | ||
|
|
1988a456a7 | ||
|
|
69216cc5a5 | ||
|
|
2cf6fa4c8b | ||
|
|
a61710b868 | ||
|
|
20f7563f3d | ||
|
|
3df2eff4bd | ||
|
|
a415ebd026 | ||
|
|
52ee3d01ae | ||
|
|
e59f992be6 | ||
|
|
8bae7722a2 | ||
|
|
0d7dba92c8 | ||
|
|
ce1390aedc | ||
|
|
287a9ee76e | ||
|
|
96b0f6c16d | ||
|
|
e1612ea59d | ||
|
|
71f4ea44eb | ||
|
|
35295bdbee | ||
|
|
aa8d6f3e86 | ||
|
|
62aa5dd415 | ||
|
|
673c55a2fe | ||
|
|
949ce10e88 | ||
|
|
8dee823e61 | ||
|
|
5d86336746 | ||
|
|
5b89f78a89 | ||
|
|
85a5668dba | ||
|
|
c943ca5404 | ||
|
|
1c7f8707fd | ||
|
|
a21c46e70b | ||
|
|
f3c26535ad | ||
|
|
2329694222 | ||
|
|
206a975752 | ||
|
|
9677bf0f30 | ||
|
|
6d6496ed52 | ||
|
|
7d9cf7c0bb | ||
|
|
55525742f4 | ||
|
|
c693b5a55c | ||
|
|
6b6443dead | ||
|
|
54b5fd537f | ||
|
|
0b99d4f1d1 | ||
|
|
3c07d3a3d3 | ||
|
|
1d1a64653c | ||
|
|
297e6f1917 | ||
|
|
b948e2c59e | ||
|
|
18096abb29 | ||
|
|
0aa08a2e34 | ||
|
|
f20af72312 | ||
|
|
7ef643360d | ||
|
|
76c828c627 | ||
|
|
281cfff026 | ||
|
|
64a5c5d1be | ||
|
|
7b8b797375 | ||
|
|
a1a382dbc9 | ||
|
|
19f6c524bf | ||
|
|
8dbdf6314c | ||
|
|
9c54e18bf0 | ||
|
|
9aba74e55a | ||
|
|
e4317d2031 | ||
|
|
61775daf00 | ||
|
|
86d8f3ee19 | ||
|
|
cb1fbf9f63 | ||
|
|
3005764c18 | ||
|
|
b1e8b4e65d | ||
|
|
c6149e2f02 | ||
|
|
aa5c99fa01 | ||
|
|
9c200f5471 | ||
|
|
ec06417d52 | ||
|
|
a4346646f1 | ||
|
|
a70c09e2a2 | ||
|
|
0f9e0abbee | ||
|
|
e77dbf325f | ||
|
|
f03620ea15 | ||
|
|
47b2e238e5 | ||
|
|
ad35cdac74 | ||
|
|
4eba5d8c86 | ||
|
|
e69adea539 | ||
|
|
9660cbcd6b | ||
|
|
9c9c83ccb9 | ||
|
|
1d42fb5f4a | ||
|
|
e119769480 | ||
|
|
b2dba9bf1f | ||
|
|
932cc129ee | ||
|
|
1a42839ba7 | ||
|
|
232a938c75 | ||
|
|
69ab085290 | ||
|
|
5f09d0ecc2 | ||
|
|
76b46e7707 | ||
|
|
6217896145 | ||
|
|
ee7ca0941a | ||
|
|
f8492ffeaa | ||
|
|
308595638a | ||
|
|
0bd8d6e2e1 | ||
|
|
160065c5bb | ||
|
|
ae0d6e3e36 | ||
|
|
6fa8a01c72 | ||
|
|
3f6916cf29 | ||
|
|
a4470ae7b2 | ||
|
|
251718e4c1 | ||
|
|
c504a5e783 | ||
|
|
f6fb2c95ef | ||
|
|
708311267a | ||
|
|
cdd1d7a618 | ||
|
|
2f324768b2 | ||
|
|
6ef18c21c9 | ||
|
|
b38c0add30 | ||
|
|
b900df5258 | ||
|
|
a2a54ffc5f | ||
|
|
20c04a13e6 | ||
|
|
a291745eeb | ||
|
|
0862caf27e | ||
|
|
cb1bab1a04 | ||
|
|
96afc1cfd5 | ||
|
|
24a8c25ab5 | ||
|
|
d1e7d1d96c | ||
|
|
18f547734e | ||
|
|
be3b365a34 | ||
|
|
b2b2dafc28 | ||
|
|
14ab6cdd69 | ||
|
|
eeec060df0 | ||
|
|
0efb7b1eea | ||
|
|
f000f705ea | ||
|
|
2749cc1ede | ||
|
|
a44e4f2cf8 | ||
|
|
30b10f947a | ||
|
|
731c6802d7 | ||
|
|
4cfb986f27 | ||
|
|
9cfc8a9d5c | ||
|
|
18327cd0e4 | ||
|
|
2022cfe07e | ||
|
|
47b71e6ee9 | ||
|
|
74633553a9 | ||
|
|
376bf1d4aa | ||
|
|
d318fb79d2 | ||
|
|
2840dcd2a6 | ||
|
|
0cc361f3e7 | ||
|
|
baecb96e8a | ||
|
|
6181f5e404 | ||
|
|
d952c79a7b | ||
|
|
3dfb6b3353 | ||
|
|
48bd505c0b | ||
|
|
ab2d91bd6b | ||
|
|
3b2eead381 | ||
|
|
f3d2a9db09 | ||
|
|
8bbf6ac010 | ||
|
|
38e952e8ae | ||
|
|
fa9fed1c3a | ||
|
|
f6301f6888 | ||
|
|
44907e6064 | ||
|
|
907e99623c | ||
|
|
231671b9ff | ||
|
|
4f1a0b2c21 | ||
|
|
260c497cdd | ||
|
|
313fce7b61 | ||
|
|
2f877235a3 | ||
|
|
309fa55bbb | ||
|
|
4b8747e440 | ||
|
|
2ff7a0edef | ||
|
|
442cbb062d | ||
|
|
c971ca4c86 | ||
|
|
9babf3929b | ||
|
|
2ec0be9e77 | ||
|
|
c2d1c2d319 | ||
|
|
162f677def | ||
|
|
2875462425 | ||
|
|
a1d915990b | ||
|
|
b002265ee3 | ||
|
|
bd31fb2145 | ||
|
|
b506821d43 | ||
|
|
4bfb49b3cf | ||
|
|
9981a51e42 | ||
|
|
ebb326afe6 | ||
|
|
0d1aa74d6f | ||
|
|
a9c5de8654 | ||
|
|
0f32c841a6 | ||
|
|
41a8d5167f | ||
|
|
8f41e4fa4d | ||
|
|
de50494505 | ||
|
|
3d1def0132 | ||
|
|
0a29f5110d | ||
|
|
8b71d35458 | ||
|
|
760e353528 | ||
|
|
3627fedbea | ||
|
|
bbb5cf05db | ||
|
|
ebb01b84b8 | ||
|
|
a0d48e7e7e | ||
|
|
1fcfa22222 | ||
|
|
c9fb4e2c8d | ||
|
|
6e7ca5e1eb | ||
|
|
954b274789 | ||
|
|
0d5ac5a738 | ||
|
|
c209a35820 | ||
|
|
dd2b6750db | ||
|
|
4bb89bca9e | ||
|
|
ac63b8370e | ||
|
|
882d29dd87 | ||
|
|
ee373e7f19 | ||
|
|
8d72476e2b | ||
|
|
02756aa8ba | ||
|
|
072dfb9e4e | ||
|
|
0636c39bb1 | ||
|
|
a2e623c011 | ||
|
|
aa79dd6895 | ||
|
|
60cad2caed | ||
|
|
114c9c36b1 | ||
|
|
fd5bc65cc8 | ||
|
|
e041863905 | ||
|
|
0a05123a6c | ||
|
|
2afe316721 | ||
|
|
7e69565fe6 | ||
|
|
ccae144d62 | ||
|
|
5d5ca32fa1 | ||
|
|
52b8dad8ec | ||
|
|
cc684e330b | ||
|
|
85c6749216 | ||
|
|
30e5e8aca5 | ||
|
|
b900a6b42f | ||
|
|
15780a1ea0 | ||
|
|
92ada7cc52 | ||
|
|
53ca4761cc | ||
|
|
52cfa39716 | ||
|
|
b3bad17d1a | ||
|
|
feaaf1dbea | ||
|
|
82bf227e91 | ||
|
|
8807a2dfc4 | ||
|
|
bcb38217c4 | ||
|
|
af32f9fdda | ||
|
|
357d5de5b9 | ||
|
|
0501f02b06 | ||
|
|
689f9faba4 | ||
|
|
82686bdcaa | ||
|
|
14b1d089b6 | ||
|
|
a296239bdd | ||
|
|
0b0896cdd2 | ||
|
|
2d3e956ae0 | ||
|
|
36b7c06975 | ||
|
|
42182852f5 | ||
|
|
560b79cbff | ||
|
|
a6d799d705 | ||
|
|
64aecc6720 | ||
|
|
8ac40b4dea | ||
|
|
43b8fe1cd0 | ||
|
|
39d764ed58 | ||
|
|
a6ebe229e3 | ||
|
|
5c914f204a | ||
|
|
8876e58f34 | ||
|
|
7321a84d4c | ||
|
|
bb11c28246 | ||
|
|
8d9f136d06 | ||
|
|
00b4e083fd | ||
|
|
4cfe3df1f5 | ||
|
|
8f2d60ec26 | ||
|
|
123b23fa95 | ||
|
|
423a5d54a1 | ||
|
|
8bbf6bcf17 | ||
|
|
ea46f5e0e5 | ||
|
|
7f6c848242 | ||
|
|
559d50138f | ||
|
|
11d8cdc6ad | ||
|
|
e49978dafe | ||
|
|
e1d9e533b5 | ||
|
|
f946dd7198 | ||
|
|
1702c8c4bf | ||
|
|
afda1385bd | ||
|
|
fec38ca4ed | ||
|
|
ec1edeb5fa | ||
|
|
b0ec114685 | ||
|
|
c92da5a605 | ||
|
|
06e2dd037e | ||
|
|
34f0a19309 | ||
|
|
772e3c07b4 | ||
|
|
360ff3cf58 | ||
|
|
5dfe910023 | ||
|
|
91b73acb19 | ||
|
|
87d3af6475 | ||
|
|
98c1509f34 | ||
|
|
98939a05b6 | ||
|
|
d28134b8f3 | ||
|
|
8583eba015 | ||
|
|
5894b98f99 | ||
|
|
5de3a0ff3d | ||
|
|
10ca15f3fa | ||
|
|
da736b31b2 | ||
|
|
fa9ac569b8 | ||
|
|
10a10fb834 | ||
|
|
0f997d0dc3 | ||
|
|
b0eedd77f6 | ||
|
|
502aef5aaf | ||
|
|
9f8cfb1c62 | ||
|
|
c163b5f7a0 | ||
|
|
20da8b8f90 | ||
|
|
ae93dc13ab | ||
|
|
77e87e6148 | ||
|
|
a6e700e665 | ||
|
|
4d7aff707e | ||
|
|
d137b56a5b | ||
|
|
7806f3dd4b | ||
|
|
1e24b3a09e | ||
|
|
73b979e601 | ||
|
|
ebae8092cb | ||
|
|
2e21922eb6 | ||
|
|
1c3d2b94be | ||
|
|
48d2335d73 | ||
|
|
96ea4ae91c | ||
|
|
7af5726108 | ||
|
|
69d4646f4e | ||
|
|
8bd11f3ec2 | ||
|
|
47a9d527ab | ||
|
|
d9907c972b | ||
|
|
1444bfb2c8 | ||
|
|
14975faa60 | ||
|
|
3f12464861 | ||
|
|
de12116417 | ||
|
|
28b987aec9 | ||
|
|
fb596f3bb7 | ||
|
|
84948b39df | ||
|
|
cf32ad7fe3 | ||
|
|
ad0e439604 | ||
|
|
5456583294 | ||
|
|
f1845cbee8 | ||
|
|
51cc37b69d | ||
|
|
ff1b10dca1 | ||
|
|
ebeb17e2e0 | ||
|
|
137de5b157 | ||
|
|
224328e404 | ||
|
|
1611b9ed80 | ||
|
|
8a4af56fc6 | ||
|
|
05cfe06607 | ||
|
|
b37a68cc8f | ||
|
|
a2688c872d | ||
|
|
5b50f99e1e | ||
|
|
b8994b6130 | ||
|
|
d7917c584a | ||
|
|
544d845585 | ||
|
|
a6efc2d1b8 | ||
|
|
3189772e07 | ||
|
|
08a638237d | ||
|
|
d8cdd1567f | ||
|
|
cbfb39d1be | ||
|
|
a4d64c7f49 | ||
|
|
1e7b6c029c | ||
|
|
3634d7e97a | ||
|
|
53d7efea76 | ||
|
|
002684d693 | ||
|
|
c038b8aa56 | ||
|
|
c5f17d45c1 | ||
|
|
31439046e0 | ||
|
|
11d0ebc841 | ||
|
|
cecfdbf72d | ||
|
|
f0f61f6d0d | ||
|
|
d68ff71004 | ||
|
|
591e85e928 | ||
|
|
c69ed6ea39 | ||
|
|
55a08fac68 | ||
|
|
2fc281d01f | ||
|
|
d326582cab | ||
|
|
f4c630abb3 | ||
|
|
c2cccfc585 | ||
|
|
3c5406b35c | ||
|
|
5e3225cc44 | ||
|
|
61118caa86 | ||
|
|
348be7ec60 | ||
|
|
3ff55e9680 | ||
|
|
cbb92dfaf0 | ||
|
|
019bfef899 | ||
|
|
0709249f4c | ||
|
|
89c9c66736 | ||
|
|
347ed3b93c | ||
|
|
5b73c3609b | ||
|
|
eebeb52b29 | ||
|
|
6ec6cfc767 | ||
|
|
44181ea836 | ||
|
|
c80c7bf999 | ||
|
|
ffa5ebf3f4 | ||
|
|
926c41bd29 | ||
|
|
1182301ca7 | ||
|
|
010fa0b331 | ||
|
|
4ca7d975af | ||
|
|
b774111020 | ||
|
|
78260d890b | ||
|
|
4b67fefe5a | ||
|
|
3a8012cbf2 | ||
|
|
a53cdc5b08 | ||
|
|
5d20c4fb35 | ||
|
|
a04549cc75 | ||
|
|
bc7535bc7f | ||
|
|
83357f047d | ||
|
|
b6699c3f07 | ||
|
|
016bc5ceb3 | ||
|
|
ed65f7dc34 | ||
|
|
4d50a2b4d6 | ||
|
|
7f4301668f | ||
|
|
29a1bb07e5 | ||
|
|
99e9a90081 | ||
|
|
715020e334 | ||
|
|
2952886010 | ||
|
|
613e7d2a65 | ||
|
|
6a2c471077 | ||
|
|
b79aa05e3b | ||
|
|
500b5a181d | ||
|
|
2b8a5406f9 | ||
|
|
2f35ae90fe | ||
|
|
0fca32a7aa | ||
|
|
02c9b66a6c | ||
|
|
539d4c1030 | ||
|
|
aa6d1a0c19 | ||
|
|
777c47acbe | ||
|
|
5776c3c4c6 | ||
|
|
0c3d346cb7 | ||
|
|
1c23bc5670 | ||
|
|
8ea975d070 | ||
|
|
6c69aa532e | ||
|
|
6264c9b2a9 | ||
|
|
fc92414273 | ||
|
|
53154d71c3 | ||
|
|
8cebec9802 | ||
|
|
0209d1605d | ||
|
|
c8a0d0aaf9 | ||
|
|
0cc46efa09 | ||
|
|
22c268e6c9 | ||
|
|
dd0514e2cc | ||
|
|
f6e7d01450 | ||
|
|
edc540211c | ||
|
|
2eed3a3cc8 | ||
|
|
1aa44cc797 | ||
|
|
37c8fd0eba | ||
|
|
786aa98da1 | ||
|
|
413e0853d7 | ||
|
|
8e4560c42f | ||
|
|
450ea83495 | ||
|
|
af8c1d81a3 | ||
|
|
b589427941 | ||
|
|
f0fa285f75 | ||
|
|
a0b5b07010 | ||
|
|
5c95c2ac23 | ||
|
|
454dbbc593 | ||
|
|
c1c6c0bf45 | ||
|
|
dff2922aa7 | ||
|
|
f253a058d3 | ||
|
|
b3c6a33185 | ||
|
|
31780d0e26 | ||
|
|
f489ab3147 | ||
|
|
29cf84c692 | ||
|
|
e454929558 | ||
|
|
105f6a6323 | ||
|
|
8845701719 | ||
|
|
b7683e3a5d | ||
|
|
0ee2166cc5 | ||
|
|
067707e367 | ||
|
|
8211a33c7f | ||
|
|
7441052be6 | ||
|
|
90ccf05f82 | ||
|
|
112161bd33 | ||
|
|
5ba4bf35c5 | ||
|
|
aa93b18c2c | ||
|
|
ba702545fc | ||
|
|
436369100d | ||
|
|
6535bd42e6 | ||
|
|
64cee65ebc | ||
|
|
ba544377fb | ||
|
|
5165148f72 | ||
|
|
8d970ca70b | ||
|
|
383b8b8ca9 | ||
|
|
5ce60a20f2 | ||
|
|
49131a7d94 | ||
|
|
d884c5bad1 | ||
|
|
86bdc0a3ee | ||
|
|
1a4e245f3e | ||
|
|
975efcbaee | ||
|
|
90e1b1fd7d | ||
|
|
86207c1960 | ||
|
|
9c62bca11a | ||
|
|
75d61b33bc | ||
|
|
3df760b83a | ||
|
|
e34aa5a3b3 | ||
|
|
985e4c4154 | ||
|
|
9598fa8759 | ||
|
|
ac8173515a | ||
|
|
944f858021 | ||
|
|
27a3d9f9aa | ||
|
|
48fc582f66 | ||
|
|
81de1028bc | ||
|
|
850815cb6e | ||
|
|
c4e7870ac1 | ||
|
|
4584eccea0 | ||
|
|
ed3ecd801e | ||
|
|
b166f13eb5 | ||
|
|
076944d920 | ||
|
|
09e20e0bd8 | ||
|
|
a717831da4 | ||
|
|
4dfc8f1f0b | ||
|
|
5b57fe0a1e | ||
|
|
89bbe14c50 | ||
|
|
6635b48cd1 | ||
|
|
675f605d44 | ||
|
|
6a983d4287 | ||
|
|
1a159e08af | ||
|
|
dd030860c4 | ||
|
|
2d09372434 | ||
|
|
67912e0032 | ||
|
|
f3dea9a595 | ||
|
|
fb7b393278 | ||
|
|
61e5ec4b1e | ||
|
|
6f344eab03 | ||
|
|
41eacc84a0 | ||
|
|
01b8b3c7d2 | ||
|
|
8fecd4b4f1 | ||
|
|
41fc5f2dbe | ||
|
|
bcfd3d68f5 | ||
|
|
d3a6461d71 | ||
|
|
17478fdede | ||
|
|
4dca00cec8 | ||
|
|
061d774b99 | ||
|
|
20469da285 | ||
|
|
e18e3eba76 | ||
|
|
de9fcfe348 | ||
|
|
7e5b06813d | ||
|
|
1892c8bf97 | ||
|
|
5e428e7d0d | ||
|
|
c9777d2659 | ||
|
|
3aedd213a9 | ||
|
|
e0c1ea9038 | ||
|
|
6f88c6a634 | ||
|
|
58aa573ac2 | ||
|
|
0ed110b969 | ||
|
|
b28dea4e10 | ||
|
|
21f0db692d | ||
|
|
4d4e08ec1c | ||
|
|
25074d6c22 | ||
|
|
0cfc80c4c3 | ||
|
|
b8bb15fb51 | ||
|
|
994df5a248 | ||
|
|
6657b9c73a | ||
|
|
ba0d04a986 | ||
|
|
3cb9eb30d3 | ||
|
|
e0b624e20e | ||
|
|
c27309edcb | ||
|
|
3207e61222 | ||
|
|
3671233089 | ||
|
|
3a828611e9 | ||
|
|
8bdcef40e4 | ||
|
|
91c9e62123 | ||
|
|
0e3453536e | ||
|
|
eaff5a1412 | ||
|
|
216e0d5b91 | ||
|
|
0965991600 | ||
|
|
74aa1a4378 | ||
|
|
5531192151 | ||
|
|
a620626a33 | ||
|
|
f13a71c66b | ||
|
|
3ef3e07a49 | ||
|
|
76fa8f1838 | ||
|
|
f2b139ed1f | ||
|
|
a6e7fcd140 | ||
|
|
76cf3fcb43 | ||
|
|
121dd39f9f | ||
|
|
a263253545 | ||
|
|
76d6ac4b06 | ||
|
|
60f20632e2 | ||
|
|
ae519a247f | ||
|
|
8de916bcee | ||
|
|
1631d5f9b9 | ||
|
|
98c82b899e | ||
|
|
6d3a1eac3b | ||
|
|
b8f702a0af | ||
|
|
43c9825c2a | ||
|
|
fbf6643607 | ||
|
|
3f36baa9f4 | ||
|
|
b0e69a0500 | ||
|
|
856640b54f | ||
|
|
76240b3a39 | ||
|
|
34b3c72e4e | ||
|
|
c264592d69 | ||
|
|
1bd06bd0c4 | ||
|
|
9540ccdf1f | ||
|
|
98bf13c36b | ||
|
|
7e76e56387 | ||
|
|
759d8ac6ee | ||
|
|
959e8dfe06 | ||
|
|
7f57b076a6 | ||
|
|
7144c4212a | ||
|
|
399a6f0bd1 | ||
|
|
3d47929968 | ||
|
|
03919683f9 | ||
|
|
5cda6c4582 | ||
|
|
83ed49149c | ||
|
|
67d990904e | ||
|
|
f3df90b2bb | ||
|
|
11e46bd7ae | ||
|
|
c09a0318b7 | ||
|
|
fe716ba686 | ||
|
|
9a97800813 | ||
|
|
e881f6175a | ||
|
|
36e77b1059 | ||
|
|
a9c32ace06 | ||
|
|
2c5d4daac5 | ||
|
|
b46343583c | ||
|
|
816c2b5a79 | ||
|
|
a78568b7e9 | ||
|
|
ee5b2a1e51 | ||
|
|
e4b21c74fc | ||
|
|
4edcb93dca | ||
|
|
15f80eea31 | ||
|
|
81cebb8b79 | ||
|
|
a4e75b3dfd | ||
|
|
cddaba8ede | ||
|
|
49c5f38d3d | ||
|
|
f8296228f1 | ||
|
|
930b0c4b8a | ||
|
|
3d153f7985 | ||
|
|
ee1d9ec019 | ||
|
|
614b448a67 | ||
|
|
a19c9f179d | ||
|
|
a784b943c1 | ||
|
|
d202709808 | ||
|
|
51ff0abb05 | ||
|
|
492a9e2415 | ||
|
|
7bf7333d68 | ||
|
|
c20276e4ae | ||
|
|
9ca7047d71 | ||
|
|
ba3b2f1538 | ||
|
|
b010b7c434 | ||
|
|
9dc17a2536 | ||
|
|
5950bf7943 | ||
|
|
4141c803d8 | ||
|
|
ba1ba5f0fb | ||
|
|
51aa7bd321 | ||
|
|
09b88a4a55 | ||
|
|
f3481ca28f | ||
|
|
ba30bad57b | ||
|
|
ffb1ac674c | ||
|
|
3be34589e8 | ||
|
|
d87e615209 | ||
|
|
92511cff48 | ||
|
|
7b82159865 | ||
|
|
52c11dce31 | ||
|
|
3ba0885a3e | ||
|
|
023c9d8dd5 | ||
|
|
4c97a04e2e | ||
|
|
fb05e1cdf6 | ||
|
|
ceb4678956 | ||
|
|
0cb8499b73 | ||
|
|
4d62ec32e0 | ||
|
|
75ef718820 | ||
|
|
c927df3fa1 | ||
|
|
4700aea951 | ||
|
|
60cdb821db | ||
|
|
0ef888cd3e | ||
|
|
26c777d516 | ||
|
|
9555339007 | ||
|
|
2fbe371f53 | ||
|
|
15181d7811 | ||
|
|
1edba2110f | ||
|
|
54d853ebc3 | ||
|
|
f5cda4cbb1 | ||
|
|
f9a6348a53 | ||
|
|
a7ffd9d19c | ||
|
|
29db322e8f | ||
|
|
25dc89eb9b | ||
|
|
716630c0eb | ||
|
|
4f59b6587f | ||
|
|
9befdf1d20 | ||
|
|
75d44c0452 | ||
|
|
a58a636838 | ||
|
|
9fdab72dd7 | ||
|
|
b2a97be7f4 | ||
|
|
6471c9f478 | ||
|
|
4a3dc3c0e3 | ||
|
|
a2318e86bd | ||
|
|
a9164153d1 | ||
|
|
8795d38906 | ||
|
|
8cd44e3630 | ||
|
|
07e970c7e6 | ||
|
|
d1aa0d38c5 | ||
|
|
9e4d0f0be2 | ||
|
|
cd7638980a | ||
|
|
f733a5ef0e | ||
|
|
5da98aa687 | ||
|
|
0b6f3c66cd | ||
|
|
a01d9ac558 | ||
|
|
e46691a0bc | ||
|
|
732a40e107 | ||
|
|
29da3ade3c | ||
|
|
de908d6319 | ||
|
|
9c9c98ad2e | ||
|
|
5e0e9fce5d | ||
|
|
53ec8809cf | ||
|
|
863779065e | ||
|
|
0b33dac310 | ||
|
|
e2bce37720 | ||
|
|
228b4e426b | ||
|
|
a4974de937 | ||
|
|
22f41c9b99 | ||
|
|
a123c552cd | ||
|
|
b2172f4f8e | ||
|
|
dc1d1b6934 | ||
|
|
67475a7ed7 | ||
|
|
362ab3e4f9 | ||
|
|
2aed84d16b | ||
|
|
5deea1c015 | ||
|
|
99516f81b1 | ||
|
|
d6091d5a39 | ||
|
|
5a47825ece | ||
|
|
16f66ae794 | ||
|
|
7ce1d9e9a6 | ||
|
|
a70183bc80 | ||
|
|
332737217a | ||
|
|
bcbe37b716 | ||
|
|
f393b7449d | ||
|
|
531308d929 | ||
|
|
74e564cd46 | ||
|
|
42eae426df | ||
|
|
246e09319c | ||
|
|
f7a3296d8c | ||
|
|
3e4585c8fd | ||
|
|
3e84b6e15f | ||
|
|
d505d1ef4a | ||
|
|
70b2ae3edf | ||
|
|
9e5dba197c | ||
|
|
a61114c38b | ||
|
|
db98bbc114 | ||
|
|
e42633140e | ||
|
|
bd50e31325 | ||
|
|
b2c0518e6a | ||
|
|
d82e2718e2 | ||
|
|
18e377b4ff | ||
|
|
043b2e9c2e | ||
|
|
1b593194be | ||
|
|
35208f368c | ||
|
|
c788e59365 | ||
|
|
cb08f4a6a3 | ||
|
|
adbc603d24 | ||
|
|
6f81892e6b | ||
|
|
448be74335 | ||
|
|
1a5a1a93f6 | ||
|
|
d917188a46 | ||
|
|
b4e88ccb28 | ||
|
|
d916ba1ba1 | ||
|
|
33af4421f2 | ||
|
|
95e362c6da | ||
|
|
c58d983e3b | ||
|
|
a84c9d1ed9 | ||
|
|
c6a27f0178 | ||
|
|
67b6f1ca88 | ||
|
|
a4ff392503 | ||
|
|
40f51f506c | ||
|
|
eeb821f707 | ||
|
|
47d5566646 | ||
|
|
90bdfd97a6 | ||
|
|
b9865f110e | ||
|
|
07ef612968 | ||
|
|
019fdc7850 | ||
|
|
7c382796be | ||
|
|
b6acb8d0de | ||
|
|
6adbcb9755 | ||
|
|
e968089485 | ||
|
|
c2cd422ac6 | ||
|
|
36ca4ba63d | ||
|
|
ed4a1d12b9 | ||
|
|
a0aa8b4b61 | ||
|
|
2c059d58d9 | ||
|
|
cd346d3e22 | ||
|
|
561d93aa00 | ||
|
|
ddac197404 | ||
|
|
0e8e6f19b2 | ||
|
|
c03e4f9bf0 | ||
|
|
c3bb1f8166 | ||
|
|
959a7201b8 | ||
|
|
6c73d01142 | ||
|
|
2932ad5677 | ||
|
|
036bbcc53f | ||
|
|
6384e46da3 | ||
|
|
6e2fcc44bd | ||
|
|
8721fc2d0b | ||
|
|
c1facbb681 | ||
|
|
f2c33fa6fd | ||
|
|
5aae935038 | ||
|
|
11503177d1 | ||
|
|
9ab899a660 | ||
|
|
8937a13e0c | ||
|
|
19017d4061 | ||
|
|
f53ac639c6 | ||
|
|
f71165b556 | ||
|
|
350a404cb8 | ||
|
|
827c55741b | ||
|
|
e0c8c08936 | ||
|
|
4e397d07ea | ||
|
|
9eb8794149 | ||
|
|
dc24110311 | ||
|
|
b3e72fc37f | ||
|
|
90076b96df | ||
|
|
9c339a7227 | ||
|
|
e7a8b47f1a | ||
|
|
7ac7a4bc37 | ||
|
|
a628901dda | ||
|
|
2ab75dee27 | ||
|
|
a3f586cdab | ||
|
|
fcfd87168a | ||
|
|
95a0e8ab31 | ||
|
|
0c9caf04de | ||
|
|
21e8bbf290 | ||
|
|
3b408d83fe | ||
|
|
8573552e8c | ||
|
|
c7235be6e3 | ||
|
|
1c17d91c53 | ||
|
|
a070f0dac5 | ||
|
|
b480283c56 | ||
|
|
f5ce5e1465 | ||
|
|
d7db77a0cb | ||
|
|
346ac30120 | ||
|
|
07bb51b6b4 | ||
|
|
bbab9b61dd | ||
|
|
82e8372f17 | ||
|
|
e67ed82877 | ||
|
|
15ac971681 | ||
|
|
0c21e13012 | ||
|
|
d5fd72fd0d | ||
|
|
c7474d077b | ||
|
|
826b52d26f | ||
|
|
8c5a2bd6bb | ||
|
|
25a58453ff | ||
|
|
00fe865dbe | ||
|
|
9e9bececa9 | ||
|
|
90890074b0 | ||
|
|
31676a3540 | ||
|
|
6b9e941ee3 | ||
|
|
802d7fa6d5 | ||
|
|
3798cb8182 | ||
|
|
2c5fadbce3 | ||
|
|
58ece83395 | ||
|
|
c75c096aa8 | ||
|
|
ab961dc8b0 | ||
|
|
6ad47e83b4 | ||
|
|
241520e66d | ||
|
|
a13c20f603 | ||
|
|
db6251ad54 | ||
|
|
51eb1b81f6 | ||
|
|
2adc42e43e | ||
|
|
52cc46a237 | ||
|
|
a07b4dc038 | ||
|
|
739a543ea8 | ||
|
|
01c76c6606 | ||
|
|
d32f888db1 | ||
|
|
f7914dbf9a | ||
|
|
3ff94a009b | ||
|
|
1aeb3da83f | ||
|
|
e8e5b46e2b | ||
|
|
c9d67d4ddf | ||
|
|
8de5b7f548 | ||
|
|
9ee0f7b7e0 | ||
|
|
f1fd4544a3 | ||
|
|
349eb12fd5 | ||
|
|
6a8f17de1e | ||
|
|
b1277b9902 | ||
|
|
ed3883d21b | ||
|
|
ea558241e0 | ||
|
|
61aa2134a4 | ||
|
|
4eb76e2397 | ||
|
|
68e575362f | ||
|
|
aab3bb04cf | ||
|
|
481d81cb76 | ||
|
|
c6cb42e4fb | ||
|
|
2d43a89488 | ||
|
|
302ea8c260 | ||
|
|
a1f3462bc0 | ||
|
|
7476f3ac3b | ||
|
|
68b64fb610 | ||
|
|
34b537ee66 | ||
|
|
7a5dbeb782 | ||
|
|
6c06918ede | ||
|
|
ee8f293701 | ||
|
|
3b4a0225e2 | ||
|
|
c8e1edaae5 | ||
|
|
63d3fc9106 | ||
|
|
5d7324e42d | ||
|
|
be7b4458f2 | ||
|
|
7304956e39 | ||
|
|
c510eec090 | ||
|
|
1b167a4343 | ||
|
|
9ab5170197 | ||
|
|
a00e414faf | ||
|
|
4c5e19b6c6 | ||
|
|
ed26604a71 | ||
|
|
0fbd4bf044 | ||
|
|
d719e60cb4 | ||
|
|
0cb9d93d0c | ||
|
|
f5826b8014 | ||
|
|
4a47f55639 | ||
|
|
b884556ed8 | ||
|
|
c06b0f3d5e | ||
|
|
68ea60683a | ||
|
|
6df8c74d5b | ||
|
|
877e8e970c | ||
|
|
d56349a2aa | ||
|
|
67c03ff185 | ||
|
|
35e00cc2d8 | ||
|
|
064f6cb6f2 | ||
|
|
20ab8b4b41 | ||
|
|
7395d852c3 | ||
|
|
3ebf898e88 | ||
|
|
a4c886e4c8 | ||
|
|
1291dfdead | ||
|
|
df278aff3e | ||
|
|
7c510d6f43 | ||
|
|
7bbcb2f690 | ||
|
|
ad2695b1b7 | ||
|
|
9cbf062a70 | ||
|
|
ec645d9017 | ||
|
|
0d894c9dbe | ||
|
|
c6709b89c4 | ||
|
|
061bebc0d8 | ||
|
|
802e1d692b | ||
|
|
dbf33b344c | ||
|
|
b40228a61d | ||
|
|
da5a0e8722 | ||
|
|
200fc02848 | ||
|
|
7096217d39 | ||
|
|
f1eb83a013 | ||
|
|
fec82dbc86 | ||
|
|
7b1b47a8e6 | ||
|
|
8b9afce53a | ||
|
|
137db78b46 | ||
|
|
a3344c8e5e | ||
|
|
c173d09c56 | ||
|
|
cb49a3cfa1 | ||
|
|
adab80053d | ||
|
|
f106fb85d4 | ||
|
|
5fa6d850a2 | ||
|
|
4adfe93cc5 | ||
|
|
d1593e6b15 | ||
|
|
a53cb070e3 | ||
|
|
452ae49db5 | ||
|
|
8c5c5b6517 | ||
|
|
6f44d4d247 | ||
|
|
d804f86b88 | ||
|
|
8dee9f844f | ||
|
|
963ba10012 | ||
|
|
07645deeb8 | ||
|
|
c52c82ffc1 | ||
|
|
d6a03a23a8 | ||
|
|
e347b0da2b | ||
|
|
52b1fbbd99 | ||
|
|
65613f23ba | ||
|
|
4f92a764f1 | ||
|
|
6a3a7f3076 | ||
|
|
63d3a9c5ea | ||
|
|
2c730f6fc2 | ||
|
|
df8dae1df4 | ||
|
|
2e9f1bf0e1 | ||
|
|
b1e0ccbaa8 | ||
|
|
bd2abcae37 | ||
|
|
f1fbd4c7d1 | ||
|
|
eed22ac4ac | ||
|
|
176a614899 | ||
|
|
f858d222f2 | ||
|
|
16094305bc | ||
|
|
fbf002bb88 | ||
|
|
9135fddb0e | ||
|
|
d88fcf73f1 | ||
|
|
a950f28762 | ||
|
|
c629204688 | ||
|
|
e22f63f231 | ||
|
|
d256b95768 | ||
|
|
f530138876 | ||
|
|
0a39d8f207 | ||
|
|
6852d1d8c3 | ||
|
|
a1ad253f17 | ||
|
|
ffa101872f | ||
|
|
4d24b4c466 | ||
|
|
474b8a9716 | ||
|
|
53261831f1 | ||
|
|
49e3c9d8e6 | ||
|
|
1715e4885a | ||
|
|
eff7cb41d1 | ||
|
|
7a6f825f0f | ||
|
|
29afd31dd1 | ||
|
|
d86b0f1f5f | ||
|
|
998ac55e19 | ||
|
|
d6f25d70f1 | ||
|
|
b02da8eb50 | ||
|
|
2f52a41054 | ||
|
|
99c675b2f7 | ||
|
|
72dce7685e | ||
|
|
ee8836c442 | ||
|
|
a1006c373d | ||
|
|
755c5b3330 | ||
|
|
ce6aa1e496 | ||
|
|
6c1fc273f3 | ||
|
|
aa8b03b415 | ||
|
|
96ec4abd07 | ||
|
|
70532b7d6b | ||
|
|
a4d729f31d | ||
|
|
fcbc5a3fdd | ||
|
|
8c0ceb17a2 | ||
|
|
c2012f9b82 | ||
|
|
aa2be094ae | ||
|
|
4d524040bc | ||
|
|
0fe120ba25 | ||
|
|
2e7aa150f7 | ||
|
|
04fac37311 | ||
|
|
bcb43bb358 | ||
|
|
89ec4332ec | ||
|
|
34736de4c0 | ||
|
|
5f50d597f2 | ||
|
|
df94f187b9 | ||
|
|
b92c0df834 | ||
|
|
d357be38b9 | ||
|
|
912e296070 | ||
|
|
35593b33f4 | ||
|
|
54f3d200d3 | ||
|
|
3f67e11fab | ||
|
|
c1de1a190d | ||
|
|
566dda07ba | ||
|
|
7a2f4cbfe8 | ||
|
|
5ac7bde7c9 | ||
|
|
9b4eab501a | ||
|
|
ca04d7a208 | ||
|
|
40a3c12305 | ||
|
|
3001a770ed | ||
|
|
2608383c5e | ||
|
|
3d6312e807 | ||
|
|
22cd982566 | ||
|
|
682b112abc | ||
|
|
e738280547 | ||
|
|
8265328def | ||
|
|
231b98a5e1 | ||
|
|
13e4670c29 | ||
|
|
d08b6b44ba | ||
|
|
09b6c2ef15 | ||
|
|
cc29c1204b | ||
|
|
94c00f3d4d | ||
|
|
3c2b73672e | ||
|
|
23acb0eeb2 | ||
|
|
bfa4b8c5ab | ||
|
|
ce75ca04b1 | ||
|
|
9dba0554a5 | ||
|
|
59947880f4 | ||
|
|
61094cf3dc | ||
|
|
6d00101e9d | ||
|
|
7a06050cd3 | ||
|
|
6f9afa68cd | ||
|
|
c038b90619 | ||
|
|
9c4fe78260 | ||
|
|
60dd08573d | ||
|
|
f5204c61fb | ||
|
|
9ddeefe39d | ||
|
|
0293371a1b | ||
|
|
dd31c6fcb0 | ||
|
|
6708df7bf0 | ||
|
|
6d9c46b811 | ||
|
|
af2c2823a7 | ||
|
|
b17ecb642b | ||
|
|
ba12070f7e | ||
|
|
29b9763d9f | ||
|
|
270da80bfa | ||
|
|
701d35d12f | ||
|
|
2238e8e477 | ||
|
|
4b08da5538 | ||
|
|
8a616a5a5f | ||
|
|
9455d430cb | ||
|
|
137023dd0c | ||
|
|
2a45408c4a | ||
|
|
9e201014f8 | ||
|
|
0c072a0b46 | ||
|
|
c11c64fbe0 | ||
|
|
f022c177db | ||
|
|
5f10073c95 | ||
|
|
33ac8b3139 | ||
|
|
244847591f | ||
|
|
5abe32d861 | ||
|
|
9194296de8 | ||
|
|
6273a91cb7 | ||
|
|
1ef7acfe92 | ||
|
|
a0156a926f | ||
|
|
96998822b5 | ||
|
|
8215e7a938 | ||
|
|
f7622f86d9 | ||
|
|
337e368239 | ||
|
|
64b6840d8d | ||
|
|
6e119bb02e | ||
|
|
2c2e46dbf5 | ||
|
|
770bc596e1 | ||
|
|
7534d131d6 | ||
|
|
7f3c9036ea | ||
|
|
725111f7cb | ||
|
|
bf3d6c0c9b | ||
|
|
b8e8ccdc79 | ||
|
|
6b80c20bdb | ||
|
|
eea374fd19 | ||
|
|
2e8879fa6e | ||
|
|
f5a07779dd | ||
|
|
c51f2d4238 | ||
|
|
45e2738585 | ||
|
|
b173acfc96 | ||
|
|
4ebb342fcd | ||
|
|
8e5ef8538a | ||
|
|
ff82bf3b07 | ||
|
|
5147c3c914 | ||
|
|
fbbbffc5a8 | ||
|
|
7cfe2a5e65 | ||
|
|
df2a346b30 | ||
|
|
270512ab12 | ||
|
|
eba63ef58b | ||
|
|
01a9792f05 | ||
|
|
0491e05833 | ||
|
|
9a1a5b8785 | ||
|
|
f3b656b246 | ||
|
|
53b38d37a9 | ||
|
|
8f2e4fdf86 | ||
|
|
11de71b04c | ||
|
|
19bd66fe74 | ||
|
|
45771abbd6 | ||
|
|
573969cd53 | ||
|
|
34be0bb1a5 | ||
|
|
2031eca588 | ||
|
|
6321c3a034 | ||
|
|
1fda6c4f8c | ||
|
|
11a4e58fc1 | ||
|
|
8a35fb3bea | ||
|
|
e85d67af9f | ||
|
|
b37fb16dcb | ||
|
|
1e1c5047f2 | ||
|
|
b2be099d16 | ||
|
|
28d8362934 | ||
|
|
01039d0bff | ||
|
|
c755c5fd8b | ||
|
|
5c8e9139d1 | ||
|
|
56defd9a98 | ||
|
|
8eb7217580 | ||
|
|
b2a9d36a7f | ||
|
|
04f15edb91 | ||
|
|
4e98a44593 | ||
|
|
1385ddbb14 | ||
|
|
7f0c65703a | ||
|
|
3a6dec8a05 | ||
|
|
209b12814f | ||
|
|
f920c5b590 | ||
|
|
05fc7018f8 | ||
|
|
a384002724 | ||
|
|
0260405c68 | ||
|
|
0537f9689c | ||
|
|
0c010a1517 | ||
|
|
0745d0892d | ||
|
|
5e64f8c44c | ||
|
|
4a5b8a5bee | ||
|
|
b3836ed3cb | ||
|
|
47738cbad7 | ||
|
|
0a882b6394 | ||
|
|
612a91110f | ||
|
|
2337eb5823 | ||
|
|
9aa9d70ddb | ||
|
|
231493c93c | ||
|
|
20a90e3a76 | ||
|
|
17a2994dbd | ||
|
|
b554eef43b | ||
|
|
0066590f98 | ||
|
|
165a28abae | ||
|
|
63999e5299 | ||
|
|
2802ec65c2 | ||
|
|
b3f56e8b38 | ||
|
|
5826e4f481 | ||
|
|
66ee67be03 | ||
|
|
a7ad2afa5e | ||
|
|
0f04379d9c | ||
|
|
7e4d335943 | ||
|
|
26c07054a1 | ||
|
|
843d9d0b39 | ||
|
|
4ac210c16a | ||
|
|
02703c74a4 | ||
|
|
ef428d5681 | ||
|
|
afbe674edb | ||
|
|
f42e6d24f2 | ||
|
|
449bd384ed | ||
|
|
3eeaab4bed | ||
|
|
57eb1d3250 | ||
|
|
b4f5e5c959 | ||
|
|
0d2848b3ba | ||
|
|
e84b663a93 | ||
|
|
d85185217b | ||
|
|
8f3bdc72d0 | ||
|
|
7d368fcbd8 | ||
|
|
2bd2cd9b78 | ||
|
|
c83101248a | ||
|
|
8d3509b937 | ||
|
|
1875e6db29 | ||
|
|
0962fbbf98 | ||
|
|
cbdac46d58 | ||
|
|
d2e0c81720 | ||
|
|
109080ae48 | ||
|
|
31efffbdba | ||
|
|
aaa5dc614f | ||
|
|
8be97c01d1 | ||
|
|
9e1a112336 | ||
|
|
4e28f13209 | ||
|
|
53a20bfd94 | ||
|
|
a28062338c | ||
|
|
1c2f1fe505 | ||
|
|
14365bd820 | ||
|
|
a51a97262d | ||
|
|
45d8574b93 | ||
|
|
417f8973ff | ||
|
|
b3b72cd92c | ||
|
|
bb00084863 | ||
|
|
db22e5faa6 | ||
|
|
55d03c3179 | ||
|
|
7e0a494f13 | ||
|
|
83e68987b3 | ||
|
|
53bb3bee34 | ||
|
|
c9edf6fe98 | ||
|
|
14cc0aaf7b | ||
|
|
2f3c39bc62 | ||
|
|
c5de8b2a27 | ||
|
|
a4022932ee | ||
|
|
0e3b6b70df | ||
|
|
c49a0aa08d | ||
|
|
5503b6a352 | ||
|
|
60021d9165 | ||
|
|
97b708910a | ||
|
|
2f6ebed1dc | ||
|
|
156f657209 | ||
|
|
816f74d1c7 | ||
|
|
ec14c80c7c | ||
|
|
543b4ecc13 | ||
|
|
1110cea007 | ||
|
|
0ed64ce310 | ||
|
|
0e441bc2be | ||
|
|
d996a9af2b | ||
|
|
ab6cf1b8a2 | ||
|
|
c25f2f1cbf | ||
|
|
62526671e9 | ||
|
|
88ebf53577 | ||
|
|
a41b0aade2 | ||
|
|
02c31fa461 | ||
|
|
5df70a9e21 | ||
|
|
cbe52c3166 | ||
|
|
7858cc03da | ||
|
|
bbada33271 | ||
|
|
f5d51a9362 | ||
|
|
0fc6b2c9e2 | ||
|
|
7a5ad5d5a1 | ||
|
|
44eff497e8 | ||
|
|
8b452002e8 | ||
|
|
e442c36252 | ||
|
|
50ec3951dc | ||
|
|
11cd239707 | ||
|
|
f6098f2dda | ||
|
|
857c6092b6 | ||
|
|
eef468e330 | ||
|
|
4bd46774bb | ||
|
|
283c3e2437 | ||
|
|
306aae6cee | ||
|
|
edb0600583 | ||
|
|
ac86d923fc | ||
|
|
fbd63d0784 | ||
|
|
78ebeee2c4 | ||
|
|
55805fd2d0 | ||
|
|
7ebd220a8f | ||
|
|
e8a1f6d190 | ||
|
|
034bae10fc | ||
|
|
a7c924c041 | ||
|
|
27b762af60 | ||
|
|
b764ab9537 | ||
|
|
a761b89d2f | ||
|
|
a136862afe | ||
|
|
f0747cd950 | ||
|
|
21ac2b964b | ||
|
|
79e1dd65ab | ||
|
|
13e393607b | ||
|
|
052ec89927 | ||
|
|
2073d95fb4 | ||
|
|
cbed917fee | ||
|
|
dffdb56b7f | ||
|
|
a78c0632ed | ||
|
|
8fa6a40be2 | ||
|
|
4b5598682a | ||
|
|
e9f5428d3a | ||
|
|
34f0b26424 | ||
|
|
cd27b13b1d | ||
|
|
3ecbd099eb | ||
|
|
e43d03e30e | ||
|
|
d1acb9b44f | ||
|
|
acd1c4b5af | ||
|
|
40808cedc1 | ||
|
|
51054a1b39 | ||
|
|
e774a3299e | ||
|
|
99febc8b9a | ||
|
|
1ce8efbdda | ||
|
|
0b0a60d861 | ||
|
|
9e5b378081 | ||
|
|
7ed876533a | ||
|
|
b2d91a6913 | ||
|
|
ce074604c4 | ||
|
|
19ac190252 | ||
|
|
02c5ddf91e | ||
|
|
1aaeaf8a3d | ||
|
|
5d6c4985d1 | ||
|
|
b615ad90c8 | ||
|
|
c7aaf3918d | ||
|
|
d51204f1b1 | ||
|
|
b3f6325988 | ||
|
|
3129acbd83 | ||
|
|
12f89d32b5 | ||
|
|
1d42741a19 | ||
|
|
88737991d2 | ||
|
|
75c00536ba | ||
|
|
63d740752f | ||
|
|
6e04afb8c5 | ||
|
|
165fca51e0 | ||
|
|
db6b4e3791 | ||
|
|
20a85e9f69 | ||
|
|
2a6144a1b6 | ||
|
|
f8bc3e1bd8 | ||
|
|
5b737a0731 | ||
|
|
6e0ef10915 | ||
|
|
7017605dce | ||
|
|
b29228836a | ||
|
|
188b05792f | ||
|
|
575901e537 | ||
|
|
2333d65880 | ||
|
|
ffd1df0579 | ||
|
|
a2c32e2d7f | ||
|
|
80b168a5a9 | ||
|
|
9426364be9 | ||
|
|
429168e7ee | ||
|
|
499fca2db3 | ||
|
|
a28a5d9c62 | ||
|
|
3f791ca818 | ||
|
|
0ebfcc8f92 | ||
|
|
c61f571ce0 | ||
|
|
60192e96b8 | ||
|
|
85991994df | ||
|
|
b325518f45 | ||
|
|
b172dec864 | ||
|
|
61391e2314 | ||
|
|
4b23506594 | ||
|
|
82d3dda8a1 | ||
|
|
fe8bf9560d | ||
|
|
e4c9b85e65 | ||
|
|
447aa49007 | ||
|
|
fe977f7512 | ||
|
|
e476f94212 | ||
|
|
bbbd67108f | ||
|
|
7f246621b5 | ||
|
|
b67d988915 | ||
|
|
851e31ff07 | ||
|
|
decc9ffc18 | ||
|
|
3f4657d131 | ||
|
|
67ffa18cce | ||
|
|
788e67e227 | ||
|
|
c50226594d | ||
|
|
51ff6bde38 | ||
|
|
28e4fe34e4 | ||
|
|
c800a070b5 | ||
|
|
53d8996764 | ||
|
|
32b1843ec6 | ||
|
|
8712009778 | ||
|
|
b8994f44e7 | ||
|
|
f468e3824a | ||
|
|
ea1b02db6a | ||
|
|
2c4b354d32 | ||
|
|
25a66ee3cb | ||
|
|
0978dec131 | ||
|
|
91b17fbad4 | ||
|
|
ce92b6eb9c | ||
|
|
7abbffc3fb | ||
|
|
9dd8405341 | ||
|
|
46a643763d | ||
|
|
92c4468572 | ||
|
|
10cde5010d | ||
|
|
c4cd925cc0 | ||
|
|
f210eb7b89 | ||
|
|
734540f887 | ||
|
|
804515425a | ||
|
|
81a86fcf17 | ||
|
|
a534bb09d3 | ||
|
|
b6995add5c | ||
|
|
8ccd06c66c | ||
|
|
fe86616c72 | ||
|
|
ba2ba27008 | ||
|
|
f795123c4a | ||
|
|
c596c795bf | ||
|
|
3f19bbf4e3 | ||
|
|
b874ce4dc2 | ||
|
|
c6c2e3135d | ||
|
|
4b26fe30de | ||
|
|
4a8224b598 | ||
|
|
8afca8d9c6 | ||
|
|
35e8510e60 | ||
|
|
8b15c74018 | ||
|
|
3afa6cf866 | ||
|
|
e19e549041 | ||
|
|
d7561ac576 | ||
|
|
fbeaa3c47d | ||
|
|
ee2262b8d7 | ||
|
|
b0ac0a8ef8 | ||
|
|
0f4499360e | ||
|
|
7dc17a6cf0 | ||
|
|
b6223d2f70 | ||
|
|
256b5d5877 | ||
|
|
5d0d60e2f5 | ||
|
|
57ee007035 | ||
|
|
82e8cb403a | ||
|
|
abee01c6f8 | ||
|
|
2c288b2a7e | ||
|
|
831721ef49 | ||
|
|
0ee883650d | ||
|
|
70cf309517 | ||
|
|
8b5bf52ac2 | ||
|
|
73a9485081 | ||
|
|
d37a65bc81 | ||
|
|
34c7ff6dc9 | ||
|
|
647907918d | ||
|
|
cee73df3bd | ||
|
|
07481951f9 | ||
|
|
f15c448a72 | ||
|
|
fcb41c0ee8 | ||
|
|
9b62318311 | ||
|
|
5f1841cdca | ||
|
|
4b45051902 | ||
|
|
9e5790ce21 | ||
|
|
fce8c6cc53 | ||
|
|
0ff469d38d | ||
|
|
05338b58ce | ||
|
|
081057c3ff | ||
|
|
94c1672ef0 | ||
|
|
405d9761a5 | ||
|
|
4c3a2d64e4 | ||
|
|
98a2fd32a0 | ||
|
|
7bdeeb64ac | ||
|
|
43b45a42fd | ||
|
|
9af1bfb3d5 | ||
|
|
aed14edd12 | ||
|
|
14a948e6ad | ||
|
|
af2fcf3a65 | ||
|
|
4a676ac4f8 | ||
|
|
37e27219f2 | ||
|
|
d2284ab5d1 | ||
|
|
78e91e7574 | ||
|
|
e1cc0671ac | ||
|
|
c1a8a5de13 | ||
|
|
e3d0e0a792 | ||
|
|
7c7667b86b | ||
|
|
38be5db93b | ||
|
|
6a50d0a422 | ||
|
|
7ab2d30349 | ||
|
|
d753c3f582 | ||
|
|
1897c89302 | ||
|
|
3cc54008eb | ||
|
|
ff8bcccdd4 | ||
|
|
a93b01be57 | ||
|
|
04b304d346 | ||
|
|
6c61726b2a | ||
|
|
cd202fe2f9 | ||
|
|
69af4faec1 | ||
|
|
df9e0bf507 | ||
|
|
879b19801a | ||
|
|
6ec8e63af6 | ||
|
|
465b9f6b26 | ||
|
|
0c9c87a76e | ||
|
|
a7a90b2f00 | ||
|
|
4d6e7733fa | ||
|
|
2deadf1672 | ||
|
|
9ea862e0b3 | ||
|
|
11c9b7cfeb | ||
|
|
b08868c48a | ||
|
|
9ca46ff609 | ||
|
|
800e400de5 | ||
|
|
05886a6f77 | ||
|
|
667aef4c6a | ||
|
|
49e179cc52 | ||
|
|
aa4ce7315f | ||
|
|
c741b83762 | ||
|
|
64387788a9 | ||
|
|
480506bd49 | ||
|
|
0d5ea7613e | ||
|
|
beb056b303 | ||
|
|
4e321ffaff | ||
|
|
6ededa42db | ||
|
|
36d16f8ee0 | ||
|
|
ab781a0cb6 | ||
|
|
19c2987eb6 | ||
|
|
b09af97686 | ||
|
|
a7b1c7732f | ||
|
|
abc64463af | ||
|
|
2e7245f5a3 | ||
|
|
f76b062e16 | ||
|
|
cc1717eaa4 | ||
|
|
c5156d952e | ||
|
|
0b2d0d7d13 | ||
|
|
b732a8cf5f | ||
|
|
a7dc451ebe | ||
|
|
87357fc0b8 | ||
|
|
a2c96d888d | ||
|
|
9a6c6b99bf | ||
|
|
033c79dff1 | ||
|
|
b362536275 | ||
|
|
aa16a28631 | ||
|
|
2757c67da2 | ||
|
|
3d5fd31280 | ||
|
|
c7199e62f1 | ||
|
|
0b3fc6e63b | ||
|
|
c2db9cfb52 | ||
|
|
6bc8e6b898 | ||
|
|
9edf4e8157 | ||
|
|
965a1cb92e | ||
|
|
e9ad6665a5 | ||
|
|
b5855b2f32 | ||
|
|
a0bee97e55 | ||
|
|
e7076c5a80 | ||
|
|
ff22e913a3 | ||
|
|
04d0d0accf | ||
|
|
00df894701 | ||
|
|
630e4a6e59 | ||
|
|
bf2336f478 | ||
|
|
384dba6edb | ||
|
|
2c45bf2bc9 | ||
|
|
836ec0c764 | ||
|
|
5e72fb063a | ||
|
|
2dc08d5f5d | ||
|
|
00b8abee61 | ||
|
|
7efebab9fd | ||
|
|
a74286d636 | ||
|
|
254cfe878e | ||
|
|
ed824195a1 | ||
|
|
22c3600e4c | ||
|
|
49f386578e | ||
|
|
7c671508bd | ||
|
|
d3fdc27aa8 | ||
|
|
40e950aed6 | ||
|
|
987bebaf8c | ||
|
|
65f0efe198 | ||
|
|
e77d8f2ecd | ||
|
|
f68854b4c3 | ||
|
|
1cfd258ed6 | ||
|
|
04d7d51ea2 | ||
|
|
2906dc8601 | ||
|
|
c8d5c71af5 | ||
|
|
ff990440ee | ||
|
|
0e304b7f41 | ||
|
|
fbe6ba81e9 | ||
|
|
2b85e23d2e | ||
|
|
026bb0b96a | ||
|
|
6424498226 | ||
|
|
3ed449e94a | ||
|
|
4f1c33b430 | ||
|
|
1334462ab3 | ||
|
|
e62991a07c | ||
|
|
52272327f3 | ||
|
|
1bf955920a | ||
|
|
51d28013db | ||
|
|
8861ba355d | ||
|
|
9e88c82703 | ||
|
|
9d2f51c086 | ||
|
|
ad0db060b1 | ||
|
|
3547478fc8 | ||
|
|
29dc350813 | ||
|
|
bc3cae7e7d | ||
|
|
37942fab51 | ||
|
|
36521f0150 | ||
|
|
4bb61becbb | ||
|
|
b392e52050 | ||
|
|
0858b71b41 | ||
|
|
d9bfe4f97c | ||
|
|
dc0ed30cfe | ||
|
|
e248596bac | ||
|
|
6049399baf | ||
|
|
f763e0b5ae | ||
|
|
eb3eab20a8 | ||
|
|
4848cbf1cf | ||
|
|
9f2027e56d | ||
|
|
e1d51de41f | ||
|
|
81ee80ab88 | ||
|
|
7d727231b7 | ||
|
|
69740c2b3f | ||
|
|
119d1a1dd4 | ||
|
|
70f34a5841 | ||
|
|
c2e40d0f9a | ||
|
|
0abfd60604 | ||
|
|
e5dbccc182 | ||
|
|
f8fa22d826 | ||
|
|
c393222280 | ||
|
|
60fd574cdf | ||
|
|
73705abc34 | ||
|
|
12bdb64375 | ||
|
|
7bdf8eed69 | ||
|
|
48c832b6b7 | ||
|
|
f3e427f6f9 | ||
|
|
8bb826ee53 | ||
|
|
5d1430f390 | ||
|
|
45d10efc35 | ||
|
|
db3cb0e97a | ||
|
|
41a15c4f0f | ||
|
|
fea4280a8b | ||
|
|
e852b8533f | ||
|
|
20a3439ea9 | ||
|
|
a273a2824c | ||
|
|
24c97c819d | ||
|
|
42ba5d2329 | ||
|
|
c3e6402857 | ||
|
|
0821bcd4de | ||
|
|
4a6a2032ed | ||
|
|
c01d2b974e | ||
|
|
b0ef321cc8 | ||
|
|
7a8c728860 | ||
|
|
6141b86a49 | ||
|
|
23fadaa084 | ||
|
|
e27a259696 | ||
|
|
41e455bfc4 | ||
|
|
59b6836ab2 | ||
|
|
9fc9b55237 | ||
|
|
689c6f2542 | ||
|
|
f4bfd357e5 | ||
|
|
130db968b8 | ||
|
|
8d274837e5 | ||
|
|
5855038049 | ||
|
|
d18685d959 | ||
|
|
9f6715d4bb | ||
|
|
ab185b6038 | ||
|
|
1642000707 | ||
|
|
f7f2125522 | ||
|
|
2b61034b0b | ||
|
|
80c808b90b | ||
|
|
af1048c25c | ||
|
|
ecc5ef8793 | ||
|
|
c9a112f540 | ||
|
|
5286db697f | ||
|
|
f69a8aebab | ||
|
|
9d10b15ef9 | ||
|
|
da30c74a27 | ||
|
|
67ea999d4a | ||
|
|
e1892f2370 | ||
|
|
fe28866d71 | ||
|
|
de4ab1e629 | ||
|
|
216ddfaf6b | ||
|
|
8aa36bcac9 | ||
|
|
485e30dbe1 | ||
|
|
877dbcb8a0 | ||
|
|
62d27939c2 | ||
|
|
8c3c570134 | ||
|
|
97a1630e81 | ||
|
|
bf746f0f46 | ||
|
|
a229e3038e | ||
|
|
4aca9297dc | ||
|
|
b2c5960935 | ||
|
|
fbdce13e5a | ||
|
|
e532a6c449 | ||
|
|
14bcdb087f | ||
|
|
b7efa56a4a | ||
|
|
8359421d90 | ||
|
|
efde5230f1 | ||
|
|
f5ffad9d1d | ||
|
|
57a68b2129 | ||
|
|
bac252a5e3 | ||
|
|
a963395a7b | ||
|
|
d8863f0bdb | ||
|
|
addb6e16a8 | ||
|
|
4d27c4c960 | ||
|
|
ed65fab910 | ||
|
|
90cc40911b | ||
|
|
a7201e9a1b | ||
|
|
fcd5cca418 | ||
|
|
9222bc6b4e | ||
|
|
e6d27baf52 | ||
|
|
e7e1150706 | ||
|
|
5d727078ac | ||
|
|
108159ffcc | ||
|
|
c4d423511a | ||
|
|
b15a93a9c5 | ||
|
|
d9248e5780 | ||
|
|
0b52f89b81 | ||
|
|
7de4b5b060 | ||
|
|
02a00bb054 | ||
|
|
3b4de6e4cc | ||
|
|
bdbc9b4d1a | ||
|
|
09ef94d2c9 | ||
|
|
3ffb8d42bc | ||
|
|
25866e3982 | ||
|
|
3b3df98ca6 | ||
|
|
2e4a99f38b | ||
|
|
e90faddaf8 | ||
|
|
f1ce306f30 | ||
|
|
37b11ca78e | ||
|
|
a17af9e277 | ||
|
|
6951c23afd | ||
|
|
de421076a5 | ||
|
|
bd16cd6bcc | ||
|
|
0c51600203 | ||
|
|
9850f7f6b2 | ||
|
|
131e064e4a | ||
|
|
556b8f3f77 | ||
|
|
045d3285e2 | ||
|
|
d1df5b4339 | ||
|
|
25558bf743 | ||
|
|
713147109c | ||
|
|
76ef6ac956 | ||
|
|
a842df6659 | ||
|
|
c05a7f5dfd | ||
|
|
627bd6709c | ||
|
|
fbf218b8c3 | ||
|
|
3c97bd833b | ||
|
|
abbc186bd2 | ||
|
|
de6859e442 | ||
|
|
5e8904f289 | ||
|
|
0c0788ba0a | ||
|
|
905fd45b36 | ||
|
|
c162b132eb | ||
|
|
b4e0ce5165 | ||
|
|
17f0e916db | ||
|
|
3dfa23cbc4 | ||
|
|
a37e22d866 | ||
|
|
41c70d47d7 | ||
|
|
a0e7c8eede | ||
|
|
a8e00b17ce | ||
|
|
3e66ee9f01 | ||
|
|
5b40d7dd97 | ||
|
|
8f284faaec | ||
|
|
f774accdbf | ||
|
|
8544a80776 | ||
|
|
7c69478064 | ||
|
|
1862dae862 | ||
|
|
b7b46c9a87 | ||
|
|
e6e1f4cb5e | ||
|
|
5073ff0346 | ||
|
|
fc7fc5678f | ||
|
|
7a3240e319 | ||
|
|
5022e4ecdf | ||
|
|
30b415b076 | ||
|
|
914c2a28c0 | ||
|
|
ea681ba872 | ||
|
|
bc3e7fabe7 | ||
|
|
d675c74d14 | ||
|
|
59c7029862 | ||
|
|
1582a4073e | ||
|
|
401ee37a3e | ||
|
|
cb26a20cb1 | ||
|
|
82c4674e47 | ||
|
|
9d2996b82f | ||
|
|
3fee255102 | ||
|
|
16df5f066a | ||
|
|
959f9b1158 | ||
|
|
376729e130 | ||
|
|
00dd8f6d6e | ||
|
|
5dd87981bf | ||
|
|
37dccd8ff2 | ||
|
|
826a42a088 | ||
|
|
19f39703f7 | ||
|
|
151368ccba | ||
|
|
4451c2558e | ||
|
|
4a64f3d665 | ||
|
|
5fee606442 | ||
|
|
521aaafc6a | ||
|
|
78df5a2f1e | ||
|
|
6c9f57d629 | ||
|
|
382342ce1d | ||
|
|
69c922f5d2 | ||
|
|
10c8505734 | ||
|
|
10f92aac33 | ||
|
|
68d9e764cb | ||
|
|
8de69cf2c6 | ||
|
|
a2ac429da2 | ||
|
|
ffd0f93f14 | ||
|
|
1a4b8e7cee | ||
|
|
03386677ed | ||
|
|
559f90ff60 | ||
|
|
c284f20f00 | ||
|
|
58ae65cd1a | ||
|
|
5b0f1f7d13 | ||
|
|
785e827323 | ||
|
|
2f605e8d24 | ||
|
|
5e2216bfa1 | ||
|
|
175ac6811a | ||
|
|
07d488daf6 | ||
|
|
d1360f6ecc | ||
|
|
c38ff58b6b | ||
|
|
c29ef588dc | ||
|
|
968c31bd84 | ||
|
|
c743966156 | ||
|
|
bb09fd2bb6 | ||
|
|
280eb33b59 | ||
|
|
f79110c633 | ||
|
|
6ef2ff62fc | ||
|
|
980aea7860 | ||
|
|
bd9327baa9 | ||
|
|
6f9bafafa3 | ||
|
|
422a4a33a5 | ||
|
|
58606421ae | ||
|
|
d813ff2ac1 | ||
|
|
36734b2bab | ||
|
|
c85c5c408a | ||
|
|
2c1677d703 | ||
|
|
72348cbb8d | ||
|
|
c431798e82 | ||
|
|
fb80794568 | ||
|
|
4ec3d785e5 | ||
|
|
5d7c222db8 | ||
|
|
d993addbed | ||
|
|
476b6ab541 | ||
|
|
16760a3089 | ||
|
|
2b247cf81f | ||
|
|
746fc2526f | ||
|
|
a8c65b400c | ||
|
|
526975906b | ||
|
|
14fa6ad9f9 | ||
|
|
e544b0dc2a | ||
|
|
2549564009 | ||
|
|
bb1a915c24 | ||
|
|
b94f886b22 | ||
|
|
6ef7b78e7c | ||
|
|
e08aad1d14 | ||
|
|
b5a93e2250 | ||
|
|
c128bb0fa2 | ||
|
|
30fe028f07 | ||
|
|
b88606c28e | ||
|
|
2ea6abf6e5 | ||
|
|
f8c469de73 | ||
|
|
42096e05f7 | ||
|
|
7d15a556f8 | ||
|
|
5b17246324 | ||
|
|
c77094415f | ||
|
|
34413fca84 | ||
|
|
ec38ddc765 | ||
|
|
8aae01e223 | ||
|
|
00555c2f2f | ||
|
|
07d80f6f35 | ||
|
|
4591850561 | ||
|
|
a25aca2943 | ||
|
|
48c524827b | ||
|
|
ebaec63e3e | ||
|
|
14e21f863a | ||
|
|
f10725a6e1 | ||
|
|
0f71b77d5c | ||
|
|
d6bb6a88be | ||
|
|
3205db2bfe | ||
|
|
6f86850eec | ||
|
|
16ab8a93bc | ||
|
|
c88f8f76b5 | ||
|
|
fbf96849e9 | ||
|
|
d70e2507f8 | ||
|
|
2fcf435d73 | ||
|
|
da2ee71de5 | ||
|
|
8611934352 | ||
|
|
01e94efd46 | ||
|
|
33c3ecf741 | ||
|
|
5bd4c26057 | ||
|
|
4aa5889e1a | ||
|
|
bafcc7e060 | ||
|
|
afe67fb28e | ||
|
|
f744f92adb | ||
|
|
75f134c077 | ||
|
|
d8d25c9603 | ||
|
|
f1bdf1d518 | ||
|
|
d58caee734 | ||
|
|
e39c2548f5 | ||
|
|
8169dd73f9 | ||
|
|
765e231a7c | ||
|
|
89c53672c2 | ||
|
|
64ba6cf222 | ||
|
|
210a4f78ae | ||
|
|
334ef04949 | ||
|
|
859ceeeb51 | ||
|
|
22edcae7fa | ||
|
|
d0590fe6b2 | ||
|
|
2232b10f5a | ||
|
|
e34794dd1b | ||
|
|
0210065bbd | ||
|
|
7f5b4dd1e8 | ||
|
|
5906e8d5fe | ||
|
|
5545607c4f | ||
|
|
6ac1571296 | ||
|
|
ca74b76f3e | ||
|
|
2b6174c478 | ||
|
|
2b002273f3 | ||
|
|
15d155e45a | ||
|
|
b0841348b6 | ||
|
|
090e81d4aa | ||
|
|
e4528e48e3 | ||
|
|
235dee1421 | ||
|
|
d28f7bc74d | ||
|
|
4083a229b4 | ||
|
|
a2400fcab8 | ||
|
|
dc56eb5079 | ||
|
|
637ff35ef6 | ||
|
|
ace3ebd661 | ||
|
|
eea674567c | ||
|
|
c39c32dd65 | ||
|
|
0efea28dcb | ||
|
|
4bab9b763d | ||
|
|
70696f4525 | ||
|
|
80bbc9ceaf | ||
|
|
51ce5230cd | ||
|
|
b6d8ba11e9 | ||
|
|
e2f2a9af2c | ||
|
|
28a8003467 | ||
|
|
563cd0f2b0 | ||
|
|
3ac0f28837 | ||
|
|
47c1735acd | ||
|
|
7d3932e8cf | ||
|
|
8a60547896 | ||
|
|
d459e39012 | ||
|
|
340f5856ec | ||
|
|
df11e1e921 | ||
|
|
6a6592962c | ||
|
|
1275c4569e | ||
|
|
afbe74d386 | ||
|
|
f18ea6cae9 | ||
|
|
c9ff40cecd | ||
|
|
9088d5f24f | ||
|
|
cf9056cfda | ||
|
|
f7fc4ca1dd | ||
|
|
132fc53223 | ||
|
|
b3b6720944 | ||
|
|
9f6ea7163b | ||
|
|
385c8e89f4 | ||
|
|
263e3151e2 | ||
|
|
9081980565 | ||
|
|
393b704d28 | ||
|
|
bef26f1158 | ||
|
|
bc1ca8605c | ||
|
|
ad5003409d | ||
|
|
057cfaf2f8 | ||
|
|
914d36ba19 | ||
|
|
31c2ac1cdc | ||
|
|
6bca8e3886 | ||
|
|
63ba7e293f | ||
|
|
31e9b9b2e9 | ||
|
|
7997b13aa3 | ||
|
|
a2eb9688a4 | ||
|
|
af2bf07404 | ||
|
|
8c5dfa4c99 | ||
|
|
8d9fb0f04a | ||
|
|
15fd2de37c | ||
|
|
1a83c37294 | ||
|
|
674ee8b72d | ||
|
|
1809e858bb | ||
|
|
2bbc970e10 | ||
|
|
da8348e938 | ||
|
|
ef16f45081 | ||
|
|
4d692e1ba0 | ||
|
|
6577e16920 | ||
|
|
3fc378aa0b | ||
|
|
f2bfbcef76 | ||
|
|
6713a4835f | ||
|
|
46ceb15c39 | ||
|
|
109d3123c3 | ||
|
|
63077bd40c | ||
|
|
df364f1b00 | ||
|
|
bc767216d9 | ||
|
|
cacd830f02 | ||
|
|
eda52e175a | ||
|
|
665560e9a4 | ||
|
|
c4fc8b5bf4 | ||
|
|
9c52d2cc75 | ||
|
|
0f814687b9 | ||
|
|
f0eae953e2 | ||
|
|
298a2f9e58 | ||
|
|
ac0d0a5ecd | ||
|
|
f15390bdb4 | ||
|
|
d095b68d63 | ||
|
|
508999fa7d | ||
|
|
210a21bc8d | ||
|
|
678c1e025b | ||
|
|
1ab61a9179 | ||
|
|
d6dda126b7 | ||
|
|
7771b6c5b5 | ||
|
|
4843acc868 | ||
|
|
9e0aad9fd6 | ||
|
|
1c7a0e2856 | ||
|
|
abd23881c1 | ||
|
|
d1739eb2d6 | ||
|
|
2faa930bb0 | ||
|
|
e14f4aab0a | ||
|
|
c842261b1b | ||
|
|
df368ecce4 | ||
|
|
1e6bccc240 | ||
|
|
d3adc3d3ed | ||
|
|
10e7d6d526 | ||
|
|
8d472bdd84 | ||
|
|
430d7afd80 | ||
|
|
ca982e4870 | ||
|
|
d5f686d808 | ||
|
|
08e1cbc62c | ||
|
|
b6b4fdc9e2 | ||
|
|
dd55880644 | ||
|
|
bd1640bb01 | ||
|
|
081991ac01 | ||
|
|
8a85c341fe | ||
|
|
bcfea9fb25 | ||
|
|
f3f52d7f45 | ||
|
|
8845420f4e | ||
|
|
d735c64905 | ||
|
|
955d465c2c | ||
|
|
8c521c7a34 | ||
|
|
77475142ec | ||
|
|
90fac84066 | ||
|
|
64674bcc8c | ||
|
|
1dc2d655ad | ||
|
|
863d2b196f | ||
|
|
c57bc2dc51 | ||
|
|
6c0dcdc211 | ||
|
|
28ded31b97 | ||
|
|
0fc07a0f9c | ||
|
|
823a67b0a9 | ||
|
|
60a938c6bc | ||
|
|
3a87a9b9db | ||
|
|
ae44fc1ec4 | ||
|
|
837685c522 |
13
.cvsignore
13
.cvsignore
@@ -1,5 +1,6 @@
|
|||||||
openssl.pc
|
openssl.pc
|
||||||
Makefile
|
libcrypto.pc
|
||||||
|
libssl.pc
|
||||||
MINFO
|
MINFO
|
||||||
makefile.one
|
makefile.one
|
||||||
tmp
|
tmp
|
||||||
@@ -12,6 +13,10 @@ maketest.log
|
|||||||
cctest
|
cctest
|
||||||
cctest.c
|
cctest.c
|
||||||
cctest.a
|
cctest.a
|
||||||
libcrypto.so.*
|
*.flc
|
||||||
libssl.so.*
|
semantic.cache
|
||||||
libcrypto.sha1
|
Makefile
|
||||||
|
*.dll*
|
||||||
|
*.so*
|
||||||
|
*.sl*
|
||||||
|
*.dylib*
|
||||||
|
|||||||
77
.gitignore
vendored
Normal file
77
.gitignore
vendored
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
# Object files
|
||||||
|
*.o
|
||||||
|
|
||||||
|
# editor artefacts
|
||||||
|
*.swp
|
||||||
|
.#*
|
||||||
|
#*#
|
||||||
|
*~
|
||||||
|
|
||||||
|
# Top level excludes
|
||||||
|
/Makefile.bak
|
||||||
|
/Makefile
|
||||||
|
/*.a
|
||||||
|
/include
|
||||||
|
/*.pc
|
||||||
|
/rehash.time
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# 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
|
||||||
25
ACKNOWLEDGMENTS
Normal file
25
ACKNOWLEDGMENTS
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
The OpenSSL project depends on volunteer efforts and financial support from
|
||||||
|
the end user community. That support comes in the form of donations and paid
|
||||||
|
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.
|
||||||
@@ -148,7 +148,7 @@ eric (about to go bushwalking for the 4 day easter break :-)
|
|||||||
This would tend to cause memory overwrites since SSLv3 has
|
This would tend to cause memory overwrites since SSLv3 has
|
||||||
a maximum packet size of 16k. If your program uses
|
a maximum packet size of 16k. If your program uses
|
||||||
buffers <= 16k, you would probably never see this problem.
|
buffers <= 16k, you would probably never see this problem.
|
||||||
- Fixed a new errors that were cause by malloc() not returning
|
- Fixed a few errors that were cause by malloc() not returning
|
||||||
0 initialised memory..
|
0 initialised memory..
|
||||||
- SSL_OP_NETSCAPE_CA_DN_BUG was being switched on when using
|
- SSL_OP_NETSCAPE_CA_DN_BUG was being switched on when using
|
||||||
SSL_CTX_set_options(ssl_ctx,SSL_OP_ALL); which was a bad thing
|
SSL_CTX_set_options(ssl_ctx,SSL_OP_ALL); which was a bad thing
|
||||||
|
|||||||
348
FAQ
348
FAQ
@@ -10,6 +10,7 @@ OpenSSL - Frequently Asked Questions
|
|||||||
* Why aren't tools like 'autoconf' and 'libtool' used?
|
* Why aren't tools like 'autoconf' and 'libtool' used?
|
||||||
* What is an 'engine' version?
|
* What is an 'engine' version?
|
||||||
* How do I check the authenticity of the OpenSSL distribution?
|
* How do I check the authenticity of the OpenSSL distribution?
|
||||||
|
* How does the versioning scheme work?
|
||||||
|
|
||||||
[LEGAL] Legal questions
|
[LEGAL] Legal questions
|
||||||
|
|
||||||
@@ -31,6 +32,9 @@ OpenSSL - Frequently Asked Questions
|
|||||||
* Why does my browser give a warning about a mismatched hostname?
|
* Why does my browser give a warning about a mismatched hostname?
|
||||||
* How do I install a CA certificate into a browser?
|
* How do I install a CA certificate into a browser?
|
||||||
* Why is OpenSSL x509 DN output not conformant to RFC2253?
|
* Why is OpenSSL x509 DN output not conformant to RFC2253?
|
||||||
|
* What is a "128 bit certificate"? Can I create one with OpenSSL?
|
||||||
|
* Why does OpenSSL set the authority key identifier extension incorrectly?
|
||||||
|
* How can I set up a bundle of commercial root CA certificates?
|
||||||
|
|
||||||
[BUILD] Questions about building and testing OpenSSL
|
[BUILD] Questions about building and testing OpenSSL
|
||||||
|
|
||||||
@@ -46,12 +50,19 @@ OpenSSL - Frequently Asked Questions
|
|||||||
* Why does the OpenSSL test suite fail on MacOS X?
|
* Why does the OpenSSL test suite fail on MacOS X?
|
||||||
* Why does the OpenSSL test suite fail in BN_sqr test [on a 64-bit platform]?
|
* Why does the OpenSSL test suite fail in BN_sqr test [on a 64-bit platform]?
|
||||||
* Why does OpenBSD-i386 build fail on des-586.s with "Unimplemented segment type"?
|
* Why does OpenBSD-i386 build fail on des-586.s with "Unimplemented segment type"?
|
||||||
|
* Why does the OpenSSL test suite fail in sha512t on x86 CPU?
|
||||||
|
* Why does compiler fail to compile sha512.c?
|
||||||
|
* Test suite still fails, what to do?
|
||||||
|
* I think I've found a bug, what should I do?
|
||||||
|
* I'm SURE I've found a bug, how do I report it?
|
||||||
|
* I've found a security issue, how do I report it?
|
||||||
|
|
||||||
[PROG] Questions about programming with OpenSSL
|
[PROG] Questions about programming with OpenSSL
|
||||||
|
|
||||||
* Is OpenSSL thread-safe?
|
* Is OpenSSL thread-safe?
|
||||||
* I've compiled a program under Windows and it crashes: why?
|
* I've compiled a program under Windows and it crashes: why?
|
||||||
* How do I read or write a DER encoded buffer using the ASN1 functions?
|
* How do I read or write a DER encoded buffer using the ASN1 functions?
|
||||||
|
* OpenSSL uses DER but I need BER format: does OpenSSL support BER?
|
||||||
* I've tried using <M_some_evil_pkcs12_macro> and I get errors why?
|
* I've tried using <M_some_evil_pkcs12_macro> and I get errors why?
|
||||||
* I've called <some function> and it fails, why?
|
* I've called <some function> and it fails, why?
|
||||||
* I just get a load of numbers for the error output, what do they mean?
|
* I just get a load of numbers for the error output, what do they mean?
|
||||||
@@ -60,6 +71,10 @@ OpenSSL - Frequently Asked Questions
|
|||||||
* Can I use OpenSSL's SSL library with non-blocking I/O?
|
* Can I use OpenSSL's SSL library with non-blocking I/O?
|
||||||
* Why doesn't my server application receive a client certificate?
|
* Why doesn't my server application receive a client certificate?
|
||||||
* Why does compilation fail due to an undefined symbol NID_uniqueIdentifier?
|
* Why does compilation fail due to an undefined symbol NID_uniqueIdentifier?
|
||||||
|
* I think I've detected a memory leak, is this a bug?
|
||||||
|
* Why does Valgrind complain about the use of uninitialized data?
|
||||||
|
* Why doesn't a memory BIO work when a file does?
|
||||||
|
* Where are the declarations and implementations of d2i_X509() etc?
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
|
|
||||||
@@ -68,11 +83,11 @@ OpenSSL - Frequently Asked Questions
|
|||||||
* Which is the current version of OpenSSL?
|
* Which is the current version of OpenSSL?
|
||||||
|
|
||||||
The current version is available from <URL: http://www.openssl.org>.
|
The current version is available from <URL: http://www.openssl.org>.
|
||||||
OpenSSL 0.9.7d was released on March 17, 2004.
|
OpenSSL 1.0.1e was released on Feb 11th, 2013.
|
||||||
|
|
||||||
In addition to the current stable release, you can also access daily
|
In addition to the current stable release, you can also access daily
|
||||||
snapshots of the OpenSSL development version at <URL:
|
snapshots of the OpenSSL development version at <URL:
|
||||||
ftp://ftp.openssl.org/snapshot/>, or get it by anonymous CVS access.
|
ftp://ftp.openssl.org/snapshot/>, or get it by anonymous Git access.
|
||||||
|
|
||||||
|
|
||||||
* Where is the documentation?
|
* Where is the documentation?
|
||||||
@@ -84,14 +99,19 @@ explains how to install this library.
|
|||||||
|
|
||||||
OpenSSL includes a command line utility that can be used to perform a
|
OpenSSL includes a command line utility that can be used to perform a
|
||||||
variety of cryptographic functions. It is described in the openssl(1)
|
variety of cryptographic functions. It is described in the openssl(1)
|
||||||
manpage. Documentation for developers is currently being written. A
|
manpage. Documentation for developers is currently being written. Many
|
||||||
few manual pages already are available; overviews over libcrypto and
|
manual pages are available; overviews over libcrypto and
|
||||||
libssl are given in the crypto(3) and ssl(3) manpages.
|
libssl are given in the crypto(3) and ssl(3) manpages.
|
||||||
|
|
||||||
The OpenSSL manpages are installed in /usr/local/ssl/man/ (or a
|
The OpenSSL manpages are installed in /usr/local/ssl/man/ (or a
|
||||||
different directory if you specified one as described in INSTALL).
|
different directory if you specified one as described in INSTALL).
|
||||||
In addition, you can read the most current versions at
|
In addition, you can read the most current versions at
|
||||||
<URL: http://www.openssl.org/docs/>.
|
<URL: http://www.openssl.org/docs/>. Note that the online documents refer
|
||||||
|
to the very latest development versions of OpenSSL and may include features
|
||||||
|
not present in released versions. If in doubt refer to the documentation
|
||||||
|
that came with the version of OpenSSL you are using. The pod format
|
||||||
|
documentation is included in each OpenSSL distribution under the docs
|
||||||
|
directory.
|
||||||
|
|
||||||
For information on parts of libcrypto that are not yet documented, you
|
For information on parts of libcrypto that are not yet documented, you
|
||||||
might want to read Ariel Glenn's documentation on SSLeay 0.9, OpenSSL's
|
might want to read Ariel Glenn's documentation on SSLeay 0.9, OpenSSL's
|
||||||
@@ -117,7 +137,7 @@ OpenSSL. Information on the OpenSSL mailing lists is available from
|
|||||||
* Where can I get a compiled version of OpenSSL?
|
* Where can I get a compiled version of OpenSSL?
|
||||||
|
|
||||||
You can finder pointers to binary distributions in
|
You can finder pointers to binary distributions in
|
||||||
http://www.openssl.org/related/binaries.html .
|
<URL: http://www.openssl.org/related/binaries.html> .
|
||||||
|
|
||||||
Some applications that use OpenSSL are distributed in binary form.
|
Some applications that use OpenSSL are distributed in binary form.
|
||||||
When using such an application, you don't need to install OpenSSL
|
When using such an application, you don't need to install OpenSSL
|
||||||
@@ -139,8 +159,8 @@ less Unix-centric, it might have been used much earlier.
|
|||||||
|
|
||||||
With version 0.9.6 OpenSSL was extended to interface to external crypto
|
With version 0.9.6 OpenSSL was extended to interface to external crypto
|
||||||
hardware. This was realized in a special release '0.9.6-engine'. With
|
hardware. This was realized in a special release '0.9.6-engine'. With
|
||||||
version 0.9.7 (not yet released) the changes were merged into the main
|
version 0.9.7 the changes were merged into the main development line,
|
||||||
development line, so that the special release is no longer necessary.
|
so that the special release is no longer necessary.
|
||||||
|
|
||||||
* How do I check the authenticity of the OpenSSL distribution?
|
* How do I check the authenticity of the OpenSSL distribution?
|
||||||
|
|
||||||
@@ -150,11 +170,25 @@ Use MD5 to check that a tarball from a mirror site is identical:
|
|||||||
md5sum TARBALL | awk '{print $1;}' | cmp - TARBALL.md5
|
md5sum TARBALL | awk '{print $1;}' | cmp - TARBALL.md5
|
||||||
|
|
||||||
You can check authenticity using pgp or gpg. You need the OpenSSL team
|
You can check authenticity using pgp or gpg. You need the OpenSSL team
|
||||||
member public key used to sign it (download it from a key server). Then
|
member public key used to sign it (download it from a key server, see a
|
||||||
|
list of keys at <URL: http://www.openssl.org/about/>). Then
|
||||||
just do:
|
just do:
|
||||||
|
|
||||||
pgp TARBALL.asc
|
pgp TARBALL.asc
|
||||||
|
|
||||||
|
* How does the versioning scheme work?
|
||||||
|
|
||||||
|
After the release of OpenSSL 1.0.0 the versioning scheme changed. Letter
|
||||||
|
releases (e.g. 1.0.1a) can only contain bug and security fixes and no
|
||||||
|
new features. Minor releases change the last number (e.g. 1.0.2) and
|
||||||
|
can contain new features that retain binary compatibility. Changes to
|
||||||
|
the middle number are considered major releases and neither source nor
|
||||||
|
binary compatibility is guaranteed.
|
||||||
|
|
||||||
|
Therefore the answer to the common question "when will feature X be
|
||||||
|
backported to OpenSSL 1.0.0/0.9.8?" is "never" but it could appear
|
||||||
|
in the next minor release.
|
||||||
|
|
||||||
[LEGAL] =======================================================================
|
[LEGAL] =======================================================================
|
||||||
|
|
||||||
* Do I need patent licenses to use OpenSSL?
|
* Do I need patent licenses to use OpenSSL?
|
||||||
@@ -164,8 +198,8 @@ you if you want to use OpenSSL. For information on intellectual
|
|||||||
property rights, please consult a lawyer. The OpenSSL team does not
|
property rights, please consult a lawyer. The OpenSSL team does not
|
||||||
offer legal advice.
|
offer legal advice.
|
||||||
|
|
||||||
You can configure OpenSSL so as not to use RC5 and IDEA by using
|
You can configure OpenSSL so as not to use IDEA, MDC2 and RC5 by using
|
||||||
./config no-rc5 no-idea
|
./config no-idea no-mdc2 no-rc5
|
||||||
|
|
||||||
|
|
||||||
* Can I use OpenSSL with GPL software?
|
* Can I use OpenSSL with GPL software?
|
||||||
@@ -266,7 +300,7 @@ current directory in this case, but this has changed with 0.9.6a.)
|
|||||||
Check out the CA.pl(1) manual page. This provides a simple wrapper round
|
Check out the CA.pl(1) manual page. This provides a simple wrapper round
|
||||||
the 'req', 'verify', 'ca' and 'pkcs12' utilities. For finer control check
|
the 'req', 'verify', 'ca' and 'pkcs12' utilities. For finer control check
|
||||||
out the manual pages for the individual utilities and the certificate
|
out the manual pages for the individual utilities and the certificate
|
||||||
extensions documentation (currently in doc/openssl.txt).
|
extensions documentation (in ca(1), req(1), x509v3_config(5) )
|
||||||
|
|
||||||
|
|
||||||
* Why can't I create certificate requests?
|
* Why can't I create certificate requests?
|
||||||
@@ -381,6 +415,76 @@ interface, the "-nameopt" option could be introduded. See the manual
|
|||||||
page of the "openssl x509" commandline tool for details. The old behaviour
|
page of the "openssl x509" commandline tool for details. The old behaviour
|
||||||
has however been left as default for the sake of compatibility.
|
has however been left as default for the sake of compatibility.
|
||||||
|
|
||||||
|
* What is a "128 bit certificate"? Can I create one with OpenSSL?
|
||||||
|
|
||||||
|
The term "128 bit certificate" is a highly misleading marketing term. It does
|
||||||
|
*not* refer to the size of the public key in the certificate! A certificate
|
||||||
|
containing a 128 bit RSA key would have negligible security.
|
||||||
|
|
||||||
|
There were various other names such as "magic certificates", "SGC
|
||||||
|
certificates", "step up certificates" etc.
|
||||||
|
|
||||||
|
You can't generally create such a certificate using OpenSSL but there is no
|
||||||
|
need to any more. Nowadays web browsers using unrestricted strong encryption
|
||||||
|
are generally available.
|
||||||
|
|
||||||
|
When there were tight restrictions on the export of strong encryption
|
||||||
|
software from the US only weak encryption algorithms could be freely exported
|
||||||
|
(initially 40 bit and then 56 bit). It was widely recognised that this was
|
||||||
|
inadequate. A relaxation of the rules allowed the use of strong encryption but
|
||||||
|
only to an authorised server.
|
||||||
|
|
||||||
|
Two slighly different techniques were developed to support this, one used by
|
||||||
|
Netscape was called "step up", the other used by MSIE was called "Server Gated
|
||||||
|
Cryptography" (SGC). When a browser initially connected to a server it would
|
||||||
|
check to see if the certificate contained certain extensions and was issued by
|
||||||
|
an authorised authority. If these test succeeded it would reconnect using
|
||||||
|
strong encryption.
|
||||||
|
|
||||||
|
Only certain (initially one) certificate authorities could issue the
|
||||||
|
certificates and they generally cost more than ordinary certificates.
|
||||||
|
|
||||||
|
Although OpenSSL can create certificates containing the appropriate extensions
|
||||||
|
the certificate would not come from a permitted authority and so would not
|
||||||
|
be recognized.
|
||||||
|
|
||||||
|
The export laws were later changed to allow almost unrestricted use of strong
|
||||||
|
encryption so these certificates are now obsolete.
|
||||||
|
|
||||||
|
|
||||||
|
* Why does OpenSSL set the authority key identifier (AKID) extension incorrectly?
|
||||||
|
|
||||||
|
It doesn't: this extension is often the cause of confusion.
|
||||||
|
|
||||||
|
Consider a certificate chain A->B->C so that A signs B and B signs C. Suppose
|
||||||
|
certificate C contains AKID.
|
||||||
|
|
||||||
|
The purpose of this extension is to identify the authority certificate B. This
|
||||||
|
can be done either by including the subject key identifier of B or its issuer
|
||||||
|
name and serial number.
|
||||||
|
|
||||||
|
In this latter case because it is identifying certifcate B it must contain the
|
||||||
|
issuer name and serial number of B.
|
||||||
|
|
||||||
|
It is often wrongly assumed that it should contain the subject name of B. If it
|
||||||
|
did this would be redundant information because it would duplicate the issuer
|
||||||
|
name of C.
|
||||||
|
|
||||||
|
|
||||||
|
* How can I set up a bundle of commercial root CA certificates?
|
||||||
|
|
||||||
|
The OpenSSL software is shipped without any root CA certificate as the
|
||||||
|
OpenSSL project does not have any policy on including or excluding
|
||||||
|
any specific CA and does not intend to set up such a policy. Deciding
|
||||||
|
about which CAs to support is up to application developers or
|
||||||
|
administrators.
|
||||||
|
|
||||||
|
Other projects do have other policies so you can for example extract the CA
|
||||||
|
bundle used by Mozilla and/or modssl as described in this article:
|
||||||
|
|
||||||
|
<URL: http://www.mail-archive.com/modssl-users@modssl.org/msg16980.html>
|
||||||
|
|
||||||
|
|
||||||
[BUILD] =======================================================================
|
[BUILD] =======================================================================
|
||||||
|
|
||||||
* Why does the linker complain about undefined symbols?
|
* Why does the linker complain about undefined symbols?
|
||||||
@@ -420,7 +524,7 @@ when you run the test suite (using "make test"). The message returned is
|
|||||||
"bc: 1 not implemented".
|
"bc: 1 not implemented".
|
||||||
|
|
||||||
The best way to deal with this is to find another implementation of bc
|
The best way to deal with this is to find another implementation of bc
|
||||||
and compile/install it. GNU bc (see http://www.gnu.org/software/software.html
|
and compile/install it. GNU bc (see <URL: http://www.gnu.org/software/software.html>
|
||||||
for download instructions) can be safely used, for example.
|
for download instructions) can be safely used, for example.
|
||||||
|
|
||||||
|
|
||||||
@@ -431,7 +535,7 @@ that the OpenSSL bntest throws at it. This gets triggered when you run the
|
|||||||
test suite (using "make test"). The message returned is "bc: stack empty".
|
test suite (using "make test"). The message returned is "bc: stack empty".
|
||||||
|
|
||||||
The best way to deal with this is to find another implementation of bc
|
The best way to deal with this is to find another implementation of bc
|
||||||
and compile/install it. GNU bc (see http://www.gnu.org/software/software.html
|
and compile/install it. GNU bc (see <URL: http://www.gnu.org/software/software.html>
|
||||||
for download instructions) can be safely used, for example.
|
for download instructions) can be safely used, for example.
|
||||||
|
|
||||||
|
|
||||||
@@ -460,7 +564,7 @@ get the best result from OpenSSL. A bit more complicated solution is the
|
|||||||
following:
|
following:
|
||||||
|
|
||||||
----- snip:start -----
|
----- snip:start -----
|
||||||
make DIRS=crypto SDIRS=sha "`grep '^CFLAG=' Makefile | \
|
make DIRS=crypto SDIRS=sha "`grep '^CFLAG=' Makefile.ssl | \
|
||||||
sed -e 's/ -O[0-9] / -O0 /'`"
|
sed -e 's/ -O[0-9] / -O0 /'`"
|
||||||
rm `ls crypto/*.o crypto/sha/*.o | grep -v 'sha_dgst\.o'`
|
rm `ls crypto/*.o crypto/sha/*.o | grep -v 'sha_dgst\.o'`
|
||||||
make
|
make
|
||||||
@@ -470,6 +574,10 @@ This will only compile sha_dgst.c with -O0, the rest with the optimization
|
|||||||
level chosen by the configuration process. When the above is done, do the
|
level chosen by the configuration process. When the above is done, do the
|
||||||
test and installation and you're set.
|
test and installation and you're set.
|
||||||
|
|
||||||
|
3. Reconfigure the toolkit with no-sha0 option to leave out SHA0. It
|
||||||
|
should not be used and is not used in SSL/TLS nor any other recognized
|
||||||
|
protocol in either case.
|
||||||
|
|
||||||
|
|
||||||
* Why does the OpenSSL compilation fail with "ar: command not found"?
|
* Why does the OpenSSL compilation fail with "ar: command not found"?
|
||||||
|
|
||||||
@@ -591,6 +699,75 @@ Reportedly elder *BSD a.out platforms also suffer from this problem and
|
|||||||
remedy should be same. Provided binary is statically linked and should be
|
remedy should be same. Provided binary is statically linked and should be
|
||||||
working across wider range of *BSD branches, not just OpenBSD.
|
working across wider range of *BSD branches, not just OpenBSD.
|
||||||
|
|
||||||
|
* Why does the OpenSSL test suite fail in sha512t on x86 CPU?
|
||||||
|
|
||||||
|
If the test program in question fails withs SIGILL, Illegal Instruction
|
||||||
|
exception, then you more than likely to run SSE2-capable CPU, such as
|
||||||
|
Intel P4, under control of kernel which does not support SSE2
|
||||||
|
instruction extentions. See accompanying INSTALL file and
|
||||||
|
OPENSSL_ia32cap(3) documentation page for further information.
|
||||||
|
|
||||||
|
* Why does compiler fail to compile sha512.c?
|
||||||
|
|
||||||
|
OpenSSL SHA-512 implementation depends on compiler support for 64-bit
|
||||||
|
integer type. Few elder compilers [ULTRIX cc, SCO compiler to mention a
|
||||||
|
couple] lack support for this and therefore are incapable of compiling
|
||||||
|
the module in question. The recommendation is to disable SHA-512 by
|
||||||
|
adding no-sha512 to ./config [or ./Configure] command line. Another
|
||||||
|
possible alternative might be to switch to GCC.
|
||||||
|
|
||||||
|
* Test suite still fails, what to do?
|
||||||
|
|
||||||
|
Another common reason for failure to complete some particular test is
|
||||||
|
simply bad code generated by a buggy component in toolchain or deficiency
|
||||||
|
in run-time environment. There are few cases documented in PROBLEMS file,
|
||||||
|
consult it for possible workaround before you beat the drum. Even if you
|
||||||
|
don't find solution or even mention there, do reserve for possibility of
|
||||||
|
a compiler bug. Compiler bugs might appear in rather bizarre ways, they
|
||||||
|
never make sense, and tend to emerge when you least expect them. In order
|
||||||
|
to identify one, drop optimization level, e.g. by editing CFLAG line in
|
||||||
|
top-level Makefile, recompile and re-run the test.
|
||||||
|
|
||||||
|
* I think I've found a bug, what should I do?
|
||||||
|
|
||||||
|
If you are a new user then it is quite likely you haven't found a bug and
|
||||||
|
something is happening you aren't familiar with. Check this FAQ, the associated
|
||||||
|
documentation and the mailing lists for similar queries. If you are still
|
||||||
|
unsure whether it is a bug or not submit a query to the openssl-users mailing
|
||||||
|
list.
|
||||||
|
|
||||||
|
|
||||||
|
* I'm SURE I've found a bug, how do I report it?
|
||||||
|
|
||||||
|
Bug reports with no security implications should be sent to the request
|
||||||
|
tracker. This can be done by mailing the report to <rt@openssl.org> (or its
|
||||||
|
alias <openssl-bugs@openssl.org>), please note that messages sent to the
|
||||||
|
request tracker also appear in the public openssl-dev mailing list.
|
||||||
|
|
||||||
|
The report should be in plain text. Any patches should be sent as
|
||||||
|
plain text attachments because some mailers corrupt patches sent inline.
|
||||||
|
If your issue affects multiple versions of OpenSSL check any patches apply
|
||||||
|
cleanly and, if possible include patches to each affected version.
|
||||||
|
|
||||||
|
The report should be given a meaningful subject line briefly summarising the
|
||||||
|
issue. Just "bug in OpenSSL" or "bug in OpenSSL 0.9.8n" is not very helpful.
|
||||||
|
|
||||||
|
By sending reports to the request tracker the bug can then be given a priority
|
||||||
|
and assigned to the appropriate maintainer. The history of discussions can be
|
||||||
|
accessed and if the issue has been addressed or a reason why not. If patches
|
||||||
|
are only sent to openssl-dev they can be mislaid if a team member has to
|
||||||
|
wade through months of old messages to review the discussion.
|
||||||
|
|
||||||
|
See also <URL: http://www.openssl.org/support/rt.html>
|
||||||
|
|
||||||
|
|
||||||
|
* I've found a security issue, how do I report it?
|
||||||
|
|
||||||
|
If you think your bug has security implications then please send it to
|
||||||
|
openssl-security@openssl.org if you don't get a prompt reply at least
|
||||||
|
acknowledging receipt then resend or mail it directly to one of the
|
||||||
|
more active team members (e.g. Steve).
|
||||||
|
|
||||||
[PROG] ========================================================================
|
[PROG] ========================================================================
|
||||||
|
|
||||||
* Is OpenSSL thread-safe?
|
* Is OpenSSL thread-safe?
|
||||||
@@ -602,8 +779,11 @@ libraries. If your platform is not one of these, consult the INSTALL
|
|||||||
file.
|
file.
|
||||||
|
|
||||||
Multi-threaded applications must provide two callback functions to
|
Multi-threaded applications must provide two callback functions to
|
||||||
OpenSSL. This is described in the threads(3) manpage.
|
OpenSSL by calling CRYPTO_set_locking_callback() and
|
||||||
|
CRYPTO_set_id_callback(), for all versions of OpenSSL up to and
|
||||||
|
including 0.9.8[abc...]. As of version 1.0.0, CRYPTO_set_id_callback()
|
||||||
|
and associated APIs are deprecated by CRYPTO_THREADID_set_callback()
|
||||||
|
and friends. This is described in the threads(3) manpage.
|
||||||
|
|
||||||
* I've compiled a program under Windows and it crashes: why?
|
* I've compiled a program under Windows and it crashes: why?
|
||||||
|
|
||||||
@@ -623,10 +803,10 @@ your application must link against the same by which OpenSSL was
|
|||||||
built. If you are using MS Visual C++ (Studio) this can be changed
|
built. If you are using MS Visual C++ (Studio) this can be changed
|
||||||
by:
|
by:
|
||||||
|
|
||||||
1. Select Settings... from the Project Menu.
|
1. Select Settings... from the Project Menu.
|
||||||
2. Select the C/C++ Tab.
|
2. Select the C/C++ Tab.
|
||||||
3. Select "Code Generation from the "Category" drop down list box
|
3. Select "Code Generation from the "Category" drop down list box
|
||||||
4. Select the Appropriate library (see table below) from the "Use
|
4. Select the Appropriate library (see table below) from the "Use
|
||||||
run-time library" drop down list box. Perform this step for both
|
run-time library" drop down list box. Perform this step for both
|
||||||
your debug and release versions of your application (look at the
|
your debug and release versions of your application (look at the
|
||||||
top left of the settings panel to change between the two)
|
top left of the settings panel to change between the two)
|
||||||
@@ -645,30 +825,44 @@ by:
|
|||||||
Note that debug and release libraries are NOT interchangeable. If you
|
Note that debug and release libraries are NOT interchangeable. If you
|
||||||
built OpenSSL with /MD your application must use /MD and cannot use /MDd.
|
built OpenSSL with /MD your application must use /MD and cannot use /MDd.
|
||||||
|
|
||||||
|
As per 0.9.8 the above limitation is eliminated for .DLLs. OpenSSL
|
||||||
|
.DLLs compiled with some specific run-time option [we insist on the
|
||||||
|
default /MD] can be deployed with application compiled with different
|
||||||
|
option or even different compiler. But there is a catch! Instead of
|
||||||
|
re-compiling OpenSSL toolkit, as you would have to with prior versions,
|
||||||
|
you have to compile small C snippet with compiler and/or options of
|
||||||
|
your choice. The snippet gets installed as
|
||||||
|
<install-root>/include/openssl/applink.c and should be either added to
|
||||||
|
your application project or simply #include-d in one [and only one]
|
||||||
|
of your application source files. Failure to link this shim module
|
||||||
|
into your application manifests itself as fatal "no OPENSSL_Applink"
|
||||||
|
run-time error. An explicit reminder is due that in this situation
|
||||||
|
[mixing compiler options] it is as important to add CRYPTO_malloc_init
|
||||||
|
prior first call to OpenSSL.
|
||||||
|
|
||||||
* How do I read or write a DER encoded buffer using the ASN1 functions?
|
* How do I read or write a DER encoded buffer using the ASN1 functions?
|
||||||
|
|
||||||
You have two options. You can either use a memory BIO in conjunction
|
You have two options. You can either use a memory BIO in conjunction
|
||||||
with the i2d_XXX_bio() or d2i_XXX_bio() functions or you can use the
|
with the i2d_*_bio() or d2i_*_bio() functions or you can use the
|
||||||
i2d_XXX(), d2i_XXX() functions directly. Since these are often the
|
i2d_*(), d2i_*() functions directly. Since these are often the
|
||||||
cause of grief here are some code fragments using PKCS7 as an example:
|
cause of grief here are some code fragments using PKCS7 as an example:
|
||||||
|
|
||||||
unsigned char *buf, *p;
|
unsigned char *buf, *p;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
len = i2d_PKCS7(p7, NULL);
|
len = i2d_PKCS7(p7, NULL);
|
||||||
buf = OPENSSL_malloc(len); /* or Malloc, error checking omitted */
|
buf = OPENSSL_malloc(len); /* or Malloc, error checking omitted */
|
||||||
p = buf;
|
p = buf;
|
||||||
i2d_PKCS7(p7, &p);
|
i2d_PKCS7(p7, &p);
|
||||||
|
|
||||||
At this point buf contains the len bytes of the DER encoding of
|
At this point buf contains the len bytes of the DER encoding of
|
||||||
p7.
|
p7.
|
||||||
|
|
||||||
The opposite assumes we already have len bytes in buf:
|
The opposite assumes we already have len bytes in buf:
|
||||||
|
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
p = buf;
|
p = buf;
|
||||||
p7 = d2i_PKCS7(NULL, &p, len);
|
p7 = d2i_PKCS7(NULL, &p, len);
|
||||||
|
|
||||||
At this point p7 contains a valid PKCS7 structure of NULL if an error
|
At this point p7 contains a valid PKCS7 structure of NULL if an error
|
||||||
occurred. If an error occurred ERR_print_errors(bio) should give more
|
occurred. If an error occurred ERR_print_errors(bio) should give more
|
||||||
@@ -683,6 +877,20 @@ and attempts to free the buffer will have unpredictable results
|
|||||||
because it no longer points to the same address.
|
because it no longer points to the same address.
|
||||||
|
|
||||||
|
|
||||||
|
* OpenSSL uses DER but I need BER format: does OpenSSL support BER?
|
||||||
|
|
||||||
|
The short answer is yes, because DER is a special case of BER and OpenSSL
|
||||||
|
ASN1 decoders can process BER.
|
||||||
|
|
||||||
|
The longer answer is that ASN1 structures can be encoded in a number of
|
||||||
|
different ways. One set of ways is the Basic Encoding Rules (BER) with various
|
||||||
|
permissible encodings. A restriction of BER is the Distinguished Encoding
|
||||||
|
Rules (DER): these uniquely specify how a given structure is encoded.
|
||||||
|
|
||||||
|
Therefore, because DER is a special case of BER, DER is an acceptable encoding
|
||||||
|
for BER.
|
||||||
|
|
||||||
|
|
||||||
* I've tried using <M_some_evil_pkcs12_macro> and I get errors why?
|
* I've tried using <M_some_evil_pkcs12_macro> and I get errors why?
|
||||||
|
|
||||||
This usually happens when you try compiling something using the PKCS#12
|
This usually happens when you try compiling something using the PKCS#12
|
||||||
@@ -716,11 +924,11 @@ code itself (the hex digits after the second colon).
|
|||||||
|
|
||||||
* Why do I get errors about unknown algorithms?
|
* Why do I get errors about unknown algorithms?
|
||||||
|
|
||||||
This can happen under several circumstances such as reading in an
|
The cause is forgetting to load OpenSSL's table of algorithms with
|
||||||
encrypted private key or attempting to decrypt a PKCS#12 file. The cause
|
OpenSSL_add_all_algorithms(). See the manual page for more information. This
|
||||||
is forgetting to load OpenSSL's table of algorithms with
|
can cause several problems such as being unable to read in an encrypted
|
||||||
OpenSSL_add_all_algorithms(). See the manual page for more information.
|
PEM file, unable to decrypt a PKCS#12 file or signature failure when
|
||||||
|
verifying certificates.
|
||||||
|
|
||||||
* Why can't the OpenSSH configure script detect OpenSSL?
|
* Why can't the OpenSSH configure script detect OpenSSL?
|
||||||
|
|
||||||
@@ -765,5 +973,69 @@ The correct name according to RFC2256 (LDAP) is x500UniqueIdentifier.
|
|||||||
Change your code to use the new name when compiling against OpenSSL 0.9.7.
|
Change your code to use the new name when compiling against OpenSSL 0.9.7.
|
||||||
|
|
||||||
|
|
||||||
===============================================================================
|
* I think I've detected a memory leak, is this a bug?
|
||||||
|
|
||||||
|
In most cases the cause of an apparent memory leak is an OpenSSL internal table
|
||||||
|
that is allocated when an application starts up. Since such tables do not grow
|
||||||
|
in size over time they are harmless.
|
||||||
|
|
||||||
|
These internal tables can be freed up when an application closes using various
|
||||||
|
functions. Currently these include following:
|
||||||
|
|
||||||
|
Thread-local cleanup functions:
|
||||||
|
|
||||||
|
ERR_remove_state()
|
||||||
|
|
||||||
|
Application-global cleanup functions that are aware of usage (and therefore
|
||||||
|
thread-safe):
|
||||||
|
|
||||||
|
ENGINE_cleanup() and CONF_modules_unload()
|
||||||
|
|
||||||
|
"Brutal" (thread-unsafe) Application-global cleanup functions:
|
||||||
|
|
||||||
|
ERR_free_strings(), EVP_cleanup() and CRYPTO_cleanup_all_ex_data().
|
||||||
|
|
||||||
|
|
||||||
|
* Why does Valgrind complain about the use of uninitialized data?
|
||||||
|
|
||||||
|
When OpenSSL's PRNG routines are called to generate random numbers the supplied
|
||||||
|
buffer contents are mixed into the entropy pool: so it technically does not
|
||||||
|
matter whether the buffer is initialized at this point or not. Valgrind (and
|
||||||
|
other test tools) will complain about this. When using Valgrind, make sure the
|
||||||
|
OpenSSL library has been compiled with the PURIFY macro defined (-DPURIFY)
|
||||||
|
to get rid of these warnings.
|
||||||
|
|
||||||
|
|
||||||
|
* Why doesn't a memory BIO work when a file does?
|
||||||
|
|
||||||
|
This can occur in several cases for example reading an S/MIME email message.
|
||||||
|
The reason is that a memory BIO can do one of two things when all the data
|
||||||
|
has been read from it.
|
||||||
|
|
||||||
|
The default behaviour is to indicate that no more data is available and that
|
||||||
|
the call should be retried, this is to allow the application to fill up the BIO
|
||||||
|
again if necessary.
|
||||||
|
|
||||||
|
Alternatively it can indicate that no more data is available and that EOF has
|
||||||
|
been reached.
|
||||||
|
|
||||||
|
If a memory BIO is to behave in the same way as a file this second behaviour
|
||||||
|
is needed. This must be done by calling:
|
||||||
|
|
||||||
|
BIO_set_mem_eof_return(bio, 0);
|
||||||
|
|
||||||
|
See the manual pages for more details.
|
||||||
|
|
||||||
|
|
||||||
|
* Where are the declarations and implementations of d2i_X509() etc?
|
||||||
|
|
||||||
|
These are defined and implemented by macros of the form:
|
||||||
|
|
||||||
|
|
||||||
|
DECLARE_ASN1_FUNCTIONS(X509) and IMPLEMENT_ASN1_FUNCTIONS(X509)
|
||||||
|
|
||||||
|
The implementation passes an ASN1 "template" defining the structure into an
|
||||||
|
ASN1 interpreter using generalised functions such as ASN1_item_d2i().
|
||||||
|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
|||||||
54
INSTALL
54
INSTALL
@@ -2,8 +2,10 @@
|
|||||||
INSTALLATION ON THE UNIX PLATFORM
|
INSTALLATION ON THE UNIX PLATFORM
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
[Installation on DOS (with djgpp), Windows, OpenVMS and MacOS (before MacOS X)
|
[Installation on DOS (with djgpp), Windows, OpenVMS, MacOS (before MacOS X)
|
||||||
is described in INSTALL.DJGPP, INSTALL.W32, INSTALL.VMS and INSTALL.MacOS.
|
and NetWare is described in INSTALL.DJGPP, INSTALL.W32, INSTALL.VMS,
|
||||||
|
INSTALL.MacOS and INSTALL.NW.
|
||||||
|
|
||||||
This document describes installation on operating systems in the Unix
|
This document describes installation on operating systems in the Unix
|
||||||
family.]
|
family.]
|
||||||
|
|
||||||
@@ -73,18 +75,40 @@
|
|||||||
no-asm Do not use assembler code.
|
no-asm Do not use assembler code.
|
||||||
|
|
||||||
386 Use the 80386 instruction set only (the default x86 code is
|
386 Use the 80386 instruction set only (the default x86 code is
|
||||||
more efficient, but requires at least a 486).
|
more efficient, but requires at least a 486). Note: Use
|
||||||
|
compiler flags for any other CPU specific configuration,
|
||||||
|
e.g. "-m32" to build x86 code on an x64 system.
|
||||||
|
|
||||||
|
no-sse2 Exclude SSE2 code pathes. Normally SSE2 extention is
|
||||||
|
detected at run-time, but the decision whether or not the
|
||||||
|
machine code will be executed is taken solely on CPU
|
||||||
|
capability vector. This means that if you happen to run OS
|
||||||
|
kernel which does not support SSE2 extension on Intel P4
|
||||||
|
processor, then your application might be exposed to
|
||||||
|
"illegal instruction" exception. There might be a way
|
||||||
|
to enable support in kernel, e.g. FreeBSD kernel can be
|
||||||
|
compiled with CPU_ENABLE_SSE, and there is a way to
|
||||||
|
disengage SSE2 code pathes upon application start-up,
|
||||||
|
but if you aim for wider "audience" running such kernel,
|
||||||
|
consider no-sse2. Both 386 and no-asm options above imply
|
||||||
|
no-sse2.
|
||||||
|
|
||||||
no-<cipher> Build without the specified cipher (bf, cast, des, dh, dsa,
|
no-<cipher> Build without the specified cipher (bf, cast, des, dh, dsa,
|
||||||
hmac, md2, md5, mdc2, rc2, rc4, rc5, rsa, sha).
|
hmac, md2, md5, mdc2, rc2, rc4, rc5, rsa, sha).
|
||||||
The crypto/<cipher> directory can be removed after running
|
The crypto/<cipher> directory can be removed after running
|
||||||
"make depend".
|
"make depend".
|
||||||
|
|
||||||
-Dxxx, -lxxx, -Lxxx, -fxxx, -Kxxx These system specific options will
|
-Dxxx, -lxxx, -Lxxx, -fxxx, -mXXX, -Kxxx These system specific options will
|
||||||
be passed through to the compiler to allow you to
|
be passed through to the compiler to allow you to
|
||||||
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
|
||||||
----------------------
|
----------------------
|
||||||
@@ -123,7 +147,7 @@
|
|||||||
generic configurations "cc" or "gcc" should usually work on 32 bit
|
generic configurations "cc" or "gcc" should usually work on 32 bit
|
||||||
systems.
|
systems.
|
||||||
|
|
||||||
Configure creates the file Makefile from Makefile.org and
|
Configure creates the file Makefile.ssl from Makefile.org and
|
||||||
defines various macros in crypto/opensslconf.h (generated from
|
defines various macros in crypto/opensslconf.h (generated from
|
||||||
crypto/opensslconf.h.in).
|
crypto/opensslconf.h.in).
|
||||||
|
|
||||||
@@ -140,7 +164,7 @@
|
|||||||
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/rt2.html and will be forwarded to a
|
via http://www.openssl.org/support/rt.html and will be forwarded to a
|
||||||
public mailing list). Include the output of "make report" in your message.
|
public mailing list). Include the output of "make report" in your message.
|
||||||
Please check out the request tracker. Maybe the bug was already
|
Please check out the request tracker. Maybe the bug was already
|
||||||
reported or has already been fixed.
|
reported or has already been fixed.
|
||||||
@@ -159,10 +183,10 @@
|
|||||||
the failure that isn't a problem in OpenSSL itself (like a missing
|
the failure that isn't a problem in OpenSSL itself (like a missing
|
||||||
or malfunctioning bc). If it is a problem with OpenSSL itself,
|
or malfunctioning bc). If it is a problem with OpenSSL itself,
|
||||||
try removing any compiler optimization flags from the CFLAG line
|
try removing any compiler optimization flags from the CFLAG line
|
||||||
in Makefile and run "make clean; make". Please send a bug
|
in Makefile.ssl and run "make clean; make". Please send a bug
|
||||||
report to <openssl-bugs@openssl.org>, including the output of
|
report to <openssl-bugs@openssl.org>, including the output of
|
||||||
"make report" in order to be added to the request tracker at
|
"make report" in order to be added to the request tracker at
|
||||||
http://www.openssl.org/support/rt2.html.
|
http://www.openssl.org/support/rt.html.
|
||||||
|
|
||||||
4. If everything tests ok, install OpenSSL with
|
4. If everything tests ok, install OpenSSL with
|
||||||
|
|
||||||
@@ -188,6 +212,10 @@
|
|||||||
compile programs with libcrypto or libssl.
|
compile programs with libcrypto or libssl.
|
||||||
lib Contains the OpenSSL library files themselves.
|
lib Contains the OpenSSL library files themselves.
|
||||||
|
|
||||||
|
Use "make install_sw" to install the software without documentation,
|
||||||
|
and "install_docs_html" to install HTML renditions of the manual
|
||||||
|
pages.
|
||||||
|
|
||||||
Package builders who want to configure the library for standard
|
Package builders who want to configure the library for standard
|
||||||
locations, but have the package installed somewhere else so that
|
locations, but have the package installed somewhere else so that
|
||||||
it can easily be packaged, can use
|
it can easily be packaged, can use
|
||||||
@@ -284,10 +312,10 @@
|
|||||||
Note on shared libraries
|
Note on shared libraries
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
Shared library is currently an experimental feature. The only reason to
|
Shared libraries have certain caveats. Binary backward compatibility
|
||||||
have them would be to conserve memory on systems where several program
|
can't be guaranteed before OpenSSL version 1.0. The only reason to
|
||||||
are using OpenSSL. Binary backward compatibility can't be guaranteed
|
use them would be to conserve memory on systems where several programs
|
||||||
before OpenSSL version 1.0.
|
are using OpenSSL.
|
||||||
|
|
||||||
For some systems, the OpenSSL Configure script knows what is needed to
|
For some systems, the OpenSSL Configure script knows what is needed to
|
||||||
build shared libraries for libcrypto and libssl. On these systems,
|
build shared libraries for libcrypto and libssl. On these systems,
|
||||||
@@ -312,7 +340,7 @@
|
|||||||
Note on support for multiple builds
|
Note on support for multiple builds
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
OpenSSL is usually built in it's source tree. Unfortunately, this doesn't
|
OpenSSL is usually built in its source tree. Unfortunately, this doesn't
|
||||||
support building for multiple platforms from the same source tree very well.
|
support building for multiple platforms from the same source tree very well.
|
||||||
It is however possible to build in a separate tree through the use of lots
|
It is however possible to build in a separate tree through the use of lots
|
||||||
of symbolic links, which should be prepared like this:
|
of symbolic links, which should be prepared like this:
|
||||||
|
|||||||
@@ -3,32 +3,45 @@
|
|||||||
INSTALLATION ON THE DOS PLATFORM WITH DJGPP
|
INSTALLATION ON THE DOS PLATFORM WITH DJGPP
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
Openssl has been ported to DOS, but only with long filename support. If
|
OpenSSL has been ported to DJGPP, a Unix look-alike 32-bit run-time
|
||||||
you wish to compile on native DOS with 8+3 filenames, you will have to
|
environment for 16-bit DOS, but only with long filename support.
|
||||||
tweak the installation yourself, including renaming files with illegal
|
If you wish to compile on native DOS with 8+3 filenames, you will
|
||||||
or duplicate names.
|
have to tweak the installation yourself, including renaming files
|
||||||
|
with illegal or duplicate names.
|
||||||
|
|
||||||
You should have a full DJGPP environment installed, including the
|
You should have a full DJGPP environment installed, including the
|
||||||
latest versions of DJGPP, GCC, BINUTILS, BASH, etc. This package
|
latest versions of DJGPP, GCC, BINUTILS, BASH, etc. This package
|
||||||
requires that PERL and BC also be installed.
|
requires that PERL and BC also be installed.
|
||||||
|
|
||||||
All of these can be obtained from the usual DJGPP mirror sites, such
|
All of these can be obtained from the usual DJGPP mirror sites or
|
||||||
as "ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp". You also need to
|
directly at "http://www.delorie.com/pub/djgpp". For help on which
|
||||||
have the WATT-32 networking package installed before you try to compile
|
files to download, see the DJGPP "ZIP PICKER" page at
|
||||||
openssl. This can be obtained from "http://www.bgnett.no/~giva/".
|
"http://www.delorie.com/djgpp/zip-picker.html". You also need to have
|
||||||
|
the WATT-32 networking package installed before you try to compile
|
||||||
|
OpenSSL. This can be obtained from "http://www.bgnett.no/~giva/".
|
||||||
The Makefile assumes that the WATT-32 code is in the directory
|
The Makefile assumes that the WATT-32 code is in the directory
|
||||||
specified by the environment variable WATT_ROOT. If you have watt-32
|
specified by the environment variable WATT_ROOT. If you have watt-32
|
||||||
in directory "watt32" under your main DJGPP directory, specify
|
in directory "watt32" under your main DJGPP directory, specify
|
||||||
WATT_ROOT="/dev/env/DJDIR/watt32".
|
WATT_ROOT="/dev/env/DJDIR/watt32".
|
||||||
|
|
||||||
To compile openssl, start your BASH shell. Then configure for DOS by
|
To compile OpenSSL, start your BASH shell, then configure for DJGPP by
|
||||||
running "./Configure" with appropriate arguments. The basic syntax for
|
running "./Configure" with appropriate arguments:
|
||||||
DOS is:
|
|
||||||
./Configure no-threads --prefix=/dev/env/DJDIR DJGPP
|
|
||||||
|
|
||||||
You may run out of DPMI selectors when running in a DOS box under
|
./Configure no-threads --prefix=/dev/env/DJDIR DJGPP
|
||||||
Windows. If so, just close the BASH shell, go back to Windows, and
|
|
||||||
restart BASH. Then run "make" again.
|
|
||||||
|
|
||||||
Building openssl under DJGPP has been tested with DJGPP 2.03,
|
And finally fire up "make". You may run out of DPMI selectors when
|
||||||
GCC 2.952, GCC 2.953, perl 5.005_02 and perl 5.006_01.
|
running in a DOS box under Windows. If so, just close the BASH
|
||||||
|
shell, go back to Windows, and restart BASH. Then run "make" again.
|
||||||
|
|
||||||
|
RUN-TIME CAVEAT LECTOR
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Quoting FAQ:
|
||||||
|
|
||||||
|
"Cryptographic software needs a source of unpredictable data to work
|
||||||
|
correctly. Many open source operating systems provide a "randomness
|
||||||
|
device" (/dev/urandom or /dev/random) that serves this purpose."
|
||||||
|
|
||||||
|
As of version 0.9.7f DJGPP port checks upon /dev/urandom$ for a 3rd
|
||||||
|
party "randomness" DOS driver. One such driver, NOISE.SYS, can be
|
||||||
|
obtained from "http://www.rahul.net/dkaufman/index.html".
|
||||||
|
|||||||
454
INSTALL.NW
Normal file
454
INSTALL.NW
Normal file
@@ -0,0 +1,454 @@
|
|||||||
|
|
||||||
|
INSTALLATION ON THE NETWARE PLATFORM
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Notes about building OpenSSL for NetWare.
|
||||||
|
|
||||||
|
|
||||||
|
BUILD PLATFORM:
|
||||||
|
---------------
|
||||||
|
The build scripts (batch files, perl scripts, etc) have been developed and
|
||||||
|
tested on W2K. The scripts should run fine on other Windows platforms
|
||||||
|
(NT, Win9x, WinXP) but they have not been tested. They may require some
|
||||||
|
modifications.
|
||||||
|
|
||||||
|
|
||||||
|
Supported NetWare Platforms - NetWare 5.x, NetWare 6.x:
|
||||||
|
-------------------------------------------------------
|
||||||
|
OpenSSL can either use the WinSock interfaces introduced in NetWare 5,
|
||||||
|
or the BSD socket interface. Previous versions of NetWare, 4.x and 3.x,
|
||||||
|
are only supported if OpenSSL is build for CLIB and BSD sockets;
|
||||||
|
WinSock builds only support NetWare 5 and up.
|
||||||
|
|
||||||
|
On NetWare there are two c-runtime libraries. There is the legacy CLIB
|
||||||
|
interfaces and the newer LIBC interfaces. Being ANSI-C libraries, the
|
||||||
|
functionality in CLIB and LIBC is similar but the LIBC interfaces are built
|
||||||
|
using Novell Kernal Services (NKS) which is designed to leverage
|
||||||
|
multi-processor environments.
|
||||||
|
|
||||||
|
The NetWare port of OpenSSL can be configured to build using CLIB or LIBC.
|
||||||
|
The CLIB build was developed and tested using NetWare 5.0 sp6.0a. The LIBC
|
||||||
|
build was developed and tested using the NetWare 6.0 FCS.
|
||||||
|
|
||||||
|
The necessary LIBC functionality ships with NetWare 6. However, earlier
|
||||||
|
NetWare 5.x versions will require updates in order to run the OpenSSL LIBC
|
||||||
|
build (NetWare 5.1 SP8 is known to work).
|
||||||
|
|
||||||
|
As of June 2005, the LIBC build can be configured to use BSD sockets instead
|
||||||
|
of WinSock sockets. Call Configure (usually through netware\build.bat) using
|
||||||
|
a target of "netware-libc-bsdsock" instead of "netware-libc".
|
||||||
|
|
||||||
|
As of June 2007, support for CLIB and BSD sockets is also now available
|
||||||
|
using a target of "netware-clib-bsdsock" instead of "netware-clib";
|
||||||
|
also gcc builds are now supported on both Linux and Win32 (post 0.9.8e).
|
||||||
|
|
||||||
|
REQUIRED TOOLS:
|
||||||
|
---------------
|
||||||
|
Based upon the configuration and build options used, some or all of the
|
||||||
|
following tools may be required:
|
||||||
|
|
||||||
|
* Perl for Win32 - required (http://www.activestate.com/ActivePerl)
|
||||||
|
Used to run the various perl scripts on the build platform.
|
||||||
|
|
||||||
|
* Perl 5.8.0 for NetWare v3.20 (or later) - required
|
||||||
|
(http://developer.novell.com) Used to run the test script on NetWare
|
||||||
|
after building.
|
||||||
|
|
||||||
|
* Compiler / Linker - required:
|
||||||
|
Metrowerks CodeWarrior PDK 2.1 (or later) for NetWare (commercial):
|
||||||
|
Provides command line tools used for building.
|
||||||
|
Tools:
|
||||||
|
mwccnlm.exe - C/C++ Compiler for NetWare
|
||||||
|
mwldnlm.exe - Linker for NetWare
|
||||||
|
mwasmnlm.exe - x86 assembler for NetWare (if using assembly option)
|
||||||
|
|
||||||
|
gcc / nlmconv Cross-Compiler, available from Novell Forge (free):
|
||||||
|
http://forge.novell.com/modules/xfmod/project/?aunixnw
|
||||||
|
|
||||||
|
* Assemblers - optional:
|
||||||
|
If you intend to build using the assembly options you will need an
|
||||||
|
assembler. Work has been completed to support two assemblers, Metrowerks
|
||||||
|
and NASM. However, during development, a bug was found in the Metrowerks
|
||||||
|
assembler which generates incorrect code. Until this problem is fixed,
|
||||||
|
the Metrowerks assembler cannot be used.
|
||||||
|
|
||||||
|
mwasmnlm.exe - Metrowerks x86 assembler - part of CodeWarrior tools.
|
||||||
|
(version 2.2 Built Aug 23, 1999 - not useable due to code
|
||||||
|
generation bug)
|
||||||
|
|
||||||
|
nasmw.exe - Netwide Assembler NASM
|
||||||
|
version 0.98 was used in development and testing
|
||||||
|
|
||||||
|
* Make Tool - required:
|
||||||
|
In order to build you will need a make tool. Two make tools are
|
||||||
|
supported, GNU make (gmake.exe) or Microsoft nmake.exe.
|
||||||
|
|
||||||
|
make.exe - GNU make for Windows (version 3.75 used for development)
|
||||||
|
http://gnuwin32.sourceforge.net/packages/make.htm
|
||||||
|
|
||||||
|
nmake.exe - Microsoft make (Version 6.00.8168.0 used for development)
|
||||||
|
http://support.microsoft.com/kb/132084/EN-US/
|
||||||
|
|
||||||
|
* Novell Developer Kit (NDK) - required: (http://developer.novell.com)
|
||||||
|
|
||||||
|
CLIB - BUILDS:
|
||||||
|
|
||||||
|
WinSock2 Developer Components for NetWare:
|
||||||
|
For initial development, the October 27, 2000 version was used.
|
||||||
|
However, future versions should also work.
|
||||||
|
|
||||||
|
NOTE: The WinSock2 components include headers & import files for
|
||||||
|
NetWare, but you will also need the winsock2.h and supporting
|
||||||
|
headers (pshpack4.h, poppack.h, qos.h) delivered in the
|
||||||
|
Microsoft SDK. Note: The winsock2.h support headers may change
|
||||||
|
with various versions of winsock2.h. Check the dependencies
|
||||||
|
section on the NDK WinSock2 download page for the latest
|
||||||
|
information on dependencies. These components are unsupported by
|
||||||
|
Novell. They are provided as a courtesy, but it is strongly
|
||||||
|
suggested that all development be done using LIBC, not CLIB.
|
||||||
|
|
||||||
|
As of June 2005, the WinSock2 components are available at:
|
||||||
|
http://forgeftp.novell.com//ws2comp/
|
||||||
|
|
||||||
|
|
||||||
|
NLM and NetWare libraries for C (including CLIB and XPlat):
|
||||||
|
If you are going to build a CLIB version of OpenSSL, you will
|
||||||
|
need the CLIB headers and imports. The March, 2001 NDK release or
|
||||||
|
later is recommended.
|
||||||
|
|
||||||
|
Earlier versions should work but haven't been tested. In recent
|
||||||
|
versions the import files have been consolidated and function
|
||||||
|
names moved. This means you may run into link problems
|
||||||
|
(undefined symbols) when using earlier versions. The functions
|
||||||
|
are available in earlier versions, but you will have to modifiy
|
||||||
|
the make files to include additional import files (see
|
||||||
|
openssl\util\pl\netware.pl).
|
||||||
|
|
||||||
|
|
||||||
|
LIBC - BUILDS:
|
||||||
|
|
||||||
|
Libraries for C (LIBC) - LIBC headers and import files
|
||||||
|
If you are going to build a LIBC version of OpenSSL, you will
|
||||||
|
need the LIBC headers and imports. The March 14, 2002 NDK release or
|
||||||
|
later is required.
|
||||||
|
|
||||||
|
NOTE: The LIBC SDK includes the necessary WinSock2 support.
|
||||||
|
It is not necessary to download the WinSock2 NDK when building for
|
||||||
|
LIBC. The LIBC SDK also includes the appropriate BSD socket support
|
||||||
|
if configuring to use BSD sockets.
|
||||||
|
|
||||||
|
|
||||||
|
BUILDING:
|
||||||
|
---------
|
||||||
|
Before building, you will need to set a few environment variables. You can
|
||||||
|
set them manually or you can modify the "netware\set_env.bat" file.
|
||||||
|
|
||||||
|
The set_env.bat file is a template you can use to set up the path
|
||||||
|
and environment variables you will need to build. Modify the
|
||||||
|
various lines to point to YOUR tools and run set_env.bat.
|
||||||
|
|
||||||
|
netware\set_env.bat <target> [compiler]
|
||||||
|
|
||||||
|
target - "netware-clib" - CLIB NetWare build
|
||||||
|
- "netware-libc" - LIBC NetWare build
|
||||||
|
|
||||||
|
compiler - "gnuc" - GNU GCC Compiler
|
||||||
|
- "codewarrior" - MetroWerks CodeWarrior (default)
|
||||||
|
|
||||||
|
If you don't use set_env.bat, you will need to set up the following
|
||||||
|
environment variables:
|
||||||
|
|
||||||
|
PATH - Set PATH to point to the tools you will use.
|
||||||
|
|
||||||
|
INCLUDE - The location of the NDK include files.
|
||||||
|
|
||||||
|
CLIB ex: set INCLUDE=c:\ndk\nwsdk\include\nlm
|
||||||
|
LIBC ex: set INCLUDE=c:\ndk\libc\include
|
||||||
|
|
||||||
|
PRELUDE - The absolute path of the prelude object to link with. For
|
||||||
|
a CLIB build it is recommended you use the "clibpre.o" files shipped
|
||||||
|
with the Metrowerks PDK for NetWare. For a LIBC build you should
|
||||||
|
use the "libcpre.o" file delivered with the LIBC NDK components.
|
||||||
|
|
||||||
|
CLIB ex: set PRELUDE=c:\ndk\nwsdk\imports\clibpre.o
|
||||||
|
LIBC ex: set PRELUDE=c:\ndk\libc\imports\libcpre.o
|
||||||
|
|
||||||
|
IMPORTS - The locaton of the NDK import files.
|
||||||
|
|
||||||
|
CLIB ex: set IMPORTS=c:\ndk\nwsdk\imports
|
||||||
|
LIBC ex: set IMPORTS=c:\ndk\libc\imports
|
||||||
|
|
||||||
|
|
||||||
|
In order to build, you need to run the Perl scripts to configure the build
|
||||||
|
process and generate a make file. There is a batch file,
|
||||||
|
"netware\build.bat", to automate the process.
|
||||||
|
|
||||||
|
Build.bat runs the build configuration scripts and generates a make file.
|
||||||
|
If an assembly option is specified, it also runs the scripts to generate
|
||||||
|
the assembly code. Always run build.bat from the "openssl" directory.
|
||||||
|
|
||||||
|
netware\build [target] [debug opts] [assembly opts] [configure opts]
|
||||||
|
|
||||||
|
target - "netware-clib" - CLIB NetWare build (WinSock Sockets)
|
||||||
|
- "netware-clib-bsdsock" - CLIB NetWare build (BSD Sockets)
|
||||||
|
- "netware-libc" - LIBC NetWare build (WinSock Sockets)
|
||||||
|
- "netware-libc-bsdsock" - LIBC NetWare build (BSD Sockets)
|
||||||
|
|
||||||
|
debug opts - "debug" - build debug
|
||||||
|
|
||||||
|
assembly opts - "nw-mwasm" - use Metrowerks assembler
|
||||||
|
"nw-nasm" - use NASM assembler
|
||||||
|
"no-asm" - don't use assembly
|
||||||
|
|
||||||
|
configure opts- all unrecognized arguments are passed to the
|
||||||
|
perl 'configure' script. See that script for
|
||||||
|
internal documentation regarding options that
|
||||||
|
are available.
|
||||||
|
|
||||||
|
examples:
|
||||||
|
|
||||||
|
CLIB build, debug, without assembly:
|
||||||
|
netware\build.bat netware-clib debug no-asm
|
||||||
|
|
||||||
|
LIBC build, non-debug, using NASM assembly, add mdc2 support:
|
||||||
|
netware\build.bat netware-libc nw-nasm enable-mdc2
|
||||||
|
|
||||||
|
LIBC build, BSD sockets, non-debug, without assembly:
|
||||||
|
netware\build.bat netware-libc-bsdsock no-asm
|
||||||
|
|
||||||
|
Running build.bat generates a make file to be processed by your make
|
||||||
|
tool (gmake or nmake):
|
||||||
|
|
||||||
|
CLIB ex: gmake -f netware\nlm_clib_dbg.mak
|
||||||
|
LIBC ex: gmake -f netware\nlm_libc.mak
|
||||||
|
LIBC ex: gmake -f netware\nlm_libc_bsdsock.mak
|
||||||
|
|
||||||
|
|
||||||
|
You can also run the build scripts manually if you do not want to use the
|
||||||
|
build.bat file. Run the following scripts in the "\openssl"
|
||||||
|
subdirectory (in the order listed below):
|
||||||
|
|
||||||
|
perl configure no-asm [other config opts] [netware-clib|netware-libc|netware-libc-bsdsock]
|
||||||
|
configures no assembly build for specified netware environment
|
||||||
|
(CLIB or LIBC).
|
||||||
|
|
||||||
|
perl util\mkfiles.pl >MINFO
|
||||||
|
generates a listing of source files (used by mk1mf)
|
||||||
|
|
||||||
|
perl util\mk1mf.pl no-asm [other config opts] [netware-clib|netware-libc|netware-libc-bsdsock >netware\nlm.mak
|
||||||
|
generates the makefile for NetWare
|
||||||
|
|
||||||
|
gmake -f netware\nlm.mak
|
||||||
|
build with the make tool (nmake.exe also works)
|
||||||
|
|
||||||
|
NOTE: If you are building using the assembly option, you must also run the
|
||||||
|
various Perl scripts to generate the assembly files. See build.bat
|
||||||
|
for an example of running the various assembly scripts. You must use the
|
||||||
|
"no-asm" option to build without assembly. The configure and mk1mf scripts
|
||||||
|
also have various other options. See the scripts for more information.
|
||||||
|
|
||||||
|
|
||||||
|
The output from the build is placed in the following directories:
|
||||||
|
|
||||||
|
CLIB Debug build:
|
||||||
|
out_nw_clib.dbg - static libs & test nlm(s)
|
||||||
|
tmp_nw_clib.dbg - temporary build files
|
||||||
|
outinc_nw_clib - necessary include files
|
||||||
|
|
||||||
|
CLIB Non-debug build:
|
||||||
|
out_nw_clib - static libs & test nlm(s)
|
||||||
|
tmp_nw_clib - temporary build files
|
||||||
|
outinc_nw_clib - necesary include files
|
||||||
|
|
||||||
|
LIBC Debug build:
|
||||||
|
out_nw_libc.dbg - static libs & test nlm(s)
|
||||||
|
tmp_nw_libc.dbg - temporary build files
|
||||||
|
outinc_nw_libc - necessary include files
|
||||||
|
|
||||||
|
LIBC Non-debug build:
|
||||||
|
out_nw_libc - static libs & test nlm(s)
|
||||||
|
tmp_nw_libc - temporary build files
|
||||||
|
outinc_nw_libc - necesary include files
|
||||||
|
|
||||||
|
|
||||||
|
TESTING:
|
||||||
|
--------
|
||||||
|
The build process creates the OpenSSL static libs ( crypto.lib, ssl.lib,
|
||||||
|
rsaglue.lib ) and several test programs. You should copy the test programs
|
||||||
|
to your NetWare server and run the tests.
|
||||||
|
|
||||||
|
The batch file "netware\cpy_tests.bat" will copy all the necessary files
|
||||||
|
to your server for testing. In order to run the batch file, you need a
|
||||||
|
drive mapped to your target server. It will create an "OpenSSL" directory
|
||||||
|
on the drive and copy the test files to it. CAUTION: If a directory with the
|
||||||
|
name of "OpenSSL" already exists, it will be deleted.
|
||||||
|
|
||||||
|
To run cpy_tests.bat:
|
||||||
|
|
||||||
|
netware\cpy_tests [output directory] [NetWare drive]
|
||||||
|
|
||||||
|
output directory - "out_nw_clib.dbg", "out_nw_libc", etc.
|
||||||
|
NetWare drive - drive letter of mapped drive
|
||||||
|
|
||||||
|
CLIB ex: netware\cpy_tests out_nw_clib m:
|
||||||
|
LIBC ex: netware\cpy_tests out_nw_libc m:
|
||||||
|
|
||||||
|
|
||||||
|
The Perl script, "do_tests.pl", in the "OpenSSL" directory on the server
|
||||||
|
should be used to execute the tests. Before running the script, make sure
|
||||||
|
your SEARCH PATH includes the "OpenSSL" directory. For example, if you
|
||||||
|
copied the files to the "sys:" volume you use the command:
|
||||||
|
|
||||||
|
SEARCH ADD SYS:\OPENSSL
|
||||||
|
|
||||||
|
|
||||||
|
To run do_tests.pl type (at the console prompt):
|
||||||
|
|
||||||
|
perl \openssl\do_tests.pl [options]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-p - pause after executing each test
|
||||||
|
|
||||||
|
The do_tests.pl script generates a log file "\openssl\test_out\tests.log"
|
||||||
|
which should be reviewed for errors. Any errors will be denoted by the word
|
||||||
|
"ERROR" in the log.
|
||||||
|
|
||||||
|
DEVELOPING WITH THE OPENSSL SDK:
|
||||||
|
--------------------------------
|
||||||
|
Now that everything is built and tested, you are ready to use the OpenSSL
|
||||||
|
libraries in your development.
|
||||||
|
|
||||||
|
There is no real installation procedure, just copy the static libs and
|
||||||
|
headers to your build location. The libs (crypto.lib & ssl.lib) are
|
||||||
|
located in the appropriate "out_nw_XXXX" directory
|
||||||
|
(out_nw_clib, out_nw_libc, etc).
|
||||||
|
|
||||||
|
The headers are located in the appropriate "outinc_nw_XXX" directory
|
||||||
|
(outinc_nw_clib, outinc_nw_libc).
|
||||||
|
|
||||||
|
One suggestion is to create the following directory
|
||||||
|
structure for the OpenSSL SDK:
|
||||||
|
|
||||||
|
\openssl
|
||||||
|
|- bin
|
||||||
|
| |- openssl.nlm
|
||||||
|
| |- (other tests you want)
|
||||||
|
|
|
||||||
|
|- lib
|
||||||
|
| | - crypto.lib
|
||||||
|
| | - ssl.lib
|
||||||
|
|
|
||||||
|
|- include
|
||||||
|
| | - openssl
|
||||||
|
| | | - (all the headers in "outinc_nw\openssl")
|
||||||
|
|
||||||
|
|
||||||
|
The program "openssl.nlm" can be very useful. It has dozens of
|
||||||
|
options and you may want to keep it handy for debugging, testing, etc.
|
||||||
|
|
||||||
|
When building your apps using OpenSSL, define "NETWARE". It is needed by
|
||||||
|
some of the OpenSSL headers. One way to do this is with a compile option,
|
||||||
|
for example "-DNETWARE".
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
------
|
||||||
|
|
||||||
|
Resource leaks in Tests
|
||||||
|
------------------------
|
||||||
|
Some OpenSSL tests do not clean up resources and NetWare reports
|
||||||
|
the resource leaks when the tests unload. If this really bugs you,
|
||||||
|
you can stop the messages by setting the developer option off at the console
|
||||||
|
prompt (set developer option = off). Or better yet, fix the tests to
|
||||||
|
clean up the resources!
|
||||||
|
|
||||||
|
|
||||||
|
Multi-threaded Development
|
||||||
|
---------------------------
|
||||||
|
The NetWare version of OpenSSL is thread-safe, however multi-threaded
|
||||||
|
applications must provide the necessary locking function callbacks. This
|
||||||
|
is described in doc\threads.doc. The file "openssl-x.x.x\crypto\threads\mttest.c"
|
||||||
|
is a multi-threaded test program and demonstrates the locking functions.
|
||||||
|
|
||||||
|
|
||||||
|
What is openssl2.nlm?
|
||||||
|
---------------------
|
||||||
|
The openssl program has numerous options and can be used for many different
|
||||||
|
things. Many of the options operate in an interactive mode requiring the
|
||||||
|
user to enter data. Because of this, a default screen is created for the
|
||||||
|
program. However, when running the test script it is not desirable to
|
||||||
|
have a seperate screen. Therefore, the build also creates openssl2.nlm.
|
||||||
|
Openssl2.nlm is functionally identical but uses the console screen.
|
||||||
|
Openssl2 can be used when a non-interactive mode is desired.
|
||||||
|
|
||||||
|
NOTE: There are may other possibilities (command line options, etc)
|
||||||
|
which could have been used to address the screen issue. The openssl2.nlm
|
||||||
|
option was chosen because it impacted only the build not the code.
|
||||||
|
|
||||||
|
|
||||||
|
Why only static libraries?
|
||||||
|
--------------------------
|
||||||
|
Globals, globals, and more globals. The OpenSSL code uses many global
|
||||||
|
variables that are allocated and initialized when used for the first time.
|
||||||
|
|
||||||
|
On NetWare, most applications (at least historically) run in the kernel.
|
||||||
|
When running in the kernel, there is one instance of global variables.
|
||||||
|
For regular application type NLM(s) this isn't a problem because they are
|
||||||
|
the only ones using the globals. However, for a library NLM (an NLM which
|
||||||
|
exposes functions and has no threads of execution), the globals cause
|
||||||
|
problems. Applications could inadvertently step on each other if they
|
||||||
|
change some globals. Even worse, the first application that triggers a
|
||||||
|
global to be allocated and initialized has the allocated memory charged to
|
||||||
|
itself. Now when that application unloads, NetWare will clean up all the
|
||||||
|
applicaton's memory. The global pointer variables inside OpenSSL now
|
||||||
|
point to freed memory. An abend waiting to happen!
|
||||||
|
|
||||||
|
To work correctly in the kernel, library NLM(s) that use globals need to
|
||||||
|
provide a set of globals (instance data) for each application. Another
|
||||||
|
option is to require the library only be loaded in a protected address
|
||||||
|
space along with the application using it.
|
||||||
|
|
||||||
|
Modifying the OpenSSL code to provide a set of globals (instance data) for
|
||||||
|
each application isn't technically difficult, but due to the large number
|
||||||
|
globals it would require substantial code changes and it wasn't done. Hence,
|
||||||
|
the build currently only builds static libraries which are then linked
|
||||||
|
into each application.
|
||||||
|
|
||||||
|
NOTE: If you are building a library NLM that uses the OpenSSL static
|
||||||
|
libraries, you will still have to deal with the global variable issue.
|
||||||
|
This is because when you link in the OpenSSL code you bring in all the
|
||||||
|
globals. One possible solution for the global pointer variables is to
|
||||||
|
register memory functions with OpenSSL which allocate memory and charge it
|
||||||
|
to your library NLM (see the function CRYPTO_set_mem_functions). However,
|
||||||
|
be aware that now all memory allocated by OpenSSL is charged to your NLM.
|
||||||
|
|
||||||
|
|
||||||
|
CodeWarrior Tools and W2K
|
||||||
|
---------------------------
|
||||||
|
There have been problems reported with the CodeWarrior Linker
|
||||||
|
(mwldnlm.exe) in the PDK 2.1 for NetWare when running on Windows 2000. The
|
||||||
|
problems cause the link step to fail. The only work around is to obtain an
|
||||||
|
updated linker from Metrowerks. It is expected Metrowerks will release
|
||||||
|
PDK 3.0 (in beta testing at this time - May, 2001) in the near future which
|
||||||
|
will fix these problems.
|
||||||
|
|
||||||
|
|
||||||
|
Makefile "vclean"
|
||||||
|
------------------
|
||||||
|
The generated makefile has a "vclean" target which cleans up the build
|
||||||
|
directories. If you have been building successfully and suddenly
|
||||||
|
experience problems, use "vclean" (gmake -f netware\nlm_xxxx.mak vclean) and retry.
|
||||||
|
|
||||||
|
|
||||||
|
"Undefined Symbol" Linker errors
|
||||||
|
--------------------------------
|
||||||
|
There have been linker errors reported when doing a CLIB build. The problems
|
||||||
|
occur because some versions of the CLIB SDK import files inadvertently
|
||||||
|
left out some symbols. One symbol in particular is "_lrotl". The missing
|
||||||
|
functions are actually delivered in the binaries, but they were left out of
|
||||||
|
the import files. The issues should be fixed in the September 2001 release
|
||||||
|
of the NDK. If you experience the problems you can temporarily
|
||||||
|
work around it by manually adding the missing symbols to your version of
|
||||||
|
"clib.imp".
|
||||||
|
|
||||||
52
INSTALL.VMS
52
INSTALL.VMS
@@ -71,7 +71,7 @@ the top to understand how to use them. However, if you want to
|
|||||||
compile all you can get, the simplest is to use MAKEVMS.COM in the top
|
compile all you can get, the simplest is to use MAKEVMS.COM in the top
|
||||||
directory. The syntax is the following:
|
directory. The syntax is the following:
|
||||||
|
|
||||||
@MAKEVMS <option> <rsaref-p> <debug-p> [<compiler>]
|
@MAKEVMS <option> <bits> <debug-p> [<compiler>]
|
||||||
|
|
||||||
<option> must be one of the following:
|
<option> must be one of the following:
|
||||||
|
|
||||||
@@ -87,24 +87,11 @@ directory. The syntax is the following:
|
|||||||
TEST Just build the "[.xxx.EXE.TEST]" test programs for OpenSSL.
|
TEST Just build the "[.xxx.EXE.TEST]" test programs for OpenSSL.
|
||||||
APPS Just build the "[.xxx.EXE.APPS]" application programs for OpenSSL.
|
APPS Just build the "[.xxx.EXE.APPS]" application programs for OpenSSL.
|
||||||
|
|
||||||
<rsaref-p> must be one of the following:
|
<bits> must be one of the following:
|
||||||
|
|
||||||
RSAREF compile using the RSAREF Library
|
"" compile using default pointer size
|
||||||
NORSAREF compile without using RSAREF
|
32 compile using 32 bit pointer size
|
||||||
|
64 compile using 64 bit pointer size
|
||||||
Note 0: The RSAREF library IS NO LONGER NEEDED. The RSA patent
|
|
||||||
expires September 20, 2000, and RSA Security chose to make
|
|
||||||
the algorithm public domain two weeks before that.
|
|
||||||
|
|
||||||
Note 1: If you still want to use RSAREF, the library is NOT INCLUDED
|
|
||||||
and you have to download it. RSA Security doesn't carry it
|
|
||||||
any more, but there are a number of places where you can find
|
|
||||||
it. You have to get the ".tar-Z" file as the ".zip" file
|
|
||||||
doesn't have the directory structure stored. You have to
|
|
||||||
extract the file into the [.RSAREF] directory as that is where
|
|
||||||
the scripts will look for the files.
|
|
||||||
|
|
||||||
Note 2: I have never done this, so I've no idea if it works or not.
|
|
||||||
|
|
||||||
<debug-p> must be one of the following:
|
<debug-p> must be one of the following:
|
||||||
|
|
||||||
@@ -117,12 +104,13 @@ Note 2: I have never done this, so I've no idea if it works or not.
|
|||||||
GNUC For GNU C.
|
GNUC For GNU C.
|
||||||
|
|
||||||
|
|
||||||
You will find the crypto library in [.xxx.EXE.CRYPTO], called LIBCRYPTO.OLB,
|
You will find the crypto library in [.xxx.EXE.CRYPTO] (where xxx is VAX,
|
||||||
where xxx is VAX or AXP. You will find the SSL library in [.xxx.EXE.SSL],
|
ALPHA or IA64), called SSL_LIBCRYPTO32.OLB or SSL_LIBCRYPTO.OLB depending
|
||||||
named LIBSSL.OLB, and you will find a bunch of useful programs in
|
on how it was built. You will find the SSL library in [.xxx.EXE.SSL],
|
||||||
[.xxx.EXE.APPS]. However, these shouldn't be used right off unless it's
|
named SSL_LIBSSL32.OLB or SSL_LIBSSL.OLB, and you will find a bunch of
|
||||||
just to test them. For production use, make sure you install first, see
|
useful programs in [.xxx.EXE.APPS]. However, these shouldn't be used
|
||||||
Installation below.
|
right off unless it's just to test them. For production use, make sure
|
||||||
|
you install first, see Installation below.
|
||||||
|
|
||||||
Note 1: Some programs in this package require a TCP/IP library.
|
Note 1: Some programs in this package require a TCP/IP library.
|
||||||
|
|
||||||
@@ -170,12 +158,14 @@ Installation:
|
|||||||
|
|
||||||
Installation is easy, just do the following:
|
Installation is easy, just do the following:
|
||||||
|
|
||||||
@INSTALL <root>
|
@INSTALL <root> <bits>
|
||||||
|
|
||||||
<root> is the directory in which everything will be installed,
|
<root> is the directory in which everything will be installed,
|
||||||
subdirectories, libraries, header files, programs and startup command
|
subdirectories, libraries, header files, programs and startup command
|
||||||
procedures.
|
procedures.
|
||||||
|
|
||||||
|
<bits> works the same way as for MAKEVMS.COM
|
||||||
|
|
||||||
N.B.: INSTALL.COM builds a new directory structure, different from
|
N.B.: INSTALL.COM builds a new directory structure, different from
|
||||||
the directory tree where you have now build OpenSSL.
|
the directory tree where you have now build OpenSSL.
|
||||||
|
|
||||||
@@ -196,6 +186,10 @@ following command procedures:
|
|||||||
sets up the symbols to the applications. Should be called
|
sets up the symbols to the applications. Should be called
|
||||||
from for example SYS$MANAGER:SYLOGIN.COM
|
from for example SYS$MANAGER:SYLOGIN.COM
|
||||||
|
|
||||||
|
OPENSSL_UNDO.COM
|
||||||
|
|
||||||
|
deassigns the logical names created with OPENSSL_STARTUP.COM.
|
||||||
|
|
||||||
The logical names that are set up are the following:
|
The logical names that are set up are the following:
|
||||||
|
|
||||||
SSLROOT a dotted concealed logical name pointing at the
|
SSLROOT a dotted concealed logical name pointing at the
|
||||||
@@ -203,7 +197,6 @@ The logical names that are set up are the following:
|
|||||||
|
|
||||||
SSLCERTS Initially an empty directory, this is the default
|
SSLCERTS Initially an empty directory, this is the default
|
||||||
location for certificate files.
|
location for certificate files.
|
||||||
SSLMISC Various scripts.
|
|
||||||
SSLPRIVATE Initially an empty directory, this is the default
|
SSLPRIVATE Initially an empty directory, this is the default
|
||||||
location for private key files.
|
location for private key files.
|
||||||
|
|
||||||
@@ -211,8 +204,9 @@ The logical names that are set up are the following:
|
|||||||
programs.
|
programs.
|
||||||
SSLINCLUDE Contains the header files needed if you want to
|
SSLINCLUDE Contains the header files needed if you want to
|
||||||
compile programs with libcrypto or libssl.
|
compile programs with libcrypto or libssl.
|
||||||
SSLLIB Contains the OpenSSL library files (LIBCRYPTO.OLB
|
SSLLIB Contains the OpenSSL library files themselves:
|
||||||
and LIBSSL.OLB) themselves.
|
- SSL_LIBCRYPTO32.OLB and SSL_LIBSSL32.OLB or
|
||||||
|
- SSL_LIBCRYPTO.OLB and SSL_LIBSSL.OLB
|
||||||
|
|
||||||
OPENSSL Same as SSLINCLUDE. This is because the standard
|
OPENSSL Same as SSLINCLUDE. This is because the standard
|
||||||
way to include OpenSSL header files from version
|
way to include OpenSSL header files from version
|
||||||
@@ -296,4 +290,4 @@ have any ideas.
|
|||||||
|
|
||||||
--
|
--
|
||||||
Richard Levitte <richard@levitte.org>
|
Richard Levitte <richard@levitte.org>
|
||||||
2000-02-27
|
2000-02-27, 2011-03-18
|
||||||
|
|||||||
198
INSTALL.W32
198
INSTALL.W32
@@ -3,21 +3,33 @@
|
|||||||
----------------------------------
|
----------------------------------
|
||||||
|
|
||||||
[Instructions for building for Windows CE can be found in INSTALL.WCE]
|
[Instructions for building for Windows CE can be found in INSTALL.WCE]
|
||||||
|
[Instructions for building for Win64 can be found in INSTALL.W64]
|
||||||
|
|
||||||
Heres a few comments about building OpenSSL in Windows environments. Most
|
Here are a few comments about building OpenSSL for Win32 environments,
|
||||||
of this is tested on Win32 but it may also work in Win 3.1 with some
|
such as Windows NT and Windows 9x. It should be noted though that
|
||||||
modification.
|
Windows 9x are not ordinarily tested. Its mention merely means that we
|
||||||
|
attempt to maintain certain programming discipline and pay attention
|
||||||
|
to backward compatibility issues, in other words it's kind of expected
|
||||||
|
to work on Windows 9x, but no regression tests are actually performed.
|
||||||
|
|
||||||
You need Perl for Win32. Unless you will build on Cygwin, you will need
|
On additional note newer OpenSSL versions are compiled and linked with
|
||||||
ActiveState Perl, available from http://www.activestate.com/ActivePerl.
|
Winsock 2. This means that minimum OS requirement was elevated to NT 4
|
||||||
|
and Windows 98 [there is Winsock 2 update for Windows 95 though].
|
||||||
|
|
||||||
and one of the following C compilers:
|
- you need Perl for Win32. Unless you will build on Cygwin, you will need
|
||||||
|
ActiveState Perl, available from http://www.activestate.com/ActivePerl.
|
||||||
|
|
||||||
|
- one of the following C compilers:
|
||||||
|
|
||||||
* Visual C++
|
* Visual C++
|
||||||
* Borland C
|
* Borland C
|
||||||
* GNU C (Cygwin or MinGW)
|
* GNU C (Cygwin or MinGW)
|
||||||
|
|
||||||
If you are compiling from a tarball or a CVS snapshot then the Win32 files
|
- Netwide Assembler, a.k.a. NASM, available from http://nasm.sourceforge.net/
|
||||||
|
is required if you intend to utilize assembler modules. Note that NASM
|
||||||
|
is now the only supported assembler.
|
||||||
|
|
||||||
|
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.
|
||||||
@@ -25,38 +37,18 @@
|
|||||||
Visual C++
|
Visual C++
|
||||||
----------
|
----------
|
||||||
|
|
||||||
If you want to compile in the assembly language routines with Visual C++ then
|
If you want to compile in the assembly language routines with Visual
|
||||||
you will need an assembler. This is worth doing because it will result in
|
C++, then you will need already mentioned Netwide Assembler binary,
|
||||||
faster code: for example it will typically result in a 2 times speedup in the
|
nasmw.exe or nasm.exe, to be available on your %PATH%.
|
||||||
RSA routines. Currently the following assemblers are supported:
|
|
||||||
|
|
||||||
* Microsoft MASM (aka "ml")
|
Firstly you should run Configure with platform VC-WIN32:
|
||||||
* Free Netwide Assembler NASM.
|
|
||||||
|
|
||||||
MASM is distributed with most versions of VC++. For the versions where it is
|
> perl Configure VC-WIN32 --prefix=c:\some\openssl\dir
|
||||||
not included in VC++, it is also distributed with some Microsoft DDKs, for
|
|
||||||
example the Windows NT 4.0 DDK and the Windows 98 DDK. If you do not have
|
|
||||||
either of these DDKs then you can just download the binaries for the Windows
|
|
||||||
98 DDK and extract and rename the two files XXXXXml.exe and XXXXXml.err, to
|
|
||||||
ml.exe and ml.err and install somewhere on your PATH. Both DDKs can be
|
|
||||||
downloaded from the Microsoft developers site www.msdn.com.
|
|
||||||
|
|
||||||
NASM is freely available. Version 0.98 was used during testing: other versions
|
Where the prefix argument specifies where OpenSSL will be installed to.
|
||||||
may also work. It is available from many places, see for example:
|
|
||||||
http://www.kernel.org/pub/software/devel/nasm/binaries/win32/
|
|
||||||
The NASM binary nasmw.exe needs to be installed anywhere on your PATH.
|
|
||||||
|
|
||||||
Firstly you should run Configure (to build a FIPS-certified variant of
|
Next you need to build the Makefiles and optionally the assembly
|
||||||
OpenSSL, add the option "fips"):
|
language files:
|
||||||
|
|
||||||
> perl Configure VC-WIN32
|
|
||||||
|
|
||||||
Next you need to build the Makefiles and optionally the assembly language
|
|
||||||
files (to build a FIPS-certified variant of OpenSSL, add the argument "fips"):
|
|
||||||
|
|
||||||
- If you are using MASM then run:
|
|
||||||
|
|
||||||
> ms\do_masm
|
|
||||||
|
|
||||||
- If you are using NASM then run:
|
- If you are using NASM then run:
|
||||||
|
|
||||||
@@ -64,6 +56,7 @@
|
|||||||
|
|
||||||
- If you don't want to use the assembly language files at all then run:
|
- If you don't want to use the assembly language files at all then run:
|
||||||
|
|
||||||
|
> perl Configure VC-WIN32 no-asm --prefix=c:/some/openssl/dir
|
||||||
> ms\do_ms
|
> ms\do_ms
|
||||||
|
|
||||||
If you get errors about things not having numbers assigned then check the
|
If you get errors about things not having numbers assigned then check the
|
||||||
@@ -74,39 +67,46 @@
|
|||||||
|
|
||||||
> nmake -f ms\ntdll.mak
|
> nmake -f ms\ntdll.mak
|
||||||
|
|
||||||
If all is well it should compile and you will have some DLLs and executables
|
If all is well it should compile and you will have some DLLs and
|
||||||
in out32dll. If you want to try the tests then do:
|
executables in out32dll. If you want to try the tests then do:
|
||||||
|
|
||||||
> cd out32dll
|
> nmake -f ms\ntdll.mak test
|
||||||
> ..\ms\test
|
|
||||||
|
|
||||||
|
To install OpenSSL to the specified location do:
|
||||||
|
|
||||||
|
> nmake -f ms\ntdll.mak install
|
||||||
|
|
||||||
Tweaks:
|
Tweaks:
|
||||||
|
|
||||||
There are various changes you can make to the Win32 compile environment. By
|
There are various changes you can make to the Win32 compile
|
||||||
default the library is not compiled with debugging symbols. If you add 'debug'
|
environment. By default the library is not compiled with debugging
|
||||||
to the mk1mf.pl lines in the do_* batch file then debugging symbols will be
|
symbols. If you use the platform debug-VC-WIN32 instead of VC-WIN32
|
||||||
compiled in. Note that mk1mf.pl expects the platform to be the last argument
|
then debugging symbols will be compiled in.
|
||||||
on the command line, so 'debug' must appear before that, as all other options.
|
|
||||||
|
By default in 1.0.0 OpenSSL will compile builtin ENGINES into the
|
||||||
|
separate shared librariesy. If you specify the "enable-static-engine"
|
||||||
|
option on the command line to Configure the shared library build
|
||||||
|
(ms\ntdll.mak) will compile the engines into libeay32.dll instead.
|
||||||
|
|
||||||
The default Win32 environment is to leave out any Windows NT specific
|
The default Win32 environment is to leave out any Windows NT specific
|
||||||
features.
|
features.
|
||||||
|
|
||||||
If you want to enable the NT specific features of OpenSSL (currently only the
|
If you want to enable the NT specific features of OpenSSL (currently
|
||||||
logging BIO) follow the instructions above but call the batch file do_nt.bat
|
only the logging BIO) follow the instructions above but call the batch
|
||||||
instead of do_ms.bat.
|
file do_nt.bat instead of do_ms.bat.
|
||||||
|
|
||||||
You can also build a static version of the library using the Makefile
|
You can also build a static version of the library using the Makefile
|
||||||
ms\nt.mak
|
ms\nt.mak
|
||||||
|
|
||||||
|
|
||||||
Borland C++ builder 5
|
Borland C++ builder 5
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
* Configure for building with Borland Builder (to build a FIPS-certified
|
* Configure for building with Borland Builder:
|
||||||
variant of OpenSSL, add the option "fips"):
|
|
||||||
> perl Configure BC-32
|
> perl Configure BC-32
|
||||||
|
|
||||||
* Create the appropriate makefile (to build a FIPS-certified variant of
|
* Create the appropriate makefile
|
||||||
OpenSSL, add the argument "fips")
|
|
||||||
> ms\do_nasm
|
> ms\do_nasm
|
||||||
|
|
||||||
* Build
|
* Build
|
||||||
@@ -125,17 +125,13 @@
|
|||||||
GNU C (Cygwin)
|
GNU C (Cygwin)
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
Cygwin provides a bash shell and GNU tools environment running
|
Cygwin implements a Posix/Unix runtime system (cygwin1.dll) on top of
|
||||||
on NT 4.0, Windows 9x, Windows ME, Windows 2000, and Windows XP.
|
Win32 subsystem and provides a bash shell and GNU tools environment.
|
||||||
Consequently, a make of OpenSSL with Cygwin is closer to a GNU
|
Consequently, a make of OpenSSL with Cygwin is virtually identical to
|
||||||
bash environment such as Linux than to other the other Win32
|
Unix procedure. It is also possible to create Win32 binaries that only
|
||||||
makes.
|
use the Microsoft C runtime system (msvcrt.dll or crtdll.dll) using
|
||||||
|
MinGW. MinGW can be used in the Cygwin development environment or in a
|
||||||
Cygwin implements a Posix/Unix runtime system (cygwin1.dll).
|
standalone setup as described in the following section.
|
||||||
It is also possible to create Win32 binaries that only use the
|
|
||||||
Microsoft C runtime system (msvcrt.dll or crtdll.dll) using
|
|
||||||
MinGW. MinGW can be used in the Cygwin development environment
|
|
||||||
or in a standalone setup as described in the following section.
|
|
||||||
|
|
||||||
To build OpenSSL using Cygwin:
|
To build OpenSSL using Cygwin:
|
||||||
|
|
||||||
@@ -180,37 +176,44 @@
|
|||||||
non-fatal error in "make test" but is otherwise harmless. If
|
non-fatal error in "make test" but is otherwise harmless. If
|
||||||
desired and needed, GNU bc can be built with Cygwin without change.
|
desired and needed, GNU bc can be built with Cygwin without change.
|
||||||
|
|
||||||
GNU C (MinGW)
|
GNU C (MinGW/MSYS)
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
* Compiler installation:
|
* Compiler and shell environment installation:
|
||||||
|
|
||||||
MinGW is available from http://www.mingw.org. Run the installer and
|
MinGW and MSYS are available from http://www.mingw.org/, both are
|
||||||
set the MinGW bin directory to the PATH in "System Properties" or
|
required. Run the installers and do whatever magic they say it takes
|
||||||
autoexec.bat.
|
to start MSYS bash shell with GNU tools on its PATH.
|
||||||
|
|
||||||
|
N.B. Since source tar-ball can contain symbolic links, it's essential
|
||||||
|
that you use accompanying MSYS tar to unpack the source. It will
|
||||||
|
either handle them in one way or another or fail to extract them,
|
||||||
|
which does the trick too. Latter means that you may safely ignore all
|
||||||
|
"cannot create symlink" messages, as they will be "re-created" at
|
||||||
|
configure stage by copying corresponding files. Alternative programs
|
||||||
|
were observed to create empty files instead, which results in build
|
||||||
|
failure.
|
||||||
|
|
||||||
* Compile OpenSSL:
|
* Compile OpenSSL:
|
||||||
|
|
||||||
> ms\mingw32
|
$ ./config
|
||||||
|
[...]
|
||||||
|
$ make
|
||||||
|
[...]
|
||||||
|
$ make test
|
||||||
|
|
||||||
This will create the library and binaries in out. In case any problems
|
This will create the library and binaries in root source directory
|
||||||
occur, try
|
and openssl.exe application in apps directory.
|
||||||
> ms\mingw32 no-asm
|
|
||||||
instead.
|
It is also possible to cross-compile it on Linux by configuring
|
||||||
If you want to build a FIPS-certified variant of OpenSSL, add the argument
|
with './Configure --cross-compile-prefix=i386-mingw32- mingw ...'.
|
||||||
"fips"
|
'make test' is naturally not applicable then.
|
||||||
|
|
||||||
libcrypto.a and libssl.a are the static libraries. To use the DLLs,
|
libcrypto.a and libssl.a are the static libraries. To use the DLLs,
|
||||||
link with libeay32.a and libssl32.a instead.
|
link with libeay32.a and libssl32.a instead.
|
||||||
|
|
||||||
See troubleshooting if you get error messages about functions not having
|
See troubleshooting if you get error messages about functions not
|
||||||
a number assigned.
|
having a number assigned.
|
||||||
|
|
||||||
* You can now try the tests:
|
|
||||||
|
|
||||||
> cd out
|
|
||||||
> ..\ms\test
|
|
||||||
|
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
------------
|
------------
|
||||||
@@ -254,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
|
||||||
@@ -291,3 +294,32 @@
|
|||||||
(e.g. fopen()), and OpenSSL cannot change these; so in general you cannot
|
(e.g. fopen()), and OpenSSL cannot change these; so in general you cannot
|
||||||
rely on CRYPTO_malloc_init() solving your problem, and you should
|
rely on CRYPTO_malloc_init() solving your problem, and you should
|
||||||
consistently use the multithreaded library.
|
consistently use the multithreaded library.
|
||||||
|
|
||||||
|
Linking your application
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
If you link with static OpenSSL libraries [those built with ms/nt.mak],
|
||||||
|
then you're expected to additionally link your application with
|
||||||
|
WS2_32.LIB, ADVAPI32.LIB, GDI32.LIB and USER32.LIB. Those developing
|
||||||
|
non-interactive service applications might feel concerned about linking
|
||||||
|
with the latter two, as they are justly associated with interactive
|
||||||
|
desktop, which is not available to service processes. The toolkit is
|
||||||
|
designed to detect in which context it's currently executed, GUI,
|
||||||
|
console app or service, and act accordingly, namely whether or not to
|
||||||
|
actually make GUI calls. Additionally those who wish to
|
||||||
|
/DELAYLOAD:GDI32.DLL and /DELAYLOAD:USER32.DLL and actually keep them
|
||||||
|
off service process should consider implementing and exporting from
|
||||||
|
.exe image in question own _OPENSSL_isservice not relying on USER32.DLL.
|
||||||
|
E.g., on Windows Vista and later you could:
|
||||||
|
|
||||||
|
__declspec(dllexport) __cdecl BOOL _OPENSSL_isservice(void)
|
||||||
|
{ DWORD sess;
|
||||||
|
if (ProcessIdToSessionId(GetCurrentProcessId(),&sess))
|
||||||
|
return sess==0;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
If you link with OpenSSL .DLLs, then you're expected to include into
|
||||||
|
your application code small "shim" snippet, which provides glue between
|
||||||
|
OpenSSL BIO layer and your compiler run-time. Look up OPENSSL_Applink
|
||||||
|
reference page for further details.
|
||||||
|
|||||||
66
INSTALL.W64
Normal file
66
INSTALL.W64
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
|
||||||
|
INSTALLATION ON THE WIN64 PLATFORM
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
Caveat lector
|
||||||
|
-------------
|
||||||
|
|
||||||
|
As of moment of this writing Win64 support is classified "initial"
|
||||||
|
for the following reasons.
|
||||||
|
|
||||||
|
- No assembler modules are engaged upon initial 0.9.8 release.
|
||||||
|
- API might change within 0.9.8 life-span, *but* in a manner which
|
||||||
|
doesn't break backward binary compatibility. Or in other words,
|
||||||
|
application programs compiled with initial 0.9.8 headers will
|
||||||
|
be expected to work with future minor release .DLL without need
|
||||||
|
to re-compile, even if future minor release features modified API.
|
||||||
|
- Above mentioned API modifications have everything to do with
|
||||||
|
elimination of a number of limitations, which are normally
|
||||||
|
considered inherent to 32-bit platforms. Which in turn is why they
|
||||||
|
are treated as limitations on 64-bit platform such as Win64:-)
|
||||||
|
The current list comprises [but not necessarily limited to]:
|
||||||
|
|
||||||
|
- null-terminated strings may not be longer than 2G-1 bytes,
|
||||||
|
longer strings are treated as zero-length;
|
||||||
|
- dynamically and *internally* allocated chunks can't be larger
|
||||||
|
than 2G-1 bytes;
|
||||||
|
- inability to encrypt/decrypt chunks of data larger than 4GB
|
||||||
|
[it's possibly to *hash* chunks of arbitrary size through];
|
||||||
|
|
||||||
|
Neither of these is actually big deal and hardly encountered
|
||||||
|
in real-life applications.
|
||||||
|
|
||||||
|
Compiling procedure
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
You will need Perl. You can run under Cygwin or you can download
|
||||||
|
ActiveState Perl from http://www.activestate.com/ActivePerl.
|
||||||
|
|
||||||
|
You will need Microsoft Platform SDK, available for download at
|
||||||
|
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/. As per
|
||||||
|
April 2005 Platform SDK is equipped with Win64 compilers, as well
|
||||||
|
as assemblers, but it might change in the future.
|
||||||
|
|
||||||
|
To build for Win64/x64:
|
||||||
|
|
||||||
|
> perl Configure VC-WIN64A
|
||||||
|
> ms\do_win64a
|
||||||
|
> nmake -f ms\ntdll.mak
|
||||||
|
> cd out32dll
|
||||||
|
> ..\ms\test
|
||||||
|
|
||||||
|
To build for Win64/IA64:
|
||||||
|
|
||||||
|
> perl Configure VC-WIN64I
|
||||||
|
> ms\do_win64i
|
||||||
|
> nmake -f ms\ntdll.mak
|
||||||
|
> cd out32dll
|
||||||
|
> ..\ms\test
|
||||||
|
|
||||||
|
Naturally test-suite itself has to be executed on the target platform.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
TBD, for now see INSTALL.W32.
|
||||||
|
|
||||||
74
INSTALL.WCE
74
INSTALL.WCE
@@ -4,24 +4,36 @@
|
|||||||
|
|
||||||
Building OpenSSL for Windows CE requires the following external tools:
|
Building OpenSSL for Windows CE requires the following external tools:
|
||||||
|
|
||||||
* Microsoft eMbedded Visual C++ 3.0
|
* Microsoft eMbedded Visual C++ 3.0 or later
|
||||||
* wcecompat compatibility library (www.essemer.com.au)
|
* Appropriate SDK might be required
|
||||||
* Optionally ceutils for running automated tests (www.essemer.com.au)
|
* Perl for Win32 [commonly recommended ActiveState Perl is available
|
||||||
|
from http://www.activestate.com/Products/ActivePerl/]
|
||||||
|
|
||||||
You also need Perl for Win32. You will need ActiveState Perl, available
|
* wcecompat compatibility library available at
|
||||||
from http://www.activestate.com/ActivePerl.
|
http://www.essemer.com.au/windowsce/
|
||||||
|
* Optionally ceutils for running automated tests (same location)
|
||||||
|
|
||||||
Windows CE support in OpenSSL relies on wcecompat. All Windows CE specific
|
_or_
|
||||||
issues should be directed to www.essemer.com.au.
|
|
||||||
|
|
||||||
The C Runtime Library implementation for Windows CE that is included with
|
* PocketConsole driver and PortSDK available at
|
||||||
Microsoft eMbedded Visual C++ 3.0 is incomplete and in some places
|
http://www.symbolictools.de/public/pocketconsole/
|
||||||
incorrect. wcecompat plugs the holes and tries to bring the Windows CE
|
* CMD command interpreter (same location)
|
||||||
CRT to a level that is more compatible with ANSI C. wcecompat goes further
|
|
||||||
and provides low-level IO and stream IO support for stdin/stdout/stderr
|
As Windows CE support in OpenSSL relies on 3rd party compatibility
|
||||||
(which Windows CE does not provide). This IO functionality is not needed
|
library, it's appropriate to check corresponding URL for updates. For
|
||||||
by the OpenSSL library itself but is used for the tests and openssl.exe.
|
example if you choose wcecompat, note that as for the moment of this
|
||||||
More information is available at www.essemer.com.au.
|
writing version 1.2 is available and actually required for WCE 4.2
|
||||||
|
and newer platforms. All wcecompat issues should be directed to
|
||||||
|
www.essemer.com.au.
|
||||||
|
|
||||||
|
Why compatibility library at all? The C Runtime Library implementation
|
||||||
|
for Windows CE that is included with Microsoft eMbedded Visual C++ is
|
||||||
|
incomplete and in some places incorrect. Compatibility library plugs
|
||||||
|
the holes and tries to bring the Windows CE CRT to [more] usable level.
|
||||||
|
Most gaping hole in CRT is support for stdin/stdout/stderr IO, which
|
||||||
|
proposed compatibility libraries solve in two different ways: wcecompat
|
||||||
|
redirects IO to active sync link, while PortSDK - to NT-like console
|
||||||
|
driver on the handheld itself.
|
||||||
|
|
||||||
Building
|
Building
|
||||||
--------
|
--------
|
||||||
@@ -31,9 +43,21 @@
|
|||||||
|
|
||||||
> "C:\Program Files\Microsoft eMbedded Tools\EVC\WCE300\BIN\WCEARM.BAT"
|
> "C:\Program Files\Microsoft eMbedded Tools\EVC\WCE300\BIN\WCEARM.BAT"
|
||||||
|
|
||||||
Next indicate where wcecompat is located:
|
Next pick compatibility library according to your preferences.
|
||||||
|
|
||||||
> set WCECOMPAT=C:\wcecompat
|
1. To choose wcecompat set up WCECOMPAT environment variable pointing
|
||||||
|
at the location of wcecompat tree "root":
|
||||||
|
|
||||||
|
> set WCECOMPAT=C:\wcecompat
|
||||||
|
> set PORTSDK_LIBPATH=
|
||||||
|
|
||||||
|
2. To choose PortSDK set up PORTSDK_LIBPATH to point at hardware-
|
||||||
|
specific location where your portlib.lib is installed:
|
||||||
|
|
||||||
|
> set PORTSDK_LIBPATH=C:\PortSDK\lib\ARM
|
||||||
|
> set WCECOMPAT=
|
||||||
|
|
||||||
|
Note that you may not set both variables.
|
||||||
|
|
||||||
Next you should run Configure:
|
Next you should run Configure:
|
||||||
|
|
||||||
@@ -49,16 +73,16 @@
|
|||||||
|
|
||||||
Then from the VC++ environment at a prompt do:
|
Then from the VC++ environment at a prompt do:
|
||||||
|
|
||||||
- to build static libraries:
|
|
||||||
|
|
||||||
> nmake -f ms\ce.mak
|
|
||||||
|
|
||||||
- or to build DLLs:
|
|
||||||
|
|
||||||
> nmake -f ms\cedll.mak
|
> nmake -f ms\cedll.mak
|
||||||
|
|
||||||
If all is well it should compile and you will have some static libraries and
|
[note that static builds are not supported under CE]
|
||||||
executables in out32, or some DLLs and executables in out32dll. If you want
|
|
||||||
|
If all is well it should compile and you will have some DLLs and executables
|
||||||
|
in out32dll*.
|
||||||
|
|
||||||
|
<<< everyting below needs revision in respect to wcecompat vs. PortSDK >>>
|
||||||
|
|
||||||
|
If you want
|
||||||
to try the tests then make sure the ceutils are in the path and do:
|
to try the tests then make sure the ceutils are in the path and do:
|
||||||
|
|
||||||
> cd out32
|
> cd out32
|
||||||
|
|||||||
2
LICENSE
2
LICENSE
@@ -12,7 +12,7 @@
|
|||||||
---------------
|
---------------
|
||||||
|
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 1998-2004 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 1998-2011 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
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ OSErr AppendErrorMessageToHandle(Handle inoutHandle);
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// A bunch of evil macros that would be uneccessary if I were always using C++ !
|
// A bunch of evil macros that would be unnecessary if I were always using C++ !
|
||||||
|
|
||||||
#define SetErrorMessageAndBailIfNil(theArg,theMessage) \
|
#define SetErrorMessageAndBailIfNil(theArg,theMessage) \
|
||||||
{ \
|
{ \
|
||||||
|
|||||||
913
Makefile.org
913
Makefile.org
File diff suppressed because it is too large
Load Diff
655
Makefile.shared
Normal file
655
Makefile.shared
Normal file
@@ -0,0 +1,655 @@
|
|||||||
|
#
|
||||||
|
# Helper makefile to link shared libraries in a portable way.
|
||||||
|
# This is much simpler than libtool, and hopefully not too error-prone.
|
||||||
|
#
|
||||||
|
# The following variables need to be set on the command line to build
|
||||||
|
# properly
|
||||||
|
|
||||||
|
# CC contains the current compiler. This one MUST be defined
|
||||||
|
CC=cc
|
||||||
|
CFLAGS=$(CFLAG)
|
||||||
|
# LDFLAGS contains flags to be used when temporary object files (when building
|
||||||
|
# shared libraries) are created, or when an application is linked.
|
||||||
|
# SHARED_LDFLAGS contains flags to be used when the shared library is created.
|
||||||
|
LDFLAGS=
|
||||||
|
SHARED_LDFLAGS=
|
||||||
|
|
||||||
|
NM=nm
|
||||||
|
|
||||||
|
# LIBNAME contains just the name of the library, without prefix ("lib"
|
||||||
|
# on Unix, "cyg" for certain forms under Cygwin...) or suffix (.a, .so,
|
||||||
|
# .dll, ...). This one MUST have a value when using this makefile to
|
||||||
|
# build shared libraries.
|
||||||
|
# For example, to build libfoo.so, you need to do the following:
|
||||||
|
#LIBNAME=foo
|
||||||
|
LIBNAME=
|
||||||
|
|
||||||
|
# APPNAME contains just the name of the application, without suffix (""
|
||||||
|
# on Unix, ".exe" on Windows, ...). This one MUST have a value when using
|
||||||
|
# this makefile to build applications.
|
||||||
|
# For example, to build foo, you need to do the following:
|
||||||
|
#APPNAME=foo
|
||||||
|
APPNAME=
|
||||||
|
|
||||||
|
# OBJECTS contains all the object files to link together into the application.
|
||||||
|
# This must contain at least one object file.
|
||||||
|
#OBJECTS=foo.o
|
||||||
|
OBJECTS=
|
||||||
|
|
||||||
|
# LIBEXTRAS contains extra modules to link together with the library.
|
||||||
|
# For example, if a second library, say libbar.a needs to be linked into
|
||||||
|
# libfoo.so, you need to do the following:
|
||||||
|
#LIBEXTRAS=libbar.a
|
||||||
|
# Note that this MUST be used when using the link_o targets, to hold the
|
||||||
|
# names of all object files that go into the target library.
|
||||||
|
LIBEXTRAS=
|
||||||
|
|
||||||
|
# LIBVERSION contains the current version of the library.
|
||||||
|
# For example, to build libfoo.so.1.2, you need to do the following:
|
||||||
|
#LIBVERSION=1.2
|
||||||
|
LIBVERSION=
|
||||||
|
|
||||||
|
# LIBCOMPATVERSIONS contains the compatibility versions (a list) of
|
||||||
|
# the library. They MUST be in decreasing order.
|
||||||
|
# For example, if libfoo.so.1.2.1 is backward compatible with libfoo.so.1.2
|
||||||
|
# and libfoo.so.1, you need to do the following:
|
||||||
|
#LIBCOMPATVERSIONS=1.2 1
|
||||||
|
# Note that on systems that use sonames, the last number will appear as
|
||||||
|
# part of it.
|
||||||
|
# It's also possible, for systems that support it (Tru64, for example),
|
||||||
|
# to add extra compatibility info with more precision, by adding a second
|
||||||
|
# list of versions, separated from the first with a semicolon, like this:
|
||||||
|
#LIBCOMPATVERSIONS=1.2 1;1.2.0 1.1.2 1.1.1 1.1.0 1.0.0
|
||||||
|
LIBCOMPATVERSIONS=
|
||||||
|
|
||||||
|
# LIBDEPS contains all the flags necessary to cover all necessary
|
||||||
|
# dependencies to other libraries.
|
||||||
|
LIBDEPS=
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# The rest is private to this makefile.
|
||||||
|
|
||||||
|
SET_X=:
|
||||||
|
#SET_X=set -x
|
||||||
|
|
||||||
|
top:
|
||||||
|
echo "Trying to use this makefile interactively? Don't."
|
||||||
|
|
||||||
|
CALC_VERSIONS= \
|
||||||
|
SHLIB_COMPAT=; SHLIB_SOVER=; \
|
||||||
|
if [ -n "$(LIBVERSION)$(LIBCOMPATVERSIONS)" ]; then \
|
||||||
|
prev=""; \
|
||||||
|
for v in `echo "$(LIBVERSION) $(LIBCOMPATVERSIONS)" | cut -d';' -f1`; do \
|
||||||
|
SHLIB_SOVER_NODOT=$$v; \
|
||||||
|
SHLIB_SOVER=.$$v; \
|
||||||
|
if [ -n "$$prev" ]; then \
|
||||||
|
SHLIB_COMPAT="$$SHLIB_COMPAT .$$prev"; \
|
||||||
|
fi; \
|
||||||
|
prev=$$v; \
|
||||||
|
done; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
LINK_APP= \
|
||||||
|
( $(SET_X); \
|
||||||
|
LIBDEPS="$${LIBDEPS:-$(LIBDEPS)}"; \
|
||||||
|
LDCMD="$${LDCMD:-$(CC)}"; LDFLAGS="$${LDFLAGS:-$(CFLAGS)}"; \
|
||||||
|
LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \
|
||||||
|
LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
|
||||||
|
LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
|
||||||
|
$${LDCMD} $${LDFLAGS} -o $${APPNAME:=$(APPNAME)} $(OBJECTS) $${LIBDEPS} )
|
||||||
|
|
||||||
|
LINK_SO= \
|
||||||
|
( $(SET_X); \
|
||||||
|
LIBDEPS="$${LIBDEPS:-$(LIBDEPS)}"; \
|
||||||
|
SHAREDCMD="$${SHAREDCMD:-$(CC)}"; \
|
||||||
|
SHAREDFLAGS="$${SHAREDFLAGS:-$(CFLAGS) $(SHARED_LDFLAGS)}"; \
|
||||||
|
LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \
|
||||||
|
LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
|
||||||
|
LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
|
||||||
|
$${SHAREDCMD} $${SHAREDFLAGS} \
|
||||||
|
-o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \
|
||||||
|
$$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS \
|
||||||
|
) && $(SYMLINK_SO)
|
||||||
|
|
||||||
|
SYMLINK_SO= \
|
||||||
|
if [ -n "$$INHIBIT_SYMLINKS" ]; then :; else \
|
||||||
|
prev=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \
|
||||||
|
if [ -n "$$SHLIB_COMPAT" ]; then \
|
||||||
|
for x in $$SHLIB_COMPAT; do \
|
||||||
|
( $(SET_X); rm -f $$SHLIB$$x$$SHLIB_SUFFIX; \
|
||||||
|
ln -s $$prev $$SHLIB$$x$$SHLIB_SUFFIX ); \
|
||||||
|
prev=$$SHLIB$$x$$SHLIB_SUFFIX; \
|
||||||
|
done; \
|
||||||
|
fi; \
|
||||||
|
if [ -n "$$SHLIB_SOVER" ]; then \
|
||||||
|
( $(SET_X); rm -f $$SHLIB$$SHLIB_SUFFIX; \
|
||||||
|
ln -s $$prev $$SHLIB$$SHLIB_SUFFIX ); \
|
||||||
|
fi; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
LINK_SO_A= SHOBJECTS="lib$(LIBNAME).a $(LIBEXTRAS)"; $(LINK_SO)
|
||||||
|
LINK_SO_O= SHOBJECTS="$(LIBEXTRAS)"; $(LINK_SO)
|
||||||
|
|
||||||
|
LINK_SO_A_VIA_O= \
|
||||||
|
SHOBJECTS=lib$(LIBNAME).o; \
|
||||||
|
ALL=$$ALLSYMSFLAGS; ALLSYMSFLAGS=; NOALLSYMSFLAGS=; \
|
||||||
|
( $(SET_X); \
|
||||||
|
ld $(LDFLAGS) -r -o lib$(LIBNAME).o $$ALL lib$(LIBNAME).a $(LIBEXTRAS) ); \
|
||||||
|
$(LINK_SO) && rm -f lib$(LIBNAME).o
|
||||||
|
|
||||||
|
LINK_SO_A_UNPACKED= \
|
||||||
|
UNPACKDIR=link_tmp.$$$$; rm -rf $$UNPACKDIR; mkdir $$UNPACKDIR; \
|
||||||
|
(cd $$UNPACKDIR; ar x ../lib$(LIBNAME).a) && \
|
||||||
|
([ -z "$(LIBEXTRAS)" ] || cp $(LIBEXTRAS) $$UNPACKDIR) && \
|
||||||
|
SHOBJECTS=$$UNPACKDIR/*.o; \
|
||||||
|
$(LINK_SO) && rm -rf $$UNPACKDIR
|
||||||
|
|
||||||
|
DETECT_GNU_LD=($(CC) -Wl,-V /dev/null 2>&1 | grep '^GNU ld' )>/dev/null
|
||||||
|
|
||||||
|
DO_GNU_SO=$(CALC_VERSIONS); \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
ALLSYMSFLAGS='-Wl,--whole-archive'; \
|
||||||
|
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-Bsymbolic -Wl,-soname=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"
|
||||||
|
|
||||||
|
DO_GNU_APP=LDFLAGS="$(CFLAGS) -Wl,-rpath,$(LIBRPATH)"
|
||||||
|
|
||||||
|
#This is rather special. It's a special target with which one can link
|
||||||
|
#applications without bothering with any features that have anything to
|
||||||
|
#do with shared libraries, for example when linking against static
|
||||||
|
#libraries. It's mostly here to avoid a lot of conditionals everywhere
|
||||||
|
#else...
|
||||||
|
link_app.:
|
||||||
|
$(LINK_APP)
|
||||||
|
|
||||||
|
link_o.gnu:
|
||||||
|
@ $(DO_GNU_SO); $(LINK_SO_O)
|
||||||
|
link_a.gnu:
|
||||||
|
@ $(DO_GNU_SO); $(LINK_SO_A)
|
||||||
|
link_app.gnu:
|
||||||
|
@ $(DO_GNU_APP); $(LINK_APP)
|
||||||
|
|
||||||
|
DO_BEOS_SO= SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
ALLSYMSFLAGS='-Wl,--whole-archive'; \
|
||||||
|
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-Bsymbolic -Wl,-soname=$$SHLIB$$SHLIB_SUFFIX"
|
||||||
|
|
||||||
|
link_o.beos:
|
||||||
|
@ $(DO_BEOS_SO); $(LINK_SO_O)
|
||||||
|
link_a.beos:
|
||||||
|
@ $(DO_BEOS_SO); $(LINK_SO_A)
|
||||||
|
|
||||||
|
link_o.bsd:
|
||||||
|
@if $(DETECT_GNU_LD); then $(DO_GNU_SO); else \
|
||||||
|
$(CALC_VERSIONS); \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
LIBDEPS=" "; \
|
||||||
|
ALLSYMSFLAGS="-Wl,-Bforcearchive"; \
|
||||||
|
NOALLSYMSFLAGS=; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -nostdlib"; \
|
||||||
|
fi; $(LINK_SO_O)
|
||||||
|
link_a.bsd:
|
||||||
|
@if $(DETECT_GNU_LD); then $(DO_GNU_SO); else \
|
||||||
|
$(CALC_VERSIONS); \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
LIBDEPS=" "; \
|
||||||
|
ALLSYMSFLAGS="-Wl,-Bforcearchive"; \
|
||||||
|
NOALLSYMSFLAGS=; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -nostdlib"; \
|
||||||
|
fi; $(LINK_SO_A)
|
||||||
|
link_app.bsd:
|
||||||
|
@if $(DETECT_GNU_LD); then $(DO_GNU_APP); else \
|
||||||
|
LDFLAGS="$(CFLAGS) -Wl,-rpath,$(LIBPATH)"; \
|
||||||
|
fi; $(LINK_APP)
|
||||||
|
|
||||||
|
# For Darwin AKA Mac OS/X (dyld)
|
||||||
|
# Originally link_o.darwin produced .so, because it was hard-coded
|
||||||
|
# in dso_dlfcn module. At later point dso_dlfcn switched to .dylib
|
||||||
|
# extension in order to allow for run-time linking with vendor-
|
||||||
|
# supplied shared libraries such as libz, so that link_o.darwin had
|
||||||
|
# to be harmonized with it. This caused minor controversy, because
|
||||||
|
# it was believed that dlopen can't be used to dynamically load
|
||||||
|
# .dylib-s, only so called bundle modules (ones linked with -bundle
|
||||||
|
# flag). The belief seems to be originating from pre-10.4 release,
|
||||||
|
# where dlfcn functionality was emulated by dlcompat add-on. In
|
||||||
|
# 10.4 dlopen was rewritten as native part of dyld and is documented
|
||||||
|
# to be capable of loading both dynamic libraries and bundles. In
|
||||||
|
# order to provide compatibility with pre-10.4 dlopen, modules are
|
||||||
|
# linked with -bundle flag, which makes .dylib extension misleading.
|
||||||
|
# It works, because dlopen is [and always was] extension-agnostic.
|
||||||
|
# Alternative to this heuristic approach is to develop specific
|
||||||
|
# MacOS X dso module relying on whichever "native" dyld interface.
|
||||||
|
link_o.darwin:
|
||||||
|
@ $(CALC_VERSIONS); \
|
||||||
|
SHLIB=lib$(LIBNAME); \
|
||||||
|
SHLIB_SUFFIX=.dylib; \
|
||||||
|
ALLSYMSFLAGS='-all_load'; \
|
||||||
|
NOALLSYMSFLAGS=''; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) `echo $(SHARED_LDFLAGS) | sed s/dynamiclib/bundle/`"; \
|
||||||
|
if [ -n "$(LIBVERSION)" ]; then \
|
||||||
|
SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \
|
||||||
|
fi; \
|
||||||
|
if [ -n "$$SHLIB_SOVER_NODOT" ]; then \
|
||||||
|
SHAREDFLAGS="$$SHAREDFLAGS -compatibility_version $$SHLIB_SOVER_NODOT"; \
|
||||||
|
fi; \
|
||||||
|
$(LINK_SO_O)
|
||||||
|
link_a.darwin:
|
||||||
|
@ $(CALC_VERSIONS); \
|
||||||
|
SHLIB=lib$(LIBNAME); \
|
||||||
|
SHLIB_SUFFIX=.dylib; \
|
||||||
|
ALLSYMSFLAGS='-all_load'; \
|
||||||
|
NOALLSYMSFLAGS=''; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS)"; \
|
||||||
|
if [ -n "$(LIBVERSION)" ]; then \
|
||||||
|
SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \
|
||||||
|
fi; \
|
||||||
|
if [ -n "$$SHLIB_SOVER_NODOT" ]; then \
|
||||||
|
SHAREDFLAGS="$$SHAREDFLAGS -compatibility_version $$SHLIB_SOVER_NODOT"; \
|
||||||
|
fi; \
|
||||||
|
SHAREDFLAGS="$$SHAREDFLAGS -install_name $(INSTALLTOP)/$(LIBDIR)/$$SHLIB$(SHLIB_EXT)"; \
|
||||||
|
$(LINK_SO_A)
|
||||||
|
link_app.darwin: # is there run-path on darwin?
|
||||||
|
$(LINK_APP)
|
||||||
|
|
||||||
|
link_o.cygwin:
|
||||||
|
@ $(CALC_VERSIONS); \
|
||||||
|
INHIBIT_SYMLINKS=yes; \
|
||||||
|
SHLIB=cyg$(LIBNAME); \
|
||||||
|
base=-Wl,--enable-auto-image-base; \
|
||||||
|
deffile=; \
|
||||||
|
if expr $(PLATFORM) : 'mingw' > /dev/null; then \
|
||||||
|
SHLIB=$(LIBNAME)eay32; base=; \
|
||||||
|
if test -f $(LIBNAME)eay32.def; then \
|
||||||
|
deffile=$(LIBNAME)eay32.def; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
SHLIB_SUFFIX=.dll; \
|
||||||
|
LIBVERSION="$(LIBVERSION)"; \
|
||||||
|
SHLIB_SOVER=${LIBVERSION:+"-$(LIBVERSION)"}; \
|
||||||
|
ALLSYMSFLAGS='-Wl,--whole-archive'; \
|
||||||
|
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base $$deffile -Wl,-s,-Bsymbolic"; \
|
||||||
|
$(LINK_SO_O)
|
||||||
|
#for mingw target if def-file is in use dll-name should match library-name
|
||||||
|
link_a.cygwin:
|
||||||
|
@ $(CALC_VERSIONS); \
|
||||||
|
INHIBIT_SYMLINKS=yes; \
|
||||||
|
SHLIB=cyg$(LIBNAME); SHLIB_SOVER=-$(LIBVERSION); SHLIB_SUFFIX=.dll; \
|
||||||
|
dll_name=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; extras=; \
|
||||||
|
base=-Wl,--enable-auto-image-base; \
|
||||||
|
if expr $(PLATFORM) : 'mingw' > /dev/null; then \
|
||||||
|
case $(LIBNAME) in \
|
||||||
|
crypto) SHLIB=libeay;; \
|
||||||
|
ssl) SHLIB=ssleay;; \
|
||||||
|
esac; \
|
||||||
|
SHLIB_SOVER=32; \
|
||||||
|
extras="$(LIBNAME).def"; \
|
||||||
|
$(PERL) util/mkdef.pl 32 $$SHLIB > $$extras; \
|
||||||
|
base=; [ $(LIBNAME) = "crypto" ] && base=-Wl,--image-base,0x63000000; \
|
||||||
|
fi; \
|
||||||
|
dll_name=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \
|
||||||
|
$(PERL) util/mkrc.pl $$dll_name | \
|
||||||
|
$(CROSS_COMPILE)windres -o rc.o; \
|
||||||
|
extras="$$extras rc.o"; \
|
||||||
|
ALLSYMSFLAGS='-Wl,--whole-archive'; \
|
||||||
|
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-s,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a $$extras"; \
|
||||||
|
[ -f apps/$$dll_name ] && rm apps/$$dll_name; \
|
||||||
|
[ -f test/$$dll_name ] && rm test/$$dll_name; \
|
||||||
|
$(LINK_SO_A) || exit 1; \
|
||||||
|
rm $$extras; \
|
||||||
|
cp -p $$dll_name apps/; \
|
||||||
|
cp -p $$dll_name test/
|
||||||
|
link_app.cygwin:
|
||||||
|
@if expr "$(CFLAGS)" : '.*OPENSSL_USE_APPLINK' > /dev/null; then \
|
||||||
|
LIBDEPS="$(TOP)/crypto/applink.o $${LIBDEPS:-$(LIBDEPS)}"; \
|
||||||
|
export LIBDEPS; \
|
||||||
|
fi; \
|
||||||
|
$(LINK_APP)
|
||||||
|
|
||||||
|
link_o.alpha-osf1:
|
||||||
|
@ if $(DETECT_GNU_LD); then \
|
||||||
|
$(DO_GNU_SO); \
|
||||||
|
else \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
|
||||||
|
if [ -n "$$SHLIB_HIST" ]; then \
|
||||||
|
SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
|
||||||
|
else \
|
||||||
|
SHLIB_HIST="$(LIBVERSION)"; \
|
||||||
|
fi; \
|
||||||
|
SHLIB_SOVER=; \
|
||||||
|
ALLSYMSFLAGS='-all'; \
|
||||||
|
NOALLSYMSFLAGS='-none'; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-B,symbolic"; \
|
||||||
|
if [ -n "$$SHLIB_HIST" ]; then \
|
||||||
|
SHAREDFLAGS="$$SHAREDFLAGS -set_version $$SHLIB_HIST"; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
$(LINK_SO_O)
|
||||||
|
link_a.alpha-osf1:
|
||||||
|
@ if $(DETECT_GNU_LD); then \
|
||||||
|
$(DO_GNU_SO); \
|
||||||
|
else \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
|
||||||
|
if [ -n "$$SHLIB_HIST" ]; then \
|
||||||
|
SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
|
||||||
|
else \
|
||||||
|
SHLIB_HIST="$(LIBVERSION)"; \
|
||||||
|
fi; \
|
||||||
|
SHLIB_SOVER=; \
|
||||||
|
ALLSYMSFLAGS='-all'; \
|
||||||
|
NOALLSYMSFLAGS='-none'; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-B,symbolic"; \
|
||||||
|
if [ -n "$$SHLIB_HIST" ]; then \
|
||||||
|
SHAREDFLAGS="$$SHAREDFLAGS -set_version $$SHLIB_HIST"; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
$(LINK_SO_A)
|
||||||
|
link_app.alpha-osf1:
|
||||||
|
@if $(DETECT_GNU_LD); then \
|
||||||
|
$(DO_GNU_APP); \
|
||||||
|
else \
|
||||||
|
LDFLAGS="$(CFLAGS) -rpath $(LIBRPATH)"; \
|
||||||
|
fi; \
|
||||||
|
$(LINK_APP)
|
||||||
|
|
||||||
|
link_o.solaris:
|
||||||
|
@ if $(DETECT_GNU_LD); then \
|
||||||
|
$(DO_GNU_SO); \
|
||||||
|
else \
|
||||||
|
$(CALC_VERSIONS); \
|
||||||
|
MINUSZ='-z '; \
|
||||||
|
($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSZ='-Wl,-z,'; \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
ALLSYMSFLAGS="$${MINUSZ}allextract"; \
|
||||||
|
NOALLSYMSFLAGS="$${MINUSZ}defaultextract"; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -Wl,-Bsymbolic"; \
|
||||||
|
fi; \
|
||||||
|
$(LINK_SO_O)
|
||||||
|
link_a.solaris:
|
||||||
|
@ if $(DETECT_GNU_LD); then \
|
||||||
|
$(DO_GNU_SO); \
|
||||||
|
else \
|
||||||
|
$(CALC_VERSIONS); \
|
||||||
|
MINUSZ='-z '; \
|
||||||
|
($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSZ='-Wl,-z,'; \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=;\
|
||||||
|
ALLSYMSFLAGS="$${MINUSZ}allextract"; \
|
||||||
|
NOALLSYMSFLAGS="$${MINUSZ}defaultextract"; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -Wl,-Bsymbolic"; \
|
||||||
|
fi; \
|
||||||
|
$(LINK_SO_A)
|
||||||
|
link_app.solaris:
|
||||||
|
@ if $(DETECT_GNU_LD); then \
|
||||||
|
$(DO_GNU_APP); \
|
||||||
|
else \
|
||||||
|
LDFLAGS="$(CFLAGS) -R $(LIBRPATH)"; \
|
||||||
|
fi; \
|
||||||
|
$(LINK_APP)
|
||||||
|
|
||||||
|
# OpenServer 5 native compilers used
|
||||||
|
link_o.svr3:
|
||||||
|
@ if $(DETECT_GNU_LD); then \
|
||||||
|
$(DO_GNU_SO); \
|
||||||
|
else \
|
||||||
|
$(CALC_VERSIONS); \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
ALLSYMSFLAGS=''; \
|
||||||
|
NOALLSYMSFLAGS=''; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) -G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
|
||||||
|
fi; \
|
||||||
|
$(LINK_SO_O)
|
||||||
|
link_a.svr3:
|
||||||
|
@ if $(DETECT_GNU_LD); then \
|
||||||
|
$(DO_GNU_SO); \
|
||||||
|
else \
|
||||||
|
$(CALC_VERSIONS); \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
ALLSYMSFLAGS=''; \
|
||||||
|
NOALLSYMSFLAGS=''; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) -G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
|
||||||
|
fi; \
|
||||||
|
$(LINK_SO_A_UNPACKED)
|
||||||
|
link_app.svr3:
|
||||||
|
@$(DETECT_GNU_LD) && $(DO_GNU_APP); \
|
||||||
|
$(LINK_APP)
|
||||||
|
|
||||||
|
# UnixWare 7 and OpenUNIX 8 native compilers used
|
||||||
|
link_o.svr5:
|
||||||
|
@ if $(DETECT_GNU_LD); then \
|
||||||
|
$(DO_GNU_SO); \
|
||||||
|
else \
|
||||||
|
$(CALC_VERSIONS); \
|
||||||
|
SHARE_FLAG='-G'; \
|
||||||
|
($(CC) -v 2>&1 | grep gcc) > /dev/null && SHARE_FLAG='-shared'; \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
ALLSYMSFLAGS=''; \
|
||||||
|
NOALLSYMSFLAGS=''; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $${SHARE_FLAG} -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
|
||||||
|
fi; \
|
||||||
|
$(LINK_SO_O)
|
||||||
|
link_a.svr5:
|
||||||
|
@ if $(DETECT_GNU_LD); then \
|
||||||
|
$(DO_GNU_SO); \
|
||||||
|
else \
|
||||||
|
$(CALC_VERSIONS); \
|
||||||
|
SHARE_FLAG='-G'; \
|
||||||
|
($(CC) -v 2>&1 | grep gcc) > /dev/null && SHARE_FLAG='-shared'; \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
ALLSYMSFLAGS=''; \
|
||||||
|
NOALLSYMSFLAGS=''; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $${SHARE_FLAG} -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
|
||||||
|
fi; \
|
||||||
|
$(LINK_SO_A_UNPACKED)
|
||||||
|
link_app.svr5:
|
||||||
|
@$(DETECT_GNU_LD) && $(DO_GNU_APP); \
|
||||||
|
$(LINK_APP)
|
||||||
|
|
||||||
|
link_o.irix:
|
||||||
|
@ if $(DETECT_GNU_LD); then \
|
||||||
|
$(DO_GNU_SO); \
|
||||||
|
else \
|
||||||
|
$(CALC_VERSIONS); \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
MINUSWL=""; \
|
||||||
|
($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSWL="-Wl,"; \
|
||||||
|
ALLSYMSFLAGS="$${MINUSWL}-all"; \
|
||||||
|
NOALLSYMSFLAGS="$${MINUSWL}-none"; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,-B,symbolic"; \
|
||||||
|
fi; \
|
||||||
|
$(LINK_SO_O)
|
||||||
|
link_a.irix:
|
||||||
|
@ if $(DETECT_GNU_LD); then \
|
||||||
|
$(DO_GNU_SO); \
|
||||||
|
else \
|
||||||
|
$(CALC_VERSIONS); \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
MINUSWL=""; \
|
||||||
|
($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSWL="-Wl,"; \
|
||||||
|
ALLSYMSFLAGS="$${MINUSWL}-all"; \
|
||||||
|
NOALLSYMSFLAGS="$${MINUSWL}-none"; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,-B,symbolic"; \
|
||||||
|
fi; \
|
||||||
|
$(LINK_SO_A)
|
||||||
|
link_app.irix:
|
||||||
|
@LDFLAGS="$(CFLAGS) -Wl,-rpath,$(LIBRPATH)"; \
|
||||||
|
$(LINK_APP)
|
||||||
|
|
||||||
|
# 32-bit PA-RISC HP-UX embeds the -L pathname of libs we link with, so
|
||||||
|
# we compensate for it with +cdp ../: and +cdp ./:. Yes, these rewrite
|
||||||
|
# rules imply that we can only link one level down in catalog structure,
|
||||||
|
# but that's what takes place for the moment of this writing. +cdp option
|
||||||
|
# was introduced in HP-UX 11.x and applies in 32-bit PA-RISC link
|
||||||
|
# editor context only [it's simply ignored in other cases, which are all
|
||||||
|
# ELFs by the way].
|
||||||
|
#
|
||||||
|
link_o.hpux:
|
||||||
|
@if $(DETECT_GNU_LD); then $(DO_GNU_SO); else \
|
||||||
|
$(CALC_VERSIONS); \
|
||||||
|
SHLIB=lib$(LIBNAME).sl; \
|
||||||
|
expr "$(CFLAGS)" : '.*DSO_DLFCN' > /dev/null && SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
ALLSYMSFLAGS='-Wl,-Fl'; \
|
||||||
|
NOALLSYMSFLAGS=''; \
|
||||||
|
expr $(PLATFORM) : 'hpux64' > /dev/null && ALLSYMSFLAGS='-Wl,+forceload'; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+h,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,+cdp,../:,+cdp,./:"; \
|
||||||
|
fi; \
|
||||||
|
rm -f $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX || :; \
|
||||||
|
$(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
|
||||||
|
link_a.hpux:
|
||||||
|
@if $(DETECT_GNU_LD); then $(DO_GNU_SO); else \
|
||||||
|
$(CALC_VERSIONS); \
|
||||||
|
SHLIB=lib$(LIBNAME).sl; \
|
||||||
|
expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
ALLSYMSFLAGS='-Wl,-Fl'; \
|
||||||
|
NOALLSYMSFLAGS=''; \
|
||||||
|
expr $(PLATFORM) : 'hpux64' > /dev/null && ALLSYMSFLAGS='-Wl,+forceload'; \
|
||||||
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+h,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,+cdp,../:,+cdp,./:"; \
|
||||||
|
fi; \
|
||||||
|
rm -f $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX || :; \
|
||||||
|
$(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
|
||||||
|
link_app.hpux:
|
||||||
|
@if $(DETECT_GNU_LD); then $(DO_GNU_APP); else \
|
||||||
|
LDFLAGS="$(CFLAGS) -Wl,+s,+cdp,../:,+cdp,./:,+b,$(LIBRPATH)"; \
|
||||||
|
fi; \
|
||||||
|
$(LINK_APP)
|
||||||
|
|
||||||
|
link_o.aix:
|
||||||
|
@ $(CALC_VERSIONS); \
|
||||||
|
OBJECT_MODE=`expr "x$(SHARED_LDFLAGS)" : 'x\-[a-z]*\(64\)'` || :; \
|
||||||
|
OBJECT_MODE=$${OBJECT_MODE:-32}; export OBJECT_MODE; \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
ALLSYMSFLAGS=''; \
|
||||||
|
NOALLSYMSFLAGS=''; \
|
||||||
|
SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-bexpall,-bnolibpath,-bM:SRE'; \
|
||||||
|
$(LINK_SO_O);
|
||||||
|
link_a.aix:
|
||||||
|
@ $(CALC_VERSIONS); \
|
||||||
|
OBJECT_MODE=`expr "x$(SHARED_LDFLAGS)" : 'x\-[a-z]*\(64\)'` || : ; \
|
||||||
|
OBJECT_MODE=$${OBJECT_MODE:-32}; export OBJECT_MODE; \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
ALLSYMSFLAGS='-bnogc'; \
|
||||||
|
NOALLSYMSFLAGS=''; \
|
||||||
|
SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-bexpall,-bnolibpath,-bM:SRE'; \
|
||||||
|
$(LINK_SO_A_VIA_O)
|
||||||
|
link_app.aix:
|
||||||
|
LDFLAGS="$(CFLAGS) -Wl,-brtl,-blibpath:$(LIBRPATH):$${LIBPATH:-/usr/lib:/lib}"; \
|
||||||
|
$(LINK_APP)
|
||||||
|
|
||||||
|
link_o.reliantunix:
|
||||||
|
@ $(CALC_VERSIONS); \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
ALLSYMSFLAGS=; \
|
||||||
|
NOALLSYMSFLAGS=''; \
|
||||||
|
SHAREDFLAGS='$(CFLAGS) -G'; \
|
||||||
|
$(LINK_SO_O)
|
||||||
|
link_a.reliantunix:
|
||||||
|
@ $(CALC_VERSIONS); \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
SHLIB_SUFFIX=; \
|
||||||
|
ALLSYMSFLAGS=; \
|
||||||
|
NOALLSYMSFLAGS=''; \
|
||||||
|
SHAREDFLAGS='$(CFLAGS) -G'; \
|
||||||
|
$(LINK_SO_A_UNPACKED)
|
||||||
|
link_app.reliantunix:
|
||||||
|
$(LINK_APP)
|
||||||
|
|
||||||
|
# Targets to build symbolic links when needed
|
||||||
|
symlink.gnu symlink.solaris symlink.svr3 symlink.svr5 symlink.irix \
|
||||||
|
symlink.aix symlink.reliantunix:
|
||||||
|
@ $(CALC_VERSIONS); \
|
||||||
|
SHLIB=lib$(LIBNAME).so; \
|
||||||
|
$(SYMLINK_SO)
|
||||||
|
symlink.darwin:
|
||||||
|
@ $(CALC_VERSIONS); \
|
||||||
|
SHLIB=lib$(LIBNAME); \
|
||||||
|
SHLIB_SUFFIX=.dylib; \
|
||||||
|
$(SYMLINK_SO)
|
||||||
|
symlink.hpux:
|
||||||
|
@ $(CALC_VERSIONS); \
|
||||||
|
SHLIB=lib$(LIBNAME).sl; \
|
||||||
|
expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \
|
||||||
|
$(SYMLINK_SO)
|
||||||
|
# The following lines means those specific architectures do no symlinks
|
||||||
|
symlink.cygwin symlink.alpha-osf1 symlink.tru64 symlink.tru64-rpath symlink.beos:
|
||||||
|
|
||||||
|
# Compatibility targets
|
||||||
|
link_o.bsd-gcc-shared link_o.linux-shared link_o.gnu-shared: link_o.gnu
|
||||||
|
link_a.bsd-gcc-shared link_a.linux-shared link_a.gnu-shared: link_a.gnu
|
||||||
|
link_app.bsd-gcc-shared link_app.linux-shared link_app.gnu-shared: link_app.gnu
|
||||||
|
symlink.bsd-gcc-shared symlink.bsd-shared symlink.linux-shared symlink.gnu-shared: symlink.gnu
|
||||||
|
link_o.bsd-shared: link_o.bsd
|
||||||
|
link_a.bsd-shared: link_a.bsd
|
||||||
|
link_app.bsd-shared: link_app.bsd
|
||||||
|
link_o.darwin-shared: link_o.darwin
|
||||||
|
link_a.darwin-shared: link_a.darwin
|
||||||
|
link_app.darwin-shared: link_app.darwin
|
||||||
|
symlink.darwin-shared: symlink.darwin
|
||||||
|
link_o.cygwin-shared: link_o.cygwin
|
||||||
|
link_a.cygwin-shared: link_a.cygwin
|
||||||
|
link_app.cygwin-shared: link_app.cygwin
|
||||||
|
symlink.cygwin-shared: symlink.cygwin
|
||||||
|
link_o.alpha-osf1-shared: link_o.alpha-osf1
|
||||||
|
link_a.alpha-osf1-shared: link_a.alpha-osf1
|
||||||
|
link_app.alpha-osf1-shared: link_app.alpha-osf1
|
||||||
|
symlink.alpha-osf1-shared: symlink.alpha-osf1
|
||||||
|
link_o.tru64-shared: link_o.tru64
|
||||||
|
link_a.tru64-shared: link_a.tru64
|
||||||
|
link_app.tru64-shared: link_app.tru64
|
||||||
|
symlink.tru64-shared: symlink.tru64
|
||||||
|
link_o.tru64-shared-rpath: link_o.tru64-rpath
|
||||||
|
link_a.tru64-shared-rpath: link_a.tru64-rpath
|
||||||
|
link_app.tru64-shared-rpath: link_app.tru64-rpath
|
||||||
|
symlink.tru64-shared-rpath: symlink.tru64-rpath
|
||||||
|
link_o.solaris-shared: link_o.solaris
|
||||||
|
link_a.solaris-shared: link_a.solaris
|
||||||
|
link_app.solaris-shared: link_app.solaris
|
||||||
|
symlink.solaris-shared: symlink.solaris
|
||||||
|
link_o.svr3-shared: link_o.svr3
|
||||||
|
link_a.svr3-shared: link_a.svr3
|
||||||
|
link_app.svr3-shared: link_app.svr3
|
||||||
|
symlink.svr3-shared: symlink.svr3
|
||||||
|
link_o.svr5-shared: link_o.svr5
|
||||||
|
link_a.svr5-shared: link_a.svr5
|
||||||
|
link_app.svr5-shared: link_app.svr5
|
||||||
|
symlink.svr5-shared: symlink.svr5
|
||||||
|
link_o.irix-shared: link_o.irix
|
||||||
|
link_a.irix-shared: link_a.irix
|
||||||
|
link_app.irix-shared: link_app.irix
|
||||||
|
symlink.irix-shared: symlink.irix
|
||||||
|
link_o.hpux-shared: link_o.hpux
|
||||||
|
link_a.hpux-shared: link_a.hpux
|
||||||
|
link_app.hpux-shared: link_app.hpux
|
||||||
|
symlink.hpux-shared: symlink.hpux
|
||||||
|
link_o.aix-shared: link_o.aix
|
||||||
|
link_a.aix-shared: link_a.aix
|
||||||
|
link_app.aix-shared: link_app.aix
|
||||||
|
symlink.aix-shared: symlink.aix
|
||||||
|
link_o.reliantunix-shared: link_o.reliantunix
|
||||||
|
link_a.reliantunix-shared: link_a.reliantunix
|
||||||
|
link_app.reliantunix-shared: link_app.reliantunix
|
||||||
|
symlink.reliantunix-shared: symlink.reliantunix
|
||||||
|
link_o.beos-shared: link_o.beos
|
||||||
|
link_a.beos-shared: link_a.beos
|
||||||
|
link_app.beos-shared: link_app.gnu
|
||||||
|
symlink.beos-shared: symlink.beos
|
||||||
447
NEWS
447
NEWS
@@ -5,22 +5,421 @@
|
|||||||
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 0.9.7c and OpenSSL 0.9.7d:
|
Major changes between OpenSSL 1.0.1e and OpenSSL 1.0.1f [6 Jan 2014]
|
||||||
|
|
||||||
|
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.0j and OpenSSL 1.0.0k [5 Feb 2013]:
|
||||||
|
|
||||||
|
o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
|
||||||
|
o Fix OCSP bad key DoS attack CVE-2013-0166
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.0i and OpenSSL 1.0.0j [10 May 2012]:
|
||||||
|
|
||||||
|
o Fix DTLS record length checking bug CVE-2012-2333
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.0i [19 Apr 2012]:
|
||||||
|
|
||||||
|
o Fix for ASN1 overflow bug CVE-2012-2110
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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 CVE-2010-4252
|
||||||
|
o Fix mishandling of absent EC point format extension.
|
||||||
|
o Fix various platform compilation issues.
|
||||||
|
o Corrected fix for security issue CVE-2010-3864.
|
||||||
|
|
||||||
|
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 CVE-2010-2939
|
||||||
|
o Fix WIN32 build system for GOST ENGINE.
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a [1 Jun 2010]:
|
||||||
|
|
||||||
|
o Fix for security issue CVE-2010-1633.
|
||||||
|
o GOST MAC and CFB fixes.
|
||||||
|
|
||||||
|
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 Integrated support for PVK files and keyblobs.
|
||||||
|
o Change default private key format to PKCS#8.
|
||||||
|
o CMS support: able to process all examples in RFC4134
|
||||||
|
o Streaming ASN1 encode support for PKCS#7 and CMS.
|
||||||
|
o Multiple signer and signer add support for PKCS#7 and CMS.
|
||||||
|
o ASN1 printing support.
|
||||||
|
o Whirlpool hash algorithm added.
|
||||||
|
o RFC3161 time stamp support.
|
||||||
|
o New generalised public key API supporting ENGINE based algorithms.
|
||||||
|
o New generalised public key API utilities.
|
||||||
|
o New ENGINE supporting GOST algorithms.
|
||||||
|
o SSL/TLS GOST ciphersuite support.
|
||||||
|
o PKCS#7 and CMS GOST support.
|
||||||
|
o RFC4279 PSK ciphersuite support.
|
||||||
|
o Supported points format extension for ECC ciphersuites.
|
||||||
|
o ecdsa-with-SHA224/256/384/512 signature types.
|
||||||
|
o dsa-with-SHA224 and dsa-with-SHA256 signature types.
|
||||||
|
o Opaque PRF Input TLS extension support.
|
||||||
|
o Updated time routines to avoid OS limitations.
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.8x and OpenSSL 0.9.8y [5 Feb 2013]:
|
||||||
|
|
||||||
|
o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
|
||||||
|
o Fix OCSP bad key DoS attack CVE-2013-0166
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.8w and OpenSSL 0.9.8x [10 May 2012]:
|
||||||
|
|
||||||
|
o Fix DTLS record length checking bug CVE-2012-2333
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.8v and OpenSSL 0.9.8w [23 Apr 2012]:
|
||||||
|
|
||||||
|
o Fix for CVE-2012-2131 (corrected fix for 0.9.8 and CVE-2012-2110)
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.8u and OpenSSL 0.9.8v [19 Apr 2012]:
|
||||||
|
|
||||||
|
o Fix for ASN1 overflow bug CVE-2012-2110
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.8t and OpenSSL 0.9.8u [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 0.9.8s and OpenSSL 0.9.8t [18 Jan 2012]:
|
||||||
|
|
||||||
|
o Fix for DTLS DoS issue CVE-2012-0050
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.8r and OpenSSL 0.9.8s [4 Jan 2012]:
|
||||||
|
|
||||||
|
o Fix for DTLS plaintext recovery attack CVE-2011-4108
|
||||||
|
o Fix policy check double free error CVE-2011-4109
|
||||||
|
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 for malformed RFC3779 data CVE-2011-4577
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.8q and OpenSSL 0.9.8r [8 Feb 2011]:
|
||||||
|
|
||||||
|
o Fix for security issue CVE-2011-0014
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.8p and OpenSSL 0.9.8q [2 Dec 2010]:
|
||||||
|
|
||||||
|
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 [16 Nov 2010]:
|
||||||
|
|
||||||
|
o Fix for security issue CVE-2010-3864.
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.8n and OpenSSL 0.9.8o [1 Jun 2010]:
|
||||||
|
|
||||||
|
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 [24 Mar 2010]:
|
||||||
|
|
||||||
|
o CFB cipher definition fixes.
|
||||||
|
o Fix security issues CVE-2010-0740 and CVE-2010-0433.
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.8l and OpenSSL 0.9.8m [25 Feb 2010]:
|
||||||
|
|
||||||
|
o Cipher definition fixes.
|
||||||
|
o Workaround for slow RAND_poll() on some WIN32 versions.
|
||||||
|
o Remove MD2 from algorithm tables.
|
||||||
|
o SPKAC handling fixes.
|
||||||
|
o Support for RFC5746 TLS renegotiation extension.
|
||||||
|
o Compression memory leak fixed.
|
||||||
|
o Compression session resumption fixed.
|
||||||
|
o Ticket and SNI coexistence fixes.
|
||||||
|
o Many fixes to DTLS handling.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.8j and OpenSSL 0.9.8k [25 Mar 2009]:
|
||||||
|
|
||||||
|
o Fix various build issues.
|
||||||
|
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 [7 Jan 2009]:
|
||||||
|
|
||||||
|
o Fix security issue (CVE-2008-5077)
|
||||||
|
o Merge FIPS 140-2 branch code.
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.8g and OpenSSL 0.9.8h [28 May 2008]:
|
||||||
|
|
||||||
|
o CryptoAPI ENGINE support.
|
||||||
|
o Various precautionary measures.
|
||||||
|
o Fix for bugs affecting certificate request creation.
|
||||||
|
o Support for local machine keyset attribute in PKCS#12 files.
|
||||||
|
|
||||||
|
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 Fixes for bugs introduced with 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 support for AES and SSE2 assembly lanugauge optimization
|
||||||
|
for VC++ build.
|
||||||
|
o Support for RFC4507bis and server name extensions if explicitly
|
||||||
|
selected at compile time.
|
||||||
|
o DTLS improvements.
|
||||||
|
o RFC4507bis support.
|
||||||
|
o TLS Extensions support.
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e [23 Feb 2007]:
|
||||||
|
|
||||||
|
o Various ciphersuite selection fixes.
|
||||||
|
o RFC3779 support.
|
||||||
|
|
||||||
|
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 Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
|
||||||
|
o Changes to ciphersuite selection algorithm
|
||||||
|
|
||||||
|
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 New cipher Camellia
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b [4 May 2006]:
|
||||||
|
|
||||||
|
o Cipher string fixes.
|
||||||
|
o Fixes for VC++ 2005.
|
||||||
|
o Updated ECC cipher suite support.
|
||||||
|
o New functions EVP_CIPHER_CTX_new() and EVP_CIPHER_CTX_free().
|
||||||
|
o Zlib compression usage fixes.
|
||||||
|
o Built in dynamic engine compilation support on Win32.
|
||||||
|
o Fixes auto dynamic engine loading in Win32.
|
||||||
|
|
||||||
|
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 Extended Windows CE support
|
||||||
|
|
||||||
|
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
|
||||||
|
make operations more streamlined and less contradictory. This
|
||||||
|
is the result of a major audit of the BIGNUM library.
|
||||||
|
o Addition of BIGNUM functions for fields GF(2^m) and NIST
|
||||||
|
curves, to support the Elliptic Crypto functions.
|
||||||
|
o Major work on Elliptic Crypto; ECDH and ECDSA added, including
|
||||||
|
the use through EVP, X509 and ENGINE.
|
||||||
|
o New ASN.1 mini-compiler that's usable through the OpenSSL
|
||||||
|
configuration file.
|
||||||
|
o Added support for ASN.1 indefinite length constructed encoding.
|
||||||
|
o New PKCS#12 'medium level' API to manipulate PKCS#12 files.
|
||||||
|
o Complete rework of shared library construction and linking
|
||||||
|
programs with shared or static libraries, through a separate
|
||||||
|
Makefile.shared.
|
||||||
|
o Rework of the passing of parameters from one Makefile to another.
|
||||||
|
o Changed ENGINE framework to load dynamic engine modules
|
||||||
|
automatically from specifically given directories.
|
||||||
|
o New structure and ASN.1 functions for CertificatePair.
|
||||||
|
o Changed the ZLIB compression method to be stateful.
|
||||||
|
o Changed the key-generation and primality testing "progress"
|
||||||
|
mechanism to take a structure that contains the ticker
|
||||||
|
function and an argument.
|
||||||
|
o New engine module: GMP (performs private key exponentiation).
|
||||||
|
o New engine module: VIA PadLOck ACE extension in VIA C3
|
||||||
|
Nehemiah processors.
|
||||||
|
o Added support for IPv6 addresses in certificate extensions.
|
||||||
|
See RFC 1884, section 2.2.
|
||||||
|
o Added support for certificate policy mappings, policy
|
||||||
|
constraints and name constraints.
|
||||||
|
o Added support for multi-valued AVAs in the OpenSSL
|
||||||
|
configuration file.
|
||||||
|
o Added support for multiple certificates with the same subject
|
||||||
|
in the 'openssl ca' index file.
|
||||||
|
o Make it possible to create self-signed certificates using
|
||||||
|
'openssl ca -selfsign'.
|
||||||
|
o Make it possible to generate a serial number file with
|
||||||
|
'openssl ca -create_serial'.
|
||||||
|
o New binary search functions with extended functionality.
|
||||||
|
o New BUF functions.
|
||||||
|
o New STORE structure and library to provide an interface to all
|
||||||
|
sorts of data repositories. Supports storage of public and
|
||||||
|
private keys, certificates, CRLs, numbers and arbitrary blobs.
|
||||||
|
This library is unfortunately unfinished and unused withing
|
||||||
|
OpenSSL.
|
||||||
|
o New control functions for the error stack.
|
||||||
|
o Changed the PKCS#7 library to support one-pass S/MIME
|
||||||
|
processing.
|
||||||
|
o Added the possibility to compile without old deprecated
|
||||||
|
functionality with the OPENSSL_NO_DEPRECATED macro or the
|
||||||
|
'no-deprecated' argument to the config and Configure scripts.
|
||||||
|
o Constification of all ASN.1 conversion functions, and other
|
||||||
|
affected functions.
|
||||||
|
o Improved platform support for PowerPC.
|
||||||
|
o New FIPS 180-2 algorithms (SHA-224, -256, -384 and -512).
|
||||||
|
o New X509_VERIFY_PARAM structure to support parametrisation
|
||||||
|
of X.509 path validation.
|
||||||
|
o Major overhaul of RC4 performance on Intel P4, IA-64 and
|
||||||
|
AMD64.
|
||||||
|
o Changed the Configure script to have some algorithms disabled
|
||||||
|
by default. Those can be explicitely enabled with the new
|
||||||
|
argument form 'enable-xxx'.
|
||||||
|
o Change the default digest in 'openssl' commands from MD5 to
|
||||||
|
SHA-1.
|
||||||
|
o Added support for DTLS.
|
||||||
|
o New BIGNUM blinding.
|
||||||
|
o Added support for the RSA-PSS encryption scheme
|
||||||
|
o Added support for the RSA X.931 padding.
|
||||||
|
o Added support for BSD sockets on NetWare.
|
||||||
|
o Added support for files larger than 2GB.
|
||||||
|
o Added initial support for Win64.
|
||||||
|
o Added alternate pkg-config files.
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.7l and OpenSSL 0.9.7m [23 Feb 2007]:
|
||||||
|
|
||||||
|
o FIPS 1.1.1 module linking.
|
||||||
|
o Various ciphersuite selection fixes.
|
||||||
|
|
||||||
|
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 Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j [4 May 2006]:
|
||||||
|
|
||||||
|
o Visual C++ 2005 fixes.
|
||||||
|
o Update Windows build system for FIPS.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
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 Allow use of fixed-length exponent on DSA signing
|
||||||
|
o Default fixed-window RSA, DSA, DH private-key operations
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g [11 Apr 2005]:
|
||||||
|
|
||||||
|
o More compilation issues fixed.
|
||||||
|
o Adaptation to more modern Kerberos API.
|
||||||
|
o Enhanced or corrected configuration for Solaris64, Mingw and Cygwin.
|
||||||
|
o Enhanced x86_64 assembler BIGNUM module.
|
||||||
|
o More constification.
|
||||||
|
o Added processing of proxy certificates (RFC 3820).
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f [22 Mar 2005]:
|
||||||
|
|
||||||
|
o Several compilation issues fixed.
|
||||||
|
o Many memory allocation failure checks added.
|
||||||
|
o Improved comparison of X509 Name type.
|
||||||
|
o Mandatory basic checks on certificates.
|
||||||
|
o Performance improvements.
|
||||||
|
|
||||||
|
Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e [25 Oct 2004]:
|
||||||
|
|
||||||
|
o Fix race condition in CRL checking code.
|
||||||
|
o Fixes to PKCS#7 (S/MIME) code.
|
||||||
|
|
||||||
|
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()
|
||||||
o Allow multiple active certificates with same subject in CA index
|
o Allow multiple active certificates with same subject in CA index
|
||||||
o Multiple X590 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
|
||||||
@@ -31,7 +430,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.
|
||||||
@@ -42,7 +441,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.
|
||||||
@@ -88,23 +487,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.
|
||||||
@@ -118,25 +517,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.
|
||||||
@@ -149,7 +548,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.
|
||||||
@@ -166,7 +565,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.
|
||||||
@@ -191,7 +590,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.
|
||||||
@@ -206,7 +605,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
|
||||||
@@ -215,7 +614,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
|
||||||
@@ -251,7 +650,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
|
||||||
@@ -262,7 +661,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
|
||||||
@@ -276,7 +675,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"
|
||||||
@@ -298,7 +697,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
|
||||||
|
|||||||
235
Netware/build.bat
Normal file
235
Netware/build.bat
Normal file
@@ -0,0 +1,235 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
rem ========================================================================
|
||||||
|
rem Batch file to automate building OpenSSL for NetWare.
|
||||||
|
rem
|
||||||
|
rem usage:
|
||||||
|
rem build [target] [debug opts] [assembly opts] [configure opts]
|
||||||
|
rem
|
||||||
|
rem target - "netware-clib" - CLib NetWare build (WinSock Sockets)
|
||||||
|
rem - "netware-clib-bsdsock" - CLib NetWare build (BSD Sockets)
|
||||||
|
rem - "netware-libc" - LibC NetWare build (WinSock Sockets)
|
||||||
|
rem - "netware-libc-bsdsock" - LibC NetWare build (BSD Sockets)
|
||||||
|
rem
|
||||||
|
rem debug opts - "debug" - build debug
|
||||||
|
rem
|
||||||
|
rem assembly opts - "nw-mwasm" - use Metrowerks assembler
|
||||||
|
rem - "nw-nasm" - use NASM assembler
|
||||||
|
rem - "no-asm" - don't use assembly
|
||||||
|
rem
|
||||||
|
rem configure opts- all unrecognized arguments are passed to the
|
||||||
|
rem perl configure script
|
||||||
|
rem
|
||||||
|
rem If no arguments are specified the default is to build non-debug with
|
||||||
|
rem no assembly. NOTE: there is no default BLD_TARGET.
|
||||||
|
rem
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
rem No assembly is the default - Uncomment section below to change
|
||||||
|
rem the assembler default
|
||||||
|
set ASM_MODE=
|
||||||
|
set ASSEMBLER=
|
||||||
|
set NO_ASM=no-asm
|
||||||
|
|
||||||
|
rem Uncomment to default to the Metrowerks assembler
|
||||||
|
rem set ASM_MODE=nw-mwasm
|
||||||
|
rem set ASSEMBLER=Metrowerks
|
||||||
|
rem set NO_ASM=
|
||||||
|
|
||||||
|
rem Uncomment to default to the NASM assembler
|
||||||
|
rem set ASM_MODE=nw-nasm
|
||||||
|
rem set ASSEMBLER=NASM
|
||||||
|
rem set NO_ASM=
|
||||||
|
|
||||||
|
rem No default Bld target
|
||||||
|
set BLD_TARGET=no_target
|
||||||
|
rem set BLD_TARGET=netware-clib
|
||||||
|
rem set BLD_TARGET=netware-libc
|
||||||
|
|
||||||
|
|
||||||
|
rem Default to build non-debug
|
||||||
|
set DEBUG=
|
||||||
|
|
||||||
|
rem Uncomment to default to debug build
|
||||||
|
rem set DEBUG=debug
|
||||||
|
|
||||||
|
|
||||||
|
set CONFIG_OPTS=
|
||||||
|
set ARG_PROCESSED=NO
|
||||||
|
|
||||||
|
|
||||||
|
rem Process command line args
|
||||||
|
:opts
|
||||||
|
if "a%1" == "a" goto endopt
|
||||||
|
if "%1" == "no-asm" set NO_ASM=no-asm
|
||||||
|
if "%1" == "no-asm" set ARG_PROCESSED=YES
|
||||||
|
if "%1" == "debug" set DEBUG=debug
|
||||||
|
if "%1" == "debug" set ARG_PROCESSED=YES
|
||||||
|
if "%1" == "nw-nasm" set ASM_MODE=nw-nasm
|
||||||
|
if "%1" == "nw-nasm" set ASSEMBLER=NASM
|
||||||
|
if "%1" == "nw-nasm" set NO_ASM=
|
||||||
|
if "%1" == "nw-nasm" set ARG_PROCESSED=YES
|
||||||
|
if "%1" == "nw-mwasm" set ASM_MODE=nw-mwasm
|
||||||
|
if "%1" == "nw-mwasm" set ASSEMBLER=Metrowerks
|
||||||
|
if "%1" == "nw-mwasm" set NO_ASM=
|
||||||
|
if "%1" == "nw-mwasm" set ARG_PROCESSED=YES
|
||||||
|
if "%1" == "netware-clib" set BLD_TARGET=netware-clib
|
||||||
|
if "%1" == "netware-clib" set ARG_PROCESSED=YES
|
||||||
|
if "%1" == "netware-clib-bsdsock" set BLD_TARGET=netware-clib-bsdsock
|
||||||
|
if "%1" == "netware-clib-bsdsock" set ARG_PROCESSED=YES
|
||||||
|
if "%1" == "netware-libc" set BLD_TARGET=netware-libc
|
||||||
|
if "%1" == "netware-libc" set ARG_PROCESSED=YES
|
||||||
|
if "%1" == "netware-libc-bsdsock" set BLD_TARGET=netware-libc-bsdsock
|
||||||
|
if "%1" == "netware-libc-bsdsock" set ARG_PROCESSED=YES
|
||||||
|
|
||||||
|
rem If we didn't recognize the argument, consider it an option for config
|
||||||
|
if "%ARG_PROCESSED%" == "NO" set CONFIG_OPTS=%CONFIG_OPTS% %1
|
||||||
|
if "%ARG_PROCESSED%" == "YES" set ARG_PROCESSED=NO
|
||||||
|
|
||||||
|
shift
|
||||||
|
goto opts
|
||||||
|
:endopt
|
||||||
|
|
||||||
|
rem make sure a valid BLD_TARGET was specified
|
||||||
|
if "%BLD_TARGET%" == "no_target" goto no_target
|
||||||
|
|
||||||
|
rem build the nlm make file name which includes target and debug info
|
||||||
|
set NLM_MAKE=
|
||||||
|
if "%BLD_TARGET%" == "netware-clib" set NLM_MAKE=netware\nlm_clib
|
||||||
|
if "%BLD_TARGET%" == "netware-clib-bsdsock" set NLM_MAKE=netware\nlm_clib_bsdsock
|
||||||
|
if "%BLD_TARGET%" == "netware-libc" set NLM_MAKE=netware\nlm_libc
|
||||||
|
if "%BLD_TARGET%" == "netware-libc-bsdsock" set NLM_MAKE=netware\nlm_libc_bsdsock
|
||||||
|
if "%DEBUG%" == "" set NLM_MAKE=%NLM_MAKE%.mak
|
||||||
|
if "%DEBUG%" == "debug" set NLM_MAKE=%NLM_MAKE%_dbg.mak
|
||||||
|
|
||||||
|
if "%NO_ASM%" == "no-asm" set ASM_MODE=
|
||||||
|
if "%NO_ASM%" == "no-asm" set ASSEMBLER=
|
||||||
|
if "%NO_ASM%" == "no-asm" set CONFIG_OPTS=%CONFIG_OPTS% no-asm
|
||||||
|
if "%NO_ASM%" == "no-asm" goto do_config
|
||||||
|
|
||||||
|
|
||||||
|
rem ==================================================
|
||||||
|
echo Generating x86 for %ASSEMBLER% assembler
|
||||||
|
|
||||||
|
echo Bignum
|
||||||
|
cd crypto\bn\asm
|
||||||
|
rem perl x86.pl %ASM_MODE% > bn-nw.asm
|
||||||
|
perl bn-586.pl %ASM_MODE% > bn-nw.asm
|
||||||
|
perl co-586.pl %ASM_MODE% > co-nw.asm
|
||||||
|
cd ..\..\..
|
||||||
|
|
||||||
|
echo AES
|
||||||
|
cd crypto\aes\asm
|
||||||
|
perl aes-586.pl %ASM_MODE% > a-nw.asm
|
||||||
|
cd ..\..\..
|
||||||
|
|
||||||
|
echo DES
|
||||||
|
cd crypto\des\asm
|
||||||
|
perl des-586.pl %ASM_MODE% > d-nw.asm
|
||||||
|
cd ..\..\..
|
||||||
|
|
||||||
|
echo "crypt(3)"
|
||||||
|
|
||||||
|
cd crypto\des\asm
|
||||||
|
perl crypt586.pl %ASM_MODE% > y-nw.asm
|
||||||
|
cd ..\..\..
|
||||||
|
|
||||||
|
echo Blowfish
|
||||||
|
|
||||||
|
cd crypto\bf\asm
|
||||||
|
perl bf-586.pl %ASM_MODE% > b-nw.asm
|
||||||
|
cd ..\..\..
|
||||||
|
|
||||||
|
echo CAST5
|
||||||
|
cd crypto\cast\asm
|
||||||
|
perl cast-586.pl %ASM_MODE% > c-nw.asm
|
||||||
|
cd ..\..\..
|
||||||
|
|
||||||
|
echo RC4
|
||||||
|
cd crypto\rc4\asm
|
||||||
|
perl rc4-586.pl %ASM_MODE% > r4-nw.asm
|
||||||
|
cd ..\..\..
|
||||||
|
|
||||||
|
echo MD5
|
||||||
|
cd crypto\md5\asm
|
||||||
|
perl md5-586.pl %ASM_MODE% > m5-nw.asm
|
||||||
|
cd ..\..\..
|
||||||
|
|
||||||
|
echo SHA1
|
||||||
|
cd crypto\sha\asm
|
||||||
|
perl sha1-586.pl %ASM_MODE% > s1-nw.asm
|
||||||
|
perl sha256-586.pl %ASM_MODE% > sha256-nw.asm
|
||||||
|
perl sha512-586.pl %ASM_MODE% > sha512-nw.asm
|
||||||
|
cd ..\..\..
|
||||||
|
|
||||||
|
echo RIPEMD160
|
||||||
|
cd crypto\ripemd\asm
|
||||||
|
perl rmd-586.pl %ASM_MODE% > rm-nw.asm
|
||||||
|
cd ..\..\..
|
||||||
|
|
||||||
|
echo RC5\32
|
||||||
|
cd crypto\rc5\asm
|
||||||
|
perl rc5-586.pl %ASM_MODE% > r5-nw.asm
|
||||||
|
cd ..\..\..
|
||||||
|
|
||||||
|
echo WHIRLPOOL
|
||||||
|
cd crypto\whrlpool\asm
|
||||||
|
perl wp-mmx.pl %ASM_MODE% > wp-nw.asm
|
||||||
|
cd ..\..\..
|
||||||
|
|
||||||
|
echo CPUID
|
||||||
|
cd crypto
|
||||||
|
perl x86cpuid.pl %ASM_MODE% > x86cpuid-nw.asm
|
||||||
|
cd ..\
|
||||||
|
|
||||||
|
rem ===============================================================
|
||||||
|
rem
|
||||||
|
:do_config
|
||||||
|
|
||||||
|
echo .
|
||||||
|
echo configure options: %CONFIG_OPTS% %BLD_TARGET%
|
||||||
|
echo .
|
||||||
|
perl configure %CONFIG_OPTS% %BLD_TARGET%
|
||||||
|
|
||||||
|
perl util\mkfiles.pl >MINFO
|
||||||
|
|
||||||
|
echo .
|
||||||
|
echo mk1mf.pl options: %DEBUG% %ASM_MODE% %CONFIG_OPTS% %BLD_TARGET%
|
||||||
|
echo .
|
||||||
|
perl util\mk1mf.pl %DEBUG% %ASM_MODE% %CONFIG_OPTS% %BLD_TARGET% >%NLM_MAKE%
|
||||||
|
|
||||||
|
make -f %NLM_MAKE% vclean
|
||||||
|
echo .
|
||||||
|
echo The makefile "%NLM_MAKE%" has been created use your maketool to
|
||||||
|
echo build (ex: make -f %NLM_MAKE%)
|
||||||
|
goto end
|
||||||
|
|
||||||
|
rem ===============================================================
|
||||||
|
rem
|
||||||
|
:no_target
|
||||||
|
echo .
|
||||||
|
echo . No build target specified!!!
|
||||||
|
echo .
|
||||||
|
echo . usage: build [target] [debug opts] [assembly opts] [configure opts]
|
||||||
|
echo .
|
||||||
|
echo . target - "netware-clib" - CLib NetWare build (WinSock Sockets)
|
||||||
|
echo . - "netware-clib-bsdsock" - CLib NetWare build (BSD Sockets)
|
||||||
|
echo . - "netware-libc" - LibC NetWare build (WinSock Sockets)
|
||||||
|
echo . - "netware-libc-bsdsock" - LibC NetWare build (BSD Sockets)
|
||||||
|
echo .
|
||||||
|
echo . debug opts - "debug" - build debug
|
||||||
|
echo .
|
||||||
|
echo . assembly opts - "nw-mwasm" - use Metrowerks assembler
|
||||||
|
echo . "nw-nasm" - use NASM assembler
|
||||||
|
echo . "no-asm" - don't use assembly
|
||||||
|
echo .
|
||||||
|
echo . configure opts- all unrecognized arguments are passed to the
|
||||||
|
echo . perl configure script
|
||||||
|
echo .
|
||||||
|
echo . If no debug or assembly opts are specified the default is to build
|
||||||
|
echo . non-debug without assembly
|
||||||
|
echo .
|
||||||
|
|
||||||
|
|
||||||
|
:end
|
||||||
113
Netware/cpy_tests.bat
Normal file
113
Netware/cpy_tests.bat
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
rem Batch file to copy OpenSSL stuff to a NetWare server for testing
|
||||||
|
|
||||||
|
rem This batch file will create an "opensssl" directory at the root of the
|
||||||
|
rem specified NetWare drive and copy the required files to run the tests.
|
||||||
|
rem It should be run from inside the "openssl\netware" subdirectory.
|
||||||
|
|
||||||
|
rem Usage:
|
||||||
|
rem cpy_tests.bat <test subdirectory> <NetWare drive>
|
||||||
|
rem <test subdirectory> - out_nw.dbg | out_nw
|
||||||
|
rem <NetWare drive> - any mapped drive letter
|
||||||
|
rem
|
||||||
|
rem example ( copy from debug build to m: dirve ):
|
||||||
|
rem cpy_tests.bat out_nw.dbg m:
|
||||||
|
rem
|
||||||
|
rem CAUTION: If a directory named OpenSSL exists on the target drive
|
||||||
|
rem it will be deleted first.
|
||||||
|
|
||||||
|
|
||||||
|
if "%1" == "" goto usage
|
||||||
|
if "%2" == "" goto usage
|
||||||
|
|
||||||
|
rem Assume running in \openssl directory unless cpy_tests.bat exists then
|
||||||
|
rem it must be the \openssl\netware directory
|
||||||
|
set loc=.
|
||||||
|
if exist cpy_tests.bat set loc=..
|
||||||
|
|
||||||
|
rem make sure the local build subdirectory specified is valid
|
||||||
|
if not exist %loc%\%1\NUL goto invalid_dir
|
||||||
|
|
||||||
|
rem make sure target drive is valid
|
||||||
|
if not exist %2\NUL goto invalid_drive
|
||||||
|
|
||||||
|
rem If an OpenSSL directory exists on the target drive, remove it
|
||||||
|
if exist %2\openssl\NUL goto remove_openssl
|
||||||
|
goto do_copy
|
||||||
|
|
||||||
|
:remove_openssl
|
||||||
|
echo .
|
||||||
|
echo OpenSSL directory exists on %2 - it will be removed!
|
||||||
|
pause
|
||||||
|
rmdir %2\openssl /s /q
|
||||||
|
|
||||||
|
:do_copy
|
||||||
|
rem make an "openssl" directory and others at the root of the NetWare drive
|
||||||
|
mkdir %2\openssl
|
||||||
|
mkdir %2\openssl\test_out
|
||||||
|
mkdir %2\openssl\apps
|
||||||
|
mkdir %2\openssl\certs
|
||||||
|
mkdir %2\openssl\test
|
||||||
|
|
||||||
|
|
||||||
|
rem copy the test nlms
|
||||||
|
copy %loc%\%1\*.nlm %2\openssl\
|
||||||
|
|
||||||
|
rem copy the test perl script
|
||||||
|
copy %loc%\netware\do_tests.pl %2\openssl\
|
||||||
|
|
||||||
|
rem copy the certs directory stuff
|
||||||
|
xcopy %loc%\certs\*.* %2\openssl\certs\ /s
|
||||||
|
|
||||||
|
rem copy the test directory stuff
|
||||||
|
copy %loc%\test\CAss.cnf %2\openssl\test\
|
||||||
|
copy %loc%\test\Uss.cnf %2\openssl\test\
|
||||||
|
copy %loc%\test\pkcs7.pem %2\openssl\test\
|
||||||
|
copy %loc%\test\pkcs7-1.pem %2\openssl\test\
|
||||||
|
copy %loc%\test\testcrl.pem %2\openssl\test\
|
||||||
|
copy %loc%\test\testp7.pem %2\openssl\test\
|
||||||
|
copy %loc%\test\testreq2.pem %2\openssl\test\
|
||||||
|
copy %loc%\test\testrsa.pem %2\openssl\test\
|
||||||
|
copy %loc%\test\testsid.pem %2\openssl\test\
|
||||||
|
copy %loc%\test\testx509.pem %2\openssl\test\
|
||||||
|
copy %loc%\test\v3-cert1.pem %2\openssl\test\
|
||||||
|
copy %loc%\test\v3-cert2.pem %2\openssl\test\
|
||||||
|
copy %loc%\crypto\evp\evptests.txt %2\openssl\test\
|
||||||
|
|
||||||
|
rem copy the apps directory stuff
|
||||||
|
copy %loc%\apps\client.pem %2\openssl\apps\
|
||||||
|
copy %loc%\apps\server.pem %2\openssl\apps\
|
||||||
|
copy %loc%\apps\openssl.cnf %2\openssl\apps\
|
||||||
|
|
||||||
|
echo .
|
||||||
|
echo Tests copied
|
||||||
|
echo Run the test script at the console by typing:
|
||||||
|
echo "Perl \openssl\do_tests.pl"
|
||||||
|
echo .
|
||||||
|
echo Make sure the Search path includes the OpenSSL subdirectory
|
||||||
|
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:invalid_dir
|
||||||
|
echo.
|
||||||
|
echo Invalid build directory specified: %1
|
||||||
|
echo.
|
||||||
|
goto usage
|
||||||
|
|
||||||
|
:invalid_drive
|
||||||
|
echo.
|
||||||
|
echo Invalid drive: %2
|
||||||
|
echo.
|
||||||
|
goto usage
|
||||||
|
|
||||||
|
:usage
|
||||||
|
echo.
|
||||||
|
echo usage: cpy_tests.bat [test subdirectory] [NetWare drive]
|
||||||
|
echo [test subdirectory] - out_nw_clib.dbg, out_nw_libc.dbg, etc.
|
||||||
|
echo [NetWare drive] - any mapped drive letter
|
||||||
|
echo.
|
||||||
|
echo example: cpy_test out_nw_clib.dbg M:
|
||||||
|
echo (copy from clib debug build area to M: drive)
|
||||||
|
|
||||||
|
:end
|
||||||
624
Netware/do_tests.pl
Normal file
624
Netware/do_tests.pl
Normal file
@@ -0,0 +1,624 @@
|
|||||||
|
# perl script to run OpenSSL tests
|
||||||
|
|
||||||
|
|
||||||
|
my $base_path = "\\openssl";
|
||||||
|
|
||||||
|
my $output_path = "$base_path\\test_out";
|
||||||
|
my $cert_path = "$base_path\\certs";
|
||||||
|
my $test_path = "$base_path\\test";
|
||||||
|
my $app_path = "$base_path\\apps";
|
||||||
|
|
||||||
|
my $tmp_cert = "$output_path\\cert.tmp";
|
||||||
|
my $OpenSSL_config = "$app_path\\openssl.cnf";
|
||||||
|
my $log_file = "$output_path\\tests.log";
|
||||||
|
|
||||||
|
my $pause = 0;
|
||||||
|
|
||||||
|
|
||||||
|
# process the command line args to see if they wanted us to pause
|
||||||
|
# between executing each command
|
||||||
|
foreach $i (@ARGV)
|
||||||
|
{
|
||||||
|
if ($i =~ /^-p$/)
|
||||||
|
{ $pause=1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
main();
|
||||||
|
|
||||||
|
|
||||||
|
############################################################################
|
||||||
|
sub main()
|
||||||
|
{
|
||||||
|
# delete all the output files in the output directory
|
||||||
|
unlink <$output_path\\*.*>;
|
||||||
|
|
||||||
|
# open the main log file
|
||||||
|
open(OUT, ">$log_file") || die "unable to open $log_file\n";
|
||||||
|
|
||||||
|
print( OUT "========================================================\n");
|
||||||
|
my $outFile = "$output_path\\version.out";
|
||||||
|
system("openssl2 version (CLIB_OPT)/>$outFile");
|
||||||
|
log_output("CHECKING FOR OPENSSL VERSION:", $outFile);
|
||||||
|
|
||||||
|
algorithm_tests();
|
||||||
|
encryption_tests();
|
||||||
|
evp_tests();
|
||||||
|
pem_tests();
|
||||||
|
verify_tests();
|
||||||
|
ca_tests();
|
||||||
|
ssl_tests();
|
||||||
|
|
||||||
|
close(OUT);
|
||||||
|
|
||||||
|
print("\nCompleted running tests.\n\n");
|
||||||
|
print("Check log file for errors: $log_file\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
############################################################################
|
||||||
|
sub algorithm_tests
|
||||||
|
{
|
||||||
|
my $i;
|
||||||
|
my $outFile;
|
||||||
|
my @tests = ( rsa_test, destest, ideatest, bftest, bntest, shatest, sha1test,
|
||||||
|
sha256t, sha512t, dsatest, md2test, md4test, md5test, mdc2test,
|
||||||
|
rc2test, rc4test, rc5test, randtest, rmdtest, dhtest, ecdhtest,
|
||||||
|
ecdsatest, ectest, exptest, casttest, hmactest );
|
||||||
|
|
||||||
|
print( "\nRUNNING CRYPTO ALGORITHM TESTS:\n\n");
|
||||||
|
|
||||||
|
print( OUT "\n========================================================\n");
|
||||||
|
print( OUT "CRYPTO ALGORITHM TESTS:\n\n");
|
||||||
|
|
||||||
|
foreach $i (@tests)
|
||||||
|
{
|
||||||
|
if (-e "$base_path\\$i.nlm")
|
||||||
|
{
|
||||||
|
$outFile = "$output_path\\$i.out";
|
||||||
|
system("$i (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Test: $i\.nlm:");
|
||||||
|
log_output("", $outFile );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
log_desc("Test: $i\.nlm: file not found");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
############################################################################
|
||||||
|
sub encryption_tests
|
||||||
|
{
|
||||||
|
my $i;
|
||||||
|
my $outFile;
|
||||||
|
my @enc_tests = ( "enc", "rc4", "des-cfb", "des-ede-cfb", "des-ede3-cfb",
|
||||||
|
"des-ofb", "des-ede-ofb", "des-ede3-ofb",
|
||||||
|
"des-ecb", "des-ede", "des-ede3", "des-cbc",
|
||||||
|
"des-ede-cbc", "des-ede3-cbc", "idea-ecb", "idea-cfb",
|
||||||
|
"idea-ofb", "idea-cbc", "rc2-ecb", "rc2-cfb",
|
||||||
|
"rc2-ofb", "rc2-cbc", "bf-ecb", "bf-cfb",
|
||||||
|
"bf-ofb", "bf-cbc" );
|
||||||
|
|
||||||
|
my $input = "$base_path\\do_tests.pl";
|
||||||
|
my $cipher = "$output_path\\cipher.out";
|
||||||
|
my $clear = "$output_path\\clear.out";
|
||||||
|
|
||||||
|
print( "\nRUNNING ENCRYPTION & DECRYPTION TESTS:\n\n");
|
||||||
|
|
||||||
|
print( OUT "\n========================================================\n");
|
||||||
|
print( OUT "FILE ENCRYPTION & DECRYPTION TESTS:\n\n");
|
||||||
|
|
||||||
|
foreach $i (@enc_tests)
|
||||||
|
{
|
||||||
|
log_desc("Testing: $i");
|
||||||
|
|
||||||
|
# do encryption
|
||||||
|
$outFile = "$output_path\\enc.out";
|
||||||
|
system("openssl2 $i -e -bufsize 113 -k test -in $input -out $cipher (CLIB_OPT)/>$outFile" );
|
||||||
|
log_output("Encrypting: $input --> $cipher", $outFile);
|
||||||
|
|
||||||
|
# do decryption
|
||||||
|
$outFile = "$output_path\\dec.out";
|
||||||
|
system("openssl2 $i -d -bufsize 157 -k test -in $cipher -out $clear (CLIB_OPT)/>$outFile");
|
||||||
|
log_output("Decrypting: $cipher --> $clear", $outFile);
|
||||||
|
|
||||||
|
# compare files
|
||||||
|
$x = compare_files( $input, $clear, 1);
|
||||||
|
if ( $x == 0 )
|
||||||
|
{
|
||||||
|
print( "\rSUCCESS - files match: $input, $clear\n");
|
||||||
|
print( OUT "SUCCESS - files match: $input, $clear\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print( "\rERROR: files don't match\n");
|
||||||
|
print( OUT "ERROR: files don't match\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
do_wait();
|
||||||
|
|
||||||
|
# Now do the same encryption but use Base64
|
||||||
|
|
||||||
|
# do encryption B64
|
||||||
|
$outFile = "$output_path\\B64enc.out";
|
||||||
|
system("openssl2 $i -a -e -bufsize 113 -k test -in $input -out $cipher (CLIB_OPT)/>$outFile");
|
||||||
|
log_output("Encrypting(B64): $cipher --> $clear", $outFile);
|
||||||
|
|
||||||
|
# do decryption B64
|
||||||
|
$outFile = "$output_path\\B64dec.out";
|
||||||
|
system("openssl2 $i -a -d -bufsize 157 -k test -in $cipher -out $clear (CLIB_OPT)/>$outFile");
|
||||||
|
log_output("Decrypting(B64): $cipher --> $clear", $outFile);
|
||||||
|
|
||||||
|
# compare files
|
||||||
|
$x = compare_files( $input, $clear, 1);
|
||||||
|
if ( $x == 0 )
|
||||||
|
{
|
||||||
|
print( "\rSUCCESS - files match: $input, $clear\n");
|
||||||
|
print( OUT "SUCCESS - files match: $input, $clear\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print( "\rERROR: files don't match\n");
|
||||||
|
print( OUT "ERROR: files don't match\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
do_wait();
|
||||||
|
|
||||||
|
} # end foreach
|
||||||
|
|
||||||
|
# delete the temporary files
|
||||||
|
unlink($cipher);
|
||||||
|
unlink($clear);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
############################################################################
|
||||||
|
sub pem_tests
|
||||||
|
{
|
||||||
|
my $i;
|
||||||
|
my $tmp_out;
|
||||||
|
my $outFile = "$output_path\\pem.out";
|
||||||
|
|
||||||
|
my %pem_tests = (
|
||||||
|
"crl" => "testcrl.pem",
|
||||||
|
"pkcs7" => "testp7.pem",
|
||||||
|
"req" => "testreq2.pem",
|
||||||
|
"rsa" => "testrsa.pem",
|
||||||
|
"x509" => "testx509.pem",
|
||||||
|
"x509" => "v3-cert1.pem",
|
||||||
|
"sess_id" => "testsid.pem" );
|
||||||
|
|
||||||
|
|
||||||
|
print( "\nRUNNING PEM TESTS:\n\n");
|
||||||
|
|
||||||
|
print( OUT "\n========================================================\n");
|
||||||
|
print( OUT "PEM TESTS:\n\n");
|
||||||
|
|
||||||
|
foreach $i (keys(%pem_tests))
|
||||||
|
{
|
||||||
|
log_desc( "Testing: $i");
|
||||||
|
|
||||||
|
my $input = "$test_path\\$pem_tests{$i}";
|
||||||
|
|
||||||
|
$tmp_out = "$output_path\\$pem_tests{$i}";
|
||||||
|
|
||||||
|
if ($i ne "req" )
|
||||||
|
{
|
||||||
|
system("openssl2 $i -in $input -out $tmp_out (CLIB_OPT)/>$outFile");
|
||||||
|
log_output( "openssl2 $i -in $input -out $tmp_out", $outFile);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
system("openssl2 $i -in $input -out $tmp_out -config $OpenSSL_config (CLIB_OPT)/>$outFile");
|
||||||
|
log_output( "openssl2 $i -in $input -out $tmp_out -config $OpenSSL_config", $outFile );
|
||||||
|
}
|
||||||
|
|
||||||
|
$x = compare_files( $input, $tmp_out);
|
||||||
|
if ( $x == 0 )
|
||||||
|
{
|
||||||
|
print( "\rSUCCESS - files match: $input, $tmp_out\n");
|
||||||
|
print( OUT "SUCCESS - files match: $input, $tmp_out\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print( "\rERROR: files don't match\n");
|
||||||
|
print( OUT "ERROR: files don't match\n");
|
||||||
|
}
|
||||||
|
do_wait();
|
||||||
|
|
||||||
|
} # end foreach
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
############################################################################
|
||||||
|
sub verify_tests
|
||||||
|
{
|
||||||
|
my $i;
|
||||||
|
my $outFile = "$output_path\\verify.out";
|
||||||
|
|
||||||
|
$cert_path =~ s/\\/\//g;
|
||||||
|
my @cert_files = <$cert_path/*.pem>;
|
||||||
|
|
||||||
|
print( "\nRUNNING VERIFY TESTS:\n\n");
|
||||||
|
|
||||||
|
print( OUT "\n========================================================\n");
|
||||||
|
print( OUT "VERIFY TESTS:\n\n");
|
||||||
|
|
||||||
|
make_tmp_cert_file();
|
||||||
|
|
||||||
|
foreach $i (@cert_files)
|
||||||
|
{
|
||||||
|
system("openssl2 verify -CAfile $tmp_cert $i (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Verifying cert: $i");
|
||||||
|
log_output("openssl2 verify -CAfile $tmp_cert $i", $outFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
############################################################################
|
||||||
|
sub ssl_tests
|
||||||
|
{
|
||||||
|
my $outFile = "$output_path\\ssl_tst.out";
|
||||||
|
my($CAcert) = "$output_path\\certCA.ss";
|
||||||
|
my($Ukey) = "$output_path\\keyU.ss";
|
||||||
|
my($Ucert) = "$output_path\\certU.ss";
|
||||||
|
my($ssltest)= "ssltest -key $Ukey -cert $Ucert -c_key $Ukey -c_cert $Ucert -CAfile $CAcert";
|
||||||
|
|
||||||
|
print( "\nRUNNING SSL TESTS:\n\n");
|
||||||
|
|
||||||
|
print( OUT "\n========================================================\n");
|
||||||
|
print( OUT "SSL TESTS:\n\n");
|
||||||
|
|
||||||
|
system("ssltest -ssl2 (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2:");
|
||||||
|
log_output("ssltest -ssl2", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -ssl2 -server_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2 with server authentication:");
|
||||||
|
log_output("$ssltest -ssl2 -server_auth", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -ssl2 -client_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2 with client authentication:");
|
||||||
|
log_output("$ssltest -ssl2 -client_auth", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -ssl2 -server_auth -client_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2 with both client and server authentication:");
|
||||||
|
log_output("$ssltest -ssl2 -server_auth -client_auth", $outFile);
|
||||||
|
|
||||||
|
system("ssltest -ssl3 (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv3:");
|
||||||
|
log_output("ssltest -ssl3", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -ssl3 -server_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv3 with server authentication:");
|
||||||
|
log_output("$ssltest -ssl3 -server_auth", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -ssl3 -client_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv3 with client authentication:");
|
||||||
|
log_output("$ssltest -ssl3 -client_auth", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -ssl3 -server_auth -client_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv3 with both client and server authentication:");
|
||||||
|
log_output("$ssltest -ssl3 -server_auth -client_auth", $outFile);
|
||||||
|
|
||||||
|
system("ssltest (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2/sslv3:");
|
||||||
|
log_output("ssltest", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -server_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2/sslv3 with server authentication:");
|
||||||
|
log_output("$ssltest -server_auth", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -client_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2/sslv3 with client authentication:");
|
||||||
|
log_output("$ssltest -client_auth ", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -server_auth -client_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2/sslv3 with both client and server authentication:");
|
||||||
|
log_output("$ssltest -server_auth -client_auth", $outFile);
|
||||||
|
|
||||||
|
system("ssltest -bio_pair -ssl2 (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2 via BIO pair:");
|
||||||
|
log_output("ssltest -bio_pair -ssl2", $outFile);
|
||||||
|
|
||||||
|
system("ssltest -bio_pair -dhe1024dsa -v (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2/sslv3 with 1024 bit DHE via BIO pair:");
|
||||||
|
log_output("ssltest -bio_pair -dhe1024dsa -v", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -bio_pair -ssl2 -server_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2 with server authentication via BIO pair:");
|
||||||
|
log_output("$ssltest -bio_pair -ssl2 -server_auth", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -bio_pair -ssl2 -client_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2 with client authentication via BIO pair:");
|
||||||
|
log_output("$ssltest -bio_pair -ssl2 -client_auth", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -bio_pair -ssl2 -server_auth -client_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2 with both client and server authentication via BIO pair:");
|
||||||
|
log_output("$ssltest -bio_pair -ssl2 -server_auth -client_auth", $outFile);
|
||||||
|
|
||||||
|
system("ssltest -bio_pair -ssl3 (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv3 via BIO pair:");
|
||||||
|
log_output("ssltest -bio_pair -ssl3", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -bio_pair -ssl3 -server_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv3 with server authentication via BIO pair:");
|
||||||
|
log_output("$ssltest -bio_pair -ssl3 -server_auth", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -bio_pair -ssl3 -client_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv3 with client authentication via BIO pair:");
|
||||||
|
log_output("$ssltest -bio_pair -ssl3 -client_auth", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -bio_pair -ssl3 -server_auth -client_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv3 with both client and server authentication via BIO pair:");
|
||||||
|
log_output("$ssltest -bio_pair -ssl3 -server_auth -client_auth", $outFile);
|
||||||
|
|
||||||
|
system("ssltest -bio_pair (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2/sslv3 via BIO pair:");
|
||||||
|
log_output("ssltest -bio_pair", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -bio_pair -server_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2/sslv3 with server authentication via BIO pair:");
|
||||||
|
log_output("$ssltest -bio_pair -server_auth", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -bio_pair -client_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2/sslv3 with client authentication via BIO pair:");
|
||||||
|
log_output("$ssltest -bio_pair -client_auth", $outFile);
|
||||||
|
|
||||||
|
system("$ssltest -bio_pair -server_auth -client_auth (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Testing sslv2/sslv3 with both client and server authentication via BIO pair:");
|
||||||
|
log_output("$ssltest -bio_pair -server_auth -client_auth", $outFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
############################################################################
|
||||||
|
sub ca_tests
|
||||||
|
{
|
||||||
|
my $outFile = "$output_path\\ca_tst.out";
|
||||||
|
|
||||||
|
my($CAkey) = "$output_path\\keyCA.ss";
|
||||||
|
my($CAcert) = "$output_path\\certCA.ss";
|
||||||
|
my($CAserial) = "$output_path\\certCA.srl";
|
||||||
|
my($CAreq) = "$output_path\\reqCA.ss";
|
||||||
|
my($CAreq2) = "$output_path\\req2CA.ss";
|
||||||
|
|
||||||
|
my($CAconf) = "$test_path\\CAss.cnf";
|
||||||
|
|
||||||
|
my($Uconf) = "$test_path\\Uss.cnf";
|
||||||
|
|
||||||
|
my($Ukey) = "$output_path\\keyU.ss";
|
||||||
|
my($Ureq) = "$output_path\\reqU.ss";
|
||||||
|
my($Ucert) = "$output_path\\certU.ss";
|
||||||
|
|
||||||
|
print( "\nRUNNING CA TESTS:\n\n");
|
||||||
|
|
||||||
|
print( OUT "\n========================================================\n");
|
||||||
|
print( OUT "CA TESTS:\n");
|
||||||
|
|
||||||
|
system("openssl2 req -config $CAconf -out $CAreq -keyout $CAkey -new (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Make a certificate request using req:");
|
||||||
|
log_output("openssl2 req -config $CAconf -out $CAreq -keyout $CAkey -new", $outFile);
|
||||||
|
|
||||||
|
system("openssl2 x509 -CAcreateserial -in $CAreq -days 30 -req -out $CAcert -signkey $CAkey (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Convert the certificate request into a self signed certificate using x509:");
|
||||||
|
log_output("openssl2 x509 -CAcreateserial -in $CAreq -days 30 -req -out $CAcert -signkey $CAkey", $outFile);
|
||||||
|
|
||||||
|
system("openssl2 x509 -in $CAcert -x509toreq -signkey $CAkey -out $CAreq2 (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Convert a certificate into a certificate request using 'x509':");
|
||||||
|
log_output("openssl2 x509 -in $CAcert -x509toreq -signkey $CAkey -out $CAreq2", $outFile);
|
||||||
|
|
||||||
|
system("openssl2 req -config $OpenSSL_config -verify -in $CAreq -noout (CLIB_OPT)/>$outFile");
|
||||||
|
log_output("openssl2 req -config $OpenSSL_config -verify -in $CAreq -noout", $outFile);
|
||||||
|
|
||||||
|
system("openssl2 req -config $OpenSSL_config -verify -in $CAreq2 -noout (CLIB_OPT)/>$outFile");
|
||||||
|
log_output( "openssl2 req -config $OpenSSL_config -verify -in $CAreq2 -noout", $outFile);
|
||||||
|
|
||||||
|
system("openssl2 verify -CAfile $CAcert $CAcert (CLIB_OPT)/>$outFile");
|
||||||
|
log_output("openssl2 verify -CAfile $CAcert $CAcert", $outFile);
|
||||||
|
|
||||||
|
system("openssl2 req -config $Uconf -out $Ureq -keyout $Ukey -new (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Make another certificate request using req:");
|
||||||
|
log_output("openssl2 req -config $Uconf -out $Ureq -keyout $Ukey -new", $outFile);
|
||||||
|
|
||||||
|
system("openssl2 x509 -CAcreateserial -in $Ureq -days 30 -req -out $Ucert -CA $CAcert -CAkey $CAkey -CAserial $CAserial (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Sign certificate request with the just created CA via x509:");
|
||||||
|
log_output("openssl2 x509 -CAcreateserial -in $Ureq -days 30 -req -out $Ucert -CA $CAcert -CAkey $CAkey -CAserial $CAserial", $outFile);
|
||||||
|
|
||||||
|
system("openssl2 verify -CAfile $CAcert $Ucert (CLIB_OPT)/>$outFile");
|
||||||
|
log_output("openssl2 verify -CAfile $CAcert $Ucert", $outFile);
|
||||||
|
|
||||||
|
system("openssl2 x509 -subject -issuer -startdate -enddate -noout -in $Ucert (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Certificate details");
|
||||||
|
log_output("openssl2 x509 -subject -issuer -startdate -enddate -noout -in $Ucert", $outFile);
|
||||||
|
|
||||||
|
print(OUT "--\n");
|
||||||
|
print(OUT "The generated CA certificate is $CAcert\n");
|
||||||
|
print(OUT "The generated CA private key is $CAkey\n");
|
||||||
|
print(OUT "The current CA signing serial number is in $CAserial\n");
|
||||||
|
|
||||||
|
print(OUT "The generated user certificate is $Ucert\n");
|
||||||
|
print(OUT "The generated user private key is $Ukey\n");
|
||||||
|
print(OUT "--\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
############################################################################
|
||||||
|
sub evp_tests
|
||||||
|
{
|
||||||
|
my $i = 'evp_test';
|
||||||
|
|
||||||
|
print( "\nRUNNING EVP TESTS:\n\n");
|
||||||
|
|
||||||
|
print( OUT "\n========================================================\n");
|
||||||
|
print( OUT "EVP TESTS:\n\n");
|
||||||
|
|
||||||
|
if (-e "$base_path\\$i.nlm")
|
||||||
|
{
|
||||||
|
my $outFile = "$output_path\\$i.out";
|
||||||
|
system("$i $test_path\\evptests.txt (CLIB_OPT)/>$outFile");
|
||||||
|
log_desc("Test: $i\.nlm:");
|
||||||
|
log_output("", $outFile );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
log_desc("Test: $i\.nlm: file not found");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
############################################################################
|
||||||
|
sub log_output( $ $ )
|
||||||
|
{
|
||||||
|
my( $desc, $file ) = @_;
|
||||||
|
my($error) = 0;
|
||||||
|
my($key);
|
||||||
|
my($msg);
|
||||||
|
|
||||||
|
if ($desc)
|
||||||
|
{
|
||||||
|
print("\r$desc\n");
|
||||||
|
print(OUT "$desc\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
# loop waiting for test program to complete
|
||||||
|
while ( stat($file) == 0)
|
||||||
|
{ print(". "); sleep(1); }
|
||||||
|
|
||||||
|
|
||||||
|
# copy test output to log file
|
||||||
|
open(IN, "<$file");
|
||||||
|
while (<IN>)
|
||||||
|
{
|
||||||
|
print(OUT $_);
|
||||||
|
if ( $_ =~ /ERROR/ )
|
||||||
|
{
|
||||||
|
$error = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# close and delete the temporary test output file
|
||||||
|
close(IN);
|
||||||
|
unlink($file);
|
||||||
|
|
||||||
|
if ( $error == 0 )
|
||||||
|
{
|
||||||
|
$msg = "Test Succeeded";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$msg = "Test Failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
print(OUT "$msg\n");
|
||||||
|
|
||||||
|
if ($pause)
|
||||||
|
{
|
||||||
|
print("$msg - press ENTER to continue...");
|
||||||
|
$key = getc;
|
||||||
|
print("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
# Several of the testing scripts run a loop loading the
|
||||||
|
# same NLM with different options.
|
||||||
|
# On slow NetWare machines there appears to be some delay in the
|
||||||
|
# OS actually unloading the test nlms and the OS complains about.
|
||||||
|
# the NLM already being loaded. This additional pause is to
|
||||||
|
# to help provide a little more time for unloading before trying to
|
||||||
|
# load again.
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
############################################################################
|
||||||
|
sub log_desc( $ )
|
||||||
|
{
|
||||||
|
my( $desc ) = @_;
|
||||||
|
|
||||||
|
print("\n");
|
||||||
|
print("$desc\n");
|
||||||
|
|
||||||
|
print(OUT "\n");
|
||||||
|
print(OUT "$desc\n");
|
||||||
|
print(OUT "======================================\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
############################################################################
|
||||||
|
sub compare_files( $ $ $ )
|
||||||
|
{
|
||||||
|
my( $file1, $file2, $binary ) = @_;
|
||||||
|
my( $n1, $n2, $b1, $b2 );
|
||||||
|
my($ret) = 1;
|
||||||
|
|
||||||
|
open(IN0, $file1) || die "\nunable to open $file1\n";
|
||||||
|
open(IN1, $file2) || die "\nunable to open $file2\n";
|
||||||
|
|
||||||
|
if ($binary)
|
||||||
|
{
|
||||||
|
binmode IN0;
|
||||||
|
binmode IN1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
$n1 = read(IN0, $b1, 512);
|
||||||
|
$n2 = read(IN1, $b2, 512);
|
||||||
|
|
||||||
|
if ($n1 != $n2) {last;}
|
||||||
|
if ($b1 != $b2) {last;}
|
||||||
|
|
||||||
|
if ($n1 == 0)
|
||||||
|
{
|
||||||
|
$ret = 0;
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close(IN0);
|
||||||
|
close(IN1);
|
||||||
|
return($ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
############################################################################
|
||||||
|
sub do_wait()
|
||||||
|
{
|
||||||
|
my($key);
|
||||||
|
|
||||||
|
if ($pause)
|
||||||
|
{
|
||||||
|
print("Press ENTER to continue...");
|
||||||
|
$key = getc;
|
||||||
|
print("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
############################################################################
|
||||||
|
sub make_tmp_cert_file()
|
||||||
|
{
|
||||||
|
my @cert_files = <$cert_path/*.pem>;
|
||||||
|
|
||||||
|
# delete the file if it already exists
|
||||||
|
unlink($tmp_cert);
|
||||||
|
|
||||||
|
open( TMP_CERT, ">$tmp_cert") || die "\nunable to open $tmp_cert\n";
|
||||||
|
|
||||||
|
print("building temporary cert file\n");
|
||||||
|
|
||||||
|
# create a temporary cert file that contains all the certs
|
||||||
|
foreach $i (@cert_files)
|
||||||
|
{
|
||||||
|
open( IN_CERT, $i ) || die "\nunable to open $i\n";
|
||||||
|
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
$n = sysread(IN_CERT, $data, 1024);
|
||||||
|
|
||||||
|
if ($n == 0)
|
||||||
|
{
|
||||||
|
close(IN_CERT);
|
||||||
|
last;
|
||||||
|
};
|
||||||
|
|
||||||
|
syswrite(TMP_CERT, $data, $n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
close( TMP_CERT );
|
||||||
|
}
|
||||||
254
Netware/globals.txt
Normal file
254
Netware/globals.txt
Normal file
@@ -0,0 +1,254 @@
|
|||||||
|
An initial review of the OpenSSL code was done to determine how many
|
||||||
|
global variables where present. The idea was to determine the amount of
|
||||||
|
work required to pull the globals into an instance data structure in
|
||||||
|
order to build a Library NLM for NetWare. This file contains the results
|
||||||
|
of the review. Each file is listed along with the globals in the file.
|
||||||
|
The initial review was done very quickly so this list is probably
|
||||||
|
not a comprehensive list.
|
||||||
|
|
||||||
|
|
||||||
|
cryptlib.c
|
||||||
|
===========================================
|
||||||
|
|
||||||
|
static STACK *app_locks=NULL;
|
||||||
|
|
||||||
|
static STACK_OF(CRYPTO_dynlock) *dyn_locks=NULL;
|
||||||
|
|
||||||
|
static void (MS_FAR *locking_callback)(int mode,int type,
|
||||||
|
const char *file,int line)=NULL;
|
||||||
|
static int (MS_FAR *add_lock_callback)(int *pointer,int amount,
|
||||||
|
int type,const char *file,int line)=NULL;
|
||||||
|
static unsigned long (MS_FAR *id_callback)(void)=NULL;
|
||||||
|
static struct CRYPTO_dynlock_value *(MS_FAR *dynlock_create_callback)
|
||||||
|
(const char *file,int line)=NULL;
|
||||||
|
static void (MS_FAR *dynlock_lock_callback)(int mode,
|
||||||
|
struct CRYPTO_dynlock_value *l, const char *file,int line)=NULL;
|
||||||
|
static void (MS_FAR *dynlock_destroy_callback)(struct CRYPTO_dynlock_value *l,
|
||||||
|
const char *file,int line)=NULL;
|
||||||
|
|
||||||
|
|
||||||
|
mem.c
|
||||||
|
===========================================
|
||||||
|
static int allow_customize = 1; /* we provide flexible functions for */
|
||||||
|
static int allow_customize_debug = 1;/* exchanging memory-related functions at
|
||||||
|
|
||||||
|
/* may be changed as long as `allow_customize' is set */
|
||||||
|
static void *(*malloc_locked_func)(size_t) = malloc;
|
||||||
|
static void (*free_locked_func)(void *) = free;
|
||||||
|
static void *(*malloc_func)(size_t) = malloc;
|
||||||
|
static void *(*realloc_func)(void *, size_t)= realloc;
|
||||||
|
static void (*free_func)(void *) = free;
|
||||||
|
|
||||||
|
/* use default functions from mem_dbg.c */
|
||||||
|
static void (*malloc_debug_func)(void *,int,const char *,int,int)
|
||||||
|
= CRYPTO_dbg_malloc;
|
||||||
|
static void (*realloc_debug_func)(void *,void *,int,const char *,int,int)
|
||||||
|
= CRYPTO_dbg_realloc;
|
||||||
|
static void (*free_debug_func)(void *,int) = CRYPTO_dbg_free;
|
||||||
|
static void (*set_debug_options_func)(long) = CRYPTO_dbg_set_options;
|
||||||
|
static long (*get_debug_options_func)(void) = CRYPTO_dbg_get_options;
|
||||||
|
|
||||||
|
|
||||||
|
mem_dbg.c
|
||||||
|
===========================================
|
||||||
|
static int mh_mode=CRYPTO_MEM_CHECK_OFF;
|
||||||
|
static unsigned long order = 0; /* number of memory requests */
|
||||||
|
static LHASH *mh=NULL; /* hash-table of memory requests (address as key) */
|
||||||
|
|
||||||
|
static LHASH *amih=NULL; /* hash-table with those app_mem_info_st's */
|
||||||
|
static long options = /* extra information to be recorded */
|
||||||
|
static unsigned long disabling_thread = 0;
|
||||||
|
|
||||||
|
|
||||||
|
err.c
|
||||||
|
===========================================
|
||||||
|
static LHASH *error_hash=NULL;
|
||||||
|
static LHASH *thread_hash=NULL;
|
||||||
|
|
||||||
|
several files have routines with static "init" to track if error strings
|
||||||
|
have been loaded ( may not want seperate error strings for each process )
|
||||||
|
The "init" variable can't be left "global" because the error has is a ptr
|
||||||
|
that is malloc'ed. The malloc'ed error has is dependant on the "init"
|
||||||
|
vars.
|
||||||
|
|
||||||
|
files:
|
||||||
|
pem_err.c
|
||||||
|
cpt_err.c
|
||||||
|
pk12err.c
|
||||||
|
asn1_err.c
|
||||||
|
bio_err.c
|
||||||
|
bn_err.c
|
||||||
|
buf_err.c
|
||||||
|
comp_err.c
|
||||||
|
conf_err.c
|
||||||
|
cpt_err.c
|
||||||
|
dh_err.c
|
||||||
|
dsa_err.c
|
||||||
|
dso_err.c
|
||||||
|
evp_err.c
|
||||||
|
obj_err.c
|
||||||
|
pkcs7err.c
|
||||||
|
rand_err.c
|
||||||
|
rsa_err.c
|
||||||
|
rsar_err.c
|
||||||
|
ssl_err.c
|
||||||
|
x509_err.c
|
||||||
|
v3err.c
|
||||||
|
err.c
|
||||||
|
|
||||||
|
These file have similar "init" globals but they are for other stuff not
|
||||||
|
error strings:
|
||||||
|
|
||||||
|
bn_lib.c
|
||||||
|
ecc_enc.c
|
||||||
|
s23_clnt.c
|
||||||
|
s23_meth.c
|
||||||
|
s23_srvr.c
|
||||||
|
s2_clnt.c
|
||||||
|
s2_lib.c
|
||||||
|
s2_meth.c
|
||||||
|
s2_srvr.c
|
||||||
|
s3_clnt.c
|
||||||
|
s3_lib.c
|
||||||
|
s3_srvr.c
|
||||||
|
t1_clnt.c
|
||||||
|
t1_meth.c
|
||||||
|
t1_srvr.c
|
||||||
|
|
||||||
|
rand_lib.c
|
||||||
|
===========================================
|
||||||
|
static RAND_METHOD *rand_meth= &rand_ssleay_meth;
|
||||||
|
|
||||||
|
md_rand.c
|
||||||
|
===========================================
|
||||||
|
static int state_num=0,state_index=0;
|
||||||
|
static unsigned char state[STATE_SIZE+MD_DIGEST_LENGTH];
|
||||||
|
static unsigned char md[MD_DIGEST_LENGTH];
|
||||||
|
static long md_count[2]={0,0};
|
||||||
|
static double entropy=0;
|
||||||
|
static int initialized=0;
|
||||||
|
|
||||||
|
/* This should be set to 1 only when ssleay_rand_add() is called inside
|
||||||
|
an already locked state, so it doesn't try to lock and thereby cause
|
||||||
|
a hang. And it should always be reset back to 0 before unlocking. */
|
||||||
|
static int add_do_not_lock=0;
|
||||||
|
|
||||||
|
obj_dat.c
|
||||||
|
============================================
|
||||||
|
static int new_nid=NUM_NID;
|
||||||
|
static LHASH *added=NULL;
|
||||||
|
|
||||||
|
b_sock.c
|
||||||
|
===========================================
|
||||||
|
static unsigned long BIO_ghbn_hits=0L;
|
||||||
|
static unsigned long BIO_ghbn_miss=0L;
|
||||||
|
static struct ghbn_cache_st
|
||||||
|
{
|
||||||
|
char name[129];
|
||||||
|
struct hostent *ent;
|
||||||
|
unsigned long order;
|
||||||
|
} ghbn_cache[GHBN_NUM];
|
||||||
|
|
||||||
|
static int wsa_init_done=0;
|
||||||
|
|
||||||
|
|
||||||
|
bio_lib.c
|
||||||
|
===========================================
|
||||||
|
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *bio_meth=NULL;
|
||||||
|
static int bio_meth_num=0;
|
||||||
|
|
||||||
|
|
||||||
|
bn_lib.c
|
||||||
|
========================================
|
||||||
|
static int bn_limit_bits=0;
|
||||||
|
static int bn_limit_num=8; /* (1<<bn_limit_bits) */
|
||||||
|
static int bn_limit_bits_low=0;
|
||||||
|
static int bn_limit_num_low=8; /* (1<<bn_limit_bits_low) */
|
||||||
|
static int bn_limit_bits_high=0;
|
||||||
|
static int bn_limit_num_high=8; /* (1<<bn_limit_bits_high) */
|
||||||
|
static int bn_limit_bits_mont=0;
|
||||||
|
static int bn_limit_num_mont=8; /* (1<<bn_limit_bits_mont) */
|
||||||
|
|
||||||
|
conf_lib.c
|
||||||
|
========================================
|
||||||
|
static CONF_METHOD *default_CONF_method=NULL;
|
||||||
|
|
||||||
|
dh_lib.c
|
||||||
|
========================================
|
||||||
|
static DH_METHOD *default_DH_method;
|
||||||
|
static int dh_meth_num = 0;
|
||||||
|
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dh_meth = NULL;
|
||||||
|
|
||||||
|
dsa_lib.c
|
||||||
|
========================================
|
||||||
|
static DSA_METHOD *default_DSA_method;
|
||||||
|
static int dsa_meth_num = 0;
|
||||||
|
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dsa_meth = NULL;
|
||||||
|
|
||||||
|
dso_lib.c
|
||||||
|
========================================
|
||||||
|
static DSO_METHOD *default_DSO_meth = NULL;
|
||||||
|
|
||||||
|
rsa_lib.c
|
||||||
|
========================================
|
||||||
|
static RSA_METHOD *default_RSA_meth=NULL;
|
||||||
|
static int rsa_meth_num=0;
|
||||||
|
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *rsa_meth=NULL;
|
||||||
|
|
||||||
|
x509_trs.c
|
||||||
|
=======================================
|
||||||
|
static int (*default_trust)(int id, X509 *x, int flags) = obj_trust;
|
||||||
|
static STACK_OF(X509_TRUST) *trtable = NULL;
|
||||||
|
|
||||||
|
x509_req.c
|
||||||
|
=======================================
|
||||||
|
static int *ext_nids = ext_nid_list;
|
||||||
|
|
||||||
|
o_names.c
|
||||||
|
======================================
|
||||||
|
static LHASH *names_lh=NULL;
|
||||||
|
static STACK_OF(NAME_FUNCS) *name_funcs_stack;
|
||||||
|
static int free_type;
|
||||||
|
static int names_type_num=OBJ_NAME_TYPE_NUM;
|
||||||
|
|
||||||
|
|
||||||
|
th-lock.c - NEED to add support for locking for NetWare
|
||||||
|
==============================================
|
||||||
|
static long *lock_count;
|
||||||
|
(other platform specific globals)
|
||||||
|
|
||||||
|
x_x509.c
|
||||||
|
==============================================
|
||||||
|
static int x509_meth_num = 0;
|
||||||
|
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *x509_meth = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
evp_pbe.c
|
||||||
|
============================================
|
||||||
|
static STACK *pbe_algs;
|
||||||
|
|
||||||
|
evp_key.c
|
||||||
|
============================================
|
||||||
|
static char prompt_string[80];
|
||||||
|
|
||||||
|
ssl_ciph.c
|
||||||
|
============================================
|
||||||
|
static STACK_OF(SSL_COMP) *ssl_comp_methods=NULL;
|
||||||
|
|
||||||
|
ssl_lib.c
|
||||||
|
=============================================
|
||||||
|
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *ssl_meth=NULL;
|
||||||
|
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *ssl_ctx_meth=NULL;
|
||||||
|
static int ssl_meth_num=0;
|
||||||
|
static int ssl_ctx_meth_num=0;
|
||||||
|
|
||||||
|
ssl_sess.c
|
||||||
|
=============================================
|
||||||
|
static int ssl_session_num=0;
|
||||||
|
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *ssl_session_meth=NULL;
|
||||||
|
|
||||||
|
x509_vfy.c
|
||||||
|
============================================
|
||||||
|
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *x509_store_ctx_method=NULL;
|
||||||
|
static int x509_store_ctx_num=0;
|
||||||
|
|
||||||
19
Netware/readme.txt
Normal file
19
Netware/readme.txt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
Contents of the openssl\netware directory
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Regular files:
|
||||||
|
|
||||||
|
readme.txt - this file
|
||||||
|
do_tests.pl - perl script used to run the OpenSSL tests on NetWare
|
||||||
|
cpy_tests.bat - batch to to copy test stuff to NetWare server
|
||||||
|
build.bat - batch file to help with builds
|
||||||
|
set_env.bat - batch file to help setup build environments
|
||||||
|
globals.txt - results of initial code review to identify OpenSSL global variables
|
||||||
|
|
||||||
|
|
||||||
|
The following files are generated by the various scripts. They are
|
||||||
|
recreated each time and it is okay to delete them.
|
||||||
|
|
||||||
|
*.def - command files used by Metrowerks linker
|
||||||
|
*.mak - make files generated by mk1mf.pl
|
||||||
112
Netware/set_env.bat
Normal file
112
Netware/set_env.bat
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
rem ========================================================================
|
||||||
|
rem Batch file to assist in setting up the necessary enviroment for
|
||||||
|
rem building OpenSSL for NetWare.
|
||||||
|
rem
|
||||||
|
rem usage:
|
||||||
|
rem set_env [target]
|
||||||
|
rem
|
||||||
|
rem target - "netware-clib" - Clib build
|
||||||
|
rem - "netware-libc" - LibC build
|
||||||
|
rem
|
||||||
|
rem
|
||||||
|
|
||||||
|
if "a%1" == "a" goto usage
|
||||||
|
|
||||||
|
set LIBC_BUILD=
|
||||||
|
set CLIB_BUILD=
|
||||||
|
set GNUC=
|
||||||
|
|
||||||
|
if "%1" == "netware-clib" set CLIB_BUILD=Y
|
||||||
|
if "%1" == "netware-clib" set LIBC_BUILD=
|
||||||
|
|
||||||
|
if "%1" == "netware-libc" set LIBC_BUILD=Y
|
||||||
|
if "%1" == "netware-libc" set CLIB_BUILD=
|
||||||
|
|
||||||
|
if "%2" == "gnuc" set GNUC=Y
|
||||||
|
if "%2" == "codewarrior" set GNUC=
|
||||||
|
|
||||||
|
rem Location of tools (compiler, linker, etc)
|
||||||
|
if "%NDKBASE%" == "" set NDKBASE=c:\Novell
|
||||||
|
|
||||||
|
rem If Perl for Win32 is not already in your path, add it here
|
||||||
|
set PERL_PATH=
|
||||||
|
|
||||||
|
rem Define path to the Metrowerks command line tools
|
||||||
|
rem or GNU Crosscompiler gcc / nlmconv
|
||||||
|
rem ( compiler, assembler, linker)
|
||||||
|
if "%GNUC%" == "Y" set COMPILER_PATH=c:\usr\i586-netware\bin;c:\usr\bin
|
||||||
|
if "%GNUC%" == "" set COMPILER_PATH=c:\prg\cwcmdl40
|
||||||
|
|
||||||
|
rem If using gnu make define path to utility
|
||||||
|
rem set GNU_MAKE_PATH=%NDKBASE%\gnu
|
||||||
|
set GNU_MAKE_PATH=c:\prg\tools
|
||||||
|
|
||||||
|
rem If using ms nmake define path to nmake
|
||||||
|
rem set MS_NMAKE_PATH=%NDKBASE%\msvc\600\bin
|
||||||
|
|
||||||
|
rem If using NASM assembler define path
|
||||||
|
rem set NASM_PATH=%NDKBASE%\nasm
|
||||||
|
set NASM_PATH=c:\prg\tools
|
||||||
|
|
||||||
|
rem Update path to include tool paths
|
||||||
|
set path=%path%;%COMPILER_PATH%
|
||||||
|
if not "%GNU_MAKE_PATH%" == "" set path=%path%;%GNU_MAKE_PATH%
|
||||||
|
if not "%MS_NMAKE_PATH%" == "" set path=%path%;%MS_NMAKE_PATH%
|
||||||
|
if not "%NASM_PATH%" == "" set path=%path%;%NASM_PATH%
|
||||||
|
if not "%PERL_PATH%" == "" set path=%path%;%PERL_PATH%
|
||||||
|
|
||||||
|
rem Set INCLUDES to location of Novell NDK includes
|
||||||
|
if "%LIBC_BUILD%" == "Y" set INCLUDE=%NDKBASE%\ndk\libc\include;%NDKBASE%\ndk\libc\include\winsock
|
||||||
|
if "%CLIB_BUILD%" == "Y" set INCLUDE=%NDKBASE%\ndk\nwsdk\include\nlm;%NDKBASE%\ws295sdk\include
|
||||||
|
|
||||||
|
rem Set Imports to location of Novell NDK import files
|
||||||
|
if "%LIBC_BUILD%" == "Y" set IMPORTS=%NDKBASE%\ndk\libc\imports
|
||||||
|
if "%CLIB_BUILD%" == "Y" set IMPORTS=%NDKBASE%\ndk\nwsdk\imports
|
||||||
|
|
||||||
|
rem Set PRELUDE to the absolute path of the prelude object to link with in
|
||||||
|
rem the Metrowerks NetWare PDK - NOTE: for Clib builds "clibpre.o" is
|
||||||
|
rem recommended, for LibC NKS builds libcpre.o must be used
|
||||||
|
if "%GNUC%" == "Y" goto gnuc
|
||||||
|
if "%LIBC_BUILD%" == "Y" set PRELUDE=%IMPORTS%\libcpre.o
|
||||||
|
rem if "%CLIB_BUILD%" == "Y" set PRELUDE=%IMPORTS%\clibpre.o
|
||||||
|
if "%CLIB_BUILD%" == "Y" set PRELUDE=%IMPORTS%\prelude.o
|
||||||
|
echo using MetroWerks CodeWarrior
|
||||||
|
goto info
|
||||||
|
|
||||||
|
:gnuc
|
||||||
|
if "%LIBC_BUILD%" == "Y" set PRELUDE=%IMPORTS%\libcpre.gcc.o
|
||||||
|
rem if "%CLIB_BUILD%" == "Y" set PRELUDE=%IMPORTS%\clibpre.gcc.o
|
||||||
|
if "%CLIB_BUILD%" == "Y" set PRELUDE=%IMPORTS%\prelude.gcc.o
|
||||||
|
echo using GNU GCC Compiler
|
||||||
|
|
||||||
|
:info
|
||||||
|
echo.
|
||||||
|
|
||||||
|
if "%LIBC_BUILD%" == "Y" echo Enviroment configured for LibC build
|
||||||
|
if "%LIBC_BUILD%" == "Y" echo use "netware\build.bat netware-libc ..."
|
||||||
|
|
||||||
|
if "%CLIB_BUILD%" == "Y" echo Enviroment configured for CLib build
|
||||||
|
if "%CLIB_BUILD%" == "Y" echo use "netware\build.bat netware-clib ..."
|
||||||
|
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:usage
|
||||||
|
rem ===============================================================
|
||||||
|
echo.
|
||||||
|
echo No target build specified!
|
||||||
|
echo.
|
||||||
|
echo usage: set_env [target] [compiler]
|
||||||
|
echo.
|
||||||
|
echo target - "netware-clib" - Clib build
|
||||||
|
echo - "netware-libc" - LibC build
|
||||||
|
echo.
|
||||||
|
echo compiler - "gnuc" - GNU GCC Compiler
|
||||||
|
echo - "codewarrior" - MetroWerks CodeWarrior (default)
|
||||||
|
echo.
|
||||||
|
|
||||||
|
:end
|
||||||
|
echo.
|
||||||
|
|
||||||
|
|
||||||
116
PROBLEMS
116
PROBLEMS
@@ -36,7 +36,9 @@ may differ on your machine.
|
|||||||
|
|
||||||
|
|
||||||
As long as Apple doesn't fix the problem with ld, this problem building
|
As long as Apple doesn't fix the problem with ld, this problem building
|
||||||
OpenSSL will remain as is.
|
OpenSSL will remain as is. Well, the problem was addressed in 0.9.8f by
|
||||||
|
passing -Wl,-search_paths_first, but it's unknown if the flag was
|
||||||
|
supported from the initial MacOS X release.
|
||||||
|
|
||||||
|
|
||||||
* Parallell make leads to errors
|
* Parallell make leads to errors
|
||||||
@@ -48,20 +50,34 @@ will interfere with each other and lead to test failure.
|
|||||||
The solution is simple for now: don't run parallell make when testing.
|
The solution is simple for now: don't run parallell make when testing.
|
||||||
|
|
||||||
|
|
||||||
* Bugs in gcc 3.0 triggered
|
* Bugs in gcc triggered
|
||||||
|
|
||||||
According to a problem report, there are bugs in gcc 3.0 that are
|
- According to a problem report, there are bugs in gcc 3.0 that are
|
||||||
triggered by some of the code in OpenSSL, more specifically in
|
triggered by some of the code in OpenSSL, more specifically in
|
||||||
PEM_get_EVP_CIPHER_INFO(). The triggering code is the following:
|
PEM_get_EVP_CIPHER_INFO(). The triggering code is the following:
|
||||||
|
|
||||||
header+=11;
|
header+=11;
|
||||||
if (*header != '4') return(0); header++;
|
if (*header != '4') return(0); header++;
|
||||||
if (*header != ',') return(0); header++;
|
if (*header != ',') return(0); header++;
|
||||||
|
|
||||||
What happens is that gcc might optimize a little too agressively, and
|
What happens is that gcc might optimize a little too agressively, and
|
||||||
you end up with an extra incrementation when *header != '4'.
|
you end up with an extra incrementation when *header != '4'.
|
||||||
|
|
||||||
We recommend that you upgrade gcc to as high a 3.x version as you can.
|
We recommend that you upgrade gcc to as high a 3.x version as you can.
|
||||||
|
|
||||||
|
- According to multiple problem reports, some of our message digest
|
||||||
|
implementations trigger bug[s] in code optimizer in gcc 3.3 for sparc64
|
||||||
|
and gcc 2.96 for ppc. Former fails to complete RIPEMD160 test, while
|
||||||
|
latter - SHA one.
|
||||||
|
|
||||||
|
The recomendation is to upgrade your compiler. This naturally applies to
|
||||||
|
other similar cases.
|
||||||
|
|
||||||
|
- There is a subtle Solaris x86-specific gcc run-time environment bug, which
|
||||||
|
"falls between" OpenSSL [0.9.8 and later], Solaris ld and GCC. The bug
|
||||||
|
manifests itself as Segmentation Fault upon early application start-up.
|
||||||
|
The problem can be worked around by patching the environment according to
|
||||||
|
http://www.openssl.org/~appro/values.c.
|
||||||
|
|
||||||
* solaris64-sparcv9-cc SHA-1 performance with WorkShop 6 compiler.
|
* solaris64-sparcv9-cc SHA-1 performance with WorkShop 6 compiler.
|
||||||
|
|
||||||
@@ -90,15 +106,6 @@ failures in other parts of the code.
|
|||||||
|
|
||||||
Workaround: modify the target to +O2 when building with no-asm.
|
Workaround: modify the target to +O2 when building with no-asm.
|
||||||
|
|
||||||
* Poor support for AIX shared builds.
|
|
||||||
|
|
||||||
do_aix-shared rule is not flexible enough to parameterize through a
|
|
||||||
config-line. './Configure aix43-cc shared' is working, but not
|
|
||||||
'./Configure aix64-gcc shared'. In latter case make fails to create shared
|
|
||||||
libraries. It's possible to build 64-bit shared libraries by running
|
|
||||||
'env OBJECT_MODE=64 make', but we need more elegant solution. Preferably one
|
|
||||||
supporting even gcc shared builds. See RT#463 for background information.
|
|
||||||
|
|
||||||
* Problems building shared libraries on SCO OpenServer Release 5.0.6
|
* Problems building shared libraries on SCO OpenServer Release 5.0.6
|
||||||
with gcc 2.95.3
|
with gcc 2.95.3
|
||||||
|
|
||||||
@@ -129,3 +136,78 @@ Any information helping to solve this issue would be deeply
|
|||||||
appreciated.
|
appreciated.
|
||||||
|
|
||||||
NOTE: building non-shared doesn't come with this problem.
|
NOTE: building non-shared doesn't come with this problem.
|
||||||
|
|
||||||
|
* ULTRIX build fails with shell errors, such as "bad substitution"
|
||||||
|
and "test: argument expected"
|
||||||
|
|
||||||
|
The problem is caused by ULTRIX /bin/sh supporting only original
|
||||||
|
Bourne shell syntax/semantics, and the trouble is that the vast
|
||||||
|
majority is so accustomed to more modern syntax, that very few
|
||||||
|
people [if any] would recognize the ancient syntax even as valid.
|
||||||
|
This inevitably results in non-trivial scripts breaking on ULTRIX,
|
||||||
|
and OpenSSL isn't an exclusion. Fortunately there is workaround,
|
||||||
|
hire /bin/ksh to do the job /bin/sh fails to do.
|
||||||
|
|
||||||
|
1. Trick make(1) to use /bin/ksh by setting up following environ-
|
||||||
|
ment variables *prior* you execute ./Configure and make:
|
||||||
|
|
||||||
|
PROG_ENV=POSIX
|
||||||
|
MAKESHELL=/bin/ksh
|
||||||
|
export PROG_ENV MAKESHELL
|
||||||
|
|
||||||
|
or if your shell is csh-compatible:
|
||||||
|
|
||||||
|
setenv PROG_ENV POSIX
|
||||||
|
setenv MAKESHELL /bin/ksh
|
||||||
|
|
||||||
|
2. Trick /bin/sh to use alternative expression evaluator. Create
|
||||||
|
following 'test' script for example in /tmp:
|
||||||
|
|
||||||
|
#!/bin/ksh
|
||||||
|
${0##*/} "$@"
|
||||||
|
|
||||||
|
Then 'chmod a+x /tmp/test; ln /tmp/test /tmp/[' and *prepend*
|
||||||
|
your $PATH with chosen location, e.g. PATH=/tmp:$PATH. Alter-
|
||||||
|
natively just replace system /bin/test and /bin/[ with the
|
||||||
|
above script.
|
||||||
|
|
||||||
|
* hpux64-ia64-cc fails blowfish test.
|
||||||
|
|
||||||
|
Compiler bug, presumably at particular patch level. It should be noted
|
||||||
|
that same compiler generates correct 32-bit code, a.k.a. hpux-ia64-cc
|
||||||
|
target. Drop optimization level to +O2 when compiling 64-bit bf_skey.o.
|
||||||
|
|
||||||
|
* no-engines generates errors.
|
||||||
|
|
||||||
|
Unfortunately, the 'no-engines' configuration option currently doesn't
|
||||||
|
work properly. Use 'no-hw' and you'll will at least get no hardware
|
||||||
|
support. We'll see how we fix that on OpenSSL versions past 0.9.8.
|
||||||
|
|
||||||
|
* 'make test' fails in BN_sqr [commonly with "error 139" denoting SIGSEGV]
|
||||||
|
if elder GNU binutils were deployed to link shared libcrypto.so.
|
||||||
|
|
||||||
|
As subject suggests the failure is caused by a bug in elder binutils,
|
||||||
|
either as or ld, and was observed on FreeBSD and Linux. There are two
|
||||||
|
options. First is naturally to upgrade binutils, the second one - to
|
||||||
|
reconfigure with additional no-sse2 [or 386] option passed to ./config.
|
||||||
|
|
||||||
|
* If configured with ./config no-dso, toolkit still gets linked with -ldl,
|
||||||
|
which most notably poses a problem when linking with dietlibc.
|
||||||
|
|
||||||
|
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
|
||||||
|
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
|
||||||
|
|||||||
61
README
61
README
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
OpenSSL 0.9.7d 17 Mar 2004
|
OpenSSL 1.0.1f 6 Jan 2014
|
||||||
|
|
||||||
Copyright (c) 1998-2004 The OpenSSL Project
|
Copyright (c) 1998-2011 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.
|
||||||
|
|
||||||
@@ -36,12 +36,13 @@
|
|||||||
actually logically part of it. It includes routines for the following:
|
actually logically part of it. It includes routines for the following:
|
||||||
|
|
||||||
Ciphers
|
Ciphers
|
||||||
libdes - EAY's libdes DES encryption package which has been floating
|
libdes - EAY's libdes DES encryption package which was floating
|
||||||
around the net for a few years. It includes 15
|
around the net for a few years, and was then relicensed by
|
||||||
'modes/variations' of DES (1, 2 and 3 key versions of ecb,
|
him as part of SSLeay. It includes 15 'modes/variations'
|
||||||
cbc, cfb and ofb; pcbc and a more general form of cfb and
|
of DES (1, 2 and 3 key versions of ecb, cbc, cfb and ofb;
|
||||||
ofb) including desx in cbc mode, a fast crypt(3), and
|
pcbc and a more general form of cfb and ofb) including desx
|
||||||
routines to read passwords from the keyboard.
|
in cbc mode, a fast crypt(3), and routines to read
|
||||||
|
passwords from the keyboard.
|
||||||
RC4 encryption,
|
RC4 encryption,
|
||||||
RC2 encryption - 4 different modes, ecb, cbc, cfb and ofb.
|
RC2 encryption - 4 different modes, ecb, cbc, cfb and ofb.
|
||||||
Blowfish encryption - 4 different modes, ecb, cbc, cfb and ofb.
|
Blowfish encryption - 4 different modes, ecb, cbc, cfb and ofb.
|
||||||
@@ -111,6 +112,10 @@
|
|||||||
should be contacted if that algorithm is to be used; their web page is
|
should be contacted if that algorithm is to be used; their web page is
|
||||||
http://www.ascom.ch/.
|
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
|
||||||
------------
|
------------
|
||||||
|
|
||||||
@@ -132,6 +137,9 @@
|
|||||||
SUPPORT
|
SUPPORT
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
See the OpenSSL website www.openssl.org for details of how to obtain
|
||||||
|
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
|
||||||
first:
|
first:
|
||||||
|
|
||||||
@@ -154,10 +162,14 @@
|
|||||||
- 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
|
Report the bug to the OpenSSL project via the Request Tracker
|
||||||
(http://www.openssl.org/support/rt2.html) by mail to:
|
(http://www.openssl.org/support/rt.html) by mail to:
|
||||||
|
|
||||||
openssl-bugs@openssl.org
|
openssl-bugs@openssl.org
|
||||||
|
|
||||||
|
Note that the request tracker should NOT be used for general assistance
|
||||||
|
or support queries. Just because something doesn't work the way you expect
|
||||||
|
does not mean it is necessarily a bug in OpenSSL.
|
||||||
|
|
||||||
Note that mail to openssl-bugs@openssl.org is recorded in the publicly
|
Note that mail to openssl-bugs@openssl.org is recorded in the publicly
|
||||||
readable request tracker database and is forwarded to a public
|
readable request tracker database and is forwarded to a public
|
||||||
mailing list. Confidential mail may be sent to openssl-security@openssl.org
|
mailing list. Confidential mail may be sent to openssl-security@openssl.org
|
||||||
@@ -168,16 +180,34 @@
|
|||||||
|
|
||||||
Development is coordinated on the openssl-dev mailing list (see
|
Development is coordinated on the openssl-dev mailing list (see
|
||||||
http://www.openssl.org for information on subscribing). If you
|
http://www.openssl.org for information on subscribing). If you
|
||||||
would like to submit a patch, send it to openssl-dev@openssl.org with
|
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
|
the string "[PATCH]" in the subject. Please be sure to include a
|
||||||
textual explanation of what your patch does.
|
textual explanation of what your patch does.
|
||||||
|
|
||||||
Note: For legal reasons, contributions from the US can be accepted only
|
If you are unsure as to whether a feature will be useful for the general
|
||||||
if a TSA notification and a copy of the patch is sent to crypt@bis.doc.gov;
|
OpenSSL community please discuss it on the openssl-dev mailing list first.
|
||||||
see http://www.bis.doc.gov/Encryption/PubAvailEncSourceCodeNofify.html [sic]
|
Someone may be already working on the same thing or there may be a good
|
||||||
and http://w3.access.gpo.gov/bis/ear/pdf/740.pdf (EAR Section 740.13(e)).
|
reason as to why that feature isn't implemented.
|
||||||
|
|
||||||
The preferred format for changes is "diff -u" output. You might
|
Patches should be as up to date as possible, preferably relative to the
|
||||||
|
current Git 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:
|
generate it like this:
|
||||||
|
|
||||||
# cd openssl-work
|
# cd openssl-work
|
||||||
@@ -185,3 +215,4 @@
|
|||||||
# ./Configure dist; make clean
|
# ./Configure dist; make clean
|
||||||
# cd ..
|
# cd ..
|
||||||
# diff -ur openssl-orig openssl-work > mydiffs.patch
|
# diff -ur openssl-orig openssl-work > mydiffs.patch
|
||||||
|
|
||||||
|
|||||||
113
STATUS
113
STATUS
@@ -1,113 +0,0 @@
|
|||||||
|
|
||||||
OpenSSL STATUS Last modified at
|
|
||||||
______________ $Date: 2004/03/23 15:00:59 $
|
|
||||||
|
|
||||||
DEVELOPMENT STATE
|
|
||||||
|
|
||||||
o OpenSSL 0.9.8: Under development...
|
|
||||||
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/rt2.html]
|
|
||||||
|
|
||||||
RELEASE SHOWSTOPPERS
|
|
||||||
|
|
||||||
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 Geoff and Richard are currently working on:
|
|
||||||
ENGINE (the new code that gives hardware support among others).
|
|
||||||
o Richard is currently working on:
|
|
||||||
UI (User Interface)
|
|
||||||
UTIL (a new set of library functions to support some higher level
|
|
||||||
functionality that is currently missing).
|
|
||||||
Shared library support for VMS.
|
|
||||||
Kerberos 5 authentication (Heimdal)
|
|
||||||
Constification
|
|
||||||
|
|
||||||
NEEDS PATCH
|
|
||||||
|
|
||||||
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.
|
|
||||||
34
VMS/VMSify-conf.pl
Normal file
34
VMS/VMSify-conf.pl
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
#! /usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
my @directory_vars = ( "dir", "certs", "crl_dir", "new_certs_dir" );
|
||||||
|
my @file_vars = ( "database", "certificate", "serial", "crlnumber",
|
||||||
|
"crl", "private_key", "RANDFILE" );
|
||||||
|
while(<STDIN>) {
|
||||||
|
chomp;
|
||||||
|
foreach my $d (@directory_vars) {
|
||||||
|
if (/^(\s*\#?\s*${d}\s*=\s*)\.\/([^\s\#]*)([\s\#].*)$/) {
|
||||||
|
$_ = "$1sys\\\$disk:\[.$2$3";
|
||||||
|
} elsif (/^(\s*\#?\s*${d}\s*=\s*)(\w[^\s\#]*)([\s\#].*)$/) {
|
||||||
|
$_ = "$1sys\\\$disk:\[.$2$3";
|
||||||
|
}
|
||||||
|
s/^(\s*\#?\s*${d}\s*=\s*\$\w+)\/([^\s\#]*)([\s\#].*)$/$1.$2\]$3/;
|
||||||
|
while(/^(\s*\#?\s*${d}\s*=\s*(\$\w+\.|sys\\\$disk:\[\.)[\w\.]+)\/([^\]]*)\](.*)$/) {
|
||||||
|
$_ = "$1.$3]$4";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach my $f (@file_vars) {
|
||||||
|
s/^(\s*\#?\s*${f}\s*=\s*)\.\/(.*)$/$1sys\\\$disk:\[\/$2/;
|
||||||
|
while(/^(\s*\#?\s*${f}\s*=\s*(\$\w+|sys\\\$disk:\[)[^\/]*)\/(\w+\/[^\s\#]*)([\s\#].*)$/) {
|
||||||
|
$_ = "$1.$3$4";
|
||||||
|
}
|
||||||
|
if (/^(\s*\#?\s*${f}\s*=\s*(\$\w+|sys\\\$disk:\[)[^\/]*)\/(\w+)([\s\#].*)$/) {
|
||||||
|
$_ = "$1]$3.$4";
|
||||||
|
} elsif (/^(\s*\#?\s*${f}\s*=\s*(\$\w+|sys\\\$disk:\[)[^\/]*)\/([^\s\#]*)([\s\#].*)$/) {
|
||||||
|
$_ = "$1]$3$4";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print $_,"\n";
|
||||||
|
}
|
||||||
67
VMS/install-vms.com
Executable file
67
VMS/install-vms.com
Executable file
@@ -0,0 +1,67 @@
|
|||||||
|
$! install-vms.com -- Installs the files in a given directory tree
|
||||||
|
$!
|
||||||
|
$! Author: Richard Levitte <richard@levitte.org>
|
||||||
|
$! Time of creation: 23-MAY-1998 19:22
|
||||||
|
$!
|
||||||
|
$! P1 root of the directory tree
|
||||||
|
$!
|
||||||
|
$!
|
||||||
|
$! Announce/identify.
|
||||||
|
$!
|
||||||
|
$ proc = f$environment( "procedure")
|
||||||
|
$ write sys$output "@@@ "+ -
|
||||||
|
f$parse( proc, , , "name")+ f$parse( proc, , , "type")
|
||||||
|
$!
|
||||||
|
$ on error then goto tidy
|
||||||
|
$ on control_c then goto tidy
|
||||||
|
$!
|
||||||
|
$ if p1 .eqs. ""
|
||||||
|
$ then
|
||||||
|
$ write sys$output "First argument missing."
|
||||||
|
$ write sys$output -
|
||||||
|
"Should be the directory where you want things installed."
|
||||||
|
$ exit
|
||||||
|
$ endif
|
||||||
|
$
|
||||||
|
$ if (f$getsyi( "cpu") .lt. 128)
|
||||||
|
$ then
|
||||||
|
$ arch = "VAX"
|
||||||
|
$ else
|
||||||
|
$ arch = f$edit( f$getsyi( "arch_name"), "upcase")
|
||||||
|
$ if (arch .eqs. "") then arch = "UNK"
|
||||||
|
$ endif
|
||||||
|
$
|
||||||
|
$ root = f$parse( P1, "[]A.;0", , , "SYNTAX_ONLY, NO_CONCEAL")- "A.;0"
|
||||||
|
$ root_dev = f$parse( root, , , "device", "syntax_only")
|
||||||
|
$ root_dir = f$parse( root, , , "directory", "syntax_only") - -
|
||||||
|
"[000000." - "][" - "[" - "]"
|
||||||
|
$ root = root_dev + "[" + root_dir
|
||||||
|
$
|
||||||
|
$ define /nolog wrk_sslroot 'root'.] /translation_attributes = concealed
|
||||||
|
$ define /nolog wrk_sslinclude wrk_sslroot:[include]
|
||||||
|
$
|
||||||
|
$ if f$parse( "wrk_sslroot:[000000]") .eqs. "" then -
|
||||||
|
create /directory /log wrk_sslroot:[000000]
|
||||||
|
$ if f$parse( "wrk_sslinclude:") .eqs. "" then -
|
||||||
|
create /directory /log wrk_sslinclude:
|
||||||
|
$ if f$parse( "wrk_sslroot:[vms]") .eqs. "" then -
|
||||||
|
create /directory /log wrk_sslroot:[vms]
|
||||||
|
$!
|
||||||
|
$ copy /log /protection = world:re openssl_startup.com wrk_sslroot:[vms]
|
||||||
|
$ copy /log /protection = world:re openssl_undo.com wrk_sslroot:[vms]
|
||||||
|
$ copy /log /protection = world:re openssl_utils.com wrk_sslroot:[vms]
|
||||||
|
$!
|
||||||
|
$ tidy:
|
||||||
|
$!
|
||||||
|
$ call deass wrk_sslroot
|
||||||
|
$ call deass wrk_sslinclude
|
||||||
|
$!
|
||||||
|
$ exit
|
||||||
|
$!
|
||||||
|
$ deass: subroutine
|
||||||
|
$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
|
||||||
|
$ then
|
||||||
|
$ deassign /process 'p1'
|
||||||
|
$ endif
|
||||||
|
$ endsubroutine
|
||||||
|
$!
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
$! INSTALL.COM -- Installs the files in a given directory tree
|
|
||||||
$!
|
|
||||||
$! Author: Richard Levitte <richard@levitte.org>
|
|
||||||
$! Time of creation: 23-MAY-1998 19:22
|
|
||||||
$!
|
|
||||||
$! P1 root of the directory tree
|
|
||||||
$!
|
|
||||||
$ IF P1 .EQS. ""
|
|
||||||
$ THEN
|
|
||||||
$ WRITE SYS$OUTPUT "First argument missing."
|
|
||||||
$ WRITE SYS$OUTPUT "Should be the directory where you want things installed."
|
|
||||||
$ EXIT
|
|
||||||
$ ENDIF
|
|
||||||
$
|
|
||||||
$ ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
|
|
||||||
$ ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
|
|
||||||
$ ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
|
|
||||||
- "[000000." - "][" - "[" - "]"
|
|
||||||
$ ROOT = ROOT_DEV + "[" + ROOT_DIR
|
|
||||||
$
|
|
||||||
$ DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
|
|
||||||
$ DEFINE/NOLOG WRK_SSLVLIB WRK_SSLROOT:[VAX_LIB]
|
|
||||||
$ DEFINE/NOLOG WRK_SSLALIB WRK_SSLROOT:[ALPHA_LIB]
|
|
||||||
$ DEFINE/NOLOG WRK_SSLINCLUDE WRK_SSLROOT:[INCLUDE]
|
|
||||||
$ DEFINE/NOLOG WRK_SSLVEXE WRK_SSLROOT:[VAX_EXE]
|
|
||||||
$ DEFINE/NOLOG WRK_SSLAEXE WRK_SSLROOT:[ALPHA_EXE]
|
|
||||||
$ DEFINE/NOLOG WRK_SSLCERTS WRK_SSLROOT:[CERTS]
|
|
||||||
$ DEFINE/NOLOG WRK_SSLPRIVATE WRK_SSLROOT:[PRIVATE]
|
|
||||||
$
|
|
||||||
$ IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
|
|
||||||
CREATE/DIR/LOG WRK_SSLROOT:[000000]
|
|
||||||
$ IF F$PARSE("WRK_SSLINCLUDE:") .EQS. "" THEN -
|
|
||||||
CREATE/DIR/LOG WRK_SSLINCLUDE:
|
|
||||||
$ IF F$PARSE("WRK_SSLROOT:[VMS]") .EQS. "" THEN -
|
|
||||||
CREATE/DIR/LOG WRK_SSLROOT:[VMS]
|
|
||||||
$
|
|
||||||
$ IF F$SEARCH("WRK_SSLINCLUDE:vms_idhacks.h") .NES. "" THEN -
|
|
||||||
DELETE WRK_SSLINCLUDE:vms_idhacks.h;*
|
|
||||||
$
|
|
||||||
$ OPEN/WRITE SF WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM
|
|
||||||
$ WRITE SYS$OUTPUT "%OPEN-I-CREATED, ",F$SEARCH("WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM")," created."
|
|
||||||
$ WRITE SF "$! Startup file for Openssl 0.9.2-RL 15-Mar-1999"
|
|
||||||
$ WRITE SF "$!"
|
|
||||||
$ WRITE SF "$! Do not edit this file, as it will be regenerated during next installation."
|
|
||||||
$ WRITE SF "$! Instead, add or change SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"
|
|
||||||
$ WRITE SF "$!"
|
|
||||||
$ WRITE SF "$! P1 a qualifier to DEFINE. For example ""/SYSTEM"" to get the logical names"
|
|
||||||
$ WRITE SF "$! defined in the system logical name table."
|
|
||||||
$ WRITE SF "$!"
|
|
||||||
$ WRITE SF "$ ARCH = ""VAX"""
|
|
||||||
$ WRITE SF "$ IF F$GETSYI(""CPU"") .GE. 128 THEN ARCH = ""ALPHA"""
|
|
||||||
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLROOT ",ROOT,".] /TRANS=CONC"
|
|
||||||
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLLIB SSLROOT:['ARCH'_LIB]"
|
|
||||||
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLINCLUDE SSLROOT:[INCLUDE]"
|
|
||||||
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLEXE SSLROOT:['ARCH'_EXE]"
|
|
||||||
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLCERTS SSLROOT:[CERTS]"
|
|
||||||
$ WRITE SF "$ DEFINE/NOLOG'P1 SSLPRIVATE SSLROOT:[PRIVATE]"
|
|
||||||
$ WRITE SF "$"
|
|
||||||
$ WRITE SF "$! This is program can include <openssl/{foo}.h>"
|
|
||||||
$ WRITE SF "$ DEFINE/NOLOG'P1 OPENSSL SSLINCLUDE:"
|
|
||||||
$ WRITE SF "$"
|
|
||||||
$ WRITE SF "$ IF F$SEARCH(""SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"") .NES."""" THEN -"
|
|
||||||
$ WRITE SF " @SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"
|
|
||||||
$ WRITE SF "$"
|
|
||||||
$ WRITE SF "$ EXIT"
|
|
||||||
$ CLOSE SF
|
|
||||||
$ SET FILE/PROT=WORLD:RE WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM
|
|
||||||
$
|
|
||||||
$ COPY OPENSSL_UTILS.COM WRK_SSLROOT:[VMS]/LOG
|
|
||||||
$ SET FILE/PROT=WORLD:RE WRK_SSLROOT:[VMS]OPENSSL_UTILS.COM
|
|
||||||
$
|
|
||||||
$ EXIT
|
|
||||||
275
VMS/mkshared.com
275
VMS/mkshared.com
@@ -1,77 +1,168 @@
|
|||||||
$! MKSHARED.COM -- script to created shareable images on VMS
|
$! MKSHARED.COM -- Create shareable images.
|
||||||
$!
|
$!
|
||||||
$! No command line parameters. This should be run at the start of the source
|
$! P1: "64" for 64-bit pointers.
|
||||||
$! tree (the same directory where one finds INSTALL.VMS).
|
|
||||||
$!
|
$!
|
||||||
$! Input: [.UTIL]LIBEAY.NUM,[.AXP.EXE.CRYPTO]LIBCRYPTO.OLB
|
$! P2: Zlib object library path (optional).
|
||||||
$! [.UTIL]SSLEAY.NUM,[.AXP.EXE.SSL]LIBSSL.OLB
|
$!
|
||||||
$! Output: [.AXP.EXE.CRYPTO]LIBCRYPTO.OPT,.MAP,.EXE
|
$! Input: [.UTIL]LIBEAY.NUM,[.xxx.EXE.CRYPTO]SSL_LIBCRYPTO[32].OLB
|
||||||
$! [.AXP.EXE.SSL]LIBSSL.OPT,.MAP,.EXE
|
$! [.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
|
||||||
|
$! [.xxx.EXE.SSL]SSL_LIBSSL_SRH[32].OPT,.MAP,.EXE
|
||||||
$!
|
$!
|
||||||
$! So far, tests have only been made on VMS for Alpha. VAX will come in time.
|
$! So far, tests have only been made on VMS for Alpha. VAX will come in time.
|
||||||
$! ===========================================================================
|
$! ===========================================================================
|
||||||
$
|
$!
|
||||||
|
$! Announce/identify.
|
||||||
|
$!
|
||||||
|
$ proc = f$environment( "procedure")
|
||||||
|
$ write sys$output "@@@ "+ -
|
||||||
|
f$parse( proc, , , "name")+ f$parse( proc, , , "type")
|
||||||
|
$!
|
||||||
|
$! Save the original default device:[directory].
|
||||||
|
$!
|
||||||
|
$ def_orig = f$environment( "default")
|
||||||
|
$ on error then goto tidy
|
||||||
|
$ on control_c then goto tidy
|
||||||
|
$!
|
||||||
|
$! SET DEFAULT to the main kit directory.
|
||||||
|
$!
|
||||||
|
$ proc = f$environment("procedure")
|
||||||
|
$ proc = f$parse( "A.;", proc)- "A.;"
|
||||||
|
$ set default 'proc'
|
||||||
|
$ set default [-]
|
||||||
|
$!
|
||||||
$! ----- Prepare info for processing: version number and file info
|
$! ----- Prepare info for processing: version number and file info
|
||||||
$ gosub read_version_info
|
$ gosub read_version_info
|
||||||
$ if libver .eqs. ""
|
$ if libver .eqs. ""
|
||||||
$ then
|
$ then
|
||||||
$ write sys$error "ERROR: Couldn't find any library version info..."
|
$ write sys$error "ERROR: Couldn't find any library version info..."
|
||||||
$ exit
|
$ go to tidy:
|
||||||
$ endif
|
$ endif
|
||||||
$
|
$
|
||||||
$ if f$getsyi("CPU") .ge. 128
|
$ if (f$getsyi("cpu") .lt. 128)
|
||||||
$ then
|
$ then
|
||||||
$ libid = "Crypto"
|
$ arch_vax = 1
|
||||||
$ libnum = "[.UTIL]LIBEAY.NUM"
|
$ arch = "VAX"
|
||||||
$ libdir = "[.AXP.EXE.CRYPTO]"
|
|
||||||
$ libolb = "''libdir'LIBCRYPTO.OLB"
|
|
||||||
$ libopt = "''libdir'LIBCRYPTO.OPT"
|
|
||||||
$ libmap = "''libdir'LIBCRYPTO.MAP"
|
|
||||||
$ libgoal= "''libdir'LIBCRYPTO.EXE"
|
|
||||||
$ libref = ""
|
|
||||||
$ gosub create_axp_shr
|
|
||||||
$ libid = "SSL"
|
|
||||||
$ libnum = "[.UTIL]SSLEAY.NUM"
|
|
||||||
$ libdir = "[.AXP.EXE.SSL]"
|
|
||||||
$ libolb = "''libdir'LIBSSL.OLB"
|
|
||||||
$ libopt = "''libdir'LIBSSL.OPT"
|
|
||||||
$ libmap = "''libdir'LIBSSL.MAP"
|
|
||||||
$ libgoal= "''libdir'LIBSSL.EXE"
|
|
||||||
$ libref = "[.AXP.EXE.CRYPTO]LIBCRYPTO.EXE"
|
|
||||||
$ gosub create_axp_shr
|
|
||||||
$ else
|
$ else
|
||||||
|
$ arch_vax = 0
|
||||||
|
$ arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
|
||||||
|
$ if (arch .eqs. "") then arch = "UNK"
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
|
$ archd = arch
|
||||||
|
$ lib32 = "32"
|
||||||
|
$ shr = "SHR32"
|
||||||
|
$!
|
||||||
|
$ if (p1 .nes. "")
|
||||||
|
$ then
|
||||||
|
$ if (p1 .eqs. "64")
|
||||||
|
$ then
|
||||||
|
$ archd = arch+ "_64"
|
||||||
|
$ lib32 = ""
|
||||||
|
$ shr = "SHR"
|
||||||
|
$ else
|
||||||
|
$ if (p1 .nes. "32")
|
||||||
|
$ then
|
||||||
|
$ write sys$output "Second argument invalid."
|
||||||
|
$ write sys$output "It should be "32", "64", or nothing."
|
||||||
|
$ exit
|
||||||
|
$ endif
|
||||||
|
$ endif
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
|
$! ----- Prepare info for processing: disabled algorithms info
|
||||||
|
$ gosub read_disabled_algorithms_info
|
||||||
|
$!
|
||||||
|
$ ZLIB = p2
|
||||||
|
$ zlib_lib = ""
|
||||||
|
$ if (ZLIB .nes. "")
|
||||||
|
$ then
|
||||||
|
$ file2 = f$parse( ZLIB, "libz.olb", , , "syntax_only")
|
||||||
|
$ if (f$search( file2) .eqs. "")
|
||||||
|
$ then
|
||||||
|
$ write sys$output ""
|
||||||
|
$ write sys$output "The Option ", ZLIB, " Is Invalid."
|
||||||
|
$ write sys$output " Can't find library: ''file2'"
|
||||||
|
$ write sys$output ""
|
||||||
|
$ goto tidy
|
||||||
|
$ endif
|
||||||
|
$ zlib_lib = ", ''file2' /library"
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
|
$ if (arch_vax)
|
||||||
|
$ then
|
||||||
$ libtit = "CRYPTO_TRANSFER_VECTOR"
|
$ libtit = "CRYPTO_TRANSFER_VECTOR"
|
||||||
$ libid = "Crypto"
|
$ libid = "Crypto"
|
||||||
$ libnum = "[.UTIL]LIBEAY.NUM"
|
$ libnum = "[.UTIL]LIBEAY.NUM"
|
||||||
$ libdir = "[.VAX.EXE.CRYPTO]"
|
$ libdir = "[.''ARCHD'.EXE.CRYPTO]"
|
||||||
$ libmar = "''libdir'LIBCRYPTO.MAR"
|
$ libmar = "''libdir'SSL_LIBCRYPTO_''shr'.MAR"
|
||||||
$ libolb = "''libdir'LIBCRYPTO.OLB"
|
$ libolb = "''libdir'SSL_LIBCRYPTO''lib32'.OLB"
|
||||||
$ libopt = "''libdir'LIBCRYPTO.OPT"
|
$ libopt = "''libdir'SSL_LIBCRYPTO_''shr'.OPT"
|
||||||
$ libobj = "''libdir'LIBCRYPTO.OBJ"
|
$ libobj = "''libdir'SSL_LIBCRYPTO_''shr'.OBJ"
|
||||||
$ libmap = "''libdir'LIBCRYPTO.MAP"
|
$ libmap = "''libdir'SSL_LIBCRYPTO_''shr'.MAP"
|
||||||
$ libgoal= "''libdir'LIBCRYPTO.EXE"
|
$ libgoal= "''libdir'SSL_LIBCRYPTO_''shr'.EXE"
|
||||||
$ libref = ""
|
$ libref = ""
|
||||||
$ libvec = "LIBCRYPTO"
|
$ libvec = "LIBCRYPTO"
|
||||||
$ gosub create_vax_shr
|
$ if f$search( libolb) .nes. "" then gosub create_vax_shr
|
||||||
$ libtit = "SSL_TRANSFER_VECTOR"
|
$ libtit = "SSL_TRANSFER_VECTOR"
|
||||||
$ libid = "SSL"
|
$ libid = "SSL"
|
||||||
$ libnum = "[.UTIL]SSLEAY.NUM"
|
$ libnum = "[.UTIL]SSLEAY.NUM"
|
||||||
$ libdir = "[.VAX.EXE.SSL]"
|
$ libdir = "[.''ARCHD'.EXE.SSL]"
|
||||||
$ libmar = "''libdir'LIBSSL.MAR"
|
$ libmar = "''libdir'SSL_LIBSSL_''shr'.MAR"
|
||||||
$ libolb = "''libdir'LIBSSL.OLB"
|
$ libolb = "''libdir'SSL_LIBSSL''lib32'.OLB"
|
||||||
$ libopt = "''libdir'LIBSSL.OPT"
|
$ libopt = "''libdir'SSL_LIBSSL_''shr'.OPT"
|
||||||
$ libobj = "''libdir'LIBSSL.OBJ"
|
$ libobj = "''libdir'SSL_LIBSSL_''shr'.OBJ"
|
||||||
$ libmap = "''libdir'LIBSSL.MAP"
|
$ libmap = "''libdir'SSL_LIBSSL_''shr'.MAP"
|
||||||
$ libgoal= "''libdir'LIBSSL.EXE"
|
$ libgoal= "''libdir'SSL_LIBSSL_''shr'.EXE"
|
||||||
$ libref = "[.VAX.EXE.CRYPTO]LIBCRYPTO.EXE"
|
$ libref = "[.''ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO_''shr'.EXE"
|
||||||
$ libvec = "LIBSSL"
|
$ libvec = "LIBSSL"
|
||||||
$ gosub create_vax_shr
|
$ if f$search( libolb) .nes. "" then gosub create_vax_shr
|
||||||
|
$ else
|
||||||
|
$ libid = "Crypto"
|
||||||
|
$ libnum = "[.UTIL]LIBEAY.NUM"
|
||||||
|
$ libdir = "[.''ARCHD'.EXE.CRYPTO]"
|
||||||
|
$ libolb = "''libdir'SSL_LIBCRYPTO''lib32'.OLB"
|
||||||
|
$ libopt = "''libdir'SSL_LIBCRYPTO_''shr'.OPT"
|
||||||
|
$ libmap = "''libdir'SSL_LIBCRYPTO_''shr'.MAP"
|
||||||
|
$ libgoal= "''libdir'SSL_LIBCRYPTO_''shr'.EXE"
|
||||||
|
$ libref = ""
|
||||||
|
$ if f$search( libolb) .nes. "" then gosub create_nonvax_shr
|
||||||
|
$ libid = "SSL"
|
||||||
|
$ libnum = "[.UTIL]SSLEAY.NUM"
|
||||||
|
$ libdir = "[.''ARCHD'.EXE.SSL]"
|
||||||
|
$ libolb = "''libdir'SSL_LIBSSL''lib32'.OLB"
|
||||||
|
$ libopt = "''libdir'SSL_LIBSSL_''shr'.OPT"
|
||||||
|
$ libmap = "''libdir'SSL_LIBSSL_''shr'.MAP"
|
||||||
|
$ libgoal= "''libdir'SSL_LIBSSL_''shr'.EXE"
|
||||||
|
$ libref = "[.''ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO_''shr'.EXE"
|
||||||
|
$ if f$search( libolb) .nes. "" then gosub create_nonvax_shr
|
||||||
$ endif
|
$ endif
|
||||||
|
$!
|
||||||
|
$ tidy:
|
||||||
|
$!
|
||||||
|
$! Close any open files.
|
||||||
|
$!
|
||||||
|
$ if (f$trnlnm( "libnum", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
|
||||||
|
close libnum
|
||||||
|
$!
|
||||||
|
$ if (f$trnlnm( "mar", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
|
||||||
|
close mar
|
||||||
|
$!
|
||||||
|
$ if (f$trnlnm( "opt", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
|
||||||
|
close opt
|
||||||
|
$!
|
||||||
|
$ if (f$trnlnm( "vf", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
|
||||||
|
close vf
|
||||||
|
$!
|
||||||
|
$! Restore the original default device:[directory].
|
||||||
|
$!
|
||||||
|
$ set default 'def_orig'
|
||||||
$ exit
|
$ exit
|
||||||
$
|
$
|
||||||
$! ----- Soubroutines to actually build the shareable libraries
|
$! ----- Subroutines to build the shareable libraries
|
||||||
$! The way things work, there's a main shareable library creator for each
|
$! For each supported architecture, there's a main shareable library
|
||||||
$! supported architecture, which is called from the main code above.
|
$! creator, which is called from the main code above.
|
||||||
$! The creator will define a number of variables to tell the next levels of
|
$! The creator will define a number of variables to tell the next levels of
|
||||||
$! subroutines what routines to use to write to the option files, call the
|
$! subroutines what routines to use to write to the option files, call the
|
||||||
$! main processor, read_func_num, and when that is done, it will write version
|
$! main processor, read_func_num, and when that is done, it will write version
|
||||||
@@ -97,28 +188,29 @@ $! read_func_num depends on the following variables from the creator:
|
|||||||
$! libwriter The name of the writer routine to call for each .num file line
|
$! libwriter The name of the writer routine to call for each .num file line
|
||||||
$! -----
|
$! -----
|
||||||
$
|
$
|
||||||
$! ----- Subroutines for AXP
|
$! ----- Subroutines for non-VAX
|
||||||
$! -----
|
$! -----
|
||||||
$! The creator routine
|
$! The creator routine
|
||||||
$ create_axp_shr:
|
$ create_nonvax_shr:
|
||||||
$ open/write opt 'libopt'
|
$ open /write opt 'libopt'
|
||||||
$ write opt "identification=""",libid," ",libverstr,""""
|
$ write opt "identification=""",libid," ",libverstr,""""
|
||||||
$ write opt libolb,"/lib"
|
$ write opt libolb, " /library"
|
||||||
$ if libref .nes. "" then write opt libref,"/SHARE"
|
$ if libref .nes. "" then write opt libref,"/SHARE"
|
||||||
$ write opt "SYMBOL_VECTOR=(-"
|
$ write opt "SYMBOL_VECTOR=(-"
|
||||||
$ libfirstentry := true
|
$ libfirstentry := true
|
||||||
$ libwrch := opt
|
$ libwrch := opt
|
||||||
$ libwriter := write_axp_transfer_entry
|
$ libwriter := write_nonvax_transfer_entry
|
||||||
$ textcount = 0
|
$ textcount = 0
|
||||||
$ gosub read_func_num
|
$ gosub read_func_num
|
||||||
$ write opt ")"
|
$ write opt ")"
|
||||||
$ write opt "GSMATCH=",libvmatch,",",libver
|
$ write opt "GSMATCH=",libvmatch,",",libver
|
||||||
$ close opt
|
$ close opt
|
||||||
$ link/map='libmap'/full/share='libgoal' 'libopt'/option
|
$ link /map = 'libmap' /full /share = 'libgoal' 'libopt' /options -
|
||||||
|
'zlib_lib'
|
||||||
$ return
|
$ return
|
||||||
$
|
$
|
||||||
$! The record writer routine
|
$! The record writer routine
|
||||||
$ write_axp_transfer_entry:
|
$ write_nonvax_transfer_entry:
|
||||||
$ if libentry .eqs. ".dummy" then return
|
$ if libentry .eqs. ".dummy" then return
|
||||||
$ if info_kind .eqs. "VARIABLE"
|
$ if info_kind .eqs. "VARIABLE"
|
||||||
$ then
|
$ then
|
||||||
@@ -144,11 +236,11 @@ $ libfirstentry := false
|
|||||||
$ textcount = textcount + textcount_this
|
$ textcount = textcount + textcount_this
|
||||||
$ return
|
$ return
|
||||||
$
|
$
|
||||||
$! ----- Subroutines for AXP
|
$! ----- Subroutines for VAX
|
||||||
$! -----
|
$! -----
|
||||||
$! The creator routine
|
$! The creator routine
|
||||||
$ create_vax_shr:
|
$ create_vax_shr:
|
||||||
$ open/write mar 'libmar'
|
$ open /write mar 'libmar'
|
||||||
$ type sys$input:/out=mar:
|
$ type sys$input:/out=mar:
|
||||||
;
|
;
|
||||||
; Transfer vector for VAX shareable image
|
; Transfer vector for VAX shareable image
|
||||||
@@ -183,10 +275,10 @@ $! libwriter := write_vax_vtransfer_entry
|
|||||||
$! gosub read_func_num
|
$! gosub read_func_num
|
||||||
$ write mar " .END"
|
$ write mar " .END"
|
||||||
$ close mar
|
$ close mar
|
||||||
$ open/write opt 'libopt'
|
$ open /write opt 'libopt'
|
||||||
$ write opt "identification=""",libid," ",libverstr,""""
|
$ write opt "identification=""",libid," ",libverstr,""""
|
||||||
$ write opt libobj
|
$ write opt libobj
|
||||||
$ write opt libolb,"/lib"
|
$ write opt libolb, " /library"
|
||||||
$ if libref .nes. "" then write opt libref,"/SHARE"
|
$ if libref .nes. "" then write opt libref,"/SHARE"
|
||||||
$ type sys$input:/out=opt:
|
$ type sys$input:/out=opt:
|
||||||
!
|
!
|
||||||
@@ -205,7 +297,8 @@ $ libwriter := write_vax_psect_attr
|
|||||||
$ gosub read_func_num
|
$ gosub read_func_num
|
||||||
$ close opt
|
$ close opt
|
||||||
$ macro/obj='libobj' 'libmar'
|
$ macro/obj='libobj' 'libmar'
|
||||||
$ link/map='libmap'/full/share='libgoal' 'libopt'/option
|
$ link /map = 'libmap' /full /share = 'libgoal' 'libopt' /options -
|
||||||
|
'zlib_lib'
|
||||||
$ return
|
$ return
|
||||||
$
|
$
|
||||||
$! The record writer routine for VAX functions
|
$! The record writer routine for VAX functions
|
||||||
@@ -227,9 +320,9 @@ $ return
|
|||||||
$
|
$
|
||||||
$! ----- Common subroutines
|
$! ----- Common subroutines
|
||||||
$! -----
|
$! -----
|
||||||
$! The .num file reader. This one has great responsability.
|
$! The .num file reader. This one has great responsibility.
|
||||||
$ read_func_num:
|
$ read_func_num:
|
||||||
$ open libnum 'libnum'
|
$ open /read libnum 'libnum'
|
||||||
$ goto read_nums
|
$ goto read_nums
|
||||||
$
|
$
|
||||||
$ read_nums:
|
$ read_nums:
|
||||||
@@ -237,35 +330,46 @@ $ libentrynum=0
|
|||||||
$ liblastentry:=false
|
$ liblastentry:=false
|
||||||
$ entrycount=0
|
$ entrycount=0
|
||||||
$ loop:
|
$ loop:
|
||||||
$ read/end=loop_end/err=loop_end libnum line
|
$ read /end=loop_end /err=loop_end libnum line
|
||||||
$ entrynum=f$int(f$element(1," ",f$edit(line,"COMPRESS,TRIM")))
|
$ lin = f$edit( line, "COMPRESS,TRIM")
|
||||||
$ entryinfo=f$element(2," ",f$edit(line,"COMPRESS,TRIM"))
|
$! Skip a "#" comment line.
|
||||||
$ curentry=f$element(0," ",f$edit(line,"COMPRESS,TRIM"))
|
$ if (f$extract( 0, 1, lin) .eqs. "#") then goto loop
|
||||||
$ info_exist=f$element(0,":",entryinfo)
|
$ entrynum = f$int(f$element( 1, " ", lin))
|
||||||
$ info_platforms=","+f$element(1,":",entryinfo)+","
|
$ entryinfo = f$element( 2, " ", lin)
|
||||||
$ info_kind=f$element(2,":",entryinfo)
|
$ curentry = f$element( 0, " ", lin)
|
||||||
$ info_algorithms=","+f$element(3,":",entryinfo)+","
|
$ info_exist = f$element( 0, ":", entryinfo)
|
||||||
|
$ info_platforms = ","+ f$element(1, ":", entryinfo)+ ","
|
||||||
|
$ info_kind = f$element( 2, ":", entryinfo)
|
||||||
|
$ info_algorithms = ","+ f$element( 3, ":", entryinfo)+ ","
|
||||||
$ if info_exist .eqs. "NOEXIST" then goto loop
|
$ if info_exist .eqs. "NOEXIST" then goto loop
|
||||||
$ truesum = 0
|
$ truesum = 0
|
||||||
$ falsesum = 0
|
$ falsesum = 0
|
||||||
$ negatives = 1
|
$ negatives = 1
|
||||||
$ plat_i = 0
|
$ plat_i = 0
|
||||||
$ loop1:
|
$ loop1:
|
||||||
$ plat_entry = f$element(plat_i,",",info_platforms)
|
$ plat_entry = f$element( plat_i, ",", info_platforms)
|
||||||
$ plat_i = plat_i + 1
|
$ plat_i = plat_i + 1
|
||||||
$ if plat_entry .eqs. "" then goto loop1
|
$ if plat_entry .eqs. "" then goto loop1
|
||||||
$ if plat_entry .nes. ","
|
$ if plat_entry .nes. ","
|
||||||
$ then
|
$ then
|
||||||
$ if f$extract(0,1,plat_entry) .nes. "!" then negatives = 0
|
$ if f$extract(0,1,plat_entry) .nes. "!" then negatives = 0
|
||||||
$ if f$getsyi("CPU") .lt. 128
|
$ if (arch_vax)
|
||||||
$ then
|
$ then
|
||||||
$ if plat_entry .eqs. "EXPORT_VAR_AS_FUNCTION" then -
|
$ if plat_entry .eqs. "EXPORT_VAR_AS_FUNCTION" then -
|
||||||
$ truesum = truesum + 1
|
$ truesum = truesum + 1
|
||||||
$ if plat_entry .eqs. "!EXPORT_VAR_AS_FUNCTION" then -
|
$ if plat_entry .eqs. "!EXPORT_VAR_AS_FUNCTION" then -
|
||||||
$ falsesum = falsesum + 1
|
$ falsesum = falsesum + 1
|
||||||
$ endif
|
$ endif
|
||||||
$ if plat_entry .eqs. "VMS" then truesum = truesum + 1
|
$!
|
||||||
$ if plat_entry .eqs. "!VMS" then falsesum = falsesum + 1
|
$ if ((plat_entry .eqs. "VMS") .or. -
|
||||||
|
((plat_entry .eqs. "ZLIB") .and. (ZLIB .nes. "")) .or. -
|
||||||
|
(arch_vax .and. (plat_entry .eqs. "VMSVAX"))) then -
|
||||||
|
truesum = truesum + 1
|
||||||
|
$!
|
||||||
|
$ if ((plat_entry .eqs. "!VMS") .or. -
|
||||||
|
(arch_vax .and. (plat_entry .eqs. "!VMSVAX"))) then -
|
||||||
|
falsesum = falsesum + 1
|
||||||
|
$!
|
||||||
$ goto loop1
|
$ goto loop1
|
||||||
$ endif
|
$ endif
|
||||||
$ endloop1:
|
$ endloop1:
|
||||||
@@ -284,7 +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 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
|
||||||
@@ -327,7 +431,7 @@ $
|
|||||||
$! The version number reader
|
$! The version number reader
|
||||||
$ read_version_info:
|
$ read_version_info:
|
||||||
$ libver = ""
|
$ libver = ""
|
||||||
$ open/read vf [.CRYPTO]OPENSSLV.H
|
$ open /read vf [.CRYPTO]OPENSSLV.H
|
||||||
$ loop_rvi:
|
$ loop_rvi:
|
||||||
$ read/err=endloop_rvi/end=endloop_rvi vf rvi_line
|
$ read/err=endloop_rvi/end=endloop_rvi vf rvi_line
|
||||||
$ if rvi_line - "SHLIB_VERSION_NUMBER """ .eqs. rvi_line then -
|
$ if rvi_line - "SHLIB_VERSION_NUMBER """ .eqs. rvi_line then -
|
||||||
@@ -351,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
|
||||||
|
|||||||
108
VMS/openssl_startup.com
Executable file
108
VMS/openssl_startup.com
Executable file
@@ -0,0 +1,108 @@
|
|||||||
|
$!
|
||||||
|
$! Startup file for OpenSSL 1.x.
|
||||||
|
$!
|
||||||
|
$! 2011-03-05 SMS.
|
||||||
|
$!
|
||||||
|
$! This procedure must reside in the OpenSSL installation directory.
|
||||||
|
$! It will fail if it is copied to a different location.
|
||||||
|
$!
|
||||||
|
$! P1 qualifier(s) for DEFINE. For example, "/SYSTEM" to get the
|
||||||
|
$! logical names defined in the system logical name table.
|
||||||
|
$!
|
||||||
|
$! P2 "64", to use executables which were built with 64-bit pointers.
|
||||||
|
$!
|
||||||
|
$! Good (default) and bad status values.
|
||||||
|
$!
|
||||||
|
$ status = %x00010001 ! RMS$_NORMAL, normal successful completion.
|
||||||
|
$ rms_e_fnf = %x00018292 ! RMS$_FNF, file not found.
|
||||||
|
$!
|
||||||
|
$! Prepare for problems.
|
||||||
|
$!
|
||||||
|
$ orig_dev_dir = f$environment( "DEFAULT")
|
||||||
|
$ on control_y then goto clean_up
|
||||||
|
$ on error then goto clean_up
|
||||||
|
$!
|
||||||
|
$! Determine hardware architecture.
|
||||||
|
$!
|
||||||
|
$ if (f$getsyi( "cpu") .lt. 128)
|
||||||
|
$ then
|
||||||
|
$ arch_name = "VAX"
|
||||||
|
$ else
|
||||||
|
$ arch_name = f$edit( f$getsyi( "arch_name"), "upcase")
|
||||||
|
$ if (arch_name .eqs. "") then arch_name = "UNK"
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
|
$ if (p2 .eqs. "64")
|
||||||
|
$ then
|
||||||
|
$ arch_name_exe = arch_name+ "_64"
|
||||||
|
$ else
|
||||||
|
$ arch_name_exe = arch_name
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
|
$! Derive the OpenSSL installation device:[directory] from the location
|
||||||
|
$! of this command procedure.
|
||||||
|
$!
|
||||||
|
$ proc = f$environment( "procedure")
|
||||||
|
$ proc_dev_dir = f$parse( "A.;", proc, , , "no_conceal") - "A.;"
|
||||||
|
$ proc_dev = f$parse( proc_dev_dir, , , "device", "syntax_only")
|
||||||
|
$ proc_dir = f$parse( proc_dev_dir, , , "directory", "syntax_only") - -
|
||||||
|
".][000000"- "[000000."- "]["- "["- "]"
|
||||||
|
$ proc_dev_dir = proc_dev+ "["+ proc_dir+ "]"
|
||||||
|
$ set default 'proc_dev_dir'
|
||||||
|
$ set default [-]
|
||||||
|
$ ossl_dev_dir = f$environment( "default")
|
||||||
|
$!
|
||||||
|
$! Check existence of expected directories (to see if this procedure has
|
||||||
|
$! been moved away from its proper place).
|
||||||
|
$!
|
||||||
|
$ if ((f$search( "certs.dir;1") .eqs. "") .or. -
|
||||||
|
(f$search( "include.dir;1") .eqs. "") .or. -
|
||||||
|
(f$search( "private.dir;1") .eqs. "") .or. -
|
||||||
|
(f$search( "vms.dir;1") .eqs. ""))
|
||||||
|
$ then
|
||||||
|
$ write sys$output -
|
||||||
|
" Can't find expected common OpenSSL directories in:"
|
||||||
|
$ write sys$output " ''ossl_dev_dir'"
|
||||||
|
$ status = rms_e_fnf
|
||||||
|
$ goto clean_up
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
|
$ if ((f$search( "''arch_name_exe'_exe.dir;1") .eqs. "") .or. -
|
||||||
|
(f$search( "''arch_name'_lib.dir;1") .eqs. ""))
|
||||||
|
$ then
|
||||||
|
$ write sys$output -
|
||||||
|
" Can't find expected architecture-specific OpenSSL directories in:"
|
||||||
|
$ write sys$output " ''ossl_dev_dir'"
|
||||||
|
$ status = rms_e_fnf
|
||||||
|
$ goto clean_up
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
|
$! All seems well (enough). Define the OpenSSL logical names.
|
||||||
|
$!
|
||||||
|
$ ossl_root = ossl_dev_dir- "]"+ ".]"
|
||||||
|
$ define /translation_attributes = concealed /nolog'p1 SSLROOT 'ossl_root'
|
||||||
|
$ define /nolog 'p1' SSLCERTS sslroot:[certs]
|
||||||
|
$ define /nolog 'p1' SSLINCLUDE sslroot:[include]
|
||||||
|
$ define /nolog 'p1' SSLPRIVATE sslroot:[private]
|
||||||
|
$ define /nolog 'p1' SSLEXE sslroot:['arch_name_exe'_exe]
|
||||||
|
$ define /nolog 'p1' SSLLIB sslroot:['arch_name'_lib]
|
||||||
|
$!
|
||||||
|
$! Defining OPENSSL lets a C program use "#include <openssl/{foo}.h>":
|
||||||
|
$ define /nolog 'p1' OPENSSL SSLINCLUDE:
|
||||||
|
$!
|
||||||
|
$! Run a site-specific procedure, if it exists.
|
||||||
|
$!
|
||||||
|
$ if f$search( "sslroot:[vms]openssl_systartup.com") .nes."" then -
|
||||||
|
@ sslroot:[vms]openssl_systartup.com
|
||||||
|
$!
|
||||||
|
$! Restore the original default dev:[dir] (if known).
|
||||||
|
$!
|
||||||
|
$ clean_up:
|
||||||
|
$!
|
||||||
|
$ if (f$type( orig_dev_dir) .nes. "")
|
||||||
|
$ then
|
||||||
|
$ set default 'orig_dev_dir'
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
|
$ EXIT 'status'
|
||||||
|
$!
|
||||||
20
VMS/openssl_undo.com
Executable file
20
VMS/openssl_undo.com
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
$!
|
||||||
|
$! Deassign OpenSSL logical names.
|
||||||
|
$!
|
||||||
|
$ call deass "OPENSSL" "''p1'"
|
||||||
|
$ call deass "SSLCERTS" "''p1'"
|
||||||
|
$ call deass "SSLEXE" "''p1'"
|
||||||
|
$ call deass "SSLINCLUDE" "''p1'"
|
||||||
|
$ call deass "SSLLIB" "''p1'"
|
||||||
|
$ call deass "SSLPRIVATE" "''p1'"
|
||||||
|
$ call deass "SSLROOT" "''p1'"
|
||||||
|
$!
|
||||||
|
$ exit
|
||||||
|
$!
|
||||||
|
$deass: subroutine
|
||||||
|
$ if (f$trnlnm( p1) .nes. "")
|
||||||
|
$ then
|
||||||
|
$ deassign 'p2' 'p1'
|
||||||
|
$ endif
|
||||||
|
$ endsubroutine
|
||||||
|
$!
|
||||||
@@ -8,31 +8,39 @@ $!
|
|||||||
$!
|
$!
|
||||||
$! Slightly modified by Richard Levitte <richard@levitte.org>
|
$! Slightly modified by Richard Levitte <richard@levitte.org>
|
||||||
$!
|
$!
|
||||||
|
$!
|
||||||
|
$! Always define OPENSSL. Others are optional (non-null P1).
|
||||||
|
$!
|
||||||
$ OPENSSL :== $SSLEXE:OPENSSL
|
$ OPENSSL :== $SSLEXE:OPENSSL
|
||||||
$ VERIFY :== $SSLEXE:OPENSSL VERIFY
|
$
|
||||||
$ ASN1PARSE:== $SSLEXE:OPENSSL ASN1PARS
|
$ IF (P1 .NES. "")
|
||||||
$ REQ :== $SSLEXE:OPENSSL REQ
|
$ THEN
|
||||||
$ DGST :== $SSLEXE:OPENSSL DGST
|
$ VERIFY :== $SSLEXE:OPENSSL VERIFY
|
||||||
$ DH :== $SSLEXE:OPENSSL DH
|
$ ASN1PARSE:== $SSLEXE:OPENSSL ASN1PARS
|
||||||
$ ENC :== $SSLEXE:OPENSSL ENC
|
$! REQ could conflict with REQUEST.
|
||||||
$ GENDH :== $SSLEXE:OPENSSL GENDH
|
$ OREQ :== $SSLEXE:OPENSSL REQ
|
||||||
$ ERRSTR :== $SSLEXE:OPENSSL ERRSTR
|
$ DGST :== $SSLEXE:OPENSSL DGST
|
||||||
$ CA :== $SSLEXE:OPENSSL CA
|
$ DH :== $SSLEXE:OPENSSL DH
|
||||||
$ CRL :== $SSLEXE:OPENSSL CRL
|
$ ENC :== $SSLEXE:OPENSSL ENC
|
||||||
$ RSA :== $SSLEXE:OPENSSL RSA
|
$ GENDH :== $SSLEXE:OPENSSL GENDH
|
||||||
$ DSA :== $SSLEXE:OPENSSL DSA
|
$ ERRSTR :== $SSLEXE:OPENSSL ERRSTR
|
||||||
$ DSAPARAM :== $SSLEXE:OPENSSL DSAPARAM
|
$ CA :== $SSLEXE:OPENSSL CA
|
||||||
$ X509 :== $SSLEXE:OPENSSL X509
|
$ CRL :== $SSLEXE:OPENSSL CRL
|
||||||
$ GENRSA :== $SSLEXE:OPENSSL GENRSA
|
$ RSA :== $SSLEXE:OPENSSL RSA
|
||||||
$ GENDSA :== $SSLEXE:OPENSSL GENDSA
|
$ DSA :== $SSLEXE:OPENSSL DSA
|
||||||
$ S_SERVER :== $SSLEXE:OPENSSL S_SERVER
|
$ DSAPARAM :== $SSLEXE:OPENSSL DSAPARAM
|
||||||
$ S_CLIENT :== $SSLEXE:OPENSSL S_CLIENT
|
$ X509 :== $SSLEXE:OPENSSL X509
|
||||||
$ SPEED :== $SSLEXE:OPENSSL SPEED
|
$ GENRSA :== $SSLEXE:OPENSSL GENRSA
|
||||||
$ S_TIME :== $SSLEXE:OPENSSL S_TIME
|
$ GENDSA :== $SSLEXE:OPENSSL GENDSA
|
||||||
$ VERSION :== $SSLEXE:OPENSSL VERSION
|
$ S_SERVER :== $SSLEXE:OPENSSL S_SERVER
|
||||||
$ PKCS7 :== $SSLEXE:OPENSSL PKCS7
|
$ S_CLIENT :== $SSLEXE:OPENSSL S_CLIENT
|
||||||
$ CRL2PKCS7:== $SSLEXE:OPENSSL CRL2P7
|
$ SPEED :== $SSLEXE:OPENSSL SPEED
|
||||||
$ SESS_ID :== $SSLEXE:OPENSSL SESS_ID
|
$ S_TIME :== $SSLEXE:OPENSSL S_TIME
|
||||||
$ CIPHERS :== $SSLEXE:OPENSSL CIPHERS
|
$ VERSION :== $SSLEXE:OPENSSL VERSION
|
||||||
$ NSEQ :== $SSLEXE:OPENSSL NSEQ
|
$ PKCS7 :== $SSLEXE:OPENSSL PKCS7
|
||||||
$ PKCS12 :== $SSLEXE:OPENSSL PKCS12
|
$ CRL2PKCS7:== $SSLEXE:OPENSSL CRL2P7
|
||||||
|
$ SESS_ID :== $SSLEXE:OPENSSL SESS_ID
|
||||||
|
$ CIPHERS :== $SSLEXE:OPENSSL CIPHERS
|
||||||
|
$ NSEQ :== $SSLEXE:OPENSSL NSEQ
|
||||||
|
$ PKCS12 :== $SSLEXE:OPENSSL PKCS12
|
||||||
|
$ ENDIF
|
||||||
|
|||||||
@@ -3,3 +3,6 @@ Makefile.save
|
|||||||
der_chop
|
der_chop
|
||||||
der_chop.bak
|
der_chop.bak
|
||||||
CA.pl
|
CA.pl
|
||||||
|
*.flc
|
||||||
|
semantic.cache
|
||||||
|
*.dll
|
||||||
|
|||||||
100
apps/CA.com
100
apps/CA.com
@@ -37,14 +37,25 @@ $ VERIFY = openssl + " verify"
|
|||||||
$ X509 = openssl + " x509"
|
$ X509 = openssl + " x509"
|
||||||
$ PKCS12 = openssl + " pkcs12"
|
$ PKCS12 = openssl + " pkcs12"
|
||||||
$ echo = "write sys$Output"
|
$ echo = "write sys$Output"
|
||||||
|
$ RET = 1
|
||||||
$!
|
$!
|
||||||
$ s = F$PARSE(F$ENVIRONMENT("DEFAULT"),"[]") - "].;"
|
$! 2010-12-20 SMS.
|
||||||
$ CATOP := 's'.demoCA
|
$! Use a concealed logical name to reduce command line lengths, to
|
||||||
$ CAKEY := ]cakey.pem
|
$! avoid DCL errors on VAX:
|
||||||
$ CACERT := ]cacert.pem
|
$! %DCL-W-TKNOVF, command element is too long - shorten
|
||||||
|
$! (Path segments like "openssl-1_0_1-stable-SNAP-20101217" accumulate
|
||||||
|
$! quickly.)
|
||||||
|
$!
|
||||||
|
$ CATOP = F$PARSE( F$ENVIRONMENT( "DEFAULT"), "[]")- "].;"+ ".demoCA.]"
|
||||||
|
$ define /translation_attributes = concealed CATOP 'CATOP'
|
||||||
|
$!
|
||||||
|
$ on error then goto clean_up
|
||||||
|
$ on control_y then goto clean_up
|
||||||
|
$!
|
||||||
|
$ CAKEY = "CATOP:[private]cakey.pem"
|
||||||
|
$ CACERT = "CATOP:[000000]cacert.pem"
|
||||||
$
|
$
|
||||||
$ __INPUT := SYS$COMMAND
|
$ __INPUT := SYS$COMMAND
|
||||||
$ RET = 1
|
|
||||||
$!
|
$!
|
||||||
$ i = 1
|
$ i = 1
|
||||||
$opt_loop:
|
$opt_loop:
|
||||||
@@ -55,7 +66,7 @@ $
|
|||||||
$ IF (prog_opt .EQS. "?" .OR. prog_opt .EQS. "-h" .OR. prog_opt .EQS. "-help")
|
$ IF (prog_opt .EQS. "?" .OR. prog_opt .EQS. "-h" .OR. prog_opt .EQS. "-help")
|
||||||
$ THEN
|
$ THEN
|
||||||
$ echo "usage: CA -newcert|-newreq|-newca|-sign|-verify"
|
$ echo "usage: CA -newcert|-newreq|-newca|-sign|-verify"
|
||||||
$ exit
|
$ goto clean_up
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$!
|
$!
|
||||||
$ IF (prog_opt .EQS. "-input")
|
$ IF (prog_opt .EQS. "-input")
|
||||||
@@ -69,7 +80,7 @@ $!
|
|||||||
$ IF (prog_opt .EQS. "-newcert")
|
$ IF (prog_opt .EQS. "-newcert")
|
||||||
$ THEN
|
$ THEN
|
||||||
$ ! Create a certificate.
|
$ ! Create a certificate.
|
||||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||||
$ REQ -new -x509 -keyout newreq.pem -out newreq.pem 'DAYS'
|
$ REQ -new -x509 -keyout newreq.pem -out newreq.pem 'DAYS'
|
||||||
$ RET=$STATUS
|
$ RET=$STATUS
|
||||||
$ echo "Certificate (and private key) is in newreq.pem"
|
$ echo "Certificate (and private key) is in newreq.pem"
|
||||||
@@ -79,7 +90,7 @@ $!
|
|||||||
$ IF (prog_opt .EQS. "-newreq")
|
$ IF (prog_opt .EQS. "-newreq")
|
||||||
$ THEN
|
$ THEN
|
||||||
$ ! Create a certificate request
|
$ ! Create a certificate request
|
||||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||||
$ REQ -new -keyout newreq.pem -out newreq.pem 'DAYS'
|
$ REQ -new -keyout newreq.pem -out newreq.pem 'DAYS'
|
||||||
$ RET=$STATUS
|
$ RET=$STATUS
|
||||||
$ echo "Request (and private key) is in newreq.pem"
|
$ echo "Request (and private key) is in newreq.pem"
|
||||||
@@ -90,41 +101,40 @@ $ IF (prog_opt .EQS. "-newca")
|
|||||||
$ THEN
|
$ THEN
|
||||||
$ ! If explicitly asked for or it doesn't exist then setup the directory
|
$ ! If explicitly asked for or it doesn't exist then setup the directory
|
||||||
$ ! structure that Eric likes to manage things.
|
$ ! structure that Eric likes to manage things.
|
||||||
$ IF F$SEARCH(CATOP+"]serial.") .EQS. ""
|
$ IF F$SEARCH( "CATOP:[000000]serial.") .EQS. ""
|
||||||
$ THEN
|
$ THEN
|
||||||
$ CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP']
|
$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[000000]
|
||||||
$ CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.certs]
|
$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[certs]
|
||||||
$ CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.crl]
|
$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[crl]
|
||||||
$ CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.newcerts]
|
$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[newcerts]
|
||||||
$ CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.private]
|
$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[private]
|
||||||
$
|
$
|
||||||
$ OPEN /WRITE ser_file 'CATOP']serial.
|
$ OPEN /WRITE ser_file CATOP:[000000]serial.
|
||||||
$ WRITE ser_file "01"
|
$ WRITE ser_file "01"
|
||||||
$ CLOSE ser_file
|
$ CLOSE ser_file
|
||||||
$ APPEND/NEW NL: 'CATOP']index.txt
|
$ APPEND /NEW_VERSION NL: CATOP:[000000]index.txt
|
||||||
$
|
$
|
||||||
$ ! The following is to make sure access() doesn't get confused. It
|
$ ! The following is to make sure access() doesn't get confused. It
|
||||||
$ ! really needs one file in the directory to give correct answers...
|
$ ! really needs one file in the directory to give correct answers...
|
||||||
$ COPY NLA0: 'CATOP'.certs].;
|
$ COPY NLA0: CATOP:[certs].;
|
||||||
$ COPY NLA0: 'CATOP'.crl].;
|
$ COPY NLA0: CATOP:[crl].;
|
||||||
$ COPY NLA0: 'CATOP'.newcerts].;
|
$ COPY NLA0: CATOP:[newcerts].;
|
||||||
$ COPY NLA0: 'CATOP'.private].;
|
$ COPY NLA0: CATOP:[private].;
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$!
|
$!
|
||||||
$ IF F$SEARCH(CATOP+".private"+CAKEY) .EQS. ""
|
$ IF F$SEARCH( CAKEY) .EQS. ""
|
||||||
$ THEN
|
$ THEN
|
||||||
$ READ '__INPUT' FILE -
|
$ READ '__INPUT' FILE -
|
||||||
/PROMT="CA certificate filename (or enter to create)"
|
/PROMPT="CA certificate filename (or enter to create): "
|
||||||
$ IF F$SEARCH(FILE) .NES. ""
|
$ IF (FILE .NES. "") .AND. (F$SEARCH(FILE) .NES. "")
|
||||||
$ THEN
|
$ THEN
|
||||||
$ COPY 'FILE' 'CATOP'.private'CAKEY'
|
$ COPY 'FILE' 'CAKEY'
|
||||||
$ RET=$STATUS
|
$ RET=$STATUS
|
||||||
$ ELSE
|
$ ELSE
|
||||||
$ echo "Making CA certificate ..."
|
$ echo "Making CA certificate ..."
|
||||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||||
$ REQ -new -x509 -keyout 'CATOP'.private'CAKEY' -
|
$ REQ -new -x509 -keyout 'CAKEY' -out 'CACERT' 'DAYS'
|
||||||
-out 'CATOP''CACERT' 'DAYS'
|
$ RET=$STATUS
|
||||||
$ RET=$STATUS
|
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$ GOTO opt_loop_continue
|
$ GOTO opt_loop_continue
|
||||||
@@ -135,16 +145,16 @@ $ THEN
|
|||||||
$ i = i + 1
|
$ i = i + 1
|
||||||
$ cname = P'i'
|
$ cname = P'i'
|
||||||
$ IF cname .EQS. "" THEN cname = "My certificate"
|
$ IF cname .EQS. "" THEN cname = "My certificate"
|
||||||
$ PKCS12 -in newcert.pem -inkey newreq.pem -certfile 'CATOP''CACERT -
|
$ PKCS12 -in newcert.pem -inkey newreq.pem -certfile 'CACERT' -
|
||||||
-out newcert.p12 -export -name "''cname'"
|
-out newcert.p12 -export -name "''cname'"
|
||||||
$ RET=$STATUS
|
$ RET=$STATUS
|
||||||
$ exit RET
|
$ goto clean_up
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$!
|
$!
|
||||||
$ IF (prog_opt .EQS. "-xsign")
|
$ IF (prog_opt .EQS. "-xsign")
|
||||||
$ THEN
|
$ THEN
|
||||||
$!
|
$!
|
||||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||||
$ CA -policy policy_anything -infiles newreq.pem
|
$ CA -policy policy_anything -infiles newreq.pem
|
||||||
$ RET=$STATUS
|
$ RET=$STATUS
|
||||||
$ GOTO opt_loop_continue
|
$ GOTO opt_loop_continue
|
||||||
@@ -153,7 +163,7 @@ $!
|
|||||||
$ IF ((prog_opt .EQS. "-sign") .OR. (prog_opt .EQS. "-signreq"))
|
$ IF ((prog_opt .EQS. "-sign") .OR. (prog_opt .EQS. "-signreq"))
|
||||||
$ THEN
|
$ THEN
|
||||||
$!
|
$!
|
||||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||||
$ CA -policy policy_anything -out newcert.pem -infiles newreq.pem
|
$ CA -policy policy_anything -out newcert.pem -infiles newreq.pem
|
||||||
$ RET=$STATUS
|
$ RET=$STATUS
|
||||||
$ type newcert.pem
|
$ type newcert.pem
|
||||||
@@ -165,9 +175,9 @@ $ IF (prog_opt .EQS. "-signcert")
|
|||||||
$ THEN
|
$ THEN
|
||||||
$!
|
$!
|
||||||
$ echo "Cert passphrase will be requested twice - bug?"
|
$ echo "Cert passphrase will be requested twice - bug?"
|
||||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||||
$ X509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem
|
$ X509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem
|
||||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||||
$ CA -policy policy_anything -out newcert.pem -infiles tmp.pem
|
$ CA -policy policy_anything -out newcert.pem -infiles tmp.pem
|
||||||
y
|
y
|
||||||
y
|
y
|
||||||
@@ -182,17 +192,17 @@ $!
|
|||||||
$ i = i + 1
|
$ i = i + 1
|
||||||
$ IF (p'i' .EQS. "")
|
$ IF (p'i' .EQS. "")
|
||||||
$ THEN
|
$ THEN
|
||||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||||
$ VERIFY "-CAfile" 'CATOP''CACERT' newcert.pem
|
$ VERIFY "-CAfile" 'CACERT' newcert.pem
|
||||||
$ ELSE
|
$ ELSE
|
||||||
$ j = i
|
$ j = i
|
||||||
$ verify_opt_loop:
|
$ verify_opt_loop:
|
||||||
$ IF j .GT. 8 THEN GOTO verify_opt_loop_end
|
$ IF j .GT. 8 THEN GOTO verify_opt_loop_end
|
||||||
$ IF p'j' .NES. ""
|
$ IF p'j' .NES. ""
|
||||||
$ THEN
|
$ THEN
|
||||||
$ DEFINE/USER SYS$INPUT '__INPUT'
|
$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
|
||||||
$ __tmp = p'j'
|
$ __tmp = p'j'
|
||||||
$ VERIFY "-CAfile" 'CATOP''CACERT' '__tmp'
|
$ VERIFY "-CAfile" 'CACERT' '__tmp'
|
||||||
$ tmp=$STATUS
|
$ tmp=$STATUS
|
||||||
$ IF tmp .NE. 0 THEN RET=tmp
|
$ IF tmp .NE. 0 THEN RET=tmp
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
@@ -208,8 +218,8 @@ $ IF (prog_opt .NES. "")
|
|||||||
$ THEN
|
$ THEN
|
||||||
$!
|
$!
|
||||||
$ echo "Unknown argument ''prog_opt'"
|
$ echo "Unknown argument ''prog_opt'"
|
||||||
$
|
$ RET = 3
|
||||||
$ EXIT 3
|
$ goto clean_up
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$
|
$
|
||||||
$opt_loop_continue:
|
$opt_loop_continue:
|
||||||
@@ -217,4 +227,10 @@ $ i = i + 1
|
|||||||
$ GOTO opt_loop
|
$ GOTO opt_loop
|
||||||
$
|
$
|
||||||
$opt_loop_end:
|
$opt_loop_end:
|
||||||
|
$!
|
||||||
|
$clean_up:
|
||||||
|
$!
|
||||||
|
$ if f$trnlnm( "CATOP", "LNM$PROCESS") .nes. "" then -
|
||||||
|
deassign /process CATOP
|
||||||
|
$!
|
||||||
$ EXIT 'RET'
|
$ EXIT 'RET'
|
||||||
|
|||||||
@@ -36,16 +36,26 @@
|
|||||||
# default openssl.cnf file has setup as per the following
|
# default openssl.cnf file has setup as per the following
|
||||||
# demoCA ... where everything is stored
|
# demoCA ... where everything is stored
|
||||||
|
|
||||||
|
my $openssl;
|
||||||
|
if(defined $ENV{OPENSSL}) {
|
||||||
|
$openssl = $ENV{OPENSSL};
|
||||||
|
} else {
|
||||||
|
$openssl = "openssl";
|
||||||
|
$ENV{OPENSSL} = $openssl;
|
||||||
|
}
|
||||||
|
|
||||||
$SSLEAY_CONFIG=$ENV{"SSLEAY_CONFIG"};
|
$SSLEAY_CONFIG=$ENV{"SSLEAY_CONFIG"};
|
||||||
$DAYS="-days 365";
|
$DAYS="-days 365"; # 1 year
|
||||||
$REQ="openssl req $SSLEAY_CONFIG";
|
$CADAYS="-days 1095"; # 3 years
|
||||||
$CA="openssl ca $SSLEAY_CONFIG";
|
$REQ="$openssl req $SSLEAY_CONFIG";
|
||||||
$VERIFY="openssl verify";
|
$CA="$openssl ca $SSLEAY_CONFIG";
|
||||||
$X509="openssl x509";
|
$VERIFY="$openssl verify";
|
||||||
$PKCS12="openssl pkcs12";
|
$X509="$openssl x509";
|
||||||
|
$PKCS12="$openssl pkcs12";
|
||||||
|
|
||||||
$CATOP="./demoCA";
|
$CATOP="./demoCA";
|
||||||
$CAKEY="cakey.pem";
|
$CAKEY="cakey.pem";
|
||||||
|
$CAREQ="careq.pem";
|
||||||
$CACERT="cacert.pem";
|
$CACERT="cacert.pem";
|
||||||
|
|
||||||
$DIRMODE = 0777;
|
$DIRMODE = 0777;
|
||||||
@@ -58,19 +68,19 @@ foreach (@ARGV) {
|
|||||||
exit 0;
|
exit 0;
|
||||||
} elsif (/^-newcert$/) {
|
} elsif (/^-newcert$/) {
|
||||||
# create a certificate
|
# create a certificate
|
||||||
system ("$REQ -new -x509 -keyout newreq.pem -out newreq.pem $DAYS");
|
system ("$REQ -new -x509 -keyout newkey.pem -out newcert.pem $DAYS");
|
||||||
$RET=$?;
|
$RET=$?;
|
||||||
print "Certificate (and private key) is in newreq.pem\n"
|
print "Certificate is in newcert.pem, private key is in newkey.pem\n"
|
||||||
} elsif (/^-newreq$/) {
|
} elsif (/^-newreq$/) {
|
||||||
# create a certificate request
|
# create a certificate request
|
||||||
system ("$REQ -new -keyout newreq.pem -out newreq.pem $DAYS");
|
system ("$REQ -new -keyout newkey.pem -out newreq.pem $DAYS");
|
||||||
$RET=$?;
|
$RET=$?;
|
||||||
print "Request (and private key) is in newreq.pem\n";
|
print "Request is in newreq.pem, private key is in newkey.pem\n";
|
||||||
} elsif (/^-newreq-nodes$/) {
|
} elsif (/^-newreq-nodes$/) {
|
||||||
# create a certificate request
|
# create a certificate request
|
||||||
system ("$REQ -new -nodes -keyout newreq.pem -out newreq.pem $DAYS");
|
system ("$REQ -new -nodes -keyout newkey.pem -out newreq.pem $DAYS");
|
||||||
$RET=$?;
|
$RET=$?;
|
||||||
print "Request (and private key) is in newreq.pem\n";
|
print "Request is in newreq.pem, private key is in newkey.pem\n";
|
||||||
} elsif (/^-newca$/) {
|
} elsif (/^-newca$/) {
|
||||||
# if explicitly asked for or it doesn't exist then setup the
|
# if explicitly asked for or it doesn't exist then setup the
|
||||||
# directory structure that Eric likes to manage things
|
# directory structure that Eric likes to manage things
|
||||||
@@ -84,6 +94,9 @@ foreach (@ARGV) {
|
|||||||
mkdir "${CATOP}/private", $DIRMODE;
|
mkdir "${CATOP}/private", $DIRMODE;
|
||||||
open OUT, ">${CATOP}/index.txt";
|
open OUT, ">${CATOP}/index.txt";
|
||||||
close OUT;
|
close OUT;
|
||||||
|
open OUT, ">${CATOP}/crlnumber";
|
||||||
|
print OUT "01\n";
|
||||||
|
close OUT;
|
||||||
}
|
}
|
||||||
if ( ! -f "${CATOP}/private/$CAKEY" ) {
|
if ( ! -f "${CATOP}/private/$CAKEY" ) {
|
||||||
print "CA certificate filename (or enter to create)\n";
|
print "CA certificate filename (or enter to create)\n";
|
||||||
@@ -98,22 +111,24 @@ foreach (@ARGV) {
|
|||||||
$RET=$?;
|
$RET=$?;
|
||||||
} else {
|
} else {
|
||||||
print "Making CA certificate ...\n";
|
print "Making CA certificate ...\n";
|
||||||
system ("$REQ -new -x509 -keyout " .
|
system ("$REQ -new -keyout " .
|
||||||
"${CATOP}/private/$CAKEY -out ${CATOP}/$CACERT $DAYS");
|
"${CATOP}/private/$CAKEY -out ${CATOP}/$CAREQ");
|
||||||
|
system ("$CA -create_serial " .
|
||||||
|
"-out ${CATOP}/$CACERT $CADAYS -batch " .
|
||||||
|
"-keyfile ${CATOP}/private/$CAKEY -selfsign " .
|
||||||
|
"-extensions v3_ca " .
|
||||||
|
"-infiles ${CATOP}/$CAREQ ");
|
||||||
$RET=$?;
|
$RET=$?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (! -f "${CATOP}/serial" ) {
|
|
||||||
system ("$X509 -in ${CATOP}/$CACERT -noout "
|
|
||||||
. "-next_serial -out ${CATOP}/serial");
|
|
||||||
}
|
|
||||||
} elsif (/^-pkcs12$/) {
|
} elsif (/^-pkcs12$/) {
|
||||||
my $cname = $ARGV[1];
|
my $cname = $ARGV[1];
|
||||||
$cname = "My Certificate" unless defined $cname;
|
$cname = "My Certificate" unless defined $cname;
|
||||||
system ("$PKCS12 -in newcert.pem -inkey newreq.pem " .
|
system ("$PKCS12 -in newcert.pem -inkey newkey.pem " .
|
||||||
"-certfile ${CATOP}/$CACERT -out newcert.p12 " .
|
"-certfile ${CATOP}/$CACERT -out newcert.p12 " .
|
||||||
"-export -name \"$cname\"");
|
"-export -name \"$cname\"");
|
||||||
$RET=$?;
|
$RET=$?;
|
||||||
|
print "PKCS #12 file is in newcert.p12\n";
|
||||||
exit $RET;
|
exit $RET;
|
||||||
} elsif (/^-xsign$/) {
|
} elsif (/^-xsign$/) {
|
||||||
system ("$CA -policy policy_anything -infiles newreq.pem");
|
system ("$CA -policy policy_anything -infiles newreq.pem");
|
||||||
|
|||||||
120
apps/CA.sh
120
apps/CA.sh
@@ -16,8 +16,8 @@
|
|||||||
# 12-Jan-96 tjh Added more things ... including CA -signcert which
|
# 12-Jan-96 tjh Added more things ... including CA -signcert which
|
||||||
# converts a certificate to a request and then signs it.
|
# converts a certificate to a request and then signs it.
|
||||||
# 10-Jan-96 eay Fixed a few more bugs and added the SSLEAY_CONFIG
|
# 10-Jan-96 eay Fixed a few more bugs and added the SSLEAY_CONFIG
|
||||||
# environment variable so this can be driven from
|
# environment variable so this can be driven from
|
||||||
# a script.
|
# a script.
|
||||||
# 25-Jul-96 eay Cleaned up filenames some more.
|
# 25-Jul-96 eay Cleaned up filenames some more.
|
||||||
# 11-Jun-96 eay Fixed a few filename missmatches.
|
# 11-Jun-96 eay Fixed a few filename missmatches.
|
||||||
# 03-May-96 eay Modified to use 'ssleay cmd' instead of 'cmd'.
|
# 03-May-96 eay Modified to use 'ssleay cmd' instead of 'cmd'.
|
||||||
@@ -29,33 +29,73 @@
|
|||||||
|
|
||||||
# default openssl.cnf file has setup as per the following
|
# default openssl.cnf file has setup as per the following
|
||||||
# demoCA ... where everything is stored
|
# demoCA ... where everything is stored
|
||||||
|
cp_pem() {
|
||||||
|
infile=$1
|
||||||
|
outfile=$2
|
||||||
|
bound=$3
|
||||||
|
flag=0
|
||||||
|
exec <$infile;
|
||||||
|
while read line; do
|
||||||
|
if [ $flag -eq 1 ]; then
|
||||||
|
echo $line|grep "^-----END.*$bound" 2>/dev/null 1>/dev/null
|
||||||
|
if [ $? -eq 0 ] ; then
|
||||||
|
echo $line >>$outfile
|
||||||
|
break
|
||||||
|
else
|
||||||
|
echo $line >>$outfile
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
DAYS="-days 365"
|
echo $line|grep "^-----BEGIN.*$bound" 2>/dev/null 1>/dev/null
|
||||||
REQ="openssl req $SSLEAY_CONFIG"
|
if [ $? -eq 0 ]; then
|
||||||
CA="openssl ca $SSLEAY_CONFIG"
|
echo $line >$outfile
|
||||||
VERIFY="openssl verify"
|
flag=1
|
||||||
X509="openssl x509"
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
CATOP=./demoCA
|
usage() {
|
||||||
|
echo "usage: $0 -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ -z "$OPENSSL" ]; then OPENSSL=openssl; fi
|
||||||
|
|
||||||
|
if [ -z "$DAYS" ] ; then DAYS="-days 365" ; fi # 1 year
|
||||||
|
CADAYS="-days 1095" # 3 years
|
||||||
|
REQ="$OPENSSL req $SSLEAY_CONFIG"
|
||||||
|
CA="$OPENSSL ca $SSLEAY_CONFIG"
|
||||||
|
VERIFY="$OPENSSL verify"
|
||||||
|
X509="$OPENSSL x509"
|
||||||
|
PKCS12="openssl pkcs12"
|
||||||
|
|
||||||
|
if [ -z "$CATOP" ] ; then CATOP=./demoCA ; fi
|
||||||
CAKEY=./cakey.pem
|
CAKEY=./cakey.pem
|
||||||
|
CAREQ=./careq.pem
|
||||||
CACERT=./cacert.pem
|
CACERT=./cacert.pem
|
||||||
|
|
||||||
for i
|
RET=0
|
||||||
do
|
|
||||||
case $i in
|
while [ "$1" != "" ] ; do
|
||||||
|
case $1 in
|
||||||
-\?|-h|-help)
|
-\?|-h|-help)
|
||||||
echo "usage: CA -newcert|-newreq|-newca|-sign|-verify" >&2
|
usage
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
-newcert)
|
-newcert)
|
||||||
# create a certificate
|
# create a certificate
|
||||||
$REQ -new -x509 -keyout newreq.pem -out newreq.pem $DAYS
|
$REQ -new -x509 -keyout newkey.pem -out newcert.pem $DAYS
|
||||||
RET=$?
|
RET=$?
|
||||||
echo "Certificate (and private key) is in newreq.pem"
|
echo "Certificate is in newcert.pem, private key is in newkey.pem"
|
||||||
;;
|
;;
|
||||||
-newreq)
|
-newreq)
|
||||||
# create a certificate request
|
# create a certificate request
|
||||||
$REQ -new -keyout newreq.pem -out newreq.pem $DAYS
|
$REQ -new -keyout newkey.pem -out newreq.pem $DAYS
|
||||||
|
RET=$?
|
||||||
|
echo "Request is in newreq.pem, private key is in newkey.pem"
|
||||||
|
;;
|
||||||
|
-newreq-nodes)
|
||||||
|
# create a certificate request
|
||||||
|
$REQ -new -nodes -keyout newreq.pem -out newreq.pem $DAYS
|
||||||
RET=$?
|
RET=$?
|
||||||
echo "Request (and private key) is in newreq.pem"
|
echo "Request (and private key) is in newreq.pem"
|
||||||
;;
|
;;
|
||||||
@@ -65,12 +105,11 @@ case $i in
|
|||||||
NEW="1"
|
NEW="1"
|
||||||
if [ "$NEW" -o ! -f ${CATOP}/serial ]; then
|
if [ "$NEW" -o ! -f ${CATOP}/serial ]; then
|
||||||
# create the directory hierarchy
|
# create the directory hierarchy
|
||||||
mkdir ${CATOP}
|
mkdir -p ${CATOP}
|
||||||
mkdir ${CATOP}/certs
|
mkdir -p ${CATOP}/certs
|
||||||
mkdir ${CATOP}/crl
|
mkdir -p ${CATOP}/crl
|
||||||
mkdir ${CATOP}/newcerts
|
mkdir -p ${CATOP}/newcerts
|
||||||
mkdir ${CATOP}/private
|
mkdir -p ${CATOP}/private
|
||||||
echo "01" > ${CATOP}/serial
|
|
||||||
touch ${CATOP}/index.txt
|
touch ${CATOP}/index.txt
|
||||||
fi
|
fi
|
||||||
if [ ! -f ${CATOP}/private/$CAKEY ]; then
|
if [ ! -f ${CATOP}/private/$CAKEY ]; then
|
||||||
@@ -79,12 +118,21 @@ case $i in
|
|||||||
|
|
||||||
# ask user for existing CA certificate
|
# ask user for existing CA certificate
|
||||||
if [ "$FILE" ]; then
|
if [ "$FILE" ]; then
|
||||||
cp $FILE ${CATOP}/private/$CAKEY
|
cp_pem $FILE ${CATOP}/private/$CAKEY PRIVATE
|
||||||
|
cp_pem $FILE ${CATOP}/$CACERT CERTIFICATE
|
||||||
RET=$?
|
RET=$?
|
||||||
|
if [ ! -f "${CATOP}/serial" ]; then
|
||||||
|
$X509 -in ${CATOP}/$CACERT -noout -next_serial \
|
||||||
|
-out ${CATOP}/serial
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo "Making CA certificate ..."
|
echo "Making CA certificate ..."
|
||||||
$REQ -new -x509 -keyout ${CATOP}/private/$CAKEY \
|
$REQ -new -keyout ${CATOP}/private/$CAKEY \
|
||||||
-out ${CATOP}/$CACERT $DAYS
|
-out ${CATOP}/$CAREQ
|
||||||
|
$CA -create_serial -out ${CATOP}/$CACERT $CADAYS -batch \
|
||||||
|
-keyfile ${CATOP}/private/$CAKEY -selfsign \
|
||||||
|
-extensions v3_ca \
|
||||||
|
-infiles ${CATOP}/$CAREQ
|
||||||
RET=$?
|
RET=$?
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -93,16 +141,33 @@ case $i in
|
|||||||
$CA -policy policy_anything -infiles newreq.pem
|
$CA -policy policy_anything -infiles newreq.pem
|
||||||
RET=$?
|
RET=$?
|
||||||
;;
|
;;
|
||||||
|
-pkcs12)
|
||||||
|
if [ -z "$2" ] ; then
|
||||||
|
CNAME="My Certificate"
|
||||||
|
else
|
||||||
|
CNAME="$2"
|
||||||
|
fi
|
||||||
|
$PKCS12 -in newcert.pem -inkey newreq.pem -certfile ${CATOP}/$CACERT \
|
||||||
|
-out newcert.p12 -export -name "$CNAME"
|
||||||
|
RET=$?
|
||||||
|
exit $RET
|
||||||
|
;;
|
||||||
-sign|-signreq)
|
-sign|-signreq)
|
||||||
$CA -policy policy_anything -out newcert.pem -infiles newreq.pem
|
$CA -policy policy_anything -out newcert.pem -infiles newreq.pem
|
||||||
RET=$?
|
RET=$?
|
||||||
cat newcert.pem
|
cat newcert.pem
|
||||||
echo "Signed certificate is in newcert.pem"
|
echo "Signed certificate is in newcert.pem"
|
||||||
;;
|
;;
|
||||||
|
-signCA)
|
||||||
|
$CA -policy policy_anything -out newcert.pem -extensions v3_ca -infiles newreq.pem
|
||||||
|
RET=$?
|
||||||
|
echo "Signed CA certificate is in newcert.pem"
|
||||||
|
;;
|
||||||
-signcert)
|
-signcert)
|
||||||
echo "Cert passphrase will be requested twice - bug?"
|
echo "Cert passphrase will be requested twice - bug?"
|
||||||
$X509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem
|
$X509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem
|
||||||
$CA -policy policy_anything -out newcert.pem -infiles tmp.pem
|
$CA -policy policy_anything -out newcert.pem -infiles tmp.pem
|
||||||
|
RET=$?
|
||||||
cat newcert.pem
|
cat newcert.pem
|
||||||
echo "Signed certificate is in newcert.pem"
|
echo "Signed certificate is in newcert.pem"
|
||||||
;;
|
;;
|
||||||
@@ -120,13 +185,14 @@ case $i in
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
exit 0
|
exit $RET
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Unknown arg $i";
|
echo "Unknown arg $i" >&2
|
||||||
|
usage
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
shift
|
||||||
done
|
done
|
||||||
exit $RET
|
exit $RET
|
||||||
|
|
||||||
|
|||||||
1707
apps/Makefile
1707
apps/Makefile
File diff suppressed because it is too large
Load Diff
1585
apps/apps.c
1585
apps/apps.c
File diff suppressed because it is too large
Load Diff
140
apps/apps.h
140
apps/apps.h
@@ -114,9 +114,7 @@
|
|||||||
|
|
||||||
#include "e_os.h"
|
#include "e_os.h"
|
||||||
|
|
||||||
#include <openssl/buffer.h>
|
|
||||||
#include <openssl/bio.h>
|
#include <openssl/bio.h>
|
||||||
#include <openssl/crypto.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>
|
||||||
@@ -124,6 +122,9 @@
|
|||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
#include <openssl/engine.h>
|
#include <openssl/engine.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_OCSP
|
||||||
|
#include <openssl/ocsp.h>
|
||||||
|
#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);
|
||||||
@@ -136,11 +137,6 @@ long app_RAND_load_files(char *file); /* `file' is a list of files to read,
|
|||||||
* (see e_os.h). The string is
|
* (see e_os.h). The string is
|
||||||
* destroyed! */
|
* destroyed! */
|
||||||
|
|
||||||
#ifdef OPENSSL_SYS_WIN32
|
|
||||||
#define rename(from,to) WIN32_rename((from),(to))
|
|
||||||
int WIN32_rename(char *oldname,char *newname);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MONOLITH
|
#ifndef MONOLITH
|
||||||
|
|
||||||
#define MAIN(a,v) main(a,v)
|
#define MAIN(a,v) main(a,v)
|
||||||
@@ -162,7 +158,9 @@ extern BIO *bio_err;
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef OPENSSL_SYS_NETWARE
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef SIGPIPE
|
#ifdef SIGPIPE
|
||||||
#define do_pipe_sig() signal(SIGPIPE,SIG_IGN)
|
#define do_pipe_sig() signal(SIGPIPE,SIG_IGN)
|
||||||
@@ -170,64 +168,49 @@ extern BIO *bio_err;
|
|||||||
#define do_pipe_sig()
|
#define do_pipe_sig()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef OPENSSL_NO_COMP
|
||||||
|
#define zlib_cleanup()
|
||||||
|
#else
|
||||||
|
#define zlib_cleanup() COMP_zlib_cleanup()
|
||||||
|
#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
|
||||||
# if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WIN16) || \
|
# define apps_startup() \
|
||||||
defined(OPENSSL_SYS_WIN32)
|
do { do_pipe_sig(); CRYPTO_malloc_init(); \
|
||||||
# ifdef _O_BINARY
|
|
||||||
# define apps_startup() \
|
|
||||||
do { _fmode=_O_BINARY; 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)
|
||||||
# else
|
|
||||||
# define apps_startup() \
|
|
||||||
do { _fmode=O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
|
|
||||||
ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
|
|
||||||
ENGINE_load_builtin_engines(); setup_ui_method(); } while(0)
|
|
||||||
# endif
|
|
||||||
# else
|
|
||||||
# define apps_startup() \
|
|
||||||
do { do_pipe_sig(); OpenSSL_add_all_algorithms(); \
|
|
||||||
ERR_load_crypto_strings(); ENGINE_load_builtin_engines(); \
|
|
||||||
setup_ui_method(); } while(0)
|
|
||||||
# endif
|
|
||||||
# define apps_shutdown() \
|
# define apps_shutdown() \
|
||||||
do { CONF_modules_unload(1); destroy_ui_method(); \
|
do { CONF_modules_unload(1); destroy_ui_method(); \
|
||||||
EVP_cleanup(); ENGINE_cleanup(); \
|
OBJ_cleanup(); EVP_cleanup(); ENGINE_cleanup(); \
|
||||||
CRYPTO_cleanup_all_ex_data(); ERR_remove_state(0); \
|
CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
|
||||||
ERR_free_strings(); } while(0)
|
RAND_cleanup(); \
|
||||||
|
ERR_free_strings(); zlib_cleanup();} while(0)
|
||||||
# else
|
# else
|
||||||
# if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WIN16) || \
|
# define apps_startup() \
|
||||||
defined(OPENSSL_SYS_WIN32)
|
do { do_pipe_sig(); CRYPTO_malloc_init(); \
|
||||||
# ifdef _O_BINARY
|
|
||||||
# define apps_startup() \
|
|
||||||
do { _fmode=_O_BINARY; 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)
|
||||||
# else
|
|
||||||
# define apps_startup() \
|
|
||||||
do { _fmode=O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
|
|
||||||
ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
|
|
||||||
setup_ui_method(); } while(0)
|
|
||||||
# endif
|
|
||||||
# else
|
|
||||||
# define apps_startup() \
|
|
||||||
do { do_pipe_sig(); OpenSSL_add_all_algorithms(); \
|
|
||||||
ERR_load_crypto_strings(); \
|
|
||||||
setup_ui_method(); } while(0)
|
|
||||||
# endif
|
|
||||||
# define apps_shutdown() \
|
# define apps_shutdown() \
|
||||||
do { CONF_modules_unload(1); destroy_ui_method(); \
|
do { CONF_modules_unload(1); destroy_ui_method(); \
|
||||||
EVP_cleanup(); \
|
OBJ_cleanup(); EVP_cleanup(); \
|
||||||
CRYPTO_cleanup_all_ex_data(); ERR_remove_state(0); \
|
CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
|
||||||
ERR_free_strings(); } while(0)
|
RAND_cleanup(); \
|
||||||
|
ERR_free_strings(); zlib_cleanup(); } while(0)
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef OPENSSL_SYSNAME_WIN32
|
||||||
|
# define openssl_fdset(a,b) FD_SET((unsigned int)a, b)
|
||||||
|
#else
|
||||||
|
# define openssl_fdset(a,b) FD_SET(a, b)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
typedef struct args_st
|
typedef struct args_st
|
||||||
{
|
{
|
||||||
char **data;
|
char **data;
|
||||||
@@ -254,7 +237,7 @@ 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, char *title, X509_NAME *nm, unsigned long lflags);
|
void print_name(BIO *out, const char *title, X509_NAME *nm, unsigned long lflags);
|
||||||
#endif
|
#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);
|
||||||
@@ -270,17 +253,26 @@ 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,
|
||||||
|
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
|
||||||
|
OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req,
|
||||||
|
char *host, char *path, char *port, int use_ssl,
|
||||||
|
STACK_OF(CONF_VALUE) *headers,
|
||||||
|
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, 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
|
||||||
@@ -310,12 +302,40 @@ 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(char *dbfile, char *suffix, CA_DB *db);
|
int save_index(const char *dbfile, const char *suffix, CA_DB *db);
|
||||||
int rotate_index(char *dbfile, char *new_suffix, 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);
|
||||||
int index_name_cmp(const char **a, const char **b);
|
#define index_name_cmp_noconst(a, b) \
|
||||||
|
index_name_cmp((const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, a), \
|
||||||
|
(const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, b))
|
||||||
|
int index_name_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b);
|
||||||
|
int parse_yesno(const char *str, int def);
|
||||||
|
|
||||||
X509_NAME *do_subject(char *str, long chtype);
|
X509_NAME *parse_name(char *str, long chtype, int multirdn);
|
||||||
|
int args_verify(char ***pargs, int *pargc,
|
||||||
|
int *badarg, BIO *err, X509_VERIFY_PARAM **pm);
|
||||||
|
void policies_print(BIO *out, X509_STORE_CTX *ctx);
|
||||||
|
int bio_to_mem(unsigned char **out, int maxlen, BIO *in);
|
||||||
|
int pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value);
|
||||||
|
int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
|
||||||
|
const char *algname, ENGINE *e, int do_param);
|
||||||
|
int do_X509_sign(BIO *err, X509 *x, EVP_PKEY *pkey, const EVP_MD *md,
|
||||||
|
STACK_OF(OPENSSL_STRING) *sigopts);
|
||||||
|
int do_X509_REQ_sign(BIO *err, X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md,
|
||||||
|
STACK_OF(OPENSSL_STRING) *sigopts);
|
||||||
|
int do_X509_CRL_sign(BIO *err, X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md,
|
||||||
|
STACK_OF(OPENSSL_STRING) *sigopts);
|
||||||
|
#ifndef OPENSSL_NO_PSK
|
||||||
|
extern char *psk_key;
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_JPAKE
|
||||||
|
void jpake_client_auth(BIO *out, BIO *conn, const char *secret);
|
||||||
|
void jpake_server_auth(BIO *out, BIO *conn, const char *secret);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
|
||||||
|
unsigned char *next_protos_parse(unsigned short *outlen, const char *in);
|
||||||
|
#endif /* !OPENSSL_NO_TLSEXT && !OPENSSL_NO_NEXTPROTONEG */
|
||||||
|
|
||||||
#define FORMAT_UNDEF 0
|
#define FORMAT_UNDEF 0
|
||||||
#define FORMAT_ASN1 1
|
#define FORMAT_ASN1 1
|
||||||
@@ -327,6 +347,10 @@ X509_NAME *do_subject(char *str, long chtype);
|
|||||||
#define FORMAT_ENGINE 7
|
#define FORMAT_ENGINE 7
|
||||||
#define FORMAT_IISSGC 8 /* XXX this stupid macro helps us to avoid
|
#define FORMAT_IISSGC 8 /* XXX this stupid macro helps us to avoid
|
||||||
* adding yet another param to load_*key() */
|
* 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
|
#define EXT_COPY_NONE 0
|
||||||
#define EXT_COPY_ADD 1
|
#define EXT_COPY_ADD 1
|
||||||
@@ -338,4 +362,14 @@ X509_NAME *do_subject(char *str, long chtype);
|
|||||||
|
|
||||||
#define SERIAL_RAND_BITS 64
|
#define SERIAL_RAND_BITS 64
|
||||||
|
|
||||||
|
int app_isdir(const char *);
|
||||||
|
int raw_read_stdin(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
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
150
apps/asn1pars.c
150
apps/asn1pars.c
@@ -56,7 +56,7 @@
|
|||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* A nice addition from Dr Stephen Henson <shenson@bigfoot.com> to
|
/* A nice addition from Dr Stephen Henson <steve@openssl.org> to
|
||||||
* add the -strparse option which parses nested binary structures
|
* add the -strparse option which parses nested binary structures
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -82,6 +82,8 @@
|
|||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
|
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;
|
||||||
@@ -90,9 +92,11 @@ int MAIN(int argc, char **argv)
|
|||||||
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;
|
||||||
unsigned char *tmpbuf;
|
unsigned char *tmpbuf;
|
||||||
|
const unsigned char *ctmpbuf;
|
||||||
BUF_MEM *buf=NULL;
|
BUF_MEM *buf=NULL;
|
||||||
STACK *osk=NULL;
|
STACK_OF(OPENSSL_STRING) *osk=NULL;
|
||||||
ASN1_TYPE *at=NULL;
|
ASN1_TYPE *at=NULL;
|
||||||
|
|
||||||
informat=FORMAT_PEM;
|
informat=FORMAT_PEM;
|
||||||
@@ -109,7 +113,7 @@ int MAIN(int argc, char **argv)
|
|||||||
prog=argv[0];
|
prog=argv[0];
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
if ((osk=sk_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;
|
||||||
@@ -165,7 +169,17 @@ int MAIN(int argc, char **argv)
|
|||||||
else if (strcmp(*argv,"-strparse") == 0)
|
else if (strcmp(*argv,"-strparse") == 0)
|
||||||
{
|
{
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
sk_push(osk,*(++argv));
|
sk_OPENSSL_STRING_push(osk,*(++argv));
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv,"-genstr") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
genstr= *(++argv);
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv,"-genconf") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
genconf= *(++argv);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -182,7 +196,7 @@ int MAIN(int argc, char **argv)
|
|||||||
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 TXT 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," -out arg output file (output format is always DER\n");
|
BIO_printf(bio_err," -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");
|
||||||
@@ -195,6 +209,8 @@ bad:
|
|||||||
BIO_printf(bio_err," -strparse offset\n");
|
BIO_printf(bio_err," -strparse offset\n");
|
||||||
BIO_printf(bio_err," a series of these can be used to 'dig' into multiple\n");
|
BIO_printf(bio_err," a series of these can be used to 'dig' into multiple\n");
|
||||||
BIO_printf(bio_err," ASN1 blob wrappings\n");
|
BIO_printf(bio_err," ASN1 blob wrappings\n");
|
||||||
|
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;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -248,47 +264,63 @@ bad:
|
|||||||
if ((buf=BUF_MEM_new()) == NULL) goto end;
|
if ((buf=BUF_MEM_new()) == NULL) goto end;
|
||||||
if (!BUF_MEM_grow(buf,BUFSIZ*8)) goto end; /* Pre-allocate :-) */
|
if (!BUF_MEM_grow(buf,BUFSIZ*8)) goto end; /* Pre-allocate :-) */
|
||||||
|
|
||||||
if (informat == FORMAT_PEM)
|
if (genstr || genconf)
|
||||||
{
|
{
|
||||||
BIO *tmp;
|
num = do_generate(bio_err, genstr, genconf, buf);
|
||||||
|
if (num < 0)
|
||||||
if ((b64=BIO_new(BIO_f_base64())) == NULL)
|
{
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
BIO_push(b64,in);
|
}
|
||||||
tmp=in;
|
|
||||||
in=b64;
|
|
||||||
b64=tmp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
num=0;
|
else
|
||||||
for (;;)
|
|
||||||
{
|
{
|
||||||
if (!BUF_MEM_grow(buf,(int)num+BUFSIZ)) goto end;
|
|
||||||
i=BIO_read(in,&(buf->data[num]),BUFSIZ);
|
if (informat == FORMAT_PEM)
|
||||||
if (i <= 0) break;
|
{
|
||||||
num+=i;
|
BIO *tmp;
|
||||||
|
|
||||||
|
if ((b64=BIO_new(BIO_f_base64())) == NULL)
|
||||||
|
goto end;
|
||||||
|
BIO_push(b64,in);
|
||||||
|
tmp=in;
|
||||||
|
in=b64;
|
||||||
|
b64=tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
num=0;
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (!BUF_MEM_grow(buf,(int)num+BUFSIZ)) goto end;
|
||||||
|
i=BIO_read(in,&(buf->data[num]),BUFSIZ);
|
||||||
|
if (i <= 0) 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_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_num(osk); i++)
|
for (i=0; i<sk_OPENSSL_STRING_num(osk); i++)
|
||||||
{
|
{
|
||||||
ASN1_TYPE *atmp;
|
ASN1_TYPE *atmp;
|
||||||
j=atoi(sk_value(osk,i));
|
int typ;
|
||||||
|
j=atoi(sk_OPENSSL_STRING_value(osk,i));
|
||||||
if (j == 0)
|
if (j == 0)
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"'%s' is an invalid number\n",sk_value(osk,i));
|
BIO_printf(bio_err,"'%s' is an invalid number\n",sk_OPENSSL_STRING_value(osk,i));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
tmpbuf+=j;
|
tmpbuf+=j;
|
||||||
tmplen-=j;
|
tmplen-=j;
|
||||||
atmp = at;
|
atmp = at;
|
||||||
at = d2i_ASN1_TYPE(NULL,&tmpbuf,tmplen);
|
ctmpbuf = tmpbuf;
|
||||||
|
at = d2i_ASN1_TYPE(NULL,&ctmpbuf,tmplen);
|
||||||
ASN1_TYPE_free(atmp);
|
ASN1_TYPE_free(atmp);
|
||||||
if(!at)
|
if(!at)
|
||||||
{
|
{
|
||||||
@@ -296,6 +328,15 @@ bad:
|
|||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
typ = ASN1_TYPE_get(at);
|
||||||
|
if ((typ == V_ASN1_OBJECT)
|
||||||
|
|| (typ == V_ASN1_NULL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Can't parse %s type\n",
|
||||||
|
typ == V_ASN1_NULL ? "NULL" : "OBJECT");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
/* hmm... this is a little evil but it works */
|
/* hmm... this is a little evil but it works */
|
||||||
tmpbuf=at->value.asn1_string->data;
|
tmpbuf=at->value.asn1_string->data;
|
||||||
tmplen=at->value.asn1_string->length;
|
tmplen=at->value.asn1_string->length;
|
||||||
@@ -337,9 +378,68 @@ end:
|
|||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
if (buf != NULL) BUF_MEM_free(buf);
|
if (buf != NULL) BUF_MEM_free(buf);
|
||||||
if (at != NULL) ASN1_TYPE_free(at);
|
if (at != NULL) ASN1_TYPE_free(at);
|
||||||
if (osk != NULL) sk_free(osk);
|
if (osk != NULL) sk_OPENSSL_STRING_free(osk);
|
||||||
OBJ_cleanup();
|
OBJ_cleanup();
|
||||||
apps_shutdown();
|
apps_shutdown();
|
||||||
OPENSSL_EXIT(ret);
|
OPENSSL_EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf)
|
||||||
|
{
|
||||||
|
CONF *cnf = NULL;
|
||||||
|
int len;
|
||||||
|
long errline;
|
||||||
|
unsigned char *p;
|
||||||
|
ASN1_TYPE *atyp = NULL;
|
||||||
|
|
||||||
|
if (genconf)
|
||||||
|
{
|
||||||
|
cnf = NCONF_new(NULL);
|
||||||
|
if (!NCONF_load(cnf, genconf, &errline))
|
||||||
|
goto conferr;
|
||||||
|
if (!genstr)
|
||||||
|
genstr = NCONF_get_string(cnf, "default", "asn1");
|
||||||
|
if (!genstr)
|
||||||
|
{
|
||||||
|
BIO_printf(bio, "Can't find 'asn1' in '%s'\n", genconf);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
atyp = ASN1_generate_nconf(genstr, cnf);
|
||||||
|
NCONF_free(cnf);
|
||||||
|
cnf = NULL;
|
||||||
|
|
||||||
|
if (!atyp)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
len = i2d_ASN1_TYPE(atyp, NULL);
|
||||||
|
|
||||||
|
if (len <= 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
if (!BUF_MEM_grow(buf,len))
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
p=(unsigned char *)buf->data;
|
||||||
|
|
||||||
|
i2d_ASN1_TYPE(atyp, &p);
|
||||||
|
|
||||||
|
ASN1_TYPE_free(atyp);
|
||||||
|
return len;
|
||||||
|
|
||||||
|
conferr:
|
||||||
|
|
||||||
|
if (errline > 0)
|
||||||
|
BIO_printf(bio, "Error on line %ld of config file '%s'\n",
|
||||||
|
errline, genconf);
|
||||||
|
else
|
||||||
|
BIO_printf(bio, "Error loading config file '%s'\n", genconf);
|
||||||
|
|
||||||
|
err:
|
||||||
|
NCONF_free(cnf);
|
||||||
|
ASN1_TYPE_free(atyp);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -69,9 +69,10 @@
|
|||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG ciphers_main
|
#define PROG ciphers_main
|
||||||
|
|
||||||
static char *ciphers_usage[]={
|
static const char *ciphers_usage[]={
|
||||||
"usage: ciphers args\n",
|
"usage: ciphers args\n",
|
||||||
" -v - verbose mode, a textual listing of the ciphers in SSLeay\n",
|
" -v - verbose mode, a textual listing of the SSL/TLS ciphers in OpenSSL\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",
|
||||||
@@ -83,14 +84,14 @@ 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;
|
int verbose=0,Verbose=0;
|
||||||
char **pp;
|
const char **pp;
|
||||||
const char *p;
|
const char *p;
|
||||||
int badops=0;
|
int badops=0;
|
||||||
SSL_CTX *ctx=NULL;
|
SSL_CTX *ctx=NULL;
|
||||||
SSL *ssl=NULL;
|
SSL *ssl=NULL;
|
||||||
char *ciphers=NULL;
|
char *ciphers=NULL;
|
||||||
SSL_METHOD *meth=NULL;
|
const SSL_METHOD *meth=NULL;
|
||||||
STACK_OF(SSL_CIPHER) *sk;
|
STACK_OF(SSL_CIPHER) *sk;
|
||||||
char buf[512];
|
char buf[512];
|
||||||
BIO *STDout=NULL;
|
BIO *STDout=NULL;
|
||||||
@@ -114,6 +115,8 @@ int MAIN(int argc, char **argv)
|
|||||||
STDout = BIO_push(tmpbio, STDout);
|
STDout = BIO_push(tmpbio, STDout);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (!load_config(bio_err, NULL))
|
||||||
|
goto end;
|
||||||
|
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
@@ -121,6 +124,8 @@ int MAIN(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
if (strcmp(*argv,"-v") == 0)
|
if (strcmp(*argv,"-v") == 0)
|
||||||
verbose=1;
|
verbose=1;
|
||||||
|
else if (strcmp(*argv,"-V") == 0)
|
||||||
|
verbose=Verbose=1;
|
||||||
#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();
|
||||||
@@ -179,15 +184,33 @@ int MAIN(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
BIO_printf(STDout,"\n");
|
BIO_printf(STDout,"\n");
|
||||||
}
|
}
|
||||||
else
|
else /* verbose */
|
||||||
{
|
{
|
||||||
sk=SSL_get_ciphers(ssl);
|
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++)
|
||||||
{
|
{
|
||||||
BIO_puts(STDout,SSL_CIPHER_description(
|
SSL_CIPHER *c;
|
||||||
sk_SSL_CIPHER_value(sk,i),
|
|
||||||
buf,sizeof buf));
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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-----
|
||||||
|
|||||||
1397
apps/cms.c
Normal file
1397
apps/cms.c
Normal file
File diff suppressed because it is too large
Load Diff
33
apps/crl.c
33
apps/crl.c
@@ -72,7 +72,7 @@
|
|||||||
#undef POSTFIX
|
#undef POSTFIX
|
||||||
#define POSTFIX ".rvk"
|
#define POSTFIX ".rvk"
|
||||||
|
|
||||||
static 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",
|
||||||
@@ -85,6 +85,7 @@ static char *crl_usage[]={
|
|||||||
" -issuer - print issuer DN\n",
|
" -issuer - print issuer DN\n",
|
||||||
" -lastupdate - lastUpdate field\n",
|
" -lastupdate - lastUpdate field\n",
|
||||||
" -nextupdate - nextUpdate field\n",
|
" -nextupdate - nextUpdate field\n",
|
||||||
|
" -crlnumber - print CRL number\n",
|
||||||
" -noout - no CRL output\n",
|
" -noout - no CRL output\n",
|
||||||
" -CAfile name - verify CRL using certificates in file \"name\"\n",
|
" -CAfile name - verify CRL using certificates in file \"name\"\n",
|
||||||
" -CApath dir - verify CRL using certificates in \"dir\"\n",
|
" -CApath dir - verify CRL using certificates in \"dir\"\n",
|
||||||
@@ -107,15 +108,15 @@ int MAIN(int argc, char **argv)
|
|||||||
int informat,outformat;
|
int informat,outformat;
|
||||||
char *infile=NULL,*outfile=NULL;
|
char *infile=NULL,*outfile=NULL;
|
||||||
int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0;
|
int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0;
|
||||||
int fingerprint = 0;
|
int fingerprint = 0, crlnumber = 0;
|
||||||
char **pp;
|
const char **pp;
|
||||||
X509_STORE *store = NULL;
|
X509_STORE *store = NULL;
|
||||||
X509_STORE_CTX ctx;
|
X509_STORE_CTX ctx;
|
||||||
X509_LOOKUP *lookup = NULL;
|
X509_LOOKUP *lookup = NULL;
|
||||||
X509_OBJECT xobj;
|
X509_OBJECT xobj;
|
||||||
EVP_PKEY *pkey;
|
EVP_PKEY *pkey;
|
||||||
int do_ver = 0;
|
int do_ver = 0;
|
||||||
const EVP_MD *md_alg,*digest=EVP_md5();
|
const EVP_MD *md_alg,*digest=EVP_sha1();
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
@@ -206,6 +207,8 @@ int MAIN(int argc, char **argv)
|
|||||||
noout= ++num;
|
noout= ++num;
|
||||||
else if (strcmp(*argv,"-fingerprint") == 0)
|
else if (strcmp(*argv,"-fingerprint") == 0)
|
||||||
fingerprint= ++num;
|
fingerprint= ++num;
|
||||||
|
else if (strcmp(*argv,"-crlnumber") == 0)
|
||||||
|
crlnumber= ++num;
|
||||||
else if ((md_alg=EVP_get_digestbyname(*argv + 1)))
|
else if ((md_alg=EVP_get_digestbyname(*argv + 1)))
|
||||||
{
|
{
|
||||||
/* ok */
|
/* ok */
|
||||||
@@ -281,7 +284,21 @@ bad:
|
|||||||
{
|
{
|
||||||
print_name(bio_out, "issuer=", X509_CRL_get_issuer(x), nmflag);
|
print_name(bio_out, "issuer=", X509_CRL_get_issuer(x), 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)
|
if (hash == i)
|
||||||
{
|
{
|
||||||
BIO_printf(bio_out,"%08lx\n",
|
BIO_printf(bio_out,"%08lx\n",
|
||||||
@@ -355,7 +372,11 @@ bad:
|
|||||||
|
|
||||||
if (text) X509_CRL_print(out, x);
|
if (text) X509_CRL_print(out, x);
|
||||||
|
|
||||||
if (noout) goto end;
|
if (noout)
|
||||||
|
{
|
||||||
|
ret = 0;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
if (outformat == FORMAT_ASN1)
|
if (outformat == FORMAT_ASN1)
|
||||||
i=(int)i2d_X509_CRL_bio(out,x);
|
i=(int)i2d_X509_CRL_bio(out,x);
|
||||||
|
|||||||
@@ -63,7 +63,6 @@
|
|||||||
#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 "apps.h"
|
#include "apps.h"
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
@@ -93,7 +92,7 @@ int MAIN(int argc, char **argv)
|
|||||||
PKCS7 *p7 = NULL;
|
PKCS7 *p7 = NULL;
|
||||||
PKCS7_SIGNED *p7s = NULL;
|
PKCS7_SIGNED *p7s = NULL;
|
||||||
X509_CRL *crl=NULL;
|
X509_CRL *crl=NULL;
|
||||||
STACK *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;
|
||||||
@@ -141,8 +140,8 @@ int MAIN(int argc, char **argv)
|
|||||||
else if (strcmp(*argv,"-certfile") == 0)
|
else if (strcmp(*argv,"-certfile") == 0)
|
||||||
{
|
{
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
if(!certflst) certflst = sk_new_null();
|
if(!certflst) certflst = sk_OPENSSL_STRING_new_null();
|
||||||
sk_push(certflst,*(++argv));
|
sk_OPENSSL_STRING_push(certflst,*(++argv));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -227,8 +226,8 @@ bad:
|
|||||||
if ((cert_stack=sk_X509_new_null()) == NULL) goto end;
|
if ((cert_stack=sk_X509_new_null()) == NULL) goto end;
|
||||||
p7s->cert=cert_stack;
|
p7s->cert=cert_stack;
|
||||||
|
|
||||||
if(certflst) for(i = 0; i < sk_num(certflst); i++) {
|
if(certflst) for(i = 0; i < sk_OPENSSL_STRING_num(certflst); i++) {
|
||||||
certfile = sk_value(certflst, i);
|
certfile = sk_OPENSSL_STRING_value(certflst, i);
|
||||||
if (add_certs_from_file(cert_stack,certfile) < 0)
|
if (add_certs_from_file(cert_stack,certfile) < 0)
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err, "error loading certificates\n");
|
BIO_printf(bio_err, "error loading certificates\n");
|
||||||
@@ -237,7 +236,7 @@ bad:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sk_free(certflst);
|
sk_OPENSSL_STRING_free(certflst);
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL)
|
||||||
{
|
{
|
||||||
@@ -295,19 +294,12 @@ end:
|
|||||||
*/
|
*/
|
||||||
static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile)
|
static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile)
|
||||||
{
|
{
|
||||||
struct stat st;
|
|
||||||
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;
|
||||||
|
|
||||||
if ((stat(certfile,&st) != 0))
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"unable to load the file, %s\n",certfile);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
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))
|
||||||
{
|
{
|
||||||
|
|||||||
6
apps/demoSRP/srp_verifier.txt
Normal file
6
apps/demoSRP/srp_verifier.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# This is a file that will be filled by the openssl srp routine.
|
||||||
|
# You can initialize the file with additional groups, these are
|
||||||
|
# records starting with a I followed by the g and N values and the id.
|
||||||
|
# The exact values ... you have to dig this out from the source of srp.c
|
||||||
|
# or srp_vfy.c
|
||||||
|
# The last value of an I is used as the default group for new users.
|
||||||
1
apps/demoSRP/srp_verifier.txt.attr
Normal file
1
apps/demoSRP/srp_verifier.txt.attr
Normal file
@@ -0,0 +1 @@
|
|||||||
|
unique_subject = yes
|
||||||
305
apps/der_chop.in
305
apps/der_chop.in
@@ -1,305 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
#
|
|
||||||
# der_chop ... this is one total hack that Eric is really not proud of
|
|
||||||
# so don't look at it and don't ask for support
|
|
||||||
#
|
|
||||||
# The "documentation" for this (i.e. all the comments) are my fault --tjh
|
|
||||||
#
|
|
||||||
# This program takes the "raw" output of derparse/asn1parse and
|
|
||||||
# converts it into tokens and then runs regular expression matches
|
|
||||||
# to try to figure out what to grab to get the things that are needed
|
|
||||||
# and it is possible that this will do the wrong thing as it is a *hack*
|
|
||||||
#
|
|
||||||
# SSLeay 0.5.2+ should have direct read support for x509 (via -inform NET)
|
|
||||||
# [I know ... promises promises :-)]
|
|
||||||
#
|
|
||||||
# To convert a Netscape Certificate:
|
|
||||||
# der_chop < ServerCert.der > cert.pem
|
|
||||||
# To convert a Netscape Key (and encrypt it again to protect it)
|
|
||||||
# rsa -inform NET -in ServerKey.der -des > key.pem
|
|
||||||
#
|
|
||||||
# 23-Apr-96 eay Added the extra ASN.1 string types, I still think this
|
|
||||||
# is an evil hack. If nothing else the parsing should
|
|
||||||
# be relative, not absolute.
|
|
||||||
# 19-Apr-96 tjh hacked (with eay) into 0.5.x format
|
|
||||||
#
|
|
||||||
# Tim Hudson
|
|
||||||
# tjh@cryptsoft.com
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
require 'getopts.pl';
|
|
||||||
|
|
||||||
$debug=0;
|
|
||||||
|
|
||||||
# this was the 0.4.x way of doing things ...
|
|
||||||
$cmd="derparse";
|
|
||||||
$x509_cmd="x509";
|
|
||||||
$crl_cmd="crl";
|
|
||||||
$rc4_cmd="rc4";
|
|
||||||
$md2_cmd="md2";
|
|
||||||
$md4_cmd="md4";
|
|
||||||
$rsa_cmd="rsa -des -inform der ";
|
|
||||||
|
|
||||||
# this was the 0.5.x way of doing things ...
|
|
||||||
$cmd="openssl asn1parse";
|
|
||||||
$x509_cmd="openssl x509";
|
|
||||||
$crl_cmd="openssl crl";
|
|
||||||
$rc4_cmd="openssl rc4";
|
|
||||||
$md2_cmd="openssl md2";
|
|
||||||
$md4_cmd="openssl md4";
|
|
||||||
$rsa_cmd="openssl rsa -des -inform der ";
|
|
||||||
|
|
||||||
&Getopts('vd:') || die "usage:$0 [-v] [-d num] file";
|
|
||||||
$depth=($opt_d =~ /^\d+$/)?$opt_d:0;
|
|
||||||
|
|
||||||
&init_der();
|
|
||||||
|
|
||||||
if ($#ARGV != -1)
|
|
||||||
{
|
|
||||||
foreach $file (@ARGV)
|
|
||||||
{
|
|
||||||
print STDERR "doing $file\n";
|
|
||||||
&dofile($file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$file="/tmp/a$$.DER";
|
|
||||||
open(OUT,">$file") || die "unable to open $file:$!\n";
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
$i=sysread(STDIN,$b,1024*10);
|
|
||||||
last if ($i <= 0);
|
|
||||||
$i=syswrite(OUT,$b,$i);
|
|
||||||
}
|
|
||||||
&dofile($file);
|
|
||||||
unlink($file);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub dofile
|
|
||||||
{
|
|
||||||
local($file)=@_;
|
|
||||||
local(@p);
|
|
||||||
|
|
||||||
$b=&load_file($file);
|
|
||||||
@p=&load_file_parse($file);
|
|
||||||
|
|
||||||
foreach $_ (@p)
|
|
||||||
{
|
|
||||||
($off,$d,$hl,$len)=&parse_line($_);
|
|
||||||
$d-=$depth;
|
|
||||||
next if ($d != 0);
|
|
||||||
next if ($len == 0);
|
|
||||||
|
|
||||||
$o=substr($b,$off,$len+$hl);
|
|
||||||
($str,@data)=&der_str($o);
|
|
||||||
print "$str\n" if ($opt_v);
|
|
||||||
if ($str =~ /^$crl/)
|
|
||||||
{
|
|
||||||
open(OUT,"|$crl_cmd -inform d -hash -issuer") ||
|
|
||||||
die "unable to run $crl_cmd:$!\n";
|
|
||||||
print OUT $o;
|
|
||||||
close(OUT);
|
|
||||||
}
|
|
||||||
elsif ($str =~ /^$x509/)
|
|
||||||
{
|
|
||||||
open(OUT,"|$x509_cmd -inform d -hash -subject -issuer")
|
|
||||||
|| die "unable to run $x509_cmd:$!\n";
|
|
||||||
print OUT $o;
|
|
||||||
close(OUT);
|
|
||||||
}
|
|
||||||
elsif ($str =~ /^$rsa/)
|
|
||||||
{
|
|
||||||
($type)=($data[3] =~ /OBJECT_IDENTIFIER :(.*)\s*$/);
|
|
||||||
next unless ($type eq "rsaEncryption");
|
|
||||||
($off,$d,$hl,$len)=&parse_line($data[5]);
|
|
||||||
$os=substr($o,$off+$hl,$len);
|
|
||||||
open(OUT,"|$rsa_cmd")
|
|
||||||
|| die "unable to run $rsa_cmd:$!\n";
|
|
||||||
print OUT $os;
|
|
||||||
close(OUT);
|
|
||||||
}
|
|
||||||
elsif ($str =~ /^0G-1D-1G/)
|
|
||||||
{
|
|
||||||
($off,$d,$hl,$len)=&parse_line($data[1]);
|
|
||||||
$os=substr($o,$off+$hl,$len);
|
|
||||||
print STDERR "<$os>\n" if $opt_v;
|
|
||||||
&do_certificate($o,@data)
|
|
||||||
if (($os eq "certificate") &&
|
|
||||||
($str =! /^0G-1D-1G-2G-3F-3E-2D/));
|
|
||||||
&do_private_key($o,@data)
|
|
||||||
if (($os eq "private-key") &&
|
|
||||||
($str =! /^0G-1D-1G-2G-3F-3E-2D/));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub der_str
|
|
||||||
{
|
|
||||||
local($str)=@_;
|
|
||||||
local(*OUT,*IN,@a,$t,$d,$ret);
|
|
||||||
local($file)="/tmp/b$$.DER";
|
|
||||||
local(@ret);
|
|
||||||
|
|
||||||
open(OUT,">$file");
|
|
||||||
print OUT $str;
|
|
||||||
close(OUT);
|
|
||||||
open(IN,"$cmd -inform 'd' -in $file |") ||
|
|
||||||
die "unable to run $cmd:$!\n";
|
|
||||||
$ret="";
|
|
||||||
while (<IN>)
|
|
||||||
{
|
|
||||||
chop;
|
|
||||||
push(@ret,$_);
|
|
||||||
|
|
||||||
print STDERR "$_\n" if ($debug);
|
|
||||||
|
|
||||||
@a=split(/\s*:\s*/);
|
|
||||||
($d)=($a[1] =~ /d=\s*(\d+)/);
|
|
||||||
$a[2] =~ s/\s+$//;
|
|
||||||
$t=$DER_s2i{$a[2]};
|
|
||||||
$ret.="$d$t-";
|
|
||||||
}
|
|
||||||
close(IN);
|
|
||||||
unlink($file);
|
|
||||||
chop $ret;
|
|
||||||
$ret =~ s/(-3H(-4G-5F-5[IJKMQRS])+)+/-NAME/g;
|
|
||||||
$ret =~ s/(-3G-4B-4L)+/-RCERT/g;
|
|
||||||
return($ret,@ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub init_der
|
|
||||||
{
|
|
||||||
$crl= "0G-1G-2G-3F-3E-2G-NAME-2L-2L-2G-RCERT-1G-2F-2E-1C";
|
|
||||||
$x509="0G-1G-2B-2G-3F-3E-2G-NAME-2G-3L-3L-2G-NAME-2G-3G-4F-4E-3C-1G-2F-2E-1C";
|
|
||||||
$rsa= "0G-1B-1G-2F-2E-1D";
|
|
||||||
|
|
||||||
%DER_i2s=(
|
|
||||||
# SSLeay 0.4.x has this list
|
|
||||||
"A","EOC",
|
|
||||||
"B","INTEGER",
|
|
||||||
"C","BIT STRING",
|
|
||||||
"D","OCTET STRING",
|
|
||||||
"E","NULL",
|
|
||||||
"F","OBJECT",
|
|
||||||
"G","SEQUENCE",
|
|
||||||
"H","SET",
|
|
||||||
"I","PRINTABLESTRING",
|
|
||||||
"J","T61STRING",
|
|
||||||
"K","IA5STRING",
|
|
||||||
"L","UTCTIME",
|
|
||||||
"M","NUMERICSTRING",
|
|
||||||
"N","VIDEOTEXSTRING",
|
|
||||||
"O","GENERALIZEDTIME",
|
|
||||||
"P","GRAPHICSTRING",
|
|
||||||
"Q","ISO64STRING",
|
|
||||||
"R","GENERALSTRING",
|
|
||||||
"S","UNIVERSALSTRING",
|
|
||||||
|
|
||||||
# SSLeay 0.5.x changed some things ... and I'm
|
|
||||||
# leaving in the old stuff but adding in these
|
|
||||||
# to handle the new as well --tjh
|
|
||||||
# - Well I've just taken them out and added the extra new
|
|
||||||
# ones :-) - eay
|
|
||||||
);
|
|
||||||
|
|
||||||
foreach (keys %DER_i2s)
|
|
||||||
{ $DER_s2i{$DER_i2s{$_}}=$_; }
|
|
||||||
}
|
|
||||||
|
|
||||||
sub parse_line
|
|
||||||
{
|
|
||||||
local($_)=@_;
|
|
||||||
|
|
||||||
return(/\s*(\d+):d=\s*(\d+)\s+hl=\s*(\d+)\s+l=\s*(\d+|inf)\s/);
|
|
||||||
}
|
|
||||||
|
|
||||||
# 0:d=0 hl=4 l=377 cons: univ: SEQUENCE
|
|
||||||
# 4:d=1 hl=2 l= 11 prim: univ: OCTET_STRING
|
|
||||||
# 17:d=1 hl=4 l=360 cons: univ: SEQUENCE
|
|
||||||
# 21:d=2 hl=2 l= 12 cons: univ: SEQUENCE
|
|
||||||
# 23:d=3 hl=2 l= 8 prim: univ: OBJECT_IDENTIFIER :rc4
|
|
||||||
# 33:d=3 hl=2 l= 0 prim: univ: NULL
|
|
||||||
# 35:d=2 hl=4 l=342 prim: univ: OCTET_STRING
|
|
||||||
sub do_private_key
|
|
||||||
{
|
|
||||||
local($data,@struct)=@_;
|
|
||||||
local($file)="/tmp/b$$.DER";
|
|
||||||
local($off,$d,$hl,$len,$_,$b,@p,$s);
|
|
||||||
|
|
||||||
($type)=($struct[4] =~ /OBJECT_IDENTIFIER :(.*)\s*$/);
|
|
||||||
if ($type eq "rc4")
|
|
||||||
{
|
|
||||||
($off,$d,$hl,$len)=&parse_line($struct[6]);
|
|
||||||
open(OUT,"|$rc4_cmd >$file") ||
|
|
||||||
die "unable to run $rc4_cmd:$!\n";
|
|
||||||
print OUT substr($data,$off+$hl,$len);
|
|
||||||
close(OUT);
|
|
||||||
|
|
||||||
$b=&load_file($file);
|
|
||||||
unlink($file);
|
|
||||||
|
|
||||||
($s,@p)=&der_str($b);
|
|
||||||
die "unknown rsa key type\n$s\n"
|
|
||||||
if ($s ne '0G-1B-1G-2F-2E-1D');
|
|
||||||
local($off,$d,$hl,$len)=&parse_line($p[5]);
|
|
||||||
$b=substr($b,$off+$hl,$len);
|
|
||||||
($s,@p)=&der_str($b);
|
|
||||||
open(OUT,"|$rsa_cmd") || die "unable to run $rsa_cmd:$!\n";
|
|
||||||
print OUT $b;
|
|
||||||
close(OUT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print "'$type' is unknown\n";
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub do_certificate
|
|
||||||
{
|
|
||||||
local($data,@struct)=@_;
|
|
||||||
local($file)="/tmp/b$$.DER";
|
|
||||||
local($off,$d,$hl,$len,$_,$b,@p,$s);
|
|
||||||
|
|
||||||
($off,$d,$hl,$len)=&parse_line($struct[2]);
|
|
||||||
$b=substr($data,$off,$len+$hl);
|
|
||||||
|
|
||||||
open(OUT,"|$x509_cmd -inform d") || die "unable to run $x509_cmd:$!\n";
|
|
||||||
print OUT $b;
|
|
||||||
close(OUT);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub load_file
|
|
||||||
{
|
|
||||||
local($file)=@_;
|
|
||||||
local(*IN,$r,$b,$i);
|
|
||||||
|
|
||||||
$r="";
|
|
||||||
open(IN,"<$file") || die "unable to open $file:$!\n";
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
$i=sysread(IN,$b,10240);
|
|
||||||
last if ($i <= 0);
|
|
||||||
$r.=$b;
|
|
||||||
}
|
|
||||||
close(IN);
|
|
||||||
return($r);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub load_file_parse
|
|
||||||
{
|
|
||||||
local($file)=@_;
|
|
||||||
local(*IN,$r,@ret,$_,$i,$n,$b);
|
|
||||||
|
|
||||||
open(IN,"$cmd -inform d -in $file|")
|
|
||||||
|| die "unable to run der_parse\n";
|
|
||||||
while (<IN>)
|
|
||||||
{
|
|
||||||
chop;
|
|
||||||
push(@ret,$_);
|
|
||||||
}
|
|
||||||
return($r,@ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
324
apps/dgst.c
324
apps/dgst.c
@@ -74,11 +74,30 @@
|
|||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG dgst_main
|
#define PROG dgst_main
|
||||||
|
|
||||||
static HMAC_CTX hmac_ctx;
|
|
||||||
|
|
||||||
int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
|
int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
|
||||||
EVP_PKEY *key, unsigned char *sigin, int siglen, const char *title,
|
EVP_PKEY *key, unsigned char *sigin, int siglen,
|
||||||
const char *file,BIO *bmd,const char *hmac_key);
|
const char *sig_name, const char *md_name,
|
||||||
|
const char *file,BIO *bmd);
|
||||||
|
|
||||||
|
static void list_md_fn(const EVP_MD *m,
|
||||||
|
const char *from, const char *to, void *arg)
|
||||||
|
{
|
||||||
|
const char *mname;
|
||||||
|
/* Skip aliases */
|
||||||
|
if (!m)
|
||||||
|
return;
|
||||||
|
mname = OBJ_nid2ln(EVP_MD_type(m));
|
||||||
|
/* Skip shortnames */
|
||||||
|
if (strcmp(from, mname))
|
||||||
|
return;
|
||||||
|
/* Skip clones */
|
||||||
|
if (EVP_MD_flags(m) & EVP_MD_FLAG_PKEY_DIGEST)
|
||||||
|
return;
|
||||||
|
if (strchr(mname, ' '))
|
||||||
|
mname= EVP_MD_name(m);
|
||||||
|
BIO_printf(arg, "-%-14s to use the %s message digest algorithm\n",
|
||||||
|
mname, mname);
|
||||||
|
}
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
@@ -86,12 +105,11 @@ int MAIN(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
ENGINE *e = NULL;
|
ENGINE *e = NULL;
|
||||||
unsigned char *buf=NULL;
|
unsigned char *buf=NULL;
|
||||||
int i,err=0;
|
int i,err=1;
|
||||||
const EVP_MD *md=NULL,*m;
|
const EVP_MD *md=NULL,*m;
|
||||||
BIO *in=NULL,*inp;
|
BIO *in=NULL,*inp;
|
||||||
BIO *bmd=NULL;
|
BIO *bmd=NULL;
|
||||||
BIO *out = NULL;
|
BIO *out = NULL;
|
||||||
const char *name;
|
|
||||||
#define PROG_NAME_SIZE 39
|
#define PROG_NAME_SIZE 39
|
||||||
char pname[PROG_NAME_SIZE+1];
|
char pname[PROG_NAME_SIZE+1];
|
||||||
int separator=0;
|
int separator=0;
|
||||||
@@ -103,10 +121,14 @@ int MAIN(int argc, char **argv)
|
|||||||
EVP_PKEY *sigkey = NULL;
|
EVP_PKEY *sigkey = NULL;
|
||||||
unsigned char *sigbuf = NULL;
|
unsigned char *sigbuf = NULL;
|
||||||
int siglen = 0;
|
int siglen = 0;
|
||||||
|
char *passargin = NULL, *passin = NULL;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine=NULL;
|
char *engine=NULL;
|
||||||
#endif
|
#endif
|
||||||
char *hmac_key=NULL;
|
char *hmac_key=NULL;
|
||||||
|
char *mac_name=NULL;
|
||||||
|
int non_fips_allow = 0;
|
||||||
|
STACK_OF(OPENSSL_STRING) *sigopts = NULL, *macopts = NULL;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
@@ -134,6 +156,8 @@ int MAIN(int argc, char **argv)
|
|||||||
if ((*argv)[0] != '-') break;
|
if ((*argv)[0] != '-') break;
|
||||||
if (strcmp(*argv,"-c") == 0)
|
if (strcmp(*argv,"-c") == 0)
|
||||||
separator=1;
|
separator=1;
|
||||||
|
else if (strcmp(*argv,"-r") == 0)
|
||||||
|
separator=2;
|
||||||
else if (strcmp(*argv,"-rand") == 0)
|
else if (strcmp(*argv,"-rand") == 0)
|
||||||
{
|
{
|
||||||
if (--argc < 1) break;
|
if (--argc < 1) break;
|
||||||
@@ -149,6 +173,12 @@ int MAIN(int argc, char **argv)
|
|||||||
if (--argc < 1) break;
|
if (--argc < 1) break;
|
||||||
keyfile=*(++argv);
|
keyfile=*(++argv);
|
||||||
}
|
}
|
||||||
|
else if (!strcmp(*argv,"-passin"))
|
||||||
|
{
|
||||||
|
if (--argc < 1)
|
||||||
|
break;
|
||||||
|
passargin=*++argv;
|
||||||
|
}
|
||||||
else if (strcmp(*argv,"-verify") == 0)
|
else if (strcmp(*argv,"-verify") == 0)
|
||||||
{
|
{
|
||||||
if (--argc < 1) break;
|
if (--argc < 1) break;
|
||||||
@@ -177,6 +207,7 @@ int MAIN(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
if (--argc < 1) break;
|
if (--argc < 1) break;
|
||||||
engine= *(++argv);
|
engine= *(++argv);
|
||||||
|
e = setup_engine(bio_err, engine, 0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (strcmp(*argv,"-hex") == 0)
|
else if (strcmp(*argv,"-hex") == 0)
|
||||||
@@ -185,12 +216,40 @@ int MAIN(int argc, char **argv)
|
|||||||
out_bin = 1;
|
out_bin = 1;
|
||||||
else if (strcmp(*argv,"-d") == 0)
|
else if (strcmp(*argv,"-d") == 0)
|
||||||
debug=1;
|
debug=1;
|
||||||
|
else if (!strcmp(*argv,"-fips-fingerprint"))
|
||||||
|
hmac_key = "etaonrishdlcupfm";
|
||||||
|
else if (strcmp(*argv,"-non-fips-allow") == 0)
|
||||||
|
non_fips_allow=1;
|
||||||
else if (!strcmp(*argv,"-hmac"))
|
else if (!strcmp(*argv,"-hmac"))
|
||||||
{
|
{
|
||||||
if (--argc < 1)
|
if (--argc < 1)
|
||||||
break;
|
break;
|
||||||
hmac_key=*++argv;
|
hmac_key=*++argv;
|
||||||
}
|
}
|
||||||
|
else if (!strcmp(*argv,"-mac"))
|
||||||
|
{
|
||||||
|
if (--argc < 1)
|
||||||
|
break;
|
||||||
|
mac_name=*++argv;
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv,"-sigopt") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1)
|
||||||
|
break;
|
||||||
|
if (!sigopts)
|
||||||
|
sigopts = sk_OPENSSL_STRING_new_null();
|
||||||
|
if (!sigopts || !sk_OPENSSL_STRING_push(sigopts, *(++argv)))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv,"-macopt") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1)
|
||||||
|
break;
|
||||||
|
if (!macopts)
|
||||||
|
macopts = sk_OPENSSL_STRING_new_null();
|
||||||
|
if (!macopts || !sk_OPENSSL_STRING_push(macopts, *(++argv)))
|
||||||
|
break;
|
||||||
|
}
|
||||||
else if ((m=EVP_get_digestbyname(&((*argv)[1]))) != NULL)
|
else if ((m=EVP_get_digestbyname(&((*argv)[1]))) != NULL)
|
||||||
md=m;
|
md=m;
|
||||||
else
|
else
|
||||||
@@ -199,12 +258,9 @@ int MAIN(int argc, char **argv)
|
|||||||
argv++;
|
argv++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (md == NULL)
|
|
||||||
md=EVP_md5();
|
|
||||||
|
|
||||||
if(do_verify && !sigfile) {
|
if(do_verify && !sigfile) {
|
||||||
BIO_printf(bio_err, "No signature to verify: use the -signature option\n");
|
BIO_printf(bio_err, "No signature to verify: use the -signature option\n");
|
||||||
err = 1;
|
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,6 +269,7 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO_printf(bio_err,"unknown option '%s'\n",*argv);
|
BIO_printf(bio_err,"unknown option '%s'\n",*argv);
|
||||||
BIO_printf(bio_err,"options are\n");
|
BIO_printf(bio_err,"options are\n");
|
||||||
BIO_printf(bio_err,"-c to output the digest with separating colons\n");
|
BIO_printf(bio_err,"-c to output the digest with separating colons\n");
|
||||||
|
BIO_printf(bio_err,"-r to output the digest in coreutils format\n");
|
||||||
BIO_printf(bio_err,"-d to output debug info\n");
|
BIO_printf(bio_err,"-d to output debug info\n");
|
||||||
BIO_printf(bio_err,"-hex output as hex dump\n");
|
BIO_printf(bio_err,"-hex output as hex dump\n");
|
||||||
BIO_printf(bio_err,"-binary output in binary form\n");
|
BIO_printf(bio_err,"-binary output in binary form\n");
|
||||||
@@ -220,41 +277,33 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO_printf(bio_err,"-verify file verify a signature using public key in file\n");
|
BIO_printf(bio_err,"-verify file verify a signature using public key in file\n");
|
||||||
BIO_printf(bio_err,"-prverify file verify a signature using private key in file\n");
|
BIO_printf(bio_err,"-prverify file verify a signature using private key in file\n");
|
||||||
BIO_printf(bio_err,"-keyform arg key file format (PEM or ENGINE)\n");
|
BIO_printf(bio_err,"-keyform arg key file format (PEM or ENGINE)\n");
|
||||||
|
BIO_printf(bio_err,"-out filename output to filename rather than stdout\n");
|
||||||
BIO_printf(bio_err,"-signature file signature to verify\n");
|
BIO_printf(bio_err,"-signature file signature to verify\n");
|
||||||
BIO_printf(bio_err,"-binary output in binary form\n");
|
BIO_printf(bio_err,"-sigopt nm:v signature parameter\n");
|
||||||
|
BIO_printf(bio_err,"-hmac key create hashed MAC with key\n");
|
||||||
|
BIO_printf(bio_err,"-mac algorithm create MAC (not neccessarily HMAC)\n");
|
||||||
|
BIO_printf(bio_err,"-macopt nm:v MAC algorithm parameters or 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,"-%3s to use the %s message digest algorithm (default)\n",
|
EVP_MD_do_all_sorted(list_md_fn, bio_err);
|
||||||
LN_md5,LN_md5);
|
|
||||||
BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
|
|
||||||
LN_md4,LN_md4);
|
|
||||||
BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
|
|
||||||
LN_md2,LN_md2);
|
|
||||||
BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
|
|
||||||
LN_sha1,LN_sha1);
|
|
||||||
BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
|
|
||||||
LN_sha,LN_sha);
|
|
||||||
BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
|
|
||||||
LN_mdc2,LN_mdc2);
|
|
||||||
BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
|
|
||||||
LN_ripemd160,LN_ripemd160);
|
|
||||||
err=1;
|
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
|
||||||
e = setup_engine(bio_err, engine, 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
in=BIO_new(BIO_s_file());
|
in=BIO_new(BIO_s_file());
|
||||||
bmd=BIO_new(BIO_f_md());
|
bmd=BIO_new(BIO_f_md());
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
BIO_set_callback(in,BIO_debug_callback);
|
BIO_set_callback(in,BIO_debug_callback);
|
||||||
/* needed for windows 3.1 */
|
/* needed for windows 3.1 */
|
||||||
BIO_set_callback_arg(in,bio_err);
|
BIO_set_callback_arg(in,(char *)bio_err);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!app_passwd(bio_err, passargin, NULL, &passin, NULL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Error getting password\n");
|
||||||
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((in == NULL) || (bmd == NULL))
|
if ((in == NULL) || (bmd == NULL))
|
||||||
@@ -264,8 +313,10 @@ int MAIN(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(out_bin == -1) {
|
if(out_bin == -1) {
|
||||||
if(keyfile) out_bin = 1;
|
if(keyfile)
|
||||||
else out_bin = 0;
|
out_bin = 1;
|
||||||
|
else
|
||||||
|
out_bin = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(randfile)
|
if(randfile)
|
||||||
@@ -291,6 +342,11 @@ int MAIN(int argc, char **argv)
|
|||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
if ((!!mac_name + !!keyfile + !!hmac_key) > 1)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "MAC and Signing key cannot both be specified\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
if(keyfile)
|
if(keyfile)
|
||||||
{
|
{
|
||||||
@@ -298,7 +354,7 @@ int MAIN(int argc, char **argv)
|
|||||||
sigkey = load_pubkey(bio_err, keyfile, keyform, 0, NULL,
|
sigkey = load_pubkey(bio_err, keyfile, keyform, 0, NULL,
|
||||||
e, "key file");
|
e, "key file");
|
||||||
else
|
else
|
||||||
sigkey = load_key(bio_err, keyfile, keyform, 0, NULL,
|
sigkey = load_key(bio_err, keyfile, keyform, 0, passin,
|
||||||
e, "key file");
|
e, "key file");
|
||||||
if (!sigkey)
|
if (!sigkey)
|
||||||
{
|
{
|
||||||
@@ -308,6 +364,108 @@ int MAIN(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mac_name)
|
||||||
|
{
|
||||||
|
EVP_PKEY_CTX *mac_ctx = NULL;
|
||||||
|
int r = 0;
|
||||||
|
if (!init_gen_str(bio_err, &mac_ctx, mac_name,e, 0))
|
||||||
|
goto mac_end;
|
||||||
|
if (macopts)
|
||||||
|
{
|
||||||
|
char *macopt;
|
||||||
|
for (i = 0; i < sk_OPENSSL_STRING_num(macopts); i++)
|
||||||
|
{
|
||||||
|
macopt = sk_OPENSSL_STRING_value(macopts, i);
|
||||||
|
if (pkey_ctrl_string(mac_ctx, macopt) <= 0)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
"MAC parameter error \"%s\"\n",
|
||||||
|
macopt);
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto mac_end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (EVP_PKEY_keygen(mac_ctx, &sigkey) <= 0)
|
||||||
|
{
|
||||||
|
BIO_puts(bio_err, "Error generating key\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto mac_end;
|
||||||
|
}
|
||||||
|
r = 1;
|
||||||
|
mac_end:
|
||||||
|
if (mac_ctx)
|
||||||
|
EVP_PKEY_CTX_free(mac_ctx);
|
||||||
|
if (r == 0)
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (non_fips_allow)
|
||||||
|
{
|
||||||
|
EVP_MD_CTX *md_ctx;
|
||||||
|
BIO_get_md_ctx(bmd,&md_ctx);
|
||||||
|
EVP_MD_CTX_set_flags(md_ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hmac_key)
|
||||||
|
{
|
||||||
|
sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, e,
|
||||||
|
(unsigned char *)hmac_key, -1);
|
||||||
|
if (!sigkey)
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sigkey)
|
||||||
|
{
|
||||||
|
EVP_MD_CTX *mctx = NULL;
|
||||||
|
EVP_PKEY_CTX *pctx = NULL;
|
||||||
|
int r;
|
||||||
|
if (!BIO_get_md_ctx(bmd, &mctx))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Error getting context\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (do_verify)
|
||||||
|
r = EVP_DigestVerifyInit(mctx, &pctx, md, e, sigkey);
|
||||||
|
else
|
||||||
|
r = EVP_DigestSignInit(mctx, &pctx, md, e, sigkey);
|
||||||
|
if (!r)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Error setting context\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (sigopts)
|
||||||
|
{
|
||||||
|
char *sigopt;
|
||||||
|
for (i = 0; i < sk_OPENSSL_STRING_num(sigopts); i++)
|
||||||
|
{
|
||||||
|
sigopt = sk_OPENSSL_STRING_value(sigopts, i);
|
||||||
|
if (pkey_ctrl_string(pctx, sigopt) <= 0)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
"parameter error \"%s\"\n",
|
||||||
|
sigopt);
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* we use md as a filter, reading from 'in' */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (md == NULL)
|
||||||
|
md = EVP_md5();
|
||||||
|
if (!BIO_set_md(bmd,md))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Error setting digest %s\n", pname);
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(sigfile && sigkey) {
|
if(sigfile && sigkey) {
|
||||||
BIO *sigbio;
|
BIO *sigbio;
|
||||||
sigbio = BIO_new_file(sigfile, "rb");
|
sigbio = BIO_new_file(sigfile, "rb");
|
||||||
@@ -328,46 +486,51 @@ int MAIN(int argc, char **argv)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we use md as a filter, reading from 'in' */
|
|
||||||
BIO_set_md(bmd,md);
|
|
||||||
inp=BIO_push(bmd,in);
|
inp=BIO_push(bmd,in);
|
||||||
|
|
||||||
|
if (md == NULL)
|
||||||
|
{
|
||||||
|
EVP_MD_CTX *tctx;
|
||||||
|
BIO_get_md_ctx(bmd, &tctx);
|
||||||
|
md = EVP_MD_CTX_md(tctx);
|
||||||
|
}
|
||||||
|
|
||||||
if (argc == 0)
|
if (argc == 0)
|
||||||
{
|
{
|
||||||
BIO_set_fp(in,stdin,BIO_NOCLOSE);
|
BIO_set_fp(in,stdin,BIO_NOCLOSE);
|
||||||
err=do_fp(out, buf,inp,separator, out_bin, sigkey, sigbuf,
|
err=do_fp(out, buf,inp,separator, out_bin, sigkey, sigbuf,
|
||||||
siglen,"","(stdin)",bmd,hmac_key);
|
siglen,NULL,NULL,"stdin",bmd);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
name=OBJ_nid2sn(md->type);
|
const char *md_name = NULL, *sig_name = NULL;
|
||||||
|
if(!out_bin)
|
||||||
|
{
|
||||||
|
if (sigkey)
|
||||||
|
{
|
||||||
|
const EVP_PKEY_ASN1_METHOD *ameth;
|
||||||
|
ameth = EVP_PKEY_get0_asn1(sigkey);
|
||||||
|
if (ameth)
|
||||||
|
EVP_PKEY_asn1_get0_info(NULL, NULL,
|
||||||
|
NULL, NULL, &sig_name, ameth);
|
||||||
|
}
|
||||||
|
md_name = EVP_MD_name(md);
|
||||||
|
}
|
||||||
|
err = 0;
|
||||||
for (i=0; i<argc; i++)
|
for (i=0; i<argc; i++)
|
||||||
{
|
{
|
||||||
char *tmp,*tofree=NULL;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (BIO_read_filename(in,argv[i]) <= 0)
|
if (BIO_read_filename(in,argv[i]) <= 0)
|
||||||
{
|
{
|
||||||
perror(argv[i]);
|
perror(argv[i]);
|
||||||
err++;
|
err++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(!out_bin)
|
|
||||||
{
|
|
||||||
size_t len = strlen(name)+strlen(argv[i])+(hmac_key ? 5 : 0)+5;
|
|
||||||
tmp=tofree=OPENSSL_malloc(len);
|
|
||||||
BIO_snprintf(tmp,len,"%s%s(%s)= ",
|
|
||||||
hmac_key ? "HMAC-" : "",name,argv[i]);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
tmp="";
|
|
||||||
r=do_fp(out,buf,inp,separator,out_bin,sigkey,sigbuf,
|
r=do_fp(out,buf,inp,separator,out_bin,sigkey,sigbuf,
|
||||||
siglen,tmp,argv[i],bmd,hmac_key);
|
siglen,sig_name,md_name, argv[i],bmd);
|
||||||
if(r)
|
if(r)
|
||||||
err=r;
|
err=r;
|
||||||
if(tofree)
|
|
||||||
OPENSSL_free(tofree);
|
|
||||||
(void)BIO_reset(bmd);
|
(void)BIO_reset(bmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -378,8 +541,14 @@ end:
|
|||||||
OPENSSL_free(buf);
|
OPENSSL_free(buf);
|
||||||
}
|
}
|
||||||
if (in != NULL) BIO_free(in);
|
if (in != NULL) BIO_free(in);
|
||||||
|
if (passin)
|
||||||
|
OPENSSL_free(passin);
|
||||||
BIO_free_all(out);
|
BIO_free_all(out);
|
||||||
EVP_PKEY_free(sigkey);
|
EVP_PKEY_free(sigkey);
|
||||||
|
if (sigopts)
|
||||||
|
sk_OPENSSL_STRING_free(sigopts);
|
||||||
|
if (macopts)
|
||||||
|
sk_OPENSSL_STRING_free(macopts);
|
||||||
if(sigbuf) OPENSSL_free(sigbuf);
|
if(sigbuf) OPENSSL_free(sigbuf);
|
||||||
if (bmd != NULL) BIO_free(bmd);
|
if (bmd != NULL) BIO_free(bmd);
|
||||||
apps_shutdown();
|
apps_shutdown();
|
||||||
@@ -387,22 +556,13 @@ end:
|
|||||||
}
|
}
|
||||||
|
|
||||||
int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
|
int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
|
||||||
EVP_PKEY *key, unsigned char *sigin, int siglen, const char *title,
|
EVP_PKEY *key, unsigned char *sigin, int siglen,
|
||||||
const char *file,BIO *bmd,const char *hmac_key)
|
const char *sig_name, const char *md_name,
|
||||||
|
const char *file,BIO *bmd)
|
||||||
{
|
{
|
||||||
unsigned int len;
|
size_t len;
|
||||||
int i;
|
int i;
|
||||||
EVP_MD_CTX *md_ctx;
|
|
||||||
|
|
||||||
if (hmac_key)
|
|
||||||
{
|
|
||||||
EVP_MD *md;
|
|
||||||
|
|
||||||
BIO_get_md(bmd,&md);
|
|
||||||
HMAC_Init(&hmac_ctx,hmac_key,strlen(hmac_key),md);
|
|
||||||
BIO_get_md_ctx(bmd,&md_ctx);
|
|
||||||
BIO_set_md_ctx(bmd,&hmac_ctx.md_ctx);
|
|
||||||
}
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
i=BIO_read(bp,(char *)buf,BUFSIZE);
|
i=BIO_read(bp,(char *)buf,BUFSIZE);
|
||||||
@@ -418,7 +578,7 @@ int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
|
|||||||
{
|
{
|
||||||
EVP_MD_CTX *ctx;
|
EVP_MD_CTX *ctx;
|
||||||
BIO_get_md_ctx(bp, &ctx);
|
BIO_get_md_ctx(bp, &ctx);
|
||||||
i = EVP_VerifyFinal(ctx, sigin, (unsigned int)siglen, key);
|
i = EVP_DigestVerifyFinal(ctx, sigin, (unsigned int)siglen);
|
||||||
if(i > 0)
|
if(i > 0)
|
||||||
BIO_printf(out, "Verified OK\n");
|
BIO_printf(out, "Verified OK\n");
|
||||||
else if(i == 0)
|
else if(i == 0)
|
||||||
@@ -438,26 +598,40 @@ int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
|
|||||||
{
|
{
|
||||||
EVP_MD_CTX *ctx;
|
EVP_MD_CTX *ctx;
|
||||||
BIO_get_md_ctx(bp, &ctx);
|
BIO_get_md_ctx(bp, &ctx);
|
||||||
if(!EVP_SignFinal(ctx, buf, (unsigned int *)&len, key))
|
len = BUFSIZE;
|
||||||
|
if(!EVP_DigestSignFinal(ctx, buf, &len))
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err, "Error Signing Data\n");
|
BIO_printf(bio_err, "Error Signing Data\n");
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(hmac_key)
|
|
||||||
{
|
|
||||||
HMAC_Final(&hmac_ctx,buf,&len);
|
|
||||||
HMAC_CTX_cleanup(&hmac_ctx);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
|
{
|
||||||
len=BIO_gets(bp,(char *)buf,BUFSIZE);
|
len=BIO_gets(bp,(char *)buf,BUFSIZE);
|
||||||
|
if ((int)len <0)
|
||||||
|
{
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(binout) BIO_write(out, buf, len);
|
if(binout) BIO_write(out, buf, len);
|
||||||
|
else if (sep == 2)
|
||||||
|
{
|
||||||
|
for (i=0; i<(int)len; i++)
|
||||||
|
BIO_printf(out, "%02x",buf[i]);
|
||||||
|
BIO_printf(out, " *%s\n", file);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BIO_write(out,title,strlen(title));
|
if (sig_name)
|
||||||
for (i=0; (unsigned int)i<len; i++)
|
BIO_printf(out, "%s-%s(%s)= ", sig_name, md_name, file);
|
||||||
|
else if (md_name)
|
||||||
|
BIO_printf(out, "%s(%s)= ", md_name, file);
|
||||||
|
else
|
||||||
|
BIO_printf(out, "(%s)= ", file);
|
||||||
|
for (i=0; i<(int)len; i++)
|
||||||
{
|
{
|
||||||
if (sep && (i != 0))
|
if (sep && (i != 0))
|
||||||
BIO_printf(out, ":");
|
BIO_printf(out, ":");
|
||||||
@@ -465,10 +639,6 @@ int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
|
|||||||
}
|
}
|
||||||
BIO_printf(out, "\n");
|
BIO_printf(out, "\n");
|
||||||
}
|
}
|
||||||
if (hmac_key)
|
|
||||||
{
|
|
||||||
BIO_set_md_ctx(bmd,md_ctx);
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
12
apps/dh.c
12
apps/dh.c
@@ -57,6 +57,7 @@
|
|||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#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>
|
||||||
@@ -87,9 +88,6 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
|
||||||
ENGINE *e = NULL;
|
|
||||||
#endif
|
|
||||||
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;
|
||||||
@@ -188,7 +186,7 @@ bad:
|
|||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
e = 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());
|
||||||
@@ -348,4 +346,10 @@ end:
|
|||||||
apps_shutdown();
|
apps_shutdown();
|
||||||
OPENSSL_EXIT(ret);
|
OPENSSL_EXIT(ret);
|
||||||
}
|
}
|
||||||
|
#else /* !OPENSSL_NO_DH */
|
||||||
|
|
||||||
|
# if PEDANTIC
|
||||||
|
static void *dummy=&dummy;
|
||||||
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -109,6 +109,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#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>
|
||||||
@@ -142,15 +143,12 @@
|
|||||||
* -C
|
* -C
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void MS_CALLBACK dh_cb(int p, int n, void *arg);
|
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)
|
||||||
{
|
{
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
|
||||||
ENGINE *e = NULL;
|
|
||||||
#endif
|
|
||||||
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
|
||||||
@@ -269,7 +267,7 @@ bad:
|
|||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
e = setup_engine(bio_err, engine, 0);
|
setup_engine(bio_err, engine, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (g && !num)
|
if (g && !num)
|
||||||
@@ -294,6 +292,8 @@ bad:
|
|||||||
|
|
||||||
if(num) {
|
if(num) {
|
||||||
|
|
||||||
|
BN_GENCB cb;
|
||||||
|
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,"warning, not much extra random data, consider using the -rand option\n");
|
BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
|
||||||
@@ -305,12 +305,13 @@ bad:
|
|||||||
#ifndef OPENSSL_NO_DSA
|
#ifndef OPENSSL_NO_DSA
|
||||||
if (dsaparam)
|
if (dsaparam)
|
||||||
{
|
{
|
||||||
DSA *dsa;
|
DSA *dsa = DSA_new();
|
||||||
|
|
||||||
BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
|
BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
|
||||||
dsa = DSA_generate_parameters(num, NULL, 0, NULL, NULL, dh_cb, bio_err);
|
if(!dsa || !DSA_generate_parameters_ex(dsa, num,
|
||||||
if (dsa == NULL)
|
NULL, 0, NULL, NULL, &cb))
|
||||||
{
|
{
|
||||||
|
if(dsa) DSA_free(dsa);
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
@@ -326,11 +327,10 @@ bad:
|
|||||||
else
|
else
|
||||||
#endif
|
#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,"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");
|
BIO_printf(bio_err,"This is going to take a long time\n");
|
||||||
dh=DH_generate_parameters(num,g,dh_cb,bio_err);
|
if(!dh || !DH_generate_parameters_ex(dh, num, g, &cb))
|
||||||
|
|
||||||
if (dh == NULL)
|
|
||||||
{
|
{
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
@@ -534,7 +534,7 @@ end:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* dh_cb is identical to dsa_cb in apps/dsaparam.c */
|
/* dh_cb is identical to dsa_cb in apps/dsaparam.c */
|
||||||
static void MS_CALLBACK dh_cb(int p, int n, void *arg)
|
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
|
||||||
{
|
{
|
||||||
char c='*';
|
char c='*';
|
||||||
|
|
||||||
@@ -542,11 +542,18 @@ static void MS_CALLBACK dh_cb(int p, int n, void *arg)
|
|||||||
if (p == 1) c='+';
|
if (p == 1) c='+';
|
||||||
if (p == 2) c='*';
|
if (p == 2) c='*';
|
||||||
if (p == 3) c='\n';
|
if (p == 3) c='\n';
|
||||||
BIO_write((BIO *)arg,&c,1);
|
BIO_write(cb->arg,&c,1);
|
||||||
(void)BIO_flush((BIO *)arg);
|
(void)BIO_flush(cb->arg);
|
||||||
#ifdef LINT
|
#ifdef LINT
|
||||||
p=n;
|
p=n;
|
||||||
#endif
|
#endif
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else /* !OPENSSL_NO_DH */
|
||||||
|
|
||||||
|
# if PEDANTIC
|
||||||
|
static void *dummy=&dummy;
|
||||||
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
68
apps/dsa.c
68
apps/dsa.c
@@ -56,6 +56,7 @@
|
|||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#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>
|
||||||
@@ -68,6 +69,7 @@
|
|||||||
#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>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG dsa_main
|
#define PROG dsa_main
|
||||||
@@ -82,6 +84,10 @@
|
|||||||
* -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
|
||||||
|
* -camellia192 - encrypt output if PEM format
|
||||||
|
* -camellia256 - 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
|
||||||
*/
|
*/
|
||||||
@@ -90,9 +96,7 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
|
||||||
ENGINE *e = NULL;
|
ENGINE *e = NULL;
|
||||||
#endif
|
|
||||||
int ret=1;
|
int ret=1;
|
||||||
DSA *dsa=NULL;
|
DSA *dsa=NULL;
|
||||||
int i,badops=0;
|
int i,badops=0;
|
||||||
@@ -108,6 +112,8 @@ int MAIN(int argc, char **argv)
|
|||||||
char *passin = NULL, *passout = NULL;
|
char *passin = NULL, *passout = NULL;
|
||||||
int modulus=0;
|
int modulus=0;
|
||||||
|
|
||||||
|
int pvk_encr = 2;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
@@ -167,6 +173,12 @@ int MAIN(int argc, char **argv)
|
|||||||
engine= *(++argv);
|
engine= *(++argv);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
else if (strcmp(*argv,"-pvk-strong") == 0)
|
||||||
|
pvk_encr=2;
|
||||||
|
else if (strcmp(*argv,"-pvk-weak") == 0)
|
||||||
|
pvk_encr=1;
|
||||||
|
else if (strcmp(*argv,"-pvk-none") == 0)
|
||||||
|
pvk_encr=0;
|
||||||
else if (strcmp(*argv,"-noout") == 0)
|
else if (strcmp(*argv,"-noout") == 0)
|
||||||
noout=1;
|
noout=1;
|
||||||
else if (strcmp(*argv,"-text") == 0)
|
else if (strcmp(*argv,"-text") == 0)
|
||||||
@@ -209,6 +221,13 @@ bad:
|
|||||||
#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," encrypt PEM output with cbc aes\n");
|
BIO_printf(bio_err," encrypt PEM output with cbc aes\n");
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
|
BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
|
||||||
|
BIO_printf(bio_err," encrypt PEM output with cbc camellia\n");
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_SEED
|
||||||
|
BIO_printf(bio_err," -seed encrypt PEM output with cbc seed\n");
|
||||||
#endif
|
#endif
|
||||||
BIO_printf(bio_err," -text print the key in text\n");
|
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," -noout don't print key out\n");
|
||||||
@@ -247,16 +266,22 @@ bad:
|
|||||||
}
|
}
|
||||||
|
|
||||||
BIO_printf(bio_err,"read DSA key\n");
|
BIO_printf(bio_err,"read DSA key\n");
|
||||||
if (informat == FORMAT_ASN1) {
|
|
||||||
if(pubin) dsa=d2i_DSA_PUBKEY_bio(in,NULL);
|
|
||||||
else dsa=d2i_DSAPrivateKey_bio(in,NULL);
|
|
||||||
} else if (informat == FORMAT_PEM) {
|
|
||||||
if(pubin) dsa=PEM_read_bio_DSA_PUBKEY(in,NULL, NULL, NULL);
|
|
||||||
else dsa=PEM_read_bio_DSAPrivateKey(in,NULL,NULL,passin);
|
|
||||||
} else
|
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"bad input format specified for key\n");
|
EVP_PKEY *pkey;
|
||||||
goto end;
|
|
||||||
|
if (pubin)
|
||||||
|
pkey = load_pubkey(bio_err, infile, informat, 1,
|
||||||
|
passin, e, "Public Key");
|
||||||
|
else
|
||||||
|
pkey = load_key(bio_err, infile, informat, 1,
|
||||||
|
passin, e, "Private Key");
|
||||||
|
|
||||||
|
if (pkey)
|
||||||
|
{
|
||||||
|
dsa = EVP_PKEY_get1_DSA(pkey);
|
||||||
|
EVP_PKEY_free(pkey);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (dsa == NULL)
|
if (dsa == NULL)
|
||||||
{
|
{
|
||||||
@@ -309,11 +334,24 @@ bad:
|
|||||||
i=PEM_write_bio_DSA_PUBKEY(out,dsa);
|
i=PEM_write_bio_DSA_PUBKEY(out,dsa);
|
||||||
else i=PEM_write_bio_DSAPrivateKey(out,dsa,enc,
|
else i=PEM_write_bio_DSAPrivateKey(out,dsa,enc,
|
||||||
NULL,0,NULL, passout);
|
NULL,0,NULL, passout);
|
||||||
|
#if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_RC4)
|
||||||
|
} else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
|
||||||
|
EVP_PKEY *pk;
|
||||||
|
pk = EVP_PKEY_new();
|
||||||
|
EVP_PKEY_set1_DSA(pk, dsa);
|
||||||
|
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 {
|
} 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 <= 0)
|
||||||
{
|
{
|
||||||
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);
|
||||||
@@ -329,4 +367,10 @@ end:
|
|||||||
apps_shutdown();
|
apps_shutdown();
|
||||||
OPENSSL_EXIT(ret);
|
OPENSSL_EXIT(ret);
|
||||||
}
|
}
|
||||||
|
#else /* !OPENSSL_NO_DSA */
|
||||||
|
|
||||||
|
# if PEDANTIC
|
||||||
|
static void *dummy=&dummy;
|
||||||
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
112
apps/dsaparam.c
112
apps/dsaparam.c
@@ -56,6 +56,13 @@
|
|||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#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 */
|
||||||
|
#ifdef OPENSSL_NO_DEPRECATED
|
||||||
|
#undef OPENSSL_NO_DEPRECATED
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
#ifndef OPENSSL_NO_DSA
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -82,17 +89,28 @@
|
|||||||
* -C
|
* -C
|
||||||
* -noout
|
* -noout
|
||||||
* -genkey
|
* -genkey
|
||||||
|
* #ifdef GENCB_TEST
|
||||||
|
* -timebomb n - interrupt keygen after <n> seconds
|
||||||
|
* #endif
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void MS_CALLBACK dsa_cb(int p, int n, void *arg);
|
#ifdef GENCB_TEST
|
||||||
|
|
||||||
|
static int stop_keygen_flag = 0;
|
||||||
|
|
||||||
|
static void timebomb_sigalarm(int foo)
|
||||||
|
{
|
||||||
|
stop_keygen_flag = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
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)
|
||||||
{
|
{
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
|
||||||
ENGINE *e = NULL;
|
|
||||||
#endif
|
|
||||||
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;
|
||||||
@@ -103,6 +121,9 @@ int MAIN(int argc, char **argv)
|
|||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine=NULL;
|
char *engine=NULL;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef GENCB_TEST
|
||||||
|
int timebomb=0;
|
||||||
|
#endif
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
@@ -149,6 +170,13 @@ int MAIN(int argc, char **argv)
|
|||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
engine = *(++argv);
|
engine = *(++argv);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef GENCB_TEST
|
||||||
|
else if(strcmp(*argv, "-timebomb") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
timebomb = atoi(*(++argv));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (strcmp(*argv,"-text") == 0)
|
else if (strcmp(*argv,"-text") == 0)
|
||||||
text=1;
|
text=1;
|
||||||
@@ -199,6 +227,9 @@ bad:
|
|||||||
BIO_printf(bio_err," -rand files to use for random number input\n");
|
BIO_printf(bio_err," -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," -engine e use engine e, possibly a hardware device.\n");
|
||||||
|
#endif
|
||||||
|
#ifdef GENCB_TEST
|
||||||
|
BIO_printf(bio_err," -timebomb n interrupt keygen after <n> seconds\n");
|
||||||
#endif
|
#endif
|
||||||
BIO_printf(bio_err," number number of bits to use for generating private key\n");
|
BIO_printf(bio_err," number number of bits to use for generating private key\n");
|
||||||
goto end;
|
goto end;
|
||||||
@@ -244,7 +275,7 @@ bad:
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
e = setup_engine(bio_err, engine, 0);
|
setup_engine(bio_err, engine, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (need_rand)
|
if (need_rand)
|
||||||
@@ -257,10 +288,48 @@ bad:
|
|||||||
|
|
||||||
if (numbits > 0)
|
if (numbits > 0)
|
||||||
{
|
{
|
||||||
|
BN_GENCB cb;
|
||||||
|
BN_GENCB_set(&cb, dsa_cb, bio_err);
|
||||||
assert(need_rand);
|
assert(need_rand);
|
||||||
|
dsa = DSA_new();
|
||||||
|
if(!dsa)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"Error allocating DSA object\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
|
BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
|
||||||
BIO_printf(bio_err,"This could take some time\n");
|
BIO_printf(bio_err,"This could take some time\n");
|
||||||
dsa=DSA_generate_parameters(num,NULL,0,NULL,NULL, dsa_cb,bio_err);
|
#ifdef GENCB_TEST
|
||||||
|
if(timebomb > 0)
|
||||||
|
{
|
||||||
|
struct sigaction act;
|
||||||
|
act.sa_handler = timebomb_sigalarm;
|
||||||
|
act.sa_flags = 0;
|
||||||
|
BIO_printf(bio_err,"(though I'll stop it if not done within %d secs)\n",
|
||||||
|
timebomb);
|
||||||
|
if(sigaction(SIGALRM, &act, NULL) != 0)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"Error, couldn't set SIGALRM handler\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
alarm(timebomb);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if(!DSA_generate_parameters_ex(dsa,num,NULL,0,NULL,NULL, &cb))
|
||||||
|
{
|
||||||
|
#ifdef GENCB_TEST
|
||||||
|
if(stop_keygen_flag)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"DSA key generation time-stopped\n");
|
||||||
|
/* This is an asked-for behaviour! */
|
||||||
|
ret = 0;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
BIO_printf(bio_err,"Error, DSA key generation failed\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (informat == FORMAT_ASN1)
|
else if (informat == FORMAT_ASN1)
|
||||||
dsa=d2i_DSAparams_bio(in,NULL);
|
dsa=d2i_DSAparams_bio(in,NULL);
|
||||||
@@ -286,12 +355,10 @@ bad:
|
|||||||
if (C)
|
if (C)
|
||||||
{
|
{
|
||||||
unsigned char *data;
|
unsigned char *data;
|
||||||
int l,len,bits_p,bits_q,bits_g;
|
int l,len,bits_p;
|
||||||
|
|
||||||
len=BN_num_bytes(dsa->p);
|
len=BN_num_bytes(dsa->p);
|
||||||
bits_p=BN_num_bits(dsa->p);
|
bits_p=BN_num_bits(dsa->p);
|
||||||
bits_q=BN_num_bits(dsa->q);
|
|
||||||
bits_g=BN_num_bits(dsa->g);
|
|
||||||
data=(unsigned char *)OPENSSL_malloc(len+20);
|
data=(unsigned char *)OPENSSL_malloc(len+20);
|
||||||
if (data == NULL)
|
if (data == NULL)
|
||||||
{
|
{
|
||||||
@@ -363,13 +430,19 @@ bad:
|
|||||||
|
|
||||||
assert(need_rand);
|
assert(need_rand);
|
||||||
if ((dsakey=DSAparams_dup(dsa)) == NULL) goto end;
|
if ((dsakey=DSAparams_dup(dsa)) == NULL) goto end;
|
||||||
if (!DSA_generate_key(dsakey)) goto end;
|
if (!DSA_generate_key(dsakey))
|
||||||
|
{
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
DSA_free(dsakey);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
if (outformat == FORMAT_ASN1)
|
if (outformat == FORMAT_ASN1)
|
||||||
i=i2d_DSAPrivateKey_bio(out,dsakey);
|
i=i2d_DSAPrivateKey_bio(out,dsakey);
|
||||||
else if (outformat == FORMAT_PEM)
|
else if (outformat == FORMAT_PEM)
|
||||||
i=PEM_write_bio_DSAPrivateKey(out,dsakey,NULL,NULL,0,NULL,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);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
DSA_free(dsakey);
|
DSA_free(dsakey);
|
||||||
@@ -385,7 +458,7 @@ end:
|
|||||||
OPENSSL_EXIT(ret);
|
OPENSSL_EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
|
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb)
|
||||||
{
|
{
|
||||||
char c='*';
|
char c='*';
|
||||||
|
|
||||||
@@ -393,10 +466,21 @@ static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
|
|||||||
if (p == 1) c='+';
|
if (p == 1) c='+';
|
||||||
if (p == 2) c='*';
|
if (p == 2) c='*';
|
||||||
if (p == 3) c='\n';
|
if (p == 3) c='\n';
|
||||||
BIO_write(arg,&c,1);
|
BIO_write(cb->arg,&c,1);
|
||||||
(void)BIO_flush(arg);
|
(void)BIO_flush(cb->arg);
|
||||||
#ifdef LINT
|
#ifdef LINT
|
||||||
p=n;
|
p=n;
|
||||||
#endif
|
#endif
|
||||||
}
|
#ifdef GENCB_TEST
|
||||||
|
if(stop_keygen_flag)
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#else /* !OPENSSL_NO_DSA */
|
||||||
|
|
||||||
|
# if PEDANTIC
|
||||||
|
static void *dummy=&dummy;
|
||||||
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
406
apps/ec.c
Normal file
406
apps/ec.c
Normal file
@@ -0,0 +1,406 @@
|
|||||||
|
/* apps/ec.c */
|
||||||
|
/*
|
||||||
|
* Written by Nils Larsch for the OpenSSL project.
|
||||||
|
*/
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. All advertising materials mentioning features or use of this
|
||||||
|
* software must display the following acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
||||||
|
*
|
||||||
|
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||||
|
* endorse or promote products derived from this software without
|
||||||
|
* prior written permission. For written permission, please contact
|
||||||
|
* openssl-core@openssl.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "OpenSSL"
|
||||||
|
* nor may "OpenSSL" appear in their names without prior written
|
||||||
|
* permission of the OpenSSL Project.
|
||||||
|
*
|
||||||
|
* 6. Redistributions of any form whatsoever must retain the following
|
||||||
|
* acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||||
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT 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 SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This product includes cryptographic software written by Eric Young
|
||||||
|
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||||
|
* Hudson (tjh@cryptsoft.com).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <openssl/opensslconf.h>
|
||||||
|
#ifndef OPENSSL_NO_EC
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "apps.h"
|
||||||
|
#include <openssl/bio.h>
|
||||||
|
#include <openssl/err.h>
|
||||||
|
#include <openssl/evp.h>
|
||||||
|
#include <openssl/pem.h>
|
||||||
|
|
||||||
|
#undef PROG
|
||||||
|
#define PROG ec_main
|
||||||
|
|
||||||
|
/* -inform arg - input format - default PEM (one of DER, NET or PEM)
|
||||||
|
* -outform arg - output format - default PEM
|
||||||
|
* -in arg - input file - default stdin
|
||||||
|
* -out arg - output file - default stdout
|
||||||
|
* -des - encrypt output if PEM format with DES in cbc mode
|
||||||
|
* -text - print a text version
|
||||||
|
* -param_out - print the elliptic curve parameters
|
||||||
|
* -conv_form arg - specifies the point encoding form
|
||||||
|
* -param_enc arg - specifies the parameter encoding
|
||||||
|
*/
|
||||||
|
|
||||||
|
int MAIN(int, char **);
|
||||||
|
|
||||||
|
int MAIN(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int ret = 1;
|
||||||
|
EC_KEY *eckey = NULL;
|
||||||
|
const EC_GROUP *group;
|
||||||
|
int i, badops = 0;
|
||||||
|
const EVP_CIPHER *enc = NULL;
|
||||||
|
BIO *in = NULL, *out = NULL;
|
||||||
|
int informat, outformat, text=0, noout=0;
|
||||||
|
int pubin = 0, pubout = 0, param_out = 0;
|
||||||
|
char *infile, *outfile, *prog, *engine;
|
||||||
|
char *passargin = NULL, *passargout = NULL;
|
||||||
|
char *passin = NULL, *passout = NULL;
|
||||||
|
point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
|
||||||
|
int new_form = 0;
|
||||||
|
int asn1_flag = OPENSSL_EC_NAMED_CURVE;
|
||||||
|
int new_asn1_flag = 0;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
engine = NULL;
|
||||||
|
infile = NULL;
|
||||||
|
outfile = NULL;
|
||||||
|
informat = FORMAT_PEM;
|
||||||
|
outformat = FORMAT_PEM;
|
||||||
|
|
||||||
|
prog = argv[0];
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
|
while (argc >= 1)
|
||||||
|
{
|
||||||
|
if (strcmp(*argv,"-inform") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
informat=str2fmt(*(++argv));
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv,"-outform") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
outformat=str2fmt(*(++argv));
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv,"-in") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
infile= *(++argv);
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv,"-out") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
outfile= *(++argv);
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv,"-passin") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
passargin= *(++argv);
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv,"-passout") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
passargout= *(++argv);
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv, "-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine= *(++argv);
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv, "-noout") == 0)
|
||||||
|
noout = 1;
|
||||||
|
else if (strcmp(*argv, "-text") == 0)
|
||||||
|
text = 1;
|
||||||
|
else if (strcmp(*argv, "-conv_form") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1)
|
||||||
|
goto bad;
|
||||||
|
++argv;
|
||||||
|
new_form = 1;
|
||||||
|
if (strcmp(*argv, "compressed") == 0)
|
||||||
|
form = POINT_CONVERSION_COMPRESSED;
|
||||||
|
else if (strcmp(*argv, "uncompressed") == 0)
|
||||||
|
form = POINT_CONVERSION_UNCOMPRESSED;
|
||||||
|
else if (strcmp(*argv, "hybrid") == 0)
|
||||||
|
form = POINT_CONVERSION_HYBRID;
|
||||||
|
else
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv, "-param_enc") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1)
|
||||||
|
goto bad;
|
||||||
|
++argv;
|
||||||
|
new_asn1_flag = 1;
|
||||||
|
if (strcmp(*argv, "named_curve") == 0)
|
||||||
|
asn1_flag = OPENSSL_EC_NAMED_CURVE;
|
||||||
|
else if (strcmp(*argv, "explicit") == 0)
|
||||||
|
asn1_flag = 0;
|
||||||
|
else
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv, "-param_out") == 0)
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
bad:
|
||||||
|
BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
|
||||||
|
BIO_printf(bio_err, "where options are\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, " -in arg input file\n");
|
||||||
|
BIO_printf(bio_err, " -passin arg input file pass "
|
||||||
|
"phrase source\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, " -engine e use engine e, "
|
||||||
|
"possibly a hardware device.\n");
|
||||||
|
BIO_printf(bio_err, " -des encrypt PEM output, "
|
||||||
|
"instead of 'des' every other \n"
|
||||||
|
" cipher "
|
||||||
|
"supported by OpenSSL can be used\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, " -param_out print the elliptic "
|
||||||
|
"curve parameters\n");
|
||||||
|
BIO_printf(bio_err, " -conv_form arg specifies the "
|
||||||
|
"point conversion form \n");
|
||||||
|
BIO_printf(bio_err, " possible values:"
|
||||||
|
" compressed\n");
|
||||||
|
BIO_printf(bio_err, " "
|
||||||
|
" uncompressed (default)\n");
|
||||||
|
BIO_printf(bio_err, " "
|
||||||
|
" hybrid\n");
|
||||||
|
BIO_printf(bio_err, " -param_enc arg specifies the way"
|
||||||
|
" the ec parameters are encoded\n");
|
||||||
|
BIO_printf(bio_err, " in the asn1 der "
|
||||||
|
"encoding\n");
|
||||||
|
BIO_printf(bio_err, " possible values:"
|
||||||
|
" named_curve (default)\n");
|
||||||
|
BIO_printf(bio_err," "
|
||||||
|
"explicit\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
setup_engine(bio_err, engine, 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if(!app_passwd(bio_err, passargin, passargout, &passin, &passout))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Error getting passwords\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
in = BIO_new(BIO_s_file());
|
||||||
|
out = BIO_new(BIO_s_file());
|
||||||
|
if ((in == NULL) || (out == 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BIO_printf(bio_err, "read EC key\n");
|
||||||
|
if (informat == FORMAT_ASN1)
|
||||||
|
{
|
||||||
|
if (pubin)
|
||||||
|
eckey = d2i_EC_PUBKEY_bio(in, NULL);
|
||||||
|
else
|
||||||
|
eckey = d2i_ECPrivateKey_bio(in, NULL);
|
||||||
|
}
|
||||||
|
else if (informat == FORMAT_PEM)
|
||||||
|
{
|
||||||
|
if (pubin)
|
||||||
|
eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL,
|
||||||
|
NULL);
|
||||||
|
else
|
||||||
|
eckey = PEM_read_bio_ECPrivateKey(in, NULL, NULL,
|
||||||
|
passin);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
group = EC_KEY_get0_group(eckey);
|
||||||
|
|
||||||
|
if (new_form)
|
||||||
|
EC_KEY_set_conv_form(eckey, form);
|
||||||
|
|
||||||
|
if (new_asn1_flag)
|
||||||
|
EC_KEY_set_asn1_flag(eckey, asn1_flag);
|
||||||
|
|
||||||
|
if (text)
|
||||||
|
if (!EC_KEY_print(out, eckey, 0))
|
||||||
|
{
|
||||||
|
perror(outfile);
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (noout)
|
||||||
|
{
|
||||||
|
ret = 0;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
BIO_printf(bio_err, "writing EC key\n");
|
||||||
|
if (outformat == FORMAT_ASN1)
|
||||||
|
{
|
||||||
|
if (param_out)
|
||||||
|
i = i2d_ECPKParameters_bio(out, group);
|
||||||
|
else if (pubin || pubout)
|
||||||
|
i = i2d_EC_PUBKEY_bio(out, eckey);
|
||||||
|
else
|
||||||
|
i = i2d_ECPrivateKey_bio(out, eckey);
|
||||||
|
}
|
||||||
|
else if (outformat == FORMAT_PEM)
|
||||||
|
{
|
||||||
|
if (param_out)
|
||||||
|
i = PEM_write_bio_ECPKParameters(out, group);
|
||||||
|
else if (pubin || pubout)
|
||||||
|
i = PEM_write_bio_EC_PUBKEY(out, eckey);
|
||||||
|
else
|
||||||
|
i = PEM_write_bio_ECPrivateKey(out, eckey, enc,
|
||||||
|
NULL, 0, NULL, passout);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "bad output format specified for "
|
||||||
|
"outfile\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!i)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "unable to write private key\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ret=0;
|
||||||
|
end:
|
||||||
|
if (in)
|
||||||
|
BIO_free(in);
|
||||||
|
if (out)
|
||||||
|
BIO_free_all(out);
|
||||||
|
if (eckey)
|
||||||
|
EC_KEY_free(eckey);
|
||||||
|
if (passin)
|
||||||
|
OPENSSL_free(passin);
|
||||||
|
if (passout)
|
||||||
|
OPENSSL_free(passout);
|
||||||
|
apps_shutdown();
|
||||||
|
OPENSSL_EXIT(ret);
|
||||||
|
}
|
||||||
|
#else /* !OPENSSL_NO_EC */
|
||||||
|
|
||||||
|
# if PEDANTIC
|
||||||
|
static void *dummy=&dummy;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#endif
|
||||||
731
apps/ecparam.c
Normal file
731
apps/ecparam.c
Normal file
@@ -0,0 +1,731 @@
|
|||||||
|
/* apps/ecparam.c */
|
||||||
|
/*
|
||||||
|
* Written by Nils Larsch for the OpenSSL project.
|
||||||
|
*/
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. All advertising materials mentioning features or use of this
|
||||||
|
* software must display the following acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
||||||
|
*
|
||||||
|
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||||
|
* endorse or promote products derived from this software without
|
||||||
|
* prior written permission. For written permission, please contact
|
||||||
|
* openssl-core@openssl.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "OpenSSL"
|
||||||
|
* nor may "OpenSSL" appear in their names without prior written
|
||||||
|
* permission of the OpenSSL Project.
|
||||||
|
*
|
||||||
|
* 6. Redistributions of any form whatsoever must retain the following
|
||||||
|
* acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||||
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT 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 SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This product includes cryptographic software written by Eric Young
|
||||||
|
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||||
|
* Hudson (tjh@cryptsoft.com).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
|
||||||
|
*
|
||||||
|
* Portions of the attached software ("Contribution") are developed by
|
||||||
|
* SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
|
||||||
|
*
|
||||||
|
* The Contribution is licensed pursuant to the OpenSSL open source
|
||||||
|
* license provided above.
|
||||||
|
*
|
||||||
|
* The elliptic curve binary polynomial software is originally written by
|
||||||
|
* Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <openssl/opensslconf.h>
|
||||||
|
#ifndef OPENSSL_NO_EC
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "apps.h"
|
||||||
|
#include <openssl/bio.h>
|
||||||
|
#include <openssl/err.h>
|
||||||
|
#include <openssl/bn.h>
|
||||||
|
#include <openssl/ec.h>
|
||||||
|
#include <openssl/x509.h>
|
||||||
|
#include <openssl/pem.h>
|
||||||
|
|
||||||
|
#undef PROG
|
||||||
|
#define PROG ecparam_main
|
||||||
|
|
||||||
|
/* -inform arg - input format - default PEM (DER or PEM)
|
||||||
|
* -outform arg - output format - default PEM
|
||||||
|
* -in arg - input file - default stdin
|
||||||
|
* -out arg - output file - default stdout
|
||||||
|
* -noout - do not print the ec parameter
|
||||||
|
* -text - print the ec parameters in text form
|
||||||
|
* -check - validate the ec parameters
|
||||||
|
* -C - print a 'C' function creating the parameters
|
||||||
|
* -name arg - use the ec parameters with 'short name' name
|
||||||
|
* -list_curves - prints a list of all currently available curve 'short names'
|
||||||
|
* -conv_form arg - specifies the point conversion form
|
||||||
|
* - possible values: compressed
|
||||||
|
* uncompressed (default)
|
||||||
|
* hybrid
|
||||||
|
* -param_enc arg - specifies the way the ec parameters are encoded
|
||||||
|
* in the asn1 der encoding
|
||||||
|
* possible values: named_curve (default)
|
||||||
|
* explicit
|
||||||
|
* -no_seed - if 'explicit' parameters are choosen do not use the seed
|
||||||
|
* -genkey - generate ec key
|
||||||
|
* -rand file - files to use for random number input
|
||||||
|
* -engine e - use engine e, possibly a hardware device
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
static int ecparam_print_var(BIO *,BIGNUM *,const char *,int,unsigned char *);
|
||||||
|
|
||||||
|
int MAIN(int, char **);
|
||||||
|
|
||||||
|
int MAIN(int argc, char **argv)
|
||||||
|
{
|
||||||
|
EC_GROUP *group = NULL;
|
||||||
|
point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
|
||||||
|
int new_form = 0;
|
||||||
|
int asn1_flag = OPENSSL_EC_NAMED_CURVE;
|
||||||
|
int new_asn1_flag = 0;
|
||||||
|
char *curve_name = NULL, *inrand = NULL;
|
||||||
|
int list_curves = 0, no_seed = 0, check = 0,
|
||||||
|
badops = 0, text = 0, i, need_rand = 0, genkey = 0;
|
||||||
|
char *infile = NULL, *outfile = NULL, *prog;
|
||||||
|
BIO *in = NULL, *out = NULL;
|
||||||
|
int informat, outformat, noout = 0, C = 0, ret = 1;
|
||||||
|
char *engine = NULL;
|
||||||
|
|
||||||
|
BIGNUM *ec_p = NULL, *ec_a = NULL, *ec_b = NULL,
|
||||||
|
*ec_gen = NULL, *ec_order = NULL, *ec_cofactor = NULL;
|
||||||
|
unsigned char *buffer = NULL;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
informat=FORMAT_PEM;
|
||||||
|
outformat=FORMAT_PEM;
|
||||||
|
|
||||||
|
prog=argv[0];
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
|
while (argc >= 1)
|
||||||
|
{
|
||||||
|
if (strcmp(*argv,"-inform") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
informat=str2fmt(*(++argv));
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv,"-outform") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
outformat=str2fmt(*(++argv));
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv,"-in") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
infile= *(++argv);
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv,"-out") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
outfile= *(++argv);
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv,"-text") == 0)
|
||||||
|
text = 1;
|
||||||
|
else if (strcmp(*argv,"-C") == 0)
|
||||||
|
C = 1;
|
||||||
|
else if (strcmp(*argv,"-check") == 0)
|
||||||
|
check = 1;
|
||||||
|
else if (strcmp (*argv, "-name") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1)
|
||||||
|
goto bad;
|
||||||
|
curve_name = *(++argv);
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv, "-list_curves") == 0)
|
||||||
|
list_curves = 1;
|
||||||
|
else if (strcmp(*argv, "-conv_form") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1)
|
||||||
|
goto bad;
|
||||||
|
++argv;
|
||||||
|
new_form = 1;
|
||||||
|
if (strcmp(*argv, "compressed") == 0)
|
||||||
|
form = POINT_CONVERSION_COMPRESSED;
|
||||||
|
else if (strcmp(*argv, "uncompressed") == 0)
|
||||||
|
form = POINT_CONVERSION_UNCOMPRESSED;
|
||||||
|
else if (strcmp(*argv, "hybrid") == 0)
|
||||||
|
form = POINT_CONVERSION_HYBRID;
|
||||||
|
else
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv, "-param_enc") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1)
|
||||||
|
goto bad;
|
||||||
|
++argv;
|
||||||
|
new_asn1_flag = 1;
|
||||||
|
if (strcmp(*argv, "named_curve") == 0)
|
||||||
|
asn1_flag = OPENSSL_EC_NAMED_CURVE;
|
||||||
|
else if (strcmp(*argv, "explicit") == 0)
|
||||||
|
asn1_flag = 0;
|
||||||
|
else
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv, "-no_seed") == 0)
|
||||||
|
no_seed = 1;
|
||||||
|
else if (strcmp(*argv, "-noout") == 0)
|
||||||
|
noout=1;
|
||||||
|
else if (strcmp(*argv,"-genkey") == 0)
|
||||||
|
{
|
||||||
|
genkey=1;
|
||||||
|
need_rand=1;
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv, "-rand") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
inrand= *(++argv);
|
||||||
|
need_rand=1;
|
||||||
|
}
|
||||||
|
else if(strcmp(*argv, "-engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
engine = *(++argv);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
||||||
|
badops=1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (badops)
|
||||||
|
{
|
||||||
|
bad:
|
||||||
|
BIO_printf(bio_err, "%s [options] <infile >outfile\n",prog);
|
||||||
|
BIO_printf(bio_err, "where options are\n");
|
||||||
|
BIO_printf(bio_err, " -inform arg input format - "
|
||||||
|
"default PEM (DER or PEM)\n");
|
||||||
|
BIO_printf(bio_err, " -outform arg output format - "
|
||||||
|
"default PEM\n");
|
||||||
|
BIO_printf(bio_err, " -in arg input file - "
|
||||||
|
"default stdin\n");
|
||||||
|
BIO_printf(bio_err, " -out arg output file - "
|
||||||
|
"default stdout\n");
|
||||||
|
BIO_printf(bio_err, " -noout do not print the "
|
||||||
|
"ec parameter\n");
|
||||||
|
BIO_printf(bio_err, " -text print the ec "
|
||||||
|
"parameters in text form\n");
|
||||||
|
BIO_printf(bio_err, " -check validate the ec "
|
||||||
|
"parameters\n");
|
||||||
|
BIO_printf(bio_err, " -C print a 'C' "
|
||||||
|
"function creating the parameters\n");
|
||||||
|
BIO_printf(bio_err, " -name arg use the "
|
||||||
|
"ec parameters with 'short name' name\n");
|
||||||
|
BIO_printf(bio_err, " -list_curves prints a list of "
|
||||||
|
"all currently available curve 'short names'\n");
|
||||||
|
BIO_printf(bio_err, " -conv_form arg specifies the "
|
||||||
|
"point conversion form \n");
|
||||||
|
BIO_printf(bio_err, " possible values:"
|
||||||
|
" compressed\n");
|
||||||
|
BIO_printf(bio_err, " "
|
||||||
|
" uncompressed (default)\n");
|
||||||
|
BIO_printf(bio_err, " "
|
||||||
|
" hybrid\n");
|
||||||
|
BIO_printf(bio_err, " -param_enc arg specifies the way"
|
||||||
|
" the ec parameters are encoded\n");
|
||||||
|
BIO_printf(bio_err, " in the asn1 der "
|
||||||
|
"encoding\n");
|
||||||
|
BIO_printf(bio_err, " possible values:"
|
||||||
|
" named_curve (default)\n");
|
||||||
|
BIO_printf(bio_err, " "
|
||||||
|
" explicit\n");
|
||||||
|
BIO_printf(bio_err, " -no_seed if 'explicit'"
|
||||||
|
" parameters are choosen do not"
|
||||||
|
" use the seed\n");
|
||||||
|
BIO_printf(bio_err, " -genkey generate ec"
|
||||||
|
" key\n");
|
||||||
|
BIO_printf(bio_err, " -rand file files to use for"
|
||||||
|
" random number input\n");
|
||||||
|
BIO_printf(bio_err, " -engine e use engine e, "
|
||||||
|
"possibly a hardware device\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
|
in=BIO_new(BIO_s_file());
|
||||||
|
out=BIO_new(BIO_s_file());
|
||||||
|
if ((in == NULL) || (out == 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 (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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
setup_engine(bio_err, engine, 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (list_curves)
|
||||||
|
{
|
||||||
|
EC_builtin_curve *curves = NULL;
|
||||||
|
size_t crv_len = 0;
|
||||||
|
size_t n = 0;
|
||||||
|
|
||||||
|
crv_len = EC_get_builtin_curves(NULL, 0);
|
||||||
|
|
||||||
|
curves = OPENSSL_malloc((int)(sizeof(EC_builtin_curve) * crv_len));
|
||||||
|
|
||||||
|
if (curves == NULL)
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
if (!EC_get_builtin_curves(curves, crv_len))
|
||||||
|
{
|
||||||
|
OPENSSL_free(curves);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (n = 0; n < crv_len; n++)
|
||||||
|
{
|
||||||
|
const char *comment;
|
||||||
|
const char *sname;
|
||||||
|
comment = curves[n].comment;
|
||||||
|
sname = OBJ_nid2sn(curves[n].nid);
|
||||||
|
if (comment == NULL)
|
||||||
|
comment = "CURVE DESCRIPTION NOT AVAILABLE";
|
||||||
|
if (sname == NULL)
|
||||||
|
sname = "";
|
||||||
|
|
||||||
|
BIO_printf(out, " %-10s: ", sname);
|
||||||
|
BIO_printf(out, "%s\n", comment);
|
||||||
|
}
|
||||||
|
|
||||||
|
OPENSSL_free(curves);
|
||||||
|
ret = 0;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (curve_name != NULL)
|
||||||
|
{
|
||||||
|
int nid;
|
||||||
|
|
||||||
|
/* workaround for the SECG curve names secp192r1
|
||||||
|
* and secp256r1 (which are the same as the curves
|
||||||
|
* prime192v1 and prime256v1 defined in X9.62)
|
||||||
|
*/
|
||||||
|
if (!strcmp(curve_name, "secp192r1"))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "using curve name prime192v1 "
|
||||||
|
"instead of secp192r1\n");
|
||||||
|
nid = NID_X9_62_prime192v1;
|
||||||
|
}
|
||||||
|
else if (!strcmp(curve_name, "secp256r1"))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "using curve name prime256v1 "
|
||||||
|
"instead of secp256r1\n");
|
||||||
|
nid = NID_X9_62_prime256v1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
nid = OBJ_sn2nid(curve_name);
|
||||||
|
|
||||||
|
if (nid == 0)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "unknown curve name (%s)\n",
|
||||||
|
curve_name);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
group = EC_GROUP_new_by_curve_name(nid);
|
||||||
|
if (group == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "unable to create curve (%s)\n",
|
||||||
|
curve_name);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
EC_GROUP_set_asn1_flag(group, asn1_flag);
|
||||||
|
EC_GROUP_set_point_conversion_form(group, form);
|
||||||
|
}
|
||||||
|
else if (informat == FORMAT_ASN1)
|
||||||
|
{
|
||||||
|
group = d2i_ECPKParameters_bio(in, NULL);
|
||||||
|
}
|
||||||
|
else if (informat == FORMAT_PEM)
|
||||||
|
{
|
||||||
|
group = PEM_read_bio_ECPKParameters(in,NULL,NULL,NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "bad input format specified\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (group == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
"unable to load elliptic curve parameters\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (new_form)
|
||||||
|
EC_GROUP_set_point_conversion_form(group, form);
|
||||||
|
|
||||||
|
if (new_asn1_flag)
|
||||||
|
EC_GROUP_set_asn1_flag(group, asn1_flag);
|
||||||
|
|
||||||
|
if (no_seed)
|
||||||
|
{
|
||||||
|
EC_GROUP_set_seed(group, NULL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text)
|
||||||
|
{
|
||||||
|
if (!ECPKParameters_print(out, group, 0))
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (check)
|
||||||
|
{
|
||||||
|
if (group == NULL)
|
||||||
|
BIO_printf(bio_err, "no elliptic curve parameters\n");
|
||||||
|
BIO_printf(bio_err, "checking elliptic curve parameters: ");
|
||||||
|
if (!EC_GROUP_check(group, NULL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "failed\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
BIO_printf(bio_err, "ok\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (C)
|
||||||
|
{
|
||||||
|
size_t buf_len = 0, tmp_len = 0;
|
||||||
|
const EC_POINT *point;
|
||||||
|
int is_prime, len = 0;
|
||||||
|
const EC_METHOD *meth = EC_GROUP_method_of(group);
|
||||||
|
|
||||||
|
if ((ec_p = BN_new()) == NULL || (ec_a = BN_new()) == NULL ||
|
||||||
|
(ec_b = BN_new()) == NULL || (ec_gen = BN_new()) == NULL ||
|
||||||
|
(ec_order = BN_new()) == NULL ||
|
||||||
|
(ec_cofactor = BN_new()) == NULL )
|
||||||
|
{
|
||||||
|
perror("OPENSSL_malloc");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
is_prime = (EC_METHOD_get_field_type(meth) ==
|
||||||
|
NID_X9_62_prime_field);
|
||||||
|
|
||||||
|
if (is_prime)
|
||||||
|
{
|
||||||
|
if (!EC_GROUP_get_curve_GFp(group, ec_p, ec_a,
|
||||||
|
ec_b, NULL))
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* TODO */
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((point = EC_GROUP_get0_generator(group)) == NULL)
|
||||||
|
goto end;
|
||||||
|
if (!EC_POINT_point2bn(group, point,
|
||||||
|
EC_GROUP_get_point_conversion_form(group), ec_gen,
|
||||||
|
NULL))
|
||||||
|
goto end;
|
||||||
|
if (!EC_GROUP_get_order(group, ec_order, NULL))
|
||||||
|
goto end;
|
||||||
|
if (!EC_GROUP_get_cofactor(group, ec_cofactor, NULL))
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
if (!ec_p || !ec_a || !ec_b || !ec_gen ||
|
||||||
|
!ec_order || !ec_cofactor)
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
len = BN_num_bits(ec_order);
|
||||||
|
|
||||||
|
if ((tmp_len = (size_t)BN_num_bytes(ec_p)) > buf_len)
|
||||||
|
buf_len = tmp_len;
|
||||||
|
if ((tmp_len = (size_t)BN_num_bytes(ec_a)) > buf_len)
|
||||||
|
buf_len = tmp_len;
|
||||||
|
if ((tmp_len = (size_t)BN_num_bytes(ec_b)) > buf_len)
|
||||||
|
buf_len = tmp_len;
|
||||||
|
if ((tmp_len = (size_t)BN_num_bytes(ec_gen)) > buf_len)
|
||||||
|
buf_len = tmp_len;
|
||||||
|
if ((tmp_len = (size_t)BN_num_bytes(ec_order)) > buf_len)
|
||||||
|
buf_len = tmp_len;
|
||||||
|
if ((tmp_len = (size_t)BN_num_bytes(ec_cofactor)) > buf_len)
|
||||||
|
buf_len = tmp_len;
|
||||||
|
|
||||||
|
buffer = (unsigned char *)OPENSSL_malloc(buf_len);
|
||||||
|
|
||||||
|
if (buffer == NULL)
|
||||||
|
{
|
||||||
|
perror("OPENSSL_malloc");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
ecparam_print_var(out, ec_p, "ec_p", len, buffer);
|
||||||
|
ecparam_print_var(out, ec_a, "ec_a", len, buffer);
|
||||||
|
ecparam_print_var(out, ec_b, "ec_b", len, buffer);
|
||||||
|
ecparam_print_var(out, ec_gen, "ec_gen", len, buffer);
|
||||||
|
ecparam_print_var(out, ec_order, "ec_order", len, buffer);
|
||||||
|
ecparam_print_var(out, ec_cofactor, "ec_cofactor", len,
|
||||||
|
buffer);
|
||||||
|
|
||||||
|
BIO_printf(out, "\n\n");
|
||||||
|
|
||||||
|
BIO_printf(out, "EC_GROUP *get_ec_group_%d(void)\n\t{\n", len);
|
||||||
|
BIO_printf(out, "\tint ok=0;\n");
|
||||||
|
BIO_printf(out, "\tEC_GROUP *group = NULL;\n");
|
||||||
|
BIO_printf(out, "\tEC_POINT *point = NULL;\n");
|
||||||
|
BIO_printf(out, "\tBIGNUM *tmp_1 = NULL, *tmp_2 = NULL, "
|
||||||
|
"*tmp_3 = NULL;\n\n");
|
||||||
|
BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_p_%d, "
|
||||||
|
"sizeof(ec_p_%d), NULL)) == NULL)\n\t\t"
|
||||||
|
"goto err;\n", len, len);
|
||||||
|
BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_a_%d, "
|
||||||
|
"sizeof(ec_a_%d), NULL)) == NULL)\n\t\t"
|
||||||
|
"goto err;\n", len, len);
|
||||||
|
BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_b_%d, "
|
||||||
|
"sizeof(ec_b_%d), NULL)) == NULL)\n\t\t"
|
||||||
|
"goto err;\n", len, len);
|
||||||
|
if (is_prime)
|
||||||
|
{
|
||||||
|
BIO_printf(out, "\tif ((group = EC_GROUP_new_curve_"
|
||||||
|
"GFp(tmp_1, tmp_2, tmp_3, NULL)) == NULL)"
|
||||||
|
"\n\t\tgoto err;\n\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* TODO */
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(out, "\t/* build generator */\n");
|
||||||
|
BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_gen_%d, "
|
||||||
|
"sizeof(ec_gen_%d), tmp_1)) == NULL)"
|
||||||
|
"\n\t\tgoto err;\n", len, len);
|
||||||
|
BIO_printf(out, "\tpoint = EC_POINT_bn2point(group, tmp_1, "
|
||||||
|
"NULL, NULL);\n");
|
||||||
|
BIO_printf(out, "\tif (point == NULL)\n\t\tgoto err;\n");
|
||||||
|
BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_order_%d, "
|
||||||
|
"sizeof(ec_order_%d), tmp_2)) == NULL)"
|
||||||
|
"\n\t\tgoto err;\n", len, len);
|
||||||
|
BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_cofactor_%d, "
|
||||||
|
"sizeof(ec_cofactor_%d), tmp_3)) == NULL)"
|
||||||
|
"\n\t\tgoto err;\n", len, len);
|
||||||
|
BIO_printf(out, "\tif (!EC_GROUP_set_generator(group, point,"
|
||||||
|
" tmp_2, tmp_3))\n\t\tgoto err;\n");
|
||||||
|
BIO_printf(out, "\n\tok=1;\n");
|
||||||
|
BIO_printf(out, "err:\n");
|
||||||
|
BIO_printf(out, "\tif (tmp_1)\n\t\tBN_free(tmp_1);\n");
|
||||||
|
BIO_printf(out, "\tif (tmp_2)\n\t\tBN_free(tmp_2);\n");
|
||||||
|
BIO_printf(out, "\tif (tmp_3)\n\t\tBN_free(tmp_3);\n");
|
||||||
|
BIO_printf(out, "\tif (point)\n\t\tEC_POINT_free(point);\n");
|
||||||
|
BIO_printf(out, "\tif (!ok)\n");
|
||||||
|
BIO_printf(out, "\t\t{\n");
|
||||||
|
BIO_printf(out, "\t\tEC_GROUP_free(group);\n");
|
||||||
|
BIO_printf(out, "\t\tgroup = NULL;\n");
|
||||||
|
BIO_printf(out, "\t\t}\n");
|
||||||
|
BIO_printf(out, "\treturn(group);\n\t}\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!noout)
|
||||||
|
{
|
||||||
|
if (outformat == FORMAT_ASN1)
|
||||||
|
i = i2d_ECPKParameters_bio(out, group);
|
||||||
|
else if (outformat == FORMAT_PEM)
|
||||||
|
i = PEM_write_bio_ECPKParameters(out, group);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"bad output format specified for"
|
||||||
|
" outfile\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (!i)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "unable to write elliptic "
|
||||||
|
"curve parameters\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (need_rand)
|
||||||
|
{
|
||||||
|
app_RAND_load_file(NULL, bio_err, (inrand != NULL));
|
||||||
|
if (inrand != NULL)
|
||||||
|
BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
|
||||||
|
app_RAND_load_files(inrand));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (genkey)
|
||||||
|
{
|
||||||
|
EC_KEY *eckey = EC_KEY_new();
|
||||||
|
|
||||||
|
if (eckey == NULL)
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
assert(need_rand);
|
||||||
|
|
||||||
|
if (EC_KEY_set_group(eckey, group) == 0)
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
if (!EC_KEY_generate_key(eckey))
|
||||||
|
{
|
||||||
|
EC_KEY_free(eckey);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (outformat == FORMAT_ASN1)
|
||||||
|
i = i2d_ECPrivateKey_bio(out, eckey);
|
||||||
|
else if (outformat == FORMAT_PEM)
|
||||||
|
i = PEM_write_bio_ECPrivateKey(out, eckey, NULL,
|
||||||
|
NULL, 0, NULL, NULL);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "bad output format specified "
|
||||||
|
"for outfile\n");
|
||||||
|
EC_KEY_free(eckey);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
EC_KEY_free(eckey);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (need_rand)
|
||||||
|
app_RAND_write_file(NULL, bio_err);
|
||||||
|
|
||||||
|
ret=0;
|
||||||
|
end:
|
||||||
|
if (ec_p)
|
||||||
|
BN_free(ec_p);
|
||||||
|
if (ec_a)
|
||||||
|
BN_free(ec_a);
|
||||||
|
if (ec_b)
|
||||||
|
BN_free(ec_b);
|
||||||
|
if (ec_gen)
|
||||||
|
BN_free(ec_gen);
|
||||||
|
if (ec_order)
|
||||||
|
BN_free(ec_order);
|
||||||
|
if (ec_cofactor)
|
||||||
|
BN_free(ec_cofactor);
|
||||||
|
if (buffer)
|
||||||
|
OPENSSL_free(buffer);
|
||||||
|
if (in != NULL)
|
||||||
|
BIO_free(in);
|
||||||
|
if (out != NULL)
|
||||||
|
BIO_free_all(out);
|
||||||
|
if (group != NULL)
|
||||||
|
EC_GROUP_free(group);
|
||||||
|
apps_shutdown();
|
||||||
|
OPENSSL_EXIT(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ecparam_print_var(BIO *out, BIGNUM *in, const char *var,
|
||||||
|
int len, unsigned char *buffer)
|
||||||
|
{
|
||||||
|
BIO_printf(out, "static unsigned char %s_%d[] = {", var, len);
|
||||||
|
if (BN_is_zero(in))
|
||||||
|
BIO_printf(out, "\n\t0x00");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int i, l;
|
||||||
|
|
||||||
|
l = BN_bn2bin(in, buffer);
|
||||||
|
for (i=0; i<l-1; i++)
|
||||||
|
{
|
||||||
|
if ((i%12) == 0)
|
||||||
|
BIO_printf(out, "\n\t");
|
||||||
|
BIO_printf(out, "0x%02X,", buffer[i]);
|
||||||
|
}
|
||||||
|
if ((i%12) == 0)
|
||||||
|
BIO_printf(out, "\n\t");
|
||||||
|
BIO_printf(out, "0x%02X", buffer[i]);
|
||||||
|
}
|
||||||
|
BIO_printf(out, "\n\t};\n\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#else /* !OPENSSL_NO_EC */
|
||||||
|
|
||||||
|
# if PEDANTIC
|
||||||
|
static void *dummy=&dummy;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#endif
|
||||||
136
apps/enc.c
136
apps/enc.c
@@ -67,6 +67,7 @@
|
|||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/rand.h>
|
#include <openssl/rand.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/comp.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
int set_hex(char *in,unsigned char *out,int size);
|
int set_hex(char *in,unsigned char *out,int size);
|
||||||
@@ -100,9 +101,6 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
|
||||||
ENGINE *e = NULL;
|
|
||||||
#endif
|
|
||||||
static const char magic[]="Salted__";
|
static const char magic[]="Salted__";
|
||||||
char mbuf[sizeof magic-1];
|
char mbuf[sizeof magic-1];
|
||||||
char *strbuf=NULL;
|
char *strbuf=NULL;
|
||||||
@@ -114,9 +112,15 @@ int MAIN(int argc, char **argv)
|
|||||||
unsigned char salt[PKCS5_SALT_LEN];
|
unsigned char salt[PKCS5_SALT_LEN];
|
||||||
char *str=NULL, *passarg = NULL, *pass = NULL;
|
char *str=NULL, *passarg = NULL, *pass = NULL;
|
||||||
char *hkey=NULL,*hiv=NULL,*hsalt = NULL;
|
char *hkey=NULL,*hiv=NULL,*hsalt = NULL;
|
||||||
|
char *md=NULL;
|
||||||
int enc=1,printkey=0,i,base64=0;
|
int enc=1,printkey=0,i,base64=0;
|
||||||
|
#ifdef ZLIB
|
||||||
|
int do_zlib=0;
|
||||||
|
BIO *bzl = NULL;
|
||||||
|
#endif
|
||||||
int debug=0,olb64=0,nosalt=0;
|
int debug=0,olb64=0,nosalt=0;
|
||||||
const EVP_CIPHER *cipher=NULL,*c;
|
const EVP_CIPHER *cipher=NULL,*c;
|
||||||
|
EVP_CIPHER_CTX *ctx = NULL;
|
||||||
char *inf=NULL,*outf=NULL;
|
char *inf=NULL,*outf=NULL;
|
||||||
BIO *in=NULL,*out=NULL,*b64=NULL,*benc=NULL,*rbio=NULL,*wbio=NULL;
|
BIO *in=NULL,*out=NULL,*b64=NULL,*benc=NULL,*rbio=NULL,*wbio=NULL;
|
||||||
#define PROG_NAME_SIZE 39
|
#define PROG_NAME_SIZE 39
|
||||||
@@ -124,6 +128,8 @@ int MAIN(int argc, char **argv)
|
|||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine = NULL;
|
char *engine = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
const EVP_MD *dgst=NULL;
|
||||||
|
int non_fips_allow = 0;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
@@ -138,9 +144,18 @@ int MAIN(int argc, char **argv)
|
|||||||
program_name(argv[0],pname,sizeof pname);
|
program_name(argv[0],pname,sizeof pname);
|
||||||
if (strcmp(pname,"base64") == 0)
|
if (strcmp(pname,"base64") == 0)
|
||||||
base64=1;
|
base64=1;
|
||||||
|
#ifdef ZLIB
|
||||||
|
if (strcmp(pname,"zlib") == 0)
|
||||||
|
do_zlib=1;
|
||||||
|
#endif
|
||||||
|
|
||||||
cipher=EVP_get_cipherbyname(pname);
|
cipher=EVP_get_cipherbyname(pname);
|
||||||
|
#ifdef ZLIB
|
||||||
|
if (!do_zlib && !base64 && (cipher == NULL)
|
||||||
|
&& (strcmp(pname,"enc") != 0))
|
||||||
|
#else
|
||||||
if (!base64 && (cipher == NULL) && (strcmp(pname,"enc") != 0))
|
if (!base64 && (cipher == NULL) && (strcmp(pname,"enc") != 0))
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"%s is an unknown cipher\n",pname);
|
BIO_printf(bio_err,"%s is an unknown cipher\n",pname);
|
||||||
goto bad;
|
goto bad;
|
||||||
@@ -196,6 +211,10 @@ int MAIN(int argc, char **argv)
|
|||||||
base64=1;
|
base64=1;
|
||||||
else if (strcmp(*argv,"-base64") == 0)
|
else if (strcmp(*argv,"-base64") == 0)
|
||||||
base64=1;
|
base64=1;
|
||||||
|
#ifdef ZLIB
|
||||||
|
else if (strcmp(*argv,"-z") == 0)
|
||||||
|
do_zlib=1;
|
||||||
|
#endif
|
||||||
else if (strcmp(*argv,"-bufsize") == 0)
|
else if (strcmp(*argv,"-bufsize") == 0)
|
||||||
{
|
{
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
@@ -222,7 +241,12 @@ int MAIN(int argc, char **argv)
|
|||||||
goto bad;
|
goto bad;
|
||||||
}
|
}
|
||||||
buf[0]='\0';
|
buf[0]='\0';
|
||||||
fgets(buf,sizeof buf,infile);
|
if (!fgets(buf,sizeof buf,infile))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"unable to read key from '%s'\n",
|
||||||
|
file);
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
fclose(infile);
|
fclose(infile);
|
||||||
i=strlen(buf);
|
i=strlen(buf);
|
||||||
if ((i > 0) &&
|
if ((i > 0) &&
|
||||||
@@ -253,6 +277,13 @@ int MAIN(int argc, char **argv)
|
|||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
hiv= *(++argv);
|
hiv= *(++argv);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*argv,"-md") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
md= *(++argv);
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv,"-non-fips-allow") == 0)
|
||||||
|
non_fips_allow = 1;
|
||||||
else if ((argv[0][0] == '-') &&
|
else if ((argv[0][0] == '-') &&
|
||||||
((c=EVP_get_cipherbyname(&(argv[0][1]))) != NULL))
|
((c=EVP_get_cipherbyname(&(argv[0][1]))) != NULL))
|
||||||
{
|
{
|
||||||
@@ -271,11 +302,15 @@ bad:
|
|||||||
BIO_printf(bio_err,"%-14s encrypt\n","-e");
|
BIO_printf(bio_err,"%-14s encrypt\n","-e");
|
||||||
BIO_printf(bio_err,"%-14s decrypt\n","-d");
|
BIO_printf(bio_err,"%-14s decrypt\n","-d");
|
||||||
BIO_printf(bio_err,"%-14s base64 encode/decode, depending on encryption flag\n","-a/-base64");
|
BIO_printf(bio_err,"%-14s base64 encode/decode, depending on encryption flag\n","-a/-base64");
|
||||||
BIO_printf(bio_err,"%-14s key is the next argument\n","-k");
|
BIO_printf(bio_err,"%-14s passphrase is the next argument\n","-k");
|
||||||
BIO_printf(bio_err,"%-14s key is the first line of the file argument\n","-kfile");
|
BIO_printf(bio_err,"%-14s passphrase is the first line of the file argument\n","-kfile");
|
||||||
|
BIO_printf(bio_err,"%-14s the next argument is the md to use to create a key\n","-md");
|
||||||
|
BIO_printf(bio_err,"%-14s from a passphrase. One of md2, md5, sha or sha1\n","");
|
||||||
|
BIO_printf(bio_err,"%-14s salt in hex is the next argument\n","-S");
|
||||||
BIO_printf(bio_err,"%-14s key/iv in hex is the next argument\n","-K/-iv");
|
BIO_printf(bio_err,"%-14s key/iv in hex is the next argument\n","-K/-iv");
|
||||||
BIO_printf(bio_err,"%-14s print the iv/key (then exit if -P)\n","-[pP]");
|
BIO_printf(bio_err,"%-14s print the iv/key (then exit if -P)\n","-[pP]");
|
||||||
BIO_printf(bio_err,"%-14s buffer size\n","-bufsize <n>");
|
BIO_printf(bio_err,"%-14s buffer size\n","-bufsize <n>");
|
||||||
|
BIO_printf(bio_err,"%-14s disable standard block padding\n","-nopad");
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
BIO_printf(bio_err,"%-14s use engine e, possibly a hardware device.\n","-engine e");
|
BIO_printf(bio_err,"%-14s use engine e, possibly a hardware device.\n","-engine e");
|
||||||
#endif
|
#endif
|
||||||
@@ -293,9 +328,20 @@ bad:
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
e = setup_engine(bio_err, engine, 0);
|
setup_engine(bio_err, engine, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (md && (dgst=EVP_get_digestbyname(md)) == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"%s is an unsupported message digest type\n",md);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dgst == NULL)
|
||||||
|
{
|
||||||
|
dgst = EVP_md5();
|
||||||
|
}
|
||||||
|
|
||||||
if (bufsize != NULL)
|
if (bufsize != NULL)
|
||||||
{
|
{
|
||||||
unsigned long n;
|
unsigned long n;
|
||||||
@@ -319,7 +365,7 @@ bad:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* It must be large enough for a base64 encoded line */
|
/* It must be large enough for a base64 encoded line */
|
||||||
if (n < 80) n=80;
|
if (base64 && n < 80) n=80;
|
||||||
|
|
||||||
bsize=(int)n;
|
bsize=(int)n;
|
||||||
if (verbose) BIO_printf(bio_err,"bufsize=%d\n",bsize);
|
if (verbose) BIO_printf(bio_err,"bufsize=%d\n",bsize);
|
||||||
@@ -344,12 +390,18 @@ bad:
|
|||||||
{
|
{
|
||||||
BIO_set_callback(in,BIO_debug_callback);
|
BIO_set_callback(in,BIO_debug_callback);
|
||||||
BIO_set_callback(out,BIO_debug_callback);
|
BIO_set_callback(out,BIO_debug_callback);
|
||||||
BIO_set_callback_arg(in,bio_err);
|
BIO_set_callback_arg(in,(char *)bio_err);
|
||||||
BIO_set_callback_arg(out,bio_err);
|
BIO_set_callback_arg(out,(char *)bio_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inf == NULL)
|
if (inf == NULL)
|
||||||
|
{
|
||||||
|
#ifndef OPENSSL_NO_SETVBUF_IONBF
|
||||||
|
if (bufsize != NULL)
|
||||||
|
setvbuf(stdin, (char *)NULL, _IONBF, 0);
|
||||||
|
#endif /* ndef OPENSSL_NO_SETVBUF_IONBF */
|
||||||
BIO_set_fp(in,stdin,BIO_NOCLOSE);
|
BIO_set_fp(in,stdin,BIO_NOCLOSE);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (BIO_read_filename(in,inf) <= 0)
|
if (BIO_read_filename(in,inf) <= 0)
|
||||||
@@ -400,6 +452,10 @@ bad:
|
|||||||
if (outf == NULL)
|
if (outf == NULL)
|
||||||
{
|
{
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
||||||
|
#ifndef OPENSSL_NO_SETVBUF_IONBF
|
||||||
|
if (bufsize != NULL)
|
||||||
|
setvbuf(stdout, (char *)NULL, _IONBF, 0);
|
||||||
|
#endif /* ndef OPENSSL_NO_SETVBUF_IONBF */
|
||||||
#ifdef OPENSSL_SYS_VMS
|
#ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
@@ -419,6 +475,19 @@ bad:
|
|||||||
rbio=in;
|
rbio=in;
|
||||||
wbio=out;
|
wbio=out;
|
||||||
|
|
||||||
|
#ifdef ZLIB
|
||||||
|
|
||||||
|
if (do_zlib)
|
||||||
|
{
|
||||||
|
if ((bzl=BIO_new(BIO_f_zlib())) == NULL)
|
||||||
|
goto end;
|
||||||
|
if (enc)
|
||||||
|
wbio=BIO_push(bzl,wbio);
|
||||||
|
else
|
||||||
|
rbio=BIO_push(bzl,rbio);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (base64)
|
if (base64)
|
||||||
{
|
{
|
||||||
if ((b64=BIO_new(BIO_f_base64())) == NULL)
|
if ((b64=BIO_new(BIO_f_base64())) == NULL)
|
||||||
@@ -426,7 +495,7 @@ bad:
|
|||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
BIO_set_callback(b64,BIO_debug_callback);
|
BIO_set_callback(b64,BIO_debug_callback);
|
||||||
BIO_set_callback_arg(b64,bio_err);
|
BIO_set_callback_arg(b64,(char *)bio_err);
|
||||||
}
|
}
|
||||||
if (olb64)
|
if (olb64)
|
||||||
BIO_set_flags(b64,BIO_FLAGS_BASE64_NO_NL);
|
BIO_set_flags(b64,BIO_FLAGS_BASE64_NO_NL);
|
||||||
@@ -483,7 +552,7 @@ bad:
|
|||||||
sptr = salt;
|
sptr = salt;
|
||||||
}
|
}
|
||||||
|
|
||||||
EVP_BytesToKey(cipher,EVP_md5(),sptr,
|
EVP_BytesToKey(cipher,dgst,sptr,
|
||||||
(unsigned char *)str,
|
(unsigned char *)str,
|
||||||
strlen(str),1,key,iv);
|
strlen(str),1,key,iv);
|
||||||
/* zero the complete buffer or the string
|
/* zero the complete buffer or the string
|
||||||
@@ -500,7 +569,8 @@ bad:
|
|||||||
BIO_printf(bio_err,"invalid hex iv value\n");
|
BIO_printf(bio_err,"invalid hex iv value\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
if ((hiv == NULL) && (str == NULL))
|
if ((hiv == NULL) && (str == NULL)
|
||||||
|
&& EVP_CIPHER_iv_length(cipher) != 0)
|
||||||
{
|
{
|
||||||
/* No IV was explicitly set and no IV was generated
|
/* No IV was explicitly set and no IV was generated
|
||||||
* during EVP_BytesToKey. Hence the IV is undefined,
|
* during EVP_BytesToKey. Hence the IV is undefined,
|
||||||
@@ -516,17 +586,40 @@ bad:
|
|||||||
|
|
||||||
if ((benc=BIO_new(BIO_f_cipher())) == NULL)
|
if ((benc=BIO_new(BIO_f_cipher())) == NULL)
|
||||||
goto end;
|
goto end;
|
||||||
BIO_set_cipher(benc,cipher,key,iv,enc);
|
|
||||||
if (nopad)
|
/* Since we may be changing parameters work on the encryption
|
||||||
|
* context rather than calling BIO_set_cipher().
|
||||||
|
*/
|
||||||
|
|
||||||
|
BIO_get_cipher_ctx(benc, &ctx);
|
||||||
|
|
||||||
|
if (non_fips_allow)
|
||||||
|
EVP_CIPHER_CTX_set_flags(ctx,
|
||||||
|
EVP_CIPH_FLAG_NON_FIPS_ALLOW);
|
||||||
|
|
||||||
|
if (!EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, enc))
|
||||||
{
|
{
|
||||||
EVP_CIPHER_CTX *ctx;
|
BIO_printf(bio_err, "Error setting cipher %s\n",
|
||||||
BIO_get_cipher_ctx(benc, &ctx);
|
EVP_CIPHER_name(cipher));
|
||||||
EVP_CIPHER_CTX_set_padding(ctx, 0);
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (nopad)
|
||||||
|
EVP_CIPHER_CTX_set_padding(ctx, 0);
|
||||||
|
|
||||||
|
if (!EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, enc))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Error setting cipher %s\n",
|
||||||
|
EVP_CIPHER_name(cipher));
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
BIO_set_callback(benc,BIO_debug_callback);
|
BIO_set_callback(benc,BIO_debug_callback);
|
||||||
BIO_set_callback_arg(benc,bio_err);
|
BIO_set_callback_arg(benc,(char *)bio_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (printkey)
|
if (printkey)
|
||||||
@@ -534,7 +627,7 @@ bad:
|
|||||||
if (!nosalt)
|
if (!nosalt)
|
||||||
{
|
{
|
||||||
printf("salt=");
|
printf("salt=");
|
||||||
for (i=0; i<sizeof salt; i++)
|
for (i=0; i<(int)sizeof(salt); i++)
|
||||||
printf("%02X",salt[i]);
|
printf("%02X",salt[i]);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
@@ -594,6 +687,9 @@ end:
|
|||||||
if (out != NULL) BIO_free_all(out);
|
if (out != NULL) BIO_free_all(out);
|
||||||
if (benc != NULL) BIO_free(benc);
|
if (benc != NULL) BIO_free(benc);
|
||||||
if (b64 != NULL) BIO_free(b64);
|
if (b64 != NULL) BIO_free(b64);
|
||||||
|
#ifdef ZLIB
|
||||||
|
if (bzl != NULL) BIO_free(bzl);
|
||||||
|
#endif
|
||||||
if(pass) OPENSSL_free(pass);
|
if(pass) OPENSSL_free(pass);
|
||||||
apps_shutdown();
|
apps_shutdown();
|
||||||
OPENSSL_EXIT(ret);
|
OPENSSL_EXIT(ret);
|
||||||
|
|||||||
@@ -56,7 +56,6 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -66,20 +65,22 @@
|
|||||||
#endif
|
#endif
|
||||||
#include "apps.h"
|
#include "apps.h"
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
|
#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 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 - 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",
|
||||||
" -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",
|
||||||
@@ -91,7 +92,7 @@ static char *engine_usage[]={
|
|||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static void identity(void *ptr)
|
static void identity(char *ptr)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -147,11 +148,6 @@ static int util_flags(BIO *bio_out, unsigned int flags, const char *indent)
|
|||||||
|
|
||||||
if(flags & ENGINE_CMD_FLAG_NUMERIC)
|
if(flags & ENGINE_CMD_FLAG_NUMERIC)
|
||||||
{
|
{
|
||||||
if(started)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_out, "|");
|
|
||||||
err = 1;
|
|
||||||
}
|
|
||||||
BIO_printf(bio_out, "NUMERIC");
|
BIO_printf(bio_out, "NUMERIC");
|
||||||
started = 1;
|
started = 1;
|
||||||
}
|
}
|
||||||
@@ -204,7 +200,7 @@ static int util_verbose(ENGINE *e, int verbose, BIO *bio_out, const char *indent
|
|||||||
char *desc = NULL;
|
char *desc = NULL;
|
||||||
int flags;
|
int flags;
|
||||||
int xpos = 0;
|
int xpos = 0;
|
||||||
STACK *cmds = NULL;
|
STACK_OF(OPENSSL_STRING) *cmds = NULL;
|
||||||
if(!ENGINE_ctrl(e, ENGINE_CTRL_HAS_CTRL_FUNCTION, 0, NULL, NULL) ||
|
if(!ENGINE_ctrl(e, ENGINE_CTRL_HAS_CTRL_FUNCTION, 0, NULL, NULL) ||
|
||||||
((num = ENGINE_ctrl(e, ENGINE_CTRL_GET_FIRST_CMD_TYPE,
|
((num = ENGINE_ctrl(e, ENGINE_CTRL_GET_FIRST_CMD_TYPE,
|
||||||
0, NULL, NULL)) <= 0))
|
0, NULL, NULL)) <= 0))
|
||||||
@@ -215,7 +211,7 @@ static int util_verbose(ENGINE *e, int verbose, BIO *bio_out, const char *indent
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmds = sk_new_null();
|
cmds = sk_OPENSSL_STRING_new_null();
|
||||||
|
|
||||||
if(!cmds)
|
if(!cmds)
|
||||||
goto err;
|
goto err;
|
||||||
@@ -251,7 +247,7 @@ static int util_verbose(ENGINE *e, int verbose, BIO *bio_out, const char *indent
|
|||||||
/* Now decide on the output */
|
/* Now decide on the output */
|
||||||
if(xpos == 0)
|
if(xpos == 0)
|
||||||
/* Do an indent */
|
/* Do an indent */
|
||||||
xpos = BIO_printf(bio_out, indent);
|
xpos = BIO_puts(bio_out, indent);
|
||||||
else
|
else
|
||||||
/* Otherwise prepend a ", " */
|
/* Otherwise prepend a ", " */
|
||||||
xpos += BIO_printf(bio_out, ", ");
|
xpos += BIO_printf(bio_out, ", ");
|
||||||
@@ -262,7 +258,7 @@ static int util_verbose(ENGINE *e, int verbose, BIO *bio_out, const char *indent
|
|||||||
(xpos + (int)strlen(name) > line_wrap))
|
(xpos + (int)strlen(name) > line_wrap))
|
||||||
{
|
{
|
||||||
BIO_printf(bio_out, "\n");
|
BIO_printf(bio_out, "\n");
|
||||||
xpos = BIO_printf(bio_out, indent);
|
xpos = BIO_puts(bio_out, indent);
|
||||||
}
|
}
|
||||||
xpos += BIO_printf(bio_out, "%s", name);
|
xpos += BIO_printf(bio_out, "%s", name);
|
||||||
}
|
}
|
||||||
@@ -288,15 +284,17 @@ static int util_verbose(ENGINE *e, int verbose, BIO *bio_out, const char *indent
|
|||||||
BIO_printf(bio_out, "\n");
|
BIO_printf(bio_out, "\n");
|
||||||
ret = 1;
|
ret = 1;
|
||||||
err:
|
err:
|
||||||
if(cmds) sk_pop_free(cmds, identity);
|
if(cmds) sk_OPENSSL_STRING_pop_free(cmds, identity);
|
||||||
if(name) OPENSSL_free(name);
|
if(name) OPENSSL_free(name);
|
||||||
if(desc) OPENSSL_free(desc);
|
if(desc) OPENSSL_free(desc);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void util_do_cmds(ENGINE *e, STACK *cmds, BIO *bio_out, const char *indent)
|
static void util_do_cmds(ENGINE *e, STACK_OF(OPENSSL_STRING) *cmds,
|
||||||
|
BIO *bio_out, const char *indent)
|
||||||
{
|
{
|
||||||
int loop, res, num = sk_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");
|
||||||
@@ -306,7 +304,7 @@ static void util_do_cmds(ENGINE *e, STACK *cmds, BIO *bio_out, const char *inden
|
|||||||
{
|
{
|
||||||
char buf[256];
|
char buf[256];
|
||||||
const char *cmd, *arg;
|
const char *cmd, *arg;
|
||||||
cmd = sk_value(cmds, loop);
|
cmd = sk_OPENSSL_STRING_value(cmds, loop);
|
||||||
res = 1; /* assume success */
|
res = 1; /* assume success */
|
||||||
/* Check if this command has no ":arg" */
|
/* Check if this command has no ":arg" */
|
||||||
if((arg = strstr(cmd, ":")) == NULL)
|
if((arg = strstr(cmd, ":")) == NULL)
|
||||||
@@ -343,12 +341,12 @@ int MAIN(int, char **);
|
|||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ret=1,i;
|
int ret=1,i;
|
||||||
char **pp;
|
const char **pp;
|
||||||
int verbose=0, list_cap=0, test_avail=0;
|
int verbose=0, list_cap=0, test_avail=0, test_avail_noise = 0;
|
||||||
ENGINE *e;
|
ENGINE *e;
|
||||||
STACK *engines = sk_new_null();
|
STACK_OF(OPENSSL_STRING) *engines = sk_OPENSSL_STRING_new_null();
|
||||||
STACK *pre_cmds = sk_new_null();
|
STACK_OF(OPENSSL_STRING) *pre_cmds = sk_OPENSSL_STRING_new_null();
|
||||||
STACK *post_cmds = sk_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 = " ";
|
||||||
@@ -382,23 +380,33 @@ int MAIN(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else if (strcmp(*argv,"-c") == 0)
|
else if (strcmp(*argv,"-c") == 0)
|
||||||
list_cap=1;
|
list_cap=1;
|
||||||
else if (strcmp(*argv,"-t") == 0)
|
else if (strncmp(*argv,"-t",2) == 0)
|
||||||
|
{
|
||||||
test_avail=1;
|
test_avail=1;
|
||||||
|
if(strspn(*argv + 1, "t") < strlen(*argv + 1))
|
||||||
|
goto skip_arg_loop;
|
||||||
|
if((test_avail_noise = strlen(*argv + 1) - 1) > 1)
|
||||||
|
goto skip_arg_loop;
|
||||||
|
}
|
||||||
else if (strcmp(*argv,"-pre") == 0)
|
else if (strcmp(*argv,"-pre") == 0)
|
||||||
{
|
{
|
||||||
argc--; argv++;
|
argc--; argv++;
|
||||||
sk_push(pre_cmds,*argv);
|
if (argc == 0)
|
||||||
|
goto skip_arg_loop;
|
||||||
|
sk_OPENSSL_STRING_push(pre_cmds,*argv);
|
||||||
}
|
}
|
||||||
else if (strcmp(*argv,"-post") == 0)
|
else if (strcmp(*argv,"-post") == 0)
|
||||||
{
|
{
|
||||||
argc--; argv++;
|
argc--; argv++;
|
||||||
sk_push(post_cmds,*argv);
|
if (argc == 0)
|
||||||
|
goto skip_arg_loop;
|
||||||
|
sk_OPENSSL_STRING_push(post_cmds,*argv);
|
||||||
}
|
}
|
||||||
else if ((strncmp(*argv,"-h",2) == 0) ||
|
else if ((strncmp(*argv,"-h",2) == 0) ||
|
||||||
(strcmp(*argv,"-?") == 0))
|
(strcmp(*argv,"-?") == 0))
|
||||||
goto skip_arg_loop;
|
goto skip_arg_loop;
|
||||||
else
|
else
|
||||||
sk_push(engines,*argv);
|
sk_OPENSSL_STRING_push(engines,*argv);
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
}
|
}
|
||||||
@@ -413,17 +421,17 @@ skip_arg_loop:
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sk_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_push(engines,(char *)ENGINE_get_id(e));
|
sk_OPENSSL_STRING_push(engines,(char *)ENGINE_get_id(e));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<sk_num(engines); i++)
|
for (i=0; i<sk_OPENSSL_STRING_num(engines); i++)
|
||||||
{
|
{
|
||||||
const char *id = sk_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);
|
||||||
@@ -443,6 +451,7 @@ skip_arg_loop:
|
|||||||
const int *nids;
|
const int *nids;
|
||||||
ENGINE_CIPHERS_PTR fn_c;
|
ENGINE_CIPHERS_PTR fn_c;
|
||||||
ENGINE_DIGESTS_PTR fn_d;
|
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",
|
||||||
@@ -481,6 +490,15 @@ skip_ciphers:
|
|||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
skip_digests:
|
skip_digests:
|
||||||
|
fn_pk = ENGINE_get_pkey_meths(e);
|
||||||
|
if(!fn_pk) goto skip_pmeths;
|
||||||
|
n = fn_pk(e, NULL, &nids, 0);
|
||||||
|
for(k=0 ; k < n ; ++k)
|
||||||
|
if(!append_buf(&cap_buf,
|
||||||
|
OBJ_nid2sn(nids[k]),
|
||||||
|
&cap_size, 256))
|
||||||
|
goto end;
|
||||||
|
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);
|
||||||
|
|
||||||
@@ -498,7 +516,8 @@ skip_digests:
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
BIO_printf(bio_out, "[ unavailable ]\n");
|
BIO_printf(bio_out, "[ unavailable ]\n");
|
||||||
ERR_print_errors_fp(stdout);
|
if(test_avail_noise)
|
||||||
|
ERR_print_errors_fp(stdout);
|
||||||
ERR_clear_error();
|
ERR_clear_error();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -512,10 +531,11 @@ skip_digests:
|
|||||||
|
|
||||||
ret=0;
|
ret=0;
|
||||||
end:
|
end:
|
||||||
|
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
sk_pop_free(engines, identity);
|
sk_OPENSSL_STRING_pop_free(engines, identity);
|
||||||
sk_pop_free(pre_cmds, identity);
|
sk_OPENSSL_STRING_pop_free(pre_cmds, identity);
|
||||||
sk_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) BIO_free_all(bio_out);
|
||||||
apps_shutdown();
|
apps_shutdown();
|
||||||
OPENSSL_EXIT(ret);
|
OPENSSL_EXIT(ret);
|
||||||
|
|||||||
@@ -97,10 +97,12 @@ int MAIN(int argc, char **argv)
|
|||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
lh_node_stats_bio((LHASH *)ERR_get_string_table(),out);
|
lh_ERR_STRING_DATA_node_stats_bio(
|
||||||
lh_stats_bio((LHASH *)ERR_get_string_table(),out);
|
ERR_get_string_table(), out);
|
||||||
lh_node_usage_stats_bio((LHASH *)
|
lh_ERR_STRING_DATA_stats_bio(ERR_get_string_table(),
|
||||||
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--;
|
||||||
|
|||||||
33
apps/gendh.c
33
apps/gendh.c
@@ -57,6 +57,13 @@
|
|||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <openssl/opensslconf.h>
|
||||||
|
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
|
||||||
|
* deprecated functions for openssl-internal code */
|
||||||
|
#ifdef OPENSSL_NO_DEPRECATED
|
||||||
|
#undef OPENSSL_NO_DEPRECATED
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DH
|
#ifndef OPENSSL_NO_DH
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -75,15 +82,13 @@
|
|||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG gendh_main
|
#define PROG gendh_main
|
||||||
|
|
||||||
static void MS_CALLBACK dh_cb(int p, int n, void *arg);
|
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)
|
||||||
{
|
{
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
BN_GENCB cb;
|
||||||
ENGINE *e = NULL;
|
|
||||||
#endif
|
|
||||||
DH *dh=NULL;
|
DH *dh=NULL;
|
||||||
int ret=1,num=DEFBITS;
|
int ret=1,num=DEFBITS;
|
||||||
int g=2;
|
int g=2;
|
||||||
@@ -96,6 +101,7 @@ int MAIN(int argc, char **argv)
|
|||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
|
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);
|
||||||
@@ -154,7 +160,7 @@ bad:
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
e = setup_engine(bio_err, engine, 0);
|
setup_engine(bio_err, engine, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
out=BIO_new(BIO_s_file());
|
out=BIO_new(BIO_s_file());
|
||||||
@@ -193,9 +199,9 @@ bad:
|
|||||||
|
|
||||||
BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g);
|
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");
|
BIO_printf(bio_err,"This is going to take a long time\n");
|
||||||
dh=DH_generate_parameters(num,g,dh_cb,bio_err);
|
|
||||||
|
|
||||||
if (dh == NULL) goto end;
|
if(((dh = DH_new()) == NULL) || !DH_generate_parameters_ex(dh, num, g, &cb))
|
||||||
|
goto end;
|
||||||
|
|
||||||
app_RAND_write_file(NULL, bio_err);
|
app_RAND_write_file(NULL, bio_err);
|
||||||
|
|
||||||
@@ -211,7 +217,7 @@ end:
|
|||||||
OPENSSL_EXIT(ret);
|
OPENSSL_EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MS_CALLBACK dh_cb(int p, int n, void *arg)
|
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
|
||||||
{
|
{
|
||||||
char c='*';
|
char c='*';
|
||||||
|
|
||||||
@@ -219,10 +225,17 @@ static void MS_CALLBACK dh_cb(int p, int n, void *arg)
|
|||||||
if (p == 1) c='+';
|
if (p == 1) c='+';
|
||||||
if (p == 2) c='*';
|
if (p == 2) c='*';
|
||||||
if (p == 3) c='\n';
|
if (p == 3) c='\n';
|
||||||
BIO_write((BIO *)arg,&c,1);
|
BIO_write(cb->arg,&c,1);
|
||||||
(void)BIO_flush((BIO *)arg);
|
(void)BIO_flush(cb->arg);
|
||||||
#ifdef LINT
|
#ifdef LINT
|
||||||
p=n;
|
p=n;
|
||||||
#endif
|
#endif
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
#else /* !OPENSSL_NO_DH */
|
||||||
|
|
||||||
|
# if PEDANTIC
|
||||||
|
static void *dummy=&dummy;
|
||||||
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -56,6 +56,7 @@
|
|||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#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>
|
||||||
@@ -77,9 +78,6 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
|
||||||
ENGINE *e = NULL;
|
|
||||||
#endif
|
|
||||||
DSA *dsa=NULL;
|
DSA *dsa=NULL;
|
||||||
int ret=1;
|
int ret=1;
|
||||||
char *outfile=NULL;
|
char *outfile=NULL;
|
||||||
@@ -139,6 +137,10 @@ int MAIN(int argc, char **argv)
|
|||||||
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
|
||||||
|
else if (strcmp(*argv,"-seed") == 0)
|
||||||
|
enc=EVP_seed_cbc();
|
||||||
|
#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();
|
||||||
@@ -146,6 +148,14 @@ int MAIN(int argc, char **argv)
|
|||||||
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
|
||||||
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
|
else if (strcmp(*argv,"-camellia128") == 0)
|
||||||
|
enc=EVP_camellia_128_cbc();
|
||||||
|
else if (strcmp(*argv,"-camellia192") == 0)
|
||||||
|
enc=EVP_camellia_192_cbc();
|
||||||
|
else if (strcmp(*argv,"-camellia256") == 0)
|
||||||
|
enc=EVP_camellia_256_cbc();
|
||||||
#endif
|
#endif
|
||||||
else if (**argv != '-' && dsaparams == NULL)
|
else if (**argv != '-' && dsaparams == NULL)
|
||||||
{
|
{
|
||||||
@@ -169,10 +179,18 @@ bad:
|
|||||||
#ifndef OPENSSL_NO_IDEA
|
#ifndef OPENSSL_NO_IDEA
|
||||||
BIO_printf(bio_err," -idea - encrypt the generated key with IDEA in cbc mode\n");
|
BIO_printf(bio_err," -idea - encrypt the generated key with IDEA in cbc mode\n");
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_SEED
|
||||||
|
BIO_printf(bio_err," -seed\n");
|
||||||
|
BIO_printf(bio_err," encrypt PEM output with cbc seed\n");
|
||||||
|
#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," encrypt PEM output with cbc aes\n");
|
BIO_printf(bio_err," encrypt PEM output with cbc aes\n");
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
|
BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
|
||||||
|
BIO_printf(bio_err," encrypt PEM output with cbc camellia\n");
|
||||||
|
#endif
|
||||||
#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
|
||||||
@@ -185,7 +203,7 @@ bad:
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
e = setup_engine(bio_err, engine, 0);
|
setup_engine(bio_err, engine, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
|
if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
|
||||||
@@ -258,4 +276,10 @@ end:
|
|||||||
apps_shutdown();
|
apps_shutdown();
|
||||||
OPENSSL_EXIT(ret);
|
OPENSSL_EXIT(ret);
|
||||||
}
|
}
|
||||||
|
#else /* !OPENSSL_NO_DSA */
|
||||||
|
|
||||||
|
# if PEDANTIC
|
||||||
|
static void *dummy=&dummy;
|
||||||
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
440
apps/genpkey.c
Normal file
440
apps/genpkey.c
Normal file
@@ -0,0 +1,440 @@
|
|||||||
|
/* apps/genpkey.c */
|
||||||
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
|
* project 2006
|
||||||
|
*/
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. All advertising materials mentioning features or use of this
|
||||||
|
* software must display the following acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||||
|
* endorse or promote products derived from this software without
|
||||||
|
* prior written permission. For written permission, please contact
|
||||||
|
* licensing@OpenSSL.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "OpenSSL"
|
||||||
|
* nor may "OpenSSL" appear in their names without prior written
|
||||||
|
* permission of the OpenSSL Project.
|
||||||
|
*
|
||||||
|
* 6. Redistributions of any form whatsoever must retain the following
|
||||||
|
* acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||||
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT 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 SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This product includes cryptographic software written by Eric Young
|
||||||
|
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||||
|
* Hudson (tjh@cryptsoft.com).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "apps.h"
|
||||||
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/err.h>
|
||||||
|
#include <openssl/evp.h>
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
|
||||||
|
const char *file, ENGINE *e);
|
||||||
|
static int genpkey_cb(EVP_PKEY_CTX *ctx);
|
||||||
|
|
||||||
|
#define PROG genpkey_main
|
||||||
|
|
||||||
|
int MAIN(int, char **);
|
||||||
|
|
||||||
|
int MAIN(int argc, char **argv)
|
||||||
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
|
char **args, *outfile = NULL;
|
||||||
|
char *passarg = NULL;
|
||||||
|
BIO *in = NULL, *out = NULL;
|
||||||
|
const EVP_CIPHER *cipher = NULL;
|
||||||
|
int outformat;
|
||||||
|
int text = 0;
|
||||||
|
EVP_PKEY *pkey=NULL;
|
||||||
|
EVP_PKEY_CTX *ctx = NULL;
|
||||||
|
char *pass = NULL;
|
||||||
|
int badarg = 0;
|
||||||
|
int ret = 1, rv;
|
||||||
|
|
||||||
|
int do_param = 0;
|
||||||
|
|
||||||
|
if (bio_err == NULL)
|
||||||
|
bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
|
||||||
|
|
||||||
|
if (!load_config(bio_err, NULL))
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
outformat=FORMAT_PEM;
|
||||||
|
|
||||||
|
ERR_load_crypto_strings();
|
||||||
|
OpenSSL_add_all_algorithms();
|
||||||
|
args = argv + 1;
|
||||||
|
while (!badarg && *args && *args[0] == '-')
|
||||||
|
{
|
||||||
|
if (!strcmp(*args,"-outform"))
|
||||||
|
{
|
||||||
|
if (args[1])
|
||||||
|
{
|
||||||
|
args++;
|
||||||
|
outformat=str2fmt(*args);
|
||||||
|
}
|
||||||
|
else badarg = 1;
|
||||||
|
}
|
||||||
|
else if (!strcmp(*args,"-pass"))
|
||||||
|
{
|
||||||
|
if (!args[1]) goto bad;
|
||||||
|
passarg= *(++args);
|
||||||
|
}
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
else if (strcmp(*args,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (!args[1])
|
||||||
|
goto bad;
|
||||||
|
e = setup_engine(bio_err, *(++args), 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else if (!strcmp (*args, "-paramfile"))
|
||||||
|
{
|
||||||
|
if (!args[1])
|
||||||
|
goto bad;
|
||||||
|
args++;
|
||||||
|
if (do_param == 1)
|
||||||
|
goto bad;
|
||||||
|
if (!init_keygen_file(bio_err, &ctx, *args, e))
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
else if (!strcmp (*args, "-out"))
|
||||||
|
{
|
||||||
|
if (args[1])
|
||||||
|
{
|
||||||
|
args++;
|
||||||
|
outfile = *args;
|
||||||
|
}
|
||||||
|
else badarg = 1;
|
||||||
|
}
|
||||||
|
else if (strcmp(*args,"-algorithm") == 0)
|
||||||
|
{
|
||||||
|
if (!args[1])
|
||||||
|
goto bad;
|
||||||
|
if (!init_gen_str(bio_err, &ctx, *(++args),e, do_param))
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
else if (strcmp(*args,"-pkeyopt") == 0)
|
||||||
|
{
|
||||||
|
if (!args[1])
|
||||||
|
goto bad;
|
||||||
|
if (!ctx)
|
||||||
|
{
|
||||||
|
BIO_puts(bio_err, "No keytype specified\n");
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
|
else if (pkey_ctrl_string(ctx, *(++args)) <= 0)
|
||||||
|
{
|
||||||
|
BIO_puts(bio_err, "parameter setting error\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strcmp(*args,"-genparam") == 0)
|
||||||
|
{
|
||||||
|
if (ctx)
|
||||||
|
goto bad;
|
||||||
|
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)
|
||||||
|
badarg = 1;
|
||||||
|
|
||||||
|
if (badarg)
|
||||||
|
{
|
||||||
|
bad:
|
||||||
|
BIO_printf(bio_err, "Usage: genpkey [options]\n");
|
||||||
|
BIO_printf(bio_err, "where options may be\n");
|
||||||
|
BIO_printf(bio_err, "-out file output file\n");
|
||||||
|
BIO_printf(bio_err, "-outform X output format (DER or PEM)\n");
|
||||||
|
BIO_printf(bio_err, "-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
|
||||||
|
BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n");
|
||||||
|
#endif
|
||||||
|
BIO_printf(bio_err, "-paramfile file parameters file\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"
|
||||||
|
" to value <value>\n");
|
||||||
|
BIO_printf(bio_err, "-genparam generate parameters, not key\n");
|
||||||
|
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))
|
||||||
|
{
|
||||||
|
BIO_puts(bio_err, "Error getting password\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (outfile)
|
||||||
|
{
|
||||||
|
if (!(out = BIO_new_file (outfile, "wb")))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
"Can't open output file %s\n", outfile);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
out = BIO_new_fp (stdout, BIO_NOCLOSE);
|
||||||
|
#ifdef OPENSSL_SYS_VMS
|
||||||
|
{
|
||||||
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
|
out = BIO_push(tmpbio, out);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
EVP_PKEY_CTX_set_cb(ctx, genpkey_cb);
|
||||||
|
EVP_PKEY_CTX_set_app_data(ctx, bio_err);
|
||||||
|
|
||||||
|
if (do_param)
|
||||||
|
{
|
||||||
|
if (EVP_PKEY_paramgen(ctx, &pkey) <= 0)
|
||||||
|
{
|
||||||
|
BIO_puts(bio_err, "Error generating parameters\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
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)
|
||||||
|
rv = PEM_write_bio_Parameters(out, pkey);
|
||||||
|
else if (outformat == FORMAT_PEM)
|
||||||
|
rv = PEM_write_bio_PrivateKey(out, pkey, cipher, NULL, 0,
|
||||||
|
NULL, pass);
|
||||||
|
else if (outformat == FORMAT_ASN1)
|
||||||
|
rv = i2d_PrivateKey_bio(out, pkey);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Bad format specified for key\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rv <= 0)
|
||||||
|
{
|
||||||
|
BIO_puts(bio_err, "Error writing key\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text)
|
||||||
|
{
|
||||||
|
if (do_param)
|
||||||
|
rv = EVP_PKEY_print_params(out, pkey, 0, NULL);
|
||||||
|
else
|
||||||
|
rv = EVP_PKEY_print_private(out, pkey, 0, NULL);
|
||||||
|
|
||||||
|
if (rv <= 0)
|
||||||
|
{
|
||||||
|
BIO_puts(bio_err, "Error printing key\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
end:
|
||||||
|
if (pkey)
|
||||||
|
EVP_PKEY_free(pkey);
|
||||||
|
if (ctx)
|
||||||
|
EVP_PKEY_CTX_free(ctx);
|
||||||
|
if (out)
|
||||||
|
BIO_free_all(out);
|
||||||
|
BIO_free(in);
|
||||||
|
if (pass)
|
||||||
|
OPENSSL_free(pass);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
|
||||||
|
const char *file, ENGINE *e)
|
||||||
|
{
|
||||||
|
BIO *pbio;
|
||||||
|
EVP_PKEY *pkey = NULL;
|
||||||
|
EVP_PKEY_CTX *ctx = NULL;
|
||||||
|
if (*pctx)
|
||||||
|
{
|
||||||
|
BIO_puts(err, "Parameters already set!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
pbio = BIO_new_file(file, "r");
|
||||||
|
if (!pbio)
|
||||||
|
{
|
||||||
|
BIO_printf(err, "Can't open parameter file %s\n", file);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
pkey = PEM_read_bio_Parameters(pbio, NULL);
|
||||||
|
BIO_free(pbio);
|
||||||
|
|
||||||
|
if (!pkey)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Error reading parameter file %s\n", file);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx = EVP_PKEY_CTX_new(pkey, e);
|
||||||
|
if (!ctx)
|
||||||
|
goto err;
|
||||||
|
if (EVP_PKEY_keygen_init(ctx) <= 0)
|
||||||
|
goto err;
|
||||||
|
EVP_PKEY_free(pkey);
|
||||||
|
*pctx = ctx;
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
err:
|
||||||
|
BIO_puts(err, "Error initializing context\n");
|
||||||
|
ERR_print_errors(err);
|
||||||
|
if (ctx)
|
||||||
|
EVP_PKEY_CTX_free(ctx);
|
||||||
|
if (pkey)
|
||||||
|
EVP_PKEY_free(pkey);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
|
||||||
|
const char *algname, ENGINE *e, int do_param)
|
||||||
|
{
|
||||||
|
EVP_PKEY_CTX *ctx = NULL;
|
||||||
|
const EVP_PKEY_ASN1_METHOD *ameth;
|
||||||
|
ENGINE *tmpeng = NULL;
|
||||||
|
int pkey_id;
|
||||||
|
|
||||||
|
if (*pctx)
|
||||||
|
{
|
||||||
|
BIO_puts(err, "Algorithm already set!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ameth = EVP_PKEY_asn1_find_str(&tmpeng, algname, -1);
|
||||||
|
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
if (!ameth && e)
|
||||||
|
ameth = ENGINE_get_pkey_asn1_meth_str(e, algname, -1);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!ameth)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Algorithm %s not found\n", algname);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ERR_clear_error();
|
||||||
|
|
||||||
|
EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth);
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
if (tmpeng)
|
||||||
|
ENGINE_finish(tmpeng);
|
||||||
|
#endif
|
||||||
|
ctx = EVP_PKEY_CTX_new_id(pkey_id, e);
|
||||||
|
|
||||||
|
if (!ctx)
|
||||||
|
goto err;
|
||||||
|
if (do_param)
|
||||||
|
{
|
||||||
|
if (EVP_PKEY_paramgen_init(ctx) <= 0)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (EVP_PKEY_keygen_init(ctx) <= 0)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
*pctx = ctx;
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
err:
|
||||||
|
BIO_printf(err, "Error initializing %s context\n", algname);
|
||||||
|
ERR_print_errors(err);
|
||||||
|
if (ctx)
|
||||||
|
EVP_PKEY_CTX_free(ctx);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static int genpkey_cb(EVP_PKEY_CTX *ctx)
|
||||||
|
{
|
||||||
|
char c='*';
|
||||||
|
BIO *b = EVP_PKEY_CTX_get_app_data(ctx);
|
||||||
|
int p;
|
||||||
|
p = EVP_PKEY_CTX_get_keygen_info(ctx, 0);
|
||||||
|
if (p == 0) c='.';
|
||||||
|
if (p == 1) c='+';
|
||||||
|
if (p == 2) c='*';
|
||||||
|
if (p == 3) c='\n';
|
||||||
|
BIO_write(b,&c,1);
|
||||||
|
(void)BIO_flush(b);
|
||||||
|
#ifdef LINT
|
||||||
|
p=n;
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
@@ -56,6 +56,13 @@
|
|||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <openssl/opensslconf.h>
|
||||||
|
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
|
||||||
|
* deprecated functions for openssl-internal code */
|
||||||
|
#ifdef OPENSSL_NO_DEPRECATED
|
||||||
|
#undef OPENSSL_NO_DEPRECATED
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
#ifndef OPENSSL_NO_RSA
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -71,21 +78,21 @@
|
|||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
#include <openssl/rand.h>
|
#include <openssl/rand.h>
|
||||||
|
|
||||||
#define DEFBITS 512
|
#define DEFBITS 1024
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG genrsa_main
|
#define PROG genrsa_main
|
||||||
|
|
||||||
static void MS_CALLBACK genrsa_cb(int p, int n, void *arg);
|
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;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
ENGINE *e = NULL;
|
ENGINE *e = NULL;
|
||||||
#endif
|
#endif
|
||||||
int ret=1;
|
int ret=1;
|
||||||
RSA *rsa=NULL;
|
|
||||||
int i,num=DEFBITS;
|
int i,num=DEFBITS;
|
||||||
long l;
|
long l;
|
||||||
const EVP_CIPHER *enc=NULL;
|
const EVP_CIPHER *enc=NULL;
|
||||||
@@ -97,8 +104,13 @@ int MAIN(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
char *inrand=NULL;
|
char *inrand=NULL;
|
||||||
BIO *out=NULL;
|
BIO *out=NULL;
|
||||||
|
BIGNUM *bn = BN_new();
|
||||||
|
RSA *rsa = NULL;
|
||||||
|
|
||||||
|
if(!bn) goto err;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
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)
|
||||||
@@ -148,6 +160,10 @@ int MAIN(int argc, char **argv)
|
|||||||
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
|
||||||
|
else if (strcmp(*argv,"-seed") == 0)
|
||||||
|
enc=EVP_seed_cbc();
|
||||||
|
#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();
|
||||||
@@ -155,6 +171,14 @@ int MAIN(int argc, char **argv)
|
|||||||
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
|
||||||
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
|
else if (strcmp(*argv,"-camellia128") == 0)
|
||||||
|
enc=EVP_camellia_128_cbc();
|
||||||
|
else if (strcmp(*argv,"-camellia192") == 0)
|
||||||
|
enc=EVP_camellia_192_cbc();
|
||||||
|
else if (strcmp(*argv,"-camellia256") == 0)
|
||||||
|
enc=EVP_camellia_256_cbc();
|
||||||
#endif
|
#endif
|
||||||
else if (strcmp(*argv,"-passout") == 0)
|
else if (strcmp(*argv,"-passout") == 0)
|
||||||
{
|
{
|
||||||
@@ -175,9 +199,17 @@ bad:
|
|||||||
#ifndef OPENSSL_NO_IDEA
|
#ifndef OPENSSL_NO_IDEA
|
||||||
BIO_printf(bio_err," -idea encrypt the generated key with IDEA in cbc mode\n");
|
BIO_printf(bio_err," -idea encrypt the generated key with IDEA in cbc mode\n");
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_SEED
|
||||||
|
BIO_printf(bio_err," -seed\n");
|
||||||
|
BIO_printf(bio_err," encrypt PEM output with cbc seed\n");
|
||||||
|
#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," encrypt PEM output with cbc aes\n");
|
BIO_printf(bio_err," encrypt PEM output with cbc aes\n");
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
|
BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
|
||||||
|
BIO_printf(bio_err," encrypt PEM output with cbc camellia\n");
|
||||||
#endif
|
#endif
|
||||||
BIO_printf(bio_err," -out file output the key to 'file\n");
|
BIO_printf(bio_err," -out file output the key to '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");
|
||||||
@@ -233,12 +265,19 @@ bad:
|
|||||||
|
|
||||||
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);
|
||||||
rsa=RSA_generate_key(num,f4,genrsa_cb,bio_err);
|
#ifdef OPENSSL_NO_ENGINE
|
||||||
|
rsa = RSA_new();
|
||||||
|
#else
|
||||||
|
rsa = RSA_new_method(e);
|
||||||
|
#endif
|
||||||
|
if (!rsa)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
if(!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, &cb))
|
||||||
|
goto err;
|
||||||
|
|
||||||
app_RAND_write_file(NULL, bio_err);
|
app_RAND_write_file(NULL, bio_err);
|
||||||
|
|
||||||
if (rsa == NULL) goto err;
|
|
||||||
|
|
||||||
/* We need to do the following for when the base number size is <
|
/* We need to do the following for when the base number size is <
|
||||||
* long, esp windows 3.1 :-(. */
|
* long, esp windows 3.1 :-(. */
|
||||||
l=0L;
|
l=0L;
|
||||||
@@ -262,8 +301,9 @@ bad:
|
|||||||
|
|
||||||
ret=0;
|
ret=0;
|
||||||
err:
|
err:
|
||||||
if (rsa != NULL) RSA_free(rsa);
|
if (bn) BN_free(bn);
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (rsa) RSA_free(rsa);
|
||||||
|
if (out) BIO_free_all(out);
|
||||||
if(passout) OPENSSL_free(passout);
|
if(passout) OPENSSL_free(passout);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
@@ -271,7 +311,7 @@ err:
|
|||||||
OPENSSL_EXIT(ret);
|
OPENSSL_EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MS_CALLBACK genrsa_cb(int p, int n, void *arg)
|
static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb)
|
||||||
{
|
{
|
||||||
char c='*';
|
char c='*';
|
||||||
|
|
||||||
@@ -279,11 +319,12 @@ static void MS_CALLBACK genrsa_cb(int p, int n, void *arg)
|
|||||||
if (p == 1) c='+';
|
if (p == 1) c='+';
|
||||||
if (p == 2) c='*';
|
if (p == 2) c='*';
|
||||||
if (p == 3) c='\n';
|
if (p == 3) c='\n';
|
||||||
BIO_write((BIO *)arg,&c,1);
|
BIO_write(cb->arg,&c,1);
|
||||||
(void)BIO_flush((BIO *)arg);
|
(void)BIO_flush(cb->arg);
|
||||||
#ifdef LINT
|
#ifdef LINT
|
||||||
p=n;
|
p=n;
|
||||||
#endif
|
#endif
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
#else /* !OPENSSL_NO_RSA */
|
#else /* !OPENSSL_NO_RSA */
|
||||||
|
|
||||||
|
|||||||
107
apps/install-apps.com
Executable file
107
apps/install-apps.com
Executable file
@@ -0,0 +1,107 @@
|
|||||||
|
$! INSTALL.COM -- Installs the files in a given directory tree
|
||||||
|
$!
|
||||||
|
$! Author: Richard Levitte <richard@levitte.org>
|
||||||
|
$! Time of creation: 22-MAY-1998 10:13
|
||||||
|
$!
|
||||||
|
$! P1 root of the directory tree
|
||||||
|
$! P2 "64" for 64-bit pointers.
|
||||||
|
$!
|
||||||
|
$!
|
||||||
|
$! Announce/identify.
|
||||||
|
$!
|
||||||
|
$ proc = f$environment( "procedure")
|
||||||
|
$ write sys$output "@@@ "+ -
|
||||||
|
f$parse( proc, , , "name")+ f$parse( proc, , , "type")
|
||||||
|
$!
|
||||||
|
$ on error then goto tidy
|
||||||
|
$ on control_c then goto tidy
|
||||||
|
$!
|
||||||
|
$ if (p1 .eqs. "")
|
||||||
|
$ then
|
||||||
|
$ write sys$output "First argument missing."
|
||||||
|
$ write sys$output -
|
||||||
|
"It should be the directory where you want things installed."
|
||||||
|
$ exit
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
|
$ if (f$getsyi("cpu") .lt. 128)
|
||||||
|
$ then
|
||||||
|
$ arch = "VAX"
|
||||||
|
$ else
|
||||||
|
$ arch = f$edit( f$getsyi( "arch_name"), "upcase")
|
||||||
|
$ if (arch .eqs. "") then arch = "UNK"
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
|
$ archd = arch
|
||||||
|
$!
|
||||||
|
$ if (p2 .nes. "")
|
||||||
|
$ then
|
||||||
|
$ if (p2 .eqs. "64")
|
||||||
|
$ then
|
||||||
|
$ archd = arch+ "_64"
|
||||||
|
$ else
|
||||||
|
$ if (p2 .nes. "32")
|
||||||
|
$ then
|
||||||
|
$ write sys$output "Second argument invalid."
|
||||||
|
$ write sys$output "It should be "32", "64", or nothing."
|
||||||
|
$ exit
|
||||||
|
$ endif
|
||||||
|
$ endif
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
|
$ root = f$parse( p1, "[]A.;0", , , "syntax_only, no_conceal") - "A.;0"
|
||||||
|
$ root_dev = f$parse(root,,,"device","syntax_only")
|
||||||
|
$ root_dir = f$parse(root,,,"directory","syntax_only") - -
|
||||||
|
"[000000." - "][" - "[" - "]"
|
||||||
|
$ root = root_dev + "[" + root_dir
|
||||||
|
$!
|
||||||
|
$ define /nolog wrk_sslroot 'root'.] /trans=conc
|
||||||
|
$ define /nolog wrk_sslxexe wrk_sslroot:['archd'_exe]
|
||||||
|
$!
|
||||||
|
$ if f$parse("wrk_sslroot:[000000]") .eqs. "" then -
|
||||||
|
create /directory /log wrk_sslroot:[000000]
|
||||||
|
$ if f$parse("wrk_sslxexe:") .eqs. "" then -
|
||||||
|
create /directory /log wrk_sslxexe:
|
||||||
|
$!
|
||||||
|
$ exe := openssl
|
||||||
|
$!
|
||||||
|
$ exe_dir := [-.'archd'.exe.apps]
|
||||||
|
$!
|
||||||
|
$! Executables.
|
||||||
|
$!
|
||||||
|
$ i = 0
|
||||||
|
$ loop_exe:
|
||||||
|
$ e = f$edit(f$element( i, ",", exe), "trim")
|
||||||
|
$ i = i + 1
|
||||||
|
$ if e .eqs. "," then goto loop_exe_end
|
||||||
|
$ set noon
|
||||||
|
$ file = exe_dir+ e+ ".exe"
|
||||||
|
$ if f$search( file) .nes. ""
|
||||||
|
$ then
|
||||||
|
$ copy /protection = w:re 'file' wrk_sslxexe: /log
|
||||||
|
$ endif
|
||||||
|
$ set on
|
||||||
|
$ goto loop_exe
|
||||||
|
$ loop_exe_end:
|
||||||
|
$!
|
||||||
|
$! Miscellaneous.
|
||||||
|
$!
|
||||||
|
$ set noon
|
||||||
|
$ copy /protection = w:re ca.com wrk_sslxexe:ca.com /log
|
||||||
|
$ copy /protection = w:re openssl-vms.cnf wrk_sslroot:[000000]openssl.cnf /log
|
||||||
|
$ set on
|
||||||
|
$!
|
||||||
|
$ tidy:
|
||||||
|
$!
|
||||||
|
$ call deass wrk_sslroot
|
||||||
|
$ call deass wrk_sslxexe
|
||||||
|
$!
|
||||||
|
$ exit
|
||||||
|
$!
|
||||||
|
$ deass: subroutine
|
||||||
|
$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
|
||||||
|
$ then
|
||||||
|
$ deassign /process 'p1'
|
||||||
|
$ endif
|
||||||
|
$ endsubroutine
|
||||||
|
$!
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
$! INSTALL.COM -- Installs the files in a given directory tree
|
|
||||||
$!
|
|
||||||
$! Author: Richard Levitte <richard@levitte.org>
|
|
||||||
$! Time of creation: 22-MAY-1998 10:13
|
|
||||||
$!
|
|
||||||
$! P1 root of the directory tree
|
|
||||||
$!
|
|
||||||
$ IF P1 .EQS. ""
|
|
||||||
$ THEN
|
|
||||||
$ WRITE SYS$OUTPUT "First argument missing."
|
|
||||||
$ WRITE SYS$OUTPUT "Should be the directory where you want things installed."
|
|
||||||
$ EXIT
|
|
||||||
$ ENDIF
|
|
||||||
$
|
|
||||||
$ ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
|
|
||||||
$ ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
|
|
||||||
$ ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
|
|
||||||
- "[000000." - "][" - "[" - "]"
|
|
||||||
$ ROOT = ROOT_DEV + "[" + ROOT_DIR
|
|
||||||
$
|
|
||||||
$ DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
|
|
||||||
$ DEFINE/NOLOG WRK_SSLVEXE WRK_SSLROOT:[VAX_EXE]
|
|
||||||
$ DEFINE/NOLOG WRK_SSLAEXE WRK_SSLROOT:[ALPHA_EXE]
|
|
||||||
$ DEFINE/NOLOG WRK_SSLLIB WRK_SSLROOT:[LIB]
|
|
||||||
$
|
|
||||||
$ IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
|
|
||||||
CREATE/DIR/LOG WRK_SSLROOT:[000000]
|
|
||||||
$ IF F$PARSE("WRK_SSLVEXE:") .EQS. "" THEN -
|
|
||||||
CREATE/DIR/LOG WRK_SSLVEXE:
|
|
||||||
$ IF F$PARSE("WRK_SSLAEXE:") .EQS. "" THEN -
|
|
||||||
CREATE/DIR/LOG WRK_SSLAEXE:
|
|
||||||
$ IF F$PARSE("WRK_SSLLIB:") .EQS. "" THEN -
|
|
||||||
CREATE/DIR/LOG WRK_SSLLIB:
|
|
||||||
$
|
|
||||||
$ EXE := openssl
|
|
||||||
$
|
|
||||||
$ VEXE_DIR := [-.VAX.EXE.APPS]
|
|
||||||
$ AEXE_DIR := [-.AXP.EXE.APPS]
|
|
||||||
$
|
|
||||||
$ I = 0
|
|
||||||
$ LOOP_EXE:
|
|
||||||
$ E = F$EDIT(F$ELEMENT(I, ",", EXE),"TRIM")
|
|
||||||
$ I = I + 1
|
|
||||||
$ IF E .EQS. "," THEN GOTO LOOP_EXE_END
|
|
||||||
$ SET NOON
|
|
||||||
$ IF F$SEARCH(VEXE_DIR+E+".EXE") .NES. ""
|
|
||||||
$ THEN
|
|
||||||
$ COPY 'VEXE_DIR''E'.EXE WRK_SSLVEXE:'E'.EXE/log
|
|
||||||
$ SET FILE/PROT=W:RE WRK_SSLVEXE:'E'.EXE
|
|
||||||
$ ENDIF
|
|
||||||
$ IF F$SEARCH(AEXE_DIR+E+".EXE") .NES. ""
|
|
||||||
$ THEN
|
|
||||||
$ COPY 'AEXE_DIR''E'.EXE WRK_SSLAEXE:'E'.EXE/log
|
|
||||||
$ SET FILE/PROT=W:RE WRK_SSLAEXE:'E'.EXE
|
|
||||||
$ ENDIF
|
|
||||||
$ SET ON
|
|
||||||
$ GOTO LOOP_EXE
|
|
||||||
$ LOOP_EXE_END:
|
|
||||||
$
|
|
||||||
$ SET NOON
|
|
||||||
$ COPY CA.COM WRK_SSLAEXE:CA.COM/LOG
|
|
||||||
$ SET FILE/PROT=W:RE WRK_SSLAEXE:CA.COM
|
|
||||||
$ COPY CA.COM WRK_SSLVEXE:CA.COM/LOG
|
|
||||||
$ SET FILE/PROT=W:RE WRK_SSLVEXE:CA.COM
|
|
||||||
$ COPY OPENSSL-VMS.CNF WRK_SSLROOT:[000000]OPENSSL.CNF/LOG
|
|
||||||
$ SET FILE/PROT=W:R WRK_SSLROOT:[000000]OPENSSL.CNF
|
|
||||||
$ SET ON
|
|
||||||
$
|
|
||||||
$ EXIT
|
|
||||||
@@ -6,11 +6,12 @@ $! A-Com Computing, Inc.
|
|||||||
$! byer@mail.all-net.net
|
$! byer@mail.all-net.net
|
||||||
$!
|
$!
|
||||||
$! Changes by Richard Levitte <richard@levitte.org>
|
$! Changes by Richard Levitte <richard@levitte.org>
|
||||||
|
$! Zoltan Arpadffy <zoli@polarhome.com>
|
||||||
$!
|
$!
|
||||||
$! This command files compiles and creates all the various different
|
$! This command files compiles and creates all the various different
|
||||||
$! "application" programs for the different types of encryption for OpenSSL.
|
$! "application" programs for the different types of encryption for OpenSSL.
|
||||||
$! The EXE's are placed in the directory [.xxx.EXE.APPS] where "xxx" denotes
|
$! The EXE's are placed in the directory [.xxx.EXE.APPS] where "xxx" denotes
|
||||||
$! either AXP or VAX depending on your machine architecture.
|
$! ALPHA, IA64 or VAX, depending on your machine architecture.
|
||||||
$!
|
$!
|
||||||
$! It was written so it would try to determine what "C" compiler to
|
$! It was written so it would try to determine what "C" compiler to
|
||||||
$! use or you can specify which "C" compiler to use.
|
$! use or you can specify which "C" compiler to use.
|
||||||
@@ -24,7 +25,7 @@ $! VAXC For VAX C.
|
|||||||
$! DECC For DEC C.
|
$! DECC For DEC C.
|
||||||
$! GNUC For GNU C.
|
$! GNUC For GNU C.
|
||||||
$!
|
$!
|
||||||
$! If you don't speficy a compiler, it will try to determine which
|
$! If you don't specify a compiler, it will try to determine which
|
||||||
$! "C" compiler to use.
|
$! "C" compiler to use.
|
||||||
$!
|
$!
|
||||||
$! P3, if defined, sets a TCP/IP library to use, through one of the following
|
$! P3, if defined, sets a TCP/IP library to use, through one of the following
|
||||||
@@ -38,64 +39,105 @@ $! P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
|
|||||||
$!
|
$!
|
||||||
$! P5, if defined, sets a choice of programs to compile.
|
$! P5, if defined, sets a choice of programs to compile.
|
||||||
$!
|
$!
|
||||||
|
$! P6, if defined, specifies the C pointer size. Ignored on VAX.
|
||||||
|
$! ("64=ARGV" gives more efficient code with HP C V7.3 or newer.)
|
||||||
|
$! Supported values are:
|
||||||
|
$!
|
||||||
|
$! "" Compile with default (/NOPOINTER_SIZE)
|
||||||
|
$! 32 Compile with /POINTER_SIZE=32 (SHORT)
|
||||||
|
$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV])
|
||||||
|
$! (Automatically select ARGV if compiler supports it.)
|
||||||
|
$! 64= Compile with /POINTER_SIZE=64 (LONG).
|
||||||
|
$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV).
|
||||||
|
$!
|
||||||
|
$! P7, if defined, specifies a directory where ZLIB files (zlib.h,
|
||||||
|
$! libz.olb) may be found. Optionally, a non-default object library
|
||||||
|
$! name may be included ("dev:[dir]libz_64.olb", for example).
|
||||||
|
$!
|
||||||
|
$!
|
||||||
|
$! Announce/identify.
|
||||||
|
$!
|
||||||
|
$ proc = f$environment( "procedure")
|
||||||
|
$ write sys$output "@@@ "+ -
|
||||||
|
f$parse( proc, , , "name")+ f$parse( proc, , , "type")
|
||||||
|
$!
|
||||||
|
$ on control_c then goto exit
|
||||||
$!
|
$!
|
||||||
$! Define A TCP/IP Library That We Will Need To Link To.
|
$! Define A TCP/IP Library That We Will Need To Link To.
|
||||||
$! (That Is, If We Need To Link To One.)
|
$! (That Is, If We Need To Link To One.)
|
||||||
$!
|
$!
|
||||||
$ TCPIP_LIB = ""
|
$ TCPIP_LIB = ""
|
||||||
|
$ ZLIB_LIB = ""
|
||||||
$!
|
$!
|
||||||
$! Check What Architecture We Are Using.
|
$! Check What Architecture We Are Using.
|
||||||
$!
|
$!
|
||||||
$ IF (F$GETSYI("CPU").GE.128)
|
$ IF (F$GETSYI("CPU").LT.128)
|
||||||
$ THEN
|
$ THEN
|
||||||
$!
|
$!
|
||||||
$! The Architecture Is AXP.
|
$! The Architecture Is VAX.
|
||||||
$!
|
$!
|
||||||
$ ARCH := AXP
|
$ ARCH = "VAX"
|
||||||
$!
|
$!
|
||||||
$! Else...
|
$! Else...
|
||||||
$!
|
$!
|
||||||
$ ELSE
|
$ ELSE
|
||||||
$!
|
$!
|
||||||
$! The Architecture Is VAX.
|
$! The Architecture Is Alpha, IA64 or whatever comes in the future.
|
||||||
$!
|
$!
|
||||||
$ ARCH := VAX
|
$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
|
||||||
|
$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
|
||||||
$!
|
$!
|
||||||
$! End The Architecture Check.
|
$! End The Architecture Check.
|
||||||
$!
|
$!
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$!
|
$!
|
||||||
|
$ ARCHD = ARCH
|
||||||
|
$ LIB32 = "32"
|
||||||
|
$ OPT_FILE = ""
|
||||||
|
$ POINTER_SIZE = ""
|
||||||
|
$!
|
||||||
$! Define what programs should be compiled
|
$! Define what programs should be compiled
|
||||||
$!
|
$!
|
||||||
$ PROGRAMS := OPENSSL
|
$ PROGRAMS := OPENSSL
|
||||||
$!$ PROGRAMS := VERIFY,ASN1PARS,REQ,DGST,DH,ENC,PASSWD,GENDH,ERRSTR,CA,CRL,-
|
|
||||||
$! RSA,DSA,DSAPARAM,-
|
|
||||||
$! X509,GENRSA,GENDSA,S_SERVER,S_CLIENT,SPEED,-
|
|
||||||
$! S_TIME,VERSION,PKCS7,CRL2P7,SESS_ID,CIPHERS,NSEQ,
|
|
||||||
$!
|
$!
|
||||||
$! Check To Make Sure We Have Valid Command Line Parameters.
|
$! Check To Make Sure We Have Valid Command Line Parameters.
|
||||||
$!
|
$!
|
||||||
$ GOSUB CHECK_OPTIONS
|
$ GOSUB CHECK_OPTIONS
|
||||||
$!
|
$!
|
||||||
|
$! Define The CRYPTO Library.
|
||||||
|
$!
|
||||||
|
$ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB
|
||||||
|
$!
|
||||||
|
$! Define The SSL Library.
|
||||||
|
$!
|
||||||
|
$ SSL_LIB := SYS$DISK:[-.'ARCHD'.EXE.SSL]SSL_LIBSSL'LIB32'.OLB
|
||||||
|
$!
|
||||||
|
$! Define The OBJ and EXE Directories.
|
||||||
|
$!
|
||||||
|
$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.APPS]
|
||||||
|
$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.APPS]
|
||||||
|
$!
|
||||||
|
$! Specify the destination directory in any /MAP option.
|
||||||
|
$!
|
||||||
|
$ if (LINKMAP .eqs. "MAP")
|
||||||
|
$ then
|
||||||
|
$ LINKMAP = LINKMAP+ "=''EXE_DIR'"
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
|
$! Add the location prefix to the linker options file name.
|
||||||
|
$!
|
||||||
|
$ if (OPT_FILE .nes. "")
|
||||||
|
$ then
|
||||||
|
$ OPT_FILE = EXE_DIR+ OPT_FILE
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
$! Initialise logical names and such
|
$! Initialise logical names and such
|
||||||
$!
|
$!
|
||||||
$ GOSUB INITIALISE
|
$ GOSUB INITIALISE
|
||||||
$!
|
$!
|
||||||
$! Tell The User What Kind of Machine We Run On.
|
$! Tell The User What Kind of Machine We Run On.
|
||||||
$!
|
$!
|
||||||
$ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine."
|
$ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'"
|
||||||
$!
|
|
||||||
$! Define The CRYPTO Library.
|
|
||||||
$!
|
|
||||||
$ CRYPTO_LIB := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]LIBCRYPTO.OLB
|
|
||||||
$!
|
|
||||||
$! Define The SSL Library.
|
|
||||||
$!
|
|
||||||
$ SSL_LIB := SYS$DISK:[-.'ARCH'.EXE.SSL]LIBSSL.OLB
|
|
||||||
$!
|
|
||||||
$! Define The OBJ Directory.
|
|
||||||
$!
|
|
||||||
$ OBJ_DIR := SYS$DISK:[-.'ARCH'.OBJ.APPS]
|
|
||||||
$!
|
$!
|
||||||
$! Check To See If The OBJ Directory Exists.
|
$! Check To See If The OBJ Directory Exists.
|
||||||
$!
|
$!
|
||||||
@@ -110,10 +152,6 @@ $! End The OBJ Directory Check.
|
|||||||
$!
|
$!
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$!
|
$!
|
||||||
$! Define The EXE Directory.
|
|
||||||
$!
|
|
||||||
$ EXE_DIR := SYS$DISK:[-.'ARCH'.EXE.APPS]
|
|
||||||
$!
|
|
||||||
$! Check To See If The EXE Directory Exists.
|
$! Check To See If The EXE Directory Exists.
|
||||||
$!
|
$!
|
||||||
$ IF (F$PARSE(EXE_DIR).EQS."")
|
$ IF (F$PARSE(EXE_DIR).EQS."")
|
||||||
@@ -136,182 +174,184 @@ $!
|
|||||||
$ GOSUB CHECK_OPT_FILE
|
$ GOSUB CHECK_OPT_FILE
|
||||||
$!
|
$!
|
||||||
$! Define The Application Files.
|
$! Define The Application Files.
|
||||||
|
$! NOTE: Some might think this list ugly. However, it's made this way to
|
||||||
|
$! reflect the E_OBJ variable in Makefile as closely as possible, thereby
|
||||||
|
$! making it fairly easy to verify that the lists are the same.
|
||||||
|
$!
|
||||||
|
$ LIB_OPENSSL = "VERIFY,ASN1PARS,REQ,DGST,DH,DHPARAM,ENC,PASSWD,GENDH,ERRSTR,"+-
|
||||||
|
"CA,PKCS7,CRL2P7,CRL,"+-
|
||||||
|
"RSA,RSAUTL,DSA,DSAPARAM,EC,ECPARAM,"+-
|
||||||
|
"X509,GENRSA,GENDSA,GENPKEY,S_SERVER,S_CLIENT,SPEED,"+-
|
||||||
|
"S_TIME,APPS,S_CB,S_SOCKET,APP_RAND,VERSION,SESS_ID,"+-
|
||||||
|
"CIPHERS,NSEQ,PKCS12,PKCS8,PKEY,PKEYPARAM,PKEYUTL,"+ -
|
||||||
|
"SPKAC,SMIME,CMS,RAND,ENGINE,OCSP,PRIME,TS,SRP"
|
||||||
|
$!
|
||||||
|
$ LIB_OPENSSL = LIB_OPENSSL+ ",VMS_DECC_INIT"
|
||||||
$!
|
$!
|
||||||
$ LIB_FILES = "VERIFY;ASN1PARS;REQ;DGST;DH;DHPARAM;ENC;PASSWD;GENDH;ERRSTR;"+-
|
|
||||||
"CA;PKCS7;CRL2P7;CRL;"+-
|
|
||||||
"RSA;RSAUTL;DSA;DSAPARAM;"+-
|
|
||||||
"X509;GENRSA;GENDSA;S_SERVER;S_CLIENT;SPEED;"+-
|
|
||||||
"S_TIME;APPS;S_CB;S_SOCKET;APP_RAND;VERSION;SESS_ID;"+-
|
|
||||||
"CIPHERS;NSEQ;PKCS12;PKCS8;SPKAC;SMIME;RAND;ENGINE;OCSP"
|
|
||||||
$ APP_FILES := OPENSSL,'OBJ_DIR'VERIFY.OBJ,ASN1PARS.OBJ,REQ.OBJ,DGST.OBJ,DH.OBJ,DHPARAM.OBJ,ENC.OBJ,PASSWD.OBJ,GENDH.OBJ,ERRSTR.OBJ,-
|
|
||||||
CA.OBJ,PKCS7.OBJ,CRL2P7.OBJ,CRL.OBJ,-
|
|
||||||
RSA.OBJ,RSAUTL.OBJ,DSA.OBJ,DSAPARAM.OBJ,-
|
|
||||||
X509.OBJ,GENRSA.OBJ,GENDSA.OBJ,S_SERVER.OBJ,S_CLIENT.OBJ,SPEED.OBJ,-
|
|
||||||
S_TIME.OBJ,APPS.OBJ,S_CB.OBJ,S_SOCKET.OBJ,APP_RAND.OBJ,VERSION.OBJ,SESS_ID.OBJ,-
|
|
||||||
CIPHERS.OBJ,NSEQ.OBJ,PKCS12.OBJ,PKCS8.OBJ,SPKAC.OBJ,SMIME.OBJ,RAND.OBJ,ENGINE.OBJ,OCSP.OBJ
|
|
||||||
$ TCPIP_PROGRAMS = ",,"
|
$ TCPIP_PROGRAMS = ",,"
|
||||||
$ IF COMPILER .EQS. "VAXC" THEN -
|
$ IF COMPILER .EQS. "VAXC" THEN -
|
||||||
TCPIP_PROGRAMS = ",OPENSSL,"
|
TCPIP_PROGRAMS = ",OPENSSL,"
|
||||||
$!$ APP_FILES := VERIFY;ASN1PARS;REQ;DGST;DH;ENC;GENDH;ERRSTR;CA;-
|
|
||||||
$! PKCS7;CRL2P7;CRL;-
|
|
||||||
$! RSA;DSA;DSAPARAM;-
|
|
||||||
$! X509;GENRSA;GENDSA;-
|
|
||||||
$! S_SERVER,'OBJ_DIR'S_SOCKET.OBJ,'OBJ_DIR'S_CB.OBJ;-
|
|
||||||
$! S_CLIENT,'OBJ_DIR'S_SOCKET.OBJ,'OBJ_DIR'S_CB.OBJ;-
|
|
||||||
$! SPEED;-
|
|
||||||
$! S_TIME,'OBJ_DIR'S_CB.OBJ;VERSION;SESS_ID;CIPHERS;NSEQ
|
|
||||||
$!$ TCPIP_PROGRAMS = ",,"
|
|
||||||
$!$ IF COMPILER .EQS. "VAXC" THEN -
|
|
||||||
$! TCPIP_PROGRAMS = ",S_SERVER,S_CLIENT,SESS_ID,CIPHERS,S_TIME,"
|
|
||||||
$!
|
$!
|
||||||
$! Setup exceptional compilations
|
$! Setup exceptional compilations
|
||||||
$!
|
$!
|
||||||
$ COMPILEWITH_CC2 = ",S_SERVER,S_CLIENT,"
|
$ COMPILEWITH_CC2 = ",S_SOCKET,S_SERVER,S_CLIENT,"
|
||||||
$!
|
$!
|
||||||
$ PHASE := LIB
|
$ PHASE := LIB
|
||||||
$!
|
$!
|
||||||
$ RESTART:
|
$ RESTART:
|
||||||
$!
|
$!
|
||||||
$! Define A File Counter And Set It To "0".
|
$! Define An App Counter And Set It To "0".
|
||||||
$!
|
$!
|
||||||
$ FILE_COUNTER = 0
|
$ APP_COUNTER = 0
|
||||||
$!
|
$!
|
||||||
$! Top Of The File Loop.
|
$! Top Of The App Loop.
|
||||||
$!
|
$!
|
||||||
$ NEXT_FILE:
|
$ NEXT_APP:
|
||||||
$!
|
$!
|
||||||
$! O.K, Extract The File Name From The File List.
|
$! Make The Application File Name
|
||||||
$!
|
$!
|
||||||
$ FILE_NAME0 = F$EDIT(F$ELEMENT(FILE_COUNTER,";",'PHASE'_FILES),"TRIM")
|
$ CURRENT_APP = F$EDIT(F$ELEMENT(APP_COUNTER,",",PROGRAMS),"TRIM")
|
||||||
$ FILE_NAME = F$EDIT(F$ELEMENT(0,",",FILE_NAME0),"TRIM")
|
|
||||||
$ EXTRA_OBJ = FILE_NAME0 - FILE_NAME
|
|
||||||
$!
|
$!
|
||||||
$! Check To See If We Are At The End Of The File List.
|
$! Create The Executable File Name.
|
||||||
$!
|
$!
|
||||||
$ IF (FILE_NAME0.EQS.";")
|
$ EXE_FILE = EXE_DIR + CURRENT_APP + ".EXE"
|
||||||
|
$!
|
||||||
|
$! Check To See If We Are At The End Of The File List.
|
||||||
|
$!
|
||||||
|
$ IF (CURRENT_APP.EQS.",")
|
||||||
$ THEN
|
$ THEN
|
||||||
$ IF (PHASE.EQS."LIB")
|
$ IF (PHASE.EQS."LIB")
|
||||||
$ THEN
|
$ THEN
|
||||||
$ PHASE := APP
|
$ PHASE := APP
|
||||||
$ GOTO RESTART
|
$ GOTO RESTART
|
||||||
$ ELSE
|
$ ELSE
|
||||||
$ GOTO FILE_DONE
|
$ GOTO APP_DONE
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$!
|
$!
|
||||||
$! Increment The Counter.
|
$! Increment The Counter.
|
||||||
$!
|
$!
|
||||||
$ FILE_COUNTER = FILE_COUNTER + 1
|
$ APP_COUNTER = APP_COUNTER + 1
|
||||||
$!
|
$!
|
||||||
$! Check to see if this program should actually be compiled
|
$! Decide if we're building the object files or not.
|
||||||
$!
|
|
||||||
$ IF PHASE .EQS. "APP" .AND. -
|
|
||||||
","+PROGRAMS+"," - (","+F$EDIT(FILE_NAME,"UPCASE")+",") .EQS. ","+PROGRAMS+","
|
|
||||||
$ THEN
|
|
||||||
$ GOTO NEXT_FILE
|
|
||||||
$ ENDIF
|
|
||||||
$!
|
|
||||||
$! Create The Source File Name.
|
|
||||||
$!
|
|
||||||
$ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C"
|
|
||||||
$!
|
|
||||||
$! Create The Object File Name.
|
|
||||||
$!
|
|
||||||
$ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
|
|
||||||
$!
|
|
||||||
$! Create The Executable File Name.
|
|
||||||
$!
|
|
||||||
$ EXE_FILE = EXE_DIR + FILE_NAME + ".EXE"
|
|
||||||
$ ON WARNING THEN GOTO NEXT_FILE
|
|
||||||
$!
|
|
||||||
$! Check To See If The File We Want To Compile Actually Exists.
|
|
||||||
$!
|
|
||||||
$ IF (F$SEARCH(SOURCE_FILE).EQS."")
|
|
||||||
$ THEN
|
|
||||||
$!
|
|
||||||
$! Tell The User That The File Dosen't Exist.
|
|
||||||
$!
|
|
||||||
$ WRITE SYS$OUTPUT ""
|
|
||||||
$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
|
|
||||||
$ WRITE SYS$OUTPUT ""
|
|
||||||
$!
|
|
||||||
$! Exit The Build.
|
|
||||||
$!
|
|
||||||
$ GOTO EXIT
|
|
||||||
$!
|
|
||||||
$! End The File Exist Check.
|
|
||||||
$!
|
|
||||||
$ ENDIF
|
|
||||||
$!
|
|
||||||
$! Tell The User What We Are Building.
|
|
||||||
$!
|
$!
|
||||||
$ IF (PHASE.EQS."LIB")
|
$ IF (PHASE.EQS."LIB")
|
||||||
$ THEN
|
$ THEN
|
||||||
$ WRITE SYS$OUTPUT "Compiling The ",FILE_NAME,".C File."
|
|
||||||
$ ELSE
|
|
||||||
$ WRITE SYS$OUTPUT "Building The ",FILE_NAME," Application Program."
|
|
||||||
$ ENDIF
|
|
||||||
$!
|
$!
|
||||||
$! Compile The File.
|
$! Define A Library File Counter And Set It To "-1".
|
||||||
|
$! -1 Means The Application File Name Is To Be Used.
|
||||||
$!
|
$!
|
||||||
$ ON ERROR THEN GOTO NEXT_FILE
|
$ LIB_COUNTER = -1
|
||||||
$ IF COMPILEWITH_CC2 - FILE_NAME .NES. COMPILEWITH_CC2
|
|
||||||
$ THEN
|
|
||||||
$ CC2/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
|
|
||||||
$ ELSE
|
|
||||||
$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
|
|
||||||
$ ENDIF
|
|
||||||
$!
|
$!
|
||||||
$ ON WARNING THEN GOTO NEXT_FILE
|
$! Create a .OPT file for the object files
|
||||||
$!
|
$!
|
||||||
$ IF (PHASE.EQS."LIB")
|
$ OPEN /WRITE OBJECTS 'EXE_DIR''CURRENT_APP'.OPT
|
||||||
$ THEN
|
$!
|
||||||
$ GOTO NEXT_FILE
|
$! Top Of The File Loop.
|
||||||
|
$!
|
||||||
|
$ NEXT_LIB:
|
||||||
|
$!
|
||||||
|
$! O.K, Extract The File Name From The File List.
|
||||||
|
$!
|
||||||
|
$ IF LIB_COUNTER .GE. 0
|
||||||
|
$ THEN
|
||||||
|
$ FILE_NAME = F$EDIT(F$ELEMENT(LIB_COUNTER,",",LIB_'CURRENT_APP'),"TRIM")
|
||||||
|
$ ELSE
|
||||||
|
$ FILE_NAME = CURRENT_APP
|
||||||
|
$ ENDIF
|
||||||
|
$!
|
||||||
|
$! Check To See If We Are At The End Of The File List.
|
||||||
|
$!
|
||||||
|
$ IF (FILE_NAME.EQS.",")
|
||||||
|
$ THEN
|
||||||
|
$ CLOSE OBJECTS
|
||||||
|
$ GOTO NEXT_APP
|
||||||
|
$ ENDIF
|
||||||
|
$!
|
||||||
|
$! Increment The Counter.
|
||||||
|
$!
|
||||||
|
$ LIB_COUNTER = LIB_COUNTER + 1
|
||||||
|
$!
|
||||||
|
$! Create The Source File Name.
|
||||||
|
$!
|
||||||
|
$ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C"
|
||||||
|
$!
|
||||||
|
$! Create The Object File Name.
|
||||||
|
$!
|
||||||
|
$ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
|
||||||
|
$ ON WARNING THEN GOTO NEXT_LIB
|
||||||
|
$!
|
||||||
|
$! Check To See If The File We Want To Compile Actually Exists.
|
||||||
|
$!
|
||||||
|
$ IF (F$SEARCH(SOURCE_FILE).EQS."")
|
||||||
|
$ THEN
|
||||||
|
$!
|
||||||
|
$! Tell The User That The File Dosen't Exist.
|
||||||
|
$!
|
||||||
|
$ WRITE SYS$OUTPUT ""
|
||||||
|
$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
|
||||||
|
$ WRITE SYS$OUTPUT ""
|
||||||
|
$!
|
||||||
|
$! Exit The Build.
|
||||||
|
$!
|
||||||
|
$ GOTO EXIT
|
||||||
|
$!
|
||||||
|
$! End The File Exist Check.
|
||||||
|
$!
|
||||||
|
$ ENDIF
|
||||||
|
$!
|
||||||
|
$! Tell The User What We Are Building.
|
||||||
|
$!
|
||||||
|
$ IF (PHASE.EQS."LIB")
|
||||||
|
$ THEN
|
||||||
|
$ WRITE SYS$OUTPUT "Compiling The ",FILE_NAME,".C File."
|
||||||
|
$ ELSE
|
||||||
|
$ WRITE SYS$OUTPUT "Building The ",FILE_NAME," Application Program."
|
||||||
|
$ ENDIF
|
||||||
|
$!
|
||||||
|
$! Compile The File.
|
||||||
|
$!
|
||||||
|
$ ON ERROR THEN GOTO NEXT_LIB
|
||||||
|
$ IF COMPILEWITH_CC2 - FILE_NAME .NES. COMPILEWITH_CC2
|
||||||
|
$ THEN
|
||||||
|
$ CC2/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
|
||||||
|
$ ELSE
|
||||||
|
$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
|
||||||
|
$ ENDIF
|
||||||
|
$ WRITE OBJECTS OBJECT_FILE
|
||||||
|
$!
|
||||||
|
$ GOTO NEXT_LIB
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$!
|
$!
|
||||||
$! Check if this program works well without a TCPIP library
|
$! Check if this program works well without a TCPIP library
|
||||||
$!
|
$!
|
||||||
$ IF TCPIP_LIB .EQS. "" .AND. TCPIP_PROGRAMS - FILE_NAME .NES. TCPIP_PROGRAMS
|
$ IF TCPIP_LIB .EQS. "" .AND. TCPIP_PROGRAMS - CURRENT_APP .NES. TCPIP_PROGRAMS
|
||||||
$ THEN
|
$ THEN
|
||||||
$ WRITE SYS$OUTPUT FILE_NAME," needs a TCP/IP library. Can't link. Skipping..."
|
$ WRITE SYS$OUTPUT CURRENT_APP," needs a TCP/IP library. Can't link. Skipping..."
|
||||||
$ GOTO NEXT_FILE
|
$ GOTO NEXT_APP
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$!
|
$!
|
||||||
$! Link The Program.
|
$! Link The Program.
|
||||||
$! Check To See If We Are To Link With A Specific TCP/IP Library.
|
|
||||||
$!
|
$!
|
||||||
$ IF (TCPIP_LIB.NES."")
|
$ ON WARNING THEN GOTO NEXT_APP
|
||||||
$ THEN
|
|
||||||
$!
|
$!
|
||||||
$! Don't Link With The RSAREF Routines And TCP/IP Library.
|
$! Don't Link With The RSAREF Routines And TCP/IP Library.
|
||||||
$!
|
$!
|
||||||
$ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
|
$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' /EXE='EXE_FILE' -
|
||||||
'OBJECT_FILE''EXTRA_OBJ', -
|
'EXE_DIR''CURRENT_APP'.OPT /OPTIONS, -
|
||||||
'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
|
'SSL_LIB' /LIBRARY, -
|
||||||
'TCPIP_LIB','OPT_FILE'/OPTION
|
'CRYPTO_LIB' /LIBRARY -
|
||||||
$!
|
'TCPIP_LIB' -
|
||||||
$! Else...
|
'ZLIB_LIB' -
|
||||||
$!
|
,'OPT_FILE' /OPTIONS
|
||||||
$ ELSE
|
|
||||||
$!
|
|
||||||
$! Don't Link With The RSAREF Routines And Link With A TCP/IP Library.
|
|
||||||
$!
|
|
||||||
$ LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
|
|
||||||
'OBJECT_FILE''EXTRA_OBJ', -
|
|
||||||
'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
|
|
||||||
'OPT_FILE'/OPTION
|
|
||||||
$!
|
|
||||||
$! End The TCP/IP Library Check.
|
|
||||||
$!
|
|
||||||
$ ENDIF
|
|
||||||
$!
|
$!
|
||||||
$! Go Back And Do It Again.
|
$! Go Back And Do It Again.
|
||||||
$!
|
$!
|
||||||
$ GOTO NEXT_FILE
|
$ GOTO NEXT_APP
|
||||||
$!
|
$!
|
||||||
$! All Done With This File.
|
$! All Done With This File.
|
||||||
$!
|
$!
|
||||||
$ FILE_DONE:
|
$ APP_DONE:
|
||||||
$ EXIT:
|
$ EXIT:
|
||||||
$!
|
$!
|
||||||
$! All Done, Time To Clean Up And Exit.
|
$! All Done, Time To Clean Up And Exit.
|
||||||
@@ -338,7 +378,7 @@ $!
|
|||||||
$ CREATE 'OPT_FILE'
|
$ CREATE 'OPT_FILE'
|
||||||
$DECK
|
$DECK
|
||||||
!
|
!
|
||||||
! Default System Options File To Link Agianst
|
! Default System Options File To Link Against
|
||||||
! The Sharable VAX C Runtime Library.
|
! The Sharable VAX C Runtime Library.
|
||||||
!
|
!
|
||||||
SYS$SHARE:VAXCRTL.EXE/SHARE
|
SYS$SHARE:VAXCRTL.EXE/SHARE
|
||||||
@@ -367,7 +407,7 @@ $!
|
|||||||
$ CREATE 'OPT_FILE'
|
$ CREATE 'OPT_FILE'
|
||||||
$DECK
|
$DECK
|
||||||
!
|
!
|
||||||
! Default System Options File To Link Agianst
|
! Default System Options File To Link Against
|
||||||
! The Sharable C Runtime Library.
|
! The Sharable C Runtime Library.
|
||||||
!
|
!
|
||||||
GNU_CC:[000000]GCCLIB/LIBRARY
|
GNU_CC:[000000]GCCLIB/LIBRARY
|
||||||
@@ -402,7 +442,7 @@ $!
|
|||||||
$ CREATE 'OPT_FILE'
|
$ CREATE 'OPT_FILE'
|
||||||
$DECK
|
$DECK
|
||||||
!
|
!
|
||||||
! Default System Options File To Link Agianst
|
! Default System Options File To Link Against
|
||||||
! The Sharable DEC C Runtime Library.
|
! The Sharable DEC C Runtime Library.
|
||||||
!
|
!
|
||||||
SYS$SHARE:DECC$SHR.EXE/SHARE
|
SYS$SHARE:DECC$SHR.EXE/SHARE
|
||||||
@@ -412,19 +452,19 @@ $! Else...
|
|||||||
$!
|
$!
|
||||||
$ ELSE
|
$ ELSE
|
||||||
$!
|
$!
|
||||||
$! Create The AXP Linker Option File.
|
$! Create The non-VAX Linker Option File.
|
||||||
$!
|
$!
|
||||||
$ CREATE 'OPT_FILE'
|
$ CREATE 'OPT_FILE'
|
||||||
$DECK
|
$DECK
|
||||||
!
|
!
|
||||||
! Default System Options File For AXP To Link Agianst
|
! Default System Options File For non-VAX To Link Against
|
||||||
! The Sharable C Runtime Library.
|
! The Sharable C Runtime Library.
|
||||||
!
|
!
|
||||||
SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
|
SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
|
||||||
SYS$SHARE:CMA$OPEN_RTL/SHARE
|
SYS$SHARE:CMA$OPEN_RTL/SHARE
|
||||||
$EOD
|
$EOD
|
||||||
$!
|
$!
|
||||||
$! End The VAX/AXP DEC C Option File Check.
|
$! End The DEC C Option File Check.
|
||||||
$!
|
$!
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$!
|
$!
|
||||||
@@ -501,14 +541,15 @@ $!
|
|||||||
$ IF (P1.EQS."NODEBUG")
|
$ IF (P1.EQS."NODEBUG")
|
||||||
$ THEN
|
$ THEN
|
||||||
$!
|
$!
|
||||||
$! P1 Is NODEBUG, So Compile Without Debugger Information.
|
$! P1 Is NODEBUG, So Compile Without Debugger Information.
|
||||||
$!
|
$!
|
||||||
$ DEBUGGER = "NODEBUG"
|
$ DEBUGGER = "NODEBUG"
|
||||||
$ TRACEBACK = "NOTRACEBACK"
|
$ LINKMAP = "NOMAP"
|
||||||
$ GCC_OPTIMIZE = "OPTIMIZE"
|
$ TRACEBACK = "NOTRACEBACK"
|
||||||
$ CC_OPTIMIZE = "OPTIMIZE"
|
$ GCC_OPTIMIZE = "OPTIMIZE"
|
||||||
$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
|
$ CC_OPTIMIZE = "OPTIMIZE"
|
||||||
$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
|
$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
|
||||||
|
$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
|
||||||
$!
|
$!
|
||||||
$! Else...
|
$! Else...
|
||||||
$!
|
$!
|
||||||
@@ -522,6 +563,7 @@ $!
|
|||||||
$! Compile With Debugger Information.
|
$! Compile With Debugger Information.
|
||||||
$!
|
$!
|
||||||
$ DEBUGGER = "DEBUG"
|
$ DEBUGGER = "DEBUG"
|
||||||
|
$ LINKMAP = "MAP"
|
||||||
$ TRACEBACK = "TRACEBACK"
|
$ TRACEBACK = "TRACEBACK"
|
||||||
$ GCC_OPTIMIZE = "NOOPTIMIZE"
|
$ GCC_OPTIMIZE = "NOOPTIMIZE"
|
||||||
$ CC_OPTIMIZE = "NOOPTIMIZE"
|
$ CC_OPTIMIZE = "NOOPTIMIZE"
|
||||||
@@ -529,7 +571,7 @@ $ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
|
|||||||
$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
|
$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
|
||||||
$ ELSE
|
$ ELSE
|
||||||
$!
|
$!
|
||||||
$! Tell The User Entered An Invalid Option..
|
$! Tell The User Entered An Invalid Option.
|
||||||
$!
|
$!
|
||||||
$ WRITE SYS$OUTPUT ""
|
$ WRITE SYS$OUTPUT ""
|
||||||
$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:"
|
$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:"
|
||||||
@@ -542,7 +584,7 @@ $! Time To EXIT.
|
|||||||
$!
|
$!
|
||||||
$ EXIT
|
$ EXIT
|
||||||
$!
|
$!
|
||||||
$! End The Valid Arguement Check.
|
$! End The Valid Argument Check.
|
||||||
$!
|
$!
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$!
|
$!
|
||||||
@@ -550,6 +592,87 @@ $! End The P1 Check.
|
|||||||
$!
|
$!
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$!
|
$!
|
||||||
|
$! Check P6 (POINTER_SIZE).
|
||||||
|
$!
|
||||||
|
$ IF (P6 .NES. "") .AND. (ARCH .NES. "VAX")
|
||||||
|
$ THEN
|
||||||
|
$!
|
||||||
|
$ IF (P6 .EQS. "32")
|
||||||
|
$ THEN
|
||||||
|
$ POINTER_SIZE = " /POINTER_SIZE=32"
|
||||||
|
$ ELSE
|
||||||
|
$ POINTER_SIZE = F$EDIT( P6, "COLLAPSE, UPCASE")
|
||||||
|
$ IF ((POINTER_SIZE .EQS. "64") .OR. -
|
||||||
|
(POINTER_SIZE .EQS. "64=") .OR. -
|
||||||
|
(POINTER_SIZE .EQS. "64=ARGV"))
|
||||||
|
$ THEN
|
||||||
|
$ ARCHD = ARCH+ "_64"
|
||||||
|
$ LIB32 = ""
|
||||||
|
$ IF (F$EXTRACT( 2, 1, POINTER_SIZE) .EQS. "=")
|
||||||
|
$ THEN
|
||||||
|
$! Explicit user choice: "64" or "64=ARGV".
|
||||||
|
$ IF (POINTER_SIZE .EQS. "64=") THEN POINTER_SIZE = "64"
|
||||||
|
$ ELSE
|
||||||
|
$ SET NOON
|
||||||
|
$ DEFINE /USER_MODE SYS$OUTPUT NL:
|
||||||
|
$ DEFINE /USER_MODE SYS$ERROR NL:
|
||||||
|
$ CC /NOLIST /NOOBJECT /POINTER_SIZE=64=ARGV NL:
|
||||||
|
$ IF ($STATUS .AND. %X0FFF0000) .EQ. %X00030000
|
||||||
|
$ THEN
|
||||||
|
$ ! If we got here, it means DCL complained like this:
|
||||||
|
$ ! %DCL-W-NOVALU, value not allowed - remove value specification
|
||||||
|
$ ! \64=\
|
||||||
|
$ !
|
||||||
|
$ ! If the compiler was run, logicals defined in /USER would
|
||||||
|
$ ! have been deassigned automatically. However, when DCL
|
||||||
|
$ ! complains, they aren't, so we do it here (it might be
|
||||||
|
$ ! unnecessary, but just in case there will be another error
|
||||||
|
$ ! message further on that we don't want to miss)
|
||||||
|
$ DEASSIGN /USER_MODE SYS$ERROR
|
||||||
|
$ DEASSIGN /USER_MODE SYS$OUTPUT
|
||||||
|
$ ELSE
|
||||||
|
$ POINTER_SIZE = POINTER_SIZE + "=ARGV"
|
||||||
|
$ ENDIF
|
||||||
|
$ SET ON
|
||||||
|
$ ENDIF
|
||||||
|
$ POINTER_SIZE = " /POINTER_SIZE=''POINTER_SIZE'"
|
||||||
|
$!
|
||||||
|
$ ELSE
|
||||||
|
$!
|
||||||
|
$! Tell The User Entered An Invalid Option.
|
||||||
|
$!
|
||||||
|
$ WRITE SYS$OUTPUT ""
|
||||||
|
$ WRITE SYS$OUTPUT "The Option ", P6, -
|
||||||
|
" Is Invalid. The Valid Options Are:"
|
||||||
|
$ WRITE SYS$OUTPUT ""
|
||||||
|
$ WRITE SYS$OUTPUT -
|
||||||
|
" """" : Compile with default (short) pointers."
|
||||||
|
$ WRITE SYS$OUTPUT -
|
||||||
|
" 32 : Compile with 32-bit (short) pointers."
|
||||||
|
$ WRITE SYS$OUTPUT -
|
||||||
|
" 64 : Compile with 64-bit (long) pointers (auto ARGV)."
|
||||||
|
$ WRITE SYS$OUTPUT -
|
||||||
|
" 64= : Compile with 64-bit (long) pointers (no ARGV)."
|
||||||
|
$ WRITE SYS$OUTPUT -
|
||||||
|
" 64=ARGV : Compile with 64-bit (long) pointers (ARGV)."
|
||||||
|
$ WRITE SYS$OUTPUT ""
|
||||||
|
$!
|
||||||
|
$! Time To EXIT.
|
||||||
|
$!
|
||||||
|
$ EXIT
|
||||||
|
$!
|
||||||
|
$ ENDIF
|
||||||
|
$!
|
||||||
|
$ ENDIF
|
||||||
|
$!
|
||||||
|
$! End The P6 (POINTER_SIZE) Check.
|
||||||
|
$!
|
||||||
|
$ ENDIF
|
||||||
|
$!
|
||||||
|
$! Set basic C compiler /INCLUDE directories.
|
||||||
|
$!
|
||||||
|
$ CC_INCLUDES = "SYS$DISK:[-],SYS$DISK:[-.CRYPTO]"
|
||||||
|
$!
|
||||||
$! Check To See If P2 Is Blank.
|
$! Check To See If P2 Is Blank.
|
||||||
$!
|
$!
|
||||||
$ IF (P2.EQS."")
|
$ IF (P2.EQS."")
|
||||||
@@ -573,7 +696,7 @@ $ ELSE
|
|||||||
$!
|
$!
|
||||||
$! Check To See If We Have VAXC Or DECC.
|
$! Check To See If We Have VAXC Or DECC.
|
||||||
$!
|
$!
|
||||||
$ IF (ARCH.EQS."AXP").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
|
$ IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
|
||||||
$ THEN
|
$ THEN
|
||||||
$!
|
$!
|
||||||
$! Looks Like DECC, Set To Use DECC.
|
$! Looks Like DECC, Set To Use DECC.
|
||||||
@@ -650,11 +773,64 @@ $ 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"
|
$ CCDISABLEWARNINGS = "" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
|
||||||
$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
|
$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
|
||||||
CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
|
CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
|
||||||
$!
|
$!
|
||||||
$! Check To See If The User Entered A Valid Paramter.
|
$! Check To See If We Have A ZLIB Option.
|
||||||
|
$!
|
||||||
|
$ ZLIB = P7
|
||||||
|
$ IF (ZLIB .NES. "")
|
||||||
|
$ THEN
|
||||||
|
$!
|
||||||
|
$! Check for expected ZLIB files.
|
||||||
|
$!
|
||||||
|
$ err = 0
|
||||||
|
$ file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
|
||||||
|
$ if (f$search( file1) .eqs. "")
|
||||||
|
$ then
|
||||||
|
$ WRITE SYS$OUTPUT ""
|
||||||
|
$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
|
||||||
|
$ WRITE SYS$OUTPUT " Can't find header: ''file1'"
|
||||||
|
$ err = 1
|
||||||
|
$ endif
|
||||||
|
$ file1 = f$parse( "A.;", ZLIB)- "A.;"
|
||||||
|
$!
|
||||||
|
$ file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
|
||||||
|
$ if (f$search( file2) .eqs. "")
|
||||||
|
$ then
|
||||||
|
$ if (err .eq. 0)
|
||||||
|
$ then
|
||||||
|
$ WRITE SYS$OUTPUT ""
|
||||||
|
$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
|
||||||
|
$ endif
|
||||||
|
$ WRITE SYS$OUTPUT " Can't find library: ''file2'"
|
||||||
|
$ WRITE SYS$OUTPUT ""
|
||||||
|
$ err = err+ 2
|
||||||
|
$ endif
|
||||||
|
$ if (err .eq. 1)
|
||||||
|
$ then
|
||||||
|
$ WRITE SYS$OUTPUT ""
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
|
$ if (err .ne. 0)
|
||||||
|
$ then
|
||||||
|
$ EXIT
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
|
$ CCDEFS = """ZLIB=1"", "+ CCDEFS
|
||||||
|
$ CC_INCLUDES = CC_INCLUDES+ ", "+ file1
|
||||||
|
$ ZLIB_LIB = ", ''file2' /library"
|
||||||
|
$!
|
||||||
|
$! Print info
|
||||||
|
$!
|
||||||
|
$ WRITE SYS$OUTPUT "ZLIB library spec: ", file2
|
||||||
|
$!
|
||||||
|
$! End The ZLIB Check.
|
||||||
|
$!
|
||||||
|
$ ENDIF
|
||||||
|
$!
|
||||||
|
$! Check To See If The User Entered A Valid Parameter.
|
||||||
$!
|
$!
|
||||||
$ IF (P2.EQS."VAXC").OR.(P2.EQS."DECC").OR.(P2.EQS."GNUC")
|
$ IF (P2.EQS."VAXC").OR.(P2.EQS."DECC").OR.(P2.EQS."GNUC")
|
||||||
$ THEN
|
$ THEN
|
||||||
@@ -677,13 +853,13 @@ $!
|
|||||||
$ CC = "CC"
|
$ CC = "CC"
|
||||||
$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
|
$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
|
||||||
THEN CC = "CC/DECC"
|
THEN CC = "CC/DECC"
|
||||||
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
|
$ CC = CC + " /''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ -
|
||||||
"/NOLIST/PREFIX=ALL" + -
|
"''POINTER_SIZE' /NOLIST /PREFIX=ALL" + -
|
||||||
"/INCLUDE=(SYS$DISK:[-])" + CCEXTRAFLAGS
|
" /INCLUDE=(''CC_INCLUDES') " + CCEXTRAFLAGS
|
||||||
$!
|
$!
|
||||||
$! Define The Linker Options File Name.
|
$! Define The Linker Options File Name.
|
||||||
$!
|
$!
|
||||||
$ OPT_FILE = "SYS$DISK:[]VAX_DECC_OPTIONS.OPT"
|
$ OPT_FILE = "VAX_DECC_OPTIONS.OPT"
|
||||||
$!
|
$!
|
||||||
$! End DECC Check.
|
$! End DECC Check.
|
||||||
$!
|
$!
|
||||||
@@ -704,14 +880,14 @@ $!
|
|||||||
$! Compile Using VAXC.
|
$! Compile Using VAXC.
|
||||||
$!
|
$!
|
||||||
$ CC = "CC"
|
$ CC = "CC"
|
||||||
$ IF ARCH.EQS."AXP"
|
$ IF ARCH.NES."VAX"
|
||||||
$ THEN
|
$ THEN
|
||||||
$ WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
|
$ WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!"
|
||||||
$ EXIT
|
$ EXIT
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
|
$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
|
||||||
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
|
$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
|
||||||
"/INCLUDE=(SYS$DISK:[-])" + CCEXTRAFLAGS
|
"/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
|
||||||
$ CCDEFS = CCDEFS + ",""VAXC"""
|
$ CCDEFS = CCDEFS + ",""VAXC"""
|
||||||
$!
|
$!
|
||||||
$! Define <sys> As SYS$COMMON:[SYSLIB]
|
$! Define <sys> As SYS$COMMON:[SYSLIB]
|
||||||
@@ -720,7 +896,7 @@ $ DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
|
|||||||
$!
|
$!
|
||||||
$! Define The Linker Options File Name.
|
$! Define The Linker Options File Name.
|
||||||
$!
|
$!
|
||||||
$ OPT_FILE = "SYS$DISK:[]VAX_VAXC_OPTIONS.OPT"
|
$ OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
|
||||||
$!
|
$!
|
||||||
$! End VAXC Check
|
$! End VAXC Check
|
||||||
$!
|
$!
|
||||||
@@ -743,11 +919,11 @@ $! Use GNU C...
|
|||||||
$!
|
$!
|
||||||
$ IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC
|
$ IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC
|
||||||
$ CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
|
$ CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
|
||||||
"/INCLUDE=(SYS$DISK:[-])" + CCEXTRAFLAGS
|
"/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
|
||||||
$!
|
$!
|
||||||
$! Define The Linker Options File Name.
|
$! Define The Linker Options File Name.
|
||||||
$!
|
$!
|
||||||
$ OPT_FILE = "SYS$DISK:[]VAX_GNUC_OPTIONS.OPT"
|
$ OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
|
||||||
$!
|
$!
|
||||||
$! End The GNU C Check.
|
$! End The GNU C Check.
|
||||||
$!
|
$!
|
||||||
@@ -757,7 +933,7 @@ $! Set up default defines
|
|||||||
$!
|
$!
|
||||||
$ CCDEFS = """FLAT_INC=1""," + CCDEFS
|
$ CCDEFS = """FLAT_INC=1""," + CCDEFS
|
||||||
$!
|
$!
|
||||||
$! Else The User Entered An Invalid Arguement.
|
$! Else The User Entered An Invalid Argument.
|
||||||
$!
|
$!
|
||||||
$ ELSE
|
$ ELSE
|
||||||
$!
|
$!
|
||||||
@@ -789,7 +965,7 @@ $ THEN
|
|||||||
$!
|
$!
|
||||||
$! Set the library to use SOCKETSHR
|
$! Set the library to use SOCKETSHR
|
||||||
$!
|
$!
|
||||||
$ TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT"
|
$ TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
|
||||||
$!
|
$!
|
||||||
$! Done with SOCKETSHR
|
$! Done with SOCKETSHR
|
||||||
$!
|
$!
|
||||||
@@ -815,13 +991,13 @@ $ THEN
|
|||||||
$!
|
$!
|
||||||
$! Set the library to use UCX.
|
$! Set the library to use UCX.
|
||||||
$!
|
$!
|
||||||
$ TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT/OPT"
|
$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
|
||||||
$ IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
|
$ IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
|
||||||
$ THEN
|
$ THEN
|
||||||
$ TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT"
|
$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
|
||||||
$ ELSE
|
$ ELSE
|
||||||
$ IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
|
$ IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
|
||||||
TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT/OPT"
|
TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$!
|
$!
|
||||||
$! Done with UCX
|
$! Done with UCX
|
||||||
@@ -835,7 +1011,7 @@ $ THEN
|
|||||||
$!
|
$!
|
||||||
$! Set the library to use TCPIP.
|
$! Set the library to use TCPIP.
|
||||||
$!
|
$!
|
||||||
$ TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT"
|
$ TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
|
||||||
$!
|
$!
|
||||||
$! Done with TCPIP
|
$! Done with TCPIP
|
||||||
$!
|
$!
|
||||||
@@ -860,9 +1036,9 @@ $ CCDEFS = CCDEFS + ",TCPIP_TYPE_''P3'"
|
|||||||
$!
|
$!
|
||||||
$! Print info
|
$! Print info
|
||||||
$!
|
$!
|
||||||
$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB
|
$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
|
||||||
$!
|
$!
|
||||||
$! Else The User Entered An Invalid Arguement.
|
$! Else The User Entered An Invalid Argument.
|
||||||
$!
|
$!
|
||||||
$ ELSE
|
$ ELSE
|
||||||
$!
|
$!
|
||||||
@@ -890,13 +1066,13 @@ $ IF COMPILER .EQS. "DECC"
|
|||||||
$ THEN
|
$ THEN
|
||||||
$ IF CCDISABLEWARNINGS .NES. ""
|
$ IF CCDISABLEWARNINGS .NES. ""
|
||||||
$ THEN
|
$ THEN
|
||||||
$ CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
|
$ CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$ ELSE
|
$ ELSE
|
||||||
$ CCDISABLEWARNINGS = ""
|
$ CCDISABLEWARNINGS = ""
|
||||||
$ ENDIF
|
$ ENDIF
|
||||||
$ CC2 = CC + "/DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS
|
$ CC2 = CC + " /DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS
|
||||||
$ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
|
$ CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
|
||||||
$!
|
$!
|
||||||
$! Show user the result
|
$! Show user the result
|
||||||
$!
|
$!
|
||||||
@@ -962,7 +1138,7 @@ $ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
|
|||||||
$!
|
$!
|
||||||
$! Set up the logical name OPENSSL to point at the include directory
|
$! Set up the logical name OPENSSL to point at the include directory
|
||||||
$!
|
$!
|
||||||
$ DEFINE OPENSSL/NOLOG '__INCLUDE'
|
$ DEFINE OPENSSL /NOLOG '__INCLUDE'
|
||||||
$!
|
$!
|
||||||
$! Done
|
$! Done
|
||||||
$!
|
$!
|
||||||
@@ -970,15 +1146,24 @@ $ RETURN
|
|||||||
$!
|
$!
|
||||||
$ CLEANUP:
|
$ CLEANUP:
|
||||||
$!
|
$!
|
||||||
$! Restore the logical name OPENSSL if it had a value
|
$! Restore the saved logical name OPENSSL, if it had a value.
|
||||||
$!
|
$!
|
||||||
$ IF __SAVE_OPENSSL .EQS. ""
|
$ if (f$type( __SAVE_OPENSSL) .nes. "")
|
||||||
$ THEN
|
$ then
|
||||||
$ DEASSIGN OPENSSL
|
$ IF __SAVE_OPENSSL .EQS. ""
|
||||||
$ ELSE
|
$ THEN
|
||||||
$ DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL'
|
$ DEASSIGN OPENSSL
|
||||||
$ ENDIF
|
$ ELSE
|
||||||
|
$ DEFINE /NOLOG OPENSSL '__SAVE_OPENSSL'
|
||||||
|
$ ENDIF
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
|
$! Close any open files.
|
||||||
|
$!
|
||||||
|
$ if (f$trnlnm( "objects", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
|
||||||
|
close objects
|
||||||
$!
|
$!
|
||||||
$! Done
|
$! Done
|
||||||
$!
|
$!
|
||||||
$ RETURN
|
$ RETURN
|
||||||
|
$!
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* nseq.c */
|
/* nseq.c */
|
||||||
/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
* project 1999.
|
* project 1999.
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
|
|||||||
334
apps/ocsp.c
334
apps/ocsp.c
@@ -1,5 +1,5 @@
|
|||||||
/* ocsp.c */
|
/* ocsp.c */
|
||||||
/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
* project 2000.
|
* project 2000.
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
@@ -57,24 +57,52 @@
|
|||||||
*/
|
*/
|
||||||
#ifndef OPENSSL_NO_OCSP
|
#ifndef OPENSSL_NO_OCSP
|
||||||
|
|
||||||
|
#ifdef OPENSSL_SYS_VMS
|
||||||
|
#define _XOPEN_SOURCE_EXTENDED /* So fd_set and friends get properly defined
|
||||||
|
on OpenVMS */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define USE_SOCKETS
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "apps.h"
|
#include <time.h>
|
||||||
#include <openssl/pem.h>
|
#include "apps.h" /* needs to be included before the openssl headers! */
|
||||||
#include <openssl/ocsp.h>
|
#include <openssl/e_os2.h>
|
||||||
|
#include <openssl/crypto.h>
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
|
#include <openssl/evp.h>
|
||||||
|
#include <openssl/bn.h>
|
||||||
|
#include <openssl/x509v3.h>
|
||||||
|
|
||||||
|
#if defined(NETWARE_CLIB)
|
||||||
|
# ifdef NETWARE_BSDSOCK
|
||||||
|
# include <sys/socket.h>
|
||||||
|
# include <sys/bsdskt.h>
|
||||||
|
# else
|
||||||
|
# include <novsock2.h>
|
||||||
|
# endif
|
||||||
|
#elif defined(NETWARE_LIBC)
|
||||||
|
# ifdef NETWARE_BSDSOCK
|
||||||
|
# include <sys/select.h>
|
||||||
|
# else
|
||||||
|
# include <novsock2.h>
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Maximum leeway in validity period: default 5 minutes */
|
/* Maximum leeway in validity period: default 5 minutes */
|
||||||
#define MAX_VALIDITY_PERIOD (5 * 60)
|
#define MAX_VALIDITY_PERIOD (5 * 60)
|
||||||
|
|
||||||
static int add_ocsp_cert(OCSP_REQUEST **req, X509 *cert, X509 *issuer,
|
static int add_ocsp_cert(OCSP_REQUEST **req, X509 *cert, const EVP_MD *cert_id_md, X509 *issuer,
|
||||||
STACK_OF(OCSP_CERTID) *ids);
|
STACK_OF(OCSP_CERTID) *ids);
|
||||||
static int add_ocsp_serial(OCSP_REQUEST **req, char *serial, X509 *issuer,
|
static int add_ocsp_serial(OCSP_REQUEST **req, char *serial, const EVP_MD * cert_id_md, X509 *issuer,
|
||||||
STACK_OF(OCSP_CERTID) *ids);
|
STACK_OF(OCSP_CERTID) *ids);
|
||||||
static int print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req,
|
static int print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req,
|
||||||
STACK *names, STACK_OF(OCSP_CERTID) *ids,
|
STACK_OF(OPENSSL_STRING) *names,
|
||||||
long nsec, long maxage);
|
STACK_OF(OCSP_CERTID) *ids, long nsec,
|
||||||
|
long maxage);
|
||||||
|
|
||||||
static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, CA_DB *db,
|
static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, CA_DB *db,
|
||||||
X509 *ca, X509 *rcert, EVP_PKEY *rkey,
|
X509 *ca, X509 *rcert, EVP_PKEY *rkey,
|
||||||
@@ -85,6 +113,9 @@ static char **lookup_serial(CA_DB *db, ASN1_INTEGER *ser);
|
|||||||
static BIO *init_responder(char *port);
|
static BIO *init_responder(char *port);
|
||||||
static int do_responder(OCSP_REQUEST **preq, BIO **pcbio, BIO *acbio, char *port);
|
static int do_responder(OCSP_REQUEST **preq, BIO **pcbio, BIO *acbio, char *port);
|
||||||
static int send_ocsp_response(BIO *cbio, OCSP_RESPONSE *resp);
|
static int send_ocsp_response(BIO *cbio, OCSP_RESPONSE *resp);
|
||||||
|
static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, char *path,
|
||||||
|
STACK_OF(CONF_VALUE) *headers,
|
||||||
|
OCSP_REQUEST *req, int req_timeout);
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG ocsp_main
|
#define PROG ocsp_main
|
||||||
@@ -102,6 +133,7 @@ int MAIN(int argc, char **argv)
|
|||||||
char *rsignfile = NULL, *rkeyfile = NULL;
|
char *rsignfile = NULL, *rkeyfile = NULL;
|
||||||
char *outfile = NULL;
|
char *outfile = NULL;
|
||||||
int add_nonce = 1, noverify = 0, use_ssl = -1;
|
int add_nonce = 1, noverify = 0, use_ssl = -1;
|
||||||
|
STACK_OF(CONF_VALUE) *headers = NULL;
|
||||||
OCSP_REQUEST *req = NULL;
|
OCSP_REQUEST *req = NULL;
|
||||||
OCSP_RESPONSE *resp = NULL;
|
OCSP_RESPONSE *resp = NULL;
|
||||||
OCSP_BASICRESP *bs = NULL;
|
OCSP_BASICRESP *bs = NULL;
|
||||||
@@ -111,11 +143,11 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO *acbio = NULL, *cbio = NULL;
|
BIO *acbio = NULL, *cbio = NULL;
|
||||||
BIO *derbio = NULL;
|
BIO *derbio = NULL;
|
||||||
BIO *out = NULL;
|
BIO *out = NULL;
|
||||||
|
int req_timeout = -1;
|
||||||
int req_text = 0, resp_text = 0;
|
int req_text = 0, resp_text = 0;
|
||||||
long nsec = MAX_VALIDITY_PERIOD, maxage = -1;
|
long nsec = MAX_VALIDITY_PERIOD, maxage = -1;
|
||||||
char *CAfile = NULL, *CApath = NULL;
|
char *CAfile = NULL, *CApath = NULL;
|
||||||
X509_STORE *store = NULL;
|
X509_STORE *store = NULL;
|
||||||
SSL_CTX *ctx = NULL;
|
|
||||||
STACK_OF(X509) *sign_other = NULL, *verify_other = NULL, *rother = NULL;
|
STACK_OF(X509) *sign_other = NULL, *verify_other = NULL, *rother = NULL;
|
||||||
char *sign_certfile = NULL, *verify_certfile = NULL, *rcertfile = NULL;
|
char *sign_certfile = NULL, *verify_certfile = NULL, *rcertfile = NULL;
|
||||||
unsigned long sign_flags = 0, verify_flags = 0, rflags = 0;
|
unsigned long sign_flags = 0, verify_flags = 0, rflags = 0;
|
||||||
@@ -124,7 +156,7 @@ int MAIN(int argc, char **argv)
|
|||||||
int badarg = 0;
|
int badarg = 0;
|
||||||
int i;
|
int i;
|
||||||
int ignore_err = 0;
|
int ignore_err = 0;
|
||||||
STACK *reqnames = NULL;
|
STACK_OF(OPENSSL_STRING) *reqnames = NULL;
|
||||||
STACK_OF(OCSP_CERTID) *ids = NULL;
|
STACK_OF(OCSP_CERTID) *ids = NULL;
|
||||||
|
|
||||||
X509 *rca_cert = NULL;
|
X509 *rca_cert = NULL;
|
||||||
@@ -132,14 +164,16 @@ int MAIN(int argc, char **argv)
|
|||||||
char *rca_filename = NULL;
|
char *rca_filename = NULL;
|
||||||
CA_DB *rdb = NULL;
|
CA_DB *rdb = NULL;
|
||||||
int nmin = 0, ndays = -1;
|
int nmin = 0, ndays = -1;
|
||||||
|
const EVP_MD *cert_id_md = NULL;
|
||||||
|
|
||||||
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;
|
||||||
SSL_load_error_strings();
|
SSL_load_error_strings();
|
||||||
|
OpenSSL_add_ssl_algorithms();
|
||||||
args = argv + 1;
|
args = argv + 1;
|
||||||
reqnames = sk_new_null();
|
reqnames = sk_OPENSSL_STRING_new_null();
|
||||||
ids = sk_OCSP_CERTID_new_null();
|
ids = sk_OCSP_CERTID_new_null();
|
||||||
while (!badarg && *args && *args[0] == '-')
|
while (!badarg && *args && *args[0] == '-')
|
||||||
{
|
{
|
||||||
@@ -152,6 +186,22 @@ int MAIN(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else badarg = 1;
|
else badarg = 1;
|
||||||
}
|
}
|
||||||
|
else if (!strcmp(*args, "-timeout"))
|
||||||
|
{
|
||||||
|
if (args[1])
|
||||||
|
{
|
||||||
|
args++;
|
||||||
|
req_timeout = atol(*args);
|
||||||
|
if (req_timeout < 0)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
"Illegal timeout value %s\n",
|
||||||
|
*args);
|
||||||
|
badarg = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else badarg = 1;
|
||||||
|
}
|
||||||
else if (!strcmp(*args, "-url"))
|
else if (!strcmp(*args, "-url"))
|
||||||
{
|
{
|
||||||
if (args[1])
|
if (args[1])
|
||||||
@@ -183,6 +233,16 @@ int MAIN(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else badarg = 1;
|
else badarg = 1;
|
||||||
}
|
}
|
||||||
|
else if (!strcmp(*args, "-header"))
|
||||||
|
{
|
||||||
|
if (args[1] && args[2])
|
||||||
|
{
|
||||||
|
if (!X509V3_add_value(args[1], args[2], &headers))
|
||||||
|
goto end;
|
||||||
|
args += 2;
|
||||||
|
}
|
||||||
|
else badarg = 1;
|
||||||
|
}
|
||||||
else if (!strcmp(*args, "-ignore_err"))
|
else if (!strcmp(*args, "-ignore_err"))
|
||||||
ignore_err = 1;
|
ignore_err = 1;
|
||||||
else if (!strcmp(*args, "-noverify"))
|
else if (!strcmp(*args, "-noverify"))
|
||||||
@@ -382,9 +442,10 @@ int MAIN(int argc, char **argv)
|
|||||||
cert = load_cert(bio_err, *args, FORMAT_PEM,
|
cert = load_cert(bio_err, *args, FORMAT_PEM,
|
||||||
NULL, e, "certificate");
|
NULL, e, "certificate");
|
||||||
if(!cert) goto end;
|
if(!cert) goto end;
|
||||||
if(!add_ocsp_cert(&req, cert, issuer, ids))
|
if (!cert_id_md) cert_id_md = EVP_sha1();
|
||||||
|
if(!add_ocsp_cert(&req, cert, cert_id_md, issuer, ids))
|
||||||
goto end;
|
goto end;
|
||||||
if(!sk_push(reqnames, *args))
|
if(!sk_OPENSSL_STRING_push(reqnames, *args))
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
else badarg = 1;
|
else badarg = 1;
|
||||||
@@ -394,9 +455,10 @@ int MAIN(int argc, char **argv)
|
|||||||
if (args[1])
|
if (args[1])
|
||||||
{
|
{
|
||||||
args++;
|
args++;
|
||||||
if(!add_ocsp_serial(&req, *args, issuer, ids))
|
if (!cert_id_md) cert_id_md = EVP_sha1();
|
||||||
|
if(!add_ocsp_serial(&req, *args, cert_id_md, issuer, ids))
|
||||||
goto end;
|
goto end;
|
||||||
if(!sk_push(reqnames, *args))
|
if(!sk_OPENSSL_STRING_push(reqnames, *args))
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
else badarg = 1;
|
else badarg = 1;
|
||||||
@@ -496,7 +558,10 @@ int MAIN(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else badarg = 1;
|
else badarg = 1;
|
||||||
}
|
}
|
||||||
else badarg = 1;
|
else if ((cert_id_md = EVP_get_digestbyname((*args)+1))==NULL)
|
||||||
|
{
|
||||||
|
badarg = 1;
|
||||||
|
}
|
||||||
args++;
|
args++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -552,6 +617,7 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO_printf (bio_err, "-ndays n number of days before next update\n");
|
BIO_printf (bio_err, "-ndays n number of days before next update\n");
|
||||||
BIO_printf (bio_err, "-resp_key_id identify reponse by signing certificate key ID\n");
|
BIO_printf (bio_err, "-resp_key_id identify reponse by signing certificate key ID\n");
|
||||||
BIO_printf (bio_err, "-nrequest n number of requests to accept (default unlimited)\n");
|
BIO_printf (bio_err, "-nrequest n number of requests to accept (default unlimited)\n");
|
||||||
|
BIO_printf (bio_err, "-<dgst alg> use specified digest in the request\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -658,7 +724,8 @@ int MAIN(int argc, char **argv)
|
|||||||
"signer private key");
|
"signer private key");
|
||||||
if (!key)
|
if (!key)
|
||||||
goto end;
|
goto end;
|
||||||
if (!OCSP_request_sign(req, signer, key, EVP_sha1(), sign_other, sign_flags))
|
|
||||||
|
if (!OCSP_request_sign(req, signer, key, NULL, sign_other, sign_flags))
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err, "Error signing OCSP request\n");
|
BIO_printf(bio_err, "Error signing OCSP request\n");
|
||||||
goto end;
|
goto end;
|
||||||
@@ -701,47 +768,14 @@ int MAIN(int argc, char **argv)
|
|||||||
else if (host)
|
else if (host)
|
||||||
{
|
{
|
||||||
#ifndef OPENSSL_NO_SOCK
|
#ifndef OPENSSL_NO_SOCK
|
||||||
cbio = BIO_new_connect(host);
|
resp = process_responder(bio_err, req, host, path,
|
||||||
|
port, use_ssl, headers, req_timeout);
|
||||||
|
if (!resp)
|
||||||
|
goto end;
|
||||||
#else
|
#else
|
||||||
BIO_printf(bio_err, "Error creating connect BIO - sockets not supported.\n");
|
BIO_printf(bio_err, "Error creating connect BIO - sockets not supported.\n");
|
||||||
goto end;
|
goto end;
|
||||||
#endif
|
#endif
|
||||||
if (!cbio)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err, "Error creating connect BIO\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
if (port) BIO_set_conn_port(cbio, port);
|
|
||||||
if (use_ssl == 1)
|
|
||||||
{
|
|
||||||
BIO *sbio;
|
|
||||||
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
|
|
||||||
ctx = SSL_CTX_new(SSLv23_client_method());
|
|
||||||
#elif !defined(OPENSSL_NO_SSL3)
|
|
||||||
ctx = SSL_CTX_new(SSLv3_client_method());
|
|
||||||
#elif !defined(OPENSSL_NO_SSL2)
|
|
||||||
ctx = SSL_CTX_new(SSLv2_client_method());
|
|
||||||
#else
|
|
||||||
BIO_printf(bio_err, "SSL is disabled\n");
|
|
||||||
goto end;
|
|
||||||
#endif
|
|
||||||
SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY);
|
|
||||||
sbio = BIO_new_ssl(ctx, 1);
|
|
||||||
cbio = BIO_push(sbio, cbio);
|
|
||||||
}
|
|
||||||
if (BIO_do_connect(cbio) <= 0)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err, "Error connecting BIO\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
resp = OCSP_sendreq_bio(cbio, path, req);
|
|
||||||
BIO_free_all(cbio);
|
|
||||||
cbio = NULL;
|
|
||||||
if (!resp)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err, "Error querying OCSP responsder\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (respin)
|
else if (respin)
|
||||||
{
|
{
|
||||||
@@ -784,7 +818,7 @@ int MAIN(int argc, char **argv)
|
|||||||
|
|
||||||
if (i != OCSP_RESPONSE_STATUS_SUCCESSFUL)
|
if (i != OCSP_RESPONSE_STATUS_SUCCESSFUL)
|
||||||
{
|
{
|
||||||
BIO_printf(out, "Responder Error: %s (%ld)\n",
|
BIO_printf(out, "Responder Error: %s (%d)\n",
|
||||||
OCSP_response_status_str(i), i);
|
OCSP_response_status_str(i), i);
|
||||||
if (ignore_err)
|
if (ignore_err)
|
||||||
goto redo_accept;
|
goto redo_accept;
|
||||||
@@ -850,7 +884,7 @@ int MAIN(int argc, char **argv)
|
|||||||
|
|
||||||
if(i <= 0)
|
if(i <= 0)
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err, "Response Verify Failure\n", i);
|
BIO_printf(bio_err, "Response Verify Failure\n");
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -880,23 +914,23 @@ end:
|
|||||||
OCSP_REQUEST_free(req);
|
OCSP_REQUEST_free(req);
|
||||||
OCSP_RESPONSE_free(resp);
|
OCSP_RESPONSE_free(resp);
|
||||||
OCSP_BASICRESP_free(bs);
|
OCSP_BASICRESP_free(bs);
|
||||||
sk_free(reqnames);
|
sk_OPENSSL_STRING_free(reqnames);
|
||||||
sk_OCSP_CERTID_free(ids);
|
sk_OCSP_CERTID_free(ids);
|
||||||
sk_X509_pop_free(sign_other, X509_free);
|
sk_X509_pop_free(sign_other, X509_free);
|
||||||
sk_X509_pop_free(verify_other, X509_free);
|
sk_X509_pop_free(verify_other, X509_free);
|
||||||
|
sk_CONF_VALUE_pop_free(headers, X509V3_conf_free);
|
||||||
|
|
||||||
if (use_ssl != -1)
|
if (use_ssl != -1)
|
||||||
{
|
{
|
||||||
OPENSSL_free(host);
|
OPENSSL_free(host);
|
||||||
OPENSSL_free(port);
|
OPENSSL_free(port);
|
||||||
OPENSSL_free(path);
|
OPENSSL_free(path);
|
||||||
SSL_CTX_free(ctx);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
OPENSSL_EXIT(ret);
|
OPENSSL_EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int add_ocsp_cert(OCSP_REQUEST **req, X509 *cert, X509 *issuer,
|
static int add_ocsp_cert(OCSP_REQUEST **req, X509 *cert, const EVP_MD *cert_id_md,X509 *issuer,
|
||||||
STACK_OF(OCSP_CERTID) *ids)
|
STACK_OF(OCSP_CERTID) *ids)
|
||||||
{
|
{
|
||||||
OCSP_CERTID *id;
|
OCSP_CERTID *id;
|
||||||
@@ -907,7 +941,7 @@ static int add_ocsp_cert(OCSP_REQUEST **req, X509 *cert, X509 *issuer,
|
|||||||
}
|
}
|
||||||
if(!*req) *req = OCSP_REQUEST_new();
|
if(!*req) *req = OCSP_REQUEST_new();
|
||||||
if(!*req) goto err;
|
if(!*req) goto err;
|
||||||
id = OCSP_cert_to_id(NULL, cert, issuer);
|
id = OCSP_cert_to_id(cert_id_md, cert, issuer);
|
||||||
if(!id || !sk_OCSP_CERTID_push(ids, id)) goto err;
|
if(!id || !sk_OCSP_CERTID_push(ids, id)) goto err;
|
||||||
if(!OCSP_request_add0_id(*req, id)) goto err;
|
if(!OCSP_request_add0_id(*req, id)) goto err;
|
||||||
return 1;
|
return 1;
|
||||||
@@ -917,7 +951,7 @@ static int add_ocsp_cert(OCSP_REQUEST **req, X509 *cert, X509 *issuer,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int add_ocsp_serial(OCSP_REQUEST **req, char *serial, X509 *issuer,
|
static int add_ocsp_serial(OCSP_REQUEST **req, char *serial,const EVP_MD *cert_id_md, X509 *issuer,
|
||||||
STACK_OF(OCSP_CERTID) *ids)
|
STACK_OF(OCSP_CERTID) *ids)
|
||||||
{
|
{
|
||||||
OCSP_CERTID *id;
|
OCSP_CERTID *id;
|
||||||
@@ -939,7 +973,7 @@ static int add_ocsp_serial(OCSP_REQUEST **req, char *serial, X509 *issuer,
|
|||||||
BIO_printf(bio_err, "Error converting serial number %s\n", serial);
|
BIO_printf(bio_err, "Error converting serial number %s\n", serial);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
id = OCSP_cert_id_new(EVP_sha1(), iname, ikey, sno);
|
id = OCSP_cert_id_new(cert_id_md, iname, ikey, sno);
|
||||||
ASN1_INTEGER_free(sno);
|
ASN1_INTEGER_free(sno);
|
||||||
if(!id || !sk_OCSP_CERTID_push(ids, id)) goto err;
|
if(!id || !sk_OCSP_CERTID_push(ids, id)) goto err;
|
||||||
if(!OCSP_request_add0_id(*req, id)) goto err;
|
if(!OCSP_request_add0_id(*req, id)) goto err;
|
||||||
@@ -951,8 +985,9 @@ static int add_ocsp_serial(OCSP_REQUEST **req, char *serial, X509 *issuer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req,
|
static int print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req,
|
||||||
STACK *names, STACK_OF(OCSP_CERTID) *ids,
|
STACK_OF(OPENSSL_STRING) *names,
|
||||||
long nsec, long maxage)
|
STACK_OF(OCSP_CERTID) *ids, long nsec,
|
||||||
|
long maxage)
|
||||||
{
|
{
|
||||||
OCSP_CERTID *id;
|
OCSP_CERTID *id;
|
||||||
char *name;
|
char *name;
|
||||||
@@ -962,13 +997,13 @@ static int print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req,
|
|||||||
|
|
||||||
ASN1_GENERALIZEDTIME *rev, *thisupd, *nextupd;
|
ASN1_GENERALIZEDTIME *rev, *thisupd, *nextupd;
|
||||||
|
|
||||||
if (!bs || !req || !sk_num(names) || !sk_OCSP_CERTID_num(ids))
|
if (!bs || !req || !sk_OPENSSL_STRING_num(names) || !sk_OCSP_CERTID_num(ids))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
for (i = 0; i < sk_OCSP_CERTID_num(ids); i++)
|
for (i = 0; i < sk_OCSP_CERTID_num(ids); i++)
|
||||||
{
|
{
|
||||||
id = sk_OCSP_CERTID_value(ids, i);
|
id = sk_OCSP_CERTID_value(ids, i);
|
||||||
name = sk_value(names, i);
|
name = sk_OPENSSL_STRING_value(names, i);
|
||||||
BIO_printf(out, "%s: ", name);
|
BIO_printf(out, "%s: ", name);
|
||||||
|
|
||||||
if(!OCSP_resp_find_status(bs, id, &status, &reason,
|
if(!OCSP_resp_find_status(bs, id, &status, &reason,
|
||||||
@@ -1025,7 +1060,6 @@ static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, CA_DB *db
|
|||||||
OCSP_BASICRESP *bs = NULL;
|
OCSP_BASICRESP *bs = NULL;
|
||||||
int i, id_count, ret = 1;
|
int i, id_count, ret = 1;
|
||||||
|
|
||||||
|
|
||||||
id_count = OCSP_request_onereq_count(req);
|
id_count = OCSP_request_onereq_count(req);
|
||||||
|
|
||||||
if (id_count <= 0)
|
if (id_count <= 0)
|
||||||
@@ -1034,7 +1068,6 @@ static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, CA_DB *db
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
ca_id = OCSP_cert_to_id(EVP_sha1(), NULL, ca);
|
|
||||||
|
|
||||||
bs = OCSP_BASICRESP_new();
|
bs = OCSP_BASICRESP_new();
|
||||||
thisupd = X509_gmtime_adj(NULL, 0);
|
thisupd = X509_gmtime_adj(NULL, 0);
|
||||||
@@ -1047,8 +1080,23 @@ static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, CA_DB *db
|
|||||||
OCSP_ONEREQ *one;
|
OCSP_ONEREQ *one;
|
||||||
ASN1_INTEGER *serial;
|
ASN1_INTEGER *serial;
|
||||||
char **inf;
|
char **inf;
|
||||||
|
ASN1_OBJECT *cert_id_md_oid;
|
||||||
|
const EVP_MD *cert_id_md;
|
||||||
one = OCSP_request_onereq_get0(req, i);
|
one = OCSP_request_onereq_get0(req, i);
|
||||||
cid = OCSP_onereq_get0_id(one);
|
cid = OCSP_onereq_get0_id(one);
|
||||||
|
|
||||||
|
OCSP_id_get0_info(NULL,&cert_id_md_oid, NULL,NULL, cid);
|
||||||
|
|
||||||
|
cert_id_md = EVP_get_digestbyobj(cert_id_md_oid);
|
||||||
|
if (! cert_id_md)
|
||||||
|
{
|
||||||
|
*resp = OCSP_response_create(OCSP_RESPONSE_STATUS_INTERNALERROR,
|
||||||
|
NULL);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (ca_id) OCSP_CERTID_free(ca_id);
|
||||||
|
ca_id = OCSP_cert_to_id(cert_id_md, NULL, ca);
|
||||||
|
|
||||||
/* Is this request about our CA? */
|
/* Is this request about our CA? */
|
||||||
if (OCSP_id_issuer_cmp(ca_id, cid))
|
if (OCSP_id_issuer_cmp(ca_id, cid))
|
||||||
{
|
{
|
||||||
@@ -1094,7 +1142,7 @@ static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, CA_DB *db
|
|||||||
|
|
||||||
OCSP_copy_nonce(bs, req);
|
OCSP_copy_nonce(bs, req);
|
||||||
|
|
||||||
OCSP_basic_sign(bs, rcert, rkey, EVP_sha1(), rother, flags);
|
OCSP_basic_sign(bs, rcert, rkey, NULL, rother, flags);
|
||||||
|
|
||||||
*resp = OCSP_response_create(OCSP_RESPONSE_STATUS_SUCCESSFUL, bs);
|
*resp = OCSP_response_create(OCSP_RESPONSE_STATUS_SUCCESSFUL, bs);
|
||||||
|
|
||||||
@@ -1114,6 +1162,7 @@ static char **lookup_serial(CA_DB *db, ASN1_INTEGER *ser)
|
|||||||
char *itmp, *row[DB_NUMBER],**rrow;
|
char *itmp, *row[DB_NUMBER],**rrow;
|
||||||
for (i = 0; i < DB_NUMBER; i++) row[i] = NULL;
|
for (i = 0; i < DB_NUMBER; i++) row[i] = NULL;
|
||||||
bn = ASN1_INTEGER_to_BN(ser,NULL);
|
bn = ASN1_INTEGER_to_BN(ser,NULL);
|
||||||
|
OPENSSL_assert(bn); /* FIXME: should report an error at this point and abort */
|
||||||
if (BN_is_zero(bn))
|
if (BN_is_zero(bn))
|
||||||
itmp = BUF_strdup("00");
|
itmp = BUF_strdup("00");
|
||||||
else
|
else
|
||||||
@@ -1220,8 +1269,153 @@ static int send_ocsp_response(BIO *cbio, OCSP_RESPONSE *resp)
|
|||||||
return 0;
|
return 0;
|
||||||
BIO_printf(cbio, http_resp, i2d_OCSP_RESPONSE(resp, NULL));
|
BIO_printf(cbio, http_resp, i2d_OCSP_RESPONSE(resp, NULL));
|
||||||
i2d_OCSP_RESPONSE_bio(cbio, resp);
|
i2d_OCSP_RESPONSE_bio(cbio, resp);
|
||||||
BIO_flush(cbio);
|
(void)BIO_flush(cbio);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, char *path,
|
||||||
|
STACK_OF(CONF_VALUE) *headers,
|
||||||
|
OCSP_REQUEST *req, int req_timeout)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
int rv;
|
||||||
|
int i;
|
||||||
|
OCSP_REQ_CTX *ctx = NULL;
|
||||||
|
OCSP_RESPONSE *rsp = NULL;
|
||||||
|
fd_set confds;
|
||||||
|
struct timeval tv;
|
||||||
|
|
||||||
|
if (req_timeout != -1)
|
||||||
|
BIO_set_nbio(cbio, 1);
|
||||||
|
|
||||||
|
rv = BIO_do_connect(cbio);
|
||||||
|
|
||||||
|
if ((rv <= 0) && ((req_timeout == -1) || !BIO_should_retry(cbio)))
|
||||||
|
{
|
||||||
|
BIO_puts(err, "Error connecting BIO\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BIO_get_fd(cbio, &fd) <= 0)
|
||||||
|
{
|
||||||
|
BIO_puts(err, "Can't get connection fd\n");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (req_timeout != -1 && rv <= 0)
|
||||||
|
{
|
||||||
|
FD_ZERO(&confds);
|
||||||
|
openssl_fdset(fd, &confds);
|
||||||
|
tv.tv_usec = 0;
|
||||||
|
tv.tv_sec = req_timeout;
|
||||||
|
rv = select(fd + 1, NULL, (void *)&confds, NULL, &tv);
|
||||||
|
if (rv == 0)
|
||||||
|
{
|
||||||
|
BIO_puts(err, "Timeout on connect\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ctx = OCSP_sendreq_new(cbio, path, NULL, -1);
|
||||||
|
if (!ctx)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
for (i = 0; i < sk_CONF_VALUE_num(headers); i++)
|
||||||
|
{
|
||||||
|
CONF_VALUE *hdr = sk_CONF_VALUE_value(headers, i);
|
||||||
|
if (!OCSP_REQ_CTX_add1_header(ctx, hdr->name, hdr->value))
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!OCSP_REQ_CTX_set1_req(ctx, req))
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
rv = OCSP_sendreq_nbio(&rsp, ctx);
|
||||||
|
if (rv != -1)
|
||||||
|
break;
|
||||||
|
if (req_timeout == -1)
|
||||||
|
continue;
|
||||||
|
FD_ZERO(&confds);
|
||||||
|
openssl_fdset(fd, &confds);
|
||||||
|
tv.tv_usec = 0;
|
||||||
|
tv.tv_sec = req_timeout;
|
||||||
|
if (BIO_should_read(cbio))
|
||||||
|
rv = select(fd + 1, (void *)&confds, NULL, NULL, &tv);
|
||||||
|
else if (BIO_should_write(cbio))
|
||||||
|
rv = select(fd + 1, NULL, (void *)&confds, NULL, &tv);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BIO_puts(err, "Unexpected retry condition\n");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if (rv == 0)
|
||||||
|
{
|
||||||
|
BIO_puts(err, "Timeout on request\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (rv == -1)
|
||||||
|
{
|
||||||
|
BIO_puts(err, "Select error\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
err:
|
||||||
|
if (ctx)
|
||||||
|
OCSP_REQ_CTX_free(ctx);
|
||||||
|
|
||||||
|
return rsp;
|
||||||
|
}
|
||||||
|
|
||||||
|
OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req,
|
||||||
|
char *host, char *path, char *port, int use_ssl,
|
||||||
|
STACK_OF(CONF_VALUE) *headers,
|
||||||
|
int req_timeout)
|
||||||
|
{
|
||||||
|
BIO *cbio = NULL;
|
||||||
|
SSL_CTX *ctx = NULL;
|
||||||
|
OCSP_RESPONSE *resp = NULL;
|
||||||
|
cbio = BIO_new_connect(host);
|
||||||
|
if (!cbio)
|
||||||
|
{
|
||||||
|
BIO_printf(err, "Error creating connect BIO\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (port) BIO_set_conn_port(cbio, port);
|
||||||
|
if (use_ssl == 1)
|
||||||
|
{
|
||||||
|
BIO *sbio;
|
||||||
|
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
|
||||||
|
ctx = SSL_CTX_new(SSLv23_client_method());
|
||||||
|
#elif !defined(OPENSSL_NO_SSL3)
|
||||||
|
ctx = SSL_CTX_new(SSLv3_client_method());
|
||||||
|
#elif !defined(OPENSSL_NO_SSL2)
|
||||||
|
ctx = SSL_CTX_new(SSLv2_client_method());
|
||||||
|
#else
|
||||||
|
BIO_printf(err, "SSL is disabled\n");
|
||||||
|
goto end;
|
||||||
|
#endif
|
||||||
|
if (ctx == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(err, "Error creating SSL context.\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY);
|
||||||
|
sbio = BIO_new_ssl(ctx, 1);
|
||||||
|
cbio = BIO_push(sbio, cbio);
|
||||||
|
}
|
||||||
|
resp = query_responder(err, cbio, path, headers, req, req_timeout);
|
||||||
|
if (!resp)
|
||||||
|
BIO_printf(bio_err, "Error querying OCSP responsder\n");
|
||||||
|
end:
|
||||||
|
if (cbio)
|
||||||
|
BIO_free_all(cbio);
|
||||||
|
if (ctx)
|
||||||
|
SSL_CTX_free(ctx);
|
||||||
|
return resp;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -3,8 +3,13 @@
|
|||||||
# This is mostly being used for generation of certificate requests.
|
# This is mostly being used for generation of certificate requests.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# This definition stops the following lines choking if HOME isn't
|
||||||
|
# defined.
|
||||||
|
HOME = .
|
||||||
RANDFILE = $ENV::HOME/.rnd
|
RANDFILE = $ENV::HOME/.rnd
|
||||||
oid_file = $ENV::HOME/.oid
|
|
||||||
|
# Extra OBJECT IDENTIFIER info:
|
||||||
|
#oid_file = $ENV::HOME/.oid
|
||||||
oid_section = new_oids
|
oid_section = new_oids
|
||||||
|
|
||||||
# To use this configuration file with the "-extfile" option of the
|
# To use this configuration file with the "-extfile" option of the
|
||||||
@@ -16,12 +21,17 @@ oid_section = new_oids
|
|||||||
|
|
||||||
[ new_oids ]
|
[ new_oids ]
|
||||||
|
|
||||||
# We can add new OIDs in here for use by 'ca' and 'req'.
|
# We can add new OIDs in here for use by 'ca', 'req' and 'ts'.
|
||||||
# Add a simple OID like this:
|
# Add a simple OID like this:
|
||||||
# testoid1=1.2.3.4
|
# testoid1=1.2.3.4
|
||||||
# Or use config file substitution like this:
|
# Or use config file substitution like this:
|
||||||
# testoid2=${testoid1}.5.6
|
# testoid2=${testoid1}.5.6
|
||||||
|
|
||||||
|
# Policies used by the TSA examples.
|
||||||
|
tsa_policy1 = 1.2.3.4.1
|
||||||
|
tsa_policy2 = 1.2.3.4.5.6
|
||||||
|
tsa_policy3 = 1.2.3.4.5.7
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
[ ca ]
|
[ ca ]
|
||||||
default_ca = CA_default # The default ca section
|
default_ca = CA_default # The default ca section
|
||||||
@@ -29,27 +39,40 @@ default_ca = CA_default # The default ca section
|
|||||||
####################################################################
|
####################################################################
|
||||||
[ CA_default ]
|
[ CA_default ]
|
||||||
|
|
||||||
dir = sys\$disk:[.demoCA # Where everything is kept
|
dir = sys\$disk:[.demoCA # Where everything is kept
|
||||||
certs = $dir.certs] # Where the issued certs are kept
|
certs = $dir.certs] # Where the issued certs are kept
|
||||||
crl_dir = $dir.crl] # Where the issued crl are kept
|
crl_dir = $dir.crl] # Where the issued crl are kept
|
||||||
database = $dir]index.txt # database index file.
|
database = $dir]index.txt # database index file.
|
||||||
new_certs_dir = $dir.newcerts] # default place for new certs.
|
#unique_subject = no # Set to 'no' to allow creation of
|
||||||
|
# several ctificates with same subject.
|
||||||
|
new_certs_dir = $dir.newcerts] # default place for new certs.
|
||||||
|
|
||||||
certificate = $dir]cacert.pem # The CA certificate
|
certificate = $dir]cacert.pem # The CA certificate
|
||||||
serial = $dir]serial. # The current serial number
|
serial = $dir]serial. # The current serial number
|
||||||
|
crlnumber = $dir]crlnumber. # the current crl number
|
||||||
|
# must be commented out to leave a V1 CRL
|
||||||
crl = $dir]crl.pem # The current CRL
|
crl = $dir]crl.pem # The current CRL
|
||||||
private_key = $dir.private]cakey.pem# The private key
|
private_key = $dir.private]cakey.pem# The private key
|
||||||
RANDFILE = $dir.private].rand # private random number file
|
RANDFILE = $dir.private].rand # private random number file
|
||||||
|
|
||||||
x509_extensions = usr_cert # The extentions to add to the cert
|
x509_extensions = usr_cert # The extentions to add to the cert
|
||||||
|
|
||||||
|
# Comment out the following two lines for the "traditional"
|
||||||
|
# (and highly broken) format.
|
||||||
|
name_opt = ca_default # Subject Name options
|
||||||
|
cert_opt = ca_default # Certificate field options
|
||||||
|
|
||||||
|
# Extension copying option: use with caution.
|
||||||
|
# copy_extensions = copy
|
||||||
|
|
||||||
# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
|
# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
|
||||||
# so this is commented out by default to leave a V1 CRL.
|
# so this is commented out by default to leave a V1 CRL.
|
||||||
|
# crlnumber must also be commented out to leave a V1 CRL.
|
||||||
# crl_extensions = crl_ext
|
# crl_extensions = crl_ext
|
||||||
|
|
||||||
default_days = 365 # how long to certify for
|
default_days = 365 # how long to certify for
|
||||||
default_crl_days= 30 # how long before next CRL
|
default_crl_days= 30 # how long before next CRL
|
||||||
default_md = md5 # which md to use.
|
default_md = default # use public key default MD
|
||||||
preserve = no # keep passed DN ordering
|
preserve = no # keep passed DN ordering
|
||||||
|
|
||||||
# A few difference way of specifying how similar the request should look
|
# A few difference way of specifying how similar the request should look
|
||||||
@@ -86,16 +109,18 @@ distinguished_name = req_distinguished_name
|
|||||||
attributes = req_attributes
|
attributes = req_attributes
|
||||||
x509_extensions = v3_ca # The extentions to add to the self signed cert
|
x509_extensions = v3_ca # The extentions to add to the self signed cert
|
||||||
|
|
||||||
# This sets the permitted types in a DirectoryString. There are several
|
# Passwords for private keys if not present they will be prompted for
|
||||||
# options.
|
# input_password = secret
|
||||||
|
# output_password = secret
|
||||||
|
|
||||||
|
# This sets a mask for permitted string types. There are several options.
|
||||||
# default: PrintableString, T61String, BMPString.
|
# default: PrintableString, T61String, BMPString.
|
||||||
# pkix : PrintableString, BMPString.
|
# pkix : PrintableString, BMPString (PKIX recommendation before 2004)
|
||||||
# utf8only: only UTF8Strings.
|
# utf8only: only UTF8Strings (PKIX recommendation after 2004).
|
||||||
# nobmp : PrintableString, T61String (no BMPStrings).
|
# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
|
||||||
# MASK:XXXX a literal mask value.
|
# MASK:XXXX a literal mask value.
|
||||||
# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings
|
# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings.
|
||||||
# so use this option with caution!
|
string_mask = utf8only
|
||||||
dirstring_type = nobmp
|
|
||||||
|
|
||||||
# req_extensions = v3_req # The extensions to add to a certificate request
|
# req_extensions = v3_req # The extensions to add to a certificate request
|
||||||
|
|
||||||
@@ -120,11 +145,11 @@ 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
|
||||||
emailAddress_max = 40
|
emailAddress_max = 64
|
||||||
|
|
||||||
# SET-ex3 = SET extension number 3
|
# SET-ex3 = SET extension number 3
|
||||||
|
|
||||||
@@ -167,11 +192,14 @@ nsComment = "OpenSSL Generated Certificate"
|
|||||||
|
|
||||||
# PKIX recommendations harmless if included in all certificates.
|
# PKIX recommendations harmless if included in all certificates.
|
||||||
subjectKeyIdentifier=hash
|
subjectKeyIdentifier=hash
|
||||||
authorityKeyIdentifier=keyid,issuer:always
|
authorityKeyIdentifier=keyid,issuer
|
||||||
|
|
||||||
# This stuff is for subjectAltName and issuerAltname.
|
# This stuff is for subjectAltName and issuerAltname.
|
||||||
# Import the email address.
|
# Import the email address.
|
||||||
# subjectAltName=email:copy
|
# subjectAltName=email:copy
|
||||||
|
# An alternative to produce certificates that aren't
|
||||||
|
# deprecated according to PKIX.
|
||||||
|
# subjectAltName=email:move
|
||||||
|
|
||||||
# Copy subject details
|
# Copy subject details
|
||||||
# issuerAltName=issuer:copy
|
# issuerAltName=issuer:copy
|
||||||
@@ -183,6 +211,9 @@ authorityKeyIdentifier=keyid,issuer:always
|
|||||||
#nsCaPolicyUrl
|
#nsCaPolicyUrl
|
||||||
#nsSslServerName
|
#nsSslServerName
|
||||||
|
|
||||||
|
# This is required for TSA certificates.
|
||||||
|
# extendedKeyUsage = critical,timeStamping
|
||||||
|
|
||||||
[ v3_req ]
|
[ v3_req ]
|
||||||
|
|
||||||
# Extensions to add to a certificate request
|
# Extensions to add to a certificate request
|
||||||
@@ -200,7 +231,7 @@ keyUsage = nonRepudiation, digitalSignature, keyEncipherment
|
|||||||
|
|
||||||
subjectKeyIdentifier=hash
|
subjectKeyIdentifier=hash
|
||||||
|
|
||||||
authorityKeyIdentifier=keyid:always,issuer:always
|
authorityKeyIdentifier=keyid:always,issuer
|
||||||
|
|
||||||
# This is what PKIX recommends but some broken software chokes on critical
|
# This is what PKIX recommends but some broken software chokes on critical
|
||||||
# extensions.
|
# extensions.
|
||||||
@@ -233,4 +264,87 @@ basicConstraints = CA:true
|
|||||||
# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
|
# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
|
||||||
|
|
||||||
# issuerAltName=issuer:copy
|
# issuerAltName=issuer:copy
|
||||||
authorityKeyIdentifier=keyid:always,issuer:always
|
authorityKeyIdentifier=keyid:always
|
||||||
|
|
||||||
|
[ proxy_cert_ext ]
|
||||||
|
# These extensions should be added when creating a proxy certificate
|
||||||
|
|
||||||
|
# This goes against PKIX guidelines but some CAs do it and some software
|
||||||
|
# requires this to avoid interpreting an end user certificate as a CA.
|
||||||
|
|
||||||
|
basicConstraints=CA:FALSE
|
||||||
|
|
||||||
|
# Here are some examples of the usage of nsCertType. If it is omitted
|
||||||
|
# the certificate can be used for anything *except* object signing.
|
||||||
|
|
||||||
|
# This is OK for an SSL server.
|
||||||
|
# nsCertType = server
|
||||||
|
|
||||||
|
# For an object signing certificate this would be used.
|
||||||
|
# nsCertType = objsign
|
||||||
|
|
||||||
|
# For normal client use this is typical
|
||||||
|
# nsCertType = client, email
|
||||||
|
|
||||||
|
# and for everything including object signing:
|
||||||
|
# nsCertType = client, email, objsign
|
||||||
|
|
||||||
|
# This is typical in keyUsage for a client certificate.
|
||||||
|
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
|
||||||
|
|
||||||
|
# This will be displayed in Netscape's comment listbox.
|
||||||
|
nsComment = "OpenSSL Generated Certificate"
|
||||||
|
|
||||||
|
# PKIX recommendations harmless if included in all certificates.
|
||||||
|
subjectKeyIdentifier=hash
|
||||||
|
authorityKeyIdentifier=keyid,issuer
|
||||||
|
|
||||||
|
# This stuff is for subjectAltName and issuerAltname.
|
||||||
|
# Import the email address.
|
||||||
|
# subjectAltName=email:copy
|
||||||
|
# An alternative to produce certificates that aren't
|
||||||
|
# deprecated according to PKIX.
|
||||||
|
# subjectAltName=email:move
|
||||||
|
|
||||||
|
# Copy subject details
|
||||||
|
# issuerAltName=issuer:copy
|
||||||
|
|
||||||
|
#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem
|
||||||
|
#nsBaseUrl
|
||||||
|
#nsRevocationUrl
|
||||||
|
#nsRenewalUrl
|
||||||
|
#nsCaPolicyUrl
|
||||||
|
#nsSslServerName
|
||||||
|
|
||||||
|
# This really needs to be in place for it to be a proxy certificate.
|
||||||
|
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
|
||||||
|
|
||||||
|
####################################################################
|
||||||
|
[ tsa ]
|
||||||
|
|
||||||
|
default_tsa = tsa_config1 # the default TSA section
|
||||||
|
|
||||||
|
[ tsa_config1 ]
|
||||||
|
|
||||||
|
# These are used by the TSA reply generation only.
|
||||||
|
dir = sys\$disk:[.demoCA # TSA root directory
|
||||||
|
serial = $dir]tsaserial. # The current serial number (mandatory)
|
||||||
|
crypto_device = builtin # OpenSSL engine to use for signing
|
||||||
|
signer_cert = $dir/tsacert.pem # The TSA signing certificate
|
||||||
|
# (optional)
|
||||||
|
certs = $dir.cacert.pem] # Certificate chain to include in reply
|
||||||
|
# (optional)
|
||||||
|
signer_key = $dir/private/tsakey.pem # The TSA private key (optional)
|
||||||
|
|
||||||
|
default_policy = tsa_policy1 # Policy if request did not specify it
|
||||||
|
# (optional)
|
||||||
|
other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional)
|
||||||
|
digests = md5, sha1 # Acceptable message digests (mandatory)
|
||||||
|
accuracy = secs:1, millisecs:500, microsecs:100 # (optional)
|
||||||
|
clock_precision_digits = 0 # number of digits after dot. (optional)
|
||||||
|
ordering = yes # Is ordering defined for timestamps?
|
||||||
|
# (optional, default: no)
|
||||||
|
tsa_name = yes # Must the TSA name be included in the reply?
|
||||||
|
# (optional, default: no)
|
||||||
|
ess_cert_id_chain = no # Must the ESS cert id chain be included?
|
||||||
|
# (optional, default: no)
|
||||||
|
|||||||
309
apps/openssl.c
309
apps/openssl.c
@@ -56,7 +56,7 @@
|
|||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 1998-2006 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
|
||||||
@@ -117,6 +117,7 @@
|
|||||||
#include "apps.h"
|
#include "apps.h"
|
||||||
#include <openssl/bio.h>
|
#include <openssl/bio.h>
|
||||||
#include <openssl/crypto.h>
|
#include <openssl/crypto.h>
|
||||||
|
#include <openssl/rand.h>
|
||||||
#include <openssl/lhash.h>
|
#include <openssl/lhash.h>
|
||||||
#include <openssl/conf.h>
|
#include <openssl/conf.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
@@ -129,19 +130,20 @@
|
|||||||
#include "progs.h"
|
#include "progs.h"
|
||||||
#include "s_apps.h"
|
#include "s_apps.h"
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
|
#ifdef OPENSSL_FIPS
|
||||||
#include <openssl/fips.h>
|
#include <openssl/fips.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* The LHASH callbacks ("hash" & "cmp") have been replaced by functions with the
|
/* The LHASH callbacks ("hash" & "cmp") have been replaced by functions with the
|
||||||
* base prototypes (we cast each variable inside the function to the required
|
* base prototypes (we cast each variable inside the function to the required
|
||||||
* type of "FUNCTION*"). This removes the necessity for macro-generated wrapper
|
* type of "FUNCTION*"). This removes the necessity for macro-generated wrapper
|
||||||
* functions. */
|
* functions. */
|
||||||
|
|
||||||
/* static unsigned long MS_CALLBACK hash(FUNCTION *a); */
|
static LHASH_OF(FUNCTION) *prog_init(void );
|
||||||
static unsigned long MS_CALLBACK hash(const void *a_void);
|
static int do_cmd(LHASH_OF(FUNCTION) *prog,int argc,char *argv[]);
|
||||||
/* static int MS_CALLBACK cmp(FUNCTION *a,FUNCTION *b); */
|
static void list_pkey(BIO *out);
|
||||||
static int MS_CALLBACK cmp(const void *a_void,const void *b_void);
|
static void list_cipher(BIO *out);
|
||||||
static LHASH *prog_init(void );
|
static void list_md(BIO *out);
|
||||||
static int do_cmd(LHASH *prog,int argc,char *argv[]);
|
|
||||||
char *default_config_file=NULL;
|
char *default_config_file=NULL;
|
||||||
|
|
||||||
/* Make sure there is only one when MONOLITH is defined */
|
/* Make sure there is only one when MONOLITH is defined */
|
||||||
@@ -214,42 +216,78 @@ static void lock_dbg_cb(int mode, int type, const char *file, int line)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64)
|
||||||
|
# define ARGV _Argv
|
||||||
|
#else
|
||||||
|
# define ARGV Argv
|
||||||
|
#endif
|
||||||
|
|
||||||
int main(int Argc, char *Argv[])
|
int main(int Argc, char *ARGV[])
|
||||||
{
|
{
|
||||||
ARGS arg;
|
ARGS arg;
|
||||||
#define PROG_NAME_SIZE 39
|
#define PROG_NAME_SIZE 39
|
||||||
char pname[PROG_NAME_SIZE+1];
|
char pname[PROG_NAME_SIZE+1];
|
||||||
FUNCTION f,*fp;
|
FUNCTION f,*fp;
|
||||||
MS_STATIC char *prompt,buf[1024];
|
MS_STATIC const char *prompt;
|
||||||
|
MS_STATIC char buf[1024];
|
||||||
char *to_free=NULL;
|
char *to_free=NULL;
|
||||||
int n,i,ret=0;
|
int n,i,ret=0;
|
||||||
int argc;
|
int argc;
|
||||||
char **argv,*p;
|
char **argv,*p;
|
||||||
LHASH *prog=NULL;
|
LHASH_OF(FUNCTION) *prog=NULL;
|
||||||
long errline;
|
long errline;
|
||||||
|
|
||||||
|
#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64)
|
||||||
|
/* 2011-03-22 SMS.
|
||||||
|
* If we have 32-bit pointers everywhere, then we're safe, and
|
||||||
|
* we bypass this mess, as on non-VMS systems. (See ARGV,
|
||||||
|
* above.)
|
||||||
|
* Problem 1: Compaq/HP C before V7.3 always used 32-bit
|
||||||
|
* pointers for argv[].
|
||||||
|
* Fix 1: For a 32-bit argv[], when we're using 64-bit pointers
|
||||||
|
* everywhere else, we always allocate and use a 64-bit
|
||||||
|
* duplicate of argv[].
|
||||||
|
* Problem 2: Compaq/HP C V7.3 (Alpha, IA64) before ECO1 failed
|
||||||
|
* to NULL-terminate a 64-bit argv[]. (As this was written, the
|
||||||
|
* compiler ECO was available only on IA64.)
|
||||||
|
* Fix 2: Unless advised not to (VMS_TRUST_ARGV), we test a
|
||||||
|
* 64-bit argv[argc] for NULL, and, if necessary, use a
|
||||||
|
* (properly) NULL-terminated (64-bit) duplicate of argv[].
|
||||||
|
* The same code is used in either case to duplicate argv[].
|
||||||
|
* Some of these decisions could be handled in preprocessing,
|
||||||
|
* but the code tends to get even uglier, and the penalty for
|
||||||
|
* deciding at compile- or run-time is tiny.
|
||||||
|
*/
|
||||||
|
char **Argv = NULL;
|
||||||
|
int free_Argv = 0;
|
||||||
|
|
||||||
|
if ((sizeof( _Argv) < 8) /* 32-bit argv[]. */
|
||||||
|
# if !defined( VMS_TRUST_ARGV)
|
||||||
|
|| (_Argv[ Argc] != NULL) /* Untrusted argv[argc] not NULL. */
|
||||||
|
# endif
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
Argv = OPENSSL_malloc( (Argc+ 1)* sizeof( char *));
|
||||||
|
if (Argv == NULL)
|
||||||
|
{ ret = -1; goto end; }
|
||||||
|
for(i = 0; i < Argc; i++)
|
||||||
|
Argv[i] = _Argv[i];
|
||||||
|
Argv[ Argc] = NULL; /* Certain NULL termination. */
|
||||||
|
free_Argv = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Use the known-good 32-bit argv[] (which needs the
|
||||||
|
* type cast to satisfy the compiler), or the trusted or
|
||||||
|
* tested-good 64-bit argv[] as-is. */
|
||||||
|
Argv = (char **)_Argv;
|
||||||
|
}
|
||||||
|
#endif /* defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64) */
|
||||||
|
|
||||||
arg.data=NULL;
|
arg.data=NULL;
|
||||||
arg.count=0;
|
arg.count=0;
|
||||||
|
|
||||||
#ifdef OPENSSL_FIPS
|
|
||||||
if(getenv("OPENSSL_FIPS")) {
|
|
||||||
#if defined(_WIN32)
|
|
||||||
char filename[MAX_PATH] = "";
|
|
||||||
GetModuleFileName( NULL, filename, MAX_PATH) ;
|
|
||||||
p = filename;
|
|
||||||
#else
|
|
||||||
p = Argv[0];
|
|
||||||
#endif
|
|
||||||
if (!FIPS_mode_set(1,p)) {
|
|
||||||
ERR_load_crypto_strings();
|
|
||||||
ERR_print_errors(BIO_new_fp(stderr,BIO_NOCLOSE));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
if (getenv("OPENSSL_FIPS_MD5"))
|
|
||||||
FIPS_allow_md5(1);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
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);
|
||||||
@@ -276,6 +314,19 @@ int main(int Argc, char *Argv[])
|
|||||||
CRYPTO_set_locking_callback(lock_dbg_cb);
|
CRYPTO_set_locking_callback(lock_dbg_cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(getenv("OPENSSL_FIPS")) {
|
||||||
|
#ifdef OPENSSL_FIPS
|
||||||
|
if (!FIPS_mode_set(1)) {
|
||||||
|
ERR_load_crypto_strings();
|
||||||
|
ERR_print_errors(BIO_new_fp(stderr,BIO_NOCLOSE));
|
||||||
|
EXIT(1);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
fprintf(stderr, "FIPS mode not supported.\n");
|
||||||
|
EXIT(1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
/* Lets load up our environment a little */
|
/* Lets load up our environment a little */
|
||||||
@@ -291,9 +342,21 @@ int main(int Argc, char *Argv[])
|
|||||||
i=NCONF_load(config,p,&errline);
|
i=NCONF_load(config,p,&errline);
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
{
|
{
|
||||||
NCONF_free(config);
|
if (ERR_GET_REASON(ERR_peek_last_error())
|
||||||
config = NULL;
|
== CONF_R_NO_SUCH_FILE)
|
||||||
ERR_clear_error();
|
{
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
"WARNING: can't open config file: %s\n",p);
|
||||||
|
ERR_clear_error();
|
||||||
|
NCONF_free(config);
|
||||||
|
config = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
NCONF_free(config);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
prog=prog_init();
|
prog=prog_init();
|
||||||
@@ -302,7 +365,7 @@ int main(int Argc, char *Argv[])
|
|||||||
program_name(Argv[0],pname,sizeof pname);
|
program_name(Argv[0],pname,sizeof pname);
|
||||||
|
|
||||||
f.name=pname;
|
f.name=pname;
|
||||||
fp=(FUNCTION *)lh_retrieve(prog,&f);
|
fp=lh_FUNCTION_retrieve(prog,&f);
|
||||||
if (fp != NULL)
|
if (fp != NULL)
|
||||||
{
|
{
|
||||||
Argv[0]=pname;
|
Argv[0]=pname;
|
||||||
@@ -337,7 +400,8 @@ int main(int Argc, char *Argv[])
|
|||||||
else prompt="OpenSSL> ";
|
else prompt="OpenSSL> ";
|
||||||
fputs(prompt,stdout);
|
fputs(prompt,stdout);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
fgets(p,n,stdin);
|
if (!fgets(p,n,stdin))
|
||||||
|
goto end;
|
||||||
if (p[0] == '\0') goto end;
|
if (p[0] == '\0') goto end;
|
||||||
i=strlen(p);
|
i=strlen(p);
|
||||||
if (i <= 1) break;
|
if (i <= 1) break;
|
||||||
@@ -368,7 +432,7 @@ end:
|
|||||||
NCONF_free(config);
|
NCONF_free(config);
|
||||||
config=NULL;
|
config=NULL;
|
||||||
}
|
}
|
||||||
if (prog != NULL) lh_free(prog);
|
if (prog != NULL) lh_FUNCTION_free(prog);
|
||||||
if (arg.data != NULL) OPENSSL_free(arg.data);
|
if (arg.data != NULL) OPENSSL_free(arg.data);
|
||||||
|
|
||||||
apps_shutdown();
|
apps_shutdown();
|
||||||
@@ -379,14 +443,25 @@ end:
|
|||||||
BIO_free(bio_err);
|
BIO_free(bio_err);
|
||||||
bio_err=NULL;
|
bio_err=NULL;
|
||||||
}
|
}
|
||||||
|
#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64)
|
||||||
|
/* Free any duplicate Argv[] storage. */
|
||||||
|
if (free_Argv)
|
||||||
|
{
|
||||||
|
OPENSSL_free(Argv);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
OPENSSL_EXIT(ret);
|
OPENSSL_EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define LIST_STANDARD_COMMANDS "list-standard-commands"
|
#define LIST_STANDARD_COMMANDS "list-standard-commands"
|
||||||
#define LIST_MESSAGE_DIGEST_COMMANDS "list-message-digest-commands"
|
#define LIST_MESSAGE_DIGEST_COMMANDS "list-message-digest-commands"
|
||||||
|
#define LIST_MESSAGE_DIGEST_ALGORITHMS "list-message-digest-algorithms"
|
||||||
#define LIST_CIPHER_COMMANDS "list-cipher-commands"
|
#define LIST_CIPHER_COMMANDS "list-cipher-commands"
|
||||||
|
#define LIST_CIPHER_ALGORITHMS "list-cipher-algorithms"
|
||||||
|
#define LIST_PUBLIC_KEY_ALGORITHMS "list-public-key-algorithms"
|
||||||
|
|
||||||
static int do_cmd(LHASH *prog, int argc, char *argv[])
|
|
||||||
|
static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[])
|
||||||
{
|
{
|
||||||
FUNCTION f,*fp;
|
FUNCTION f,*fp;
|
||||||
int i,ret=1,tp,nl;
|
int i,ret=1,tp,nl;
|
||||||
@@ -394,7 +469,22 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
|
|||||||
if ((argc <= 0) || (argv[0] == NULL))
|
if ((argc <= 0) || (argv[0] == NULL))
|
||||||
{ ret=0; goto end; }
|
{ ret=0; goto end; }
|
||||||
f.name=argv[0];
|
f.name=argv[0];
|
||||||
fp=(FUNCTION *)lh_retrieve(prog,&f);
|
fp=lh_FUNCTION_retrieve(prog,&f);
|
||||||
|
if (fp == NULL)
|
||||||
|
{
|
||||||
|
if (EVP_get_digestbyname(argv[0]))
|
||||||
|
{
|
||||||
|
f.type = FUNC_TYPE_MD;
|
||||||
|
f.func = dgst_main;
|
||||||
|
fp = &f;
|
||||||
|
}
|
||||||
|
else if (EVP_get_cipherbyname(argv[0]))
|
||||||
|
{
|
||||||
|
f.type = FUNC_TYPE_CIPHER;
|
||||||
|
f.func = enc_main;
|
||||||
|
fp = &f;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (fp != NULL)
|
if (fp != NULL)
|
||||||
{
|
{
|
||||||
ret=fp->func(argc,argv);
|
ret=fp->func(argc,argv);
|
||||||
@@ -409,7 +499,7 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
f.name=argv[0]+3;
|
f.name=argv[0]+3;
|
||||||
ret = (lh_retrieve(prog,&f) != NULL);
|
ret = (lh_FUNCTION_retrieve(prog,&f) != NULL);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
BIO_printf(bio_stdout, "%s\n", argv[0]);
|
BIO_printf(bio_stdout, "%s\n", argv[0]);
|
||||||
else
|
else
|
||||||
@@ -427,7 +517,10 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
else if ((strcmp(argv[0],LIST_STANDARD_COMMANDS) == 0) ||
|
else if ((strcmp(argv[0],LIST_STANDARD_COMMANDS) == 0) ||
|
||||||
(strcmp(argv[0],LIST_MESSAGE_DIGEST_COMMANDS) == 0) ||
|
(strcmp(argv[0],LIST_MESSAGE_DIGEST_COMMANDS) == 0) ||
|
||||||
(strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0))
|
(strcmp(argv[0],LIST_MESSAGE_DIGEST_ALGORITHMS) == 0) ||
|
||||||
|
(strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0) ||
|
||||||
|
(strcmp(argv[0],LIST_CIPHER_ALGORITHMS) == 0) ||
|
||||||
|
(strcmp(argv[0],LIST_PUBLIC_KEY_ALGORITHMS) == 0))
|
||||||
{
|
{
|
||||||
int list_type;
|
int list_type;
|
||||||
BIO *bio_stdout;
|
BIO *bio_stdout;
|
||||||
@@ -436,6 +529,12 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
|
|||||||
list_type = FUNC_TYPE_GENERAL;
|
list_type = FUNC_TYPE_GENERAL;
|
||||||
else if (strcmp(argv[0],LIST_MESSAGE_DIGEST_COMMANDS) == 0)
|
else if (strcmp(argv[0],LIST_MESSAGE_DIGEST_COMMANDS) == 0)
|
||||||
list_type = FUNC_TYPE_MD;
|
list_type = FUNC_TYPE_MD;
|
||||||
|
else if (strcmp(argv[0],LIST_MESSAGE_DIGEST_ALGORITHMS) == 0)
|
||||||
|
list_type = FUNC_TYPE_MD_ALG;
|
||||||
|
else if (strcmp(argv[0],LIST_PUBLIC_KEY_ALGORITHMS) == 0)
|
||||||
|
list_type = FUNC_TYPE_PKEY;
|
||||||
|
else if (strcmp(argv[0],LIST_CIPHER_ALGORITHMS) == 0)
|
||||||
|
list_type = FUNC_TYPE_CIPHER_ALG;
|
||||||
else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */
|
else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */
|
||||||
list_type = FUNC_TYPE_CIPHER;
|
list_type = FUNC_TYPE_CIPHER;
|
||||||
bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
|
bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
|
||||||
@@ -446,9 +545,22 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (fp=functions; fp->name != NULL; fp++)
|
if (!load_config(bio_err, NULL))
|
||||||
if (fp->type == list_type)
|
goto end;
|
||||||
BIO_printf(bio_stdout, "%s\n", fp->name);
|
|
||||||
|
if (list_type == FUNC_TYPE_PKEY)
|
||||||
|
list_pkey(bio_stdout);
|
||||||
|
if (list_type == FUNC_TYPE_MD_ALG)
|
||||||
|
list_md(bio_stdout);
|
||||||
|
if (list_type == FUNC_TYPE_CIPHER_ALG)
|
||||||
|
list_cipher(bio_stdout);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (fp=functions; fp->name != NULL; fp++)
|
||||||
|
if (fp->type == list_type)
|
||||||
|
BIO_printf(bio_stdout, "%s\n",
|
||||||
|
fp->name);
|
||||||
|
}
|
||||||
BIO_free_all(bio_stdout);
|
BIO_free_all(bio_stdout);
|
||||||
ret=0;
|
ret=0;
|
||||||
goto end;
|
goto end;
|
||||||
@@ -463,7 +575,11 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
|
|||||||
for (fp=functions; fp->name != NULL; fp++)
|
for (fp=functions; fp->name != NULL; fp++)
|
||||||
{
|
{
|
||||||
nl=0;
|
nl=0;
|
||||||
|
#ifdef OPENSSL_NO_CAMELLIA
|
||||||
if (((i++) % 5) == 0)
|
if (((i++) % 5) == 0)
|
||||||
|
#else
|
||||||
|
if (((i++) % 4) == 0)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"\n");
|
BIO_printf(bio_err,"\n");
|
||||||
nl=1;
|
nl=1;
|
||||||
@@ -484,7 +600,11 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
|
|||||||
BIO_printf(bio_err,"\nCipher commands (see the `enc' command for more details)\n");
|
BIO_printf(bio_err,"\nCipher commands (see the `enc' command for more details)\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef OPENSSL_NO_CAMELLIA
|
||||||
BIO_printf(bio_err,"%-15s",fp->name);
|
BIO_printf(bio_err,"%-15s",fp->name);
|
||||||
|
#else
|
||||||
|
BIO_printf(bio_err,"%-18s",fp->name);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
BIO_printf(bio_err,"\n\n");
|
BIO_printf(bio_err,"\n\n");
|
||||||
ret=0;
|
ret=0;
|
||||||
@@ -503,34 +623,107 @@ static int SortFnByName(const void *_f1,const void *_f2)
|
|||||||
return strcmp(f1->name,f2->name);
|
return strcmp(f1->name,f2->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static LHASH *prog_init(void)
|
static void list_pkey(BIO *out)
|
||||||
{
|
{
|
||||||
LHASH *ret;
|
|
||||||
FUNCTION *f;
|
|
||||||
int i;
|
int i;
|
||||||
|
for (i = 0; i < EVP_PKEY_asn1_get_count(); i++)
|
||||||
|
{
|
||||||
|
const EVP_PKEY_ASN1_METHOD *ameth;
|
||||||
|
int pkey_id, pkey_base_id, pkey_flags;
|
||||||
|
const char *pinfo, *pem_str;
|
||||||
|
ameth = EVP_PKEY_asn1_get0(i);
|
||||||
|
EVP_PKEY_asn1_get0_info(&pkey_id, &pkey_base_id, &pkey_flags,
|
||||||
|
&pinfo, &pem_str, ameth);
|
||||||
|
if (pkey_flags & ASN1_PKEY_ALIAS)
|
||||||
|
{
|
||||||
|
BIO_printf(out, "Name: %s\n",
|
||||||
|
OBJ_nid2ln(pkey_id));
|
||||||
|
BIO_printf(out, "\tType: Alias to %s\n",
|
||||||
|
OBJ_nid2ln(pkey_base_id));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BIO_printf(out, "Name: %s\n", pinfo);
|
||||||
|
BIO_printf(out, "\tType: %s Algorithm\n",
|
||||||
|
pkey_flags & ASN1_PKEY_DYNAMIC ?
|
||||||
|
"External" : "Builtin");
|
||||||
|
BIO_printf(out, "\tOID: %s\n", OBJ_nid2ln(pkey_id));
|
||||||
|
if (pem_str == NULL)
|
||||||
|
pem_str = "(none)";
|
||||||
|
BIO_printf(out, "\tPEM string: %s\n", pem_str);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void list_cipher_fn(const EVP_CIPHER *c,
|
||||||
|
const char *from, const char *to, void *arg)
|
||||||
|
{
|
||||||
|
if (c)
|
||||||
|
BIO_printf(arg, "%s\n", EVP_CIPHER_name(c));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!from)
|
||||||
|
from = "<undefined>";
|
||||||
|
if (!to)
|
||||||
|
to = "<undefined>";
|
||||||
|
BIO_printf(arg, "%s => %s\n", from, to);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void list_cipher(BIO *out)
|
||||||
|
{
|
||||||
|
EVP_CIPHER_do_all_sorted(list_cipher_fn, out);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void list_md_fn(const EVP_MD *m,
|
||||||
|
const char *from, const char *to, void *arg)
|
||||||
|
{
|
||||||
|
if (m)
|
||||||
|
BIO_printf(arg, "%s\n", EVP_MD_name(m));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!from)
|
||||||
|
from = "<undefined>";
|
||||||
|
if (!to)
|
||||||
|
to = "<undefined>";
|
||||||
|
BIO_printf(arg, "%s => %s\n", from, to);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void list_md(BIO *out)
|
||||||
|
{
|
||||||
|
EVP_MD_do_all_sorted(list_md_fn, out);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int MS_CALLBACK function_cmp(const FUNCTION *a, const FUNCTION *b)
|
||||||
|
{
|
||||||
|
return strncmp(a->name,b->name,8);
|
||||||
|
}
|
||||||
|
static IMPLEMENT_LHASH_COMP_FN(function, FUNCTION)
|
||||||
|
|
||||||
|
static unsigned long MS_CALLBACK function_hash(const FUNCTION *a)
|
||||||
|
{
|
||||||
|
return lh_strhash(a->name);
|
||||||
|
}
|
||||||
|
static IMPLEMENT_LHASH_HASH_FN(function, FUNCTION)
|
||||||
|
|
||||||
|
static LHASH_OF(FUNCTION) *prog_init(void)
|
||||||
|
{
|
||||||
|
LHASH_OF(FUNCTION) *ret;
|
||||||
|
FUNCTION *f;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
/* Purely so it looks nice when the user hits ? */
|
/* Purely so it looks nice when the user hits ? */
|
||||||
for(i=0,f=functions ; f->name != NULL ; ++f,++i)
|
for(i=0,f=functions ; f->name != NULL ; ++f,++i)
|
||||||
;
|
;
|
||||||
qsort(functions,i,sizeof *functions,SortFnByName);
|
qsort(functions,i,sizeof *functions,SortFnByName);
|
||||||
|
|
||||||
if ((ret=lh_new(hash, cmp)) == NULL)
|
if ((ret=lh_FUNCTION_new()) == NULL)
|
||||||
return(NULL);
|
return(NULL);
|
||||||
|
|
||||||
for (f=functions; f->name != NULL; f++)
|
for (f=functions; f->name != NULL; f++)
|
||||||
lh_insert(ret,f);
|
(void)lh_FUNCTION_insert(ret,f);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static int MS_CALLBACK cmp(FUNCTION *a, FUNCTION *b) */
|
|
||||||
static int MS_CALLBACK cmp(const void *a_void, const void *b_void)
|
|
||||||
{
|
|
||||||
return(strncmp(((FUNCTION *)a_void)->name,
|
|
||||||
((FUNCTION *)b_void)->name,8));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* static unsigned long MS_CALLBACK hash(FUNCTION *a) */
|
|
||||||
static unsigned long MS_CALLBACK hash(const void *a_void)
|
|
||||||
{
|
|
||||||
return(lh_strhash(((FUNCTION *)a_void)->name));
|
|
||||||
}
|
|
||||||
|
|||||||
114
apps/openssl.cnf
114
apps/openssl.cnf
@@ -21,12 +21,17 @@ oid_section = new_oids
|
|||||||
|
|
||||||
[ new_oids ]
|
[ new_oids ]
|
||||||
|
|
||||||
# We can add new OIDs in here for use by 'ca' and 'req'.
|
# We can add new OIDs in here for use by 'ca', 'req' and 'ts'.
|
||||||
# Add a simple OID like this:
|
# Add a simple OID like this:
|
||||||
# testoid1=1.2.3.4
|
# testoid1=1.2.3.4
|
||||||
# Or use config file substitution like this:
|
# Or use config file substitution like this:
|
||||||
# testoid2=${testoid1}.5.6
|
# testoid2=${testoid1}.5.6
|
||||||
|
|
||||||
|
# Policies used by the TSA examples.
|
||||||
|
tsa_policy1 = 1.2.3.4.1
|
||||||
|
tsa_policy2 = 1.2.3.4.5.6
|
||||||
|
tsa_policy3 = 1.2.3.4.5.7
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
[ ca ]
|
[ ca ]
|
||||||
default_ca = CA_default # The default ca section
|
default_ca = CA_default # The default ca section
|
||||||
@@ -44,7 +49,7 @@ new_certs_dir = $dir/newcerts # default place for new certs.
|
|||||||
|
|
||||||
certificate = $dir/cacert.pem # The CA certificate
|
certificate = $dir/cacert.pem # The CA certificate
|
||||||
serial = $dir/serial # The current serial number
|
serial = $dir/serial # The current serial number
|
||||||
#crlnumber = $dir/crlnumber # the current crl number
|
crlnumber = $dir/crlnumber # the current crl number
|
||||||
# must be commented out to leave a V1 CRL
|
# must be commented out to leave a V1 CRL
|
||||||
crl = $dir/crl.pem # The current CRL
|
crl = $dir/crl.pem # The current CRL
|
||||||
private_key = $dir/private/cakey.pem# The private key
|
private_key = $dir/private/cakey.pem# The private key
|
||||||
@@ -67,7 +72,7 @@ cert_opt = ca_default # Certificate field options
|
|||||||
|
|
||||||
default_days = 365 # how long to certify for
|
default_days = 365 # how long to certify for
|
||||||
default_crl_days= 30 # how long before next CRL
|
default_crl_days= 30 # how long before next CRL
|
||||||
default_md = md5 # which md to use.
|
default_md = default # use public key default MD
|
||||||
preserve = no # keep passed DN ordering
|
preserve = no # keep passed DN ordering
|
||||||
|
|
||||||
# A few difference way of specifying how similar the request should look
|
# A few difference way of specifying how similar the request should look
|
||||||
@@ -110,13 +115,12 @@ x509_extensions = v3_ca # The extentions to add to the self signed cert
|
|||||||
|
|
||||||
# This sets a mask for permitted string types. There are several options.
|
# This sets a mask for permitted string types. There are several options.
|
||||||
# default: PrintableString, T61String, BMPString.
|
# default: PrintableString, T61String, BMPString.
|
||||||
# pkix : PrintableString, BMPString.
|
# pkix : PrintableString, BMPString (PKIX recommendation before 2004)
|
||||||
# utf8only: only UTF8Strings.
|
# utf8only: only UTF8Strings (PKIX recommendation after 2004).
|
||||||
# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
|
# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
|
||||||
# MASK:XXXX a literal mask value.
|
# MASK:XXXX a literal mask value.
|
||||||
# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings
|
# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings.
|
||||||
# so use this option with caution!
|
string_mask = utf8only
|
||||||
string_mask = nombstr
|
|
||||||
|
|
||||||
# req_extensions = v3_req # The extensions to add to a certificate request
|
# req_extensions = v3_req # The extensions to add to a certificate request
|
||||||
|
|
||||||
@@ -141,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
|
||||||
@@ -188,7 +192,7 @@ nsComment = "OpenSSL Generated Certificate"
|
|||||||
|
|
||||||
# PKIX recommendations harmless if included in all certificates.
|
# PKIX recommendations harmless if included in all certificates.
|
||||||
subjectKeyIdentifier=hash
|
subjectKeyIdentifier=hash
|
||||||
authorityKeyIdentifier=keyid,issuer:always
|
authorityKeyIdentifier=keyid,issuer
|
||||||
|
|
||||||
# This stuff is for subjectAltName and issuerAltname.
|
# This stuff is for subjectAltName and issuerAltname.
|
||||||
# Import the email address.
|
# Import the email address.
|
||||||
@@ -207,6 +211,9 @@ authorityKeyIdentifier=keyid,issuer:always
|
|||||||
#nsCaPolicyUrl
|
#nsCaPolicyUrl
|
||||||
#nsSslServerName
|
#nsSslServerName
|
||||||
|
|
||||||
|
# This is required for TSA certificates.
|
||||||
|
# extendedKeyUsage = critical,timeStamping
|
||||||
|
|
||||||
[ v3_req ]
|
[ v3_req ]
|
||||||
|
|
||||||
# Extensions to add to a certificate request
|
# Extensions to add to a certificate request
|
||||||
@@ -224,7 +231,7 @@ keyUsage = nonRepudiation, digitalSignature, keyEncipherment
|
|||||||
|
|
||||||
subjectKeyIdentifier=hash
|
subjectKeyIdentifier=hash
|
||||||
|
|
||||||
authorityKeyIdentifier=keyid:always,issuer:always
|
authorityKeyIdentifier=keyid:always,issuer
|
||||||
|
|
||||||
# This is what PKIX recommends but some broken software chokes on critical
|
# This is what PKIX recommends but some broken software chokes on critical
|
||||||
# extensions.
|
# extensions.
|
||||||
@@ -257,4 +264,87 @@ basicConstraints = CA:true
|
|||||||
# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
|
# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
|
||||||
|
|
||||||
# issuerAltName=issuer:copy
|
# issuerAltName=issuer:copy
|
||||||
authorityKeyIdentifier=keyid:always,issuer:always
|
authorityKeyIdentifier=keyid:always
|
||||||
|
|
||||||
|
[ proxy_cert_ext ]
|
||||||
|
# These extensions should be added when creating a proxy certificate
|
||||||
|
|
||||||
|
# This goes against PKIX guidelines but some CAs do it and some software
|
||||||
|
# requires this to avoid interpreting an end user certificate as a CA.
|
||||||
|
|
||||||
|
basicConstraints=CA:FALSE
|
||||||
|
|
||||||
|
# Here are some examples of the usage of nsCertType. If it is omitted
|
||||||
|
# the certificate can be used for anything *except* object signing.
|
||||||
|
|
||||||
|
# This is OK for an SSL server.
|
||||||
|
# nsCertType = server
|
||||||
|
|
||||||
|
# For an object signing certificate this would be used.
|
||||||
|
# nsCertType = objsign
|
||||||
|
|
||||||
|
# For normal client use this is typical
|
||||||
|
# nsCertType = client, email
|
||||||
|
|
||||||
|
# and for everything including object signing:
|
||||||
|
# nsCertType = client, email, objsign
|
||||||
|
|
||||||
|
# This is typical in keyUsage for a client certificate.
|
||||||
|
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
|
||||||
|
|
||||||
|
# This will be displayed in Netscape's comment listbox.
|
||||||
|
nsComment = "OpenSSL Generated Certificate"
|
||||||
|
|
||||||
|
# PKIX recommendations harmless if included in all certificates.
|
||||||
|
subjectKeyIdentifier=hash
|
||||||
|
authorityKeyIdentifier=keyid,issuer
|
||||||
|
|
||||||
|
# This stuff is for subjectAltName and issuerAltname.
|
||||||
|
# Import the email address.
|
||||||
|
# subjectAltName=email:copy
|
||||||
|
# An alternative to produce certificates that aren't
|
||||||
|
# deprecated according to PKIX.
|
||||||
|
# subjectAltName=email:move
|
||||||
|
|
||||||
|
# Copy subject details
|
||||||
|
# issuerAltName=issuer:copy
|
||||||
|
|
||||||
|
#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem
|
||||||
|
#nsBaseUrl
|
||||||
|
#nsRevocationUrl
|
||||||
|
#nsRenewalUrl
|
||||||
|
#nsCaPolicyUrl
|
||||||
|
#nsSslServerName
|
||||||
|
|
||||||
|
# This really needs to be in place for it to be a proxy certificate.
|
||||||
|
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
|
||||||
|
|
||||||
|
####################################################################
|
||||||
|
[ tsa ]
|
||||||
|
|
||||||
|
default_tsa = tsa_config1 # the default TSA section
|
||||||
|
|
||||||
|
[ tsa_config1 ]
|
||||||
|
|
||||||
|
# These are used by the TSA reply generation only.
|
||||||
|
dir = ./demoCA # TSA root directory
|
||||||
|
serial = $dir/tsaserial # The current serial number (mandatory)
|
||||||
|
crypto_device = builtin # OpenSSL engine to use for signing
|
||||||
|
signer_cert = $dir/tsacert.pem # The TSA signing certificate
|
||||||
|
# (optional)
|
||||||
|
certs = $dir/cacert.pem # Certificate chain to include in reply
|
||||||
|
# (optional)
|
||||||
|
signer_key = $dir/private/tsakey.pem # The TSA private key (optional)
|
||||||
|
|
||||||
|
default_policy = tsa_policy1 # Policy if request did not specify it
|
||||||
|
# (optional)
|
||||||
|
other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional)
|
||||||
|
digests = md5, sha1 # Acceptable message digests (mandatory)
|
||||||
|
accuracy = secs:1, millisecs:500, microsecs:100 # (optional)
|
||||||
|
clock_precision_digits = 0 # number of digits after dot. (optional)
|
||||||
|
ordering = yes # Is ordering defined for timestamps?
|
||||||
|
# (optional, default: no)
|
||||||
|
tsa_name = yes # Must the TSA name be included in the reply?
|
||||||
|
# (optional, default: no)
|
||||||
|
ess_cert_id_chain = no # Must the ESS cert id chain be included?
|
||||||
|
# (optional, default: no)
|
||||||
|
|||||||
@@ -312,7 +312,8 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt)
|
|||||||
static char out_buf[6 + 9 + 24 + 2]; /* "$apr1$..salt..$.......md5hash..........\0" */
|
static char out_buf[6 + 9 + 24 + 2]; /* "$apr1$..salt..$.......md5hash..........\0" */
|
||||||
unsigned char buf[MD5_DIGEST_LENGTH];
|
unsigned char buf[MD5_DIGEST_LENGTH];
|
||||||
char *salt_out;
|
char *salt_out;
|
||||||
int n, i;
|
int n;
|
||||||
|
unsigned int i;
|
||||||
EVP_MD_CTX md,md2;
|
EVP_MD_CTX md,md2;
|
||||||
size_t passwd_len, salt_len;
|
size_t passwd_len, salt_len;
|
||||||
|
|
||||||
@@ -358,13 +359,13 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt)
|
|||||||
for (i = 0; i < 1000; i++)
|
for (i = 0; i < 1000; i++)
|
||||||
{
|
{
|
||||||
EVP_DigestInit_ex(&md2,EVP_md5(), NULL);
|
EVP_DigestInit_ex(&md2,EVP_md5(), NULL);
|
||||||
EVP_DigestUpdate(&md2, (i & 1) ? (unsigned char *) passwd : buf,
|
EVP_DigestUpdate(&md2, (i & 1) ? (unsigned const char *) passwd : buf,
|
||||||
(i & 1) ? passwd_len : sizeof buf);
|
(i & 1) ? passwd_len : sizeof buf);
|
||||||
if (i % 3)
|
if (i % 3)
|
||||||
EVP_DigestUpdate(&md2, salt_out, salt_len);
|
EVP_DigestUpdate(&md2, salt_out, salt_len);
|
||||||
if (i % 7)
|
if (i % 7)
|
||||||
EVP_DigestUpdate(&md2, passwd, passwd_len);
|
EVP_DigestUpdate(&md2, passwd, passwd_len);
|
||||||
EVP_DigestUpdate(&md2, (i & 1) ? buf : (unsigned char *) passwd,
|
EVP_DigestUpdate(&md2, (i & 1) ? buf : (unsigned const char *) passwd,
|
||||||
(i & 1) ? sizeof buf : passwd_len);
|
(i & 1) ? sizeof buf : passwd_len);
|
||||||
EVP_DigestFinal_ex(&md2, buf, NULL);
|
EVP_DigestFinal_ex(&md2, buf, NULL);
|
||||||
}
|
}
|
||||||
@@ -473,7 +474,8 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
|
|||||||
if ((strlen(passwd) > pw_maxlen))
|
if ((strlen(passwd) > pw_maxlen))
|
||||||
{
|
{
|
||||||
if (!quiet)
|
if (!quiet)
|
||||||
BIO_printf(bio_err, "Warning: truncating password to %u characters\n", pw_maxlen);
|
/* 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;
|
passwd[pw_maxlen] = 0;
|
||||||
}
|
}
|
||||||
assert(strlen(passwd) <= pw_maxlen);
|
assert(strlen(passwd) <= pw_maxlen);
|
||||||
|
|||||||
412
apps/pkcs12.c
412
apps/pkcs12.c
@@ -1,11 +1,9 @@
|
|||||||
/* pkcs12.c */
|
/* pkcs12.c */
|
||||||
#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1)
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
|
* project.
|
||||||
/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
|
|
||||||
* project 1999.
|
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 1999-2006 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
|
||||||
@@ -58,6 +56,9 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <openssl/opensslconf.h>
|
||||||
|
#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1)
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -83,10 +84,11 @@ int dump_certs_keys_p12(BIO *out, PKCS12 *p12, char *pass, int passlen, int opti
|
|||||||
int dump_certs_pkeys_bags(BIO *out, STACK_OF(PKCS12_SAFEBAG) *bags, char *pass,
|
int dump_certs_pkeys_bags(BIO *out, STACK_OF(PKCS12_SAFEBAG) *bags, char *pass,
|
||||||
int passlen, int options, char *pempass);
|
int passlen, int options, char *pempass);
|
||||||
int dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bags, char *pass, int passlen, int options, char *pempass);
|
int dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bags, char *pass, int passlen, int options, char *pempass);
|
||||||
int print_attribs(BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst, char *name);
|
int print_attribs(BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst,const char *name);
|
||||||
void hex_prin(BIO *out, unsigned char *buf, int len);
|
void hex_prin(BIO *out, unsigned char *buf, int len);
|
||||||
int alg_print(BIO *x, X509_ALGOR *alg);
|
int alg_print(BIO *x, X509_ALGOR *alg);
|
||||||
int cert_load(BIO *in, STACK_OF(X509) *sk);
|
int cert_load(BIO *in, STACK_OF(X509) *sk);
|
||||||
|
static int set_pbe(BIO *err, int *ppbe, const char *str);
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
@@ -99,6 +101,7 @@ int MAIN(int argc, char **argv)
|
|||||||
char **args;
|
char **args;
|
||||||
char *name = NULL;
|
char *name = NULL;
|
||||||
char *csp_name = NULL;
|
char *csp_name = NULL;
|
||||||
|
int add_lmk = 0;
|
||||||
PKCS12 *p12 = NULL;
|
PKCS12 *p12 = NULL;
|
||||||
char pass[50], macpass[50];
|
char pass[50], macpass[50];
|
||||||
int export_cert = 0;
|
int export_cert = 0;
|
||||||
@@ -109,16 +112,17 @@ int MAIN(int argc, char **argv)
|
|||||||
int maciter = PKCS12_DEFAULT_ITER;
|
int maciter = PKCS12_DEFAULT_ITER;
|
||||||
int twopass = 0;
|
int twopass = 0;
|
||||||
int keytype = 0;
|
int keytype = 0;
|
||||||
int cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC;
|
int cert_pbe;
|
||||||
int key_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
|
int key_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
int macver = 1;
|
int macver = 1;
|
||||||
int noprompt = 0;
|
int noprompt = 0;
|
||||||
STACK *canames = NULL;
|
STACK_OF(OPENSSL_STRING) *canames = NULL;
|
||||||
char *cpass = NULL, *mpass = NULL;
|
char *cpass = NULL, *mpass = NULL;
|
||||||
char *passargin = NULL, *passargout = NULL, *passarg = NULL;
|
char *passargin = NULL, *passargout = NULL, *passarg = NULL;
|
||||||
char *passin = NULL, *passout = NULL;
|
char *passin = NULL, *passout = NULL;
|
||||||
char *inrand = NULL;
|
char *inrand = NULL;
|
||||||
|
char *macalg = NULL;
|
||||||
char *CApath = NULL, *CAfile = NULL;
|
char *CApath = NULL, *CAfile = NULL;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine=NULL;
|
char *engine=NULL;
|
||||||
@@ -126,6 +130,13 @@ int MAIN(int argc, char **argv)
|
|||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
|
#ifdef OPENSSL_FIPS
|
||||||
|
if (FIPS_mode())
|
||||||
|
cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC;
|
||||||
|
|
||||||
enc = EVP_des_ede3_cbc();
|
enc = EVP_des_ede3_cbc();
|
||||||
if (bio_err == NULL ) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
|
if (bio_err == NULL ) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
|
||||||
|
|
||||||
@@ -152,41 +163,42 @@ int MAIN(int argc, char **argv)
|
|||||||
cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
|
cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
|
||||||
else if (!strcmp (*args, "-export")) export_cert = 1;
|
else if (!strcmp (*args, "-export")) export_cert = 1;
|
||||||
else if (!strcmp (*args, "-des")) enc=EVP_des_cbc();
|
else if (!strcmp (*args, "-des")) enc=EVP_des_cbc();
|
||||||
|
else if (!strcmp (*args, "-des3")) enc = EVP_des_ede3_cbc();
|
||||||
#ifndef OPENSSL_NO_IDEA
|
#ifndef OPENSSL_NO_IDEA
|
||||||
else if (!strcmp (*args, "-idea")) enc=EVP_idea_cbc();
|
else if (!strcmp (*args, "-idea")) enc=EVP_idea_cbc();
|
||||||
#endif
|
#endif
|
||||||
else if (!strcmp (*args, "-des3")) enc = EVP_des_ede3_cbc();
|
#ifndef OPENSSL_NO_SEED
|
||||||
|
else if (!strcmp(*args, "-seed")) enc=EVP_seed_cbc();
|
||||||
|
#endif
|
||||||
#ifndef OPENSSL_NO_AES
|
#ifndef OPENSSL_NO_AES
|
||||||
else if (!strcmp(*args,"-aes128")) enc=EVP_aes_128_cbc();
|
else if (!strcmp(*args,"-aes128")) enc=EVP_aes_128_cbc();
|
||||||
else if (!strcmp(*args,"-aes192")) enc=EVP_aes_192_cbc();
|
else if (!strcmp(*args,"-aes192")) enc=EVP_aes_192_cbc();
|
||||||
else if (!strcmp(*args,"-aes256")) enc=EVP_aes_256_cbc();
|
else if (!strcmp(*args,"-aes256")) enc=EVP_aes_256_cbc();
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
|
else if (!strcmp(*args,"-camellia128")) enc=EVP_camellia_128_cbc();
|
||||||
|
else if (!strcmp(*args,"-camellia192")) enc=EVP_camellia_192_cbc();
|
||||||
|
else if (!strcmp(*args,"-camellia256")) enc=EVP_camellia_256_cbc();
|
||||||
#endif
|
#endif
|
||||||
else if (!strcmp (*args, "-noiter")) iter = 1;
|
else if (!strcmp (*args, "-noiter")) iter = 1;
|
||||||
else if (!strcmp (*args, "-maciter"))
|
else if (!strcmp (*args, "-maciter"))
|
||||||
maciter = PKCS12_DEFAULT_ITER;
|
maciter = PKCS12_DEFAULT_ITER;
|
||||||
else if (!strcmp (*args, "-nomaciter"))
|
else if (!strcmp (*args, "-nomaciter"))
|
||||||
maciter = 1;
|
maciter = 1;
|
||||||
|
else if (!strcmp (*args, "-nomac"))
|
||||||
|
maciter = -1;
|
||||||
|
else if (!strcmp (*args, "-macalg"))
|
||||||
|
if (args[1]) {
|
||||||
|
args++;
|
||||||
|
macalg = *args;
|
||||||
|
} else badarg = 1;
|
||||||
else if (!strcmp (*args, "-nodes")) enc=NULL;
|
else if (!strcmp (*args, "-nodes")) enc=NULL;
|
||||||
else if (!strcmp (*args, "-certpbe")) {
|
else if (!strcmp (*args, "-certpbe")) {
|
||||||
if (args[1]) {
|
if (!set_pbe(bio_err, &cert_pbe, *++args))
|
||||||
args++;
|
badarg = 1;
|
||||||
cert_pbe=OBJ_txt2nid(*args);
|
|
||||||
if(cert_pbe == NID_undef) {
|
|
||||||
BIO_printf(bio_err,
|
|
||||||
"Unknown PBE algorithm %s\n", *args);
|
|
||||||
badarg = 1;
|
|
||||||
}
|
|
||||||
} else badarg = 1;
|
|
||||||
} else if (!strcmp (*args, "-keypbe")) {
|
} else if (!strcmp (*args, "-keypbe")) {
|
||||||
if (args[1]) {
|
if (!set_pbe(bio_err, &key_pbe, *++args))
|
||||||
args++;
|
badarg = 1;
|
||||||
key_pbe=OBJ_txt2nid(*args);
|
|
||||||
if(key_pbe == NID_undef) {
|
|
||||||
BIO_printf(bio_err,
|
|
||||||
"Unknown PBE algorithm %s\n", *args);
|
|
||||||
badarg = 1;
|
|
||||||
}
|
|
||||||
} else badarg = 1;
|
|
||||||
} else if (!strcmp (*args, "-rand")) {
|
} else if (!strcmp (*args, "-rand")) {
|
||||||
if (args[1]) {
|
if (args[1]) {
|
||||||
args++;
|
args++;
|
||||||
@@ -207,7 +219,9 @@ int MAIN(int argc, char **argv)
|
|||||||
args++;
|
args++;
|
||||||
name = *args;
|
name = *args;
|
||||||
} else badarg = 1;
|
} else badarg = 1;
|
||||||
} else if (!strcmp (*args, "-CSP")) {
|
} else if (!strcmp (*args, "-LMK"))
|
||||||
|
add_lmk = 1;
|
||||||
|
else if (!strcmp (*args, "-CSP")) {
|
||||||
if (args[1]) {
|
if (args[1]) {
|
||||||
args++;
|
args++;
|
||||||
csp_name = *args;
|
csp_name = *args;
|
||||||
@@ -215,8 +229,8 @@ int MAIN(int argc, char **argv)
|
|||||||
} else if (!strcmp (*args, "-caname")) {
|
} else if (!strcmp (*args, "-caname")) {
|
||||||
if (args[1]) {
|
if (args[1]) {
|
||||||
args++;
|
args++;
|
||||||
if (!canames) canames = sk_new_null();
|
if (!canames) canames = sk_OPENSSL_STRING_new_null();
|
||||||
sk_push(canames, *args);
|
sk_OPENSSL_STRING_push(canames, *args);
|
||||||
} else badarg = 1;
|
} else badarg = 1;
|
||||||
} else if (!strcmp (*args, "-in")) {
|
} else if (!strcmp (*args, "-in")) {
|
||||||
if (args[1]) {
|
if (args[1]) {
|
||||||
@@ -292,17 +306,27 @@ int MAIN(int argc, char **argv)
|
|||||||
#ifndef OPENSSL_NO_IDEA
|
#ifndef OPENSSL_NO_IDEA
|
||||||
BIO_printf (bio_err, "-idea encrypt private keys with idea\n");
|
BIO_printf (bio_err, "-idea encrypt private keys with idea\n");
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_SEED
|
||||||
|
BIO_printf (bio_err, "-seed encrypt private keys with seed\n");
|
||||||
|
#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, " encrypt PEM output with cbc aes\n");
|
BIO_printf (bio_err, " encrypt PEM output with cbc aes\n");
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
|
BIO_printf (bio_err, "-camellia128, -camellia192, -camellia256\n");
|
||||||
|
BIO_printf (bio_err, " encrypt PEM output with cbc camellia\n");
|
||||||
#endif
|
#endif
|
||||||
BIO_printf (bio_err, "-nodes don't encrypt private keys\n");
|
BIO_printf (bio_err, "-nodes don't encrypt private keys\n");
|
||||||
BIO_printf (bio_err, "-noiter don't use encryption iteration\n");
|
BIO_printf (bio_err, "-noiter don't use encryption iteration\n");
|
||||||
|
BIO_printf (bio_err, "-nomaciter don't use MAC iteration\n");
|
||||||
BIO_printf (bio_err, "-maciter use MAC iteration\n");
|
BIO_printf (bio_err, "-maciter use MAC iteration\n");
|
||||||
|
BIO_printf (bio_err, "-nomac don't generate MAC\n");
|
||||||
BIO_printf (bio_err, "-twopass separate MAC, encryption passwords\n");
|
BIO_printf (bio_err, "-twopass separate MAC, encryption passwords\n");
|
||||||
BIO_printf (bio_err, "-descert encrypt PKCS#12 certificates with triple DES (default RC2-40)\n");
|
BIO_printf (bio_err, "-descert encrypt PKCS#12 certificates with triple DES (default RC2-40)\n");
|
||||||
BIO_printf (bio_err, "-certpbe alg specify certificate PBE algorithm (default RC2-40)\n");
|
BIO_printf (bio_err, "-certpbe alg specify certificate PBE algorithm (default RC2-40)\n");
|
||||||
BIO_printf (bio_err, "-keypbe alg specify private key PBE algorithm (default 3DES)\n");
|
BIO_printf (bio_err, "-keypbe alg specify private key PBE algorithm (default 3DES)\n");
|
||||||
|
BIO_printf (bio_err, "-macalg alg digest algorithm used in MAC (default SHA1)\n");
|
||||||
BIO_printf (bio_err, "-keyex set MS key exchange type\n");
|
BIO_printf (bio_err, "-keyex set MS key exchange type\n");
|
||||||
BIO_printf (bio_err, "-keysig set MS key signature type\n");
|
BIO_printf (bio_err, "-keysig set MS key signature type\n");
|
||||||
BIO_printf (bio_err, "-password p set import/export password source\n");
|
BIO_printf (bio_err, "-password p set import/export password source\n");
|
||||||
@@ -314,6 +338,8 @@ int MAIN(int argc, char **argv)
|
|||||||
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, LIST_SEPARATOR_CHAR);
|
||||||
BIO_printf(bio_err, " load the file (or the files in the directory) into\n");
|
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, " the random number generator\n");
|
||||||
|
BIO_printf(bio_err, "-CSP name Microsoft CSP name\n");
|
||||||
|
BIO_printf(bio_err, "-LMK Add local machine keyset attribute to private key\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -365,24 +391,6 @@ int MAIN(int argc, char **argv)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (certfile) {
|
|
||||||
if(!(certsin = BIO_new_file(certfile, "r"))) {
|
|
||||||
BIO_printf(bio_err, "Can't open certificate file %s\n", certfile);
|
|
||||||
perror (certfile);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (keyname) {
|
|
||||||
if(!(inkey = BIO_new_file(keyname, "r"))) {
|
|
||||||
BIO_printf(bio_err, "Can't key certificate file %s\n", keyname);
|
|
||||||
perror (keyname);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CRYPTO_MDEBUG
|
#ifdef CRYPTO_MDEBUG
|
||||||
CRYPTO_pop_info();
|
CRYPTO_pop_info();
|
||||||
CRYPTO_push_info("write files");
|
CRYPTO_push_info("write files");
|
||||||
@@ -419,27 +427,32 @@ int MAIN(int argc, char **argv)
|
|||||||
|
|
||||||
if (export_cert) {
|
if (export_cert) {
|
||||||
EVP_PKEY *key = NULL;
|
EVP_PKEY *key = NULL;
|
||||||
STACK_OF(PKCS12_SAFEBAG) *bags = NULL;
|
X509 *ucert = NULL, *x = NULL;
|
||||||
STACK_OF(PKCS7) *safes = NULL;
|
|
||||||
PKCS12_SAFEBAG *bag = NULL;
|
|
||||||
PKCS8_PRIV_KEY_INFO *p8 = NULL;
|
|
||||||
PKCS7 *authsafe = NULL;
|
|
||||||
X509 *ucert = NULL;
|
|
||||||
STACK_OF(X509) *certs=NULL;
|
STACK_OF(X509) *certs=NULL;
|
||||||
char *catmp = NULL;
|
const EVP_MD *macmd = NULL;
|
||||||
|
unsigned char *catmp = NULL;
|
||||||
int i;
|
int i;
|
||||||
unsigned char keyid[EVP_MAX_MD_SIZE];
|
|
||||||
unsigned int keyidlen = 0;
|
if ((options & (NOCERTS|NOKEYS)) == (NOCERTS|NOKEYS))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Nothing to do!\n");
|
||||||
|
goto export_end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options & NOCERTS)
|
||||||
|
chain = 0;
|
||||||
|
|
||||||
#ifdef CRYPTO_MDEBUG
|
#ifdef CRYPTO_MDEBUG
|
||||||
CRYPTO_push_info("process -export_cert");
|
CRYPTO_push_info("process -export_cert");
|
||||||
CRYPTO_push_info("reading private key");
|
CRYPTO_push_info("reading private key");
|
||||||
#endif
|
#endif
|
||||||
key = load_key(bio_err, keyname ? keyname : infile, FORMAT_PEM, 1,
|
if (!(options & NOKEYS))
|
||||||
passin, e, "private key");
|
{
|
||||||
if (!key) {
|
key = load_key(bio_err, keyname ? keyname : infile,
|
||||||
goto export_end;
|
FORMAT_PEM, 1, passin, e, "private key");
|
||||||
}
|
if (!key)
|
||||||
|
goto export_end;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CRYPTO_MDEBUG
|
#ifdef CRYPTO_MDEBUG
|
||||||
CRYPTO_pop_info();
|
CRYPTO_pop_info();
|
||||||
@@ -447,50 +460,62 @@ int MAIN(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Load in all certs in input file */
|
/* Load in all certs in input file */
|
||||||
if(!(certs = load_certs(bio_err, infile, FORMAT_PEM, NULL, e,
|
if(!(options & NOCERTS))
|
||||||
"certificates"))) {
|
{
|
||||||
goto export_end;
|
certs = load_certs(bio_err, infile, FORMAT_PEM, NULL, e,
|
||||||
}
|
"certificates");
|
||||||
|
if (!certs)
|
||||||
|
goto export_end;
|
||||||
|
|
||||||
|
if (key)
|
||||||
|
{
|
||||||
|
/* Look for matching private key */
|
||||||
|
for(i = 0; i < sk_X509_num(certs); i++)
|
||||||
|
{
|
||||||
|
x = sk_X509_value(certs, i);
|
||||||
|
if(X509_check_private_key(x, key))
|
||||||
|
{
|
||||||
|
ucert = x;
|
||||||
|
/* Zero keyid and alias */
|
||||||
|
X509_keyid_set1(ucert, NULL, 0);
|
||||||
|
X509_alias_set1(ucert, NULL, 0);
|
||||||
|
/* Remove from list */
|
||||||
|
(void)sk_X509_delete(certs, i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!ucert)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "No certificate matches private key\n");
|
||||||
|
goto export_end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CRYPTO_MDEBUG
|
#ifdef CRYPTO_MDEBUG
|
||||||
CRYPTO_pop_info();
|
CRYPTO_pop_info();
|
||||||
CRYPTO_push_info("reading certs from input 2");
|
CRYPTO_push_info("reading certs from input 2");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for(i = 0; i < sk_X509_num(certs); i++) {
|
/* Add any more certificates asked for */
|
||||||
ucert = sk_X509_value(certs, i);
|
if(certfile)
|
||||||
if(X509_check_private_key(ucert, key)) {
|
{
|
||||||
X509_digest(ucert, EVP_sha1(), keyid, &keyidlen);
|
STACK_OF(X509) *morecerts=NULL;
|
||||||
break;
|
if(!(morecerts = load_certs(bio_err, certfile, FORMAT_PEM,
|
||||||
}
|
NULL, e,
|
||||||
}
|
"certificates from certfile")))
|
||||||
if(!keyidlen) {
|
goto export_end;
|
||||||
ucert = NULL;
|
while(sk_X509_num(morecerts) > 0)
|
||||||
BIO_printf(bio_err, "No certificate matches private key\n");
|
sk_X509_push(certs, sk_X509_shift(morecerts));
|
||||||
goto export_end;
|
sk_X509_free(morecerts);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CRYPTO_MDEBUG
|
#ifdef CRYPTO_MDEBUG
|
||||||
CRYPTO_pop_info();
|
CRYPTO_pop_info();
|
||||||
CRYPTO_push_info("reading certs from certfile");
|
CRYPTO_push_info("reading certs from certfile");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bags = sk_PKCS12_SAFEBAG_new_null ();
|
|
||||||
|
|
||||||
/* Add any more certificates asked for */
|
|
||||||
if (certfile) {
|
|
||||||
STACK_OF(X509) *morecerts=NULL;
|
|
||||||
if(!(morecerts = load_certs(bio_err, certfile, FORMAT_PEM,
|
|
||||||
NULL, e,
|
|
||||||
"certificates from certfile"))) {
|
|
||||||
goto export_end;
|
|
||||||
}
|
|
||||||
while(sk_X509_num(morecerts) > 0) {
|
|
||||||
sk_X509_push(certs, sk_X509_shift(morecerts));
|
|
||||||
}
|
|
||||||
sk_X509_free(morecerts);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CRYPTO_MDEBUG
|
#ifdef CRYPTO_MDEBUG
|
||||||
CRYPTO_pop_info();
|
CRYPTO_pop_info();
|
||||||
CRYPTO_push_info("building chain");
|
CRYPTO_push_info("building chain");
|
||||||
@@ -520,106 +545,76 @@ int MAIN(int argc, char **argv)
|
|||||||
X509_free(sk_X509_value(chain2, 0));
|
X509_free(sk_X509_value(chain2, 0));
|
||||||
sk_X509_free(chain2);
|
sk_X509_free(chain2);
|
||||||
} else {
|
} else {
|
||||||
BIO_printf (bio_err, "Error %s getting chain.\n",
|
if (vret >= 0)
|
||||||
|
BIO_printf (bio_err, "Error %s getting chain.\n",
|
||||||
X509_verify_cert_error_string(vret));
|
X509_verify_cert_error_string(vret));
|
||||||
|
else
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
goto export_end;
|
goto export_end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CRYPTO_MDEBUG
|
/* Add any CA names */
|
||||||
CRYPTO_pop_info();
|
|
||||||
CRYPTO_push_info("building bags");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* We now have loads of certificates: include them all */
|
for (i = 0; i < sk_OPENSSL_STRING_num(canames); i++)
|
||||||
for(i = 0; i < sk_X509_num(certs); i++) {
|
{
|
||||||
X509 *cert = NULL;
|
catmp = (unsigned char *)sk_OPENSSL_STRING_value(canames, i);
|
||||||
cert = sk_X509_value(certs, i);
|
X509_alias_set1(sk_X509_value(certs, i), catmp, -1);
|
||||||
bag = PKCS12_x5092certbag(cert);
|
}
|
||||||
/* If it matches private key set id */
|
|
||||||
if(cert == ucert) {
|
if (csp_name && key)
|
||||||
if(name) PKCS12_add_friendlyname(bag, name, -1);
|
EVP_PKEY_add1_attr_by_NID(key, NID_ms_csp_name,
|
||||||
PKCS12_add_localkeyid(bag, keyid, keyidlen);
|
MBSTRING_ASC, (unsigned char *)csp_name, -1);
|
||||||
} else if((catmp = sk_shift(canames)))
|
|
||||||
PKCS12_add_friendlyname(bag, catmp, -1);
|
if (add_lmk && key)
|
||||||
sk_PKCS12_SAFEBAG_push(bags, bag);
|
EVP_PKEY_add1_attr_by_NID(key, NID_LocalKeySet, 0, NULL, -1);
|
||||||
}
|
|
||||||
sk_X509_pop_free(certs, X509_free);
|
|
||||||
certs = NULL;
|
|
||||||
|
|
||||||
#ifdef CRYPTO_MDEBUG
|
#ifdef CRYPTO_MDEBUG
|
||||||
CRYPTO_pop_info();
|
CRYPTO_pop_info();
|
||||||
CRYPTO_push_info("encrypting bags");
|
CRYPTO_push_info("reading password");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(!noprompt &&
|
if(!noprompt &&
|
||||||
EVP_read_pw_string(pass, sizeof pass, "Enter Export Password:", 1)) {
|
EVP_read_pw_string(pass, sizeof pass, "Enter Export Password:", 1))
|
||||||
BIO_printf (bio_err, "Can't read Password\n");
|
{
|
||||||
goto export_end;
|
BIO_printf (bio_err, "Can't read Password\n");
|
||||||
}
|
goto export_end;
|
||||||
|
}
|
||||||
if (!twopass) BUF_strlcpy(macpass, pass, sizeof macpass);
|
if (!twopass) BUF_strlcpy(macpass, pass, sizeof macpass);
|
||||||
/* Turn certbags into encrypted authsafe */
|
|
||||||
authsafe = PKCS12_pack_p7encdata(cert_pbe, cpass, -1, NULL, 0,
|
|
||||||
iter, bags);
|
|
||||||
sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free);
|
|
||||||
bags = NULL;
|
|
||||||
|
|
||||||
if (!authsafe) {
|
#ifdef CRYPTO_MDEBUG
|
||||||
ERR_print_errors (bio_err);
|
CRYPTO_pop_info();
|
||||||
|
CRYPTO_push_info("creating PKCS#12 structure");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
p12 = PKCS12_create(cpass, name, key, ucert, certs,
|
||||||
|
key_pbe, cert_pbe, iter, -1, keytype);
|
||||||
|
|
||||||
|
if (!p12)
|
||||||
|
{
|
||||||
|
ERR_print_errors (bio_err);
|
||||||
goto export_end;
|
goto export_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
safes = sk_PKCS7_new_null ();
|
if (macalg)
|
||||||
sk_PKCS7_push (safes, authsafe);
|
{
|
||||||
|
macmd = EVP_get_digestbyname(macalg);
|
||||||
|
if (!macmd)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Unknown digest algorithm %s\n",
|
||||||
|
macalg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CRYPTO_MDEBUG
|
if (maciter != -1)
|
||||||
CRYPTO_pop_info();
|
PKCS12_set_mac(p12, mpass, -1, NULL, 0, maciter, macmd);
|
||||||
CRYPTO_push_info("building shrouded key bag");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Make a shrouded key bag */
|
|
||||||
p8 = EVP_PKEY2PKCS8 (key);
|
|
||||||
if(keytype) PKCS8_add_keyusage(p8, keytype);
|
|
||||||
bag = PKCS12_MAKE_SHKEYBAG(key_pbe, cpass, -1, NULL, 0, iter, p8);
|
|
||||||
PKCS8_PRIV_KEY_INFO_free(p8);
|
|
||||||
p8 = NULL;
|
|
||||||
if (name) PKCS12_add_friendlyname (bag, name, -1);
|
|
||||||
if(csp_name) PKCS12_add_CSPName_asc(bag, csp_name, -1);
|
|
||||||
PKCS12_add_localkeyid (bag, keyid, keyidlen);
|
|
||||||
bags = sk_PKCS12_SAFEBAG_new_null();
|
|
||||||
sk_PKCS12_SAFEBAG_push (bags, bag);
|
|
||||||
|
|
||||||
#ifdef CRYPTO_MDEBUG
|
|
||||||
CRYPTO_pop_info();
|
|
||||||
CRYPTO_push_info("encrypting shrouded key bag");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Turn it into unencrypted safe bag */
|
|
||||||
authsafe = PKCS12_pack_p7data (bags);
|
|
||||||
sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free);
|
|
||||||
bags = NULL;
|
|
||||||
sk_PKCS7_push (safes, authsafe);
|
|
||||||
|
|
||||||
#ifdef CRYPTO_MDEBUG
|
|
||||||
CRYPTO_pop_info();
|
|
||||||
CRYPTO_push_info("building pkcs12");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
p12 = PKCS12_init(NID_pkcs7_data);
|
|
||||||
|
|
||||||
PKCS12_pack_authsafes(p12, safes);
|
|
||||||
|
|
||||||
sk_PKCS7_pop_free(safes, PKCS7_free);
|
|
||||||
safes = NULL;
|
|
||||||
|
|
||||||
PKCS12_set_mac (p12, mpass, -1, NULL, 0, maciter, NULL);
|
|
||||||
|
|
||||||
#ifdef CRYPTO_MDEBUG
|
#ifdef CRYPTO_MDEBUG
|
||||||
CRYPTO_pop_info();
|
CRYPTO_pop_info();
|
||||||
CRYPTO_push_info("writing pkcs12");
|
CRYPTO_push_info("writing pkcs12");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
i2d_PKCS12_bio (out, p12);
|
i2d_PKCS12_bio(out, p12);
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
@@ -632,8 +627,7 @@ int MAIN(int argc, char **argv)
|
|||||||
|
|
||||||
if (key) EVP_PKEY_free(key);
|
if (key) EVP_PKEY_free(key);
|
||||||
if (certs) sk_X509_pop_free(certs, X509_free);
|
if (certs) sk_X509_pop_free(certs, X509_free);
|
||||||
if (safes) sk_PKCS7_pop_free(safes, PKCS7_free);
|
if (ucert) X509_free(ucert);
|
||||||
if (bags) sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free);
|
|
||||||
|
|
||||||
#ifdef CRYPTO_MDEBUG
|
#ifdef CRYPTO_MDEBUG
|
||||||
CRYPTO_pop_info();
|
CRYPTO_pop_info();
|
||||||
@@ -660,13 +654,13 @@ int MAIN(int argc, char **argv)
|
|||||||
|
|
||||||
if (!twopass) BUF_strlcpy(macpass, pass, sizeof macpass);
|
if (!twopass) BUF_strlcpy(macpass, pass, sizeof macpass);
|
||||||
|
|
||||||
if (options & INFO) BIO_printf (bio_err, "MAC Iteration %ld\n", p12->mac->iter ? ASN1_INTEGER_get (p12->mac->iter) : 1);
|
if ((options & INFO) && p12->mac) BIO_printf (bio_err, "MAC Iteration %ld\n", p12->mac->iter ? ASN1_INTEGER_get (p12->mac->iter) : 1);
|
||||||
if(macver) {
|
if(macver) {
|
||||||
#ifdef CRYPTO_MDEBUG
|
#ifdef CRYPTO_MDEBUG
|
||||||
CRYPTO_push_info("verify MAC");
|
CRYPTO_push_info("verify MAC");
|
||||||
#endif
|
#endif
|
||||||
/* If we enter empty password try no password first */
|
/* If we enter empty password try no password first */
|
||||||
if(!macpass[0] && PKCS12_verify_mac(p12, NULL, 0)) {
|
if(!mpass[0] && PKCS12_verify_mac(p12, NULL, 0)) {
|
||||||
/* If mac and crypto pass the same set it to NULL too */
|
/* If mac and crypto pass the same set it to NULL too */
|
||||||
if(!twopass) cpass = NULL;
|
if(!twopass) cpass = NULL;
|
||||||
} else if (!PKCS12_verify_mac(p12, mpass, -1)) {
|
} else if (!PKCS12_verify_mac(p12, mpass, -1)) {
|
||||||
@@ -700,7 +694,7 @@ int MAIN(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
BIO_free_all(out);
|
BIO_free_all(out);
|
||||||
if (canames) sk_free(canames);
|
if (canames) sk_OPENSSL_STRING_free(canames);
|
||||||
if(passin) OPENSSL_free(passin);
|
if(passin) OPENSSL_free(passin);
|
||||||
if(passout) OPENSSL_free(passout);
|
if(passout) OPENSSL_free(passout);
|
||||||
apps_shutdown();
|
apps_shutdown();
|
||||||
@@ -710,9 +704,10 @@ int MAIN(int argc, char **argv)
|
|||||||
int dump_certs_keys_p12 (BIO *out, PKCS12 *p12, char *pass,
|
int dump_certs_keys_p12 (BIO *out, PKCS12 *p12, char *pass,
|
||||||
int passlen, int options, char *pempass)
|
int passlen, int options, char *pempass)
|
||||||
{
|
{
|
||||||
STACK_OF(PKCS7) *asafes;
|
STACK_OF(PKCS7) *asafes = NULL;
|
||||||
STACK_OF(PKCS12_SAFEBAG) *bags;
|
STACK_OF(PKCS12_SAFEBAG) *bags;
|
||||||
int i, bagnid;
|
int i, bagnid;
|
||||||
|
int ret = 0;
|
||||||
PKCS7 *p7;
|
PKCS7 *p7;
|
||||||
|
|
||||||
if (!( asafes = PKCS12_unpack_authsafes(p12))) return 0;
|
if (!( asafes = PKCS12_unpack_authsafes(p12))) return 0;
|
||||||
@@ -730,16 +725,22 @@ int dump_certs_keys_p12 (BIO *out, PKCS12 *p12, char *pass,
|
|||||||
}
|
}
|
||||||
bags = PKCS12_unpack_p7encdata(p7, pass, passlen);
|
bags = PKCS12_unpack_p7encdata(p7, pass, passlen);
|
||||||
} else continue;
|
} else continue;
|
||||||
if (!bags) return 0;
|
if (!bags) goto err;
|
||||||
if (!dump_certs_pkeys_bags (out, bags, pass, passlen,
|
if (!dump_certs_pkeys_bags (out, bags, pass, passlen,
|
||||||
options, pempass)) {
|
options, pempass)) {
|
||||||
sk_PKCS12_SAFEBAG_pop_free (bags, PKCS12_SAFEBAG_free);
|
sk_PKCS12_SAFEBAG_pop_free (bags, PKCS12_SAFEBAG_free);
|
||||||
return 0;
|
goto err;
|
||||||
}
|
}
|
||||||
sk_PKCS12_SAFEBAG_pop_free (bags, PKCS12_SAFEBAG_free);
|
sk_PKCS12_SAFEBAG_pop_free (bags, PKCS12_SAFEBAG_free);
|
||||||
|
bags = NULL;
|
||||||
}
|
}
|
||||||
sk_PKCS7_pop_free (asafes, PKCS7_free);
|
ret = 1;
|
||||||
return 1;
|
|
||||||
|
err:
|
||||||
|
|
||||||
|
if (asafes)
|
||||||
|
sk_PKCS7_pop_free (asafes, PKCS7_free);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int dump_certs_pkeys_bags (BIO *out, STACK_OF(PKCS12_SAFEBAG) *bags,
|
int dump_certs_pkeys_bags (BIO *out, STACK_OF(PKCS12_SAFEBAG) *bags,
|
||||||
@@ -834,7 +835,7 @@ int get_cert_chain (X509 *cert, X509_STORE *store, STACK_OF(X509) **chain)
|
|||||||
{
|
{
|
||||||
X509_STORE_CTX store_ctx;
|
X509_STORE_CTX store_ctx;
|
||||||
STACK_OF(X509) *chn;
|
STACK_OF(X509) *chn;
|
||||||
int i;
|
int i = 0;
|
||||||
|
|
||||||
/* FIXME: Should really check the return status of X509_STORE_CTX_init
|
/* FIXME: Should really check the return status of X509_STORE_CTX_init
|
||||||
* for an error, but how that fits into the return value of this
|
* for an error, but how that fits into the return value of this
|
||||||
@@ -842,13 +843,17 @@ int get_cert_chain (X509 *cert, X509_STORE *store, STACK_OF(X509) **chain)
|
|||||||
X509_STORE_CTX_init(&store_ctx, store, cert, NULL);
|
X509_STORE_CTX_init(&store_ctx, store, cert, NULL);
|
||||||
if (X509_verify_cert(&store_ctx) <= 0) {
|
if (X509_verify_cert(&store_ctx) <= 0) {
|
||||||
i = X509_STORE_CTX_get_error (&store_ctx);
|
i = X509_STORE_CTX_get_error (&store_ctx);
|
||||||
|
if (i == 0)
|
||||||
|
/* avoid returning 0 if X509_verify_cert() did not
|
||||||
|
* set an appropriate error value in the context */
|
||||||
|
i = -1;
|
||||||
|
chn = NULL;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
} else
|
||||||
chn = X509_STORE_CTX_get1_chain(&store_ctx);
|
chn = X509_STORE_CTX_get1_chain(&store_ctx);
|
||||||
i = 0;
|
|
||||||
*chain = chn;
|
|
||||||
err:
|
err:
|
||||||
X509_STORE_CTX_cleanup(&store_ctx);
|
X509_STORE_CTX_cleanup(&store_ctx);
|
||||||
|
*chain = chn;
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
@@ -856,13 +861,16 @@ err:
|
|||||||
int alg_print (BIO *x, X509_ALGOR *alg)
|
int alg_print (BIO *x, X509_ALGOR *alg)
|
||||||
{
|
{
|
||||||
PBEPARAM *pbe;
|
PBEPARAM *pbe;
|
||||||
unsigned char *p;
|
const unsigned char *p;
|
||||||
p = alg->parameter->value.sequence->data;
|
p = alg->parameter->value.sequence->data;
|
||||||
pbe = d2i_PBEPARAM (NULL, &p, alg->parameter->value.sequence->length);
|
pbe = d2i_PBEPARAM(NULL, &p, alg->parameter->value.sequence->length);
|
||||||
BIO_printf (bio_err, "%s, Iteration %d\n",
|
if (!pbe)
|
||||||
OBJ_nid2ln(OBJ_obj2nid(alg->algorithm)), ASN1_INTEGER_get(pbe->iter));
|
return 1;
|
||||||
|
BIO_printf (bio_err, "%s, Iteration %ld\n",
|
||||||
|
OBJ_nid2ln(OBJ_obj2nid(alg->algorithm)),
|
||||||
|
ASN1_INTEGER_get(pbe->iter));
|
||||||
PBEPARAM_free (pbe);
|
PBEPARAM_free (pbe);
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Load all certificates from a given file */
|
/* Load all certificates from a given file */
|
||||||
@@ -894,7 +902,7 @@ int cert_load(BIO *in, STACK_OF(X509) *sk)
|
|||||||
|
|
||||||
/* Generalised attribute print: handle PKCS#8 and bag attributes */
|
/* Generalised attribute print: handle PKCS#8 and bag attributes */
|
||||||
|
|
||||||
int print_attribs (BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst, char *name)
|
int print_attribs (BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst,const char *name)
|
||||||
{
|
{
|
||||||
X509_ATTRIBUTE *attr;
|
X509_ATTRIBUTE *attr;
|
||||||
ASN1_TYPE *av;
|
ASN1_TYPE *av;
|
||||||
@@ -922,7 +930,7 @@ int print_attribs (BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst, char *name)
|
|||||||
av = sk_ASN1_TYPE_value(attr->value.set, 0);
|
av = sk_ASN1_TYPE_value(attr->value.set, 0);
|
||||||
switch(av->type) {
|
switch(av->type) {
|
||||||
case V_ASN1_BMPSTRING:
|
case V_ASN1_BMPSTRING:
|
||||||
value = uni2asc(av->value.bmpstring->data,
|
value = OPENSSL_uni2asc(av->value.bmpstring->data,
|
||||||
av->value.bmpstring->length);
|
av->value.bmpstring->length);
|
||||||
BIO_printf(out, "%s\n", value);
|
BIO_printf(out, "%s\n", value);
|
||||||
OPENSSL_free(value);
|
OPENSSL_free(value);
|
||||||
@@ -955,4 +963,22 @@ void hex_prin(BIO *out, unsigned char *buf, int len)
|
|||||||
for (i = 0; i < len; i++) BIO_printf (out, "%02X ", buf[i]);
|
for (i = 0; i < len; i++) BIO_printf (out, "%02X ", buf[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int set_pbe(BIO *err, int *ppbe, const char *str)
|
||||||
|
{
|
||||||
|
if (!str)
|
||||||
|
return 0;
|
||||||
|
if (!strcmp(str, "NONE"))
|
||||||
|
{
|
||||||
|
*ppbe = -1;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
*ppbe=OBJ_txt2nid(str);
|
||||||
|
if (*ppbe == NID_undef)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Unknown PBE algorithm %s\n", str);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
12
apps/pkcs7.c
12
apps/pkcs7.c
@@ -82,15 +82,12 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
|
||||||
ENGINE *e = NULL;
|
|
||||||
#endif
|
|
||||||
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;
|
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;
|
||||||
@@ -139,6 +136,8 @@ int MAIN(int argc, char **argv)
|
|||||||
noout=1;
|
noout=1;
|
||||||
else if (strcmp(*argv,"-text") == 0)
|
else if (strcmp(*argv,"-text") == 0)
|
||||||
text=1;
|
text=1;
|
||||||
|
else if (strcmp(*argv,"-print") == 0)
|
||||||
|
p7_print=1;
|
||||||
else if (strcmp(*argv,"-print_certs") == 0)
|
else if (strcmp(*argv,"-print_certs") == 0)
|
||||||
print_certs=1;
|
print_certs=1;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
@@ -180,7 +179,7 @@ bad:
|
|||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
e = 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());
|
||||||
@@ -238,6 +237,9 @@ bad:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (p7_print)
|
||||||
|
PKCS7_print_ctx(out, p7, 0, NULL);
|
||||||
|
|
||||||
if (print_certs)
|
if (print_certs)
|
||||||
{
|
{
|
||||||
STACK_OF(X509) *certs=NULL;
|
STACK_OF(X509) *certs=NULL;
|
||||||
|
|||||||
320
apps/pkcs8.c
320
apps/pkcs8.c
@@ -1,6 +1,6 @@
|
|||||||
/* pkcs8.c */
|
/* pkcs8.c */
|
||||||
/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
* project 1999.
|
* project 1999-2004.
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
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;
|
||||||
@@ -80,11 +80,12 @@ int MAIN(int argc, char **argv)
|
|||||||
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;
|
X509_SIG *p8 = NULL;
|
||||||
PKCS8_PRIV_KEY_INFO *p8inf;
|
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;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine=NULL;
|
char *engine=NULL;
|
||||||
#endif
|
#endif
|
||||||
@@ -100,43 +101,70 @@ int MAIN(int argc, char **argv)
|
|||||||
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 (args[1]) {
|
if (!strcmp(*args,"-v2"))
|
||||||
|
{
|
||||||
|
if (args[1])
|
||||||
|
{
|
||||||
args++;
|
args++;
|
||||||
cipher=EVP_get_cipherbyname(*args);
|
cipher=EVP_get_cipherbyname(*args);
|
||||||
if(!cipher) {
|
if (!cipher)
|
||||||
|
{
|
||||||
BIO_printf(bio_err,
|
BIO_printf(bio_err,
|
||||||
"Unknown cipher %s\n", *args);
|
"Unknown cipher %s\n", *args);
|
||||||
badarg = 1;
|
badarg = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else badarg = 1;
|
else
|
||||||
} else if (!strcmp(*args,"-v1")) {
|
badarg = 1;
|
||||||
if (args[1]) {
|
}
|
||||||
|
else if (!strcmp(*args,"-v1"))
|
||||||
|
{
|
||||||
|
if (args[1])
|
||||||
|
{
|
||||||
args++;
|
args++;
|
||||||
pbe_nid=OBJ_txt2nid(*args);
|
pbe_nid=OBJ_txt2nid(*args);
|
||||||
if(pbe_nid == NID_undef) {
|
if (pbe_nid == NID_undef)
|
||||||
|
{
|
||||||
BIO_printf(bio_err,
|
BIO_printf(bio_err,
|
||||||
"Unknown PBE 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]) {
|
}
|
||||||
|
else if (!strcmp(*args,"-inform"))
|
||||||
|
{
|
||||||
|
if (args[1])
|
||||||
|
{
|
||||||
args++;
|
args++;
|
||||||
informat=str2fmt(*args);
|
informat=str2fmt(*args);
|
||||||
} else badarg = 1;
|
}
|
||||||
} else if (!strcmp(*args,"-outform")) {
|
else badarg = 1;
|
||||||
if (args[1]) {
|
}
|
||||||
|
else if (!strcmp(*args,"-outform"))
|
||||||
|
{
|
||||||
|
if (args[1])
|
||||||
|
{
|
||||||
args++;
|
args++;
|
||||||
outformat=str2fmt(*args);
|
outformat=str2fmt(*args);
|
||||||
} else badarg = 1;
|
}
|
||||||
} else if (!strcmp (*args, "-topk8")) topk8 = 1;
|
else badarg = 1;
|
||||||
else if (!strcmp (*args, "-noiter")) iter = 1;
|
}
|
||||||
else if (!strcmp (*args, "-nocrypt")) nocrypt = 1;
|
else if (!strcmp (*args, "-topk8"))
|
||||||
else if (!strcmp (*args, "-nooct")) p8_broken = PKCS8_NO_OCTET;
|
topk8 = 1;
|
||||||
else if (!strcmp (*args, "-nsdb")) p8_broken = PKCS8_NS_DB;
|
else if (!strcmp (*args, "-noiter"))
|
||||||
else if (!strcmp (*args, "-embed")) p8_broken = PKCS8_EMBEDDED_PARAM;
|
iter = 1;
|
||||||
|
else if (!strcmp (*args, "-nocrypt"))
|
||||||
|
nocrypt = 1;
|
||||||
|
else if (!strcmp (*args, "-nooct"))
|
||||||
|
p8_broken = PKCS8_NO_OCTET;
|
||||||
|
else if (!strcmp (*args, "-nsdb"))
|
||||||
|
p8_broken = PKCS8_NS_DB;
|
||||||
|
else if (!strcmp (*args, "-embed"))
|
||||||
|
p8_broken = PKCS8_EMBEDDED_PARAM;
|
||||||
else if (!strcmp(*args,"-passin"))
|
else if (!strcmp(*args,"-passin"))
|
||||||
{
|
{
|
||||||
if (!args[1]) goto bad;
|
if (!args[1]) goto bad;
|
||||||
@@ -154,21 +182,30 @@ int MAIN(int argc, char **argv)
|
|||||||
engine= *(++args);
|
engine= *(++args);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (!strcmp (*args, "-in")) {
|
else if (!strcmp (*args, "-in"))
|
||||||
if (args[1]) {
|
{
|
||||||
|
if (args[1])
|
||||||
|
{
|
||||||
args++;
|
args++;
|
||||||
infile = *args;
|
infile = *args;
|
||||||
} else badarg = 1;
|
}
|
||||||
} else if (!strcmp (*args, "-out")) {
|
else badarg = 1;
|
||||||
if (args[1]) {
|
}
|
||||||
|
else if (!strcmp (*args, "-out"))
|
||||||
|
{
|
||||||
|
if (args[1])
|
||||||
|
{
|
||||||
args++;
|
args++;
|
||||||
outfile = *args;
|
outfile = *args;
|
||||||
} else badarg = 1;
|
}
|
||||||
} else badarg = 1;
|
else badarg = 1;
|
||||||
|
}
|
||||||
|
else badarg = 1;
|
||||||
args++;
|
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");
|
||||||
@@ -189,147 +226,171 @@ int MAIN(int argc, char **argv)
|
|||||||
#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);
|
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");
|
||||||
return (1);
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((pbe_nid == -1) && !cipher) pbe_nid = NID_pbeWithMD5AndDES_CBC;
|
if ((pbe_nid == -1) && !cipher)
|
||||||
|
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,
|
BIO_printf(bio_err,
|
||||||
"Can't open input file %s\n", infile);
|
"Can't open input file %s\n", infile);
|
||||||
return (1);
|
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,
|
BIO_printf(bio_err,
|
||||||
"Can't open output file %s\n", outfile);
|
"Can't open output file %s\n", outfile);
|
||||||
return (1);
|
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 (topk8)
|
if (topk8)
|
||||||
{
|
{
|
||||||
BIO_free(in); /* Not needed in this section */
|
|
||||||
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)
|
||||||
return (1);
|
goto end;
|
||||||
}
|
if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken)))
|
||||||
if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken))) {
|
{
|
||||||
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);
|
||||||
return (1);
|
goto end;
|
||||||
}
|
|
||||||
if(nocrypt) {
|
|
||||||
if(outformat == FORMAT_PEM)
|
|
||||||
PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf);
|
|
||||||
else if(outformat == FORMAT_ASN1)
|
|
||||||
i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf);
|
|
||||||
else {
|
|
||||||
BIO_printf(bio_err, "Bad format specified for key\n");
|
|
||||||
return (1);
|
|
||||||
}
|
}
|
||||||
} else {
|
if (nocrypt)
|
||||||
if(passout) p8pass = passout;
|
{
|
||||||
else {
|
if (outformat == FORMAT_PEM)
|
||||||
|
PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf);
|
||||||
|
else if (outformat == FORMAT_ASN1)
|
||||||
|
i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Bad format specified for key\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (passout)
|
||||||
|
p8pass = passout;
|
||||||
|
else
|
||||||
|
{
|
||||||
p8pass = pass;
|
p8pass = pass;
|
||||||
if (EVP_read_pw_string(pass, sizeof pass, "Enter Encryption Password:", 1))
|
if (EVP_read_pw_string(pass, sizeof pass, "Enter Encryption Password:", 1))
|
||||||
return (1);
|
goto end;
|
||||||
}
|
}
|
||||||
app_RAND_load_file(NULL, bio_err, 0);
|
app_RAND_load_file(NULL, bio_err, 0);
|
||||||
if (!(p8 = PKCS8_encrypt(pbe_nid, cipher,
|
if (!(p8 = PKCS8_encrypt(pbe_nid, cipher,
|
||||||
p8pass, strlen(p8pass),
|
p8pass, strlen(p8pass),
|
||||||
NULL, 0, iter, p8inf))) {
|
NULL, 0, iter, p8inf)))
|
||||||
|
{
|
||||||
BIO_printf(bio_err, "Error encrypting key\n");
|
BIO_printf(bio_err, "Error encrypting key\n");
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
return (1);
|
goto end;
|
||||||
}
|
}
|
||||||
app_RAND_write_file(NULL, bio_err);
|
app_RAND_write_file(NULL, bio_err);
|
||||||
if(outformat == FORMAT_PEM)
|
if (outformat == FORMAT_PEM)
|
||||||
PEM_write_bio_PKCS8(out, p8);
|
PEM_write_bio_PKCS8(out, p8);
|
||||||
else if(outformat == FORMAT_ASN1)
|
else if (outformat == FORMAT_ASN1)
|
||||||
i2d_PKCS8_bio(out, p8);
|
i2d_PKCS8_bio(out, p8);
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
BIO_printf(bio_err, "Bad format specified for key\n");
|
BIO_printf(bio_err, "Bad format specified for key\n");
|
||||||
return (1);
|
goto end;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
X509_SIG_free(p8);
|
|
||||||
}
|
|
||||||
PKCS8_PRIV_KEY_INFO_free (p8inf);
|
|
||||||
EVP_PKEY_free(pkey);
|
|
||||||
BIO_free_all(out);
|
|
||||||
if(passin) OPENSSL_free(passin);
|
|
||||||
if(passout) OPENSSL_free(passout);
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(nocrypt) {
|
ret = 0;
|
||||||
if(informat == FORMAT_PEM)
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nocrypt)
|
||||||
|
{
|
||||||
|
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");
|
BIO_printf(bio_err, "Bad format specified for key\n");
|
||||||
return (1);
|
goto end;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
else
|
||||||
if(informat == FORMAT_PEM)
|
{
|
||||||
|
if (informat == FORMAT_PEM)
|
||||||
p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL);
|
p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL);
|
||||||
else if(informat == FORMAT_ASN1)
|
else if (informat == FORMAT_ASN1)
|
||||||
p8 = d2i_PKCS8_bio(in, NULL);
|
p8 = d2i_PKCS8_bio(in, NULL);
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
BIO_printf(bio_err, "Bad format specified for key\n");
|
BIO_printf(bio_err, "Bad format specified for key\n");
|
||||||
return (1);
|
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);
|
||||||
return (1);
|
goto end;
|
||||||
}
|
}
|
||||||
if(passin) p8pass = passin;
|
if (passin)
|
||||||
else {
|
p8pass = passin;
|
||||||
|
else
|
||||||
|
{
|
||||||
p8pass = pass;
|
p8pass = pass;
|
||||||
EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0);
|
EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0);
|
||||||
}
|
}
|
||||||
p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass));
|
p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass));
|
||||||
X509_SIG_free(p8);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
||||||
return (1);
|
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);
|
||||||
return (1);
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p8inf->broken) {
|
if (p8inf->broken)
|
||||||
|
{
|
||||||
BIO_printf(bio_err, "Warning: broken key encoding: ");
|
BIO_printf(bio_err, "Warning: broken key encoding: ");
|
||||||
switch (p8inf->broken) {
|
switch (p8inf->broken)
|
||||||
|
{
|
||||||
case PKCS8_NO_OCTET:
|
case PKCS8_NO_OCTET:
|
||||||
BIO_printf(bio_err, "No Octet String in PrivateKey\n");
|
BIO_printf(bio_err, "No Octet String in PrivateKey\n");
|
||||||
break;
|
break;
|
||||||
@@ -342,28 +403,37 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO_printf(bio_err, "DSA public key include in PrivateKey\n");
|
BIO_printf(bio_err, "DSA public key include in PrivateKey\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PKCS8_NEG_PRIVKEY:
|
||||||
|
BIO_printf(bio_err, "DSA private key value is negative\n");
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
BIO_printf(bio_err, "Unknown broken type\n");
|
BIO_printf(bio_err, "Unknown broken type\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PKCS8_PRIV_KEY_INFO_free(p8inf);
|
if (outformat == FORMAT_PEM)
|
||||||
if(outformat == FORMAT_PEM)
|
|
||||||
PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout);
|
PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout);
|
||||||
else if(outformat == FORMAT_ASN1)
|
else if (outformat == FORMAT_ASN1)
|
||||||
i2d_PrivateKey_bio(out, pkey);
|
i2d_PrivateKey_bio(out, pkey);
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
BIO_printf(bio_err, "Bad format specified for key\n");
|
BIO_printf(bio_err, "Bad format specified for key\n");
|
||||||
return (1);
|
goto end;
|
||||||
}
|
}
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
end:
|
end:
|
||||||
|
X509_SIG_free(p8);
|
||||||
|
PKCS8_PRIV_KEY_INFO_free(p8inf);
|
||||||
EVP_PKEY_free(pkey);
|
EVP_PKEY_free(pkey);
|
||||||
BIO_free_all(out);
|
BIO_free_all(out);
|
||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
if(passin) OPENSSL_free(passin);
|
if (passin)
|
||||||
if(passout) OPENSSL_free(passout);
|
OPENSSL_free(passin);
|
||||||
|
if (passout)
|
||||||
|
OPENSSL_free(passout);
|
||||||
|
|
||||||
return (0);
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
284
apps/pkey.c
Normal file
284
apps/pkey.c
Normal file
@@ -0,0 +1,284 @@
|
|||||||
|
/* apps/pkey.c */
|
||||||
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
|
* project 2006
|
||||||
|
*/
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. All advertising materials mentioning features or use of this
|
||||||
|
* software must display the following acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||||
|
* endorse or promote products derived from this software without
|
||||||
|
* prior written permission. For written permission, please contact
|
||||||
|
* licensing@OpenSSL.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "OpenSSL"
|
||||||
|
* nor may "OpenSSL" appear in their names without prior written
|
||||||
|
* permission of the OpenSSL Project.
|
||||||
|
*
|
||||||
|
* 6. Redistributions of any form whatsoever must retain the following
|
||||||
|
* acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||||
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT 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 SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This product includes cryptographic software written by Eric Young
|
||||||
|
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||||
|
* Hudson (tjh@cryptsoft.com).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "apps.h"
|
||||||
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/err.h>
|
||||||
|
#include <openssl/evp.h>
|
||||||
|
|
||||||
|
#define PROG pkey_main
|
||||||
|
|
||||||
|
int MAIN(int, char **);
|
||||||
|
|
||||||
|
int MAIN(int argc, char **argv)
|
||||||
|
{
|
||||||
|
ENGINE *e = NULL;
|
||||||
|
char **args, *infile = NULL, *outfile = NULL;
|
||||||
|
char *passargin = NULL, *passargout = NULL;
|
||||||
|
BIO *in = NULL, *out = NULL;
|
||||||
|
const EVP_CIPHER *cipher = NULL;
|
||||||
|
int informat, outformat;
|
||||||
|
int pubin = 0, pubout = 0, pubtext = 0, text = 0, noout = 0;
|
||||||
|
EVP_PKEY *pkey=NULL;
|
||||||
|
char *passin = NULL, *passout = NULL;
|
||||||
|
int badarg = 0;
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
char *engine=NULL;
|
||||||
|
#endif
|
||||||
|
int ret = 1;
|
||||||
|
|
||||||
|
if (bio_err == NULL)
|
||||||
|
bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
|
||||||
|
|
||||||
|
if (!load_config(bio_err, NULL))
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
informat=FORMAT_PEM;
|
||||||
|
outformat=FORMAT_PEM;
|
||||||
|
|
||||||
|
ERR_load_crypto_strings();
|
||||||
|
OpenSSL_add_all_algorithms();
|
||||||
|
args = argv + 1;
|
||||||
|
while (!badarg && *args && *args[0] == '-')
|
||||||
|
{
|
||||||
|
if (!strcmp(*args,"-inform"))
|
||||||
|
{
|
||||||
|
if (args[1])
|
||||||
|
{
|
||||||
|
args++;
|
||||||
|
informat=str2fmt(*args);
|
||||||
|
}
|
||||||
|
else badarg = 1;
|
||||||
|
}
|
||||||
|
else if (!strcmp(*args,"-outform"))
|
||||||
|
{
|
||||||
|
if (args[1])
|
||||||
|
{
|
||||||
|
args++;
|
||||||
|
outformat=str2fmt(*args);
|
||||||
|
}
|
||||||
|
else badarg = 1;
|
||||||
|
}
|
||||||
|
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
|
||||||
|
else if (strcmp(*args,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (!args[1]) goto bad;
|
||||||
|
engine= *(++args);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else if (!strcmp (*args, "-in"))
|
||||||
|
{
|
||||||
|
if (args[1])
|
||||||
|
{
|
||||||
|
args++;
|
||||||
|
infile = *args;
|
||||||
|
}
|
||||||
|
else badarg = 1;
|
||||||
|
}
|
||||||
|
else if (!strcmp (*args, "-out"))
|
||||||
|
{
|
||||||
|
if (args[1])
|
||||||
|
{
|
||||||
|
args++;
|
||||||
|
outfile = *args;
|
||||||
|
}
|
||||||
|
else badarg = 1;
|
||||||
|
}
|
||||||
|
else if (strcmp(*args,"-pubin") == 0)
|
||||||
|
{
|
||||||
|
pubin=1;
|
||||||
|
pubout=1;
|
||||||
|
pubtext=1;
|
||||||
|
}
|
||||||
|
else if (strcmp(*args,"-pubout") == 0)
|
||||||
|
pubout=1;
|
||||||
|
else if (strcmp(*args,"-text_pub") == 0)
|
||||||
|
{
|
||||||
|
pubtext=1;
|
||||||
|
text=1;
|
||||||
|
}
|
||||||
|
else if (strcmp(*args,"-text") == 0)
|
||||||
|
text=1;
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
bad:
|
||||||
|
BIO_printf(bio_err, "Usage pkey [options]\n");
|
||||||
|
BIO_printf(bio_err, "where options are\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, "-passin arg input file pass phrase source\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, "-passout arg output file pass phrase source\n");
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n");
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
e = setup_engine(bio_err, engine, 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!app_passwd(bio_err, passargin, passargout, &passin, &passout))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Error getting passwords\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (outfile)
|
||||||
|
{
|
||||||
|
if (!(out = BIO_new_file (outfile, "wb")))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
"Can't open output file %s\n", outfile);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
out = BIO_new_fp (stdout, BIO_NOCLOSE);
|
||||||
|
#ifdef OPENSSL_SYS_VMS
|
||||||
|
{
|
||||||
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
|
out = BIO_push(tmpbio, out);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pubin)
|
||||||
|
pkey = load_pubkey(bio_err, infile, informat, 1,
|
||||||
|
passin, e, "Public Key");
|
||||||
|
else
|
||||||
|
pkey = load_key(bio_err, infile, informat, 1,
|
||||||
|
passin, e, "key");
|
||||||
|
if (!pkey)
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
if (!noout)
|
||||||
|
{
|
||||||
|
if (outformat == FORMAT_PEM)
|
||||||
|
{
|
||||||
|
if (pubout)
|
||||||
|
PEM_write_bio_PUBKEY(out,pkey);
|
||||||
|
else
|
||||||
|
PEM_write_bio_PrivateKey(out, pkey, cipher,
|
||||||
|
NULL, 0, NULL, passout);
|
||||||
|
}
|
||||||
|
else if (outformat == FORMAT_ASN1)
|
||||||
|
{
|
||||||
|
if (pubout)
|
||||||
|
i2d_PUBKEY_bio(out, pkey);
|
||||||
|
else
|
||||||
|
i2d_PrivateKey_bio(out, pkey);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Bad format specified for key\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text)
|
||||||
|
{
|
||||||
|
if (pubtext)
|
||||||
|
EVP_PKEY_print_public(out, pkey, 0, NULL);
|
||||||
|
else
|
||||||
|
EVP_PKEY_print_private(out, pkey, 0, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
end:
|
||||||
|
EVP_PKEY_free(pkey);
|
||||||
|
BIO_free_all(out);
|
||||||
|
BIO_free(in);
|
||||||
|
if (passin)
|
||||||
|
OPENSSL_free(passin);
|
||||||
|
if (passout)
|
||||||
|
OPENSSL_free(passout);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
200
apps/pkeyparam.c
Normal file
200
apps/pkeyparam.c
Normal file
@@ -0,0 +1,200 @@
|
|||||||
|
/* apps/pkeyparam.c */
|
||||||
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
|
* project 2006
|
||||||
|
*/
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. All advertising materials mentioning features or use of this
|
||||||
|
* software must display the following acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||||
|
* endorse or promote products derived from this software without
|
||||||
|
* prior written permission. For written permission, please contact
|
||||||
|
* licensing@OpenSSL.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "OpenSSL"
|
||||||
|
* nor may "OpenSSL" appear in their names without prior written
|
||||||
|
* permission of the OpenSSL Project.
|
||||||
|
*
|
||||||
|
* 6. Redistributions of any form whatsoever must retain the following
|
||||||
|
* acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||||
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT 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 SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This product includes cryptographic software written by Eric Young
|
||||||
|
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||||
|
* Hudson (tjh@cryptsoft.com).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "apps.h"
|
||||||
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/err.h>
|
||||||
|
#include <openssl/evp.h>
|
||||||
|
|
||||||
|
#define PROG pkeyparam_main
|
||||||
|
|
||||||
|
int MAIN(int, char **);
|
||||||
|
|
||||||
|
int MAIN(int argc, char **argv)
|
||||||
|
{
|
||||||
|
char **args, *infile = NULL, *outfile = NULL;
|
||||||
|
BIO *in = NULL, *out = NULL;
|
||||||
|
int text = 0, noout = 0;
|
||||||
|
EVP_PKEY *pkey=NULL;
|
||||||
|
int badarg = 0;
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
char *engine=NULL;
|
||||||
|
#endif
|
||||||
|
int ret = 1;
|
||||||
|
|
||||||
|
if (bio_err == NULL)
|
||||||
|
bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
|
||||||
|
|
||||||
|
if (!load_config(bio_err, NULL))
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
ERR_load_crypto_strings();
|
||||||
|
OpenSSL_add_all_algorithms();
|
||||||
|
args = argv + 1;
|
||||||
|
while (!badarg && *args && *args[0] == '-')
|
||||||
|
{
|
||||||
|
if (!strcmp (*args, "-in"))
|
||||||
|
{
|
||||||
|
if (args[1])
|
||||||
|
{
|
||||||
|
args++;
|
||||||
|
infile = *args;
|
||||||
|
}
|
||||||
|
else badarg = 1;
|
||||||
|
}
|
||||||
|
else if (!strcmp (*args, "-out"))
|
||||||
|
{
|
||||||
|
if (args[1])
|
||||||
|
{
|
||||||
|
args++;
|
||||||
|
outfile = *args;
|
||||||
|
}
|
||||||
|
else badarg = 1;
|
||||||
|
}
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
else if (strcmp(*args,"-engine") == 0)
|
||||||
|
{
|
||||||
|
if (!args[1]) goto bad;
|
||||||
|
engine= *(++args);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
else if (strcmp(*args,"-text") == 0)
|
||||||
|
text=1;
|
||||||
|
else if (strcmp(*args,"-noout") == 0)
|
||||||
|
noout=1;
|
||||||
|
args++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (badarg)
|
||||||
|
{
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
bad:
|
||||||
|
#endif
|
||||||
|
BIO_printf(bio_err, "Usage pkeyparam [options]\n");
|
||||||
|
BIO_printf(bio_err, "where options are\n");
|
||||||
|
BIO_printf(bio_err, "-in file input 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, "-noout don't output encoded parameters\n");
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n");
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
setup_engine(bio_err, engine, 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (infile)
|
||||||
|
{
|
||||||
|
if (!(in = BIO_new_file (infile, "r")))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
"Can't open input file %s\n", infile);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
in = BIO_new_fp (stdin, BIO_NOCLOSE);
|
||||||
|
|
||||||
|
if (outfile)
|
||||||
|
{
|
||||||
|
if (!(out = BIO_new_file (outfile, "w")))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
"Can't open output file %s\n", outfile);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
out = BIO_new_fp (stdout, BIO_NOCLOSE);
|
||||||
|
#ifdef OPENSSL_SYS_VMS
|
||||||
|
{
|
||||||
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
|
out = BIO_push(tmpbio, out);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
pkey = PEM_read_bio_Parameters(in, NULL);
|
||||||
|
if (!pkey)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Error reading parameters\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!noout)
|
||||||
|
PEM_write_bio_Parameters(out,pkey);
|
||||||
|
|
||||||
|
if (text)
|
||||||
|
EVP_PKEY_print_params(out, pkey, 0, NULL);
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
end:
|
||||||
|
EVP_PKEY_free(pkey);
|
||||||
|
BIO_free_all(out);
|
||||||
|
BIO_free(in);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
570
apps/pkeyutl.c
Normal file
570
apps/pkeyutl.c
Normal file
@@ -0,0 +1,570 @@
|
|||||||
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
|
* project 2006.
|
||||||
|
*/
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. All advertising materials mentioning features or use of this
|
||||||
|
* software must display the following acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||||
|
* endorse or promote products derived from this software without
|
||||||
|
* prior written permission. For written permission, please contact
|
||||||
|
* licensing@OpenSSL.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called "OpenSSL"
|
||||||
|
* nor may "OpenSSL" appear in their names without prior written
|
||||||
|
* permission of the OpenSSL Project.
|
||||||
|
*
|
||||||
|
* 6. Redistributions of any form whatsoever must retain the following
|
||||||
|
* acknowledgment:
|
||||||
|
* "This product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||||
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT 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 SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This product includes cryptographic software written by Eric Young
|
||||||
|
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||||
|
* Hudson (tjh@cryptsoft.com).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "apps.h"
|
||||||
|
#include <string.h>
|
||||||
|
#include <openssl/err.h>
|
||||||
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/evp.h>
|
||||||
|
|
||||||
|
#define KEY_PRIVKEY 1
|
||||||
|
#define KEY_PUBKEY 2
|
||||||
|
#define KEY_CERT 3
|
||||||
|
|
||||||
|
static void usage(void);
|
||||||
|
|
||||||
|
#undef PROG
|
||||||
|
|
||||||
|
#define PROG pkeyutl_main
|
||||||
|
|
||||||
|
static EVP_PKEY_CTX *init_ctx(int *pkeysize,
|
||||||
|
char *keyfile, int keyform, int key_type,
|
||||||
|
char *passargin, int pkey_op, ENGINE *e);
|
||||||
|
|
||||||
|
static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
|
||||||
|
const char *file);
|
||||||
|
|
||||||
|
static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
|
||||||
|
unsigned char *out, size_t *poutlen,
|
||||||
|
unsigned char *in, size_t inlen);
|
||||||
|
|
||||||
|
int MAIN(int argc, char **);
|
||||||
|
|
||||||
|
int MAIN(int argc, char **argv)
|
||||||
|
{
|
||||||
|
BIO *in = NULL, *out = NULL;
|
||||||
|
char *infile = NULL, *outfile = NULL, *sigfile = NULL;
|
||||||
|
ENGINE *e = NULL;
|
||||||
|
int pkey_op = EVP_PKEY_OP_SIGN, key_type = KEY_PRIVKEY;
|
||||||
|
int keyform = FORMAT_PEM, peerform = FORMAT_PEM;
|
||||||
|
char badarg = 0, rev = 0;
|
||||||
|
char hexdump = 0, asn1parse = 0;
|
||||||
|
EVP_PKEY_CTX *ctx = NULL;
|
||||||
|
char *passargin = NULL;
|
||||||
|
int keysize = -1;
|
||||||
|
|
||||||
|
unsigned char *buf_in = NULL, *buf_out = NULL, *sig = NULL;
|
||||||
|
size_t buf_outlen;
|
||||||
|
int buf_inlen = 0, siglen = -1;
|
||||||
|
|
||||||
|
int ret = 1, rv = -1;
|
||||||
|
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
|
|
||||||
|
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();
|
||||||
|
|
||||||
|
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,"-sigfile"))
|
||||||
|
{
|
||||||
|
if (--argc < 1) badarg = 1;
|
||||||
|
else sigfile= *(++argv);
|
||||||
|
}
|
||||||
|
else if(!strcmp(*argv, "-inkey"))
|
||||||
|
{
|
||||||
|
if (--argc < 1)
|
||||||
|
badarg = 1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ctx = init_ctx(&keysize,
|
||||||
|
*(++argv), keyform, key_type,
|
||||||
|
passargin, pkey_op, e);
|
||||||
|
if (!ctx)
|
||||||
|
{
|
||||||
|
BIO_puts(bio_err,
|
||||||
|
"Error initializing context\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
badarg = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!strcmp(*argv,"-peerkey"))
|
||||||
|
{
|
||||||
|
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
|
||||||
|
else if(!strcmp(*argv, "-engine"))
|
||||||
|
{
|
||||||
|
if (--argc < 1)
|
||||||
|
badarg = 1;
|
||||||
|
else
|
||||||
|
e = setup_engine(bio_err, *(++argv), 0);
|
||||||
|
}
|
||||||
|
#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, "-sign"))
|
||||||
|
pkey_op = EVP_PKEY_OP_SIGN;
|
||||||
|
else if(!strcmp(*argv, "-verify"))
|
||||||
|
pkey_op = EVP_PKEY_OP_VERIFY;
|
||||||
|
else if(!strcmp(*argv, "-verifyrecover"))
|
||||||
|
pkey_op = EVP_PKEY_OP_VERIFYRECOVER;
|
||||||
|
else if(!strcmp(*argv, "-rev"))
|
||||||
|
rev = 1;
|
||||||
|
else if(!strcmp(*argv, "-encrypt"))
|
||||||
|
pkey_op = EVP_PKEY_OP_ENCRYPT;
|
||||||
|
else if(!strcmp(*argv, "-decrypt"))
|
||||||
|
pkey_op = EVP_PKEY_OP_DECRYPT;
|
||||||
|
else if(!strcmp(*argv, "-derive"))
|
||||||
|
pkey_op = EVP_PKEY_OP_DERIVE;
|
||||||
|
else if (strcmp(*argv,"-pkeyopt") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1)
|
||||||
|
badarg = 1;
|
||||||
|
else if (!ctx)
|
||||||
|
{
|
||||||
|
BIO_puts(bio_err,
|
||||||
|
"-pkeyopt command before -inkey\n");
|
||||||
|
badarg = 1;
|
||||||
|
}
|
||||||
|
else if (pkey_ctrl_string(ctx, *(++argv)) <= 0)
|
||||||
|
{
|
||||||
|
BIO_puts(bio_err, "parameter setting error\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else badarg = 1;
|
||||||
|
if(badarg)
|
||||||
|
{
|
||||||
|
usage();
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ctx)
|
||||||
|
{
|
||||||
|
usage();
|
||||||
|
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 */
|
||||||
|
app_RAND_load_file(NULL, bio_err, 0);
|
||||||
|
|
||||||
|
if (pkey_op != EVP_PKEY_OP_DERIVE)
|
||||||
|
{
|
||||||
|
if(infile)
|
||||||
|
{
|
||||||
|
if(!(in = BIO_new_file(infile, "rb")))
|
||||||
|
{
|
||||||
|
BIO_puts(bio_err,
|
||||||
|
"Error Opening Input File\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
in = BIO_new_fp(stdin, BIO_NOCLOSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(outfile)
|
||||||
|
{
|
||||||
|
if(!(out = BIO_new_file(outfile, "wb")))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Error Creating Output File\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
|
#ifdef OPENSSL_SYS_VMS
|
||||||
|
{
|
||||||
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
|
out = BIO_push(tmpbio, out);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sigfile)
|
||||||
|
{
|
||||||
|
BIO *sigbio = BIO_new_file(sigfile, "rb");
|
||||||
|
if (!sigbio)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Can't open signature file %s\n",
|
||||||
|
sigfile);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
siglen = bio_to_mem(&sig, keysize * 10, sigbio);
|
||||||
|
BIO_free(sigbio);
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
rv = EVP_PKEY_verify(ctx, sig, (size_t)siglen,
|
||||||
|
buf_in, (size_t)buf_inlen);
|
||||||
|
if (rv == 0)
|
||||||
|
BIO_puts(out, "Signature Verification Failure\n");
|
||||||
|
else if (rv == 1)
|
||||||
|
BIO_puts(out, "Signature Verified Successfully\n");
|
||||||
|
if (rv >= 0)
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rv = do_keyop(ctx, pkey_op, NULL, (size_t *)&buf_outlen,
|
||||||
|
buf_in, (size_t)buf_inlen);
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Public Key operation error\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
ret = 0;
|
||||||
|
if(asn1parse)
|
||||||
|
{
|
||||||
|
if(!ASN1_parse_dump(out, buf_out, buf_outlen, 1, -1))
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
}
|
||||||
|
else if(hexdump)
|
||||||
|
BIO_dump(out, (char *)buf_out, buf_outlen);
|
||||||
|
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)
|
||||||
|
OPENSSL_free(buf_in);
|
||||||
|
if (buf_out)
|
||||||
|
OPENSSL_free(buf_out);
|
||||||
|
if (sig)
|
||||||
|
OPENSSL_free(sig);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void usage()
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Usage: pkeyutl [options]\n");
|
||||||
|
BIO_printf(bio_err, "-in file input 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, "-inkey file input key\n");
|
||||||
|
BIO_printf(bio_err, "-keyform arg private key format - default PEM\n");
|
||||||
|
BIO_printf(bio_err, "-pubin input is a public key\n");
|
||||||
|
BIO_printf(bio_err, "-certin input is a certificate carrying a public key\n");
|
||||||
|
BIO_printf(bio_err, "-pkeyopt X:Y public key options\n");
|
||||||
|
BIO_printf(bio_err, "-sign sign with private key\n");
|
||||||
|
BIO_printf(bio_err, "-verify verify with public key\n");
|
||||||
|
BIO_printf(bio_err, "-verifyrecover verify with public key, recover original data\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
|
||||||
|
BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n");
|
||||||
|
#endif
|
||||||
|
BIO_printf(bio_err, "-passin arg pass phrase source\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static EVP_PKEY_CTX *init_ctx(int *pkeysize,
|
||||||
|
char *keyfile, int keyform, int key_type,
|
||||||
|
char *passargin, int pkey_op, ENGINE *e)
|
||||||
|
{
|
||||||
|
EVP_PKEY *pkey = NULL;
|
||||||
|
EVP_PKEY_CTX *ctx = NULL;
|
||||||
|
char *passin = NULL;
|
||||||
|
int rv = -1;
|
||||||
|
X509 *x;
|
||||||
|
if(((pkey_op == EVP_PKEY_OP_SIGN) || (pkey_op == EVP_PKEY_OP_DECRYPT)
|
||||||
|
|| (pkey_op == EVP_PKEY_OP_DERIVE))
|
||||||
|
&& (key_type != KEY_PRIVKEY))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "A private key is needed for this operation\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if(!app_passwd(bio_err, passargin, NULL, &passin, NULL))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Error getting password\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
switch(key_type)
|
||||||
|
{
|
||||||
|
case KEY_PRIVKEY:
|
||||||
|
pkey = load_key(bio_err, keyfile, keyform, 0,
|
||||||
|
passin, e, "Private Key");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KEY_PUBKEY:
|
||||||
|
pkey = load_pubkey(bio_err, keyfile, keyform, 0,
|
||||||
|
NULL, e, "Public Key");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KEY_CERT:
|
||||||
|
x = load_cert(bio_err, keyfile, keyform,
|
||||||
|
NULL, e, "Certificate");
|
||||||
|
if(x)
|
||||||
|
{
|
||||||
|
pkey = X509_get_pubkey(x);
|
||||||
|
X509_free(x);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
*pkeysize = EVP_PKEY_size(pkey);
|
||||||
|
|
||||||
|
if (!pkey)
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
ctx = EVP_PKEY_CTX_new(pkey, e);
|
||||||
|
|
||||||
|
EVP_PKEY_free(pkey);
|
||||||
|
|
||||||
|
if (!ctx)
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
switch(pkey_op)
|
||||||
|
{
|
||||||
|
case EVP_PKEY_OP_SIGN:
|
||||||
|
rv = EVP_PKEY_sign_init(ctx);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVP_PKEY_OP_VERIFY:
|
||||||
|
rv = EVP_PKEY_verify_init(ctx);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVP_PKEY_OP_VERIFYRECOVER:
|
||||||
|
rv = EVP_PKEY_verify_recover_init(ctx);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVP_PKEY_OP_ENCRYPT:
|
||||||
|
rv = EVP_PKEY_encrypt_init(ctx);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVP_PKEY_OP_DECRYPT:
|
||||||
|
rv = EVP_PKEY_decrypt_init(ctx);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVP_PKEY_OP_DERIVE:
|
||||||
|
rv = EVP_PKEY_derive_init(ctx);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rv <= 0)
|
||||||
|
{
|
||||||
|
EVP_PKEY_CTX_free(ctx);
|
||||||
|
ctx = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
end:
|
||||||
|
|
||||||
|
if (passin)
|
||||||
|
OPENSSL_free(passin);
|
||||||
|
|
||||||
|
return ctx;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
|
||||||
|
const char *file)
|
||||||
|
{
|
||||||
|
EVP_PKEY *peer = NULL;
|
||||||
|
int ret;
|
||||||
|
if (!ctx)
|
||||||
|
{
|
||||||
|
BIO_puts(err, "-peerkey command before -inkey\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
peer = load_pubkey(bio_err, file, peerform, 0, NULL, NULL, "Peer Key");
|
||||||
|
|
||||||
|
if (!peer)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Error reading peer key %s\n", file);
|
||||||
|
ERR_print_errors(err);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = EVP_PKEY_derive_set_peer(ctx, peer);
|
||||||
|
|
||||||
|
EVP_PKEY_free(peer);
|
||||||
|
if (ret <= 0)
|
||||||
|
ERR_print_errors(err);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
|
||||||
|
unsigned char *out, size_t *poutlen,
|
||||||
|
unsigned char *in, size_t inlen)
|
||||||
|
{
|
||||||
|
int rv = 0;
|
||||||
|
switch(pkey_op)
|
||||||
|
{
|
||||||
|
case EVP_PKEY_OP_VERIFYRECOVER:
|
||||||
|
rv = EVP_PKEY_verify_recover(ctx, out, poutlen, in, inlen);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVP_PKEY_OP_SIGN:
|
||||||
|
rv = EVP_PKEY_sign(ctx, out, poutlen, in, inlen);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVP_PKEY_OP_ENCRYPT:
|
||||||
|
rv = EVP_PKEY_encrypt(ctx, out, poutlen, in, inlen);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVP_PKEY_OP_DECRYPT:
|
||||||
|
rv = EVP_PKEY_decrypt(ctx, out, poutlen, in, inlen);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVP_PKEY_OP_DERIVE:
|
||||||
|
rv = EVP_PKEY_derive(ctx, out, poutlen);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 2003 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 2004 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
|
||||||
@@ -47,110 +47,114 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <openssl/sha.h>
|
|
||||||
#include <openssl/hmac.h>
|
|
||||||
#include <openssl/opensslconf.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
int FIPS_selftest_fail;
|
#include "apps.h"
|
||||||
|
#include <openssl/bn.h>
|
||||||
|
|
||||||
#ifdef OPENSSL_FIPS
|
|
||||||
|
|
||||||
static void hmac_init(SHA_CTX *md_ctx,SHA_CTX *o_ctx,
|
#undef PROG
|
||||||
const char *key)
|
#define PROG prime_main
|
||||||
|
|
||||||
|
int MAIN(int, char **);
|
||||||
|
|
||||||
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int len=strlen(key);
|
int hex=0;
|
||||||
int i;
|
int checks=20;
|
||||||
unsigned char keymd[HMAC_MAX_MD_CBLOCK];
|
int generate=0;
|
||||||
unsigned char pad[HMAC_MAX_MD_CBLOCK];
|
int bits=0;
|
||||||
|
int safe=0;
|
||||||
|
BIGNUM *bn=NULL;
|
||||||
|
BIO *bio_out;
|
||||||
|
|
||||||
if (len > SHA_CBLOCK)
|
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);
|
||||||
|
|
||||||
|
--argc;
|
||||||
|
++argv;
|
||||||
|
while (argc >= 1 && **argv == '-')
|
||||||
{
|
{
|
||||||
SHA1_Init(md_ctx);
|
if(!strcmp(*argv,"-hex"))
|
||||||
SHA1_Update(md_ctx,key,len);
|
hex=1;
|
||||||
SHA1_Final(keymd,md_ctx);
|
else if(!strcmp(*argv,"-generate"))
|
||||||
len=20;
|
generate=1;
|
||||||
|
else if(!strcmp(*argv,"-bits"))
|
||||||
|
if(--argc < 1)
|
||||||
|
goto bad;
|
||||||
|
else
|
||||||
|
bits=atoi(*++argv);
|
||||||
|
else if(!strcmp(*argv,"-safe"))
|
||||||
|
safe=1;
|
||||||
|
else if(!strcmp(*argv,"-checks"))
|
||||||
|
if(--argc < 1)
|
||||||
|
goto bad;
|
||||||
|
else
|
||||||
|
checks=atoi(*++argv);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"Unknown option '%s'\n",*argv);
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
|
--argc;
|
||||||
|
++argv;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv[0] == NULL && !generate)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"No prime specified\n");
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
if(generate)
|
||||||
|
{
|
||||||
|
char *s;
|
||||||
|
|
||||||
|
if(!bits)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"Specifiy the number of bits.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
bn=BN_new();
|
||||||
|
BN_generate_prime_ex(bn,bits,safe,NULL,NULL,NULL);
|
||||||
|
s=hex ? BN_bn2hex(bn) : BN_bn2dec(bn);
|
||||||
|
BIO_printf(bio_out,"%s\n",s);
|
||||||
|
OPENSSL_free(s);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
memcpy(keymd,key,len);
|
|
||||||
memset(&keymd[len],'\0',HMAC_MAX_MD_CBLOCK-len);
|
|
||||||
|
|
||||||
for(i=0 ; i < HMAC_MAX_MD_CBLOCK ; i++)
|
|
||||||
pad[i]=0x36^keymd[i];
|
|
||||||
SHA1_Init(md_ctx);
|
|
||||||
SHA1_Update(md_ctx,pad,SHA_CBLOCK);
|
|
||||||
|
|
||||||
for(i=0 ; i < HMAC_MAX_MD_CBLOCK ; i++)
|
|
||||||
pad[i]=0x5c^keymd[i];
|
|
||||||
SHA1_Init(o_ctx);
|
|
||||||
SHA1_Update(o_ctx,pad,SHA_CBLOCK);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void hmac_final(unsigned char *md,SHA_CTX *md_ctx,SHA_CTX *o_ctx)
|
|
||||||
{
|
|
||||||
unsigned char buf[20];
|
|
||||||
|
|
||||||
SHA1_Final(buf,md_ctx);
|
|
||||||
SHA1_Update(o_ctx,buf,sizeof buf);
|
|
||||||
SHA1_Final(md,o_ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int main(int argc,char **argv)
|
|
||||||
{
|
|
||||||
#ifdef OPENSSL_FIPS
|
|
||||||
static char key[]="etaonrishdlcupfm";
|
|
||||||
int n;
|
|
||||||
|
|
||||||
if(argc < 2)
|
|
||||||
{
|
{
|
||||||
fprintf(stderr,"%s [<file>]+\n",argv[0]);
|
if(hex)
|
||||||
exit(1);
|
BN_hex2bn(&bn,argv[0]);
|
||||||
|
else
|
||||||
|
BN_dec2bn(&bn,argv[0]);
|
||||||
|
|
||||||
|
BN_print(bio_out,bn);
|
||||||
|
BIO_printf(bio_out," is %sprime\n",
|
||||||
|
BN_is_prime_ex(bn,checks,NULL,NULL) ? "" : "not ");
|
||||||
}
|
}
|
||||||
|
|
||||||
for(n=1 ; n < argc ; ++n)
|
BN_free(bn);
|
||||||
{
|
BIO_free_all(bio_out);
|
||||||
FILE *f=fopen(argv[n],"rb");
|
|
||||||
SHA_CTX md_ctx,o_ctx;
|
|
||||||
unsigned char md[20];
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if(!f)
|
|
||||||
{
|
|
||||||
perror(argv[n]);
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
hmac_init(&md_ctx,&o_ctx,key);
|
|
||||||
for( ; ; )
|
|
||||||
{
|
|
||||||
char buf[1024];
|
|
||||||
int l=fread(buf,1,sizeof buf,f);
|
|
||||||
|
|
||||||
if(l == 0)
|
|
||||||
{
|
|
||||||
if(ferror(f))
|
|
||||||
{
|
|
||||||
perror(argv[n]);
|
|
||||||
exit(3);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
SHA1_Update(&md_ctx,buf,l);
|
|
||||||
}
|
|
||||||
hmac_final(md,&md_ctx,&o_ctx);
|
|
||||||
|
|
||||||
printf("HMAC-SHA1(%s)= ",argv[n]);
|
|
||||||
for(i=0 ; i < 20 ; ++i)
|
|
||||||
printf("%02x",md[i]);
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
bad:
|
||||||
|
BIO_printf(bio_err,"options are\n");
|
||||||
|
BIO_printf(bio_err,"%-14s hex\n","-hex");
|
||||||
|
BIO_printf(bio_err,"%-14s number of checks\n","-checks <n>");
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
76
apps/progs.h
76
apps/progs.h
@@ -17,38 +17,50 @@ 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 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 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 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 pkeyparam_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[]);
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
|
||||||
extern int engine_main(int argc,char *argv[]);
|
extern int engine_main(int argc,char *argv[]);
|
||||||
#endif
|
|
||||||
extern int ocsp_main(int argc,char *argv[]);
|
extern int ocsp_main(int argc,char *argv[]);
|
||||||
|
extern int prime_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_MD_ALG 5
|
||||||
|
#define FUNC_TYPE_CIPHER_ALG 6
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int type;
|
int type;
|
||||||
char *name;
|
const char *name;
|
||||||
int (*func)();
|
int (*func)(int argc,char *argv[]);
|
||||||
} FUNCTION;
|
} FUNCTION;
|
||||||
|
DECLARE_LHASH_OF(FUNCTION);
|
||||||
|
|
||||||
FUNCTION functions[] = {
|
FUNCTION functions[] = {
|
||||||
{FUNC_TYPE_GENERAL,"verify",verify_main},
|
{FUNC_TYPE_GENERAL,"verify",verify_main},
|
||||||
@@ -80,6 +92,12 @@ FUNCTION functions[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DSA
|
#ifndef OPENSSL_NO_DSA
|
||||||
{FUNC_TYPE_GENERAL,"dsaparam",dsaparam_main},
|
{FUNC_TYPE_GENERAL,"dsaparam",dsaparam_main},
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_EC
|
||||||
|
{FUNC_TYPE_GENERAL,"ec",ec_main},
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_EC
|
||||||
|
{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
|
||||||
@@ -88,6 +106,7 @@ FUNCTION functions[] = {
|
|||||||
#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},
|
||||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
|
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
|
||||||
{FUNC_TYPE_GENERAL,"s_server",s_server_main},
|
{FUNC_TYPE_GENERAL,"s_server",s_server_main},
|
||||||
#endif
|
#endif
|
||||||
@@ -102,6 +121,9 @@ FUNCTION functions[] = {
|
|||||||
#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
|
||||||
|
{FUNC_TYPE_GENERAL,"cms",cms_main},
|
||||||
|
#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) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
|
||||||
@@ -112,13 +134,23 @@ FUNCTION functions[] = {
|
|||||||
{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,"pkeyparam",pkeyparam_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
|
||||||
{FUNC_TYPE_GENERAL,"ocsp",ocsp_main},
|
{FUNC_TYPE_GENERAL,"ocsp",ocsp_main},
|
||||||
|
#endif
|
||||||
|
{FUNC_TYPE_GENERAL,"prime",prime_main},
|
||||||
|
{FUNC_TYPE_GENERAL,"ts",ts_main},
|
||||||
|
#ifndef OPENSSL_NO_SRP
|
||||||
|
{FUNC_TYPE_GENERAL,"srp",srp_main},
|
||||||
|
#endif
|
||||||
#ifndef OPENSSL_NO_MD2
|
#ifndef OPENSSL_NO_MD2
|
||||||
{FUNC_TYPE_MD,"md2",dgst_main},
|
{FUNC_TYPE_MD,"md2",dgst_main},
|
||||||
#endif
|
#endif
|
||||||
@@ -157,8 +189,29 @@ FUNCTION functions[] = {
|
|||||||
#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
|
||||||
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
|
{FUNC_TYPE_CIPHER,"camellia-128-cbc",enc_main},
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
|
{FUNC_TYPE_CIPHER,"camellia-128-ecb",enc_main},
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
|
{FUNC_TYPE_CIPHER,"camellia-192-cbc",enc_main},
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
|
{FUNC_TYPE_CIPHER,"camellia-192-ecb",enc_main},
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
|
{FUNC_TYPE_CIPHER,"camellia-256-cbc",enc_main},
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
|
{FUNC_TYPE_CIPHER,"camellia-256-ecb",enc_main},
|
||||||
#endif
|
#endif
|
||||||
{FUNC_TYPE_CIPHER,"base64",enc_main},
|
{FUNC_TYPE_CIPHER,"base64",enc_main},
|
||||||
|
#ifdef ZLIB
|
||||||
|
{FUNC_TYPE_CIPHER,"zlib",enc_main},
|
||||||
|
#endif
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
{FUNC_TYPE_CIPHER,"des",enc_main},
|
{FUNC_TYPE_CIPHER,"des",enc_main},
|
||||||
#endif
|
#endif
|
||||||
@@ -171,6 +224,9 @@ FUNCTION functions[] = {
|
|||||||
#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
|
||||||
|
{FUNC_TYPE_CIPHER,"seed",enc_main},
|
||||||
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC4
|
#ifndef OPENSSL_NO_RC4
|
||||||
{FUNC_TYPE_CIPHER,"rc4",enc_main},
|
{FUNC_TYPE_CIPHER,"rc4",enc_main},
|
||||||
#endif
|
#endif
|
||||||
@@ -237,6 +293,18 @@ FUNCTION functions[] = {
|
|||||||
#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
|
||||||
|
{FUNC_TYPE_CIPHER,"seed-cbc",enc_main},
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_SEED
|
||||||
|
{FUNC_TYPE_CIPHER,"seed-ecb",enc_main},
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_SEED
|
||||||
|
{FUNC_TYPE_CIPHER,"seed-cfb",enc_main},
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_SEED
|
||||||
|
{FUNC_TYPE_CIPHER,"seed-ofb",enc_main},
|
||||||
|
#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
|
||||||
|
|||||||
@@ -13,12 +13,16 @@ print <<'EOF';
|
|||||||
#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_MD_ALG 5
|
||||||
|
#define FUNC_TYPE_CIPHER_ALG 6
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int type;
|
int type;
|
||||||
char *name;
|
const char *name;
|
||||||
int (*func)();
|
int (*func)(int argc,char *argv[]);
|
||||||
} FUNCTION;
|
} FUNCTION;
|
||||||
|
DECLARE_LHASH_OF(FUNCTION);
|
||||||
|
|
||||||
FUNCTION functions[] = {
|
FUNCTION functions[] = {
|
||||||
EOF
|
EOF
|
||||||
@@ -29,14 +33,26 @@ foreach (@ARGV)
|
|||||||
$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) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))\n${str}#endif\n"; }
|
||||||
|
elsif ( ($_ =~ /^speed$/))
|
||||||
|
{ print "#ifndef OPENSSL_NO_SPEED\n${str}#endif\n"; }
|
||||||
|
elsif ( ($_ =~ /^engine$/))
|
||||||
|
{ print "#ifndef OPENSSL_NO_ENGINE\n${str}#endif\n"; }
|
||||||
elsif ( ($_ =~ /^rsa$/) || ($_ =~ /^genrsa$/) || ($_ =~ /^rsautl$/))
|
elsif ( ($_ =~ /^rsa$/) || ($_ =~ /^genrsa$/) || ($_ =~ /^rsautl$/))
|
||||||
{ print "#ifndef OPENSSL_NO_RSA\n${str}#endif\n"; }
|
{ print "#ifndef OPENSSL_NO_RSA\n${str}#endif\n"; }
|
||||||
elsif ( ($_ =~ /^dsa$/) || ($_ =~ /^gendsa$/) || ($_ =~ /^dsaparam$/))
|
elsif ( ($_ =~ /^dsa$/) || ($_ =~ /^gendsa$/) || ($_ =~ /^dsaparam$/))
|
||||||
{ print "#ifndef OPENSSL_NO_DSA\n${str}#endif\n"; }
|
{ print "#ifndef OPENSSL_NO_DSA\n${str}#endif\n"; }
|
||||||
|
elsif ( ($_ =~ /^ec$/) || ($_ =~ /^ecparam$/))
|
||||||
|
{ print "#ifndef OPENSSL_NO_EC\n${str}#endif\n";}
|
||||||
elsif ( ($_ =~ /^dh$/) || ($_ =~ /^gendh$/) || ($_ =~ /^dhparam$/))
|
elsif ( ($_ =~ /^dh$/) || ($_ =~ /^gendh$/) || ($_ =~ /^dhparam$/))
|
||||||
{ print "#ifndef OPENSSL_NO_DH\n${str}#endif\n"; }
|
{ print "#ifndef OPENSSL_NO_DH\n${str}#endif\n"; }
|
||||||
elsif ( ($_ =~ /^pkcs12$/))
|
elsif ( ($_ =~ /^pkcs12$/))
|
||||||
{ print "#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1)\n${str}#endif\n"; }
|
{ print "#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1)\n${str}#endif\n"; }
|
||||||
|
elsif ( ($_ =~ /^cms$/))
|
||||||
|
{ print "#ifndef OPENSSL_NO_CMS\n${str}#endif\n"; }
|
||||||
|
elsif ( ($_ =~ /^ocsp$/))
|
||||||
|
{ 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; }
|
||||||
}
|
}
|
||||||
@@ -51,14 +67,18 @@ foreach (
|
|||||||
"aes-128-cbc", "aes-128-ecb",
|
"aes-128-cbc", "aes-128-ecb",
|
||||||
"aes-192-cbc", "aes-192-ecb",
|
"aes-192-cbc", "aes-192-ecb",
|
||||||
"aes-256-cbc", "aes-256-ecb",
|
"aes-256-cbc", "aes-256-ecb",
|
||||||
"base64",
|
"camellia-128-cbc", "camellia-128-ecb",
|
||||||
"des", "des3", "desx", "idea", "rc4", "rc4-40",
|
"camellia-192-cbc", "camellia-192-ecb",
|
||||||
|
"camellia-256-cbc", "camellia-256-ecb",
|
||||||
|
"base64", "zlib",
|
||||||
|
"des", "des3", "desx", "idea", "seed", "rc4", "rc4-40",
|
||||||
"rc2", "bf", "cast", "rc5",
|
"rc2", "bf", "cast", "rc5",
|
||||||
"des-ecb", "des-ede", "des-ede3",
|
"des-ecb", "des-ede", "des-ede3",
|
||||||
"des-cbc", "des-ede-cbc","des-ede3-cbc",
|
"des-cbc", "des-ede-cbc","des-ede3-cbc",
|
||||||
"des-cfb", "des-ede-cfb","des-ede3-cfb",
|
"des-cfb", "des-ede-cfb","des-ede3-cfb",
|
||||||
"des-ofb", "des-ede-ofb","des-ede3-ofb",
|
"des-ofb", "des-ede-ofb","des-ede3-ofb",
|
||||||
"idea-cbc","idea-ecb", "idea-cfb", "idea-ofb",
|
"idea-cbc","idea-ecb", "idea-cfb", "idea-ofb",
|
||||||
|
"seed-cbc","seed-ecb", "seed-cfb", "seed-ofb",
|
||||||
"rc2-cbc", "rc2-ecb", "rc2-cfb","rc2-ofb", "rc2-64-cbc", "rc2-40-cbc",
|
"rc2-cbc", "rc2-ecb", "rc2-cfb","rc2-ofb", "rc2-64-cbc", "rc2-40-cbc",
|
||||||
"bf-cbc", "bf-ecb", "bf-cfb", "bf-ofb",
|
"bf-cbc", "bf-ecb", "bf-cfb", "bf-ofb",
|
||||||
"cast5-cbc","cast5-ecb", "cast5-cfb","cast5-ofb",
|
"cast5-cbc","cast5-ecb", "cast5-cfb","cast5-ofb",
|
||||||
@@ -69,12 +89,15 @@ foreach (
|
|||||||
$t=sprintf("\t{FUNC_TYPE_CIPHER,\"%s\",enc_main},\n",$_);
|
$t=sprintf("\t{FUNC_TYPE_CIPHER,\"%s\",enc_main},\n",$_);
|
||||||
if ($_ =~ /des/) { $t="#ifndef OPENSSL_NO_DES\n${t}#endif\n"; }
|
if ($_ =~ /des/) { $t="#ifndef OPENSSL_NO_DES\n${t}#endif\n"; }
|
||||||
elsif ($_ =~ /aes/) { $t="#ifndef OPENSSL_NO_AES\n${t}#endif\n"; }
|
elsif ($_ =~ /aes/) { $t="#ifndef OPENSSL_NO_AES\n${t}#endif\n"; }
|
||||||
|
elsif ($_ =~ /camellia/) { $t="#ifndef OPENSSL_NO_CAMELLIA\n${t}#endif\n"; }
|
||||||
elsif ($_ =~ /idea/) { $t="#ifndef OPENSSL_NO_IDEA\n${t}#endif\n"; }
|
elsif ($_ =~ /idea/) { $t="#ifndef OPENSSL_NO_IDEA\n${t}#endif\n"; }
|
||||||
|
elsif ($_ =~ /seed/) { $t="#ifndef OPENSSL_NO_SEED\n${t}#endif\n"; }
|
||||||
elsif ($_ =~ /rc4/) { $t="#ifndef OPENSSL_NO_RC4\n${t}#endif\n"; }
|
elsif ($_ =~ /rc4/) { $t="#ifndef OPENSSL_NO_RC4\n${t}#endif\n"; }
|
||||||
elsif ($_ =~ /rc2/) { $t="#ifndef OPENSSL_NO_RC2\n${t}#endif\n"; }
|
elsif ($_ =~ /rc2/) { $t="#ifndef OPENSSL_NO_RC2\n${t}#endif\n"; }
|
||||||
elsif ($_ =~ /bf/) { $t="#ifndef OPENSSL_NO_BF\n${t}#endif\n"; }
|
elsif ($_ =~ /bf/) { $t="#ifndef OPENSSL_NO_BF\n${t}#endif\n"; }
|
||||||
elsif ($_ =~ /cast/) { $t="#ifndef OPENSSL_NO_CAST\n${t}#endif\n"; }
|
elsif ($_ =~ /cast/) { $t="#ifndef OPENSSL_NO_CAST\n${t}#endif\n"; }
|
||||||
elsif ($_ =~ /rc5/) { $t="#ifndef OPENSSL_NO_RC5\n${t}#endif\n"; }
|
elsif ($_ =~ /rc5/) { $t="#ifndef OPENSSL_NO_RC5\n${t}#endif\n"; }
|
||||||
|
elsif ($_ =~ /zlib/) { $t="#ifdef ZLIB\n${t}#endif\n"; }
|
||||||
print $t;
|
print $t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
36
apps/rand.c
36
apps/rand.c
@@ -68,7 +68,8 @@
|
|||||||
|
|
||||||
/* -out file - write to file
|
/* -out file - write to file
|
||||||
* -rand file:file - PRNG seed files
|
* -rand file:file - PRNG seed files
|
||||||
* -base64 - encode output
|
* -base64 - base64 encode output
|
||||||
|
* -hex - hex encode output
|
||||||
* num - write 'num' bytes
|
* num - write 'num' bytes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -76,14 +77,12 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
|
||||||
ENGINE *e = NULL;
|
|
||||||
#endif
|
|
||||||
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;
|
||||||
BIO *out = NULL;
|
BIO *out = NULL;
|
||||||
int num = -1;
|
int num = -1;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
@@ -133,6 +132,13 @@ int MAIN(int argc, char **argv)
|
|||||||
else
|
else
|
||||||
badopt = 1;
|
badopt = 1;
|
||||||
}
|
}
|
||||||
|
else if (strcmp(argv[i], "-hex") == 0)
|
||||||
|
{
|
||||||
|
if (!hex)
|
||||||
|
hex = 1;
|
||||||
|
else
|
||||||
|
badopt = 1;
|
||||||
|
}
|
||||||
else if (isdigit((unsigned char)argv[i][0]))
|
else if (isdigit((unsigned char)argv[i][0]))
|
||||||
{
|
{
|
||||||
if (num < 0)
|
if (num < 0)
|
||||||
@@ -148,6 +154,9 @@ int MAIN(int argc, char **argv)
|
|||||||
badopt = 1;
|
badopt = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hex && base64)
|
||||||
|
badopt = 1;
|
||||||
|
|
||||||
if (num < 0)
|
if (num < 0)
|
||||||
badopt = 1;
|
badopt = 1;
|
||||||
|
|
||||||
@@ -160,12 +169,13 @@ int MAIN(int argc, char **argv)
|
|||||||
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", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
||||||
BIO_printf(bio_err, "-base64 - encode output\n");
|
BIO_printf(bio_err, "-base64 - base64 encode output\n");
|
||||||
|
BIO_printf(bio_err, "-hex - hex encode output\n");
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
e = 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));
|
||||||
@@ -205,15 +215,23 @@ int MAIN(int argc, char **argv)
|
|||||||
int chunk;
|
int chunk;
|
||||||
|
|
||||||
chunk = num;
|
chunk = num;
|
||||||
if (chunk > sizeof buf)
|
if (chunk > (int)sizeof(buf))
|
||||||
chunk = sizeof buf;
|
chunk = sizeof buf;
|
||||||
r = RAND_bytes(buf, chunk);
|
r = RAND_bytes(buf, chunk);
|
||||||
if (r <= 0)
|
if (r <= 0)
|
||||||
goto err;
|
goto err;
|
||||||
BIO_write(out, buf, chunk);
|
if (!hex)
|
||||||
|
BIO_write(out, buf, chunk);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i = 0; i < chunk; i++)
|
||||||
|
BIO_printf(out, "%02x", buf[i]);
|
||||||
|
}
|
||||||
num -= chunk;
|
num -= chunk;
|
||||||
}
|
}
|
||||||
BIO_flush(out);
|
if (hex)
|
||||||
|
BIO_puts(out, "\n");
|
||||||
|
(void)BIO_flush(out);
|
||||||
|
|
||||||
app_RAND_write_file(NULL, bio_err);
|
app_RAND_write_file(NULL, bio_err);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|||||||
614
apps/req.c
614
apps/req.c
@@ -56,6 +56,12 @@
|
|||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
|
||||||
|
* deprecated functions for openssl-internal code */
|
||||||
|
#ifdef OPENSSL_NO_DEPRECATED
|
||||||
|
#undef OPENSSL_NO_DEPRECATED
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
@@ -73,7 +79,13 @@
|
|||||||
#include <openssl/x509v3.h>
|
#include <openssl/x509v3.h>
|
||||||
#include <openssl/objects.h>
|
#include <openssl/objects.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
#include "../crypto/cryptlib.h"
|
#include <openssl/bn.h>
|
||||||
|
#ifndef OPENSSL_NO_RSA
|
||||||
|
#include <openssl/rsa.h>
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_DSA
|
||||||
|
#include <openssl/dsa.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define SECTION "req"
|
#define SECTION "req"
|
||||||
|
|
||||||
@@ -113,9 +125,10 @@
|
|||||||
* require. This format is wrong
|
* require. This format is wrong
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int make_REQ(X509_REQ *req,EVP_PKEY *pkey,char *dn,int attribs,
|
static int make_REQ(X509_REQ *req,EVP_PKEY *pkey,char *dn,int mutlirdn,
|
||||||
unsigned long chtype);
|
int attribs,unsigned long chtype);
|
||||||
static int build_subject(X509_REQ *req, char *subj, unsigned long chtype);
|
static int build_subject(X509_REQ *req, char *subj, unsigned long chtype,
|
||||||
|
int multirdn);
|
||||||
static int prompt_info(X509_REQ *req,
|
static int prompt_info(X509_REQ *req,
|
||||||
STACK_OF(CONF_VALUE) *dn_sk, char *dn_sect,
|
STACK_OF(CONF_VALUE) *dn_sk, char *dn_sect,
|
||||||
STACK_OF(CONF_VALUE) *attr_sk, char *attr_sect, int attribs,
|
STACK_OF(CONF_VALUE) *attr_sk, char *attr_sect, int attribs,
|
||||||
@@ -123,40 +136,38 @@ static int prompt_info(X509_REQ *req,
|
|||||||
static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *sk,
|
static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *sk,
|
||||||
STACK_OF(CONF_VALUE) *attr, int attribs,
|
STACK_OF(CONF_VALUE) *attr, int attribs,
|
||||||
unsigned long chtype);
|
unsigned long chtype);
|
||||||
static int add_attribute_object(X509_REQ *req, char *text,
|
static int add_attribute_object(X509_REQ *req, char *text, const char *def,
|
||||||
char *def, char *value, int nid, int n_min,
|
char *value, int nid, int n_min,
|
||||||
int n_max, unsigned long chtype);
|
int n_max, unsigned long chtype);
|
||||||
static int add_DN_object(X509_NAME *n, char *text, char *def, char *value,
|
static int add_DN_object(X509_NAME *n, char *text, const char *def, char *value,
|
||||||
int nid,int n_min,int n_max, unsigned long chtype);
|
int nid,int n_min,int n_max, unsigned long chtype, int mval);
|
||||||
#ifndef OPENSSL_NO_RSA
|
static int genpkey_cb(EVP_PKEY_CTX *ctx);
|
||||||
static void MS_CALLBACK req_cb(int p,int n,void *arg);
|
|
||||||
#endif
|
|
||||||
static int req_check_len(int len,int n_min,int n_max);
|
static int req_check_len(int len,int n_min,int n_max);
|
||||||
static int check_end(char *str, char *end);
|
static int check_end(const char *str, const char *end);
|
||||||
|
static EVP_PKEY_CTX *set_keygen_ctx(BIO *err, const char *gstr, int *pkey_type,
|
||||||
|
long *pkeylen, char **palgnam,
|
||||||
|
ENGINE *keygen_engine);
|
||||||
#ifndef MONOLITH
|
#ifndef MONOLITH
|
||||||
static char *default_config_file=NULL;
|
static char *default_config_file=NULL;
|
||||||
#endif
|
#endif
|
||||||
static CONF *req_conf=NULL;
|
static CONF *req_conf=NULL;
|
||||||
static int batch=0;
|
static int batch=0;
|
||||||
|
|
||||||
#define TYPE_RSA 1
|
|
||||||
#define TYPE_DSA 2
|
|
||||||
#define TYPE_DH 3
|
|
||||||
|
|
||||||
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, *gen_eng = NULL;
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
DSA *dsa_params=NULL;
|
|
||||||
#endif
|
|
||||||
unsigned long nmflag = 0, reqflag = 0;
|
unsigned long nmflag = 0, reqflag = 0;
|
||||||
int ex=1,x509=0,days=30;
|
int ex=1,x509=0,days=30;
|
||||||
X509 *x509ss=NULL;
|
X509 *x509ss=NULL;
|
||||||
X509_REQ *req=NULL;
|
X509_REQ *req=NULL;
|
||||||
|
EVP_PKEY_CTX *genctx = NULL;
|
||||||
|
const char *keyalg = NULL;
|
||||||
|
char *keyalgstr = NULL;
|
||||||
|
STACK_OF(OPENSSL_STRING) *pkeyopts = NULL, *sigopts = NULL;
|
||||||
EVP_PKEY *pkey=NULL;
|
EVP_PKEY *pkey=NULL;
|
||||||
int i=0,badops=0,newreq=0,verbose=0,pkey_type=TYPE_RSA;
|
int i=0,badops=0,newreq=0,verbose=0,pkey_type=-1;
|
||||||
long newkey = -1;
|
long newkey = -1;
|
||||||
BIO *in=NULL,*out=NULL;
|
BIO *in=NULL,*out=NULL;
|
||||||
int informat,outformat,verify=0,noout=0,text=0,keyform=FORMAT_PEM;
|
int informat,outformat,verify=0,noout=0,text=0,keyform=FORMAT_PEM;
|
||||||
@@ -175,7 +186,8 @@ int MAIN(int argc, char **argv)
|
|||||||
char *passin = NULL, *passout = NULL;
|
char *passin = NULL, *passout = NULL;
|
||||||
char *p;
|
char *p;
|
||||||
char *subj = NULL;
|
char *subj = NULL;
|
||||||
const EVP_MD *md_alg=NULL,*digest=EVP_md5();
|
int multirdn = 0;
|
||||||
|
const EVP_MD *md_alg=NULL,*digest=NULL;
|
||||||
unsigned long chtype = MBSTRING_ASC;
|
unsigned long chtype = MBSTRING_ASC;
|
||||||
#ifndef MONOLITH
|
#ifndef MONOLITH
|
||||||
char *to_free;
|
char *to_free;
|
||||||
@@ -218,6 +230,16 @@ int MAIN(int argc, char **argv)
|
|||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
engine= *(++argv);
|
engine= *(++argv);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*argv,"-keygen_engine") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1) goto bad;
|
||||||
|
gen_eng = ENGINE_by_id(*(++argv));
|
||||||
|
if (gen_eng == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Can't find keygen engine %s\n", *argv);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (strcmp(*argv,"-key") == 0)
|
else if (strcmp(*argv,"-key") == 0)
|
||||||
{
|
{
|
||||||
@@ -274,71 +296,29 @@ int MAIN(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else if (strcmp(*argv,"-newkey") == 0)
|
else if (strcmp(*argv,"-newkey") == 0)
|
||||||
{
|
{
|
||||||
int is_numeric;
|
if (--argc < 1)
|
||||||
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
keyalg = *(++argv);
|
||||||
p= *(++argv);
|
|
||||||
is_numeric = p[0] >= '0' && p[0] <= '9';
|
|
||||||
if (strncmp("rsa:",p,4) == 0 || is_numeric)
|
|
||||||
{
|
|
||||||
pkey_type=TYPE_RSA;
|
|
||||||
if(!is_numeric)
|
|
||||||
p+=4;
|
|
||||||
newkey= atoi(p);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
if (strncmp("dsa:",p,4) == 0)
|
|
||||||
{
|
|
||||||
X509 *xtmp=NULL;
|
|
||||||
EVP_PKEY *dtmp;
|
|
||||||
|
|
||||||
pkey_type=TYPE_DSA;
|
|
||||||
p+=4;
|
|
||||||
if ((in=BIO_new_file(p,"r")) == NULL)
|
|
||||||
{
|
|
||||||
perror(p);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
if ((dsa_params=PEM_read_bio_DSAparams(in,NULL,NULL,NULL)) == NULL)
|
|
||||||
{
|
|
||||||
ERR_clear_error();
|
|
||||||
(void)BIO_reset(in);
|
|
||||||
if ((xtmp=PEM_read_bio_X509(in,NULL,NULL,NULL)) == NULL)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"unable to load DSA parameters from file\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((dtmp=X509_get_pubkey(xtmp)) == NULL) goto end;
|
|
||||||
if (dtmp->type == EVP_PKEY_DSA)
|
|
||||||
dsa_params=DSAparams_dup(dtmp->pkey.dsa);
|
|
||||||
EVP_PKEY_free(dtmp);
|
|
||||||
X509_free(xtmp);
|
|
||||||
if (dsa_params == NULL)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"Certificate does not contain DSA parameters\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
BIO_free(in);
|
|
||||||
newkey=BN_num_bits(dsa_params->p);
|
|
||||||
in=NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
if (strncmp("dh:",p,4) == 0)
|
|
||||||
{
|
|
||||||
pkey_type=TYPE_DH;
|
|
||||||
p+=3;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
pkey_type=TYPE_RSA;
|
|
||||||
|
|
||||||
newreq=1;
|
newreq=1;
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*argv,"-pkeyopt") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1)
|
||||||
|
goto bad;
|
||||||
|
if (!pkeyopts)
|
||||||
|
pkeyopts = sk_OPENSSL_STRING_new_null();
|
||||||
|
if (!pkeyopts || !sk_OPENSSL_STRING_push(pkeyopts, *(++argv)))
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
|
else if (strcmp(*argv,"-sigopt") == 0)
|
||||||
|
{
|
||||||
|
if (--argc < 1)
|
||||||
|
goto bad;
|
||||||
|
if (!sigopts)
|
||||||
|
sigopts = sk_OPENSSL_STRING_new_null();
|
||||||
|
if (!sigopts || !sk_OPENSSL_STRING_push(sigopts, *(++argv)))
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
else if (strcmp(*argv,"-batch") == 0)
|
else if (strcmp(*argv,"-batch") == 0)
|
||||||
batch=1;
|
batch=1;
|
||||||
else if (strcmp(*argv,"-newhdr") == 0)
|
else if (strcmp(*argv,"-newhdr") == 0)
|
||||||
@@ -380,6 +360,8 @@ int MAIN(int argc, char **argv)
|
|||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
subj= *(++argv);
|
subj= *(++argv);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(*argv,"-multivalue-rdn") == 0)
|
||||||
|
multirdn=1;
|
||||||
else if (strcmp(*argv,"-days") == 0)
|
else if (strcmp(*argv,"-days") == 0)
|
||||||
{
|
{
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
@@ -392,11 +374,6 @@ int MAIN(int argc, char **argv)
|
|||||||
serial = s2i_ASN1_INTEGER(NULL, *(++argv));
|
serial = s2i_ASN1_INTEGER(NULL, *(++argv));
|
||||||
if (!serial) goto bad;
|
if (!serial) goto bad;
|
||||||
}
|
}
|
||||||
else if ((md_alg=EVP_get_digestbyname(&((*argv)[1]))) != NULL)
|
|
||||||
{
|
|
||||||
/* ok */
|
|
||||||
digest=md_alg;
|
|
||||||
}
|
|
||||||
else if (strcmp(*argv,"-extensions") == 0)
|
else if (strcmp(*argv,"-extensions") == 0)
|
||||||
{
|
{
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
@@ -407,6 +384,11 @@ int MAIN(int argc, char **argv)
|
|||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
req_exts = *(++argv);
|
req_exts = *(++argv);
|
||||||
}
|
}
|
||||||
|
else if ((md_alg=EVP_get_digestbyname(&((*argv)[1]))) != NULL)
|
||||||
|
{
|
||||||
|
/* ok */
|
||||||
|
digest=md_alg;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
||||||
@@ -445,9 +427,13 @@ bad:
|
|||||||
BIO_printf(bio_err," the random number generator\n");
|
BIO_printf(bio_err," the random number generator\n");
|
||||||
BIO_printf(bio_err," -newkey rsa:bits generate a new RSA key of 'bits' in size\n");
|
BIO_printf(bio_err," -newkey rsa:bits generate a new RSA key of 'bits' in size\n");
|
||||||
BIO_printf(bio_err," -newkey dsa:file generate a new DSA key, parameters taken from CA in 'file'\n");
|
BIO_printf(bio_err," -newkey dsa:file generate a new DSA key, parameters taken from CA in 'file'\n");
|
||||||
|
#ifndef OPENSSL_NO_ECDSA
|
||||||
|
BIO_printf(bio_err," -newkey ec:file generate a new EC key, parameters taken from CA in 'file'\n");
|
||||||
|
#endif
|
||||||
BIO_printf(bio_err," -[digest] Digest to sign with (md5, sha1, md2, mdc2, md4)\n");
|
BIO_printf(bio_err," -[digest] Digest to sign with (md5, sha1, md2, mdc2, md4)\n");
|
||||||
BIO_printf(bio_err," -config file request template file.\n");
|
BIO_printf(bio_err," -config file request template file.\n");
|
||||||
BIO_printf(bio_err," -subj arg set or modify request subject\n");
|
BIO_printf(bio_err," -subj arg set or modify request subject\n");
|
||||||
|
BIO_printf(bio_err," -multivalue-rdn enable support for multivalued RDNs\n");
|
||||||
BIO_printf(bio_err," -new new request.\n");
|
BIO_printf(bio_err," -new new request.\n");
|
||||||
BIO_printf(bio_err," -batch do not ask anything during request generation\n");
|
BIO_printf(bio_err," -batch do not ask anything during request generation\n");
|
||||||
BIO_printf(bio_err," -x509 output a x509 structure instead of a cert. req.\n");
|
BIO_printf(bio_err," -x509 output a x509 structure instead of a cert. req.\n");
|
||||||
@@ -499,13 +485,16 @@ bad:
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
req_conf=config;
|
req_conf=config;
|
||||||
if( verbose )
|
|
||||||
BIO_printf(bio_err,"Using configuration from %s\n",
|
|
||||||
default_config_file);
|
|
||||||
if (req_conf == NULL)
|
if (req_conf == NULL)
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"Unable to load config info\n");
|
BIO_printf(bio_err,"Unable to load config info from %s\n", default_config_file);
|
||||||
|
if (newreq)
|
||||||
|
goto end;
|
||||||
}
|
}
|
||||||
|
else if( verbose )
|
||||||
|
BIO_printf(bio_err,"Using configuration from %s\n",
|
||||||
|
default_config_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req_conf != NULL)
|
if (req_conf != NULL)
|
||||||
@@ -637,7 +626,7 @@ bad:
|
|||||||
message */
|
message */
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
if (EVP_PKEY_type(pkey->type) == EVP_PKEY_DSA)
|
else
|
||||||
{
|
{
|
||||||
char *randfile = NCONF_get_string(req_conf,SECTION,"RANDFILE");
|
char *randfile = NCONF_get_string(req_conf,SECTION,"RANDFILE");
|
||||||
if (randfile == NULL)
|
if (randfile == NULL)
|
||||||
@@ -655,46 +644,69 @@ bad:
|
|||||||
if (inrand)
|
if (inrand)
|
||||||
app_RAND_load_files(inrand);
|
app_RAND_load_files(inrand);
|
||||||
|
|
||||||
|
if (keyalg)
|
||||||
|
{
|
||||||
|
genctx = set_keygen_ctx(bio_err, keyalg, &pkey_type, &newkey,
|
||||||
|
&keyalgstr, gen_eng);
|
||||||
|
if (!genctx)
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
if (newkey <= 0)
|
if (newkey <= 0)
|
||||||
{
|
{
|
||||||
if (!NCONF_get_number(req_conf,SECTION,BITS, &newkey))
|
if (!NCONF_get_number(req_conf,SECTION,BITS, &newkey))
|
||||||
newkey=DEFAULT_KEY_LENGTH;
|
newkey=DEFAULT_KEY_LENGTH;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newkey < MIN_KEY_LENGTH)
|
if (newkey < MIN_KEY_LENGTH && (pkey_type == EVP_PKEY_RSA || pkey_type == EVP_PKEY_DSA))
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"private key length is too short,\n");
|
BIO_printf(bio_err,"private key length is too short,\n");
|
||||||
BIO_printf(bio_err,"it needs to be at least %d bits, not %d\n",MIN_KEY_LENGTH,newkey);
|
BIO_printf(bio_err,"it needs to be at least %d bits, not %ld\n",MIN_KEY_LENGTH,newkey);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
BIO_printf(bio_err,"Generating a %d bit %s private key\n",
|
|
||||||
newkey,(pkey_type == TYPE_RSA)?"RSA":"DSA");
|
|
||||||
|
|
||||||
if ((pkey=EVP_PKEY_new()) == NULL) goto end;
|
if (!genctx)
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
if (pkey_type == TYPE_RSA)
|
|
||||||
{
|
{
|
||||||
if (!EVP_PKEY_assign_RSA(pkey,
|
genctx = set_keygen_ctx(bio_err, NULL, &pkey_type, &newkey,
|
||||||
RSA_generate_key(newkey,0x10001,
|
&keyalgstr, gen_eng);
|
||||||
req_cb,bio_err)))
|
if (!genctx)
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
#endif
|
if (pkeyopts)
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
if (pkey_type == TYPE_DSA)
|
|
||||||
{
|
{
|
||||||
if (!DSA_generate_key(dsa_params)) goto end;
|
char *genopt;
|
||||||
if (!EVP_PKEY_assign_DSA(pkey,dsa_params)) goto end;
|
for (i = 0; i < sk_OPENSSL_STRING_num(pkeyopts); i++)
|
||||||
dsa_params=NULL;
|
{
|
||||||
|
genopt = sk_OPENSSL_STRING_value(pkeyopts, i);
|
||||||
|
if (pkey_ctrl_string(genctx, genopt) <= 0)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
"parameter error \"%s\"\n",
|
||||||
|
genopt);
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
BIO_printf(bio_err,"Generating a %ld bit %s private key\n",
|
||||||
|
newkey, keyalgstr);
|
||||||
|
|
||||||
|
EVP_PKEY_CTX_set_cb(genctx, genpkey_cb);
|
||||||
|
EVP_PKEY_CTX_set_app_data(genctx, bio_err);
|
||||||
|
|
||||||
|
if (EVP_PKEY_keygen(genctx, &pkey) <= 0)
|
||||||
|
{
|
||||||
|
BIO_puts(bio_err, "Error Generating Key\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
EVP_PKEY_CTX_free(genctx);
|
||||||
|
genctx = NULL;
|
||||||
|
|
||||||
app_RAND_write_file(randfile, bio_err);
|
app_RAND_write_file(randfile, bio_err);
|
||||||
|
|
||||||
if (pkey == NULL) goto end;
|
|
||||||
|
|
||||||
if (keyout == NULL)
|
if (keyout == NULL)
|
||||||
{
|
{
|
||||||
keyout=NCONF_get_string(req_conf,SECTION,KEYFILE);
|
keyout=NCONF_get_string(req_conf,SECTION,KEYFILE);
|
||||||
@@ -792,10 +804,7 @@ loop:
|
|||||||
BIO_printf(bio_err,"you need to specify a private key\n");
|
BIO_printf(bio_err,"you need to specify a private key\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
if (pkey->type == EVP_PKEY_DSA)
|
|
||||||
digest=EVP_dss1();
|
|
||||||
#endif
|
|
||||||
if (req == NULL)
|
if (req == NULL)
|
||||||
{
|
{
|
||||||
req=X509_REQ_new();
|
req=X509_REQ_new();
|
||||||
@@ -804,7 +813,7 @@ loop:
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
i=make_REQ(req,pkey,subj,!x509, chtype);
|
i=make_REQ(req,pkey,subj,multirdn,!x509, chtype);
|
||||||
subj=NULL; /* done processing '-subj' option */
|
subj=NULL; /* done processing '-subj' option */
|
||||||
if ((kludge > 0) && !sk_X509_ATTRIBUTE_num(req->req_info->attributes))
|
if ((kludge > 0) && !sk_X509_ATTRIBUTE_num(req->req_info->attributes))
|
||||||
{
|
{
|
||||||
@@ -838,7 +847,7 @@ loop:
|
|||||||
|
|
||||||
if (!X509_set_issuer_name(x509ss, X509_REQ_get_subject_name(req))) goto end;
|
if (!X509_set_issuer_name(x509ss, X509_REQ_get_subject_name(req))) goto end;
|
||||||
if (!X509_gmtime_adj(X509_get_notBefore(x509ss),0)) goto end;
|
if (!X509_gmtime_adj(X509_get_notBefore(x509ss),0)) goto end;
|
||||||
if (!X509_gmtime_adj(X509_get_notAfter(x509ss), (long)60*60*24*days)) goto end;
|
if (!X509_time_adj_ex(X509_get_notAfter(x509ss), days, 0, NULL)) goto end;
|
||||||
if (!X509_set_subject_name(x509ss, X509_REQ_get_subject_name(req))) goto end;
|
if (!X509_set_subject_name(x509ss, X509_REQ_get_subject_name(req))) goto end;
|
||||||
tmppkey = X509_REQ_get_pubkey(req);
|
tmppkey = X509_REQ_get_pubkey(req);
|
||||||
if (!tmppkey || !X509_set_pubkey(x509ss,tmppkey)) goto end;
|
if (!tmppkey || !X509_set_pubkey(x509ss,tmppkey)) goto end;
|
||||||
@@ -859,8 +868,12 @@ loop:
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(i=X509_sign(x509ss,pkey,digest)))
|
i=do_X509_sign(bio_err, x509ss, pkey, digest, sigopts);
|
||||||
|
if (!i)
|
||||||
|
{
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -880,8 +893,12 @@ loop:
|
|||||||
req_exts);
|
req_exts);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
if (!(i=X509_REQ_sign(req,pkey,digest)))
|
i=do_X509_REQ_sign(bio_err, req, pkey, digest, sigopts);
|
||||||
|
if (!i)
|
||||||
|
{
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -899,7 +916,7 @@ loop:
|
|||||||
print_name(bio_err, "old subject=", X509_REQ_get_subject_name(req), nmflag);
|
print_name(bio_err, "old subject=", X509_REQ_get_subject_name(req), nmflag);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (build_subject(req, subj, chtype) == 0)
|
if (build_subject(req, subj, chtype, multirdn) == 0)
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err, "ERROR: cannot modify subject\n");
|
BIO_printf(bio_err, "ERROR: cannot modify subject\n");
|
||||||
ex=1;
|
ex=1;
|
||||||
@@ -1018,7 +1035,7 @@ loop:
|
|||||||
}
|
}
|
||||||
fprintf(stdout,"Modulus=");
|
fprintf(stdout,"Modulus=");
|
||||||
#ifndef OPENSSL_NO_RSA
|
#ifndef OPENSSL_NO_RSA
|
||||||
if (tpubkey->type == EVP_PKEY_RSA)
|
if (EVP_PKEY_base_id(tpubkey) == EVP_PKEY_RSA)
|
||||||
BN_print(out,tpubkey->pkey.rsa->n);
|
BN_print(out,tpubkey->pkey.rsa->n);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
@@ -1074,21 +1091,30 @@ end:
|
|||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
BIO_free_all(out);
|
BIO_free_all(out);
|
||||||
EVP_PKEY_free(pkey);
|
EVP_PKEY_free(pkey);
|
||||||
|
if (genctx)
|
||||||
|
EVP_PKEY_CTX_free(genctx);
|
||||||
|
if (pkeyopts)
|
||||||
|
sk_OPENSSL_STRING_free(pkeyopts);
|
||||||
|
if (sigopts)
|
||||||
|
sk_OPENSSL_STRING_free(sigopts);
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
if (gen_eng)
|
||||||
|
ENGINE_free(gen_eng);
|
||||||
|
#endif
|
||||||
|
if (keyalgstr)
|
||||||
|
OPENSSL_free(keyalgstr);
|
||||||
X509_REQ_free(req);
|
X509_REQ_free(req);
|
||||||
X509_free(x509ss);
|
X509_free(x509ss);
|
||||||
ASN1_INTEGER_free(serial);
|
ASN1_INTEGER_free(serial);
|
||||||
if(passargin && passin) OPENSSL_free(passin);
|
if(passargin && passin) OPENSSL_free(passin);
|
||||||
if(passargout && passout) OPENSSL_free(passout);
|
if(passargout && passout) OPENSSL_free(passout);
|
||||||
OBJ_cleanup();
|
OBJ_cleanup();
|
||||||
#ifndef OPENSSL_NO_DSA
|
|
||||||
if (dsa_params != NULL) DSA_free(dsa_params);
|
|
||||||
#endif
|
|
||||||
apps_shutdown();
|
apps_shutdown();
|
||||||
OPENSSL_EXIT(ex);
|
OPENSSL_EXIT(ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int make_REQ(X509_REQ *req, EVP_PKEY *pkey, char *subj, int attribs,
|
static int make_REQ(X509_REQ *req, EVP_PKEY *pkey, char *subj, int multirdn,
|
||||||
unsigned long chtype)
|
int attribs, unsigned long chtype)
|
||||||
{
|
{
|
||||||
int ret=0,i;
|
int ret=0,i;
|
||||||
char no_prompt = 0;
|
char no_prompt = 0;
|
||||||
@@ -1138,7 +1164,7 @@ static int make_REQ(X509_REQ *req, EVP_PKEY *pkey, char *subj, int attribs,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (subj)
|
if (subj)
|
||||||
i = build_subject(req, subj, chtype);
|
i = build_subject(req, subj, chtype, multirdn);
|
||||||
else
|
else
|
||||||
i = prompt_info(req, dn_sk, dn_sect, attr_sk, attr_sect, attribs, chtype);
|
i = prompt_info(req, dn_sk, dn_sect, attr_sk, attr_sect, attribs, chtype);
|
||||||
}
|
}
|
||||||
@@ -1155,11 +1181,11 @@ err:
|
|||||||
* subject is expected to be in the format /type0=value0/type1=value1/type2=...
|
* subject is expected to be in the format /type0=value0/type1=value1/type2=...
|
||||||
* where characters may be escaped by \
|
* where characters may be escaped by \
|
||||||
*/
|
*/
|
||||||
static int build_subject(X509_REQ *req, char *subject, unsigned long chtype)
|
static int build_subject(X509_REQ *req, char *subject, unsigned long chtype, int multirdn)
|
||||||
{
|
{
|
||||||
X509_NAME *n;
|
X509_NAME *n;
|
||||||
|
|
||||||
if (!(n = do_subject(subject, chtype)))
|
if (!(n = parse_name(subject, chtype, multirdn)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!X509_REQ_set_subject_name(req, n))
|
if (!X509_REQ_set_subject_name(req, n))
|
||||||
@@ -1180,9 +1206,10 @@ static int prompt_info(X509_REQ *req,
|
|||||||
int i;
|
int i;
|
||||||
char *p,*q;
|
char *p,*q;
|
||||||
char buf[100];
|
char buf[100];
|
||||||
int nid;
|
int nid, mval;
|
||||||
long n_min,n_max;
|
long n_min,n_max;
|
||||||
char *type,*def,*value;
|
char *type, *value;
|
||||||
|
const char *def;
|
||||||
CONF_VALUE *v;
|
CONF_VALUE *v;
|
||||||
X509_NAME *subj;
|
X509_NAME *subj;
|
||||||
subj = X509_REQ_get_subject_name(req);
|
subj = X509_REQ_get_subject_name(req);
|
||||||
@@ -1223,10 +1250,17 @@ start: for (;;)
|
|||||||
if(*p) type = p;
|
if(*p) type = p;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (*type == '+')
|
||||||
|
{
|
||||||
|
mval = -1;
|
||||||
|
type++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mval = 0;
|
||||||
/* If OBJ not recognised ignore it */
|
/* If OBJ not recognised ignore it */
|
||||||
if ((nid=OBJ_txt2nid(type)) == NID_undef) goto start;
|
if ((nid=OBJ_txt2nid(type)) == NID_undef) goto start;
|
||||||
if (BIO_snprintf(buf,sizeof buf,"%s_default",v->name)
|
if (BIO_snprintf(buf,sizeof buf,"%s_default",v->name)
|
||||||
>= sizeof buf)
|
>= (int)sizeof(buf))
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"Name '%s' too long\n",v->name);
|
BIO_printf(bio_err,"Name '%s' too long\n",v->name);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1260,7 +1294,7 @@ start: for (;;)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!add_DN_object(subj,v->value,def,value,nid,
|
if (!add_DN_object(subj,v->value,def,value,nid,
|
||||||
n_min,n_max, chtype))
|
n_min,n_max, chtype, mval))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (X509_NAME_entry_count(subj) == 0)
|
if (X509_NAME_entry_count(subj) == 0)
|
||||||
@@ -1291,7 +1325,7 @@ start2: for (;;)
|
|||||||
goto start2;
|
goto start2;
|
||||||
|
|
||||||
if (BIO_snprintf(buf,sizeof buf,"%s_default",type)
|
if (BIO_snprintf(buf,sizeof buf,"%s_default",type)
|
||||||
>= sizeof buf)
|
>= (int)sizeof(buf))
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"Name '%s' too long\n",v->name);
|
BIO_printf(bio_err,"Name '%s' too long\n",v->name);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1315,11 +1349,17 @@ start2: for (;;)
|
|||||||
|
|
||||||
BIO_snprintf(buf,sizeof buf,"%s_min",type);
|
BIO_snprintf(buf,sizeof buf,"%s_min",type);
|
||||||
if (!NCONF_get_number(req_conf,attr_sect,buf, &n_min))
|
if (!NCONF_get_number(req_conf,attr_sect,buf, &n_min))
|
||||||
|
{
|
||||||
|
ERR_clear_error();
|
||||||
n_min = -1;
|
n_min = -1;
|
||||||
|
}
|
||||||
|
|
||||||
BIO_snprintf(buf,sizeof buf,"%s_max",type);
|
BIO_snprintf(buf,sizeof buf,"%s_max",type);
|
||||||
if (!NCONF_get_number(req_conf,attr_sect,buf, &n_max))
|
if (!NCONF_get_number(req_conf,attr_sect,buf, &n_max))
|
||||||
|
{
|
||||||
|
ERR_clear_error();
|
||||||
n_max = -1;
|
n_max = -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (!add_attribute_object(req,
|
if (!add_attribute_object(req,
|
||||||
v->value,def,value,nid,n_min,n_max, chtype))
|
v->value,def,value,nid,n_min,n_max, chtype))
|
||||||
@@ -1350,6 +1390,7 @@ static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *dn_sk,
|
|||||||
|
|
||||||
for (i = 0; i < sk_CONF_VALUE_num(dn_sk); i++)
|
for (i = 0; i < sk_CONF_VALUE_num(dn_sk); i++)
|
||||||
{
|
{
|
||||||
|
int mval;
|
||||||
v=sk_CONF_VALUE_value(dn_sk,i);
|
v=sk_CONF_VALUE_value(dn_sk,i);
|
||||||
p=q=NULL;
|
p=q=NULL;
|
||||||
type=v->name;
|
type=v->name;
|
||||||
@@ -1366,8 +1407,19 @@ static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *dn_sk,
|
|||||||
if(*p) type = p;
|
if(*p) type = p;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#ifndef CHARSET_EBCDIC
|
||||||
|
if (*p == '+')
|
||||||
|
#else
|
||||||
|
if (*p == os_toascii['+'])
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
p++;
|
||||||
|
mval = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mval = 0;
|
||||||
if (!X509_NAME_add_entry_by_txt(subj,type, chtype,
|
if (!X509_NAME_add_entry_by_txt(subj,type, chtype,
|
||||||
(unsigned char *) v->value,-1,-1,0)) return 0;
|
(unsigned char *) v->value,-1,-1,mval)) return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1389,8 +1441,8 @@ static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *dn_sk,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int add_DN_object(X509_NAME *n, char *text, char *def, char *value,
|
static int add_DN_object(X509_NAME *n, char *text, const char *def, char *value,
|
||||||
int nid, int n_min, int n_max, unsigned long chtype)
|
int nid, int n_min, int n_max, unsigned long chtype, int mval)
|
||||||
{
|
{
|
||||||
int i,ret=0;
|
int i,ret=0;
|
||||||
MS_STATIC char buf[1024];
|
MS_STATIC char buf[1024];
|
||||||
@@ -1408,7 +1460,8 @@ start:
|
|||||||
buf[0]='\0';
|
buf[0]='\0';
|
||||||
if (!batch)
|
if (!batch)
|
||||||
{
|
{
|
||||||
fgets(buf,sizeof buf,stdin);
|
if (!fgets(buf,sizeof buf,stdin))
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1439,14 +1492,14 @@ start:
|
|||||||
#endif
|
#endif
|
||||||
if(!req_check_len(i, n_min, n_max)) goto start;
|
if(!req_check_len(i, n_min, n_max)) goto start;
|
||||||
if (!X509_NAME_add_entry_by_NID(n,nid, chtype,
|
if (!X509_NAME_add_entry_by_NID(n,nid, chtype,
|
||||||
(unsigned char *) buf, -1,-1,0)) goto err;
|
(unsigned char *) buf, -1,-1,mval)) goto err;
|
||||||
ret=1;
|
ret=1;
|
||||||
err:
|
err:
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int add_attribute_object(X509_REQ *req, char *text,
|
static int add_attribute_object(X509_REQ *req, char *text, const char *def,
|
||||||
char *def, char *value, int nid, int n_min,
|
char *value, int nid, int n_min,
|
||||||
int n_max, unsigned long chtype)
|
int n_max, unsigned long chtype)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -1466,7 +1519,8 @@ start:
|
|||||||
buf[0]='\0';
|
buf[0]='\0';
|
||||||
if (!batch)
|
if (!batch)
|
||||||
{
|
{
|
||||||
fgets(buf,sizeof buf,stdin);
|
if (!fgets(buf,sizeof buf,stdin))
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1509,23 +1563,6 @@ err:
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
static void MS_CALLBACK req_cb(int p, int n, void *arg)
|
|
||||||
{
|
|
||||||
char c='*';
|
|
||||||
|
|
||||||
if (p == 0) c='.';
|
|
||||||
if (p == 1) c='+';
|
|
||||||
if (p == 2) c='*';
|
|
||||||
if (p == 3) c='\n';
|
|
||||||
BIO_write((BIO *)arg,&c,1);
|
|
||||||
(void)BIO_flush((BIO *)arg);
|
|
||||||
#ifdef LINT
|
|
||||||
p=n;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int req_check_len(int len, int n_min, int n_max)
|
static int req_check_len(int len, int n_min, int n_max)
|
||||||
{
|
{
|
||||||
if ((n_min > 0) && (len < n_min))
|
if ((n_min > 0) && (len < n_min))
|
||||||
@@ -1542,13 +1579,258 @@ static int req_check_len(int len, int n_min, int n_max)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Check if the end of a string matches 'end' */
|
/* Check if the end of a string matches 'end' */
|
||||||
static int check_end(char *str, char *end)
|
static int check_end(const char *str, const char *end)
|
||||||
{
|
{
|
||||||
int elen, slen;
|
int elen, slen;
|
||||||
char *tmp;
|
const char *tmp;
|
||||||
elen = strlen(end);
|
elen = strlen(end);
|
||||||
slen = strlen(str);
|
slen = strlen(str);
|
||||||
if(elen > slen) return 1;
|
if(elen > slen) return 1;
|
||||||
tmp = str + slen - elen;
|
tmp = str + slen - elen;
|
||||||
return strcmp(tmp, end);
|
return strcmp(tmp, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static EVP_PKEY_CTX *set_keygen_ctx(BIO *err, const char *gstr, int *pkey_type,
|
||||||
|
long *pkeylen, char **palgnam,
|
||||||
|
ENGINE *keygen_engine)
|
||||||
|
{
|
||||||
|
EVP_PKEY_CTX *gctx = NULL;
|
||||||
|
EVP_PKEY *param = NULL;
|
||||||
|
long keylen = -1;
|
||||||
|
BIO *pbio = NULL;
|
||||||
|
const char *paramfile = NULL;
|
||||||
|
|
||||||
|
if (gstr == NULL)
|
||||||
|
{
|
||||||
|
*pkey_type = EVP_PKEY_RSA;
|
||||||
|
keylen = *pkeylen;
|
||||||
|
}
|
||||||
|
else if (gstr[0] >= '0' && gstr[0] <= '9')
|
||||||
|
{
|
||||||
|
*pkey_type = EVP_PKEY_RSA;
|
||||||
|
keylen = atol(gstr);
|
||||||
|
*pkeylen = keylen;
|
||||||
|
}
|
||||||
|
else if (!strncmp(gstr, "param:", 6))
|
||||||
|
paramfile = gstr + 6;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const char *p = strchr(gstr, ':');
|
||||||
|
int len;
|
||||||
|
ENGINE *tmpeng;
|
||||||
|
const EVP_PKEY_ASN1_METHOD *ameth;
|
||||||
|
|
||||||
|
if (p)
|
||||||
|
len = p - gstr;
|
||||||
|
else
|
||||||
|
len = strlen(gstr);
|
||||||
|
/* The lookup of a the string will cover all engines so
|
||||||
|
* keep a note of the implementation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
ameth = EVP_PKEY_asn1_find_str(&tmpeng, gstr, len);
|
||||||
|
|
||||||
|
if (!ameth)
|
||||||
|
{
|
||||||
|
BIO_printf(err, "Unknown algorithm %.*s\n", len, gstr);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
EVP_PKEY_asn1_get0_info(NULL, pkey_type, NULL, NULL, NULL,
|
||||||
|
ameth);
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
if (tmpeng)
|
||||||
|
ENGINE_finish(tmpeng);
|
||||||
|
#endif
|
||||||
|
if (*pkey_type == EVP_PKEY_RSA)
|
||||||
|
{
|
||||||
|
if (p)
|
||||||
|
{
|
||||||
|
keylen = atol(p + 1);
|
||||||
|
*pkeylen = keylen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (p)
|
||||||
|
paramfile = p + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (paramfile)
|
||||||
|
{
|
||||||
|
pbio = BIO_new_file(paramfile, "r");
|
||||||
|
if (!pbio)
|
||||||
|
{
|
||||||
|
BIO_printf(err, "Can't open parameter file %s\n",
|
||||||
|
paramfile);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
param = PEM_read_bio_Parameters(pbio, NULL);
|
||||||
|
|
||||||
|
if (!param)
|
||||||
|
{
|
||||||
|
X509 *x;
|
||||||
|
(void)BIO_reset(pbio);
|
||||||
|
x = PEM_read_bio_X509(pbio, NULL, NULL, NULL);
|
||||||
|
if (x)
|
||||||
|
{
|
||||||
|
param = X509_get_pubkey(x);
|
||||||
|
X509_free(x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BIO_free(pbio);
|
||||||
|
|
||||||
|
if (!param)
|
||||||
|
{
|
||||||
|
BIO_printf(err, "Error reading parameter file %s\n",
|
||||||
|
paramfile);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (*pkey_type == -1)
|
||||||
|
*pkey_type = EVP_PKEY_id(param);
|
||||||
|
else if (*pkey_type != EVP_PKEY_base_id(param))
|
||||||
|
{
|
||||||
|
BIO_printf(err, "Key Type does not match parameters\n");
|
||||||
|
EVP_PKEY_free(param);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (palgnam)
|
||||||
|
{
|
||||||
|
const EVP_PKEY_ASN1_METHOD *ameth;
|
||||||
|
ENGINE *tmpeng;
|
||||||
|
const char *anam;
|
||||||
|
ameth = EVP_PKEY_asn1_find(&tmpeng, *pkey_type);
|
||||||
|
if (!ameth)
|
||||||
|
{
|
||||||
|
BIO_puts(err, "Internal error: can't find key algorithm\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
EVP_PKEY_asn1_get0_info(NULL, NULL, NULL, NULL, &anam, ameth);
|
||||||
|
*palgnam = BUF_strdup(anam);
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
if (tmpeng)
|
||||||
|
ENGINE_finish(tmpeng);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (param)
|
||||||
|
{
|
||||||
|
gctx = EVP_PKEY_CTX_new(param, keygen_engine);
|
||||||
|
*pkeylen = EVP_PKEY_bits(param);
|
||||||
|
EVP_PKEY_free(param);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
gctx = EVP_PKEY_CTX_new_id(*pkey_type, keygen_engine);
|
||||||
|
|
||||||
|
if (!gctx)
|
||||||
|
{
|
||||||
|
BIO_puts(err, "Error allocating keygen context\n");
|
||||||
|
ERR_print_errors(err);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (EVP_PKEY_keygen_init(gctx) <= 0)
|
||||||
|
{
|
||||||
|
BIO_puts(err, "Error initializing keygen context\n");
|
||||||
|
ERR_print_errors(err);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#ifndef OPENSSL_NO_RSA
|
||||||
|
if ((*pkey_type == EVP_PKEY_RSA) && (keylen != -1))
|
||||||
|
{
|
||||||
|
if (EVP_PKEY_CTX_set_rsa_keygen_bits(gctx, keylen) <= 0)
|
||||||
|
{
|
||||||
|
BIO_puts(err, "Error setting RSA keysize\n");
|
||||||
|
ERR_print_errors(err);
|
||||||
|
EVP_PKEY_CTX_free(gctx);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return gctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int genpkey_cb(EVP_PKEY_CTX *ctx)
|
||||||
|
{
|
||||||
|
char c='*';
|
||||||
|
BIO *b = EVP_PKEY_CTX_get_app_data(ctx);
|
||||||
|
int p;
|
||||||
|
p = EVP_PKEY_CTX_get_keygen_info(ctx, 0);
|
||||||
|
if (p == 0) c='.';
|
||||||
|
if (p == 1) c='+';
|
||||||
|
if (p == 2) c='*';
|
||||||
|
if (p == 3) c='\n';
|
||||||
|
BIO_write(b,&c,1);
|
||||||
|
(void)BIO_flush(b);
|
||||||
|
#ifdef LINT
|
||||||
|
p=n;
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int do_sign_init(BIO *err, EVP_MD_CTX *ctx, EVP_PKEY *pkey,
|
||||||
|
const EVP_MD *md, STACK_OF(OPENSSL_STRING) *sigopts)
|
||||||
|
{
|
||||||
|
EVP_PKEY_CTX *pkctx = NULL;
|
||||||
|
int i;
|
||||||
|
EVP_MD_CTX_init(ctx);
|
||||||
|
if (!EVP_DigestSignInit(ctx, &pkctx, md, NULL, pkey))
|
||||||
|
return 0;
|
||||||
|
for (i = 0; i < sk_OPENSSL_STRING_num(sigopts); i++)
|
||||||
|
{
|
||||||
|
char *sigopt = sk_OPENSSL_STRING_value(sigopts, i);
|
||||||
|
if (pkey_ctrl_string(pkctx, sigopt) <= 0)
|
||||||
|
{
|
||||||
|
BIO_printf(err, "parameter error \"%s\"\n", sigopt);
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int do_X509_sign(BIO *err, X509 *x, EVP_PKEY *pkey, const EVP_MD *md,
|
||||||
|
STACK_OF(OPENSSL_STRING) *sigopts)
|
||||||
|
{
|
||||||
|
int rv;
|
||||||
|
EVP_MD_CTX mctx;
|
||||||
|
EVP_MD_CTX_init(&mctx);
|
||||||
|
rv = do_sign_init(err, &mctx, pkey, md, sigopts);
|
||||||
|
if (rv > 0)
|
||||||
|
rv = X509_sign_ctx(x, &mctx);
|
||||||
|
EVP_MD_CTX_cleanup(&mctx);
|
||||||
|
return rv > 0 ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int do_X509_REQ_sign(BIO *err, X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md,
|
||||||
|
STACK_OF(OPENSSL_STRING) *sigopts)
|
||||||
|
{
|
||||||
|
int rv;
|
||||||
|
EVP_MD_CTX mctx;
|
||||||
|
EVP_MD_CTX_init(&mctx);
|
||||||
|
rv = do_sign_init(err, &mctx, pkey, md, sigopts);
|
||||||
|
if (rv > 0)
|
||||||
|
rv = X509_REQ_sign_ctx(x, &mctx);
|
||||||
|
EVP_MD_CTX_cleanup(&mctx);
|
||||||
|
return rv > 0 ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int do_X509_CRL_sign(BIO *err, X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md,
|
||||||
|
STACK_OF(OPENSSL_STRING) *sigopts)
|
||||||
|
{
|
||||||
|
int rv;
|
||||||
|
EVP_MD_CTX mctx;
|
||||||
|
EVP_MD_CTX_init(&mctx);
|
||||||
|
rv = do_sign_init(err, &mctx, pkey, md, sigopts);
|
||||||
|
if (rv > 0)
|
||||||
|
rv = X509_CRL_sign_ctx(x, &mctx);
|
||||||
|
EVP_MD_CTX_cleanup(&mctx);
|
||||||
|
return rv > 0 ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
78
apps/rsa.c
78
apps/rsa.c
@@ -56,6 +56,7 @@
|
|||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <openssl/opensslconf.h>
|
||||||
#ifndef OPENSSL_NO_RSA
|
#ifndef OPENSSL_NO_RSA
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -68,6 +69,7 @@
|
|||||||
#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>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG rsa_main
|
#define PROG rsa_main
|
||||||
@@ -79,9 +81,13 @@
|
|||||||
* -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
|
||||||
* -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
|
||||||
|
* -camellia192 - 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
|
||||||
@@ -109,6 +115,8 @@ int MAIN(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
int modulus=0;
|
int modulus=0;
|
||||||
|
|
||||||
|
int pvk_encr = 2;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
@@ -171,6 +179,16 @@ int MAIN(int argc, char **argv)
|
|||||||
pubin=1;
|
pubin=1;
|
||||||
else if (strcmp(*argv,"-pubout") == 0)
|
else if (strcmp(*argv,"-pubout") == 0)
|
||||||
pubout=1;
|
pubout=1;
|
||||||
|
else if (strcmp(*argv,"-RSAPublicKey_in") == 0)
|
||||||
|
pubin = 2;
|
||||||
|
else if (strcmp(*argv,"-RSAPublicKey_out") == 0)
|
||||||
|
pubout = 2;
|
||||||
|
else if (strcmp(*argv,"-pvk-strong") == 0)
|
||||||
|
pvk_encr=2;
|
||||||
|
else if (strcmp(*argv,"-pvk-weak") == 0)
|
||||||
|
pvk_encr=1;
|
||||||
|
else if (strcmp(*argv,"-pvk-none") == 0)
|
||||||
|
pvk_encr=0;
|
||||||
else if (strcmp(*argv,"-noout") == 0)
|
else if (strcmp(*argv,"-noout") == 0)
|
||||||
noout=1;
|
noout=1;
|
||||||
else if (strcmp(*argv,"-text") == 0)
|
else if (strcmp(*argv,"-text") == 0)
|
||||||
@@ -206,9 +224,16 @@ bad:
|
|||||||
#ifndef OPENSSL_NO_IDEA
|
#ifndef OPENSSL_NO_IDEA
|
||||||
BIO_printf(bio_err," -idea encrypt PEM output with cbc idea\n");
|
BIO_printf(bio_err," -idea encrypt PEM output with cbc idea\n");
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_SEED
|
||||||
|
BIO_printf(bio_err," -seed encrypt PEM output with cbc seed\n");
|
||||||
|
#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," encrypt PEM output with cbc aes\n");
|
BIO_printf(bio_err," encrypt PEM output with cbc aes\n");
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
|
BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
|
||||||
|
BIO_printf(bio_err," encrypt PEM output with cbc camellia\n");
|
||||||
#endif
|
#endif
|
||||||
BIO_printf(bio_err," -text print the key in text\n");
|
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," -noout don't print key out\n");
|
||||||
@@ -244,10 +269,23 @@ bad:
|
|||||||
EVP_PKEY *pkey;
|
EVP_PKEY *pkey;
|
||||||
|
|
||||||
if (pubin)
|
if (pubin)
|
||||||
pkey = load_pubkey(bio_err, infile,
|
{
|
||||||
(informat == FORMAT_NETSCAPE && sgckey ?
|
int tmpformat=-1;
|
||||||
FORMAT_IISSGC : informat), 1,
|
if (pubin == 2)
|
||||||
|
{
|
||||||
|
if (informat == FORMAT_PEM)
|
||||||
|
tmpformat = FORMAT_PEMRSA;
|
||||||
|
else if (informat == FORMAT_ASN1)
|
||||||
|
tmpformat = FORMAT_ASN1RSA;
|
||||||
|
}
|
||||||
|
else if (informat == FORMAT_NETSCAPE && sgckey)
|
||||||
|
tmpformat = FORMAT_IISSGC;
|
||||||
|
else
|
||||||
|
tmpformat = informat;
|
||||||
|
|
||||||
|
pkey = load_pubkey(bio_err, infile, tmpformat, 1,
|
||||||
passin, e, "Public Key");
|
passin, e, "Public Key");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
pkey = load_key(bio_err, infile,
|
pkey = load_key(bio_err, infile,
|
||||||
(informat == FORMAT_NETSCAPE && sgckey ?
|
(informat == FORMAT_NETSCAPE && sgckey ?
|
||||||
@@ -255,7 +293,7 @@ bad:
|
|||||||
passin, e, "Private Key");
|
passin, e, "Private Key");
|
||||||
|
|
||||||
if (pkey != NULL)
|
if (pkey != NULL)
|
||||||
rsa = pkey == NULL ? NULL : EVP_PKEY_get1_RSA(pkey);
|
rsa = EVP_PKEY_get1_RSA(pkey);
|
||||||
EVP_PKEY_free(pkey);
|
EVP_PKEY_free(pkey);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,7 +345,7 @@ bad:
|
|||||||
BIO_printf(out,"RSA key ok\n");
|
BIO_printf(out,"RSA key ok\n");
|
||||||
else if (r == 0)
|
else if (r == 0)
|
||||||
{
|
{
|
||||||
long err;
|
unsigned long err;
|
||||||
|
|
||||||
while ((err = ERR_peek_error()) != 0 &&
|
while ((err = ERR_peek_error()) != 0 &&
|
||||||
ERR_GET_LIB(err) == ERR_LIB_RSA &&
|
ERR_GET_LIB(err) == ERR_LIB_RSA &&
|
||||||
@@ -333,7 +371,13 @@ bad:
|
|||||||
}
|
}
|
||||||
BIO_printf(bio_err,"writing RSA key\n");
|
BIO_printf(bio_err,"writing RSA key\n");
|
||||||
if (outformat == FORMAT_ASN1) {
|
if (outformat == FORMAT_ASN1) {
|
||||||
if(pubout || pubin) i=i2d_RSA_PUBKEY_bio(out,rsa);
|
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);
|
else i=i2d_RSAPrivateKey_bio(out,rsa);
|
||||||
}
|
}
|
||||||
#ifndef OPENSSL_NO_RC4
|
#ifndef OPENSSL_NO_RC4
|
||||||
@@ -357,14 +401,32 @@ bad:
|
|||||||
#endif
|
#endif
|
||||||
else if (outformat == FORMAT_PEM) {
|
else if (outformat == FORMAT_PEM) {
|
||||||
if(pubout || pubin)
|
if(pubout || pubin)
|
||||||
i=PEM_write_bio_RSA_PUBKEY(out,rsa);
|
{
|
||||||
|
if (pubout == 2)
|
||||||
|
i=PEM_write_bio_RSAPublicKey(out,rsa);
|
||||||
|
else
|
||||||
|
i=PEM_write_bio_RSA_PUBKEY(out,rsa);
|
||||||
|
}
|
||||||
else i=PEM_write_bio_RSAPrivateKey(out,rsa,
|
else i=PEM_write_bio_RSAPrivateKey(out,rsa,
|
||||||
enc,NULL,0,NULL,passout);
|
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 {
|
} 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 <= 0)
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"unable to write key\n");
|
BIO_printf(bio_err,"unable to write key\n");
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* rsautl.c */
|
/* rsautl.c */
|
||||||
/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
* project 2000.
|
* project 2000.
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
@@ -56,12 +56,14 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#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>
|
||||||
|
|
||||||
#define RSA_SIGN 1
|
#define RSA_SIGN 1
|
||||||
#define RSA_VERIFY 2
|
#define RSA_VERIFY 2
|
||||||
@@ -117,24 +119,36 @@ int MAIN(int argc, char **argv)
|
|||||||
while(argc >= 1)
|
while(argc >= 1)
|
||||||
{
|
{
|
||||||
if (!strcmp(*argv,"-in")) {
|
if (!strcmp(*argv,"-in")) {
|
||||||
if (--argc < 1) badarg = 1;
|
if (--argc < 1)
|
||||||
infile= *(++argv);
|
badarg = 1;
|
||||||
|
else
|
||||||
|
infile= *(++argv);
|
||||||
} else if (!strcmp(*argv,"-out")) {
|
} else if (!strcmp(*argv,"-out")) {
|
||||||
if (--argc < 1) badarg = 1;
|
if (--argc < 1)
|
||||||
outfile= *(++argv);
|
badarg = 1;
|
||||||
|
else
|
||||||
|
outfile= *(++argv);
|
||||||
} else if(!strcmp(*argv, "-inkey")) {
|
} else if(!strcmp(*argv, "-inkey")) {
|
||||||
if (--argc < 1) badarg = 1;
|
if (--argc < 1)
|
||||||
keyfile = *(++argv);
|
badarg = 1;
|
||||||
|
else
|
||||||
|
keyfile = *(++argv);
|
||||||
} else if (!strcmp(*argv,"-passin")) {
|
} else if (!strcmp(*argv,"-passin")) {
|
||||||
if (--argc < 1) badarg = 1;
|
if (--argc < 1)
|
||||||
passargin= *(++argv);
|
badarg = 1;
|
||||||
|
else
|
||||||
|
passargin= *(++argv);
|
||||||
} else if (strcmp(*argv,"-keyform") == 0) {
|
} else if (strcmp(*argv,"-keyform") == 0) {
|
||||||
if (--argc < 1) badarg = 1;
|
if (--argc < 1)
|
||||||
keyform=str2fmt(*(++argv));
|
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) badarg = 1;
|
if (--argc < 1)
|
||||||
engine = *(++argv);
|
badarg = 1;
|
||||||
|
else
|
||||||
|
engine = *(++argv);
|
||||||
#endif
|
#endif
|
||||||
} else if(!strcmp(*argv, "-pubin")) {
|
} else if(!strcmp(*argv, "-pubin")) {
|
||||||
key_type = KEY_PUBKEY;
|
key_type = KEY_PUBKEY;
|
||||||
@@ -147,6 +161,7 @@ int MAIN(int argc, char **argv)
|
|||||||
else if(!strcmp(*argv, "-oaep")) pad = RSA_PKCS1_OAEP_PADDING;
|
else if(!strcmp(*argv, "-oaep")) pad = RSA_PKCS1_OAEP_PADDING;
|
||||||
else if(!strcmp(*argv, "-ssl")) pad = RSA_SSLV23_PADDING;
|
else if(!strcmp(*argv, "-ssl")) pad = RSA_SSLV23_PADDING;
|
||||||
else if(!strcmp(*argv, "-pkcs")) pad = RSA_PKCS1_PADDING;
|
else if(!strcmp(*argv, "-pkcs")) pad = RSA_PKCS1_PADDING;
|
||||||
|
else if(!strcmp(*argv, "-x931")) pad = RSA_X931_PADDING;
|
||||||
else if(!strcmp(*argv, "-sign")) {
|
else if(!strcmp(*argv, "-sign")) {
|
||||||
rsa_mode = RSA_SIGN;
|
rsa_mode = RSA_SIGN;
|
||||||
need_priv = 1;
|
need_priv = 1;
|
||||||
@@ -327,4 +342,10 @@ static void usage()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else /* !OPENSSL_NO_RSA */
|
||||||
|
|
||||||
|
# if PEDANTIC
|
||||||
|
static void *dummy=&dummy;
|
||||||
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -108,15 +108,16 @@
|
|||||||
* Hudson (tjh@cryptsoft.com).
|
* Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#if !defined(OPENSSL_SYS_NETWARE) /* conflicts with winsock2 stuff on netware */
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#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
|
||||||
|
|
||||||
#ifdef OPENSSL_SYS_MSDOS
|
#if defined(OPENSSL_SYS_MSDOS) && !defined(_WIN32)
|
||||||
#define _kbhit kbhit
|
#define _kbhit kbhit
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -147,22 +148,29 @@ typedef fd_mask fd_set;
|
|||||||
#define PORT_STR "4433"
|
#define PORT_STR "4433"
|
||||||
#define PROTOCOL "tcp"
|
#define PROTOCOL "tcp"
|
||||||
|
|
||||||
int do_server(int port, int *ret, int (*cb) (), char *context);
|
int do_server(int port, int type, int *ret, int (*cb) (char *hostname, int s, unsigned char *context), unsigned char *context);
|
||||||
#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);
|
||||||
#endif
|
#endif
|
||||||
int init_client(int *sock, char *server, int port);
|
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_cb(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,
|
||||||
|
unsigned char *data, int len,
|
||||||
|
void *arg);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len);
|
||||||
|
int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int cookie_len);
|
||||||
|
|||||||
431
apps/s_cb.c
431
apps/s_cb.c
@@ -56,7 +56,7 @@
|
|||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 1998-2006 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
|
||||||
@@ -117,16 +117,21 @@
|
|||||||
#undef NON_MAIN
|
#undef NON_MAIN
|
||||||
#undef USE_SOCKETS
|
#undef USE_SOCKETS
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
|
#include <openssl/rand.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
#include "s_apps.h"
|
#include "s_apps.h"
|
||||||
|
|
||||||
|
#define COOKIE_SECRET_LENGTH 16
|
||||||
|
|
||||||
int verify_depth=0;
|
int verify_depth=0;
|
||||||
int verify_error=X509_V_OK;
|
int verify_error=X509_V_OK;
|
||||||
|
int verify_return_error=0;
|
||||||
|
unsigned char cookie_secret[COOKIE_SECRET_LENGTH];
|
||||||
|
int cookie_initialized=0;
|
||||||
|
|
||||||
int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
|
int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
|
||||||
{
|
{
|
||||||
char buf[256];
|
|
||||||
X509 *err_cert;
|
X509 *err_cert;
|
||||||
int err,depth;
|
int err,depth;
|
||||||
|
|
||||||
@@ -134,15 +139,23 @@ int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
|
|||||||
err= X509_STORE_CTX_get_error(ctx);
|
err= X509_STORE_CTX_get_error(ctx);
|
||||||
depth= X509_STORE_CTX_get_error_depth(ctx);
|
depth= X509_STORE_CTX_get_error_depth(ctx);
|
||||||
|
|
||||||
X509_NAME_oneline(X509_get_subject_name(err_cert),buf,sizeof buf);
|
BIO_printf(bio_err,"depth=%d ",depth);
|
||||||
BIO_printf(bio_err,"depth=%d %s\n",depth,buf);
|
if (err_cert)
|
||||||
|
{
|
||||||
|
X509_NAME_print_ex(bio_err, X509_get_subject_name(err_cert),
|
||||||
|
0, XN_FLAG_ONELINE);
|
||||||
|
BIO_puts(bio_err, "\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
BIO_puts(bio_err, "<no cert>\n");
|
||||||
if (!ok)
|
if (!ok)
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"verify error:num=%d:%s\n",err,
|
BIO_printf(bio_err,"verify error:num=%d:%s\n",err,
|
||||||
X509_verify_cert_error_string(err));
|
X509_verify_cert_error_string(err));
|
||||||
if (verify_depth >= depth)
|
if (verify_depth >= depth)
|
||||||
{
|
{
|
||||||
ok=1;
|
if (!verify_return_error)
|
||||||
|
ok=1;
|
||||||
verify_error=X509_V_OK;
|
verify_error=X509_V_OK;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -151,25 +164,33 @@ int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
|
|||||||
verify_error=X509_V_ERR_CERT_CHAIN_TOO_LONG;
|
verify_error=X509_V_ERR_CERT_CHAIN_TOO_LONG;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch (ctx->error)
|
switch (err)
|
||||||
{
|
{
|
||||||
case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
|
case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
|
||||||
X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert),buf,sizeof buf);
|
BIO_puts(bio_err,"issuer= ");
|
||||||
BIO_printf(bio_err,"issuer= %s\n",buf);
|
X509_NAME_print_ex(bio_err, X509_get_issuer_name(err_cert),
|
||||||
|
0, XN_FLAG_ONELINE);
|
||||||
|
BIO_puts(bio_err, "\n");
|
||||||
break;
|
break;
|
||||||
case X509_V_ERR_CERT_NOT_YET_VALID:
|
case X509_V_ERR_CERT_NOT_YET_VALID:
|
||||||
case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
|
case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
|
||||||
BIO_printf(bio_err,"notBefore=");
|
BIO_printf(bio_err,"notBefore=");
|
||||||
ASN1_TIME_print(bio_err,X509_get_notBefore(ctx->current_cert));
|
ASN1_TIME_print(bio_err,X509_get_notBefore(err_cert));
|
||||||
BIO_printf(bio_err,"\n");
|
BIO_printf(bio_err,"\n");
|
||||||
break;
|
break;
|
||||||
case X509_V_ERR_CERT_HAS_EXPIRED:
|
case X509_V_ERR_CERT_HAS_EXPIRED:
|
||||||
case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
|
case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
|
||||||
BIO_printf(bio_err,"notAfter=");
|
BIO_printf(bio_err,"notAfter=");
|
||||||
ASN1_TIME_print(bio_err,X509_get_notAfter(ctx->current_cert));
|
ASN1_TIME_print(bio_err,X509_get_notAfter(err_cert));
|
||||||
BIO_printf(bio_err,"\n");
|
BIO_printf(bio_err,"\n");
|
||||||
break;
|
break;
|
||||||
|
case X509_V_ERR_NO_EXPLICIT_POLICY:
|
||||||
|
policies_print(bio_err, ctx);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
if (err == X509_V_OK && ok == 2)
|
||||||
|
policies_print(bio_err, ctx);
|
||||||
|
|
||||||
BIO_printf(bio_err,"verify return:%d\n",ok);
|
BIO_printf(bio_err,"verify return:%d\n",ok);
|
||||||
return(ok);
|
return(ok);
|
||||||
}
|
}
|
||||||
@@ -229,8 +250,36 @@ int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file)
|
|||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
long MS_CALLBACK bio_dump_cb(BIO *bio, int cmd, const char *argp, int argi,
|
int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key)
|
||||||
long argl, long ret)
|
{
|
||||||
|
if (cert == NULL)
|
||||||
|
return 1;
|
||||||
|
if (SSL_CTX_use_certificate(ctx,cert) <= 0)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"error setting certificate\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (SSL_CTX_use_PrivateKey(ctx,key) <= 0)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"error setting private key\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Now we know that a key and cert have been set against
|
||||||
|
* the SSL context */
|
||||||
|
if (!SSL_CTX_check_private_key(ctx))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"Private key does not match the certificate public key\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
long MS_CALLBACK bio_dump_callback(BIO *bio, int cmd, const char *argp,
|
||||||
|
int argi, long argl, long ret)
|
||||||
{
|
{
|
||||||
BIO *out;
|
BIO *out;
|
||||||
|
|
||||||
@@ -239,15 +288,15 @@ long MS_CALLBACK bio_dump_cb(BIO *bio, int cmd, const char *argp, int argi,
|
|||||||
|
|
||||||
if (cmd == (BIO_CB_READ|BIO_CB_RETURN))
|
if (cmd == (BIO_CB_READ|BIO_CB_RETURN))
|
||||||
{
|
{
|
||||||
BIO_printf(out,"read from %08X [%08lX] (%d bytes => %ld (0x%X))\n",
|
BIO_printf(out,"read from %p [%p] (%lu bytes => %ld (0x%lX))\n",
|
||||||
bio,argp,argi,ret,ret);
|
(void *)bio,argp,(unsigned long)argi,ret,ret);
|
||||||
BIO_dump(out,argp,(int)ret);
|
BIO_dump(out,argp,(int)ret);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
else if (cmd == (BIO_CB_WRITE|BIO_CB_RETURN))
|
else if (cmd == (BIO_CB_WRITE|BIO_CB_RETURN))
|
||||||
{
|
{
|
||||||
BIO_printf(out,"write to %08X [%08lX] (%d bytes => %ld (0x%X))\n",
|
BIO_printf(out,"write to %p [%p] (%lu bytes => %ld (0x%lX))\n",
|
||||||
bio,argp,argi,ret,ret);
|
(void *)bio,argp,(unsigned long)argi,ret,ret);
|
||||||
BIO_dump(out,argp,(int)ret);
|
BIO_dump(out,argp,(int)ret);
|
||||||
}
|
}
|
||||||
return(ret);
|
return(ret);
|
||||||
@@ -255,7 +304,7 @@ long MS_CALLBACK bio_dump_cb(BIO *bio, int cmd, const char *argp, int argi,
|
|||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
char *str;
|
const char *str;
|
||||||
int w;
|
int w;
|
||||||
|
|
||||||
w=where& ~SSL_ST_MASK;
|
w=where& ~SSL_ST_MASK;
|
||||||
@@ -308,6 +357,18 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *
|
|||||||
case TLS1_VERSION:
|
case TLS1_VERSION:
|
||||||
str_version = "TLS 1.0 ";
|
str_version = "TLS 1.0 ";
|
||||||
break;
|
break;
|
||||||
|
case TLS1_1_VERSION:
|
||||||
|
str_version = "TLS 1.1 ";
|
||||||
|
break;
|
||||||
|
case TLS1_2_VERSION:
|
||||||
|
str_version = "TLS 1.2 ";
|
||||||
|
break;
|
||||||
|
case DTLS1_VERSION:
|
||||||
|
str_version = "DTLS 1.0 ";
|
||||||
|
break;
|
||||||
|
case DTLS1_BAD_VER:
|
||||||
|
str_version = "DTLS 1.0 (bad) ";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
str_version = "???";
|
str_version = "???";
|
||||||
}
|
}
|
||||||
@@ -318,14 +379,14 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *
|
|||||||
|
|
||||||
if (len > 0)
|
if (len > 0)
|
||||||
{
|
{
|
||||||
switch (((unsigned char*)buf)[0])
|
switch (((const unsigned char*)buf)[0])
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
str_details1 = ", ERROR:";
|
str_details1 = ", ERROR:";
|
||||||
str_details2 = " ???";
|
str_details2 = " ???";
|
||||||
if (len >= 3)
|
if (len >= 3)
|
||||||
{
|
{
|
||||||
unsigned err = (((unsigned char*)buf)[1]<<8) + ((unsigned char*)buf)[2];
|
unsigned err = (((const unsigned char*)buf)[1]<<8) + ((const unsigned char*)buf)[2];
|
||||||
|
|
||||||
switch (err)
|
switch (err)
|
||||||
{
|
{
|
||||||
@@ -373,7 +434,12 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version == SSL3_VERSION || version == TLS1_VERSION)
|
if (version == SSL3_VERSION ||
|
||||||
|
version == TLS1_VERSION ||
|
||||||
|
version == TLS1_1_VERSION ||
|
||||||
|
version == TLS1_2_VERSION ||
|
||||||
|
version == DTLS1_VERSION ||
|
||||||
|
version == DTLS1_BAD_VER)
|
||||||
{
|
{
|
||||||
switch (content_type)
|
switch (content_type)
|
||||||
{
|
{
|
||||||
@@ -394,7 +460,7 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *
|
|||||||
|
|
||||||
if (len == 2)
|
if (len == 2)
|
||||||
{
|
{
|
||||||
switch (((unsigned char*)buf)[0])
|
switch (((const unsigned char*)buf)[0])
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
str_details1 = ", warning";
|
str_details1 = ", warning";
|
||||||
@@ -405,7 +471,7 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *
|
|||||||
}
|
}
|
||||||
|
|
||||||
str_details2 = " ???";
|
str_details2 = " ???";
|
||||||
switch (((unsigned char*)buf)[1])
|
switch (((const unsigned char*)buf)[1])
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
str_details2 = " close_notify";
|
str_details2 = " close_notify";
|
||||||
@@ -476,6 +542,24 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *
|
|||||||
case 100:
|
case 100:
|
||||||
str_details2 = " no_renegotiation";
|
str_details2 = " no_renegotiation";
|
||||||
break;
|
break;
|
||||||
|
case 110:
|
||||||
|
str_details2 = " unsupported_extension";
|
||||||
|
break;
|
||||||
|
case 111:
|
||||||
|
str_details2 = " certificate_unobtainable";
|
||||||
|
break;
|
||||||
|
case 112:
|
||||||
|
str_details2 = " unrecognized_name";
|
||||||
|
break;
|
||||||
|
case 113:
|
||||||
|
str_details2 = " bad_certificate_status_response";
|
||||||
|
break;
|
||||||
|
case 114:
|
||||||
|
str_details2 = " bad_certificate_hash_value";
|
||||||
|
break;
|
||||||
|
case 115:
|
||||||
|
str_details2 = " unknown_psk_identity";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -486,7 +570,7 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *
|
|||||||
|
|
||||||
if (len > 0)
|
if (len > 0)
|
||||||
{
|
{
|
||||||
switch (((unsigned char*)buf)[0])
|
switch (((const unsigned char*)buf)[0])
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
str_details1 = ", HelloRequest";
|
str_details1 = ", HelloRequest";
|
||||||
@@ -497,6 +581,9 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *
|
|||||||
case 2:
|
case 2:
|
||||||
str_details1 = ", ServerHello";
|
str_details1 = ", ServerHello";
|
||||||
break;
|
break;
|
||||||
|
case 3:
|
||||||
|
str_details1 = ", HelloVerifyRequest";
|
||||||
|
break;
|
||||||
case 11:
|
case 11:
|
||||||
str_details1 = ", Certificate";
|
str_details1 = ", Certificate";
|
||||||
break;
|
break;
|
||||||
@@ -521,6 +608,26 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef OPENSSL_NO_HEARTBEATS
|
||||||
|
if (content_type == 24) /* Heartbeat */
|
||||||
|
{
|
||||||
|
str_details1 = ", Heartbeat";
|
||||||
|
|
||||||
|
if (len > 0)
|
||||||
|
{
|
||||||
|
switch (((const unsigned char*)buf)[0])
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
str_details1 = ", HeartbeatRequest";
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
str_details1 = ", HeartbeatResponse";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
BIO_printf(bio, "%s %s%s [length %04lx]%s%s\n", str_write_p, str_version, str_content_type, (unsigned long)len, str_details1, str_details2);
|
BIO_printf(bio, "%s %s%s [length %04lx]%s%s\n", str_write_p, str_version, str_content_type, (unsigned long)len, str_details1, str_details2);
|
||||||
@@ -539,11 +646,285 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *
|
|||||||
{
|
{
|
||||||
if (i % 16 == 0 && i > 0)
|
if (i % 16 == 0 && i > 0)
|
||||||
BIO_printf(bio, "\n ");
|
BIO_printf(bio, "\n ");
|
||||||
BIO_printf(bio, " %02x", ((unsigned char*)buf)[i]);
|
BIO_printf(bio, " %02x", ((const unsigned char*)buf)[i]);
|
||||||
}
|
}
|
||||||
if (i < len)
|
if (i < len)
|
||||||
BIO_printf(bio, " ...");
|
BIO_printf(bio, " ...");
|
||||||
BIO_printf(bio, "\n");
|
BIO_printf(bio, "\n");
|
||||||
}
|
}
|
||||||
BIO_flush(bio);
|
(void)BIO_flush(bio);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MS_CALLBACK tlsext_cb(SSL *s, int client_server, int type,
|
||||||
|
unsigned char *data, int len,
|
||||||
|
void *arg)
|
||||||
|
{
|
||||||
|
BIO *bio = arg;
|
||||||
|
char *extname;
|
||||||
|
|
||||||
|
switch(type)
|
||||||
|
{
|
||||||
|
case TLSEXT_TYPE_server_name:
|
||||||
|
extname = "server name";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_max_fragment_length:
|
||||||
|
extname = "max fragment length";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_client_certificate_url:
|
||||||
|
extname = "client certificate URL";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_trusted_ca_keys:
|
||||||
|
extname = "trusted CA keys";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_truncated_hmac:
|
||||||
|
extname = "truncated HMAC";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_status_request:
|
||||||
|
extname = "status request";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_user_mapping:
|
||||||
|
extname = "user mapping";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_client_authz:
|
||||||
|
extname = "client authz";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_server_authz:
|
||||||
|
extname = "server authz";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_cert_type:
|
||||||
|
extname = "cert type";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_elliptic_curves:
|
||||||
|
extname = "elliptic curves";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_ec_point_formats:
|
||||||
|
extname = "EC point formats";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_srp:
|
||||||
|
extname = "SRP";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_signature_algorithms:
|
||||||
|
extname = "signature algorithms";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_use_srtp:
|
||||||
|
extname = "use SRTP";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_heartbeat:
|
||||||
|
extname = "heartbeat";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_session_ticket:
|
||||||
|
extname = "session ticket";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TLSEXT_TYPE_renegotiate:
|
||||||
|
extname = "renegotiation info";
|
||||||
|
break;
|
||||||
|
|
||||||
|
#ifdef TLSEXT_TYPE_opaque_prf_input
|
||||||
|
case TLSEXT_TYPE_opaque_prf_input:
|
||||||
|
extname = "opaque PRF input";
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef TLSEXT_TYPE_next_proto_neg
|
||||||
|
case TLSEXT_TYPE_next_proto_neg:
|
||||||
|
extname = "next protocol";
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
extname = "unknown";
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
BIO_printf(bio, "TLS %s extension \"%s\" (id=%d), len=%d\n",
|
||||||
|
client_server ? "server": "client",
|
||||||
|
extname, type, len);
|
||||||
|
BIO_dump(bio, (char *)data, len);
|
||||||
|
(void)BIO_flush(bio);
|
||||||
|
}
|
||||||
|
|
||||||
|
int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len)
|
||||||
|
{
|
||||||
|
unsigned char *buffer, result[EVP_MAX_MD_SIZE];
|
||||||
|
unsigned int length, resultlength;
|
||||||
|
union {
|
||||||
|
struct sockaddr sa;
|
||||||
|
struct sockaddr_in s4;
|
||||||
|
#if OPENSSL_USE_IPV6
|
||||||
|
struct sockaddr_in6 s6;
|
||||||
|
#endif
|
||||||
|
} peer;
|
||||||
|
|
||||||
|
/* Initialize a random secret */
|
||||||
|
if (!cookie_initialized)
|
||||||
|
{
|
||||||
|
if (!RAND_bytes(cookie_secret, COOKIE_SECRET_LENGTH))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"error setting random cookie secret\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
cookie_initialized = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read peer information */
|
||||||
|
(void)BIO_dgram_get_peer(SSL_get_rbio(ssl), &peer);
|
||||||
|
|
||||||
|
/* Create buffer with peer's address and port */
|
||||||
|
length = 0;
|
||||||
|
switch (peer.sa.sa_family)
|
||||||
|
{
|
||||||
|
case AF_INET:
|
||||||
|
length += sizeof(struct in_addr);
|
||||||
|
length += sizeof(peer.s4.sin_port);
|
||||||
|
break;
|
||||||
|
#if OPENSSL_USE_IPV6
|
||||||
|
case AF_INET6:
|
||||||
|
length += sizeof(struct in6_addr);
|
||||||
|
length += sizeof(peer.s6.sin6_port);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
OPENSSL_assert(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
buffer = OPENSSL_malloc(length);
|
||||||
|
|
||||||
|
if (buffer == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"out of memory\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (peer.sa.sa_family)
|
||||||
|
{
|
||||||
|
case AF_INET:
|
||||||
|
memcpy(buffer,
|
||||||
|
&peer.s4.sin_port,
|
||||||
|
sizeof(peer.s4.sin_port));
|
||||||
|
memcpy(buffer + sizeof(peer.s4.sin_port),
|
||||||
|
&peer.s4.sin_addr,
|
||||||
|
sizeof(struct in_addr));
|
||||||
|
break;
|
||||||
|
#if OPENSSL_USE_IPV6
|
||||||
|
case AF_INET6:
|
||||||
|
memcpy(buffer,
|
||||||
|
&peer.s6.sin6_port,
|
||||||
|
sizeof(peer.s6.sin6_port));
|
||||||
|
memcpy(buffer + sizeof(peer.s6.sin6_port),
|
||||||
|
&peer.s6.sin6_addr,
|
||||||
|
sizeof(struct in6_addr));
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
OPENSSL_assert(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Calculate HMAC of buffer using the secret */
|
||||||
|
HMAC(EVP_sha1(), cookie_secret, COOKIE_SECRET_LENGTH,
|
||||||
|
buffer, length, result, &resultlength);
|
||||||
|
OPENSSL_free(buffer);
|
||||||
|
|
||||||
|
memcpy(cookie, result, resultlength);
|
||||||
|
*cookie_len = resultlength;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int cookie_len)
|
||||||
|
{
|
||||||
|
unsigned char *buffer, result[EVP_MAX_MD_SIZE];
|
||||||
|
unsigned int length, resultlength;
|
||||||
|
union {
|
||||||
|
struct sockaddr sa;
|
||||||
|
struct sockaddr_in s4;
|
||||||
|
#if OPENSSL_USE_IPV6
|
||||||
|
struct sockaddr_in6 s6;
|
||||||
|
#endif
|
||||||
|
} peer;
|
||||||
|
|
||||||
|
/* If secret isn't initialized yet, the cookie can't be valid */
|
||||||
|
if (!cookie_initialized)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Read peer information */
|
||||||
|
(void)BIO_dgram_get_peer(SSL_get_rbio(ssl), &peer);
|
||||||
|
|
||||||
|
/* Create buffer with peer's address and port */
|
||||||
|
length = 0;
|
||||||
|
switch (peer.sa.sa_family)
|
||||||
|
{
|
||||||
|
case AF_INET:
|
||||||
|
length += sizeof(struct in_addr);
|
||||||
|
length += sizeof(peer.s4.sin_port);
|
||||||
|
break;
|
||||||
|
#if OPENSSL_USE_IPV6
|
||||||
|
case AF_INET6:
|
||||||
|
length += sizeof(struct in6_addr);
|
||||||
|
length += sizeof(peer.s6.sin6_port);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
OPENSSL_assert(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
buffer = OPENSSL_malloc(length);
|
||||||
|
|
||||||
|
if (buffer == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"out of memory\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (peer.sa.sa_family)
|
||||||
|
{
|
||||||
|
case AF_INET:
|
||||||
|
memcpy(buffer,
|
||||||
|
&peer.s4.sin_port,
|
||||||
|
sizeof(peer.s4.sin_port));
|
||||||
|
memcpy(buffer + sizeof(peer.s4.sin_port),
|
||||||
|
&peer.s4.sin_addr,
|
||||||
|
sizeof(struct in_addr));
|
||||||
|
break;
|
||||||
|
#if OPENSSL_USE_IPV6
|
||||||
|
case AF_INET6:
|
||||||
|
memcpy(buffer,
|
||||||
|
&peer.s6.sin6_port,
|
||||||
|
sizeof(peer.s6.sin6_port));
|
||||||
|
memcpy(buffer + sizeof(peer.s6.sin6_port),
|
||||||
|
&peer.s6.sin6_addr,
|
||||||
|
sizeof(struct in6_addr));
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
OPENSSL_assert(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Calculate HMAC of buffer using the secret */
|
||||||
|
HMAC(EVP_sha1(), cookie_secret, COOKIE_SECRET_LENGTH,
|
||||||
|
buffer, length, result, &resultlength);
|
||||||
|
OPENSSL_free(buffer);
|
||||||
|
|
||||||
|
if (cookie_len == resultlength && memcmp(result, cookie, resultlength) == 0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
1241
apps/s_client.c
1241
apps/s_client.c
File diff suppressed because it is too large
Load Diff
1535
apps/s_server.c
1535
apps/s_server.c
File diff suppressed because it is too large
Load Diff
144
apps/s_socket.c
144
apps/s_socket.c
@@ -62,7 +62,11 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
#include <openssl/e_os2.h>
|
#ifdef FLAT_INC
|
||||||
|
#include "e_os2.h"
|
||||||
|
#else
|
||||||
|
#include "../e_os2.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/* With IPv6, it looks like Digital has mixed up the proper order of
|
/* With IPv6, it looks like Digital has mixed up the proper order of
|
||||||
recursive header file inclusion, resulting in the compiler complaining
|
recursive header file inclusion, resulting in the compiler complaining
|
||||||
@@ -81,14 +85,26 @@ typedef unsigned int u_int;
|
|||||||
#include "s_apps.h"
|
#include "s_apps.h"
|
||||||
#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
|
|
||||||
|
#ifdef FLAT_INC
|
||||||
|
#include "e_os.h"
|
||||||
|
#else
|
||||||
|
#include "../e_os.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef OPENSSL_NO_SOCK
|
||||||
|
|
||||||
|
#if defined(OPENSSL_SYS_NETWARE) && defined(NETWARE_BSDSOCK)
|
||||||
|
#include "netdb.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct hostent *GetHostByName(char *name);
|
static struct hostent *GetHostByName(char *name);
|
||||||
#ifdef OPENSSL_SYS_WINDOWS
|
#if defined(OPENSSL_SYS_WINDOWS) || (defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK))
|
||||||
static void ssl_sock_cleanup(void);
|
static void ssl_sock_cleanup(void);
|
||||||
#endif
|
#endif
|
||||||
static int ssl_sock_init(void);
|
static int ssl_sock_init(void);
|
||||||
static int init_client_ip(int *sock,unsigned char ip[4], int port);
|
static int init_client_ip(int *sock,unsigned char ip[4], int port, int type);
|
||||||
static int init_server(int *sock, int port);
|
static int init_server(int *sock, int port, int type);
|
||||||
static int init_server_long(int *sock, int port,char *ip);
|
static int init_server_long(int *sock, int port,char *ip, int type);
|
||||||
static int do_accept(int acc_sock, int *sock, char **host);
|
static int do_accept(int acc_sock, int *sock, char **host);
|
||||||
static int host_ip(char *str, unsigned char ip[4]);
|
static int host_ip(char *str, unsigned char ip[4]);
|
||||||
|
|
||||||
@@ -98,6 +114,10 @@ static int host_ip(char *str, unsigned char ip[4]);
|
|||||||
#define SOCKET_PROTOCOL IPPROTO_TCP
|
#define SOCKET_PROTOCOL IPPROTO_TCP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK)
|
||||||
|
static int wsa_init_done=0;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef OPENSSL_SYS_WINDOWS
|
#ifdef OPENSSL_SYS_WINDOWS
|
||||||
static struct WSAData wsa_state;
|
static struct WSAData wsa_state;
|
||||||
static int wsa_init_done=0;
|
static int wsa_init_done=0;
|
||||||
@@ -146,6 +166,15 @@ static void ssl_sock_cleanup(void)
|
|||||||
WSACleanup();
|
WSACleanup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#elif defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK)
|
||||||
|
static void sock_cleanup(void)
|
||||||
|
{
|
||||||
|
if (wsa_init_done)
|
||||||
|
{
|
||||||
|
wsa_init_done=0;
|
||||||
|
WSACleanup();
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int ssl_sock_init(void)
|
static int ssl_sock_init(void)
|
||||||
@@ -153,7 +182,6 @@ static int ssl_sock_init(void)
|
|||||||
#ifdef WATT32
|
#ifdef WATT32
|
||||||
extern int _watt_do_exit;
|
extern int _watt_do_exit;
|
||||||
_watt_do_exit = 0;
|
_watt_do_exit = 0;
|
||||||
dbug_init();
|
|
||||||
if (sock_init())
|
if (sock_init())
|
||||||
return (0);
|
return (0);
|
||||||
#elif defined(OPENSSL_SYS_WINDOWS)
|
#elif defined(OPENSSL_SYS_WINDOWS)
|
||||||
@@ -181,24 +209,42 @@ static int ssl_sock_init(void)
|
|||||||
SetWindowLong(topWnd,GWL_WNDPROC,(LONG)lpTopHookProc);
|
SetWindowLong(topWnd,GWL_WNDPROC,(LONG)lpTopHookProc);
|
||||||
#endif /* OPENSSL_SYS_WIN16 */
|
#endif /* OPENSSL_SYS_WIN16 */
|
||||||
}
|
}
|
||||||
|
#elif defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK)
|
||||||
|
WORD wVerReq;
|
||||||
|
WSADATA wsaData;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (!wsa_init_done)
|
||||||
|
{
|
||||||
|
|
||||||
|
# ifdef SIGINT
|
||||||
|
signal(SIGINT,(void (*)(int))sock_cleanup);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
wsa_init_done=1;
|
||||||
|
wVerReq = MAKEWORD( 2, 0 );
|
||||||
|
err = WSAStartup(wVerReq,&wsaData);
|
||||||
|
if (err != 0)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err,"unable to start WINSOCK2, error code=%d\n",err);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif /* OPENSSL_SYS_WINDOWS */
|
#endif /* OPENSSL_SYS_WINDOWS */
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int init_client(int *sock, char *host, int port)
|
int init_client(int *sock, char *host, int port, int type)
|
||||||
{
|
{
|
||||||
unsigned char ip[4];
|
unsigned char ip[4];
|
||||||
short p=0;
|
|
||||||
|
|
||||||
|
memset(ip, '\0', sizeof ip);
|
||||||
if (!host_ip(host,&(ip[0])))
|
if (!host_ip(host,&(ip[0])))
|
||||||
{
|
return 0;
|
||||||
return(0);
|
return init_client_ip(sock,ip,port,type);
|
||||||
}
|
|
||||||
if (p != 0) port=p;
|
|
||||||
return(init_client_ip(sock,ip,port));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int init_client_ip(int *sock, unsigned char ip[4], int port)
|
static int init_client_ip(int *sock, unsigned char ip[4], int port, int type)
|
||||||
{
|
{
|
||||||
unsigned long addr;
|
unsigned long addr;
|
||||||
struct sockaddr_in them;
|
struct sockaddr_in them;
|
||||||
@@ -216,45 +262,58 @@ static int init_client_ip(int *sock, unsigned char ip[4], int port)
|
|||||||
((unsigned long)ip[3]);
|
((unsigned long)ip[3]);
|
||||||
them.sin_addr.s_addr=htonl(addr);
|
them.sin_addr.s_addr=htonl(addr);
|
||||||
|
|
||||||
s=socket(AF_INET,SOCK_STREAM,SOCKET_PROTOCOL);
|
if (type == SOCK_STREAM)
|
||||||
|
s=socket(AF_INET,SOCK_STREAM,SOCKET_PROTOCOL);
|
||||||
|
else /* ( type == SOCK_DGRAM) */
|
||||||
|
s=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
|
||||||
|
|
||||||
if (s == INVALID_SOCKET) { perror("socket"); return(0); }
|
if (s == INVALID_SOCKET) { perror("socket"); return(0); }
|
||||||
|
|
||||||
#ifndef OPENSSL_SYS_MPE
|
#if defined(SO_KEEPALIVE) && !defined(OPENSSL_SYS_MPE)
|
||||||
i=0;
|
if (type == SOCK_STREAM)
|
||||||
i=setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(char *)&i,sizeof(i));
|
{
|
||||||
if (i < 0) { perror("keepalive"); return(0); }
|
i=0;
|
||||||
|
i=setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(char *)&i,sizeof(i));
|
||||||
|
if (i < 0) { perror("keepalive"); return(0); }
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (connect(s,(struct sockaddr *)&them,sizeof(them)) == -1)
|
if (connect(s,(struct sockaddr *)&them,sizeof(them)) == -1)
|
||||||
{ close(s); perror("connect"); return(0); }
|
{ closesocket(s); perror("connect"); return(0); }
|
||||||
*sock=s;
|
*sock=s;
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int do_server(int port, int *ret, int (*cb)(), char *context)
|
int do_server(int port, int type, int *ret, int (*cb)(char *hostname, int s, unsigned char *context), unsigned char *context)
|
||||||
{
|
{
|
||||||
int sock;
|
int sock;
|
||||||
char *name;
|
char *name = NULL;
|
||||||
int accept_socket;
|
int accept_socket = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!init_server(&accept_socket,port)) return(0);
|
if (!init_server(&accept_socket,port,type)) return(0);
|
||||||
|
|
||||||
if (ret != NULL)
|
if (ret != NULL)
|
||||||
{
|
{
|
||||||
*ret=accept_socket;
|
*ret=accept_socket;
|
||||||
/* return(1);*/
|
/* return(1);*/
|
||||||
}
|
}
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (do_accept(accept_socket,&sock,&name) == 0)
|
if (type==SOCK_STREAM)
|
||||||
{
|
{
|
||||||
SHUTDOWN(accept_socket);
|
if (do_accept(accept_socket,&sock,&name) == 0)
|
||||||
return(0);
|
{
|
||||||
|
SHUTDOWN(accept_socket);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
sock = accept_socket;
|
||||||
i=(*cb)(name,sock, context);
|
i=(*cb)(name,sock, context);
|
||||||
if (name != NULL) OPENSSL_free(name);
|
if (name != NULL) OPENSSL_free(name);
|
||||||
SHUTDOWN2(sock);
|
if (type==SOCK_STREAM)
|
||||||
|
SHUTDOWN2(sock);
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
{
|
{
|
||||||
SHUTDOWN2(accept_socket);
|
SHUTDOWN2(accept_socket);
|
||||||
@@ -263,11 +322,11 @@ int do_server(int port, int *ret, int (*cb)(), char *context)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int init_server_long(int *sock, int port, char *ip)
|
static int init_server_long(int *sock, int port, char *ip, int type)
|
||||||
{
|
{
|
||||||
int ret=0;
|
int ret=0;
|
||||||
struct sockaddr_in server;
|
struct sockaddr_in server;
|
||||||
int s= -1,i;
|
int s= -1;
|
||||||
|
|
||||||
if (!ssl_sock_init()) return(0);
|
if (!ssl_sock_init()) return(0);
|
||||||
|
|
||||||
@@ -283,7 +342,11 @@ static int init_server_long(int *sock, int port, char *ip)
|
|||||||
#else
|
#else
|
||||||
memcpy(&server.sin_addr,ip,4);
|
memcpy(&server.sin_addr,ip,4);
|
||||||
#endif
|
#endif
|
||||||
s=socket(AF_INET,SOCK_STREAM,SOCKET_PROTOCOL);
|
|
||||||
|
if (type == SOCK_STREAM)
|
||||||
|
s=socket(AF_INET,SOCK_STREAM,SOCKET_PROTOCOL);
|
||||||
|
else /* type == SOCK_DGRAM */
|
||||||
|
s=socket(AF_INET, SOCK_DGRAM,IPPROTO_UDP);
|
||||||
|
|
||||||
if (s == INVALID_SOCKET) goto err;
|
if (s == INVALID_SOCKET) goto err;
|
||||||
#if defined SOL_SOCKET && defined SO_REUSEADDR
|
#if defined SOL_SOCKET && defined SO_REUSEADDR
|
||||||
@@ -301,8 +364,7 @@ static int init_server_long(int *sock, int port, char *ip)
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
/* Make it 128 for linux */
|
/* Make it 128 for linux */
|
||||||
if (listen(s,128) == -1) goto err;
|
if (type==SOCK_STREAM && listen(s,128) == -1) goto err;
|
||||||
i=0;
|
|
||||||
*sock=s;
|
*sock=s;
|
||||||
ret=1;
|
ret=1;
|
||||||
err:
|
err:
|
||||||
@@ -313,14 +375,14 @@ err:
|
|||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int init_server(int *sock, int port)
|
static int init_server(int *sock, int port, int type)
|
||||||
{
|
{
|
||||||
return(init_server_long(sock, port, NULL));
|
return(init_server_long(sock, port, NULL, type));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int do_accept(int acc_sock, int *sock, char **host)
|
static int do_accept(int acc_sock, int *sock, char **host)
|
||||||
{
|
{
|
||||||
int ret,i;
|
int ret;
|
||||||
struct hostent *h1,*h2;
|
struct hostent *h1,*h2;
|
||||||
static struct sockaddr_in from;
|
static struct sockaddr_in from;
|
||||||
int len;
|
int len;
|
||||||
@@ -342,7 +404,8 @@ redoit:
|
|||||||
ret=accept(acc_sock,(struct sockaddr *)&from,(void *)&len);
|
ret=accept(acc_sock,(struct sockaddr *)&from,(void *)&len);
|
||||||
if (ret == INVALID_SOCKET)
|
if (ret == INVALID_SOCKET)
|
||||||
{
|
{
|
||||||
#ifdef OPENSSL_SYS_WINDOWS
|
#if defined(OPENSSL_SYS_WINDOWS) || (defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK))
|
||||||
|
int i;
|
||||||
i=WSAGetLastError();
|
i=WSAGetLastError();
|
||||||
BIO_printf(bio_err,"accept error %d\n",i);
|
BIO_printf(bio_err,"accept error %d\n",i);
|
||||||
#else
|
#else
|
||||||
@@ -397,7 +460,6 @@ redoit:
|
|||||||
BIO_printf(bio_err,"gethostbyname failure\n");
|
BIO_printf(bio_err,"gethostbyname failure\n");
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
i=0;
|
|
||||||
if (h2->h_addrtype != AF_INET)
|
if (h2->h_addrtype != AF_INET)
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"gethostbyname addr is not AF_INET\n");
|
BIO_printf(bio_err,"gethostbyname addr is not AF_INET\n");
|
||||||
@@ -553,3 +615,5 @@ static struct hostent *GetHostByName(char *name)
|
|||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -85,54 +85,6 @@
|
|||||||
#include OPENSSL_UNISTD
|
#include OPENSSL_UNISTD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VXWORKS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC))
|
|
||||||
#define TIMES
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _IRIX
|
|
||||||
#include <time.h>
|
|
||||||
#endif
|
|
||||||
#ifdef TIMES
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/times.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Depending on the VMS version, the tms structure is perhaps defined.
|
|
||||||
The __TMS macro will show if it was. If it wasn't defined, we should
|
|
||||||
undefine TIMES, since that tells the rest of the program how things
|
|
||||||
should be handled. -- Richard Levitte */
|
|
||||||
#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__TMS)
|
|
||||||
#undef TIMES
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(TIMES) && !defined(OPENSSL_SYS_VXWORKS)
|
|
||||||
#include <sys/timeb.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(sun) || defined(__ultrix)
|
|
||||||
#define _POSIX_SOURCE
|
|
||||||
#include <limits.h>
|
|
||||||
#include <sys/param.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The following if from times(3) man page. It may need to be changed
|
|
||||||
*/
|
|
||||||
#ifndef HZ
|
|
||||||
# ifdef _SC_CLK_TCK
|
|
||||||
# define HZ ((double)sysconf(_SC_CLK_TCK))
|
|
||||||
# else
|
|
||||||
# ifndef CLK_TCK
|
|
||||||
# ifndef _BSD_CLK_TCK_ /* FreeBSD hack */
|
|
||||||
# define HZ 100.0
|
|
||||||
# else /* _BSD_CLK_TCK_ */
|
|
||||||
# define HZ ((double)_BSD_CLK_TCK_)
|
|
||||||
# endif
|
|
||||||
# else /* CLK_TCK */
|
|
||||||
# define HZ ((double)CLK_TCK)
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG s_time_main
|
#define PROG s_time_main
|
||||||
|
|
||||||
@@ -177,7 +129,7 @@ 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 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;
|
||||||
@@ -372,49 +324,8 @@ bad:
|
|||||||
|
|
||||||
static double tm_Time_F(int s)
|
static double tm_Time_F(int s)
|
||||||
{
|
{
|
||||||
static double ret;
|
return app_tminterval(s,1);
|
||||||
#ifdef TIMES
|
|
||||||
static struct tms tstart,tend;
|
|
||||||
|
|
||||||
if(s == START) {
|
|
||||||
times(&tstart);
|
|
||||||
return(0);
|
|
||||||
} else {
|
|
||||||
times(&tend);
|
|
||||||
ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
|
|
||||||
return((ret == 0.0)?1e-6:ret);
|
|
||||||
}
|
}
|
||||||
#elif defined(OPENSSL_SYS_VXWORKS)
|
|
||||||
{
|
|
||||||
static unsigned long tick_start, tick_end;
|
|
||||||
|
|
||||||
if( s == START )
|
|
||||||
{
|
|
||||||
tick_start = tickGet();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tick_end = tickGet();
|
|
||||||
ret = (double)(tick_end - tick_start) / (double)sysClkRateGet();
|
|
||||||
return((ret == 0.0)?1e-6:ret);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else /* !times() */
|
|
||||||
static struct timeb tstart,tend;
|
|
||||||
long i;
|
|
||||||
|
|
||||||
if(s == START) {
|
|
||||||
ftime(&tstart);
|
|
||||||
return(0);
|
|
||||||
} else {
|
|
||||||
ftime(&tend);
|
|
||||||
i=(long)tend.millitm-(long)tstart.millitm;
|
|
||||||
ret=((double)(tend.time-tstart.time))+((double)i)/1000.0;
|
|
||||||
return((ret == 0.0)?1e-6:ret);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* MAIN - main processing area for client
|
* MAIN - main processing area for client
|
||||||
@@ -690,7 +601,7 @@ static SSL *doConnection(SSL *scon)
|
|||||||
i=SSL_get_fd(serverCon);
|
i=SSL_get_fd(serverCon);
|
||||||
width=i+1;
|
width=i+1;
|
||||||
FD_ZERO(&readfds);
|
FD_ZERO(&readfds);
|
||||||
FD_SET(i,&readfds);
|
openssl_fdset(i,&readfds);
|
||||||
/* Note: under VMS with SOCKETSHR the 2nd parameter
|
/* Note: under VMS with SOCKETSHR the 2nd parameter
|
||||||
* is currently of type (int *) whereas under other
|
* is currently of type (int *) whereas under other
|
||||||
* systems it is (void *) if you don't have a cast it
|
* systems it is (void *) if you don't have a cast it
|
||||||
|
|||||||
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-----
|
|
||||||
|
|||||||
@@ -69,7 +69,7 @@
|
|||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG sess_id_main
|
#define PROG sess_id_main
|
||||||
|
|
||||||
static 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",
|
||||||
@@ -90,12 +90,13 @@ 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;
|
||||||
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;
|
||||||
char **pp;
|
const char **pp;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
@@ -163,16 +164,17 @@ bad:
|
|||||||
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) { goto end; }
|
||||||
|
peer = SSL_SESSION_get0_peer(x);
|
||||||
|
|
||||||
if(context)
|
if(context)
|
||||||
{
|
{
|
||||||
x->sid_ctx_length=strlen(context);
|
size_t ctx_len = strlen(context);
|
||||||
if(x->sid_ctx_length > SSL_MAX_SID_CTX_LENGTH)
|
if(ctx_len > SSL_MAX_SID_CTX_LENGTH)
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err,"Context too long\n");
|
BIO_printf(bio_err,"Context too long\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
memcpy(x->sid_ctx,context,x->sid_ctx_length);
|
SSL_SESSION_set1_id_context(x, (unsigned char *)context, ctx_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef undef
|
#ifdef undef
|
||||||
@@ -231,17 +233,17 @@ bad:
|
|||||||
|
|
||||||
if (cert)
|
if (cert)
|
||||||
{
|
{
|
||||||
if (x->peer == NULL)
|
if (peer == NULL)
|
||||||
BIO_puts(out,"No certificate present\n");
|
BIO_puts(out,"No certificate present\n");
|
||||||
else
|
else
|
||||||
X509_print(out,x->peer);
|
X509_print(out,peer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!noout && !cert)
|
if (!noout && !cert)
|
||||||
{
|
{
|
||||||
if (outformat == FORMAT_ASN1)
|
if (outformat == FORMAT_ASN1)
|
||||||
i=(int)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 {
|
||||||
@@ -253,12 +255,12 @@ bad:
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!noout && (x->peer != NULL)) /* just print the certificate */
|
else if (!noout && (peer != NULL)) /* just print the certificate */
|
||||||
{
|
{
|
||||||
if (outformat == FORMAT_ASN1)
|
if (outformat == FORMAT_ASN1)
|
||||||
i=(int)i2d_X509_bio(out,x->peer);
|
i=(int)i2d_X509_bio(out,peer);
|
||||||
else if (outformat == FORMAT_PEM)
|
else if (outformat == FORMAT_PEM)
|
||||||
i=PEM_write_bio_X509(out,x->peer);
|
i=PEM_write_bio_X509(out,peer);
|
||||||
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;
|
||||||
|
|||||||
758
apps/smime.c
758
apps/smime.c
@@ -1,9 +1,9 @@
|
|||||||
/* smime.c */
|
/* smime.c */
|
||||||
/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
* project 1999.
|
* project.
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 1999-2004 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
|
||||||
@@ -64,29 +64,36 @@
|
|||||||
#include <openssl/crypto.h>
|
#include <openssl/crypto.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
|
#include <openssl/x509_vfy.h>
|
||||||
|
#include <openssl/x509v3.h>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG smime_main
|
#define PROG smime_main
|
||||||
static int save_certs(char *signerfile, STACK_OF(X509) *signers);
|
static int save_certs(char *signerfile, STACK_OF(X509) *signers);
|
||||||
|
static int smime_cb(int ok, X509_STORE_CTX *ctx);
|
||||||
|
|
||||||
#define SMIME_OP 0x10
|
#define SMIME_OP 0x10
|
||||||
|
#define SMIME_IP 0x20
|
||||||
|
#define SMIME_SIGNERS 0x40
|
||||||
#define SMIME_ENCRYPT (1 | SMIME_OP)
|
#define SMIME_ENCRYPT (1 | SMIME_OP)
|
||||||
#define SMIME_DECRYPT 2
|
#define SMIME_DECRYPT (2 | SMIME_IP)
|
||||||
#define SMIME_SIGN (3 | SMIME_OP)
|
#define SMIME_SIGN (3 | SMIME_OP | SMIME_SIGNERS)
|
||||||
#define SMIME_VERIFY 4
|
#define SMIME_VERIFY (4 | SMIME_IP)
|
||||||
#define SMIME_PK7OUT 5
|
#define SMIME_PK7OUT (5 | SMIME_IP | SMIME_OP)
|
||||||
|
#define SMIME_RESIGN (6 | SMIME_IP | SMIME_OP | SMIME_SIGNERS)
|
||||||
|
|
||||||
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 operation = 0;
|
int operation = 0;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
char **args;
|
char **args;
|
||||||
char *inmode = "r", *outmode = "w";
|
const char *inmode = "r", *outmode = "w";
|
||||||
char *infile = NULL, *outfile = NULL;
|
char *infile = NULL, *outfile = NULL;
|
||||||
char *signerfile = NULL, *recipfile = NULL;
|
char *signerfile = NULL, *recipfile = NULL;
|
||||||
|
STACK_OF(OPENSSL_STRING) *sksigners = NULL, *skkeys = NULL;
|
||||||
char *certfile = NULL, *keyfile = NULL, *contfile=NULL;
|
char *certfile = NULL, *keyfile = NULL, *contfile=NULL;
|
||||||
const EVP_CIPHER *cipher = NULL;
|
const EVP_CIPHER *cipher = NULL;
|
||||||
PKCS7 *p7 = NULL;
|
PKCS7 *p7 = NULL;
|
||||||
@@ -96,42 +103,60 @@ int MAIN(int argc, char **argv)
|
|||||||
STACK_OF(X509) *encerts = NULL, *other = NULL;
|
STACK_OF(X509) *encerts = NULL, *other = NULL;
|
||||||
BIO *in = NULL, *out = NULL, *indata = NULL;
|
BIO *in = NULL, *out = NULL, *indata = NULL;
|
||||||
int badarg = 0;
|
int badarg = 0;
|
||||||
int flags = PKCS7_DETACHED, store_flags = 0;
|
int flags = PKCS7_DETACHED;
|
||||||
char *to = NULL, *from = NULL, *subject = NULL;
|
char *to = NULL, *from = NULL, *subject = NULL;
|
||||||
char *CAfile = NULL, *CApath = NULL;
|
char *CAfile = NULL, *CApath = NULL;
|
||||||
char *passargin = NULL, *passin = NULL;
|
char *passargin = NULL, *passin = NULL;
|
||||||
char *inrand = NULL;
|
char *inrand = NULL;
|
||||||
int need_rand = 0;
|
int need_rand = 0;
|
||||||
|
int indef = 0;
|
||||||
|
const EVP_MD *sign_md = NULL;
|
||||||
int informat = FORMAT_SMIME, outformat = FORMAT_SMIME;
|
int informat = FORMAT_SMIME, outformat = FORMAT_SMIME;
|
||||||
int keyform = FORMAT_PEM;
|
int keyform = FORMAT_PEM;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine=NULL;
|
char *engine=NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM *vpm = NULL;
|
||||||
|
|
||||||
args = argv + 1;
|
args = argv + 1;
|
||||||
ret = 1;
|
ret = 1;
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
while (!badarg && *args && *args[0] == '-') {
|
while (!badarg && *args && *args[0] == '-')
|
||||||
if (!strcmp (*args, "-encrypt")) operation = SMIME_ENCRYPT;
|
{
|
||||||
else if (!strcmp (*args, "-decrypt")) operation = SMIME_DECRYPT;
|
if (!strcmp (*args, "-encrypt"))
|
||||||
else if (!strcmp (*args, "-sign")) operation = SMIME_SIGN;
|
operation = SMIME_ENCRYPT;
|
||||||
else if (!strcmp (*args, "-verify")) operation = SMIME_VERIFY;
|
else if (!strcmp (*args, "-decrypt"))
|
||||||
else if (!strcmp (*args, "-pk7out")) operation = SMIME_PK7OUT;
|
operation = SMIME_DECRYPT;
|
||||||
|
else if (!strcmp (*args, "-sign"))
|
||||||
|
operation = SMIME_SIGN;
|
||||||
|
else if (!strcmp (*args, "-resign"))
|
||||||
|
operation = SMIME_RESIGN;
|
||||||
|
else if (!strcmp (*args, "-verify"))
|
||||||
|
operation = SMIME_VERIFY;
|
||||||
|
else if (!strcmp (*args, "-pk7out"))
|
||||||
|
operation = SMIME_PK7OUT;
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
else if (!strcmp (*args, "-des3"))
|
else if (!strcmp (*args, "-des3"))
|
||||||
cipher = EVP_des_ede3_cbc();
|
cipher = EVP_des_ede3_cbc();
|
||||||
else if (!strcmp (*args, "-des"))
|
else if (!strcmp (*args, "-des"))
|
||||||
cipher = EVP_des_cbc();
|
cipher = EVP_des_cbc();
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_SEED
|
||||||
|
else if (!strcmp (*args, "-seed"))
|
||||||
|
cipher = EVP_seed_cbc();
|
||||||
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC2
|
#ifndef OPENSSL_NO_RC2
|
||||||
else if (!strcmp (*args, "-rc2-40"))
|
else if (!strcmp (*args, "-rc2-40"))
|
||||||
cipher = EVP_rc2_40_cbc();
|
cipher = EVP_rc2_40_cbc();
|
||||||
@@ -147,6 +172,14 @@ int MAIN(int argc, char **argv)
|
|||||||
cipher = EVP_aes_192_cbc();
|
cipher = EVP_aes_192_cbc();
|
||||||
else if (!strcmp(*args,"-aes256"))
|
else if (!strcmp(*args,"-aes256"))
|
||||||
cipher = EVP_aes_256_cbc();
|
cipher = EVP_aes_256_cbc();
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
|
else if (!strcmp(*args,"-camellia128"))
|
||||||
|
cipher = EVP_camellia_128_cbc();
|
||||||
|
else if (!strcmp(*args,"-camellia192"))
|
||||||
|
cipher = EVP_camellia_192_cbc();
|
||||||
|
else if (!strcmp(*args,"-camellia256"))
|
||||||
|
cipher = EVP_camellia_256_cbc();
|
||||||
#endif
|
#endif
|
||||||
else if (!strcmp (*args, "-text"))
|
else if (!strcmp (*args, "-text"))
|
||||||
flags |= PKCS7_TEXT;
|
flags |= PKCS7_TEXT;
|
||||||
@@ -168,131 +201,234 @@ int MAIN(int argc, char **argv)
|
|||||||
flags |= PKCS7_BINARY;
|
flags |= PKCS7_BINARY;
|
||||||
else if (!strcmp (*args, "-nosigs"))
|
else if (!strcmp (*args, "-nosigs"))
|
||||||
flags |= PKCS7_NOSIGS;
|
flags |= PKCS7_NOSIGS;
|
||||||
|
else if (!strcmp (*args, "-stream"))
|
||||||
|
indef = 1;
|
||||||
|
else if (!strcmp (*args, "-indef"))
|
||||||
|
indef = 1;
|
||||||
|
else if (!strcmp (*args, "-noindef"))
|
||||||
|
indef = 0;
|
||||||
else if (!strcmp (*args, "-nooldmime"))
|
else if (!strcmp (*args, "-nooldmime"))
|
||||||
flags |= PKCS7_NOOLDMIMETYPE;
|
flags |= PKCS7_NOOLDMIMETYPE;
|
||||||
else if (!strcmp (*args, "-crlfeol"))
|
else if (!strcmp (*args, "-crlfeol"))
|
||||||
flags |= PKCS7_CRLFEOL;
|
flags |= PKCS7_CRLFEOL;
|
||||||
else if (!strcmp (*args, "-crl_check"))
|
else if (!strcmp(*args,"-rand"))
|
||||||
store_flags |= X509_V_FLAG_CRL_CHECK;
|
{
|
||||||
else if (!strcmp (*args, "-crl_check_all"))
|
if (!args[1])
|
||||||
store_flags |= X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL;
|
goto argerr;
|
||||||
else if (!strcmp(*args,"-rand")) {
|
args++;
|
||||||
if (args[1]) {
|
inrand = *args;
|
||||||
args++;
|
|
||||||
inrand = *args;
|
|
||||||
} else badarg = 1;
|
|
||||||
need_rand = 1;
|
need_rand = 1;
|
||||||
|
}
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
} else if (!strcmp(*args,"-engine")) {
|
else if (!strcmp(*args,"-engine"))
|
||||||
if (args[1]) {
|
{
|
||||||
args++;
|
if (!args[1])
|
||||||
engine = *args;
|
goto argerr;
|
||||||
} else badarg = 1;
|
engine = *++args;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
} else if (!strcmp(*args,"-passin")) {
|
else if (!strcmp(*args,"-passin"))
|
||||||
if (args[1]) {
|
{
|
||||||
args++;
|
if (!args[1])
|
||||||
passargin = *args;
|
goto argerr;
|
||||||
} else badarg = 1;
|
passargin = *++args;
|
||||||
} else if (!strcmp (*args, "-to")) {
|
}
|
||||||
if (args[1]) {
|
else if (!strcmp (*args, "-to"))
|
||||||
args++;
|
{
|
||||||
to = *args;
|
if (!args[1])
|
||||||
} else badarg = 1;
|
goto argerr;
|
||||||
} else if (!strcmp (*args, "-from")) {
|
to = *++args;
|
||||||
if (args[1]) {
|
}
|
||||||
args++;
|
else if (!strcmp (*args, "-from"))
|
||||||
from = *args;
|
{
|
||||||
} else badarg = 1;
|
if (!args[1])
|
||||||
} else if (!strcmp (*args, "-subject")) {
|
goto argerr;
|
||||||
if (args[1]) {
|
from = *++args;
|
||||||
args++;
|
}
|
||||||
subject = *args;
|
else if (!strcmp (*args, "-subject"))
|
||||||
} else badarg = 1;
|
{
|
||||||
} else if (!strcmp (*args, "-signer")) {
|
if (!args[1])
|
||||||
if (args[1]) {
|
goto argerr;
|
||||||
args++;
|
subject = *++args;
|
||||||
signerfile = *args;
|
}
|
||||||
} else badarg = 1;
|
else if (!strcmp (*args, "-signer"))
|
||||||
} else if (!strcmp (*args, "-recip")) {
|
{
|
||||||
if (args[1]) {
|
if (!args[1])
|
||||||
args++;
|
goto argerr;
|
||||||
recipfile = *args;
|
/* If previous -signer argument add signer to list */
|
||||||
} else badarg = 1;
|
|
||||||
} else if (!strcmp (*args, "-inkey")) {
|
|
||||||
if (args[1]) {
|
|
||||||
args++;
|
|
||||||
keyfile = *args;
|
|
||||||
} else badarg = 1;
|
|
||||||
} else if (!strcmp (*args, "-keyform")) {
|
|
||||||
if (args[1]) {
|
|
||||||
args++;
|
|
||||||
keyform = str2fmt(*args);
|
|
||||||
} else badarg = 1;
|
|
||||||
} else if (!strcmp (*args, "-certfile")) {
|
|
||||||
if (args[1]) {
|
|
||||||
args++;
|
|
||||||
certfile = *args;
|
|
||||||
} else badarg = 1;
|
|
||||||
} else if (!strcmp (*args, "-CAfile")) {
|
|
||||||
if (args[1]) {
|
|
||||||
args++;
|
|
||||||
CAfile = *args;
|
|
||||||
} else badarg = 1;
|
|
||||||
} else if (!strcmp (*args, "-CApath")) {
|
|
||||||
if (args[1]) {
|
|
||||||
args++;
|
|
||||||
CApath = *args;
|
|
||||||
} else badarg = 1;
|
|
||||||
} else if (!strcmp (*args, "-in")) {
|
|
||||||
if (args[1]) {
|
|
||||||
args++;
|
|
||||||
infile = *args;
|
|
||||||
} else badarg = 1;
|
|
||||||
} else if (!strcmp (*args, "-inform")) {
|
|
||||||
if (args[1]) {
|
|
||||||
args++;
|
|
||||||
informat = str2fmt(*args);
|
|
||||||
} else badarg = 1;
|
|
||||||
} else if (!strcmp (*args, "-outform")) {
|
|
||||||
if (args[1]) {
|
|
||||||
args++;
|
|
||||||
outformat = str2fmt(*args);
|
|
||||||
} else badarg = 1;
|
|
||||||
} else if (!strcmp (*args, "-out")) {
|
|
||||||
if (args[1]) {
|
|
||||||
args++;
|
|
||||||
outfile = *args;
|
|
||||||
} else badarg = 1;
|
|
||||||
} else if (!strcmp (*args, "-content")) {
|
|
||||||
if (args[1]) {
|
|
||||||
args++;
|
|
||||||
contfile = *args;
|
|
||||||
} else badarg = 1;
|
|
||||||
} else badarg = 1;
|
|
||||||
args++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(operation == SMIME_SIGN) {
|
if (signerfile)
|
||||||
if(!signerfile) {
|
{
|
||||||
|
if (!sksigners)
|
||||||
|
sksigners = sk_OPENSSL_STRING_new_null();
|
||||||
|
sk_OPENSSL_STRING_push(sksigners, signerfile);
|
||||||
|
if (!keyfile)
|
||||||
|
keyfile = signerfile;
|
||||||
|
if (!skkeys)
|
||||||
|
skkeys = sk_OPENSSL_STRING_new_null();
|
||||||
|
sk_OPENSSL_STRING_push(skkeys, keyfile);
|
||||||
|
keyfile = NULL;
|
||||||
|
}
|
||||||
|
signerfile = *++args;
|
||||||
|
}
|
||||||
|
else if (!strcmp (*args, "-recip"))
|
||||||
|
{
|
||||||
|
if (!args[1])
|
||||||
|
goto argerr;
|
||||||
|
recipfile = *++args;
|
||||||
|
}
|
||||||
|
else if (!strcmp (*args, "-md"))
|
||||||
|
{
|
||||||
|
if (!args[1])
|
||||||
|
goto argerr;
|
||||||
|
sign_md = EVP_get_digestbyname(*++args);
|
||||||
|
if (sign_md == NULL)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Unknown digest %s\n",
|
||||||
|
*args);
|
||||||
|
goto argerr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!strcmp (*args, "-inkey"))
|
||||||
|
{
|
||||||
|
if (!args[1])
|
||||||
|
goto argerr;
|
||||||
|
/* If previous -inkey arument add signer to list */
|
||||||
|
if (keyfile)
|
||||||
|
{
|
||||||
|
if (!signerfile)
|
||||||
|
{
|
||||||
|
BIO_puts(bio_err, "Illegal -inkey without -signer\n");
|
||||||
|
goto argerr;
|
||||||
|
}
|
||||||
|
if (!sksigners)
|
||||||
|
sksigners = sk_OPENSSL_STRING_new_null();
|
||||||
|
sk_OPENSSL_STRING_push(sksigners, signerfile);
|
||||||
|
signerfile = NULL;
|
||||||
|
if (!skkeys)
|
||||||
|
skkeys = sk_OPENSSL_STRING_new_null();
|
||||||
|
sk_OPENSSL_STRING_push(skkeys, keyfile);
|
||||||
|
}
|
||||||
|
keyfile = *++args;
|
||||||
|
}
|
||||||
|
else if (!strcmp (*args, "-keyform"))
|
||||||
|
{
|
||||||
|
if (!args[1])
|
||||||
|
goto argerr;
|
||||||
|
keyform = str2fmt(*++args);
|
||||||
|
}
|
||||||
|
else if (!strcmp (*args, "-certfile"))
|
||||||
|
{
|
||||||
|
if (!args[1])
|
||||||
|
goto argerr;
|
||||||
|
certfile = *++args;
|
||||||
|
}
|
||||||
|
else if (!strcmp (*args, "-CAfile"))
|
||||||
|
{
|
||||||
|
if (!args[1])
|
||||||
|
goto argerr;
|
||||||
|
CAfile = *++args;
|
||||||
|
}
|
||||||
|
else if (!strcmp (*args, "-CApath"))
|
||||||
|
{
|
||||||
|
if (!args[1])
|
||||||
|
goto argerr;
|
||||||
|
CApath = *++args;
|
||||||
|
}
|
||||||
|
else if (!strcmp (*args, "-in"))
|
||||||
|
{
|
||||||
|
if (!args[1])
|
||||||
|
goto argerr;
|
||||||
|
infile = *++args;
|
||||||
|
}
|
||||||
|
else if (!strcmp (*args, "-inform"))
|
||||||
|
{
|
||||||
|
if (!args[1])
|
||||||
|
goto argerr;
|
||||||
|
informat = str2fmt(*++args);
|
||||||
|
}
|
||||||
|
else if (!strcmp (*args, "-outform"))
|
||||||
|
{
|
||||||
|
if (!args[1])
|
||||||
|
goto argerr;
|
||||||
|
outformat = str2fmt(*++args);
|
||||||
|
}
|
||||||
|
else if (!strcmp (*args, "-out"))
|
||||||
|
{
|
||||||
|
if (!args[1])
|
||||||
|
goto argerr;
|
||||||
|
outfile = *++args;
|
||||||
|
}
|
||||||
|
else if (!strcmp (*args, "-content"))
|
||||||
|
{
|
||||||
|
if (!args[1])
|
||||||
|
goto argerr;
|
||||||
|
contfile = *++args;
|
||||||
|
}
|
||||||
|
else if (args_verify(&args, NULL, &badarg, bio_err, &vpm))
|
||||||
|
continue;
|
||||||
|
else if ((cipher = EVP_get_cipherbyname(*args + 1)) == NULL)
|
||||||
|
badarg = 1;
|
||||||
|
args++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(operation & SMIME_SIGNERS) && (skkeys || sksigners))
|
||||||
|
{
|
||||||
|
BIO_puts(bio_err, "Multiple signers or keys not allowed\n");
|
||||||
|
goto argerr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (operation & SMIME_SIGNERS)
|
||||||
|
{
|
||||||
|
/* Check to see if any final signer needs to be appended */
|
||||||
|
if (keyfile && !signerfile)
|
||||||
|
{
|
||||||
|
BIO_puts(bio_err, "Illegal -inkey without -signer\n");
|
||||||
|
goto argerr;
|
||||||
|
}
|
||||||
|
if (signerfile)
|
||||||
|
{
|
||||||
|
if (!sksigners)
|
||||||
|
sksigners = sk_OPENSSL_STRING_new_null();
|
||||||
|
sk_OPENSSL_STRING_push(sksigners, signerfile);
|
||||||
|
if (!skkeys)
|
||||||
|
skkeys = sk_OPENSSL_STRING_new_null();
|
||||||
|
if (!keyfile)
|
||||||
|
keyfile = signerfile;
|
||||||
|
sk_OPENSSL_STRING_push(skkeys, keyfile);
|
||||||
|
}
|
||||||
|
if (!sksigners)
|
||||||
|
{
|
||||||
BIO_printf(bio_err, "No signer certificate specified\n");
|
BIO_printf(bio_err, "No signer certificate specified\n");
|
||||||
badarg = 1;
|
badarg = 1;
|
||||||
}
|
}
|
||||||
|
signerfile = NULL;
|
||||||
|
keyfile = NULL;
|
||||||
need_rand = 1;
|
need_rand = 1;
|
||||||
} else if(operation == SMIME_DECRYPT) {
|
|
||||||
if(!recipfile) {
|
|
||||||
BIO_printf(bio_err, "No recipient certificate and key specified\n");
|
|
||||||
badarg = 1;
|
|
||||||
}
|
}
|
||||||
} else if(operation == SMIME_ENCRYPT) {
|
else if (operation == SMIME_DECRYPT)
|
||||||
if(!*args) {
|
{
|
||||||
|
if (!recipfile && !keyfile)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "No recipient certificate or key specified\n");
|
||||||
|
badarg = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (operation == SMIME_ENCRYPT)
|
||||||
|
{
|
||||||
|
if (!*args)
|
||||||
|
{
|
||||||
BIO_printf(bio_err, "No recipient(s) certificate(s) specified\n");
|
BIO_printf(bio_err, "No recipient(s) certificate(s) specified\n");
|
||||||
badarg = 1;
|
badarg = 1;
|
||||||
}
|
}
|
||||||
need_rand = 1;
|
need_rand = 1;
|
||||||
} else if(!operation) badarg = 1;
|
}
|
||||||
|
else if (!operation)
|
||||||
|
badarg = 1;
|
||||||
|
|
||||||
if (badarg) {
|
if (badarg)
|
||||||
|
{
|
||||||
|
argerr:
|
||||||
BIO_printf (bio_err, "Usage smime [options] cert.pem ...\n");
|
BIO_printf (bio_err, "Usage smime [options] cert.pem ...\n");
|
||||||
BIO_printf (bio_err, "where options are\n");
|
BIO_printf (bio_err, "where options are\n");
|
||||||
BIO_printf (bio_err, "-encrypt encrypt message\n");
|
BIO_printf (bio_err, "-encrypt encrypt message\n");
|
||||||
@@ -304,6 +440,9 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO_printf (bio_err, "-des3 encrypt with triple DES\n");
|
BIO_printf (bio_err, "-des3 encrypt with triple DES\n");
|
||||||
BIO_printf (bio_err, "-des encrypt with DES\n");
|
BIO_printf (bio_err, "-des encrypt with DES\n");
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_SEED
|
||||||
|
BIO_printf (bio_err, "-seed encrypt with SEED\n");
|
||||||
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC2
|
#ifndef OPENSSL_NO_RC2
|
||||||
BIO_printf (bio_err, "-rc2-40 encrypt with RC2-40 (default)\n");
|
BIO_printf (bio_err, "-rc2-40 encrypt with RC2-40 (default)\n");
|
||||||
BIO_printf (bio_err, "-rc2-64 encrypt with RC2-64\n");
|
BIO_printf (bio_err, "-rc2-64 encrypt with RC2-64\n");
|
||||||
@@ -312,6 +451,10 @@ int MAIN(int argc, char **argv)
|
|||||||
#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, " encrypt PEM output with cbc aes\n");
|
BIO_printf (bio_err, " encrypt PEM output with cbc aes\n");
|
||||||
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
|
BIO_printf (bio_err, "-camellia128, -camellia192, -camellia256\n");
|
||||||
|
BIO_printf (bio_err, " encrypt PEM output with cbc camellia\n");
|
||||||
#endif
|
#endif
|
||||||
BIO_printf (bio_err, "-nointern don't search certificates in message for signer\n");
|
BIO_printf (bio_err, "-nointern don't search certificates in message for signer\n");
|
||||||
BIO_printf (bio_err, "-nosigs don't verify message signature\n");
|
BIO_printf (bio_err, "-nosigs don't verify message signature\n");
|
||||||
@@ -347,121 +490,174 @@ int MAIN(int argc, char **argv)
|
|||||||
BIO_printf(bio_err, " the random number generator\n");
|
BIO_printf(bio_err, " the random number generator\n");
|
||||||
BIO_printf (bio_err, "cert.pem recipient certificate(s) for encryption\n");
|
BIO_printf (bio_err, "cert.pem recipient certificate(s) for encryption\n");
|
||||||
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, 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
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));
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = 2;
|
ret = 2;
|
||||||
|
|
||||||
if(operation != SMIME_SIGN) flags &= ~PKCS7_DETACHED;
|
if (!(operation & SMIME_SIGNERS))
|
||||||
|
flags &= ~PKCS7_DETACHED;
|
||||||
|
|
||||||
if(operation & SMIME_OP) {
|
if (operation & SMIME_OP)
|
||||||
if(flags & PKCS7_BINARY) inmode = "rb";
|
{
|
||||||
if(outformat == FORMAT_ASN1) outmode = "wb";
|
if (outformat == FORMAT_ASN1)
|
||||||
} else {
|
outmode = "wb";
|
||||||
if(flags & PKCS7_BINARY) outmode = "wb";
|
}
|
||||||
if(informat == FORMAT_ASN1) inmode = "rb";
|
else
|
||||||
}
|
{
|
||||||
|
if (flags & PKCS7_BINARY)
|
||||||
|
outmode = "wb";
|
||||||
|
}
|
||||||
|
|
||||||
if(operation == SMIME_ENCRYPT) {
|
if (operation & SMIME_IP)
|
||||||
if (!cipher) {
|
{
|
||||||
|
if (informat == FORMAT_ASN1)
|
||||||
|
inmode = "rb";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (flags & PKCS7_BINARY)
|
||||||
|
inmode = "rb";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (operation == SMIME_ENCRYPT)
|
||||||
|
{
|
||||||
|
if (!cipher)
|
||||||
|
{
|
||||||
#ifndef OPENSSL_NO_RC2
|
#ifndef OPENSSL_NO_RC2
|
||||||
cipher = EVP_rc2_40_cbc();
|
cipher = EVP_rc2_40_cbc();
|
||||||
#else
|
#else
|
||||||
BIO_printf(bio_err, "No cipher selected\n");
|
BIO_printf(bio_err, "No cipher selected\n");
|
||||||
goto end;
|
goto end;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
encerts = sk_X509_new_null();
|
encerts = sk_X509_new_null();
|
||||||
while (*args) {
|
while (*args)
|
||||||
if(!(cert = load_cert(bio_err,*args,FORMAT_PEM,
|
{
|
||||||
NULL, e, "recipient certificate file"))) {
|
if (!(cert = load_cert(bio_err,*args,FORMAT_PEM,
|
||||||
|
NULL, e, "recipient certificate file")))
|
||||||
|
{
|
||||||
#if 0 /* An appropriate message is already printed */
|
#if 0 /* An appropriate message is already printed */
|
||||||
BIO_printf(bio_err, "Can't read recipient certificate file %s\n", *args);
|
BIO_printf(bio_err, "Can't read recipient certificate file %s\n", *args);
|
||||||
#endif
|
#endif
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
sk_X509_push(encerts, cert);
|
sk_X509_push(encerts, cert);
|
||||||
cert = NULL;
|
cert = NULL;
|
||||||
args++;
|
args++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(signerfile && (operation == SMIME_SIGN)) {
|
if (certfile)
|
||||||
if(!(signer = load_cert(bio_err,signerfile,FORMAT_PEM, NULL,
|
{
|
||||||
e, "signer certificate"))) {
|
if (!(other = load_certs(bio_err,certfile,FORMAT_PEM, NULL,
|
||||||
#if 0 /* An appropri message has already been printed */
|
e, "certificate file")))
|
||||||
BIO_printf(bio_err, "Can't read signer certificate file %s\n", signerfile);
|
{
|
||||||
#endif
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(certfile) {
|
|
||||||
if(!(other = load_certs(bio_err,certfile,FORMAT_PEM, NULL,
|
|
||||||
e, "certificate file"))) {
|
|
||||||
#if 0 /* An appropriate message has already been printed */
|
|
||||||
BIO_printf(bio_err, "Can't read certificate file %s\n", certfile);
|
|
||||||
#endif
|
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(recipfile && (operation == SMIME_DECRYPT)) {
|
if (recipfile && (operation == SMIME_DECRYPT))
|
||||||
if(!(recip = load_cert(bio_err,recipfile,FORMAT_PEM,NULL,
|
{
|
||||||
e, "recipient certificate file"))) {
|
if (!(recip = load_cert(bio_err,recipfile,FORMAT_PEM,NULL,
|
||||||
#if 0 /* An appropriate message has alrady been printed */
|
e, "recipient certificate file")))
|
||||||
BIO_printf(bio_err, "Can't read recipient certificate file %s\n", recipfile);
|
{
|
||||||
#endif
|
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(operation == SMIME_DECRYPT) {
|
if (operation == SMIME_DECRYPT)
|
||||||
if(!keyfile) keyfile = recipfile;
|
{
|
||||||
} else if(operation == SMIME_SIGN) {
|
if (!keyfile)
|
||||||
if(!keyfile) keyfile = signerfile;
|
keyfile = recipfile;
|
||||||
} else keyfile = NULL;
|
}
|
||||||
|
else if (operation == SMIME_SIGN)
|
||||||
|
{
|
||||||
|
if (!keyfile)
|
||||||
|
keyfile = signerfile;
|
||||||
|
}
|
||||||
|
else keyfile = NULL;
|
||||||
|
|
||||||
if(keyfile) {
|
if (keyfile)
|
||||||
|
{
|
||||||
key = load_key(bio_err, keyfile, keyform, 0, passin, e,
|
key = load_key(bio_err, keyfile, keyform, 0, passin, e,
|
||||||
"signing key file");
|
"signing key file");
|
||||||
if (!key) {
|
if (!key)
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (infile) {
|
if (infile)
|
||||||
if (!(in = BIO_new_file(infile, inmode))) {
|
{
|
||||||
|
if (!(in = BIO_new_file(infile, inmode)))
|
||||||
|
{
|
||||||
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 in = BIO_new_fp(stdin, BIO_NOCLOSE);
|
else
|
||||||
|
in = BIO_new_fp(stdin, BIO_NOCLOSE);
|
||||||
|
|
||||||
if (outfile) {
|
if (operation & SMIME_IP)
|
||||||
if (!(out = BIO_new_file(outfile, outmode))) {
|
{
|
||||||
|
if (informat == FORMAT_SMIME)
|
||||||
|
p7 = SMIME_read_PKCS7(in, &indata);
|
||||||
|
else if (informat == FORMAT_PEM)
|
||||||
|
p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL);
|
||||||
|
else if (informat == FORMAT_ASN1)
|
||||||
|
p7 = d2i_PKCS7_bio(in, NULL);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Bad input format for PKCS#7 file\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!p7)
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Error reading S/MIME message\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (contfile)
|
||||||
|
{
|
||||||
|
BIO_free(indata);
|
||||||
|
if (!(indata = BIO_new_file(contfile, "rb")))
|
||||||
|
{
|
||||||
|
BIO_printf(bio_err, "Can't read content file %s\n", contfile);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (outfile)
|
||||||
|
{
|
||||||
|
if (!(out = BIO_new_file(outfile, outmode)))
|
||||||
|
{
|
||||||
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
|
||||||
{
|
{
|
||||||
@@ -469,100 +665,151 @@ int MAIN(int argc, char **argv)
|
|||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if(operation == SMIME_VERIFY) {
|
if (operation == SMIME_VERIFY)
|
||||||
if(!(store = setup_verify(bio_err, CAfile, CApath))) goto end;
|
{
|
||||||
X509_STORE_set_flags(store, store_flags);
|
if (!(store = setup_verify(bio_err, CAfile, CApath)))
|
||||||
}
|
goto end;
|
||||||
|
X509_STORE_set_verify_cb(store, smime_cb);
|
||||||
|
if (vpm)
|
||||||
|
X509_STORE_set1_param(store, vpm);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ret = 3;
|
ret = 3;
|
||||||
|
|
||||||
if(operation == SMIME_ENCRYPT) {
|
if (operation == SMIME_ENCRYPT)
|
||||||
|
{
|
||||||
|
if (indef)
|
||||||
|
flags |= PKCS7_STREAM;
|
||||||
p7 = PKCS7_encrypt(encerts, in, cipher, flags);
|
p7 = PKCS7_encrypt(encerts, in, cipher, flags);
|
||||||
} else if(operation == SMIME_SIGN) {
|
|
||||||
p7 = PKCS7_sign(signer, key, other, in, flags);
|
|
||||||
if (BIO_reset(in) != 0 && (flags & PKCS7_DETACHED)) {
|
|
||||||
BIO_printf(bio_err, "Can't rewind input file\n");
|
|
||||||
goto end;
|
|
||||||
}
|
}
|
||||||
} else {
|
else if (operation & SMIME_SIGNERS)
|
||||||
if(informat == FORMAT_SMIME)
|
{
|
||||||
p7 = SMIME_read_PKCS7(in, &indata);
|
int i;
|
||||||
else if(informat == FORMAT_PEM)
|
/* If detached data content we only enable streaming if
|
||||||
p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL);
|
* S/MIME output format.
|
||||||
else if(informat == FORMAT_ASN1)
|
*/
|
||||||
p7 = d2i_PKCS7_bio(in, NULL);
|
if (operation == SMIME_SIGN)
|
||||||
else {
|
{
|
||||||
BIO_printf(bio_err, "Bad input format for PKCS#7 file\n");
|
if (flags & PKCS7_DETACHED)
|
||||||
goto end;
|
{
|
||||||
}
|
if (outformat == FORMAT_SMIME)
|
||||||
|
flags |= PKCS7_STREAM;
|
||||||
if(!p7) {
|
}
|
||||||
BIO_printf(bio_err, "Error reading S/MIME message\n");
|
else if (indef)
|
||||||
goto end;
|
flags |= PKCS7_STREAM;
|
||||||
}
|
flags |= PKCS7_PARTIAL;
|
||||||
if(contfile) {
|
p7 = PKCS7_sign(NULL, NULL, other, in, flags);
|
||||||
BIO_free(indata);
|
if (!p7)
|
||||||
if(!(indata = BIO_new_file(contfile, "rb"))) {
|
goto end;
|
||||||
BIO_printf(bio_err, "Can't read content file %s\n", contfile);
|
}
|
||||||
|
else
|
||||||
|
flags |= PKCS7_REUSE_DIGEST;
|
||||||
|
for (i = 0; i < sk_OPENSSL_STRING_num(sksigners); i++)
|
||||||
|
{
|
||||||
|
signerfile = sk_OPENSSL_STRING_value(sksigners, i);
|
||||||
|
keyfile = sk_OPENSSL_STRING_value(skkeys, i);
|
||||||
|
signer = load_cert(bio_err, signerfile,FORMAT_PEM, NULL,
|
||||||
|
e, "signer certificate");
|
||||||
|
if (!signer)
|
||||||
|
goto end;
|
||||||
|
key = load_key(bio_err, keyfile, keyform, 0, passin, e,
|
||||||
|
"signing key file");
|
||||||
|
if (!key)
|
||||||
|
goto end;
|
||||||
|
if (!PKCS7_sign_add_signer(p7, signer, key,
|
||||||
|
sign_md, flags))
|
||||||
|
goto end;
|
||||||
|
X509_free(signer);
|
||||||
|
signer = NULL;
|
||||||
|
EVP_PKEY_free(key);
|
||||||
|
key = NULL;
|
||||||
|
}
|
||||||
|
/* If not streaming or resigning finalize structure */
|
||||||
|
if ((operation == SMIME_SIGN) && !(flags & PKCS7_STREAM))
|
||||||
|
{
|
||||||
|
if (!PKCS7_final(p7, in, flags))
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(!p7) {
|
if (!p7)
|
||||||
|
{
|
||||||
BIO_printf(bio_err, "Error creating PKCS#7 structure\n");
|
BIO_printf(bio_err, "Error creating PKCS#7 structure\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = 4;
|
ret = 4;
|
||||||
if(operation == SMIME_DECRYPT) {
|
if (operation == SMIME_DECRYPT)
|
||||||
if(!PKCS7_decrypt(p7, key, recip, out, flags)) {
|
{
|
||||||
|
if (!PKCS7_decrypt(p7, key, recip, out, flags))
|
||||||
|
{
|
||||||
BIO_printf(bio_err, "Error decrypting PKCS#7 structure\n");
|
BIO_printf(bio_err, "Error decrypting PKCS#7 structure\n");
|
||||||
goto end;
|
goto end;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if(operation == SMIME_VERIFY) {
|
else if (operation == SMIME_VERIFY)
|
||||||
|
{
|
||||||
STACK_OF(X509) *signers;
|
STACK_OF(X509) *signers;
|
||||||
if(PKCS7_verify(p7, other, store, indata, out, flags)) {
|
if (PKCS7_verify(p7, other, store, indata, out, flags))
|
||||||
BIO_printf(bio_err, "Verification successful\n");
|
BIO_printf(bio_err, "Verification successful\n");
|
||||||
} else {
|
else
|
||||||
|
{
|
||||||
BIO_printf(bio_err, "Verification failure\n");
|
BIO_printf(bio_err, "Verification failure\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
signers = PKCS7_get0_signers(p7, other, flags);
|
signers = PKCS7_get0_signers(p7, other, flags);
|
||||||
if(!save_certs(signerfile, signers)) {
|
if (!save_certs(signerfile, signers))
|
||||||
|
{
|
||||||
BIO_printf(bio_err, "Error writing signers to %s\n",
|
BIO_printf(bio_err, "Error writing signers to %s\n",
|
||||||
signerfile);
|
signerfile);
|
||||||
ret = 5;
|
ret = 5;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
sk_X509_free(signers);
|
sk_X509_free(signers);
|
||||||
} else if(operation == SMIME_PK7OUT) {
|
}
|
||||||
|
else if (operation == SMIME_PK7OUT)
|
||||||
PEM_write_bio_PKCS7(out, p7);
|
PEM_write_bio_PKCS7(out, p7);
|
||||||
} else {
|
else
|
||||||
if(to) BIO_printf(out, "To: %s\n", to);
|
{
|
||||||
if(from) BIO_printf(out, "From: %s\n", from);
|
if (to)
|
||||||
if(subject) BIO_printf(out, "Subject: %s\n", subject);
|
BIO_printf(out, "To: %s\n", to);
|
||||||
if(outformat == FORMAT_SMIME)
|
if (from)
|
||||||
SMIME_write_PKCS7(out, p7, in, flags);
|
BIO_printf(out, "From: %s\n", from);
|
||||||
else if(outformat == FORMAT_PEM)
|
if (subject)
|
||||||
PEM_write_bio_PKCS7(out,p7);
|
BIO_printf(out, "Subject: %s\n", subject);
|
||||||
else if(outformat == FORMAT_ASN1)
|
if (outformat == FORMAT_SMIME)
|
||||||
i2d_PKCS7_bio(out,p7);
|
{
|
||||||
else {
|
if (operation == SMIME_RESIGN)
|
||||||
|
SMIME_write_PKCS7(out, p7, indata, flags);
|
||||||
|
else
|
||||||
|
SMIME_write_PKCS7(out, p7, in, flags);
|
||||||
|
}
|
||||||
|
else if (outformat == FORMAT_PEM)
|
||||||
|
PEM_write_bio_PKCS7_stream(out, p7, in, flags);
|
||||||
|
else if (outformat == FORMAT_ASN1)
|
||||||
|
i2d_PKCS7_bio_stream(out,p7, in, flags);
|
||||||
|
else
|
||||||
|
{
|
||||||
BIO_printf(bio_err, "Bad output format for PKCS#7 file\n");
|
BIO_printf(bio_err, "Bad output format for PKCS#7 file\n");
|
||||||
goto end;
|
goto end;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
end:
|
end:
|
||||||
if (need_rand)
|
if (need_rand)
|
||||||
app_RAND_write_file(NULL, bio_err);
|
app_RAND_write_file(NULL, bio_err);
|
||||||
if(ret) ERR_print_errors(bio_err);
|
if (ret) ERR_print_errors(bio_err);
|
||||||
sk_X509_pop_free(encerts, X509_free);
|
sk_X509_pop_free(encerts, X509_free);
|
||||||
sk_X509_pop_free(other, X509_free);
|
sk_X509_pop_free(other, X509_free);
|
||||||
|
if (vpm)
|
||||||
|
X509_VERIFY_PARAM_free(vpm);
|
||||||
|
if (sksigners)
|
||||||
|
sk_OPENSSL_STRING_free(sksigners);
|
||||||
|
if (skkeys)
|
||||||
|
sk_OPENSSL_STRING_free(skkeys);
|
||||||
X509_STORE_free(store);
|
X509_STORE_free(store);
|
||||||
X509_free(cert);
|
X509_free(cert);
|
||||||
X509_free(recip);
|
X509_free(recip);
|
||||||
@@ -572,20 +819,39 @@ end:
|
|||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
BIO_free(indata);
|
BIO_free(indata);
|
||||||
BIO_free_all(out);
|
BIO_free_all(out);
|
||||||
if(passin) OPENSSL_free(passin);
|
if (passin) OPENSSL_free(passin);
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int save_certs(char *signerfile, STACK_OF(X509) *signers)
|
static int save_certs(char *signerfile, STACK_OF(X509) *signers)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
BIO *tmp;
|
BIO *tmp;
|
||||||
if(!signerfile) return 1;
|
if (!signerfile)
|
||||||
|
return 1;
|
||||||
tmp = BIO_new_file(signerfile, "w");
|
tmp = BIO_new_file(signerfile, "w");
|
||||||
if(!tmp) return 0;
|
if (!tmp) return 0;
|
||||||
for(i = 0; i < sk_X509_num(signers); i++)
|
for(i = 0; i < sk_X509_num(signers); i++)
|
||||||
PEM_write_bio_X509(tmp, sk_X509_value(signers, i));
|
PEM_write_bio_X509(tmp, sk_X509_value(signers, i));
|
||||||
BIO_free(tmp);
|
BIO_free(tmp);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Minimal callback just to output policy info (if any) */
|
||||||
|
|
||||||
|
static int smime_cb(int ok, X509_STORE_CTX *ctx)
|
||||||
|
{
|
||||||
|
int error;
|
||||||
|
|
||||||
|
error = X509_STORE_CTX_get_error(ctx);
|
||||||
|
|
||||||
|
if ((error != X509_V_ERR_NO_EXPLICIT_POLICY)
|
||||||
|
&& ((error != X509_V_OK) || (ok != 2)))
|
||||||
|
return ok;
|
||||||
|
|
||||||
|
policies_print(NULL, ctx);
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
1354
apps/speed.c
1354
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