Compare commits
	
		
			1827 Commits
		
	
	
		
			OpenSSL_1_
			...
			OpenSSL-fi
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					34f39b062c | ||
| 
						 | 
					6db8e3bdc9 | ||
| 
						 | 
					50e2a0ea46 | ||
| 
						 | 
					3f137e6f1d | ||
| 
						 | 
					97fbb0c88c | ||
| 
						 | 
					5837e90f08 | ||
| 
						 | 
					874faf2ffb | ||
| 
						 | 
					0b45df73d2 | ||
| 
						 | 
					2bd3976ed0 | ||
| 
						 | 
					c6d109051d | ||
| 
						 | 
					083ed53def | ||
| 
						 | 
					b84813ec01 | ||
| 
						 | 
					7447e65fcc | ||
| 
						 | 
					60cd2b7206 | ||
| 
						 | 
					7fb7844f3b | ||
| 
						 | 
					005563bbce | ||
| 
						 | 
					3b43568d5b | ||
| 
						 | 
					2659a2aa7c | ||
| 
						 | 
					200f249b8c | ||
| 
						 | 
					4089bd6080 | ||
| 
						 | 
					baab0cf780 | ||
| 
						 | 
					7e98d95f56 | ||
| 
						 | 
					b0ee17ad47 | ||
| 
						 | 
					4f6c4c1896 | ||
| 
						 | 
					2d183e4c44 | ||
| 
						 | 
					7049d13c5f | ||
| 
						 | 
					c616200172 | ||
| 
						 | 
					7b899c10cd | ||
| 
						 | 
					6b2e340bdd | ||
| 
						 | 
					1de6a62222 | ||
| 
						 | 
					ac381944ac | ||
| 
						 | 
					24fadf2a20 | ||
| 
						 | 
					409abd2fec | ||
| 
						 | 
					421de62232 | ||
| 
						 | 
					c567812fa6 | ||
| 
						 | 
					49dbcbaa4b | ||
| 
						 | 
					df0884ffb7 | ||
| 
						 | 
					0e480d5553 | ||
| 
						 | 
					7c0d30038f | ||
| 
						 | 
					81fc8cd029 | ||
| 
						 | 
					1d235039d6 | ||
| 
						 | 
					58886fdefc | ||
| 
						 | 
					61c3085d47 | ||
| 
						 | 
					32b56fe4d2 | ||
| 
						 | 
					efd031abca | ||
| 
						 | 
					dd4eefdb7b | ||
| 
						 | 
					fcd3e8e97b | ||
| 
						 | 
					476e7e4972 | ||
| 
						 | 
					5e900f3cef | ||
| 
						 | 
					75b250a4ed | ||
| 
						 | 
					44cb365eaf | ||
| 
						 | 
					9bd2dde42f | ||
| 
						 | 
					31bf5f13e0 | ||
| 
						 | 
					7dcdc0d94d | ||
| 
						 | 
					6ecd287acc | ||
| 
						 | 
					0e508c12e0 | ||
| 
						 | 
					f6385248f6 | ||
| 
						 | 
					52876c3100 | ||
| 
						 | 
					c08128acc2 | ||
| 
						 | 
					901b9b5c36 | ||
| 
						 | 
					9eca2399f1 | ||
| 
						 | 
					3b4fb53221 | ||
| 
						 | 
					7437036cdf | ||
| 
						 | 
					ffa76736fa | ||
| 
						 | 
					cbed6cfcaa | ||
| 
						 | 
					be6dc7e56b | ||
| 
						 | 
					bb25a72881 | ||
| 
						 | 
					1562ce17cb | ||
| 
						 | 
					68b2f55b90 | ||
| 
						 | 
					79f2c9d1cd | ||
| 
						 | 
					8a794abd9d | ||
| 
						 | 
					03eae35352 | ||
| 
						 | 
					df64f34e84 | ||
| 
						 | 
					21a5cb2696 | ||
| 
						 | 
					01fc2c1598 | ||
| 
						 | 
					04c8062636 | ||
| 
						 | 
					6fcc2bbce8 | ||
| 
						 | 
					f2b0cf9178 | ||
| 
						 | 
					485ef852ac | ||
| 
						 | 
					b7de76b74d | ||
| 
						 | 
					8ab0d50c43 | ||
| 
						 | 
					cb47a7107f | ||
| 
						 | 
					d5939062d7 | ||
| 
						 | 
					8b8096d082 | ||
| 
						 | 
					9ab6d6813e | ||
| 
						 | 
					45e5f551ac | ||
| 
						 | 
					51035e733c | ||
| 
						 | 
					319c7264b0 | ||
| 
						 | 
					0684e77866 | ||
| 
						 | 
					f2784994ec | ||
| 
						 | 
					507b0d9d38 | ||
| 
						 | 
					181fbb77f3 | ||
| 
						 | 
					f59a5d6079 | ||
| 
						 | 
					005cdace99 | ||
| 
						 | 
					8b8d2dccf1 | ||
| 
						 | 
					5fd722600b | ||
| 
						 | 
					5b198d5eea | ||
| 
						 | 
					16190a71ff | ||
| 
						 | 
					8d742dd561 | ||
| 
						 | 
					0cde099f86 | ||
| 
						 | 
					dfe9a47519 | ||
| 
						 | 
					af4bfa151c | ||
| 
						 | 
					3b5930442d | ||
| 
						 | 
					033a25cef5 | ||
| 
						 | 
					43760a2cf0 | ||
| 
						 | 
					5f132a0356 | ||
| 
						 | 
					d528caa725 | ||
| 
						 | 
					d22870bc00 | ||
| 
						 | 
					4ff2999e88 | ||
| 
						 | 
					5e4eb9954b | ||
| 
						 | 
					227a822ab6 | ||
| 
						 | 
					a9cf0b81fa | ||
| 
						 | 
					552e412abc | ||
| 
						 | 
					3ee4d41fe1 | ||
| 
						 | 
					f391750205 | ||
| 
						 | 
					e5641d7f05 | ||
| 
						 | 
					6d4c65835d | ||
| 
						 | 
					0a7fcce8df | ||
| 
						 | 
					6b0ac883d0 | ||
| 
						 | 
					7d8bb91233 | ||
| 
						 | 
					e0d6132b8c | ||
| 
						 | 
					e3fed9f41e | ||
| 
						 | 
					3e00b4c9db | ||
| 
						 | 
					4c3a7a0263 | ||
| 
						 | 
					10db9f9f48 | ||
| 
						 | 
					9f0d2e1464 | ||
| 
						 | 
					5d77cdc591 | ||
| 
						 | 
					07904e0c6c | ||
| 
						 | 
					4010b341b7 | ||
| 
						 | 
					5a326467dc | ||
| 
						 | 
					3b7c14bb90 | ||
| 
						 | 
					e2473dcc7d | ||
| 
						 | 
					1db4a63bc3 | ||
| 
						 | 
					78f288d5c9 | ||
| 
						 | 
					8329e2e776 | ||
| 
						 | 
					3f66f2040a | ||
| 
						 | 
					2534891874 | ||
| 
						 | 
					79ba545c09 | ||
| 
						 | 
					993adc0531 | ||
| 
						 | 
					bc1b04d255 | ||
| 
						 | 
					8fcdb1e60f | ||
| 
						 | 
					e1db7c4e7a | ||
| 
						 | 
					ffbfbef943 | ||
| 
						 | 
					1fb2e0f940 | ||
| 
						 | 
					41a846c694 | ||
| 
						 | 
					3335b6f265 | ||
| 
						 | 
					027026df9f | ||
| 
						 | 
					9ee5916d97 | ||
| 
						 | 
					af9b610cef | ||
| 
						 | 
					8bfc6479a8 | ||
| 
						 | 
					4f2015742d | ||
| 
						 | 
					0a06ad76a1 | ||
| 
						 | 
					bf6d2f986d | ||
| 
						 | 
					9d74befd23 | ||
| 
						 | 
					8b37d33a94 | ||
| 
						 | 
					3ddc06f082 | ||
| 
						 | 
					cdfe0fdde6 | ||
| 
						 | 
					5936521495 | ||
| 
						 | 
					35882b60d8 | ||
| 
						 | 
					ce01482e0f | ||
| 
						 | 
					7fc78f11e8 | ||
| 
						 | 
					98bc806749 | ||
| 
						 | 
					a2b6dc97f6 | ||
| 
						 | 
					df36faaaa2 | ||
| 
						 | 
					e15acd9d9e | ||
| 
						 | 
					a854818ea9 | ||
| 
						 | 
					c1f63b5cb3 | ||
| 
						 | 
					cf61940534 | ||
| 
						 | 
					dafd5b5d74 | ||
| 
						 | 
					6c8ce3c2ff | ||
| 
						 | 
					3231e42d72 | ||
| 
						 | 
					cd366cf7ec | ||
| 
						 | 
					a59163f6b6 | ||
| 
						 | 
					fe4394cf1d | ||
| 
						 | 
					84a75ba38c | ||
| 
						 | 
					eb47b2fb13 | ||
| 
						 | 
					a0f21307e0 | ||
| 
						 | 
					7d7c13cbab | ||
| 
						 | 
					0feb83e222 | ||
| 
						 | 
					ccbb9badba | ||
| 
						 | 
					42753a4f67 | ||
| 
						 | 
					b1d3e9de63 | ||
| 
						 | 
					7bd4095b12 | ||
| 
						 | 
					58b75e9c26 | ||
| 
						 | 
					08d62e9f1a | ||
| 
						 | 
					549cd657fd | ||
| 
						 | 
					43206a2d7c | ||
| 
						 | 
					6dd547398a | ||
| 
						 | 
					66bb328e11 | ||
| 
						 | 
					50452b2e60 | ||
| 
						 | 
					d18762f7c9 | ||
| 
						 | 
					149ca7128c | ||
| 
						 | 
					4cc2bbab67 | ||
| 
						 | 
					04c3aa5c1a | ||
| 
						 | 
					3edc26a256 | ||
| 
						 | 
					10465aca60 | ||
| 
						 | 
					3f1ebb8f42 | ||
| 
						 | 
					2bfeb7dc83 | ||
| 
						 | 
					55831cd6ee | ||
| 
						 | 
					884c33b5c4 | ||
| 
						 | 
					54bb3f68e1 | ||
| 
						 | 
					112726486d | ||
| 
						 | 
					fca38e350b | ||
| 
						 | 
					a846a7ff32 | ||
| 
						 | 
					bac3db9cc1 | ||
| 
						 | 
					4ec93a10bd | ||
| 
						 | 
					d18a0df0a6 | ||
| 
						 | 
					1579e65604 | ||
| 
						 | 
					c2035bffe7 | ||
| 
						 | 
					1d7392f219 | ||
| 
						 | 
					07dda896cb | ||
| 
						 | 
					af70f1a35d | ||
| 
						 | 
					ddf00ffab8 | ||
| 
						 | 
					cb71870dfa | ||
| 
						 | 
					456d883a25 | ||
| 
						 | 
					d57cc97f24 | ||
| 
						 | 
					05272d4c51 | ||
| 
						 | 
					4420b3b17a | ||
| 
						 | 
					e74ac3f830 | ||
| 
						 | 
					a5799bdc48 | ||
| 
						 | 
					2b1f17f83f | ||
| 
						 | 
					7470276a25 | ||
| 
						 | 
					d2fd65f6f6 | ||
| 
						 | 
					819cf4b886 | ||
| 
						 | 
					45fcfcb99f | ||
| 
						 | 
					e248740d67 | ||
| 
						 | 
					b63698b70d | ||
| 
						 | 
					8ca28da0a7 | ||
| 
						 | 
					b889a6046b | ||
| 
						 | 
					00b0f2cb3e | ||
| 
						 | 
					03e389cf04 | ||
| 
						 | 
					93256bf5d1 | ||
| 
						 | 
					d47d0d2b0d | ||
| 
						 | 
					15094852de | ||
| 
						 | 
					a11f06b2dc | ||
| 
						 | 
					361d18a208 | ||
| 
						 | 
					de2132de93 | ||
| 
						 | 
					9e56c99e1a | ||
| 
						 | 
					543dfa9f0e | ||
| 
						 | 
					a87ff751b7 | ||
| 
						 | 
					288fe07a6e | ||
| 
						 | 
					7fdcb45745 | ||
| 
						 | 
					e4588dc486 | ||
| 
						 | 
					d98360392a | ||
| 
						 | 
					33987f2f45 | ||
| 
						 | 
					bbb19418e6 | ||
| 
						 | 
					ed28aef8b4 | ||
| 
						 | 
					0486cce653 | ||
| 
						 | 
					0f8d4d49dc | ||
| 
						 | 
					f952716745 | ||
| 
						 | 
					dd83d0f4a7 | ||
| 
						 | 
					ea17b0feec | ||
| 
						 | 
					7634137b8a | ||
| 
						 | 
					2c472780c0 | ||
| 
						 | 
					c519e89f5c | ||
| 
						 | 
					612fcfbd29 | ||
| 
						 | 
					e7928282d0 | ||
| 
						 | 
					837e1b6812 | ||
| 
						 | 
					ae53b299fa | ||
| 
						 | 
					03a64ef56d | ||
| 
						 | 
					f0ecb86666 | ||
| 
						 | 
					acb4ab34a4 | ||
| 
						 | 
					74c40744ca | ||
| 
						 | 
					1567b3904c | ||
| 
						 | 
					06e771b580 | ||
| 
						 | 
					eb9e63df61 | ||
| 
						 | 
					fa85c1dbf5 | ||
| 
						 | 
					a60cc6b4f0 | ||
| 
						 | 
					2c1f5ce4b1 | ||
| 
						 | 
					c41b505459 | ||
| 
						 | 
					74e056edbc | ||
| 
						 | 
					ff7231043f | ||
| 
						 | 
					5e92fd244c | ||
| 
						 | 
					d41ce00b8c | ||
| 
						 | 
					04485c5bc0 | ||
| 
						 | 
					d77a970669 | ||
| 
						 | 
					f7924634d4 | ||
| 
						 | 
					d3f6a5a01d | ||
| 
						 | 
					d35c284b73 | ||
| 
						 | 
					00220f8111 | ||
| 
						 | 
					cfdbff23ab | ||
| 
						 | 
					f7eb0ab9ac | ||
| 
						 | 
					2abaa9caaf | ||
| 
						 | 
					f55f5f775e | ||
| 
						 | 
					7daf0efad9 | ||
| 
						 | 
					edd4d402c6 | ||
| 
						 | 
					e6133727fb | ||
| 
						 | 
					c608171d9c | ||
| 
						 | 
					c2d4c2867b | ||
| 
						 | 
					46883b67de | ||
| 
						 | 
					6c01cbb6a0 | ||
| 
						 | 
					c20de0386a | ||
| 
						 | 
					eea98320a0 | ||
| 
						 | 
					4c1d92c56f | ||
| 
						 | 
					d341e40264 | ||
| 
						 | 
					142625b534 | ||
| 
						 | 
					7cbab63f5a | ||
| 
						 | 
					9015ee1826 | ||
| 
						 | 
					1f59a84308 | ||
| 
						 | 
					bf3dfe7fee | ||
| 
						 | 
					e7d1363d12 | ||
| 
						 | 
					f744bcfd73 | ||
| 
						 | 
					10bd69bf4f | ||
| 
						 | 
					ae8b47f07f | ||
| 
						 | 
					272ba87017 | ||
| 
						 | 
					361512da0d | ||
| 
						 | 
					20735f4c81 | ||
| 
						 | 
					ab1ec69843 | ||
| 
						 | 
					19ad345739 | ||
| 
						 | 
					513e28c0a4 | ||
| 
						 | 
					7f06921eca | ||
| 
						 | 
					37f010e248 | ||
| 
						 | 
					85ec54a417 | ||
| 
						 | 
					20f12e63ff | ||
| 
						 | 
					b38fd40db4 | ||
| 
						 | 
					8d7fbd021b | ||
| 
						 | 
					49e9b97885 | ||
| 
						 | 
					267b481c47 | ||
| 
						 | 
					8a8cc84f74 | ||
| 
						 | 
					28dd49faec | ||
| 
						 | 
					3699ec6056 | ||
| 
						 | 
					a678580bb8 | ||
| 
						 | 
					fe8aeffa92 | ||
| 
						 | 
					31475a370c | ||
| 
						 | 
					d09677ac45 | ||
| 
						 | 
					2667162d33 | ||
| 
						 | 
					66b86a4fd5 | ||
| 
						 | 
					1d5121552d | ||
| 
						 | 
					057037e719 | ||
| 
						 | 
					b7724f6f55 | ||
| 
						 | 
					167cb62537 | ||
| 
						 | 
					4f275f248e | ||
| 
						 | 
					1ad2e14aaa | ||
| 
						 | 
					7b41f350d4 | ||
| 
						 | 
					be9a8cc2af | ||
| 
						 | 
					dafce90ae5 | ||
| 
						 | 
					0445ab3ae0 | ||
| 
						 | 
					bb48f4ce6e | ||
| 
						 | 
					9df286b13a | ||
| 
						 | 
					81c2920849 | ||
| 
						 | 
					87873f4328 | ||
| 
						 | 
					9fe51d5f73 | ||
| 
						 | 
					b79853c262 | ||
| 
						 | 
					b429c4cbb9 | ||
| 
						 | 
					2966c2ec31 | ||
| 
						 | 
					4195a369fd | ||
| 
						 | 
					146e1fc7b3 | ||
| 
						 | 
					7532071aa3 | ||
| 
						 | 
					a355cf9bf5 | ||
| 
						 | 
					735ebc2de7 | ||
| 
						 | 
					b520e4b1d5 | ||
| 
						 | 
					449f2517c6 | ||
| 
						 | 
					6179f06077 | ||
| 
						 | 
					01a9a7592e | ||
| 
						 | 
					6fa4c7c43b | ||
| 
						 | 
					169a274a41 | ||
| 
						 | 
					02a73e2bed | ||
| 
						 | 
					c540aa2fb1 | ||
| 
						 | 
					eca7358be3 | ||
| 
						 | 
					da5e9871e9 | ||
| 
						 | 
					94c64f9a1c | ||
| 
						 | 
					1f77a27c16 | ||
| 
						 | 
					e780b5f1f1 | ||
| 
						 | 
					01f06617b1 | ||
| 
						 | 
					be6ddecb8b | ||
| 
						 | 
					450853cd04 | ||
| 
						 | 
					5a0876cb8c | ||
| 
						 | 
					a908b711ac | ||
| 
						 | 
					2036c9a59a | ||
| 
						 | 
					b247f7387f | ||
| 
						 | 
					bdd454973d | ||
| 
						 | 
					12b1b9a4fa | ||
| 
						 | 
					0c237e42a4 | ||
| 
						 | 
					0772f3b4f6 | ||
| 
						 | 
					0a9a692e4e | ||
| 
						 | 
					fc30530402 | ||
| 
						 | 
					a96b90b66b | ||
| 
						 | 
					d1a70cc9eb | ||
| 
						 | 
					9fa8f3a610 | ||
| 
						 | 
					dbfa236977 | ||
| 
						 | 
					419989d2ec | ||
| 
						 | 
					021270af37 | ||
| 
						 | 
					ab688c234d | ||
| 
						 | 
					9a4be82388 | ||
| 
						 | 
					861a7e5c9f | ||
| 
						 | 
					8038e7e44c | ||
| 
						 | 
					b507284c7e | ||
| 
						 | 
					cb551bfab7 | ||
| 
						 | 
					2d9fda6241 | ||
| 
						 | 
					ce02589259 | ||
| 
						 | 
					93dd7d3848 | ||
| 
						 | 
					a52b7b44b2 | ||
| 
						 | 
					ff053fc847 | ||
| 
						 | 
					279a0001b6 | ||
| 
						 | 
					af17d99245 | ||
| 
						 | 
					ee033faa43 | ||
| 
						 | 
					9ebc37e667 | ||
| 
						 | 
					a2ab6986e4 | ||
| 
						 | 
					0b41fcc2cb | ||
| 
						 | 
					6cdcb92513 | ||
| 
						 | 
					9945b460e2 | ||
| 
						 | 
					b234848879 | ||
| 
						 | 
					fdb65c836c | ||
| 
						 | 
					c3de647e7d | ||
| 
						 | 
					e66cb363d6 | ||
| 
						 | 
					70051b1d88 | ||
| 
						 | 
					bd6386f59c | ||
| 
						 | 
					1d55dd86dd | ||
| 
						 | 
					38f90d06d7 | ||
| 
						 | 
					19cd2049f7 | ||
| 
						 | 
					b08e372bf6 | ||
| 
						 | 
					0435dc1902 | ||
| 
						 | 
					e6e7b4e825 | ||
| 
						 | 
					f41154b206 | ||
| 
						 | 
					3096d53b46 | ||
| 
						 | 
					068291cd44 | ||
| 
						 | 
					a1a8a71cf7 | ||
| 
						 | 
					603bc9395c | ||
| 
						 | 
					da9234130a | ||
| 
						 | 
					ca9335760b | ||
| 
						 | 
					4960411e1f | ||
| 
						 | 
					6b6abd627c | ||
| 
						 | 
					7eabad423c | ||
| 
						 | 
					7f0d1be3a6 | ||
| 
						 | 
					1c13c122d8 | ||
| 
						 | 
					644ce07ecd | ||
| 
						 | 
					17f121de9d | ||
| 
						 | 
					4d01f2761d | ||
| 
						 | 
					301799b803 | ||
| 
						 | 
					8d515259e2 | ||
| 
						 | 
					4f8f8bf3a4 | ||
| 
						 | 
					b8b90804b6 | ||
| 
						 | 
					549c4ad35b | ||
| 
						 | 
					267229b141 | ||
| 
						 | 
					946f57105f | ||
| 
						 | 
					2280dc7c43 | ||
| 
						 | 
					0cabe4e172 | ||
| 
						 | 
					b6df360b9e | ||
| 
						 | 
					e7ee10d3dc | ||
| 
						 | 
					bce1af7762 | ||
| 
						 | 
					654ac273c1 | ||
| 
						 | 
					8f119a0357 | ||
| 
						 | 
					06843f826f | ||
| 
						 | 
					1b2047c5c0 | ||
| 
						 | 
					eda3766b53 | ||
| 
						 | 
					62b6c5c404 | ||
| 
						 | 
					e76cbcf686 | ||
| 
						 | 
					d1fff483d6 | ||
| 
						 | 
					8da721ee2b | ||
| 
						 | 
					3e2e231852 | ||
| 
						 | 
					87829ac926 | ||
| 
						 | 
					fe9a5107be | ||
| 
						 | 
					afa4b38671 | ||
| 
						 | 
					18f5603c53 | ||
| 
						 | 
					0c149802a2 | ||
| 
						 | 
					c33066900c | ||
| 
						 | 
					f87ff24bc4 | ||
| 
						 | 
					cf3aeae419 | ||
| 
						 | 
					9a205e5981 | ||
| 
						 | 
					f44cb15fab | ||
| 
						 | 
					986289604e | ||
| 
						 | 
					4bb90087d7 | ||
| 
						 | 
					6715034002 | ||
| 
						 | 
					0ca9a483af | ||
| 
						 | 
					0dff8ba248 | ||
| 
						 | 
					eb62cd807b | ||
| 
						 | 
					64f5178d67 | ||
| 
						 | 
					e558c2aa3f | ||
| 
						 | 
					ed0a35f222 | ||
| 
						 | 
					2bc3ad28b3 | ||
| 
						 | 
					d67813f878 | ||
| 
						 | 
					ecfe2d1753 | ||
| 
						 | 
					ebc5e72fe5 | ||
| 
						 | 
					3d52f1d52b | ||
| 
						 | 
					fd60dfa0f2 | ||
| 
						 | 
					be1242cbd1 | ||
| 
						 | 
					a26e245ecd | ||
| 
						 | 
					992bdde62d | ||
| 
						 | 
					bbcf3a9b30 | ||
| 
						 | 
					006b54a8eb | ||
| 
						 | 
					44ddb27fa6 | ||
| 
						 | 
					7832d6ab1c | ||
| 
						 | 
					ee4b5cebef | ||
| 
						 | 
					238b63613b | ||
| 
						 | 
					87f6b97e89 | ||
| 
						 | 
					6a99984b57 | ||
| 
						 | 
					67d8487bb8 | ||
| 
						 | 
					760d2551fb | ||
| 
						 | 
					73ab341130 | ||
| 
						 | 
					62f29eb1cf | ||
| 
						 | 
					f8501464cc | ||
| 
						 | 
					96abea332c | ||
| 
						 | 
					2e75ed332f | ||
| 
						 | 
					d8ea368c41 | ||
| 
						 | 
					fdf6dac859 | ||
| 
						 | 
					f37f20ffd3 | ||
| 
						 | 
					101e6e19f2 | ||
| 
						 | 
					086e32a6c7 | ||
| 
						 | 
					05b4fc6c22 | ||
| 
						 | 
					0fba7a8fa8 | ||
| 
						 | 
					92b4d936cb | ||
| 
						 | 
					4f7533eb84 | ||
| 
						 | 
					fb2f3411ea | ||
| 
						 | 
					c30a2505e2 | ||
| 
						 | 
					c7b903e01d | ||
| 
						 | 
					ddc20d4da9 | ||
| 
						 | 
					b50842036f | ||
| 
						 | 
					b906422149 | ||
| 
						 | 
					a3e07010b4 | ||
| 
						 | 
					9c437e2fad | ||
| 
						 | 
					2b9a8ca15b | ||
| 
						 | 
					afebe623c5 | ||
| 
						 | 
					b5c6aab57e | ||
| 
						 | 
					b9b0a177f8 | ||
| 
						 | 
					9609ea869d | ||
| 
						 | 
					ff636340f5 | ||
| 
						 | 
					3ece592886 | ||
| 
						 | 
					a75829deef | ||
| 
						 | 
					d39c495130 | ||
| 
						 | 
					855a54a9a5 | ||
| 
						 | 
					8f82912460 | ||
| 
						 | 
					f76b1baf86 | ||
| 
						 | 
					b1d00b9611 | ||
| 
						 | 
					c76e024dde | ||
| 
						 | 
					4f7a2ab8b1 | ||
| 
						 | 
					b0188c4f07 | ||
| 
						 | 
					f24e95b72c | ||
| 
						 | 
					fc101f88b6 | ||
| 
						 | 
					2f38b38986 | ||
| 
						 | 
					c2fd598994 | ||
| 
						 | 
					5024b79f5c | ||
| 
						 | 
					c5ee394b58 | ||
| 
						 | 
					21a40da045 | ||
| 
						 | 
					7919c07947 | ||
| 
						 | 
					ab67c517ae | ||
| 
						 | 
					31b46ebb62 | ||
| 
						 | 
					dc7995eeb8 | ||
| 
						 | 
					a2f9200fba | ||
| 
						 | 
					0b59755f43 | ||
| 
						 | 
					1fb97e1313 | ||
| 
						 | 
					fc683d7213 | ||
| 
						 | 
					03bc500a9f | ||
| 
						 | 
					bfe1d2f895 | ||
| 
						 | 
					ed1afd327d | ||
| 
						 | 
					dacdd5203d | ||
| 
						 | 
					56c5f703c1 | ||
| 
						 | 
					58cc21fdea | ||
| 
						 | 
					4fa3c4c3e9 | ||
| 
						 | 
					524289baa5 | ||
| 
						 | 
					2677d85631 | ||
| 
						 | 
					ad4784953d | ||
| 
						 | 
					6b7be581e5 | ||
| 
						 | 
					c184711124 | ||
| 
						 | 
					925596f85b | ||
| 
						 | 
					8d3cdd5b58 | ||
| 
						 | 
					75359644d0 | ||
| 
						 | 
					6313d628da | ||
| 
						 | 
					c7d0d0ae09 | ||
| 
						 | 
					c9adde0699 | ||
| 
						 | 
					614dd926cb | ||
| 
						 | 
					034688ec4d | ||
| 
						 | 
					d16765919d | ||
| 
						 | 
					a95bbadb57 | ||
| 
						 | 
					e350458a63 | ||
| 
						 | 
					e9093c9832 | ||
| 
						 | 
					2e2a962aad | ||
| 
						 | 
					9243a86d75 | ||
| 
						 | 
					fc98a4377d | ||
| 
						 | 
					fd600c0037 | ||
| 
						 | 
					a32ad6891b | ||
| 
						 | 
					2325315ba3 | ||
| 
						 | 
					8a2024ea59 | ||
| 
						 | 
					42c7c6764e | ||
| 
						 | 
					9f7b2c76b1 | ||
| 
						 | 
					1c6807c9d6 | ||
| 
						 | 
					bd4b0137fc | ||
| 
						 | 
					2f6efd6acb | ||
| 
						 | 
					823df31be7 | ||
| 
						 | 
					ee872e99f7 | ||
| 
						 | 
					9a85e53813 | ||
| 
						 | 
					7409d7ad51 | ||
| 
						 | 
					08557cf22c | ||
| 
						 | 
					c4d162873f | ||
| 
						 | 
					1eb8939695 | ||
| 
						 | 
					7c50694f05 | ||
| 
						 | 
					7979626995 | ||
| 
						 | 
					c36ce81cf5 | ||
| 
						 | 
					3f0d14055b | ||
| 
						 | 
					f855b9d719 | ||
| 
						 | 
					ce67647605 | ||
| 
						 | 
					171edf7ff4 | ||
| 
						 | 
					69a80f7d5e | ||
| 
						 | 
					dc03504d09 | ||
| 
						 | 
					383bc117bb | ||
| 
						 | 
					e0d1a2f80a | ||
| 
						 | 
					cac4fb58e0 | ||
| 
						 | 
					9e5fe439b4 | ||
| 
						 | 
					74fac927b0 | ||
| 
						 | 
					da9ead8db2 | ||
| 
						 | 
					bef5013961 | ||
| 
						 | 
					79170bc97a | ||
| 
						 | 
					95c9e774f9 | ||
| 
						 | 
					e161120eff | ||
| 
						 | 
					84ed90f88b | ||
| 
						 | 
					065d050e7a | ||
| 
						 | 
					b8b6a13a56 | ||
| 
						 | 
					7608978861 | ||
| 
						 | 
					14264b19de | ||
| 
						 | 
					8da18ea1a5 | ||
| 
						 | 
					7aaa88e55c | ||
| 
						 | 
					84c7a8f7dc | ||
| 
						 | 
					daaf5088fd | ||
| 
						 | 
					e382e4e603 | ||
| 
						 | 
					cb1b3aa151 | ||
| 
						 | 
					8c7096835b | ||
| 
						 | 
					befcced53e | ||
| 
						 | 
					b5dd178740 | ||
| 
						 | 
					98279c1629 | ||
| 
						 | 
					a0cc46f8e4 | ||
| 
						 | 
					70d01a7f82 | ||
| 
						 | 
					5f1b10ed2e | ||
| 
						 | 
					62dc7ed67c | ||
| 
						 | 
					b3a45e7db5 | ||
| 
						 | 
					2391681082 | ||
| 
						 | 
					6386b1b34d | ||
| 
						 | 
					3b4a855778 | ||
| 
						 | 
					ca8630ba81 | ||
| 
						 | 
					5fabb88a78 | ||
| 
						 | 
					764ef43962 | ||
| 
						 | 
					7e5b4d6779 | ||
| 
						 | 
					75707a324f | ||
| 
						 | 
					45321c41e2 | ||
| 
						 | 
					bf8131f79f | ||
| 
						 | 
					06b7e5a0e4 | ||
| 
						 | 
					706735aea3 | ||
| 
						 | 
					8f331999f5 | ||
| 
						 | 
					9338f290d1 | ||
| 
						 | 
					8038511c27 | ||
| 
						 | 
					a6311f856b | ||
| 
						 | 
					ac892b7aa6 | ||
| 
						 | 
					77394d7e8f | ||
| 
						 | 
					114c8e220b | ||
| 
						 | 
					32a2d8ddfe | ||
| 
						 | 
					4bd1e895fa | ||
| 
						 | 
					9b08dbe903 | ||
| 
						 | 
					3d607309e6 | ||
| 
						 | 
					49cb5e0b40 | ||
| 
						 | 
					e2abfd58cc | ||
| 
						 | 
					364ce53cef | ||
| 
						 | 
					6223352683 | ||
| 
						 | 
					1a4d93bfb5 | ||
| 
						 | 
					63c82f8abb | ||
| 
						 | 
					4fd7256b77 | ||
| 
						 | 
					1ccc003b82 | ||
| 
						 | 
					48da9b8f2a | ||
| 
						 | 
					6909dccc32 | ||
| 
						 | 
					b93e331ba4 | ||
| 
						 | 
					f9bf6314ea | ||
| 
						 | 
					ac319dd82b | ||
| 
						 | 
					284e2d2b37 | ||
| 
						 | 
					4582626544 | ||
| 
						 | 
					ccc5784e37 | ||
| 
						 | 
					8742ae6e19 | ||
| 
						 | 
					c105c96bac | ||
| 
						 | 
					6ceb1e8efb | ||
| 
						 | 
					1f91af5e56 | ||
| 
						 | 
					55e328f580 | ||
| 
						 | 
					f3823ddfcf | ||
| 
						 | 
					68ea88b8d1 | ||
| 
						 | 
					31360957fb | ||
| 
						 | 
					d80399a357 | ||
| 
						 | 
					d7a3ce989c | ||
| 
						 | 
					1ee49722dc | ||
| 
						 | 
					6653c6f2e8 | ||
| 
						 | 
					4c8855b975 | ||
| 
						 | 
					e71bbd26e7 | ||
| 
						 | 
					acd410dc15 | ||
| 
						 | 
					161cc82df1 | ||
| 
						 | 
					42bd0a6b3c | ||
| 
						 | 
					05e24c87dd | ||
| 
						 | 
					cab0595c14 | ||
| 
						 | 
					856650deb0 | ||
| 
						 | 
					ab1415d2f5 | ||
| 
						 | 
					f4bd65dae3 | ||
| 
						 | 
					ac1ee8e877 | ||
| 
						 | 
					8776ef63c1 | ||
| 
						 | 
					7af0400297 | ||
| 
						 | 
					1d59fe5267 | ||
| 
						 | 
					ded1999702 | ||
| 
						 | 
					a255e5bc98 | ||
| 
						 | 
					4058861f69 | ||
| 
						 | 
					f74a0c0c93 | ||
| 
						 | 
					6e28b60aa5 | ||
| 
						 | 
					3b5c1dc565 | ||
| 
						 | 
					e512375186 | ||
| 
						 | 
					1e86318091 | ||
| 
						 | 
					d8d958323b | ||
| 
						 | 
					30b26b551f | ||
| 
						 | 
					7d48743b95 | ||
| 
						 | 
					b26f324824 | ||
| 
						 | 
					02eb92abad | ||
| 
						 | 
					e5cadaf8db | ||
| 
						 | 
					8cf88778ea | ||
| 
						 | 
					c4acfb1fd0 | ||
| 
						 | 
					3f7468318d | ||
| 
						 | 
					011c865640 | ||
| 
						 | 
					212a08080c | ||
| 
						 | 
					e06de4dd35 | ||
| 
						 | 
					52b6ee8245 | ||
| 
						 | 
					bb61a6c80d | ||
| 
						 | 
					79837e8c10 | ||
| 
						 | 
					5198009885 | ||
| 
						 | 
					cd22dfbf01 | ||
| 
						 | 
					d4178c8fb1 | ||
| 
						 | 
					3a660e7364 | ||
| 
						 | 
					dad7851485 | ||
| 
						 | 
					9db6974f77 | ||
| 
						 | 
					8e5dbc23df | ||
| 
						 | 
					bd7e6bd44b | ||
| 
						 | 
					97057a1a7d | ||
| 
						 | 
					8e51aef611 | ||
| 
						 | 
					4ec3e8ca51 | ||
| 
						 | 
					5d0137aa14 | ||
| 
						 | 
					30fafdebf3 | ||
| 
						 | 
					e775bbc464 | ||
| 
						 | 
					d8ba2a42e9 | ||
| 
						 | 
					af267e4315 | ||
| 
						 | 
					d15467d582 | ||
| 
						 | 
					9507979228 | ||
| 
						 | 
					c6dbe90895 | ||
| 
						 | 
					37942b93af | ||
| 
						 | 
					399aa6b5ff | ||
| 
						 | 
					487b023f3d | ||
| 
						 | 
					1f9c2b3f71 | ||
| 
						 | 
					486ec55503 | ||
| 
						 | 
					4fc02f1229 | ||
| 
						 | 
					beb895083c | ||
| 
						 | 
					2d1122b802 | ||
| 
						 | 
					f0d9196237 | ||
| 
						 | 
					8ecef24a66 | ||
| 
						 | 
					3d62b1f22d | ||
| 
						 | 
					9e67d24743 | ||
| 
						 | 
					537c982306 | ||
| 
						 | 
					5904882eaa | ||
| 
						 | 
					1e803100de | ||
| 
						 | 
					96ec46f7c0 | ||
| 
						 | 
					27131fe8f7 | ||
| 
						 | 
					23bc7961d2 | ||
| 
						 | 
					fbbabb646c | ||
| 
						 | 
					8cd3d99f57 | ||
| 
						 | 
					d4f3dd5fb6 | ||
| 
						 | 
					aa24c4a736 | ||
| 
						 | 
					d70fcb96ac | ||
| 
						 | 
					5e374d2ee8 | ||
| 
						 | 
					0deea0e03c | ||
| 
						 | 
					edc032b5e3 | ||
| 
						 | 
					0c4e67102e | ||
| 
						 | 
					1b76fac5ae | ||
| 
						 | 
					329c744f51 | ||
| 
						 | 
					4d5d28675e | ||
| 
						 | 
					1acc24a8ba | ||
| 
						 | 
					f52e552a93 | ||
| 
						 | 
					8857b380e2 | ||
| 
						 | 
					a6de7133bb | ||
| 
						 | 
					0fa714a4f0 | ||
| 
						 | 
					3c9baf25f1 | ||
| 
						 | 
					0392f94fbc | ||
| 
						 | 
					11e80de3ee | ||
| 
						 | 
					bc91494e06 | ||
| 
						 | 
					a1e7883edb | ||
| 
						 | 
					dd0d2df562 | ||
| 
						 | 
					ce57f0d5c2 | ||
| 
						 | 
					c34a652e1e | ||
| 
						 | 
					12b77cbec3 | ||
| 
						 | 
					e45c6c4e25 | ||
| 
						 | 
					ff4a19a471 | ||
| 
						 | 
					868f12988c | ||
| 
						 | 
					591cbfae3c | ||
| 
						 | 
					a000759a5c | ||
| 
						 | 
					bc5b136c5c | ||
| 
						 | 
					16cb0d9591 | ||
| 
						 | 
					0ab8fd58e1 | ||
| 
						 | 
					8aa6cff40f | ||
| 
						 | 
					949c6f8ccf | ||
| 
						 | 
					199e92bb57 | ||
| 
						 | 
					30ff3278ae | ||
| 
						 | 
					071eb6b592 | ||
| 
						 | 
					548b4763e1 | ||
| 
						 | 
					227d6a9347 | ||
| 
						 | 
					f6e76a67f0 | ||
| 
						 | 
					d989e4f8c2 | ||
| 
						 | 
					558ddad34f | ||
| 
						 | 
					f8c39f3cd0 | ||
| 
						 | 
					324abf1d20 | ||
| 
						 | 
					6d7f706d08 | ||
| 
						 | 
					227437d292 | ||
| 
						 | 
					3e446ba347 | ||
| 
						 | 
					147e6f4465 | ||
| 
						 | 
					94a0a96cd8 | ||
| 
						 | 
					83dfcd727b | ||
| 
						 | 
					4e712c48ab | ||
| 
						 | 
					bfba6e05b8 | ||
| 
						 | 
					f18c19f5e8 | ||
| 
						 | 
					b7056b6414 | ||
| 
						 | 
					620baecf91 | ||
| 
						 | 
					37eae9909a | ||
| 
						 | 
					6892d0eb03 | ||
| 
						 | 
					3deb010dc0 | ||
| 
						 | 
					4a716f5beb | ||
| 
						 | 
					e3496215a2 | ||
| 
						 | 
					eead69f5ed | ||
| 
						 | 
					ab8a4e54db | ||
| 
						 | 
					947ff113d2 | ||
| 
						 | 
					acf254f86e | ||
| 
						 | 
					5d439d6955 | ||
| 
						 | 
					38bae7baa5 | ||
| 
						 | 
					d47691ecfe | ||
| 
						 | 
					223ef1db41 | ||
| 
						 | 
					01ad8195aa | ||
| 
						 | 
					d87f52cb94 | ||
| 
						 | 
					a3654f0586 | ||
| 
						 | 
					017bc57bf9 | ||
| 
						 | 
					d749e1080a | ||
| 
						 | 
					0fbf8f447b | ||
| 
						 | 
					c81f8f59be | ||
| 
						 | 
					225a9e296b | ||
| 
						 | 
					25c6542944 | ||
| 
						 | 
					14567b1451 | ||
| 
						 | 
					fe082202c0 | ||
| 
						 | 
					fbc164ec2f | ||
| 
						 | 
					943a0ceed0 | ||
| 
						 | 
					5d2f1538a0 | ||
| 
						 | 
					fe26d066ff | ||
| 
						 | 
					c876a4b7b1 | ||
| 
						 | 
					c966120412 | ||
| 
						 | 
					84b08eee4b | ||
| 
						 | 
					bf2546f947 | ||
| 
						 | 
					133291f8e7 | ||
| 
						 | 
					e990b4f838 | ||
| 
						 | 
					e47af46cd8 | ||
| 
						 | 
					36246be915 | ||
| 
						 | 
					c9a90645a5 | ||
| 
						 | 
					b331016124 | ||
| 
						 | 
					afb4191304 | ||
| 
						 | 
					874b0bd968 | ||
| 
						 | 
					a6d915e0ef | ||
| 
						 | 
					975138edaa | ||
| 
						 | 
					30b56225cc | ||
| 
						 | 
					dc527a62a1 | ||
| 
						 | 
					ed12c2f7ca | ||
| 
						 | 
					16a7fcc447 | ||
| 
						 | 
					a1a5885b64 | ||
| 
						 | 
					f84a8ea526 | ||
| 
						 | 
					01be5db64e | ||
| 
						 | 
					a4113c52b2 | ||
| 
						 | 
					b3d8022edd | ||
| 
						 | 
					632d83f0a3 | ||
| 
						 | 
					d3fad7cb51 | ||
| 
						 | 
					f4bfe97fc9 | ||
| 
						 | 
					c415adc26f | ||
| 
						 | 
					9afe95099d | ||
| 
						 | 
					9dd346c90d | ||
| 
						 | 
					9770924f9b | ||
| 
						 | 
					f4001a0d19 | ||
| 
						 | 
					cea73f9db3 | ||
| 
						 | 
					1f2502eb58 | ||
| 
						 | 
					bdaa54155c | ||
| 
						 | 
					fd3dbc1dbf | ||
| 
						 | 
					d45087c672 | ||
| 
						 | 
					634b66186a | ||
| 
						 | 
					3da0ca796c | ||
| 
						 | 
					f9678b8b57 | ||
| 
						 | 
					83e9c36261 | ||
| 
						 | 
					b68c13154e | ||
| 
						 | 
					68e2586bd3 | ||
| 
						 | 
					61f477f4ab | ||
| 
						 | 
					7e95116064 | ||
| 
						 | 
					06b433acad | ||
| 
						 | 
					14ae26f2e4 | ||
| 
						 | 
					3710d1aae9 | ||
| 
						 | 
					cc5c772abd | ||
| 
						 | 
					65041aa27e | ||
| 
						 | 
					7dbbd4b357 | ||
| 
						 | 
					544c84b720 | ||
| 
						 | 
					65847ca378 | ||
| 
						 | 
					53f7633739 | ||
| 
						 | 
					c2a459315a | ||
| 
						 | 
					e2b798c8b3 | ||
| 
						 | 
					9bda745876 | ||
| 
						 | 
					88f2a4cf9c | ||
| 
						 | 
					9d0397e977 | ||
| 
						 | 
					2440d8b1db | ||
| 
						 | 
					ee9884654b | ||
| 
						 | 
					5f885f1ea4 | ||
| 
						 | 
					7a4ec19a5f | ||
| 
						 | 
					a5b196a22c | ||
| 
						 | 
					b6104f9ad8 | ||
| 
						 | 
					96d5997f5b | ||
| 
						 | 
					92eb4c551d | ||
| 
						 | 
					89f63d06f8 | ||
| 
						 | 
					2ecc150530 | ||
| 
						 | 
					3c2c4cc5f2 | ||
| 
						 | 
					5eedacc904 | ||
| 
						 | 
					7f64c26588 | ||
| 
						 | 
					3dd9b31dc4 | ||
| 
						 | 
					eb164d0b12 | ||
| 
						 | 
					225c272193 | ||
| 
						 | 
					9fdb2cc592 | ||
| 
						 | 
					cc8bd54569 | ||
| 
						 | 
					0c02a37548 | ||
| 
						 | 
					166c9cb0b8 | ||
| 
						 | 
					5084af288d | ||
| 
						 | 
					7e23e857f6 | ||
| 
						 | 
					44f54a130b | ||
| 
						 | 
					7edfe67456 | ||
| 
						 | 
					d8ad2e6112 | ||
| 
						 | 
					1097bde192 | ||
| 
						 | 
					7cc684f4f7 | ||
| 
						 | 
					e36d6b8f79 | ||
| 
						 | 
					aa87945f47 | ||
| 
						 | 
					7c8ced94c3 | ||
| 
						 | 
					d5df1b3f0d | ||
| 
						 | 
					6ff9c48811 | ||
| 
						 | 
					ad6019d6c0 | ||
| 
						 | 
					a27de7b7fd | ||
| 
						 | 
					54e02a234c | ||
| 
						 | 
					879bd6e38c | ||
| 
						 | 
					6f1a3a310c | ||
| 
						 | 
					6f4b3e7c09 | ||
| 
						 | 
					6dff52e858 | ||
| 
						 | 
					df6de39fe7 | ||
| 
						 | 
					5ca9cb7cbd | ||
| 
						 | 
					83c3410b94 | ||
| 
						 | 
					20818e00fd | ||
| 
						 | 
					c553721e8b | ||
| 
						 | 
					1588a3cae7 | ||
| 
						 | 
					7a4bd34a4f | ||
| 
						 | 
					4ead4e5241 | ||
| 
						 | 
					1ab2f7f1cb | ||
| 
						 | 
					9bafd8f7b3 | ||
| 
						 | 
					373048395e | ||
| 
						 | 
					3d6a8954f8 | ||
| 
						 | 
					c11845a4ab | ||
| 
						 | 
					ec3657f81f | ||
| 
						 | 
					d69c6653ef | ||
| 
						 | 
					aaff7a0464 | ||
| 
						 | 
					1d44454d6d | ||
| 
						 | 
					5d3bfb9066 | ||
| 
						 | 
					aeb8996c38 | ||
| 
						 | 
					2b4b28dc32 | ||
| 
						 | 
					72a267331a | ||
| 
						 | 
					13a5519208 | ||
| 
						 | 
					f7a2afa652 | ||
| 
						 | 
					245a7eee17 | ||
| 
						 | 
					6e0375d504 | ||
| 
						 | 
					7d05edd12e | ||
| 
						 | 
					fef1c40bf1 | ||
| 
						 | 
					a428ac4750 | ||
| 
						 | 
					0aa1aedbce | ||
| 
						 | 
					dd616752a1 | ||
| 
						 | 
					198ce9a611 | ||
| 
						 | 
					78c4572296 | ||
| 
						 | 
					d3f17e5ed3 | ||
| 
						 | 
					ff66ff0a9b | ||
| 
						 | 
					105d62cbf1 | ||
| 
						 | 
					c13d7c0296 | ||
| 
						 | 
					114f511f17 | ||
| 
						 | 
					778b14b72d | ||
| 
						 | 
					7b1a04519f | ||
| 
						 | 
					5b301b2fe3 | ||
| 
						 | 
					722521594c | ||
| 
						 | 
					a47577164c | ||
| 
						 | 
					09d84e03e8 | ||
| 
						 | 
					85881c1d92 | ||
| 
						 | 
					968062b7d3 | ||
| 
						 | 
					e82f75577b | ||
| 
						 | 
					88ea810e25 | ||
| 
						 | 
					2b3936e882 | ||
| 
						 | 
					c596b2ab5b | ||
| 
						 | 
					c329c6bac7 | ||
| 
						 | 
					b7ef916c38 | ||
| 
						 | 
					d7d5a55d22 | ||
| 
						 | 
					cc4c230653 | ||
| 
						 | 
					de3bb266f4 | ||
| 
						 | 
					05e4fbf801 | ||
| 
						 | 
					ef3026a325 | ||
| 
						 | 
					420ce9eb98 | ||
| 
						 | 
					73334e8da1 | ||
| 
						 | 
					6f413ef406 | ||
| 
						 | 
					85171f83b8 | ||
| 
						 | 
					a550d351fc | ||
| 
						 | 
					cbecd29a27 | ||
| 
						 | 
					09c1dc850c | ||
| 
						 | 
					4585fd0734 | ||
| 
						 | 
					e3c1854b0c | ||
| 
						 | 
					e822c756b6 | ||
| 
						 | 
					300b1d76fe | ||
| 
						 | 
					ae3fff5034 | ||
| 
						 | 
					d0205686bb | ||
| 
						 | 
					290be870d6 | ||
| 
						 | 
					fa71cc7bce | ||
| 
						 | 
					e77906b9fa | ||
| 
						 | 
					f830c68f4d | ||
| 
						 | 
					6f678c4081 | ||
| 
						 | 
					e9be051f3a | ||
| 
						 | 
					46fc96d4ba | ||
| 
						 | 
					da64e0d898 | ||
| 
						 | 
					88868c0786 | ||
| 
						 | 
					c5ef4bb49a | ||
| 
						 | 
					01bfc480c6 | ||
| 
						 | 
					2631a0210e | ||
| 
						 | 
					feb592bcc9 | ||
| 
						 | 
					fbd7d524be | ||
| 
						 | 
					d5dfa7cd82 | ||
| 
						 | 
					c8f0610d99 | ||
| 
						 | 
					dd128715a2 | ||
| 
						 | 
					ec44f0ebfa | ||
| 
						 | 
					6377953816 | ||
| 
						 | 
					e322fa2872 | ||
| 
						 | 
					9ac0708f37 | ||
| 
						 | 
					6b02f9fafb | ||
| 
						 | 
					4878ad687f | ||
| 
						 | 
					908df4d0f7 | ||
| 
						 | 
					6c1982c5ce | ||
| 
						 | 
					40844c9f68 | ||
| 
						 | 
					b71f815f6b | ||
| 
						 | 
					833ebea189 | ||
| 
						 | 
					91f0828c95 | ||
| 
						 | 
					70a5f5f9ab | ||
| 
						 | 
					ac7797a722 | ||
| 
						 | 
					7d5686d355 | ||
| 
						 | 
					732d31beee | ||
| 
						 | 
					f7d2f17a07 | ||
| 
						 | 
					ad889de097 | ||
| 
						 | 
					e15320f652 | ||
| 
						 | 
					e827b58711 | ||
| 
						 | 
					80f0bcbabb | ||
| 
						 | 
					eba2b51d9e | ||
| 
						 | 
					838ea7f824 | ||
| 
						 | 
					da7b0b2261 | ||
| 
						 | 
					beee17c428 | ||
| 
						 | 
					c242dda4a4 | ||
| 
						 | 
					bb55003882 | ||
| 
						 | 
					ca32ceb773 | ||
| 
						 | 
					776654adff | ||
| 
						 | 
					d6522548dd | ||
| 
						 | 
					e49af2ac38 | ||
| 
						 | 
					5759425810 | ||
| 
						 | 
					983768997e | ||
| 
						 | 
					8ec3fa0597 | ||
| 
						 | 
					0c7246ed4b | ||
| 
						 | 
					7e0de9e8a6 | ||
| 
						 | 
					0d638dc1f6 | ||
| 
						 | 
					c17171c625 | ||
| 
						 | 
					39239280f3 | ||
| 
						 | 
					5ad83922ca | ||
| 
						 | 
					d466588788 | ||
| 
						 | 
					da4d239dad | ||
| 
						 | 
					0985473636 | ||
| 
						 | 
					8986e37249 | ||
| 
						 | 
					90ba3a28f8 | ||
| 
						 | 
					bc9092f726 | ||
| 
						 | 
					f8927c89d0 | ||
| 
						 | 
					3739a772e9 | ||
| 
						 | 
					c504f0a921 | ||
| 
						 | 
					6415dd7b2f | ||
| 
						 | 
					dd4a0af370 | ||
| 
						 | 
					7d1f55e9d9 | ||
| 
						 | 
					d52d5ad147 | ||
| 
						 | 
					a3b0c44b1b | ||
| 
						 | 
					4b2603e46c | ||
| 
						 | 
					bf48836c7c | ||
| 
						 | 
					d9a268b9f9 | ||
| 
						 | 
					5df2a2497a | ||
| 
						 | 
					4ed7b78b56 | ||
| 
						 | 
					2ec4ccee1f | ||
| 
						 | 
					396cb5657b | ||
| 
						 | 
					eb8ef241eb | ||
| 
						 | 
					1b5af90b45 | ||
| 
						 | 
					bdd5350804 | ||
| 
						 | 
					7b3a9b0099 | ||
| 
						 | 
					7c2d4fee25 | ||
| 
						 | 
					f16176dab4 | ||
| 
						 | 
					76af94eb27 | ||
| 
						 | 
					04daec862c | ||
| 
						 | 
					d3bb63fc68 | ||
| 
						 | 
					44959ee456 | ||
| 
						 | 
					c94f7f657b | ||
| 
						 | 
					173350bcca | ||
| 
						 | 
					1e024f05b2 | ||
| 
						 | 
					f2c88f5282 | ||
| 
						 | 
					836ea45350 | ||
| 
						 | 
					72f421934a | ||
| 
						 | 
					3fdd168ffc | ||
| 
						 | 
					0b789adc67 | ||
| 
						 | 
					33d9c8348a | ||
| 
						 | 
					dbe3611bbd | ||
| 
						 | 
					f71c6aceeb | ||
| 
						 | 
					30ab7af242 | ||
| 
						 | 
					2948fbab3a | ||
| 
						 | 
					081464fa14 | ||
| 
						 | 
					ee2ffc2794 | ||
| 
						 | 
					b122e482f9 | ||
| 
						 | 
					3c530fef67 | ||
| 
						 | 
					a7a6aade9d | ||
| 
						 | 
					20d171377f | ||
| 
						 | 
					149b18078e | ||
| 
						 | 
					39438ff6e2 | ||
| 
						 | 
					d5fe8c3459 | ||
| 
						 | 
					6219d2c294 | ||
| 
						 | 
					85e28dfa6f | ||
| 
						 | 
					6559b40df0 | ||
| 
						 | 
					3d85668ba2 | ||
| 
						 | 
					058d83cfe9 | ||
| 
						 | 
					a9e790b95a | ||
| 
						 | 
					02f358da49 | ||
| 
						 | 
					133a7f9a50 | ||
| 
						 | 
					eb1c48be6f | ||
| 
						 | 
					2fd9664b0b | ||
| 
						 | 
					aa763c0f6d | ||
| 
						 | 
					75a96dd059 | ||
| 
						 | 
					843b5a250a | ||
| 
						 | 
					18f3385dea | ||
| 
						 | 
					d7d119a3c9 | ||
| 
						 | 
					223c59eae5 | ||
| 
						 | 
					7bbd0de88d | ||
| 
						 | 
					f96ccf36ff | ||
| 
						 | 
					b9e7793dd7 | ||
| 
						 | 
					d135da5192 | ||
| 
						 | 
					75db4b2f7b | ||
| 
						 | 
					b730b03f2f | ||
| 
						 | 
					1dc02bbaf5 | ||
| 
						 | 
					cad6650f52 | ||
| 
						 | 
					26064d7f77 | ||
| 
						 | 
					c981086d40 | ||
| 
						 | 
					2d22e08083 | ||
| 
						 | 
					0852f90c30 | ||
| 
						 | 
					2765001610 | ||
| 
						 | 
					653215a127 | ||
| 
						 | 
					6acb4ff389 | ||
| 
						 | 
					874a3757af | ||
| 
						 | 
					1cbdca7bf2 | ||
| 
						 | 
					e216cd6ee9 | ||
| 
						 | 
					396df7311e | ||
| 
						 | 
					f04f3873f8 | ||
| 
						 | 
					df72970951 | ||
| 
						 | 
					7c5889bf7a | ||
| 
						 | 
					dc53a037b0 | ||
| 
						 | 
					acbcc271b1 | ||
| 
						 | 
					b28750877c | ||
| 
						 | 
					d9218e11e2 | ||
| 
						 | 
					c32fcca6f4 | ||
| 
						 | 
					9674de7d3d | ||
| 
						 | 
					a7c64928c8 | ||
| 
						 | 
					c8bbd98a2b | ||
| 
						 | 
					57ae37a003 | ||
| 
						 | 
					d364506a24 | ||
| 
						 | 
					04e2b793d6 | ||
| 
						 | 
					8525950e7e | ||
| 
						 | 
					d08eae1bda | ||
| 
						 | 
					e8107c35b1 | ||
| 
						 | 
					3cbb15ee81 | ||
| 
						 | 
					2d060267b1 | ||
| 
						 | 
					f9a152bd90 | ||
| 
						 | 
					af9fafdbd1 | ||
| 
						 | 
					eadfa019b3 | ||
| 
						 | 
					9799937510 | ||
| 
						 | 
					417a24dba5 | ||
| 
						 | 
					4e96633ac7 | ||
| 
						 | 
					77cf9e09b0 | ||
| 
						 | 
					cb877ccb35 | ||
| 
						 | 
					3d4fc82c0e | ||
| 
						 | 
					e747f4d418 | ||
| 
						 | 
					19a45b8d47 | ||
| 
						 | 
					07e29c1234 | ||
| 
						 | 
					fb2d5a91e9 | ||
| 
						 | 
					ae7c67cace | ||
| 
						 | 
					ca96d38981 | ||
| 
						 | 
					9f08866940 | ||
| 
						 | 
					aa6d91e85b | ||
| 
						 | 
					fdce8a355f | ||
| 
						 | 
					7837c7ec45 | ||
| 
						 | 
					acf635b9b2 | ||
| 
						 | 
					19674b5a1d | ||
| 
						 | 
					e855d538de | ||
| 
						 | 
					629fd3aa91 | ||
| 
						 | 
					1aa8a6297c | ||
| 
						 | 
					c1f092d14e | ||
| 
						 | 
					ea7239cf15 | ||
| 
						 | 
					046ea30864 | ||
| 
						 | 
					3efe51a407 | ||
| 
						 | 
					0e3ef596e5 | ||
| 
						 | 
					f472ec8c2f | ||
| 
						 | 
					8a682556b4 | ||
| 
						 | 
					827f3d5f39 | ||
| 
						 | 
					6006ae148c | ||
| 
						 | 
					efcf5f1c50 | ||
| 
						 | 
					a033c3c72b | ||
| 
						 | 
					359b0c9fb8 | ||
| 
						 | 
					19f7e5e24a | ||
| 
						 | 
					bb92e2c89b | ||
| 
						 | 
					5e19ee96f6 | ||
| 
						 | 
					8a1c92ce49 | ||
| 
						 | 
					d183244b43 | ||
| 
						 | 
					5e60dba84f | ||
| 
						 | 
					9a8a7d58af | ||
| 
						 | 
					1bf508c9cf | ||
| 
						 | 
					799668c1ce | ||
| 
						 | 
					7f7f155103 | ||
| 
						 | 
					45078e6c52 | ||
| 
						 | 
					d7f573fea6 | ||
| 
						 | 
					1fd79f66ea | ||
| 
						 | 
					4f39edbff1 | ||
| 
						 | 
					8decc967dc | ||
| 
						 | 
					6a1823b371 | ||
| 
						 | 
					45106caab7 | ||
| 
						 | 
					5d1a50ac2a | ||
| 
						 | 
					af73b08ac0 | ||
| 
						 | 
					934e22e814 | ||
| 
						 | 
					3122d1d382 | ||
| 
						 | 
					b7463c8818 | ||
| 
						 | 
					109757d254 | ||
| 
						 | 
					49535cc409 | ||
| 
						 | 
					a595baff9f | ||
| 
						 | 
					67a315b60b | ||
| 
						 | 
					6c83629bd9 | ||
| 
						 | 
					fead253986 | ||
| 
						 | 
					9a649f3b46 | ||
| 
						 | 
					f62df694ad | ||
| 
						 | 
					42feba4797 | ||
| 
						 | 
					3c01a1e89e | ||
| 
						 | 
					6a79b3cb93 | ||
| 
						 | 
					d23f4e9d5a | ||
| 
						 | 
					172f6b2d62 | ||
| 
						 | 
					c0b8eb606f | ||
| 
						 | 
					d4a45bf31a | ||
| 
						 | 
					60e24554bb | ||
| 
						 | 
					ff12f88b8e | ||
| 
						 | 
					47e6a60e42 | ||
| 
						 | 
					87a37cbadd | ||
| 
						 | 
					00a37b5a9b | ||
| 
						 | 
					bc494872b8 | ||
| 
						 | 
					4b0771c146 | ||
| 
						 | 
					a1a80e0786 | ||
| 
						 | 
					1676bec94c | ||
| 
						 | 
					c25a0aae6b | ||
| 
						 | 
					46bdf0f34d | ||
| 
						 | 
					471d0eb397 | ||
| 
						 | 
					97a6a01f0f | ||
| 
						 | 
					2a460c1aa8 | ||
| 
						 | 
					216811b216 | ||
| 
						 | 
					3ac75e21a1 | ||
| 
						 | 
					14021cb821 | ||
| 
						 | 
					08df41277a | ||
| 
						 | 
					ac495542a6 | ||
| 
						 | 
					085e5f4859 | ||
| 
						 | 
					3e8b6485b3 | ||
| 
						 | 
					f2e8488b85 | ||
| 
						 | 
					a3a06e6543 | ||
| 
						 | 
					26c00de46d | ||
| 
						 | 
					3dd303129f | ||
| 
						 | 
					c3473126b1 | ||
| 
						 | 
					82f385d71d | ||
| 
						 | 
					f2fccce4bd | ||
| 
						 | 
					480cd6ab6e | ||
| 
						 | 
					6c6bdd543d | ||
| 
						 | 
					e19f6678f5 | ||
| 
						 | 
					624fbfcadb | ||
| 
						 | 
					510777f2fc | ||
| 
						 | 
					be449448dc | ||
| 
						 | 
					4c623cddbe | ||
| 
						 | 
					8d207ee3d1 | ||
| 
						 | 
					cdb182b55a | ||
| 
						 | 
					00947cea0c | ||
| 
						 | 
					e45c32fabf | ||
| 
						 | 
					fb75f349b7 | ||
| 
						 | 
					a907165250 | ||
| 
						 | 
					e62774c3b9 | ||
| 
						 | 
					f093794e55 | ||
| 
						 | 
					f26cf9957f | ||
| 
						 | 
					17c63d1cca | ||
| 
						 | 
					877669d69c | ||
| 
						 | 
					1c8d92997d | ||
| 
						 | 
					bf8883b351 | ||
| 
						 | 
					e8254d406f | ||
| 
						 | 
					85522a074c | ||
| 
						 | 
					31d66c2a98 | ||
| 
						 | 
					ce25c7207b | ||
| 
						 | 
					77163b6234 | ||
| 
						 | 
					e3a510f8a6 | ||
| 
						 | 
					b17bdc7734 | ||
| 
						 | 
					a0e4a8e10a | ||
| 
						 | 
					d6eebf6d8a | ||
| 
						 | 
					2262beef2e | ||
| 
						 | 
					31904ecdf3 | ||
| 
						 | 
					a4d9c12f99 | ||
| 
						 | 
					809cd0a22d | ||
| 
						 | 
					bea29921a8 | ||
| 
						 | 
					7ed485bc9f | ||
| 
						 | 
					069d4cfea5 | ||
| 
						 | 
					49436b59b5 | ||
| 
						 | 
					9ef6fe8c2e | ||
| 
						 | 
					63b825c9d4 | ||
| 
						 | 
					77f4b6ba4f | ||
| 
						 | 
					a5667732b9 | ||
| 
						 | 
					1708456220 | ||
| 
						 | 
					ff04bbe363 | ||
| 
						 | 
					148924c1f4 | ||
| 
						 | 
					fa1ba589f3 | ||
| 
						 | 
					8c4ce7bab2 | ||
| 
						 | 
					bb845ee044 | ||
| 
						 | 
					b5cfc2f590 | ||
| 
						 | 
					ebaa2cf5b2 | ||
| 
						 | 
					cca1cd9a34 | ||
| 
						 | 
					2c772c8700 | ||
| 
						 | 
					e7f5b1cd42 | ||
| 
						 | 
					80dfadfdf3 | ||
| 
						 | 
					d8c7bd6e11 | ||
| 
						 | 
					f84c85b0e3 | ||
| 
						 | 
					a05b8d0ede | ||
| 
						 | 
					ff2fdbf2f8 | ||
| 
						 | 
					da3955256d | ||
| 
						 | 
					5e28ccb798 | ||
| 
						 | 
					a6575572c6 | ||
| 
						 | 
					c3951d8973 | ||
| 
						 | 
					19ec2f4194 | ||
| 
						 | 
					2b13f80360 | ||
| 
						 | 
					40c5eaeeec | ||
| 
						 | 
					c1ca9d3238 | ||
| 
						 | 
					48435b2098 | ||
| 
						 | 
					37c541faed | ||
| 
						 | 
					0f776277bc | ||
| 
						 | 
					5814d829e6 | ||
| 
						 | 
					f6bb465f87 | ||
| 
						 | 
					db28aa86e0 | ||
| 
						 | 
					2da2ff5065 | ||
| 
						 | 
					fbd2164044 | ||
| 
						 | 
					04e4b82726 | ||
| 
						 | 
					9b3d75706e | ||
| 
						 | 
					b1efb7161f | ||
| 
						 | 
					df4c395c6d | ||
| 
						 | 
					385a488c43 | ||
| 
						 | 
					ea746dad5e | ||
| 
						 | 
					d976f99294 | ||
| 
						 | 
					e5a4de9e44 | ||
| 
						 | 
					7d3d1788a5 | ||
| 
						 | 
					2d9dcd4ff0 | ||
| 
						 | 
					a839755329 | ||
| 
						 | 
					69582a592e | ||
| 
						 | 
					7512141162 | ||
| 
						 | 
					c2c49969e2 | ||
| 
						 | 
					47e0a1c335 | ||
| 
						 | 
					439aab3afc | ||
| 
						 | 
					8d934c2585 | ||
| 
						 | 
					1458b931eb | ||
| 
						 | 
					20eb7238cb | ||
| 
						 | 
					79cfc3ac54 | ||
| 
						 | 
					918a5d04e4 | ||
| 
						 | 
					f959598866 | ||
| 
						 | 
					5a9e3f05ff | ||
| 
						 | 
					29e722f031 | ||
| 
						 | 
					05566760da | ||
| 
						 | 
					e3e31ff482 | ||
| 
						 | 
					bae060c06a | ||
| 
						 | 
					0ff907caf8 | ||
| 
						 | 
					c8ef656df2 | ||
| 
						 | 
					8c968e0355 | ||
| 
						 | 
					cc0661374f | ||
| 
						 | 
					089f02c577 | ||
| 
						 | 
					c2bf720842 | ||
| 
						 | 
					c95bf51167 | ||
| 
						 | 
					2712a2f625 | ||
| 
						 | 
					17ebc10ffa | ||
| 
						 | 
					434745dc19 | ||
| 
						 | 
					b380f9b884 | ||
| 
						 | 
					749af8cb61 | ||
| 
						 | 
					1d62de0395 | ||
| 
						 | 
					d7b99700c0 | ||
| 
						 | 
					cd6bc02b29 | ||
| 
						 | 
					da454e4c67 | ||
| 
						 | 
					08c239701b | ||
| 
						 | 
					92714455af | ||
| 
						 | 
					00b525781b | ||
| 
						 | 
					891d3c7a60 | ||
| 
						 | 
					9fb6fd34f8 | ||
| 
						 | 
					c2963f5b87 | ||
| 
						 | 
					99b36a8c31 | ||
| 
						 | 
					89e56aebef | ||
| 
						 | 
					4ba1aa393b | ||
| 
						 | 
					1e27847d4e | ||
| 
						 | 
					407a410136 | ||
| 
						 | 
					9921f865e4 | ||
| 
						 | 
					c8c07be883 | ||
| 
						 | 
					d5e7f2f2c3 | ||
| 
						 | 
					1bfdbd8e75 | ||
| 
						 | 
					e92f9f45e8 | ||
| 
						 | 
					8c02119e39 | ||
| 
						 | 
					ca9f55f710 | ||
| 
						 | 
					58c0da84dd | ||
| 
						 | 
					964ed94649 | ||
| 
						 | 
					cab6de03a2 | ||
| 
						 | 
					2d851ab919 | ||
| 
						 | 
					04dbf0272e | ||
| 
						 | 
					d15dd388c1 | ||
| 
						 | 
					c3502985b2 | ||
| 
						 | 
					6fa0608eaf | ||
| 
						 | 
					3f2a98acbf | ||
| 
						 | 
					bc120a54c9 | ||
| 
						 | 
					82a66ce313 | ||
| 
						 | 
					7676eebf42 | ||
| 
						 | 
					21a5c040e5 | ||
| 
						 | 
					ba64ae6cd1 | ||
| 
						 | 
					3a88efd48c | ||
| 
						 | 
					3243698f1d | ||
| 
						 | 
					55f39a199d | ||
| 
						 | 
					49371e3acb | ||
| 
						 | 
					eb125795d2 | ||
| 
						 | 
					3ec5f38b47 | ||
| 
						 | 
					a70e377fd8 | ||
| 
						 | 
					b3020393f2 | ||
| 
						 | 
					071ef65cfa | ||
| 
						 | 
					d5e8d8b547 | ||
| 
						 | 
					0debb681e1 | ||
| 
						 | 
					46c42e78ff | ||
| 
						 | 
					ee2b8ed2f5 | ||
| 
						 | 
					7a6e0901ff | ||
| 
						 | 
					91fdacb2c3 | ||
| 
						 | 
					d582c98d8f | ||
| 
						 | 
					78a533cb93 | ||
| 
						 | 
					4f38565204 | ||
| 
						 | 
					4407700c40 | ||
| 
						 | 
					72a9776abc | ||
| 
						 | 
					8d39d2800a | ||
| 
						 | 
					598b562a7f | ||
| 
						 | 
					dac40f87df | ||
| 
						 | 
					031c78901b | ||
| 
						 | 
					ce1ec9c35e | ||
| 
						 | 
					bd5f21a4ae | ||
| 
						 | 
					1b31b5ad56 | ||
| 
						 | 
					97438f38df | ||
| 
						 | 
					0e0c6821fa | ||
| 
						 | 
					423c66f10e | ||
| 
						 | 
					74f2260694 | ||
| 
						 | 
					25d1d62275 | ||
| 
						 | 
					9b5ca55695 | ||
| 
						 | 
					cba9ffc32a | ||
| 
						 | 
					76998a71bc | ||
| 
						 | 
					dd792d6222 | ||
| 
						 | 
					82a107eaa8 | ||
| 
						 | 
					f8e1ab79f5 | ||
| 
						 | 
					1f23001d07 | ||
| 
						 | 
					dacdcf3c15 | ||
| 
						 | 
					60c52245e1 | ||
| 
						 | 
					2a30fec786 | ||
| 
						 | 
					3ddf85033d | ||
| 
						 | 
					6084c797a8 | ||
| 
						 | 
					2be3d6ebc8 | ||
| 
						 | 
					e6f418bcb7 | ||
| 
						 | 
					5e63121758 | ||
| 
						 | 
					2f4c1dc86c | ||
| 
						 | 
					f87e307875 | ||
| 
						 | 
					70b76d392f | ||
| 
						 | 
					6a9d28f9e4 | ||
| 
						 | 
					3fc2efd241 | ||
| 
						 | 
					76774c5ea1 | ||
| 
						 | 
					35b0ea4efe | ||
| 
						 | 
					73527122c9 | ||
| 
						 | 
					d68015764e | ||
| 
						 | 
					b57599b70c | ||
| 
						 | 
					cb3b9b1323 | ||
| 
						 | 
					beef714599 | ||
| 
						 | 
					d741cf2267 | ||
| 
						 | 
					b4b48a107c | ||
| 
						 | 
					7e765bf29a | ||
| 
						 | 
					8580f8015f | ||
| 
						 | 
					f21516075f | ||
| 
						 | 
					7427379e9b | ||
| 
						 | 
					fbed9f8158 | ||
| 
						 | 
					e50858c559 | ||
| 
						 | 
					ef51b4b9b4 | ||
| 
						 | 
					c27c9cb4f7 | ||
| 
						 | 
					22c2155595 | ||
| 
						 | 
					b5c002d5a8 | ||
| 
						 | 
					4db82571ba | ||
| 
						 | 
					89408580ed | ||
| 
						 | 
					a8640f0a7d | ||
| 
						 | 
					338a61b94e | ||
| 
						 | 
					e4bcadb302 | ||
| 
						 | 
					fdb2c6e4e5 | ||
| 
						 | 
					7661ccadf0 | ||
| 
						 | 
					82e610e2cf | ||
| 
						 | 
					5430200b8b | ||
| 
						 | 
					13f6d57b1e | ||
| 
						 | 
					8025e25113 | ||
| 
						 | 
					637f374ad4 | ||
| 
						 | 
					7e4cae1d2f | ||
| 
						 | 
					9d9530255b | ||
| 
						 | 
					3533ab1fee | ||
| 
						 | 
					ec7d16ffdd | ||
| 
						 | 
					5656f33cea | ||
| 
						 | 
					7f354fa42d | ||
| 
						 | 
					6732e14278 | ||
| 
						 | 
					499684404c | ||
| 
						 | 
					606c46fb6f | ||
| 
						 | 
					fed8dbf46d | ||
| 
						 | 
					c2f0203da0 | ||
| 
						 | 
					b6bf9e2ea7 | ||
| 
						 | 
					d2a53c2238 | ||
| 
						 | 
					480af99ef4 | ||
| 
						 | 
					f2334630a7 | ||
| 
						 | 
					007f7ec1bd | ||
| 
						 | 
					3d63b3966f | ||
| 
						 | 
					451038b40c | ||
| 
						 | 
					7766bc1a19 | ||
| 
						 | 
					6cef3a7f9c | ||
| 
						 | 
					4d09323a63 | ||
| 
						 | 
					64abf5e657 | ||
| 
						 | 
					446a6a8af7 | ||
| 
						 | 
					320d3fd6af | ||
| 
						 | 
					cca3ea1e71 | ||
| 
						 | 
					a83f83aac8 | ||
| 
						 | 
					5727f1f790 | ||
| 
						 | 
					53f73afc4d | ||
| 
						 | 
					10232bdc0e | ||
| 
						 | 
					55ff3aff8c | ||
| 
						 | 
					b7cec490fa | ||
| 
						 | 
					2335e8a9cc | ||
| 
						 | 
					6f766a4181 | ||
| 
						 | 
					f741382b3c | ||
| 
						 | 
					c18e51ba5e | ||
| 
						 | 
					773b63d6f9 | ||
| 
						 | 
					0a02d1db34 | ||
| 
						 | 
					ff094bc2d1 | ||
| 
						 | 
					860c3dd1b6 | ||
| 
						 | 
					2942dde56c | ||
| 
						 | 
					0f6e21385e | ||
| 
						 | 
					709a395d1c | ||
| 
						 | 
					b599006751 | ||
| 
						 | 
					e0e7997212 | ||
| 
						 | 
					befbd0619b | ||
| 
						 | 
					f423c63bb0 | ||
| 
						 | 
					9acc65006c | ||
| 
						 | 
					7ba3838a4b | ||
| 
						 | 
					4398222457 | ||
| 
						 | 
					71af26b57b | ||
| 
						 | 
					2008e714f3 | ||
| 
						 | 
					245d2ee3d0 | ||
| 
						 | 
					4b4ba6a887 | ||
| 
						 | 
					bb4060c5b5 | ||
| 
						 | 
					661dc1431f | ||
| 
						 | 
					213f08a65a | ||
| 
						 | 
					3e24d43931 | ||
| 
						 | 
					b57329ba90 | ||
| 
						 | 
					d4be92896c | ||
| 
						 | 
					8844a69cd3 | ||
| 
						 | 
					970097ae2c | ||
| 
						 | 
					dafd83334a | ||
| 
						 | 
					d6245b8952 | ||
| 
						 | 
					13d7524698 | ||
| 
						 | 
					dd57b657a8 | ||
| 
						 | 
					45cd59ac71 | ||
| 
						 | 
					d11d977da4 | ||
| 
						 | 
					4a1b71fb0c | ||
| 
						 | 
					19a9d0fcea | ||
| 
						 | 
					6aa1770c6d | ||
| 
						 | 
					122276a7b4 | ||
| 
						 | 
					1e6b8d39f1 | ||
| 
						 | 
					e05d6c7d3c | ||
| 
						 | 
					a5b37fca0a | ||
| 
						 | 
					9074df8684 | ||
| 
						 | 
					6c17629f91 | ||
| 
						 | 
					db57663241 | ||
| 
						 | 
					53246488bd | ||
| 
						 | 
					1f164f5ed9 | ||
| 
						 | 
					b8c182a499 | ||
| 
						 | 
					11c4c02ce3 | ||
| 
						 | 
					c6bec6ef0d | ||
| 
						 | 
					7c3908dd19 | ||
| 
						 | 
					3477592385 | ||
| 
						 | 
					be45636661 | ||
| 
						 | 
					6fb3233778 | ||
| 
						 | 
					636b6b450d | ||
| 
						 | 
					2c55c0d367 | ||
| 
						 | 
					0431941ec5 | ||
| 
						 | 
					42733b3bea | ||
| 
						 | 
					8aab301b66 | ||
| 
						 | 
					19a0192b42 | ||
| 
						 | 
					f99f41cf5c | ||
| 
						 | 
					b34d449c42 | ||
| 
						 | 
					04f9095d9e | ||
| 
						 | 
					0e039aa797 | ||
| 
						 | 
					c21869fb07 | ||
| 
						 | 
					9a0c776c60 | ||
| 
						 | 
					77db140f94 | ||
| 
						 | 
					fecef70773 | ||
| 
						 | 
					b48315d9b6 | ||
| 
						 | 
					e8a682f223 | ||
| 
						 | 
					98fbfff417 | ||
| 
						 | 
					78ca13a272 | ||
| 
						 | 
					d4778ae47e | ||
| 
						 | 
					ff613640e2 | ||
| 
						 | 
					aec13c1a9f | ||
| 
						 | 
					64f0f80eb6 | ||
| 
						 | 
					d71061122c | ||
| 
						 | 
					fb552ac616 | ||
| 
						 | 
					18e503f30f | ||
| 
						 | 
					37fc562bd8 | ||
| 
						 | 
					a0b3e0de6c | ||
| 
						 | 
					b6dcdbfc94 | ||
| 
						 | 
					cd4f7cddc7 | ||
| 
						 | 
					3db244261d | ||
| 
						 | 
					acf20c7dbd | ||
| 
						 | 
					7c75f462e8 | ||
| 
						 | 
					d636aa7109 | ||
| 
						 | 
					1d42dbaf1e | ||
| 
						 | 
					44c8b81eea | ||
| 
						 | 
					23129dec6f | ||
| 
						 | 
					0287ead9aa | ||
| 
						 | 
					282feebab3 | ||
| 
						 | 
					e9f613acea | ||
| 
						 | 
					a25f33d28a | ||
| 
						 | 
					94480b57db | ||
| 
						 | 
					7689ed34d3 | ||
| 
						 | 
					33130b07ce | ||
| 
						 | 
					08882ac5be | ||
| 
						 | 
					1fc3ac806d | ||
| 
						 | 
					0c28f277d1 | ||
| 
						 | 
					8c7168698e | ||
| 
						 | 
					b5ca7df5aa | ||
| 
						 | 
					14b148d390 | ||
| 
						 | 
					e0d4e97c1a | ||
| 
						 | 
					f4274da164 | ||
| 
						 | 
					07a9d1a2c2 | ||
| 
						 | 
					88a3dd7896 | ||
| 
						 | 
					4f59432c06 | ||
| 
						 | 
					2d1cbca960 | ||
| 
						 | 
					fc68056917 | ||
| 
						 | 
					17b5326ba9 | ||
| 
						 | 
					3d9b105fe0 | ||
| 
						 | 
					70dc09ebe4 | ||
| 
						 | 
					1771668096 | ||
| 
						 | 
					38663fcc82 | ||
| 
						 | 
					a6dab873d9 | ||
| 
						 | 
					480b9e5d29 | ||
| 
						 | 
					19c5314f28 | ||
| 
						 | 
					c372482c1b | ||
| 
						 | 
					ba4526e071 | ||
| 
						 | 
					98c08a6312 | ||
| 
						 | 
					3ed3603b60 | ||
| 
						 | 
					f2589af1cf | ||
| 
						 | 
					0e37c90925 | ||
| 
						 | 
					b972fbaa8f | ||
| 
						 | 
					77c7f17a5e | ||
| 
						 | 
					b318cfb169 | ||
| 
						 | 
					e33d290159 | ||
| 
						 | 
					6727565a84 | ||
| 
						 | 
					a0778bfae5 | ||
| 
						 | 
					0f1d77a870 | ||
| 
						 | 
					d9d0f1b52c | ||
| 
						 | 
					e075341d66 | ||
| 
						 | 
					bc32dbbea9 | ||
| 
						 | 
					f10f4447da | ||
| 
						 | 
					d76b8c89ec | ||
| 
						 | 
					512d359e26 | ||
| 
						 | 
					c869da8839 | ||
| 
						 | 
					d80866041e | ||
| 
						 | 
					75a86fa024 | ||
| 
						 | 
					6b3bf0edf3 | ||
| 
						 | 
					3ca16bfdd9 | ||
| 
						 | 
					59281ca03a | ||
| 
						 | 
					6aa220c935 | ||
| 
						 | 
					3fa39ed723 | ||
| 
						 | 
					0f65d5eba5 | ||
| 
						 | 
					1587761819 | ||
| 
						 | 
					83019f7e12 | ||
| 
						 | 
					bdfa4ff947 | ||
| 
						 | 
					8b69d9d2b5 | ||
| 
						 | 
					3c630352e2 | ||
| 
						 | 
					4a620922e2 | ||
| 
						 | 
					4b06d778ad | ||
| 
						 | 
					6bb7dc1e90 | ||
| 
						 | 
					3f7c592082 | ||
| 
						 | 
					0e4bc56347 | ||
| 
						 | 
					5c168710ac | ||
| 
						 | 
					6053ef80e5 | ||
| 
						 | 
					55a4a77a52 | ||
| 
						 | 
					1e8569398c | ||
| 
						 | 
					6e0c9e6008 | ||
| 
						 | 
					c55d27ac33 | ||
| 
						 | 
					4e9de7aa3a | ||
| 
						 | 
					fc007d021e | ||
| 
						 | 
					baacd8d4e5 | ||
| 
						 | 
					6c495bdb5d | ||
| 
						 | 
					8b96875052 | ||
| 
						 | 
					b53e076988 | ||
| 
						 | 
					0e698584a0 | ||
| 
						 | 
					15c7adb0c9 | ||
| 
						 | 
					9a6d8ee5b5 | ||
| 
						 | 
					9458530d45 | ||
| 
						 | 
					9de014a7f8 | ||
| 
						 | 
					4f761f5956 | ||
| 
						 | 
					db99779bee | ||
| 
						 | 
					e5b2b0f91f | ||
| 
						 | 
					ccf117510d | ||
| 
						 | 
					746570e575 | ||
| 
						 | 
					508c535221 | ||
| 
						 | 
					9a5faeaa42 | ||
| 
						 | 
					d2f6d28298 | ||
| 
						 | 
					a5f78bf3ba | ||
| 
						 | 
					ce92bb54d1 | ||
| 
						 | 
					f3be6c7b7d | ||
| 
						 | 
					4aa902ebaf | ||
| 
						 | 
					e30dd20c0e | ||
| 
						 | 
					2693812db2 | ||
| 
						 | 
					f20339e6d7 | ||
| 
						 | 
					fd621f7dfd | ||
| 
						 | 
					c05353c50a | ||
| 
						 | 
					73ea416070 | ||
| 
						 | 
					4f33534c8a | ||
| 
						 | 
					eddee61671 | ||
| 
						 | 
					d70323f1c5 | ||
| 
						 | 
					716cddc03c | ||
| 
						 | 
					f0288f05b9 | ||
| 
						 | 
					31db43df08 | ||
| 
						 | 
					512cab0128 | ||
| 
						 | 
					779558b9e5 | ||
| 
						 | 
					21b25ed4b8 | ||
| 
						 | 
					58f41a926a | ||
| 
						 | 
					81d06ef2fd | ||
| 
						 | 
					225f303a9d | ||
| 
						 | 
					ff6e530359 | ||
| 
						 | 
					0176842592 | ||
| 
						 | 
					d741ccadb5 | ||
| 
						 | 
					6cf41fec72 | ||
| 
						 | 
					8132d3ac40 | ||
| 
						 | 
					43e12b6f1c | ||
| 
						 | 
					0b36857866 | ||
| 
						 | 
					cc9001cb3f | ||
| 
						 | 
					b1b9530165 | ||
| 
						 | 
					caa97ef149 | ||
| 
						 | 
					d0b72cf45b | ||
| 
						 | 
					4243a7f796 | ||
| 
						 | 
					046f210112 | ||
| 
						 | 
					16cd15e688 | ||
| 
						 | 
					98a711b479 | ||
| 
						 | 
					481547f0fe | ||
| 
						 | 
					8d932f6fd7 | ||
| 
						 | 
					48fd490c6d | ||
| 
						 | 
					9289f21b7d | ||
| 
						 | 
					d3d4f9f5e9 | ||
| 
						 | 
					eb38b26dbc | ||
| 
						 | 
					8bbe29f2ca | ||
| 
						 | 
					cc8cc9a3a1 | ||
| 
						 | 
					af55c09d9f | ||
| 
						 | 
					4531c1aa5e | ||
| 
						 | 
					761393bba7 | ||
| 
						 | 
					6f71e5ee6a | ||
| 
						 | 
					715feb3104 | ||
| 
						 | 
					83d8fa7dd1 | ||
| 
						 | 
					586723138e | ||
| 
						 | 
					5cd91b5055 | ||
| 
						 | 
					6dd9066e0e | ||
| 
						 | 
					3dccfc1e68 | ||
| 
						 | 
					804ab1e0a4 | ||
| 
						 | 
					8002e3073b | ||
| 
						 | 
					ac6f377754 | ||
| 
						 | 
					71b7858b1d | ||
| 
						 | 
					7da74281d2 | ||
| 
						 | 
					e6b0c0007f | ||
| 
						 | 
					eb2b33c2b9 | ||
| 
						 | 
					eed15a831c | ||
| 
						 | 
					5d6a017931 | ||
| 
						 | 
					6022fe81a2 | ||
| 
						 | 
					8b6fe84404 | ||
| 
						 | 
					3b58c74c98 | ||
| 
						 | 
					7752d34c61 | ||
| 
						 | 
					01483c269e | ||
| 
						 | 
					03e13ca3f1 | ||
| 
						 | 
					065c5d6328 | ||
| 
						 | 
					f00fdcd14d | ||
| 
						 | 
					194274cb68 | ||
| 
						 | 
					0fe4621e19 | ||
| 
						 | 
					c5036d785a | ||
| 
						 | 
					d608b4d662 | ||
| 
						 | 
					b3f6fe919a | ||
| 
						 | 
					d1417be75c | ||
| 
						 | 
					e7deff3cdf | ||
| 
						 | 
					5f8f94a661 | ||
| 
						 | 
					3c3f98dc93 | ||
| 
						 | 
					f8a2233457 | ||
| 
						 | 
					051742fb6c | ||
| 
						 | 
					b066c3cd50 | ||
| 
						 | 
					eda2da3235 | ||
| 
						 | 
					c0b03d44fb | ||
| 
						 | 
					d64a7232d4 | ||
| 
						 | 
					876708c67d | ||
| 
						 | 
					d4f0339c66 | ||
| 
						 | 
					127186bf57 | ||
| 
						 | 
					f06d0072fc | ||
| 
						 | 
					f81e86d791 | ||
| 
						 | 
					2ff2710ccf | ||
| 
						 | 
					ff65e94e04 | ||
| 
						 | 
					6c8b9259fc | ||
| 
						 | 
					75d448dde4 | ||
| 
						 | 
					e303f55fc7 | ||
| 
						 | 
					d2617165ad | ||
| 
						 | 
					7184ef1210 | ||
| 
						 | 
					93caba129b | ||
| 
						 | 
					6e177343f7 | ||
| 
						 | 
					ef236ec3b2 | ||
| 
						 | 
					8711efb498 | ||
| 
						 | 
					e5fa864f62 | ||
| 
						 | 
					22c98d4aad | ||
| 
						 | 
					cc7399e79c | ||
| 
						 | 
					14b3f1007e | ||
| 
						 | 
					645532b999 | ||
| 
						 | 
					220bd84911 | ||
| 
						 | 
					dec95a126a | ||
| 
						 | 
					a79b668b8f | ||
| 
						 | 
					06ddf8eb08 | ||
| 
						 | 
					71fca64d96 | ||
| 
						 | 
					14023fe352 | ||
| 
						 | 
					b6b0b0d7a5 | ||
| 
						 | 
					d6e460d44c | ||
| 
						 | 
					0089a9dfa8 | ||
| 
						 | 
					a5910673a6 | ||
| 
						 | 
					8e93eff8c6 | 
@@ -3,8 +3,6 @@ libcrypto.pc
 | 
			
		||||
libssl.pc
 | 
			
		||||
MINFO
 | 
			
		||||
makefile.one
 | 
			
		||||
tmp
 | 
			
		||||
out
 | 
			
		||||
outinc
 | 
			
		||||
rehash.time
 | 
			
		||||
testlog
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										109
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										109
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,109 +0,0 @@
 | 
			
		||||
# Object files
 | 
			
		||||
*.o
 | 
			
		||||
*.obj
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
crypto/aes/asm/a_win32.asm
 | 
			
		||||
crypto/bf/asm/b_win32.asm
 | 
			
		||||
crypto/bn/asm/bn_win32.asm
 | 
			
		||||
crypto/bn/asm/co_win32.asm
 | 
			
		||||
crypto/bn/asm/mt_win32.asm
 | 
			
		||||
crypto/cast/asm/c_win32.asm
 | 
			
		||||
crypto/cpu_win32.asm
 | 
			
		||||
crypto/des/asm/d_win32.asm
 | 
			
		||||
crypto/des/asm/y_win32.asm
 | 
			
		||||
crypto/md5/asm/m5_win32.asm
 | 
			
		||||
crypto/rc4/asm/r4_win32.asm
 | 
			
		||||
crypto/rc5/asm/r5_win32.asm
 | 
			
		||||
crypto/ripemd/asm/rm_win32.asm
 | 
			
		||||
crypto/sha/asm/s1_win32.asm
 | 
			
		||||
crypto/sha/asm/sha512-sse2.asm
 | 
			
		||||
 | 
			
		||||
# Executables
 | 
			
		||||
/apps/openssl
 | 
			
		||||
/test/sha256t
 | 
			
		||||
/test/sha512t
 | 
			
		||||
/test/*test
 | 
			
		||||
/test/fips_aesavs
 | 
			
		||||
/test/fips_desmovs
 | 
			
		||||
/test/fips_dhvs
 | 
			
		||||
/test/fips_drbgvs
 | 
			
		||||
/test/fips_dssvs
 | 
			
		||||
/test/fips_ecdhvs
 | 
			
		||||
/test/fips_ecdsavs
 | 
			
		||||
/test/fips_rngvs
 | 
			
		||||
/test/fips_test_suite
 | 
			
		||||
*.so*
 | 
			
		||||
*.dylib*
 | 
			
		||||
*.dll*
 | 
			
		||||
# Exceptions
 | 
			
		||||
!/test/bctest
 | 
			
		||||
!/crypto/des/times/486-50.sol
 | 
			
		||||
 | 
			
		||||
# Misc auto generated files
 | 
			
		||||
/tools/c_rehash
 | 
			
		||||
/test/evptests.txt
 | 
			
		||||
lib
 | 
			
		||||
Makefile.save
 | 
			
		||||
*.bak
 | 
			
		||||
tags
 | 
			
		||||
TAGS
 | 
			
		||||
 | 
			
		||||
# Windows
 | 
			
		||||
/tmp32dll
 | 
			
		||||
/tmp32dll.dbg
 | 
			
		||||
/out32dll
 | 
			
		||||
/out32dll.dbg
 | 
			
		||||
/inc32
 | 
			
		||||
/MINFO
 | 
			
		||||
ms/bcb.mak
 | 
			
		||||
ms/libeay32.def
 | 
			
		||||
ms/nt.mak
 | 
			
		||||
ms/ntdll.mak
 | 
			
		||||
ms/ssleay32.def
 | 
			
		||||
ms/version32.rc
 | 
			
		||||
@@ -10,18 +10,13 @@ OpenSSL project.
 | 
			
		||||
We would like to identify and thank the following such sponsors for their past
 | 
			
		||||
or current significant support of the OpenSSL project:
 | 
			
		||||
 | 
			
		||||
Major support:
 | 
			
		||||
 | 
			
		||||
	Qualys		http://www.qualys.com/
 | 
			
		||||
 | 
			
		||||
Very significant support:
 | 
			
		||||
 | 
			
		||||
	OpenGear:	http://www.opengear.com/
 | 
			
		||||
	OpenGear: www.opengear.com
 | 
			
		||||
 | 
			
		||||
Significant support:
 | 
			
		||||
 | 
			
		||||
	PSW Group:	http://www.psw.net/
 | 
			
		||||
	Acano Ltd.	http://acano.com/
 | 
			
		||||
	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.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										385
									
								
								Configure
									
									
									
									
									
								
							
							
						
						
									
										385
									
								
								Configure
									
									
									
									
									
								
							@@ -123,21 +123,25 @@ my $tlib="-lnsl -lsocket";
 | 
			
		||||
my $bits1="THIRTY_TWO_BIT ";
 | 
			
		||||
my $bits2="SIXTY_FOUR_BIT ";
 | 
			
		||||
 | 
			
		||||
my $x86_asm="x86cpuid.o:bn-586.o co-586.o x86-mont.o:des-586.o crypt586.o:aes-586.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o:cmll-x86.o";
 | 
			
		||||
my $x86_asm="x86cpuid.o:bn-586.o co-586.o x86-mont.o x86-gf2m.o:des-586.o crypt586.o:aes-586.o vpaes-x86.o aesni-x86.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o:cmll-x86.o:ghash-x86.o:e_padlock-x86.o";
 | 
			
		||||
 | 
			
		||||
my $x86_elf_asm="$x86_asm:elf";
 | 
			
		||||
 | 
			
		||||
my $x86_64_asm="x86_64cpuid.o:x86_64-gcc.o x86_64-mont.o::aes-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o";
 | 
			
		||||
my $ia64_asm="ia64cpuid.o:bn-ia64.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o::rc4-ia64.o rc4_skey.o:::::void";
 | 
			
		||||
my $sparcv9_asm="sparcv9cap.o sparccpuid.o:bn-sparcv9.o sparcv9-mont.o sparcv9a-mont.o:des_enc-sparc.o fcrypt_b.o:aes_core.o aes_cbc.o aes-sparcv9.o:::sha1-sparcv9.o sha256-sparcv9.o sha512-sparcv9.o:::::::void";
 | 
			
		||||
my $sparcv8_asm=":sparcv8.o:des_enc-sparc.o fcrypt_b.o:::::::::::void";
 | 
			
		||||
my $alpha_asm="alphacpuid.o:bn_asm.o alpha-mont.o::::::::::::void";
 | 
			
		||||
my $mips3_asm=":bn-mips3.o::::::::::::void";
 | 
			
		||||
my $s390x_asm="s390xcap.o s390xcpuid.o:bn-s390x.o s390x-mont.o::aes-s390x.o:::sha1-s390x.o sha256-s390x.o sha512-s390x.o::rc4-s390x.o:::::void";
 | 
			
		||||
my $armv4_asm=":bn_asm.o armv4-mont.o::aes_cbc.o aes-armv4.o:::sha1-armv4-large.o sha256-armv4.o sha512-armv4.o:::::::void";
 | 
			
		||||
my $ppc32_asm="ppccpuid.o:bn-ppc.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o::::::";
 | 
			
		||||
my $ppc64_asm="ppccpuid.o:bn-ppc.o ppc-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o sha512-ppc.o::::::";
 | 
			
		||||
my $no_asm=":::::::::::::void";
 | 
			
		||||
my $x86_64_asm="x86_64cpuid.o:x86_64-gcc.o x86_64-mont.o x86_64-mont5.o x86_64-gf2m.o modexp512-x86_64.o::aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o rc4-md5-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o:ghash-x86_64.o:e_padlock-x86_64.o";
 | 
			
		||||
my $ia64_asm="ia64cpuid.o:bn-ia64.o ia64-mont.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o::rc4-ia64.o rc4_skey.o:::::ghash-ia64.o::void";
 | 
			
		||||
my $sparcv9_asm="sparcv9cap.o sparccpuid.o:bn-sparcv9.o sparcv9-mont.o sparcv9a-mont.o:des_enc-sparc.o fcrypt_b.o:aes_core.o aes_cbc.o aes-sparcv9.o:::sha1-sparcv9.o sha256-sparcv9.o sha512-sparcv9.o:::::::ghash-sparcv9.o::void";
 | 
			
		||||
my $sparcv8_asm=":sparcv8.o:des_enc-sparc.o fcrypt_b.o:::::::::::::void";
 | 
			
		||||
my $alpha_asm="alphacpuid.o:bn_asm.o alpha-mont.o:::::sha1-alpha.o:::::::ghash-alpha.o::void";
 | 
			
		||||
my $mips32_asm=":bn-mips.o::aes_cbc.o aes-mips.o:::sha1-mips.o sha256-mips.o::::::::";
 | 
			
		||||
my $mips64_asm=":bn-mips.o mips-mont.o::aes_cbc.o aes-mips.o:::sha1-mips.o sha256-mips.o sha512-mips.o::::::::";
 | 
			
		||||
my $s390x_asm="s390xcap.o s390xcpuid.o:bn-s390x.o s390x-mont.o s390x-gf2m.o::aes_ctr.o aes-s390x.o:::sha1-s390x.o sha256-s390x.o sha512-s390x.o::rc4-s390x.o:::::ghash-s390x.o:";
 | 
			
		||||
my $armv4_asm="armcap.o armv4cpuid.o:bn_asm.o armv4-mont.o armv4-gf2m.o::aes_cbc.o aes-armv4.o:::sha1-armv4-large.o sha256-armv4.o sha512-armv4.o:::::::ghash-armv4.o::void";
 | 
			
		||||
my $aarch64_asm="armcap.o arm64cpuid.o mem_clr.o:::aes_core.o aes_cbc.o aesv8-armx.o:::sha1-armv8.o sha256-armv8.o sha512-armv8.o:::::::ghashv8-armx.o:";
 | 
			
		||||
my $parisc11_asm="pariscid.o:bn_asm.o parisc-mont.o::aes_core.o aes_cbc.o aes-parisc.o:::sha1-parisc.o sha256-parisc.o sha512-parisc.o::rc4-parisc.o:::::ghash-parisc.o::32";
 | 
			
		||||
my $parisc20_asm="pariscid.o:pa-risc2W.o parisc-mont.o::aes_core.o aes_cbc.o aes-parisc.o:::sha1-parisc.o sha256-parisc.o sha512-parisc.o::rc4-parisc.o:::::ghash-parisc.o::64";
 | 
			
		||||
my $ppc32_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o::::::::";
 | 
			
		||||
my $ppc64_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o sha512-ppc.o::::::::";
 | 
			
		||||
my $no_asm=":::::::::::::::void";
 | 
			
		||||
 | 
			
		||||
# As for $BSDthreads. Idea is to maintain "collective" set of flags,
 | 
			
		||||
# which would cover all BSD flavors. -pthread applies to them all, 
 | 
			
		||||
@@ -148,7 +152,7 @@ my $no_asm=":::::::::::::void";
 | 
			
		||||
# seems to be sufficient?
 | 
			
		||||
my $BSDthreads="-pthread -D_THREAD_SAFE -D_REENTRANT";
 | 
			
		||||
 | 
			
		||||
#config-string	$cc : $cflags : $unistd : $thread_cflag : $sys_id : $lflags : $bn_ops : $cpuid_obj : $bn_obj : $des_obj : $aes_obj : $bf_obj : $md5_obj : $sha1_obj : $cast_obj : $rc4_obj : $rmd160_obj : $rc5_obj : $wp_obj : $cmll_obj : $dso_scheme : $shared_target : $shared_cflag : $shared_ldflag : $shared_extension : $ranlib : $arflags : $multilib
 | 
			
		||||
#config-string	$cc : $cflags : $unistd : $thread_cflag : $sys_id : $lflags : $bn_ops : $cpuid_obj : $bn_obj : $des_obj : $aes_obj : $bf_obj : $md5_obj : $sha1_obj : $cast_obj : $rc4_obj : $rmd160_obj : $rc5_obj : $wp_obj : $cmll_obj : $modes_obj : $engines_obj : $dso_scheme : $shared_target : $shared_cflag : $shared_ldflag : $shared_extension : $ranlib : $arflags : $multilib
 | 
			
		||||
 | 
			
		||||
my %table=(
 | 
			
		||||
# File 'TABLE' (created by 'make TABLE') contains the data from this list,
 | 
			
		||||
@@ -163,33 +167,32 @@ my %table=(
 | 
			
		||||
# Our development configs
 | 
			
		||||
"purify",	"purify gcc:-g -DPURIFY -Wall::(unknown)::-lsocket -lnsl::::",
 | 
			
		||||
"debug",	"gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -ggdb -g2 -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror::(unknown)::-lefence::::",
 | 
			
		||||
"debug-ben",	"gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DDEBUG_UNUSED -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown):::::bn86-elf.o co86-elf.o",
 | 
			
		||||
"debug-ben",	"gcc:$gcc_devteam_warn -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DDEBUG_SAFESTACK -O2 -pipe::(unknown):::::",
 | 
			
		||||
"debug-ben-openbsd","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::",
 | 
			
		||||
"debug-ben-openbsd-debug","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -g3 -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::",
 | 
			
		||||
"debug-ben-debug",	"gcc44:$gcc_devteam_warn -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O2 -pipe::(unknown)::::::",
 | 
			
		||||
"debug-ben-debug-64",	"gcc:$gcc_devteam_warn -Wno-error=overlength-strings -Wno-error=strict-aliasing -Wno-error=uninitialized -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-ben-debug",	"gcc:$gcc_devteam_warn -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -g3 -O2 -pipe::(unknown)::::::",
 | 
			
		||||
"debug-ben-no-opt",	"gcc: -Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG -Werror -DL_ENDIAN -DTERMIOS -Wall -g3::(unknown)::::::",
 | 
			
		||||
"debug-ben-strict",	"gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DCONST_STRICT -O2 -Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings -pipe::(unknown)::::::",
 | 
			
		||||
"debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
 | 
			
		||||
"debug-bodo",	"gcc:$gcc_devteam_warn -Wno-error=overlength-strings -DBN_DEBUG -DBN_DEBUG_RAND -DCONF_DEBUG -DBIO_PAIR_DEBUG -m64 -DL_ENDIAN -DTERMIO -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"debug-bodo",	"gcc:$gcc_devteam_warn -DBN_DEBUG -DBN_DEBUG_RAND -DCONF_DEBUG -DBIO_PAIR_DEBUG -m64 -DL_ENDIAN -DTERMIO -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"debug-ulf", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DBN_DEBUG_RAND -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations:::CYGWIN32:::${no_asm}:win32:cygwin-shared:::.dll",
 | 
			
		||||
"debug-steve64", "gcc:$gcc_devteam_warn -m64 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-steve64", "gcc:$gcc_devteam_warn -m64 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-steve32", "gcc:$gcc_devteam_warn -m32 -DL_ENDIAN -DCONF_DEBUG -DDEBUG_SAFESTACK -g -pipe::-D_REENTRANT::-rdynamic -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-steve-opt", "gcc:$gcc_devteam_warn -m64 -O3 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -ggdb -g3 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -ggdb -g3 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-geoff32","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -DMD32_REG_T=int -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:BN_LLONG:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-geoff64","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -DMD32_REG_T=int -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-steve-opt", "gcc:$gcc_devteam_warn -m64 -O3 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-geoff32","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:BN_LLONG:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-geoff64","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-pentium","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -mcpu=pentium -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
 | 
			
		||||
"debug-linux-ppro","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -mcpu=pentiumpro -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
 | 
			
		||||
"debug-linux-elf","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -march=i486 -Wall::-D_REENTRANT::-lefence -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-elf-noefence","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -march=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-ia32-aes", "gcc:-DAES_EXPERIMENTAL -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:x86cpuid.o:bn-586.o co-586.o x86-mont.o:des-586.o crypt586.o:aes_x86core.o aes_cbc.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o::elf:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-ia32-aes", "gcc:-DAES_EXPERIMENTAL -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:x86cpuid.o:bn-586.o co-586.o x86-mont.o:des-586.o crypt586.o:aes_x86core.o aes_cbc.o aesni-x86.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o::ghash-x86.o:e_padlock-x86.o:elf:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-generic32","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DTERMIO -g -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-generic64","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DTERMIO -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-x86_64",	"gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -m64 -DL_ENDIAN -DTERMIO -g -Wall -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"debug-linux-x86_64","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -m64 -DL_ENDIAN -DTERMIO -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"dist",		"cc:-O::(unknown)::::::",
 | 
			
		||||
 | 
			
		||||
# Basic configs that should work on any (32 and less bit) box
 | 
			
		||||
@@ -197,8 +200,8 @@ my %table=(
 | 
			
		||||
"cc",		"cc:-O::(unknown)::::::",
 | 
			
		||||
 | 
			
		||||
####VOS Configurations
 | 
			
		||||
"vos-gcc","gcc:-O3 -Wall -DOPENSSL_SYSNAME_VOS -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
 | 
			
		||||
"debug-vos-gcc","gcc:-O0 -g -Wall -DOPENSSL_SYSNAME_VOS -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
 | 
			
		||||
"vos-gcc","gcc:-O3 -Wall -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
 | 
			
		||||
"debug-vos-gcc","gcc:-O0 -g -Wall -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
 | 
			
		||||
 | 
			
		||||
#### Solaris x86 with GNU C setups
 | 
			
		||||
# -DOPENSSL_NO_INLINE_ASM switches off inline assembler. We have to do it
 | 
			
		||||
@@ -215,7 +218,7 @@ my %table=(
 | 
			
		||||
# actually recommend to consider using gcc shared build even with vendor
 | 
			
		||||
# compiler:-)
 | 
			
		||||
#						<appro@fy.chalmers.se>
 | 
			
		||||
"solaris64-x86_64-gcc","gcc:-m64 -O3 -Wall -DL_ENDIAN -DMD32_REG_T=int::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:solaris-shared:-fPIC:-m64 -shared -static-libgcc:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
 | 
			
		||||
"solaris64-x86_64-gcc","gcc:-m64 -O3 -Wall -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:solaris-shared:-fPIC:-m64 -shared -static-libgcc:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
 | 
			
		||||
 
 | 
			
		||||
#### Solaris x86 with Sun C setups
 | 
			
		||||
"solaris-x86-cc","cc:-fast -O -Xa::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
@@ -238,7 +241,7 @@ my %table=(
 | 
			
		||||
"solaris-sparcv7-cc","cc:-xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-sparcv8-cc","cc:-xarch=v8 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-sparcv9-cc","cc:-xtarget=ultra -xarch=v8plus -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-xarch=v9 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
 | 
			
		||||
"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-xarch=v9 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):/usr/ccs/bin/ar rs::/64",
 | 
			
		||||
####
 | 
			
		||||
"debug-solaris-sparcv8-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xarch=v8 -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-solaris-sparcv9-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xtarget=ultra -xarch=v8plus -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 
 | 
			
		||||
@@ -249,16 +252,16 @@ my %table=(
 | 
			
		||||
 | 
			
		||||
#### IRIX 5.x configs
 | 
			
		||||
# -mips2 flag is added by ./config when appropriate.
 | 
			
		||||
"irix-gcc","gcc:-O3 -DTERMIOS -DB_ENDIAN::(unknown):::BN_LLONG MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK DES_UNROLL DES_RISC2 DES_PTR BF_PTR:${no_asm}:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix-cc", "cc:-O2 -use_readonly_const -DTERMIOS -DB_ENDIAN::(unknown):::BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC2 DES_UNROLL BF_PTR:${no_asm}:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix-gcc","gcc:-O3 -DTERMIOS -DB_ENDIAN::(unknown):::BN_LLONG MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK DES_UNROLL DES_RISC2 DES_PTR BF_PTR:${mips32_asm}:o32:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix-cc", "cc:-O2 -use_readonly_const -DTERMIOS -DB_ENDIAN::(unknown):::BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC2 DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
#### IRIX 6.x configs
 | 
			
		||||
# Only N32 and N64 ABIs are supported. If you need O32 ABI build, invoke
 | 
			
		||||
# './Configure irix-cc -o32' manually.
 | 
			
		||||
"irix-mips3-gcc","gcc:-mabi=n32 -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK_LL DES_UNROLL DES_RISC2 DES_PTR BF_PTR SIXTY_FOUR_BIT:${mips3_asm}:dlfcn:irix-shared::-mabi=n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::32",
 | 
			
		||||
"irix-mips3-cc", "cc:-n32 -mips3 -O2 -use_readonly_const -G0 -rdata_shared -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::DES_PTR RC4_CHAR RC4_CHUNK_LL DES_RISC2 DES_UNROLL BF_PTR SIXTY_FOUR_BIT:${mips3_asm}:dlfcn:irix-shared::-n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::32",
 | 
			
		||||
"irix-mips3-gcc","gcc:-mabi=n32 -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK_LL DES_UNROLL DES_RISC2 DES_PTR BF_PTR SIXTY_FOUR_BIT:${mips64_asm}:n32:dlfcn:irix-shared::-mabi=n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::32",
 | 
			
		||||
"irix-mips3-cc", "cc:-n32 -mips3 -O2 -use_readonly_const -G0 -rdata_shared -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::DES_PTR RC4_CHAR RC4_CHUNK_LL DES_RISC2 DES_UNROLL BF_PTR SIXTY_FOUR_BIT:${mips64_asm}:n32:dlfcn:irix-shared::-n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::32",
 | 
			
		||||
# N64 ABI builds.
 | 
			
		||||
"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips3_asm}:dlfcn:irix-shared::-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -G0 -rdata_shared -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips3_asm}:dlfcn:irix-shared::-64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips64_asm}:64:dlfcn:irix-shared::-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -G0 -rdata_shared -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips64_asm}:64:dlfcn:irix-shared::-64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
 | 
			
		||||
#### Unified HP-UX ANSI C configs.
 | 
			
		||||
# Special notes:
 | 
			
		||||
@@ -291,17 +294,18 @@ my %table=(
 | 
			
		||||
# Since there is mention of this in shlib/hpux10-cc.sh
 | 
			
		||||
"hpux-parisc-cc-o4","cc:-Ae +O4 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::-D_REENTRANT::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:${no_asm}:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc2-gcc","gcc:-march=2.0 -O3 -DB_ENDIAN -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL DES_RISC1::pa-risc2.o::::::::::::void:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux64-parisc2-gcc","gcc:-O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::pa-risc2W.o::::::::::::void:dlfcn:hpux-shared:-fpic:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_64",
 | 
			
		||||
"hpux-parisc1_1-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:${parisc11_asm}:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc2-gcc","gcc:-march=2.0 -O3 -DB_ENDIAN -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL DES_RISC1::pa-risc2.o::::::::::::::void:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux64-parisc2-gcc","gcc:-O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::pa-risc2W.o::::::::::::::void:dlfcn:hpux-shared:-fpic:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_64",
 | 
			
		||||
 | 
			
		||||
# More attempts at unified 10.X and 11.X targets for HP C compiler.
 | 
			
		||||
#
 | 
			
		||||
# Chris Ruemmler <ruemmler@cup.hp.com>
 | 
			
		||||
# Kevin Steves <ks@hp.se>
 | 
			
		||||
"hpux-parisc-cc","cc:+O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::-D_REENTRANT::-Wl,+s -ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc1_0-cc","cc:+DAportable +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-Wl,+s -ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc2-cc","cc:+DA2.0 +DS2.0 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::pa-risc2.o::::::::::::void:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux64-parisc2-cc","cc:+DD64 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::pa-risc2W.o::::::::::::void:dlfcn:hpux-shared:+Z:+DD64 -b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_64",
 | 
			
		||||
"hpux-parisc1_1-cc","cc:+DA1.1 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-Wl,+s -ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${parisc11_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa1.1",
 | 
			
		||||
"hpux-parisc2-cc","cc:+DA2.0 +DS2.0 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::pa-risc2.o::::::::::::::void:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux64-parisc2-cc","cc:+DD64 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${parisc20_asm}:dlfcn:hpux-shared:+Z:+DD64 -b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_64",
 | 
			
		||||
 | 
			
		||||
# HP/UX IA-64 targets
 | 
			
		||||
"hpux-ia64-cc","cc:-Ae +DD32 +O2 +Olit=all -z -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX DES_UNROLL DES_RISC1 DES_INT:${ia64_asm}:dlfcn:hpux-shared:+Z:+DD32 -b:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/hpux32",
 | 
			
		||||
@@ -352,8 +356,23 @@ my %table=(
 | 
			
		||||
"linux-ia64",	"gcc:-DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia64-ecc","ecc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia64-icc","icc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-x86_64",	"gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux-s390x",	"gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${s390x_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux-x86_64",	"gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux-x86_64-cross",  "gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DFIPS_REF_POINT_IS_CROSS_COMPILER_AWARE::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux64-s390x",	"gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${s390x_asm}:64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
#### So called "highgprs" target for z/Architecture CPUs
 | 
			
		||||
# "Highgprs" is kernel feature first implemented in Linux 2.6.32, see
 | 
			
		||||
# /proc/cpuinfo. The idea is to preserve most significant bits of
 | 
			
		||||
# general purpose registers not only upon 32-bit process context
 | 
			
		||||
# switch, but even on asynchronous signal delivery to such process.
 | 
			
		||||
# This makes it possible to deploy 64-bit instructions even in legacy
 | 
			
		||||
# application context and achieve better [or should we say adequate]
 | 
			
		||||
# performance. The build is binary compatible with linux-generic32,
 | 
			
		||||
# and the idea is to be able to install the resulting libcrypto.so
 | 
			
		||||
# alongside generic one, e.g. as /lib/highgprs/libcrypto.so.x.y, for
 | 
			
		||||
# ldconfig and run-time linker to autodiscover. Unfortunately it
 | 
			
		||||
# doesn't work just yet, because of couple of bugs in glibc
 | 
			
		||||
# sysdeps/s390/dl-procinfo.c affecting ldconfig and ld.so.1...
 | 
			
		||||
"linux32-s390x",	"gcc:-m31 -Wa,-mzarch -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$s390x_asm;$asm=~s/bn\-s390x\.o/bn_asm.o/;$asm}.":31:dlfcn:linux-shared:-fPIC:-m31:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/highgprs",
 | 
			
		||||
#### SPARC Linux setups
 | 
			
		||||
# Ray Miller <ray.miller@computing-services.oxford.ac.uk> has patiently
 | 
			
		||||
# assisted with debugging of following two configs.
 | 
			
		||||
@@ -380,6 +399,14 @@ my %table=(
 | 
			
		||||
"linux-alpha+bwx-gcc","gcc:-O3 -DL_ENDIAN -DTERMIO::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${alpha_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-alpha-ccc","ccc:-fast -readonly_strings -DL_ENDIAN -DTERMIO::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
 | 
			
		||||
"linux-alpha+bwx-ccc","ccc:-fast -readonly_strings -DL_ENDIAN -DTERMIO::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
 | 
			
		||||
# eCos ARMv4/5
 | 
			
		||||
"ecos-armv4", "gcc:-D__ECOS__ -I\$(ECOSCFG)/include -Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Wno-write-strings -mno-thumb-interwork -mcpu=arm926ej-s -g -O2 -fno-exceptions::-D_REENTRANT::-nostartfiles -L\$(ECOSCFG)/lib -Ttarget.ld::".eval{my $asm=$armv4_asm;$asm=~s/armcap.o//;$asm},
 | 
			
		||||
 | 
			
		||||
# Android: linux-* but without -DTERMIO and pointers to headers and libs.
 | 
			
		||||
"android","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"android-x86","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:".eval{my $asm=${x86_elf_asm};$asm=~s/:elf/:android/;$asm}.":dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"android-armv7","gcc:-march=armv7-a -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-pie%-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"android64-aarch64","gcc:-mandroid -fPIC -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -Wall::-D_REENTRANT::-pie%-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${aarch64_asm}:linux64:dlfcn:linux-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#### *BSD [do see comment about ${BSDthreads} above!]
 | 
			
		||||
"BSD-generic32","gcc:-DTERMIOS -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
@@ -387,6 +414,8 @@ my %table=(
 | 
			
		||||
"BSD-x86-elf",	"gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-BSD-x86-elf",	"gcc:-DL_ENDIAN -DTERMIOS -O3 -Wall -g::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-sparcv8",	"gcc:-DB_ENDIAN -DTERMIOS -O3 -mv8 -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${sparcv8_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-ppc85xx","gcc:-DTERMIOS -O3 -fomit-frame-pointer -msoft-float -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-BSD-ppc85xx","gcc:-DTERMIOS -O0 -fomit-frame-pointer -msoft-float -Wall -g::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
"BSD-generic64","gcc:-DTERMIOS -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# -DMD32_REG_T=int doesn't actually belong in sparc64 target, it
 | 
			
		||||
@@ -394,7 +423,7 @@ my %table=(
 | 
			
		||||
# triggered by RIPEMD160 code.
 | 
			
		||||
"BSD-sparc64",	"gcc:-DB_ENDIAN -DTERMIOS -O3 -DMD32_REG_T=int -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC2 BF_PTR:${sparcv9_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-ia64",	"gcc:-DL_ENDIAN -DTERMIOS -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-x86_64",	"gcc:-DL_ENDIAN -DTERMIOS -O3 -DMD32_REG_T=int -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-x86_64",	"gcc:-DL_ENDIAN -DTERMIOS -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
"bsdi-elf-gcc",     "gcc:-DPERL5 -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall::(unknown)::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
@@ -407,6 +436,7 @@ my %table=(
 | 
			
		||||
# QNX
 | 
			
		||||
"qnx4",	"cc:-DL_ENDIAN -DTERMIO::(unknown):::${x86_gcc_des} ${x86_gcc_opts}:",
 | 
			
		||||
"QNX6",       "gcc:-DTERMIOS::::-lsocket::${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"QNX6-armv4",	"gcc:-DTERMIOS -O2 -Wall:::::BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"QNX6-i386",  "gcc:-DL_ENDIAN -DTERMIOS -O2 -Wall::::-lsocket:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
# BeOS
 | 
			
		||||
@@ -439,8 +469,8 @@ my %table=(
 | 
			
		||||
"aix64-gcc","gcc:-maix64 -O -DB_ENDIAN::-pthread:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:${ppc64_asm}:aix64:dlfcn:aix-shared::-maix64 -shared -Wl,-G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X64",
 | 
			
		||||
# Below targets assume AIX 5. Idea is to effectively disregard $OBJECT_MODE
 | 
			
		||||
# at build time. $OBJECT_MODE is respected at ./config stage!
 | 
			
		||||
"aix-cc",   "cc:-q32 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded -D_THREAD_SAFE:AIX::BN_LLONG RC4_CHAR:${ppc32_asm}:aix32:dlfcn:aix-shared::-q32 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 32",
 | 
			
		||||
"aix64-cc", "cc:-q64 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded -D_THREAD_SAFE:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:${ppc64_asm}:aix64:dlfcn:aix-shared::-q64 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 64",
 | 
			
		||||
"aix-cc",   "cc:-q32 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded:AIX::BN_LLONG RC4_CHAR:${ppc32_asm}:aix32:dlfcn:aix-shared::-q32 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 32",
 | 
			
		||||
"aix64-cc", "cc:-q64 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:${ppc64_asm}:aix64:dlfcn:aix-shared::-q64 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 64",
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Cray T90 and similar (SDSC)
 | 
			
		||||
@@ -491,13 +521,13 @@ my %table=(
 | 
			
		||||
# Visual C targets
 | 
			
		||||
#
 | 
			
		||||
# Win64 targets, WIN64I denotes IA-64 and WIN64A - AMD64
 | 
			
		||||
"VC-WIN64I","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ias:win32",
 | 
			
		||||
"VC-WIN64A","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64A::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:x86_64cpuid.o:bn_asm.o x86_64-mont.o::aes-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o:auto:win32",
 | 
			
		||||
"debug-VC-WIN64I","cl:-W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ias:win32",
 | 
			
		||||
"debug-VC-WIN64A","cl:-W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64A::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:x86_64cpuid.o:bn_asm.o x86_64-mont.o::aes-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o:auto:win32",
 | 
			
		||||
"VC-WIN64I","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o ia64-mont.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ghash-ia64.o::ias:win32",
 | 
			
		||||
"VC-WIN64A","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64A::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:".eval{my $asm=$x86_64_asm;$asm=~s/x86_64-gcc\.o/bn_asm.o/;$asm}.":auto:win32",
 | 
			
		||||
"debug-VC-WIN64I","cl:-W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ghash-ia64.o::ias:win32",
 | 
			
		||||
"debug-VC-WIN64A","cl:-W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64A::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:".eval{my $asm=$x86_64_asm;$asm=~s/x86_64-gcc\.o/bn_asm.o/;$asm}.":auto:win32",
 | 
			
		||||
# x86 Win32 target defaults to ANSI API, if you want UNICODE, complement
 | 
			
		||||
# 'perl Configure VC-WIN32' with '-DUNICODE -D_UNICODE'
 | 
			
		||||
"VC-WIN32","cl:-W3 -WX -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32",
 | 
			
		||||
"VC-WIN32","cl:-W3 -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32",
 | 
			
		||||
# Unified CE target
 | 
			
		||||
"debug-VC-WIN32","cl:-W3 -WX -Gs0 -GF -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32",
 | 
			
		||||
"VC-CE","cl::::WINCE::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${no_asm}:win32",
 | 
			
		||||
@@ -554,8 +584,12 @@ my %table=(
 | 
			
		||||
"darwin64-ppc-cc","cc:-arch ppc64 -O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc64_asm}:osx64:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin-i386-cc","cc:-arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"debug-darwin-i386-cc","cc:-arch i386 -g3 -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin64-x86_64-cc","cc:-arch x86_64 -O3 -DL_ENDIAN -DMD32_REG_T=int -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin64-x86_64-cc","cc:-arch x86_64 -O3 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"debug-darwin-ppc-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DB_ENDIAN -g -Wall -O::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
# iPhoneOS/iOS
 | 
			
		||||
"iphoneos-cross","llvm-gcc:-O3 -isysroot \$(CROSS_TOP)/SDKs/\$(CROSS_SDK) -fomit-frame-pointer -fno-common::-D_REENTRANT:iOS:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"ios-cross","cc:-O3 -arch armv7 -mios-version-min=7.0.0 -isysroot \$(CROSS_TOP)/SDKs/\$(CROSS_SDK) -fno-common::-D_REENTRANT:iOS:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:armcap.o armv4cpuid_ios.o:bn_asm.o armv4-mont.o armv4-gf2m.o::aes_cbc.o aes-armv4.o:::sha1-armv4-large.o sha256-armv4.o sha512-armv4.o:::::::ghash-armv4.o::ios32:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"ios64-cross","cc:-O3 -arch arm64 -mios-version-min=7.0.0 -isysroot \$(CROSS_TOP)/SDKs/\$(CROSS_SDK) -fno-common::-D_REENTRANT:iOS:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR -RC4_CHUNK DES_INT DES_UNROLL -BF_PTR:${aarch64_asm}:ios64:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
 | 
			
		||||
##### A/UX
 | 
			
		||||
"aux3-gcc","gcc:-O2 -DTERMIO::(unknown):AUX:-lbsd:RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
 | 
			
		||||
@@ -570,25 +604,31 @@ my %table=(
 | 
			
		||||
"OS2-EMX", "gcc::::::::",
 | 
			
		||||
 | 
			
		||||
##### VxWorks for various targets
 | 
			
		||||
"vxworks-ppc60x","ccppc:-D_REENTRANT -mrtp -mhard-float -mstrict-align -fno-implicit-fp -DPPC32_fp60x -O2 -fstrength-reduce -fno-builtin -fno-strict-aliasing -Wall -DCPU=PPC32 -DTOOL_FAMILY=gnu -DTOOL=gnu -I\$(WIND_BASE)/target/usr/h -I\$(WIND_BASE)/target/usr/h/wrn/coreip:::VXWORKS:-Wl,--defsym,__wrs_rtp_base=0xe0000000 -L \$(WIND_BASE)/target/usr/lib/ppc/PPC32/common:::::",
 | 
			
		||||
"vxworks-ppcgen","ccppc:-D_REENTRANT -mrtp -msoft-float -mstrict-align -O1 -fno-builtin -fno-strict-aliasing -Wall -DCPU=PPC32 -DTOOL_FAMILY=gnu -DTOOL=gnu -I\$(WIND_BASE)/target/usr/h -I\$(WIND_BASE)/target/usr/h/wrn/coreip:::VXWORKS:-Wl,--defsym,__wrs_rtp_base=0xe0000000 -L \$(WIND_BASE)/target/usr/lib/ppc/PPC32/sfcommon:::::",
 | 
			
		||||
"vxworks-ppcgen-kernel","ccppc:-D_REENTRANT -msoft-float -mstrict-align -O1 -fno-builtin -fno-strict-aliasing -Wall -DCPU=PPC32 -DTOOL_FAMILY=gnu -DTOOL=gnu -I\$(WIND_BASE)/target/h -I\$(WIND_BASE)/target/h/wrn/coreip:::VXWORKS::::::",
 | 
			
		||||
"vxworks-ppc405","ccppc:-g -msoft-float -mlongcall -DCPU=PPC405 -I\$(WIND_BASE)/target/h:::VXWORKS:-r:::::",
 | 
			
		||||
"vxworks-ppc750","ccppc:-ansi -nostdinc -DPPC750 -D_REENTRANT -fvolatile -fno-builtin -fno-for-scope -fsigned-char -Wall -msoft-float -mlongcall -DCPU=PPC604 -I\$(WIND_BASE)/target/h \$(DEBUG_FLAG):::VXWORKS:-r:::::",
 | 
			
		||||
"vxworks-ppc750-debug","ccppc:-ansi -nostdinc -DPPC750 -D_REENTRANT -fvolatile -fno-builtin -fno-for-scope -fsigned-char -Wall -msoft-float -mlongcall -DCPU=PPC604 -I\$(WIND_BASE)/target/h -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DDEBUG -g:::VXWORKS:-r:::::",
 | 
			
		||||
"vxworks-ppc860","ccppc:-nostdinc -msoft-float -DCPU=PPC860 -DNO_STRINGS_H -I\$(WIND_BASE)/target/h:::VXWORKS:-r:::::",
 | 
			
		||||
"vxworks-mipsle","ccmips:-B\$(WIND_BASE)/host/\$(WIND_HOST_TYPE)/lib/gcc-lib/ -DL_ENDIAN -EL -Wl,-EL -mips2 -mno-branch-likely -G 0 -fno-builtin -msoft-float -DCPU=MIPS32 -DMIPSEL -DNO_STRINGS_H -I\$(WIND_BASE)/target/h:::VXWORKS:-r::${no_asm}::::::ranlibmips:",
 | 
			
		||||
"vxworks-simlinux","ccpentium:-B\$(WIND_BASE)/host/\$(WIND_HOST_TYPE)/lib/gcc-lib/ -D_VSB_CONFIG_FILE=\"\$(WIND_BASE)/target/lib/h/config/vsbConfig.h\" -DL_ENDIAN -DCPU=SIMLINUX -DTOOL_FAMILY=gnu -DTOOL=gnu -fno-builtin -fno-defer-pop -DNO_STRINGS_H -I\$(WIND_BASE)/target/h -I\$(WIND_BASE)/target/h/wrn/coreip -DOPENSSL_NO_HW_PADLOCK:::VXWORKS:-r::${no_asm}::::::ranlibpentium:",
 | 
			
		||||
"vxworks-mips","ccmips:-mrtp -mips2 -O -G 0 -B\$(WIND_BASE)/host/\$(WIND_HOST_TYPE)/lib/gcc-lib/ -D_VSB_CONFIG_FILE=\"\$(WIND_BASE)/target/lib/h/config/vsbConfig.h\" -DCPU=MIPS32 -msoft-float -mno-branch-likely -DTOOL_FAMILY=gnu -DTOOL=gnu -fno-builtin -fno-defer-pop -DNO_STRINGS_H -I\$(WIND_BASE)/target/usr/h -I\$(WIND_BASE)/target/h/wrn/coreip::-D_REENTRANT:VXWORKS:-Wl,--defsym,__wrs_rtp_base=0xe0000000 -L \$(WIND_BASE)/target/usr/lib/mips/MIPSI32/sfcommon::${mips32_asm}:o32::::::ranlibmips:",
 | 
			
		||||
 | 
			
		||||
##### Compaq Non-Stop Kernel (Tandem)
 | 
			
		||||
"tandem-c89","c89:-Ww -D__TANDEM -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1 -D_TANDEM_SOURCE -DB_ENDIAN::(unknown):::THIRTY_TWO_BIT:::",
 | 
			
		||||
 | 
			
		||||
# uClinux
 | 
			
		||||
"uClinux-dist","$ENV{'CC'}:\$(CFLAGS)::-D_REENTRANT::\$(LDFLAGS) \$(LDLIBS):BN_LLONG:::::::::::::::$ENV{'LIBSSL_dlfcn'}:linux-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):$ENV{'RANLIB'}::",
 | 
			
		||||
"uClinux-dist64","$ENV{'CC'}:\$(CFLAGS)::-D_REENTRANT::\$(LDFLAGS) \$(LDLIBS):SIXTY_FOUR_BIT_LONG:::::::::::::::$ENV{'LIBSSL_dlfcn'}:linux-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):$ENV{'RANLIB'}::",
 | 
			
		||||
"uClinux-dist","$ENV{'CC'}:\$(CFLAGS)::-D_REENTRANT::\$(LDFLAGS) \$(LDLIBS):BN_LLONG:${no_asm}:$ENV{'LIBSSL_dlfcn'}:linux-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):$ENV{'RANLIB'}::",
 | 
			
		||||
"uClinux-dist64","$ENV{'CC'}:\$(CFLAGS)::-D_REENTRANT::\$(LDFLAGS) \$(LDLIBS):SIXTY_FOUR_BIT_LONG:${no_asm}:$ENV{'LIBSSL_dlfcn'}:linux-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):$ENV{'RANLIB'}::",
 | 
			
		||||
 | 
			
		||||
"c64xplus","cl6x:-mv6400+ -o2 -ox -ms -pden -DNO_SYS_TYPES_H -DGETPID_IS_MEANINGLESS -DMD32_REG_T=int -DOPENSSL_SMALL_FOOTPRINT:<c6x.h>::DSPBIOS::BN_LLONG:c64xpluscpuid.o:bn-c64xplus.o c64xplus-gf2m.o::aes-c64xplus.o aes_cbc.o aes_ctr.o:::sha1-c64xplus.o sha256-c64xplus.o sha512-c64xplus.o:::::::ghash-c64xplus.o::void:",
 | 
			
		||||
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
my @MK1MF_Builds=qw(VC-WIN64I VC-WIN64A
 | 
			
		||||
		    debug-VC-WIN64I debug-VC-WIN64A
 | 
			
		||||
		    VC-NT VC-CE VC-WIN32 debug-VC-WIN32
 | 
			
		||||
		    BC-32 
 | 
			
		||||
		    BC-32 c64xplus
 | 
			
		||||
		    netware-clib netware-clib-bsdsock
 | 
			
		||||
		    netware-libc netware-libc-bsdsock);
 | 
			
		||||
 | 
			
		||||
@@ -613,6 +653,8 @@ my $idx_rmd160_obj = $idx++;
 | 
			
		||||
my $idx_rc5_obj = $idx++;
 | 
			
		||||
my $idx_wp_obj = $idx++;
 | 
			
		||||
my $idx_cmll_obj = $idx++;
 | 
			
		||||
my $idx_modes_obj = $idx++;
 | 
			
		||||
my $idx_engines_obj = $idx++;
 | 
			
		||||
my $idx_perlasm_scheme = $idx++;
 | 
			
		||||
my $idx_dso_scheme = $idx++;
 | 
			
		||||
my $idx_shared_target = $idx++;
 | 
			
		||||
@@ -629,6 +671,11 @@ my $openssldir="";
 | 
			
		||||
my $exe_ext="";
 | 
			
		||||
my $install_prefix= "$ENV{'INSTALL_PREFIX'}";
 | 
			
		||||
my $cross_compile_prefix="";
 | 
			
		||||
my $fipslibdir="/usr/local/ssl/fips-2.0/lib/";
 | 
			
		||||
my $nofipscanistercheck=0;
 | 
			
		||||
my $fipscanisterinternal="n";
 | 
			
		||||
my $fipscanisteronly = 0;
 | 
			
		||||
my $baseaddr="0xFB00000";
 | 
			
		||||
my $no_threads=0;
 | 
			
		||||
my $threads=0;
 | 
			
		||||
my $no_shared=0; # but "no-shared" is default
 | 
			
		||||
@@ -663,11 +710,12 @@ my $cmll_enc="camellia.o cmll_misc.o cmll_cbc.o";
 | 
			
		||||
my $processor="";
 | 
			
		||||
my $default_ranlib;
 | 
			
		||||
my $perl;
 | 
			
		||||
 | 
			
		||||
my $fips=0;
 | 
			
		||||
 | 
			
		||||
# All of the following is disabled by default (RC5 was enabled before 0.9.8):
 | 
			
		||||
 | 
			
		||||
my %disabled = ( # "what"         => "comment" [or special keyword "experimental"]
 | 
			
		||||
		 "ec_nistp_64_gcc_128" => "default",
 | 
			
		||||
		 "gmp"		  => "default",
 | 
			
		||||
		 "jpake"          => "experimental",
 | 
			
		||||
		 "md2"            => "default",
 | 
			
		||||
@@ -680,9 +728,24 @@ my %disabled = ( # "what"         => "comment" [or special keyword "experimental
 | 
			
		||||
	       );
 | 
			
		||||
my @experimental = ();
 | 
			
		||||
 | 
			
		||||
# If ssl directory missing assume truncated FIPS tarball
 | 
			
		||||
if (!-d "ssl")
 | 
			
		||||
	{
 | 
			
		||||
	print STDERR "Auto Configuring fipsonly\n";
 | 
			
		||||
	$fips = 1;
 | 
			
		||||
	$nofipscanistercheck = 1;
 | 
			
		||||
	$fipslibdir="";
 | 
			
		||||
	$fipscanisterinternal="y";
 | 
			
		||||
	$fipscanisteronly = 2;
 | 
			
		||||
	if (! -f "crypto/bn/bn_gf2m.c" )
 | 
			
		||||
		{
 | 
			
		||||
		$disabled{ec2m} = "forced";
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# This is what $depflags will look like with the above defaults
 | 
			
		||||
# (we need this to see if we should advise the user to run "make depend"):
 | 
			
		||||
my $default_depflags = " -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_STORE";
 | 
			
		||||
my $default_depflags = " -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_STORE";
 | 
			
		||||
 | 
			
		||||
# Explicit "no-..." options will be collected in %disabled along with the defaults.
 | 
			
		||||
# To remove something from %disabled, use "enable-foo" (unless it's experimental).
 | 
			
		||||
@@ -809,12 +872,47 @@ PROCESS_ARGS:
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^386$/)
 | 
			
		||||
			{ $processor=386; }
 | 
			
		||||
		elsif (/^fips$/)
 | 
			
		||||
			{
 | 
			
		||||
			$fips=1;
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^rsaref$/)
 | 
			
		||||
			{
 | 
			
		||||
			# No RSAref support any more since it's not needed.
 | 
			
		||||
			# The check for the option is there so scripts aren't
 | 
			
		||||
			# broken
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^nofipscanistercheck$/)
 | 
			
		||||
			{
 | 
			
		||||
			$fips = 1;
 | 
			
		||||
			$nofipscanistercheck = 1;
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^fipscheck$/)
 | 
			
		||||
			{
 | 
			
		||||
			if ($fipscanisteronly != 2)
 | 
			
		||||
				{
 | 
			
		||||
				print STDERR <<"EOF";
 | 
			
		||||
ERROR: FIPS not autodetected. Not running from restricted tarball??
 | 
			
		||||
EOF
 | 
			
		||||
				exit(1);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^fipscanisteronly$/)
 | 
			
		||||
			{
 | 
			
		||||
			$fips = 1;
 | 
			
		||||
			$nofipscanistercheck = 1;
 | 
			
		||||
			$fipslibdir="";
 | 
			
		||||
			$fipscanisterinternal="y";
 | 
			
		||||
			$fipscanisteronly = 1;
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^fipscanisterbuild$/)
 | 
			
		||||
			{
 | 
			
		||||
			$fips = 1;
 | 
			
		||||
			$nofipscanistercheck = 1;
 | 
			
		||||
			$fipslibdir="";
 | 
			
		||||
			$fipscanisterinternal="y";
 | 
			
		||||
			$fipscanisteronly = 1;
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^[-+]/)
 | 
			
		||||
			{
 | 
			
		||||
			if (/^-[lL](.*)$/ or /^-Wl,/)
 | 
			
		||||
@@ -823,6 +921,7 @@ PROCESS_ARGS:
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^-[^-]/ or /^\+/)
 | 
			
		||||
				{
 | 
			
		||||
				$_ =~ s/%([0-9a-f]{1,2})/chr(hex($1))/gei;
 | 
			
		||||
				$flags.=$_." ";
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^--prefix=(.*)$/)
 | 
			
		||||
@@ -853,6 +952,14 @@ PROCESS_ARGS:
 | 
			
		||||
				{
 | 
			
		||||
				$withargs{"zlib-include"}="-I$1";
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^--with-fipslibdir=(.*)$/)
 | 
			
		||||
				{
 | 
			
		||||
				$fipslibdir="$1/";
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^--with-baseaddr=(.*)$/)
 | 
			
		||||
				{
 | 
			
		||||
				$baseaddr="$1";
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^--cross-compile-prefix=(.*)$/)
 | 
			
		||||
				{
 | 
			
		||||
				$cross_compile_prefix=$1;
 | 
			
		||||
@@ -947,6 +1054,12 @@ if (defined($disabled{"ec"}) || defined($disabled{"dsa"})
 | 
			
		||||
	$disabled{"gost"} = "forced";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# SRP requires TLSEXT
 | 
			
		||||
if (defined($disabled{"tlsext"}))
 | 
			
		||||
	{
 | 
			
		||||
	$disabled{"srp"} = "forced";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if ($target eq "TABLE") {
 | 
			
		||||
	foreach $target (sort keys %table) {
 | 
			
		||||
		print_table_entry($target);
 | 
			
		||||
@@ -970,6 +1083,10 @@ print "Configuring for $target\n";
 | 
			
		||||
 | 
			
		||||
&usage if (!defined($table{$target}));
 | 
			
		||||
 | 
			
		||||
if ($fips)
 | 
			
		||||
	{
 | 
			
		||||
	delete $disabled{"shared"} if ($disabled{"shared"} eq "default");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
foreach (sort (keys %disabled))
 | 
			
		||||
	{
 | 
			
		||||
@@ -996,7 +1113,7 @@ foreach (sort (keys %disabled))
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		my ($ALGO, $algo);
 | 
			
		||||
		($ALGO = $algo = $_) =~ tr/[a-z]/[A-Z]/;
 | 
			
		||||
		($ALGO = $algo = $_) =~ tr/[\-a-z]/[_A-Z]/;
 | 
			
		||||
 | 
			
		||||
		if (/^asm$/ || /^err$/ || /^hw$/ || /^hw-/)
 | 
			
		||||
			{
 | 
			
		||||
@@ -1016,8 +1133,6 @@ foreach (sort (keys %disabled))
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				push @skip, $algo;
 | 
			
		||||
				# fix-up crypto/directory name(s)
 | 
			
		||||
				@skip[$#skip]="whrlpool" if $algo eq "whirlpool";
 | 
			
		||||
				print " (skip dir)";
 | 
			
		||||
 | 
			
		||||
				$depflags .= " -DOPENSSL_NO_$ALGO";
 | 
			
		||||
@@ -1029,6 +1144,7 @@ foreach (sort (keys %disabled))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
my $exp_cflags = "";
 | 
			
		||||
 | 
			
		||||
foreach (sort @experimental)
 | 
			
		||||
	{
 | 
			
		||||
	my $ALGO;
 | 
			
		||||
@@ -1044,7 +1160,24 @@ my $IsMK1MF=scalar grep /^$target$/,@MK1MF_Builds;
 | 
			
		||||
$exe_ext=".exe" if ($target eq "Cygwin" || $target eq "DJGPP" || $target =~ /^mingw/);
 | 
			
		||||
$exe_ext=".nlm" if ($target =~ /netware/);
 | 
			
		||||
$exe_ext=".pm"  if ($target =~ /vos/);
 | 
			
		||||
$openssldir="/usr/local/ssl" if ($openssldir eq "" and $prefix eq "");
 | 
			
		||||
if ($openssldir eq "" and $prefix eq "")
 | 
			
		||||
	{
 | 
			
		||||
	if ($fips)
 | 
			
		||||
		{
 | 
			
		||||
		if (exists $ENV{FIPSDIR})
 | 
			
		||||
			{
 | 
			
		||||
			$openssldir="$ENV{FIPSDIR}";
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			$openssldir="/usr/local/ssl/fips-2.0";
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		$openssldir="/usr/local/ssl";
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
$prefix=$openssldir if $prefix eq "";
 | 
			
		||||
 | 
			
		||||
$default_ranlib= &which("ranlib") or $default_ranlib="true";
 | 
			
		||||
@@ -1052,6 +1185,10 @@ $perl=$ENV{'PERL'} or $perl=&which("perl5") or $perl=&which("perl")
 | 
			
		||||
  or $perl="perl";
 | 
			
		||||
my $make = $ENV{'MAKE'} || "make";
 | 
			
		||||
 | 
			
		||||
my $fips_auth_key = $ENV{'FIPS_AUTH_KEY'};
 | 
			
		||||
my $fips_auth_officer = $ENV{'FIPS_AUTH_OFFICER'};
 | 
			
		||||
my $fips_auth_user = $ENV{'FIPS_AUTH_USER'};
 | 
			
		||||
 | 
			
		||||
$cross_compile_prefix=$ENV{'CROSS_COMPILE'} if $cross_compile_prefix eq "";
 | 
			
		||||
 | 
			
		||||
chop $openssldir if $openssldir =~ /\/$/;
 | 
			
		||||
@@ -1088,6 +1225,8 @@ my $rmd160_obj = $fields[$idx_rmd160_obj];
 | 
			
		||||
my $rc5_obj = $fields[$idx_rc5_obj];
 | 
			
		||||
my $wp_obj = $fields[$idx_wp_obj];
 | 
			
		||||
my $cmll_obj = $fields[$idx_cmll_obj];
 | 
			
		||||
my $modes_obj = $fields[$idx_modes_obj];
 | 
			
		||||
my $engines_obj = $fields[$idx_engines_obj];
 | 
			
		||||
my $perlasm_scheme = $fields[$idx_perlasm_scheme];
 | 
			
		||||
my $dso_scheme = $fields[$idx_dso_scheme];
 | 
			
		||||
my $shared_target = $fields[$idx_shared_target];
 | 
			
		||||
@@ -1248,7 +1387,13 @@ if ($no_asm)
 | 
			
		||||
	{
 | 
			
		||||
	$cpuid_obj=$bn_obj=
 | 
			
		||||
	$des_obj=$aes_obj=$bf_obj=$cast_obj=$rc4_obj=$rc5_obj=$cmll_obj=
 | 
			
		||||
	$sha1_obj=$md5_obj=$rmd160_obj=$wp_obj="";
 | 
			
		||||
	$modes_obj=$sha1_obj=$md5_obj=$rmd160_obj=$wp_obj=$engines_obj="";
 | 
			
		||||
	$cflags=~s/\-D[BL]_ENDIAN//		if ($fips);
 | 
			
		||||
	$thread_cflags=~s/\-D[BL]_ENDIAN//	if ($fips);
 | 
			
		||||
	}
 | 
			
		||||
elsif (defined($disabled{ec2m}))
 | 
			
		||||
	{
 | 
			
		||||
	$bn_obj =~ s/\w+-gf2m.o//;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if (!$no_shared)
 | 
			
		||||
@@ -1286,7 +1431,7 @@ if ($zlib)
 | 
			
		||||
my $shared_mark = "";
 | 
			
		||||
if ($shared_target eq "")
 | 
			
		||||
	{
 | 
			
		||||
	$no_shared_warn = 1 if !$no_shared;
 | 
			
		||||
	$no_shared_warn = 1 if !$no_shared && !$fips;
 | 
			
		||||
	$no_shared = 1;
 | 
			
		||||
	}
 | 
			
		||||
if (!$no_shared)
 | 
			
		||||
@@ -1312,7 +1457,7 @@ if (!$IsMK1MF)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
$cpuid_obj.=" uplink.o uplink-cof.o" if ($cflags =~ /\-DOPENSSL_USE_APPLINK/);
 | 
			
		||||
$cpuid_obj.=" uplink.o uplink-x86.o" if ($cflags =~ /\-DOPENSSL_USE_APPLINK/);
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Platform fix-ups
 | 
			
		||||
@@ -1380,6 +1525,18 @@ $cflags.=" -DOPENSSL_BN_ASM_PART_WORDS" if ($bn_obj =~ /bn-586/);
 | 
			
		||||
$cflags.=" -DOPENSSL_IA32_SSE2" if (!$no_sse2 && $bn_obj =~ /86/);
 | 
			
		||||
 | 
			
		||||
$cflags.=" -DOPENSSL_BN_ASM_MONT" if ($bn_obj =~ /-mont/);
 | 
			
		||||
$cflags.=" -DOPENSSL_BN_ASM_MONT5" if ($bn_obj =~ /-mont5/);
 | 
			
		||||
$cflags.=" -DOPENSSL_BN_ASM_GF2m" if ($bn_obj =~ /-gf2m/);
 | 
			
		||||
 | 
			
		||||
if ($fips)
 | 
			
		||||
	{
 | 
			
		||||
	$openssl_other_defines.="#define OPENSSL_FIPS\n";
 | 
			
		||||
	if ($fipscanisterinternal eq "y")
 | 
			
		||||
		{
 | 
			
		||||
		$openssl_other_defines.="#define OPENSSL_FIPSCANISTER\n";
 | 
			
		||||
		$cflags = "-DOPENSSL_FIPSCANISTER $cflags";
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
$cpuid_obj="mem_clr.o"	unless ($cpuid_obj =~ /\.o$/);
 | 
			
		||||
$des_obj=$des_enc	unless ($des_obj =~ /\.o$/);
 | 
			
		||||
@@ -1412,13 +1569,20 @@ if ($rmd160_obj =~ /\.o$/)
 | 
			
		||||
	}
 | 
			
		||||
if ($aes_obj =~ /\.o$/)
 | 
			
		||||
	{
 | 
			
		||||
	$cflags.=" -DAES_ASM";
 | 
			
		||||
	 $cflags.=" -DAES_ASM" if ($aes_obj =~ m/\baes\-/);
 | 
			
		||||
	# aes_ctr.o is not a real file, only indication that assembler
 | 
			
		||||
	# module implements AES_ctr32_encrypt...
 | 
			
		||||
	$cflags.=" -DAES_CTR_ASM" if ($aes_obj =~ s/\s*aes_ctr\.o//);
 | 
			
		||||
	$aes_obj =~ s/\s*(vpaes|aesni)\-x86\.o//g if ($no_sse2);
 | 
			
		||||
	$aes_obj =~ s/\s*(vp|bs)aes-\w*\.o//g if ($fipscanisterinternal eq "y");
 | 
			
		||||
	$cflags.=" -DVPAES_ASM" if ($aes_obj =~ m/vpaes/);
 | 
			
		||||
	$cflags.=" -DBSAES_ASM" if ($aes_obj =~ m/bsaes/);
 | 
			
		||||
	}
 | 
			
		||||
else	{
 | 
			
		||||
	$aes_obj=$aes_enc;
 | 
			
		||||
	}
 | 
			
		||||
$wp_obj="" if ($wp_obj =~ /mmx/ && $processor eq "386");
 | 
			
		||||
if ($wp_obj =~ /\.o$/ && !$disabled{"whirlpool"})
 | 
			
		||||
if ($wp_obj =~ /\.o$/)
 | 
			
		||||
	{
 | 
			
		||||
	$cflags.=" -DWHIRLPOOL_ASM";
 | 
			
		||||
	}
 | 
			
		||||
@@ -1426,6 +1590,10 @@ else	{
 | 
			
		||||
	$wp_obj="wp_block.o";
 | 
			
		||||
	}
 | 
			
		||||
$cmll_obj=$cmll_enc	unless ($cmll_obj =~ /.o$/);
 | 
			
		||||
if ($modes_obj =~ /ghash\-/)
 | 
			
		||||
	{
 | 
			
		||||
	$cflags.=" -DGHASH_ASM";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# "Stringify" the C flags string.  This permits it to be made part of a string
 | 
			
		||||
# and works as well on command lines.
 | 
			
		||||
@@ -1473,11 +1641,35 @@ if ($strict_warnings)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
open(IN,'<Makefile.org') || die "unable to read Makefile.org:$!\n";
 | 
			
		||||
if ($fipscanisterinternal eq "y")
 | 
			
		||||
	{
 | 
			
		||||
	open(IN,"<fips/fips_auth.in") || die "can't open fips_auth.in";
 | 
			
		||||
	open(OUT,">fips/fips_auth.h") || die "can't open fips_auth.h";
 | 
			
		||||
	while(<IN>)
 | 
			
		||||
		{
 | 
			
		||||
		s/FIPS_AUTH_KEY.*$/FIPS_AUTH_KEY $fips_auth_key/ if defined $fips_auth_key;
 | 
			
		||||
		s/FIPS_AUTH_CRYPTO_OFFICER.*$/FIPS_AUTH_CRYPTO_OFFICER $fips_auth_officer/ if defined $fips_auth_officer;
 | 
			
		||||
		s/FIPS_AUTH_CRYPTO_USER.*$/FIPS_AUTH_CRYPTO_USER $fips_auth_user/ if defined $fips_auth_user;
 | 
			
		||||
		print OUT $_;
 | 
			
		||||
		}
 | 
			
		||||
	close IN;
 | 
			
		||||
	close OUT;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
my $mforg = $fipscanisteronly ? "Makefile.fips" : "Makefile.org";
 | 
			
		||||
 | 
			
		||||
open(IN,"<$mforg") || die "unable to read $mforg:$!\n";
 | 
			
		||||
unlink("$Makefile.new") || die "unable to remove old $Makefile.new:$!\n" if -e "$Makefile.new";
 | 
			
		||||
open(OUT,">$Makefile.new") || die "unable to create $Makefile.new:$!\n";
 | 
			
		||||
print OUT "### Generated automatically from Makefile.org by Configure.\n\n";
 | 
			
		||||
print OUT "### Generated automatically from $mforg by Configure.\n\n";
 | 
			
		||||
my $sdirs=0;
 | 
			
		||||
 | 
			
		||||
if ($fipscanisteronly)
 | 
			
		||||
	{
 | 
			
		||||
	$aes_obj =~ s/aesni-sha1-x86_64.o//;
 | 
			
		||||
	$bn_obj =~ s/modexp512-x86_64.o//;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
while (<IN>)
 | 
			
		||||
	{
 | 
			
		||||
	chomp;
 | 
			
		||||
@@ -1490,6 +1682,7 @@ while (<IN>)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	$sdirs = 0 unless /\\$/;
 | 
			
		||||
        s/fips // if (/^DIRS=/ && !$fips);
 | 
			
		||||
        s/engines // if (/^DIRS=/ && $disabled{"engine"});
 | 
			
		||||
	s/ccgost// if (/^ENGDIRS=/ && $disabled{"gost"});
 | 
			
		||||
	s/^VERSION=.*/VERSION=$version/;
 | 
			
		||||
@@ -1540,6 +1733,8 @@ while (<IN>)
 | 
			
		||||
	s/^RMD160_ASM_OBJ=.*$/RMD160_ASM_OBJ= $rmd160_obj/;
 | 
			
		||||
	s/^WP_ASM_OBJ=.*$/WP_ASM_OBJ= $wp_obj/;
 | 
			
		||||
	s/^CMLL_ENC=.*$/CMLL_ENC= $cmll_obj/;
 | 
			
		||||
	s/^MODES_ASM_OBJ.=*$/MODES_ASM_OBJ= $modes_obj/;
 | 
			
		||||
	s/^ENGINES_ASM_OBJ.=*$/ENGINES_ASM_OBJ= $engines_obj/;
 | 
			
		||||
	s/^PERLASM_SCHEME=.*$/PERLASM_SCHEME= $perlasm_scheme/;
 | 
			
		||||
	s/^PROCESSOR=.*/PROCESSOR= $processor/;
 | 
			
		||||
	s/^ARFLAGS=.*/ARFLAGS= $arflags/;
 | 
			
		||||
@@ -1548,6 +1743,12 @@ while (<IN>)
 | 
			
		||||
	s/^LIBKRB5=.*/LIBKRB5=$withargs{"krb5-lib"}/;
 | 
			
		||||
	s/^LIBZLIB=.*/LIBZLIB=$withargs{"zlib-lib"}/;
 | 
			
		||||
	s/^ZLIB_INCLUDE=.*/ZLIB_INCLUDE=$withargs{"zlib-include"}/;
 | 
			
		||||
	s/^FIPSLIBDIR=.*/FIPSLIBDIR=$fipslibdir/;
 | 
			
		||||
	s/^FIPSCANLIB=.*/FIPSCANLIB=libcrypto/ if $fips;
 | 
			
		||||
	s/^SHARED_FIPS=.*/SHARED_FIPS=/;
 | 
			
		||||
	s/^SHLIBDIRS=.*/SHLIBDIRS= crypto ssl/;
 | 
			
		||||
	s/^FIPSCANISTERINTERNAL=.*/FIPSCANISTERINTERNAL=$fipscanisterinternal/;
 | 
			
		||||
	s/^BASEADDR=.*/BASEADDR=$baseaddr/;
 | 
			
		||||
	s/^SHLIB_TARGET=.*/SHLIB_TARGET=$shared_target/;
 | 
			
		||||
	s/^SHLIB_MARK=.*/SHLIB_MARK=$shared_mark/;
 | 
			
		||||
	s/^SHARED_LIBS=.*/SHARED_LIBS=\$(SHARED_CRYPTO) \$(SHARED_SSL)/ if (!$no_shared);
 | 
			
		||||
@@ -1570,6 +1771,10 @@ while (<IN>)
 | 
			
		||||
		s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.\$(SHLIB_MAJOR).dylib .dylib/;
 | 
			
		||||
		}
 | 
			
		||||
	s/^SHARED_LDFLAGS=.*/SHARED_LDFLAGS=$shared_ldflag/;
 | 
			
		||||
	if ($fipscanisteronly && exists $disabled{"ec2m"})
 | 
			
		||||
		{
 | 
			
		||||
		next if (/ec2_/ || /bn_gf2m/);
 | 
			
		||||
		}
 | 
			
		||||
	print OUT $_."\n";
 | 
			
		||||
	}
 | 
			
		||||
close(IN);
 | 
			
		||||
@@ -1591,7 +1796,9 @@ print "RC5_ENC       =$rc5_obj\n";
 | 
			
		||||
print "MD5_OBJ_ASM   =$md5_obj\n";
 | 
			
		||||
print "SHA1_OBJ_ASM  =$sha1_obj\n";
 | 
			
		||||
print "RMD160_OBJ_ASM=$rmd160_obj\n";
 | 
			
		||||
print "CMLL_ENC=     =$cmll_obj\n";
 | 
			
		||||
print "CMLL_ENC      =$cmll_obj\n";
 | 
			
		||||
print "MODES_OBJ     =$modes_obj\n";
 | 
			
		||||
print "ENGINES_OBJ   =$engines_obj\n";
 | 
			
		||||
print "PROCESSOR     =$processor\n";
 | 
			
		||||
print "RANLIB        =$ranlib\n";
 | 
			
		||||
print "ARFLAGS       =$arflags\n";
 | 
			
		||||
@@ -1806,7 +2013,9 @@ EOF
 | 
			
		||||
	$make_targets .= " gentests" if $symlink;
 | 
			
		||||
	(system $make_command.$make_targets) == 0 or exit $?
 | 
			
		||||
		if $make_targets ne "";
 | 
			
		||||
	if ( $perl =~ m@^/@) {
 | 
			
		||||
	if ( $fipscanisteronly )
 | 
			
		||||
		{}
 | 
			
		||||
	elsif ( $perl =~ m@^/@) {
 | 
			
		||||
	    &dofile("tools/c_rehash",$perl,'^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";', '^my \$prefix;$', 'my $prefix = "' . $prefix . '";');
 | 
			
		||||
	    &dofile("apps/CA.pl",$perl,'^#!/', '#!%s');
 | 
			
		||||
	} else {
 | 
			
		||||
@@ -1814,7 +2023,7 @@ EOF
 | 
			
		||||
	    &dofile("tools/c_rehash",'/usr/local/bin/perl','^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";',  '^my \$prefix;$', 'my $prefix = "' . $prefix . '";');
 | 
			
		||||
	    &dofile("apps/CA.pl",'/usr/local/bin/perl','^#!/', '#!%s');
 | 
			
		||||
	}
 | 
			
		||||
	if ($depflags ne $default_depflags && !$make_depend) {
 | 
			
		||||
	if ($depflags ne $default_depflags && !$make_depend && !$fipscanisteronly) {
 | 
			
		||||
		print <<EOF;
 | 
			
		||||
 | 
			
		||||
Since you've disabled or enabled at least one algorithm, you need to do
 | 
			
		||||
@@ -1857,9 +2066,16 @@ BEGIN
 | 
			
		||||
    BEGIN
 | 
			
		||||
	BLOCK "040904b0"
 | 
			
		||||
	BEGIN
 | 
			
		||||
#if defined(FIPS)
 | 
			
		||||
	    VALUE "Comments", "WARNING: TEST VERSION ONLY ***NOT*** FIPS 140-2 VALIDATED.\\0"
 | 
			
		||||
#endif
 | 
			
		||||
	    // Required:	    
 | 
			
		||||
	    VALUE "CompanyName", "The OpenSSL Project, http://www.openssl.org/\\0"
 | 
			
		||||
#if defined(FIPS)
 | 
			
		||||
	    VALUE "FileDescription", "TEST UNVALIDATED FIPS140-2 DLL\\0"
 | 
			
		||||
#else
 | 
			
		||||
	    VALUE "FileDescription", "OpenSSL Shared Library\\0"
 | 
			
		||||
#endif
 | 
			
		||||
	    VALUE "FileVersion", "$version\\0"
 | 
			
		||||
#if defined(CRYPTO)
 | 
			
		||||
	    VALUE "InternalName", "libeay32\\0"
 | 
			
		||||
@@ -1867,6 +2083,9 @@ BEGIN
 | 
			
		||||
#elif defined(SSL)
 | 
			
		||||
	    VALUE "InternalName", "ssleay32\\0"
 | 
			
		||||
	    VALUE "OriginalFilename", "ssleay32.dll\\0"
 | 
			
		||||
#elif defined(FIPS)
 | 
			
		||||
	    VALUE "InternalName", "libosslfips\\0"
 | 
			
		||||
	    VALUE "OriginalFilename", "libosslfips.dll\\0"
 | 
			
		||||
#endif
 | 
			
		||||
	    VALUE "ProductName", "The OpenSSL Toolkit\\0"
 | 
			
		||||
	    VALUE "ProductVersion", "$version\\0"
 | 
			
		||||
@@ -1909,6 +2128,21 @@ libraries on this platform, they will at least look at it and try their best
 | 
			
		||||
(but please first make sure you have tried with a current version of OpenSSL).
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
print <<\EOF if ($fipscanisterinternal eq "y");
 | 
			
		||||
 | 
			
		||||
WARNING: OpenSSL has been configured using unsupported option(s) to internally
 | 
			
		||||
generate a fipscanister.o object module for TESTING PURPOSES ONLY; that
 | 
			
		||||
compiled module is NOT FIPS 140-2 validated and CANNOT be used to replace the
 | 
			
		||||
OpenSSL FIPS Object Module as identified by the CMVP
 | 
			
		||||
(http://csrc.nist.gov/cryptval/) in any application requiring the use of FIPS
 | 
			
		||||
140-2 validated software. 
 | 
			
		||||
 | 
			
		||||
This is a test OpenSSL 2.0 FIPS module.
 | 
			
		||||
 | 
			
		||||
See the file README.FIPS for details of how to build a test library.
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
exit(0);
 | 
			
		||||
 | 
			
		||||
sub usage
 | 
			
		||||
@@ -1984,7 +2218,8 @@ sub print_table_entry
 | 
			
		||||
	(my $cc,my $cflags,my $unistd,my $thread_cflag,my $sys_id,my $lflags,
 | 
			
		||||
	my $bn_ops,my $cpuid_obj,my $bn_obj,my $des_obj,my $aes_obj, my $bf_obj,
 | 
			
		||||
	my $md5_obj,my $sha1_obj,my $cast_obj,my $rc4_obj,my $rmd160_obj,
 | 
			
		||||
	my $rc5_obj,my $wp_obj,my $cmll_obj,my $perlasm_scheme,my $dso_scheme,my $shared_target,my $shared_cflag,
 | 
			
		||||
	my $rc5_obj,my $wp_obj,my $cmll_obj,my $modes_obj, my $engines_obj,
 | 
			
		||||
	my $perlasm_scheme,my $dso_scheme,my $shared_target,my $shared_cflag,
 | 
			
		||||
	my $shared_ldflag,my $shared_extension,my $ranlib,my $arflags,my $multilib)=
 | 
			
		||||
	split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
 | 
			
		||||
			
 | 
			
		||||
@@ -2011,6 +2246,8 @@ sub print_table_entry
 | 
			
		||||
\$rc5_obj      = $rc5_obj
 | 
			
		||||
\$wp_obj       = $wp_obj
 | 
			
		||||
\$cmll_obj     = $cmll_obj
 | 
			
		||||
\$modes_obj    = $modes_obj
 | 
			
		||||
\$engines_obj  = $engines_obj
 | 
			
		||||
\$perlasm_scheme = $perlasm_scheme
 | 
			
		||||
\$dso_scheme   = $dso_scheme
 | 
			
		||||
\$shared_target= $shared_target
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										32
									
								
								FAQ
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								FAQ
									
									
									
									
									
								
							@@ -10,7 +10,6 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* Why aren't tools like 'autoconf' and 'libtool' used?
 | 
			
		||||
* What is an 'engine' version?
 | 
			
		||||
* How do I check the authenticity of the OpenSSL distribution?
 | 
			
		||||
* How does the versioning scheme work?
 | 
			
		||||
 | 
			
		||||
[LEGAL] Legal questions
 | 
			
		||||
 | 
			
		||||
@@ -83,11 +82,11 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* Which is the current version of OpenSSL?
 | 
			
		||||
 | 
			
		||||
The current version is available from <URL: http://www.openssl.org>.
 | 
			
		||||
OpenSSL 1.0.1c was released on Feb 5th, 2013.
 | 
			
		||||
OpenSSL 1.0.0e was released on Sep 6th, 2011.
 | 
			
		||||
 | 
			
		||||
In addition to the current stable release, you can also access daily
 | 
			
		||||
snapshots of the OpenSSL development version at <URL:
 | 
			
		||||
ftp://ftp.openssl.org/snapshot/>, or get it by anonymous Git access.
 | 
			
		||||
ftp://ftp.openssl.org/snapshot/>, or get it by anonymous CVS access.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Where is the documentation?
 | 
			
		||||
@@ -109,9 +108,12 @@ In addition, you can read the most current versions at
 | 
			
		||||
<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.
 | 
			
		||||
that came with the version of OpenSSL you are using.
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
predecessor, at <URL: http://www.columbia.edu/~ariel/ssleay/>.  Much
 | 
			
		||||
of this still applies to OpenSSL.
 | 
			
		||||
 | 
			
		||||
There is some documentation about certificate extensions and PKCS#12
 | 
			
		||||
in doc/openssl.txt
 | 
			
		||||
@@ -171,19 +173,6 @@ just do:
 | 
			
		||||
 | 
			
		||||
   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] =======================================================================
 | 
			
		||||
 | 
			
		||||
* Do I need patent licenses to use OpenSSL?
 | 
			
		||||
@@ -295,7 +284,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
 | 
			
		||||
the 'req', 'verify', 'ca' and 'pkcs12' utilities. For finer control check
 | 
			
		||||
out the manual pages for the individual utilities and the certificate
 | 
			
		||||
extensions documentation (in ca(1), req(1), x509v3_config(5) )
 | 
			
		||||
extensions documentation (currently in doc/openssl.txt).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why can't I create certificate requests?
 | 
			
		||||
@@ -763,9 +752,6 @@ 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).
 | 
			
		||||
 | 
			
		||||
Note that bugs only present in the openssl utility are not in general
 | 
			
		||||
considered to be security issues. 
 | 
			
		||||
 | 
			
		||||
[PROG] ========================================================================
 | 
			
		||||
 | 
			
		||||
* Is OpenSSL thread-safe?
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								INSTALL
									
									
									
									
									
								
							@@ -103,12 +103,6 @@
 | 
			
		||||
                define preprocessor symbols, specify additional libraries,
 | 
			
		||||
                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
 | 
			
		||||
 ----------------------
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@
 | 
			
		||||
  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
 | 
			
		||||
 If you are compiling from a tarball or a CVS snapshot then the Win32 files
 | 
			
		||||
 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?)
 | 
			
		||||
 it goes wrong.
 | 
			
		||||
@@ -257,7 +257,7 @@
 | 
			
		||||
 | 
			
		||||
 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
 | 
			
		||||
 assigned in the Git tree: so anything linked against this version of the
 | 
			
		||||
 assigned in the CVS tree: so anything linked against this version of the
 | 
			
		||||
 library may need to be recompiled.
 | 
			
		||||
 | 
			
		||||
 If you get errors about unresolved symbols there are several possible
 | 
			
		||||
 
 | 
			
		||||
@@ -1,62 +0,0 @@
 | 
			
		||||
/**************** BEGIN GUSI CONFIGURATION ****************************
 | 
			
		||||
 *
 | 
			
		||||
 * GUSI Configuration section generated by GUSI Configurator
 | 
			
		||||
 * last modified: Wed Jan  5 20:33:51 2000
 | 
			
		||||
 *
 | 
			
		||||
 * This section will be overwritten by the next run of Configurator.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define GUSI_SOURCE
 | 
			
		||||
#include <GUSIConfig.h>
 | 
			
		||||
#include <sys/cdefs.h>
 | 
			
		||||
 | 
			
		||||
/* Declarations of Socket Factories */
 | 
			
		||||
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
void GUSIwithInetSockets();
 | 
			
		||||
void GUSIwithLocalSockets();
 | 
			
		||||
void GUSIwithMTInetSockets();
 | 
			
		||||
void GUSIwithMTTcpSockets();
 | 
			
		||||
void GUSIwithMTUdpSockets();
 | 
			
		||||
void GUSIwithOTInetSockets();
 | 
			
		||||
void GUSIwithOTTcpSockets();
 | 
			
		||||
void GUSIwithOTUdpSockets();
 | 
			
		||||
void GUSIwithPPCSockets();
 | 
			
		||||
void GUSISetupFactories();
 | 
			
		||||
__END_DECLS
 | 
			
		||||
 | 
			
		||||
/* Configure Socket Factories */
 | 
			
		||||
 | 
			
		||||
void GUSISetupFactories()
 | 
			
		||||
{
 | 
			
		||||
#ifdef GUSISetupFactories_BeginHook
 | 
			
		||||
	GUSISetupFactories_BeginHook
 | 
			
		||||
#endif
 | 
			
		||||
	GUSIwithInetSockets();
 | 
			
		||||
#ifdef GUSISetupFactories_EndHook
 | 
			
		||||
	GUSISetupFactories_EndHook
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Declarations of File Devices */
 | 
			
		||||
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
void GUSIwithDConSockets();
 | 
			
		||||
void GUSIwithNullSockets();
 | 
			
		||||
void GUSISetupDevices();
 | 
			
		||||
__END_DECLS
 | 
			
		||||
 | 
			
		||||
/* Configure File Devices */
 | 
			
		||||
 | 
			
		||||
void GUSISetupDevices()
 | 
			
		||||
{
 | 
			
		||||
#ifdef GUSISetupDevices_BeginHook
 | 
			
		||||
	GUSISetupDevices_BeginHook
 | 
			
		||||
#endif
 | 
			
		||||
	GUSIwithNullSockets();
 | 
			
		||||
#ifdef GUSISetupDevices_EndHook
 | 
			
		||||
	GUSISetupDevices_EndHook
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**************** END GUSI CONFIGURATION *************************/
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,104 +0,0 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void CopyPStrToCStr(const unsigned char *thePStr,char *theCStr,const int maxCStrLength);
 | 
			
		||||
void CopyPStrToPStr(const unsigned char *theSrcPStr,unsigned char *theDstPStr,const int maxDstStrLength);
 | 
			
		||||
void CopyCStrToCStr(const char *theSrcCStr,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
void CopyCStrToPStr(const char *theSrcCStr,unsigned char *theDstPStr,const int maxDstStrLength);
 | 
			
		||||
void ConcatPStrToCStr(const unsigned char *thePStr,char *theCStr,const int maxCStrLength);
 | 
			
		||||
void ConcatPStrToPStr(const unsigned char *theSrcPStr,unsigned char *theDstPStr,const int maxDstStrLength);
 | 
			
		||||
void ConcatCStrToPStr(const char *theSrcCStr,unsigned char *theDstPStr,const int maxDstStrLength);
 | 
			
		||||
void ConcatCStrToCStr(const char *theSrcCStr,char *theDstCStr,const int maxCStrLength);
 | 
			
		||||
 | 
			
		||||
void ConcatCharToCStr(const char theChar,char *theDstCStr,const int maxCStrLength);
 | 
			
		||||
void ConcatCharToPStr(const char theChar,unsigned char *theDstPStr,const int maxPStrLength);
 | 
			
		||||
 | 
			
		||||
int ComparePStrs(const unsigned char *theFirstPStr,const unsigned char *theSecondPStr,const Boolean ignoreCase = true);
 | 
			
		||||
int CompareCStrs(const char *theFirstCStr,const char *theSecondCStr,const Boolean ignoreCase = true);
 | 
			
		||||
int CompareCStrToPStr(const char *theCStr,const unsigned char *thePStr,const Boolean ignoreCase = true);
 | 
			
		||||
 | 
			
		||||
Boolean CStrsAreEqual(const char *theFirstCStr,const char *theSecondCStr,const Boolean ignoreCase = true);
 | 
			
		||||
Boolean PStrsAreEqual(const unsigned char *theFirstCStr,const unsigned char *theSecondCStr,const Boolean ignoreCase = true);
 | 
			
		||||
 | 
			
		||||
void CopyLongIntToCStr(const long theNum,char *theCStr,const int maxCStrLength,const int numDigits = -1);
 | 
			
		||||
void CopyUnsignedLongIntToCStr(const unsigned long theNum,char *theCStr,const int maxCStrLength);
 | 
			
		||||
void ConcatLongIntToCStr(const long theNum,char *theCStr,const int maxCStrLength,const int numDigits = -1);
 | 
			
		||||
void CopyCStrAndConcatLongIntToCStr(const char *theSrcCStr,const long theNum,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
 | 
			
		||||
void CopyLongIntToPStr(const long theNum,unsigned char *thePStr,const int maxPStrLength,const int numDigits = -1);
 | 
			
		||||
void ConcatLongIntToPStr(const long theNum,unsigned char *thePStr,const int maxPStrLength,const int numDigits = -1);
 | 
			
		||||
 | 
			
		||||
long CStrLength(const char *theCString);
 | 
			
		||||
long PStrLength(const unsigned char *thePString);
 | 
			
		||||
 | 
			
		||||
OSErr CopyCStrToExistingHandle(const char *theCString,Handle theHandle);
 | 
			
		||||
OSErr CopyLongIntToExistingHandle(const long inTheLongInt,Handle theHandle);
 | 
			
		||||
 | 
			
		||||
OSErr CopyCStrToNewHandle(const char *theCString,Handle *theHandle);
 | 
			
		||||
OSErr CopyPStrToNewHandle(const unsigned char *thePString,Handle *theHandle);
 | 
			
		||||
OSErr CopyLongIntToNewHandle(const long inTheLongInt,Handle *theHandle);
 | 
			
		||||
 | 
			
		||||
OSErr AppendCStrToHandle(const char *theCString,Handle theHandle,long *currentLength = nil,long *maxLength = nil);
 | 
			
		||||
OSErr AppendCharsToHandle(const char *theChars,const int numChars,Handle theHandle,long *currentLength = nil,long *maxLength = nil);
 | 
			
		||||
OSErr AppendPStrToHandle(const unsigned char *thePString,Handle theHandle,long *currentLength = nil);
 | 
			
		||||
OSErr AppendLongIntToHandle(const long inTheLongInt,Handle theHandle,long *currentLength = nil);
 | 
			
		||||
 | 
			
		||||
void ZeroMem(void *theMemPtr,const unsigned long numBytes);
 | 
			
		||||
 | 
			
		||||
char *FindCharInCStr(const char theChar,const char *theCString);
 | 
			
		||||
long FindCharOffsetInCStr(const char theChar,const char *theCString,const Boolean inIgnoreCase = false);
 | 
			
		||||
long FindCStrOffsetInCStr(const char *theCSubstring,const char *theCString,const Boolean inIgnoreCase = false);
 | 
			
		||||
 | 
			
		||||
void CopyCSubstrToCStr(const char *theSrcCStr,const int maxCharsToCopy,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
void CopyCSubstrToPStr(const char *theSrcCStr,const int maxCharsToCopy,unsigned char *theDstPStr,const int maxDstStrLength);
 | 
			
		||||
 | 
			
		||||
void InsertCStrIntoCStr(const char *theSrcCStr,const int theInsertionOffset,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
void InsertPStrIntoCStr(const unsigned char *theSrcPStr,const int theInsertionOffset,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
OSErr InsertCStrIntoHandle(const char *theCString,Handle theHandle,const long inInsertOffset);
 | 
			
		||||
 | 
			
		||||
void CopyCStrAndInsertCStrIntoCStr(const char *theSrcCStr,const char *theInsertCStr,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
 | 
			
		||||
void CopyCStrAndInsertCStrsLongIntsIntoCStr(const char *theSrcCStr,const char **theInsertCStrs,const long *theLongInts,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
 | 
			
		||||
void CopyCStrAndInsert1LongIntIntoCStr(const char *theSrcCStr,const long theNum,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
void CopyCStrAndInsert2LongIntsIntoCStr(const char *theSrcCStr,const long long1,const long long2,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
void CopyCStrAndInsert3LongIntsIntoCStr(const char *theSrcCStr,const long long1,const long long2,const long long3,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
 | 
			
		||||
void CopyCStrAndInsertCStrLongIntIntoCStr(const char *theSrcCStr,const char *theInsertCStr,const long theNum,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
OSErr CopyCStrAndInsertCStrLongIntIntoHandle(const char *theSrcCStr,const char *theInsertCStr,const long theNum,Handle *theHandle);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OSErr CopyIndexedWordToCStr(char *theSrcCStr,int whichWord,char *theDstCStr,int maxDstCStrLength);
 | 
			
		||||
OSErr CopyIndexedWordToNewHandle(char *theSrcCStr,int whichWord,Handle *outTheHandle);
 | 
			
		||||
 | 
			
		||||
OSErr CopyIndexedLineToCStr(const char *theSrcCStr,int inWhichLine,int *lineEndIndex,Boolean *gotLastLine,char *theDstCStr,const int maxDstCStrLength);
 | 
			
		||||
OSErr CopyIndexedLineToNewHandle(const char *theSrcCStr,int inWhichLine,Handle *outNewHandle);
 | 
			
		||||
 | 
			
		||||
OSErr ExtractIntFromCStr(const char *theSrcCStr,int *outInt,Boolean skipLeadingSpaces = true);
 | 
			
		||||
OSErr ExtractIntFromPStr(const unsigned char *theSrcPStr,int *outInt,Boolean skipLeadingSpaces = true);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ConvertCStrToUpperCase(char *theSrcCStr);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int CountOccurencesOfCharInCStr(const char inChar,const char *inSrcCStr);
 | 
			
		||||
int CountWordsInCStr(const char *inSrcCStr);
 | 
			
		||||
 | 
			
		||||
OSErr CountDigits(const char *inCStr,int *outNumIntegerDigits,int *outNumFractDigits);
 | 
			
		||||
 | 
			
		||||
void ExtractCStrItemFromCStr(const char *inSrcCStr,const char inItemDelimiter,const int inItemNumber,Boolean *foundItem,char *outDstCharPtr,const int inDstCharPtrMaxLength,const Boolean inTreatMultipleDelimsAsSingleDelim = false);
 | 
			
		||||
OSErr ExtractCStrItemFromCStrIntoNewHandle(const char *inSrcCStr,const char inItemDelimiter,const int inItemNumber,Boolean *foundItem,Handle *outNewHandle,const Boolean inTreatMultipleDelimsAsSingleDelim = false);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OSErr ExtractFloatFromCStr(const char *inCString,extended80 *outFloat);
 | 
			
		||||
OSErr CopyFloatToCStr(const extended80 *theFloat,char *theCStr,const int maxCStrLength,const int inMaxNumIntDigits = -1,const int inMaxNumFractDigits = -1);
 | 
			
		||||
 | 
			
		||||
void SkipWhiteSpace(char **ioSrcCharPtr,const Boolean inStopAtEOL = false);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1,147 +0,0 @@
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef kGenericError
 | 
			
		||||
	#define kGenericError		-1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
extern char	*gErrorMessage;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void SetErrorMessage(const char *theErrorMessage);
 | 
			
		||||
void SetErrorMessageAndAppendLongInt(const char *theErrorMessage,const long theLongInt);
 | 
			
		||||
void SetErrorMessageAndCStrAndLongInt(const char *theErrorMessage,const char * theCStr,const long theLongInt);
 | 
			
		||||
void SetErrorMessageAndCStr(const char *theErrorMessage,const char * theCStr);
 | 
			
		||||
void AppendCStrToErrorMessage(const char *theErrorMessage);
 | 
			
		||||
void AppendLongIntToErrorMessage(const long theLongInt);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
char *GetErrorMessage(void);
 | 
			
		||||
OSErr GetErrorMessageInNewHandle(Handle *inoutHandle);
 | 
			
		||||
OSErr GetErrorMessageInExistingHandle(Handle inoutHandle);
 | 
			
		||||
OSErr AppendErrorMessageToHandle(Handle inoutHandle);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __EXCEPTIONS_ENABLED__
 | 
			
		||||
	void ThrowErrorMessageException(void);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//	A bunch of evil macros that would be unnecessary if I were always using C++ !
 | 
			
		||||
 | 
			
		||||
#define SetErrorMessageAndBailIfNil(theArg,theMessage)								\
 | 
			
		||||
{																					\
 | 
			
		||||
	if (theArg == nil)																\
 | 
			
		||||
	{																				\
 | 
			
		||||
		SetErrorMessage(theMessage);												\
 | 
			
		||||
		errCode = kGenericError;													\
 | 
			
		||||
		goto EXITPOINT;																\
 | 
			
		||||
	}																				\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrorMessageAndBail(theMessage)											\
 | 
			
		||||
{																					\
 | 
			
		||||
		SetErrorMessage(theMessage);												\
 | 
			
		||||
		errCode = kGenericError;													\
 | 
			
		||||
		goto EXITPOINT;																\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrorMessageAndLongIntAndBail(theMessage,theLongInt)						\
 | 
			
		||||
{																					\
 | 
			
		||||
		SetErrorMessageAndAppendLongInt(theMessage,theLongInt);						\
 | 
			
		||||
		errCode = kGenericError;													\
 | 
			
		||||
		goto EXITPOINT;																\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrorMessageAndLongIntAndBailIfError(theErrCode,theMessage,theLongInt)	\
 | 
			
		||||
{																					\
 | 
			
		||||
	if (theErrCode != noErr)														\
 | 
			
		||||
	{																				\
 | 
			
		||||
		SetErrorMessageAndAppendLongInt(theMessage,theLongInt);						\
 | 
			
		||||
		errCode = theErrCode;														\
 | 
			
		||||
		goto EXITPOINT;																\
 | 
			
		||||
	}																				\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrorMessageCStrLongIntAndBailIfError(theErrCode,theMessage,theCStr,theLongInt)	\
 | 
			
		||||
{																					\
 | 
			
		||||
	if (theErrCode != noErr)														\
 | 
			
		||||
	{																				\
 | 
			
		||||
		SetErrorMessageAndCStrAndLongInt(theMessage,theCStr,theLongInt);			\
 | 
			
		||||
		errCode = theErrCode;														\
 | 
			
		||||
		goto EXITPOINT;																\
 | 
			
		||||
	}																				\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrorMessageAndCStrAndBail(theMessage,theCStr)							\
 | 
			
		||||
{																					\
 | 
			
		||||
	SetErrorMessageAndCStr(theMessage,theCStr);										\
 | 
			
		||||
	errCode = kGenericError;														\
 | 
			
		||||
	goto EXITPOINT;																	\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrorMessageAndBailIfError(theErrCode,theMessage)						\
 | 
			
		||||
{																					\
 | 
			
		||||
	if (theErrCode != noErr)														\
 | 
			
		||||
	{																				\
 | 
			
		||||
		SetErrorMessage(theMessage);												\
 | 
			
		||||
		errCode = theErrCode;														\
 | 
			
		||||
		goto EXITPOINT;																\
 | 
			
		||||
	}																				\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrorMessageAndLongIntAndBailIfNil(theArg,theMessage,theLongInt)			\
 | 
			
		||||
{																					\
 | 
			
		||||
	if (theArg == nil)																\
 | 
			
		||||
	{																				\
 | 
			
		||||
		SetErrorMessageAndAppendLongInt(theMessage,theLongInt);						\
 | 
			
		||||
		errCode = kGenericError;													\
 | 
			
		||||
		goto EXITPOINT;																\
 | 
			
		||||
	}																				\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define BailIfError(theErrCode)														\
 | 
			
		||||
{																					\
 | 
			
		||||
	if ((theErrCode) != noErr)														\
 | 
			
		||||
	{																				\
 | 
			
		||||
		goto EXITPOINT;																\
 | 
			
		||||
	}																				\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrCodeAndBail(theErrCode)												\
 | 
			
		||||
{																					\
 | 
			
		||||
	errCode = theErrCode;															\
 | 
			
		||||
																					\
 | 
			
		||||
	goto EXITPOINT;																	\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrorCodeAndMessageAndBail(theErrCode,theMessage)						\
 | 
			
		||||
{																					\
 | 
			
		||||
	SetErrorMessage(theMessage);													\
 | 
			
		||||
	errCode = theErrCode;															\
 | 
			
		||||
	goto EXITPOINT;																	\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define BailNow()																	\
 | 
			
		||||
{																					\
 | 
			
		||||
	errCode = kGenericError;														\
 | 
			
		||||
	goto EXITPOINT;																	\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1,209 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 *	An demo illustrating how to retrieve a URI from a secure HTTP server.
 | 
			
		||||
 *
 | 
			
		||||
 *	Author: 	Roy Wood
 | 
			
		||||
 *	Date:		September 7, 1999
 | 
			
		||||
 *	Comments:	This relies heavily on my MacSockets library.
 | 
			
		||||
 *				This project is also set up so that it expects the OpenSSL source folder (0.9.4 as I write this)
 | 
			
		||||
 *				to live in a folder called "OpenSSL-0.9.4" in this project's parent folder.  For example:
 | 
			
		||||
 *
 | 
			
		||||
 *					Macintosh HD:
 | 
			
		||||
 *						Development:
 | 
			
		||||
 *							OpenSSL-0.9.4:
 | 
			
		||||
 *								(OpenSSL sources here)
 | 
			
		||||
 *							OpenSSL Example:
 | 
			
		||||
 *								(OpenSSL example junk here)
 | 
			
		||||
 *
 | 
			
		||||
 *
 | 
			
		||||
 *				Also-- before attempting to compile this, make sure the aliases in "OpenSSL-0.9.4:include:openssl" 
 | 
			
		||||
 *				are installed!  Use the AppleScript applet in the "openssl-0.9.4" folder to do this!
 | 
			
		||||
 */
 | 
			
		||||
/* modified to seed the PRNG */
 | 
			
		||||
/* modified to use CRandomizer for seeding */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//	Include some funky libs I've developed over time
 | 
			
		||||
 | 
			
		||||
#include "CPStringUtils.hpp"
 | 
			
		||||
#include "ErrorHandling.hpp"
 | 
			
		||||
#include "MacSocket.h"
 | 
			
		||||
#include "Randomizer.h"
 | 
			
		||||
 | 
			
		||||
//	We use the OpenSSL implementation of SSL....
 | 
			
		||||
//	This was a lot of work to finally get going, though you wouldn't know it by the results!
 | 
			
		||||
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
 | 
			
		||||
#include <timer.h>
 | 
			
		||||
 | 
			
		||||
//	Let's try grabbing some data from here:
 | 
			
		||||
 | 
			
		||||
#define kHTTPS_DNS		"www.apache-ssl.org"
 | 
			
		||||
#define kHTTPS_Port		443
 | 
			
		||||
#define kHTTPS_URI		"/"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//	Forward-declare this
 | 
			
		||||
 | 
			
		||||
OSErr MyMacSocket_IdleWaitCallback(void *inUserRefPtr);
 | 
			
		||||
 | 
			
		||||
//	My idle-wait callback.  Doesn't do much, does it?  Silly cooperative multitasking.
 | 
			
		||||
 | 
			
		||||
OSErr MyMacSocket_IdleWaitCallback(void *inUserRefPtr)
 | 
			
		||||
{
 | 
			
		||||
#pragma unused(inUserRefPtr)
 | 
			
		||||
 | 
			
		||||
EventRecord		theEvent;
 | 
			
		||||
	::EventAvail(everyEvent,&theEvent);
 | 
			
		||||
	
 | 
			
		||||
	CRandomizer *randomizer = (CRandomizer*)inUserRefPtr;
 | 
			
		||||
	if (randomizer)
 | 
			
		||||
		randomizer->PeriodicAction();
 | 
			
		||||
 | 
			
		||||
	return(noErr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//	Finally!
 | 
			
		||||
 | 
			
		||||
void main(void)
 | 
			
		||||
{
 | 
			
		||||
	OSErr				errCode;
 | 
			
		||||
	int					theSocket = -1;
 | 
			
		||||
	int					theTimeout = 30;
 | 
			
		||||
 | 
			
		||||
	SSL_CTX				*ssl_ctx = nil;
 | 
			
		||||
	SSL					*ssl = nil;
 | 
			
		||||
 | 
			
		||||
	char				tempString[256];
 | 
			
		||||
	UnsignedWide		microTickCount;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	CRandomizer randomizer;
 | 
			
		||||
	
 | 
			
		||||
	printf("OpenSSL Demo by Roy Wood, roy@centricsystems.ca\n\n");
 | 
			
		||||
	
 | 
			
		||||
	BailIfError(errCode = MacSocket_Startup());
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//	Create a socket-like object
 | 
			
		||||
	
 | 
			
		||||
	BailIfError(errCode = MacSocket_socket(&theSocket,false,theTimeout * 60,MyMacSocket_IdleWaitCallback,&randomizer));
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	//	Set up the connect string and try to connect
 | 
			
		||||
	
 | 
			
		||||
	CopyCStrAndInsertCStrLongIntIntoCStr("%s:%ld",kHTTPS_DNS,kHTTPS_Port,tempString,sizeof(tempString));
 | 
			
		||||
	
 | 
			
		||||
	printf("Connecting to %s....\n",tempString);
 | 
			
		||||
 | 
			
		||||
	BailIfError(errCode = MacSocket_connect(theSocket,tempString));
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	//	Init SSL stuff
 | 
			
		||||
	
 | 
			
		||||
	SSL_load_error_strings();
 | 
			
		||||
	
 | 
			
		||||
	SSLeay_add_ssl_algorithms();
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	//	Pick the SSL method
 | 
			
		||||
	
 | 
			
		||||
//	ssl_ctx = SSL_CTX_new(SSLv2_client_method());
 | 
			
		||||
	ssl_ctx = SSL_CTX_new(SSLv23_client_method());
 | 
			
		||||
//	ssl_ctx = SSL_CTX_new(SSLv3_client_method());
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
	//	Create an SSL thingey and try to negotiate the connection
 | 
			
		||||
	
 | 
			
		||||
	ssl = SSL_new(ssl_ctx);
 | 
			
		||||
	
 | 
			
		||||
	SSL_set_fd(ssl,theSocket);
 | 
			
		||||
	
 | 
			
		||||
	errCode = SSL_connect(ssl);
 | 
			
		||||
	
 | 
			
		||||
	if (errCode < 0)
 | 
			
		||||
	{
 | 
			
		||||
		SetErrorMessageAndLongIntAndBail("OpenSSL: Can't initiate SSL connection, SSL_connect() = ",errCode);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	//	Request the URI from the host
 | 
			
		||||
	
 | 
			
		||||
	CopyCStrToCStr("GET ",tempString,sizeof(tempString));
 | 
			
		||||
	ConcatCStrToCStr(kHTTPS_URI,tempString,sizeof(tempString));
 | 
			
		||||
	ConcatCStrToCStr(" HTTP/1.0\r\n\r\n",tempString,sizeof(tempString));
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	errCode = SSL_write(ssl,tempString,CStrLength(tempString));
 | 
			
		||||
	
 | 
			
		||||
	if (errCode < 0)
 | 
			
		||||
	{
 | 
			
		||||
		SetErrorMessageAndLongIntAndBail("OpenSSL: Error writing data via ssl, SSL_write() = ",errCode);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	for (;;)
 | 
			
		||||
	{
 | 
			
		||||
	char	tempString[256];
 | 
			
		||||
	int		bytesRead;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		//	Read some bytes and dump them to the console
 | 
			
		||||
		
 | 
			
		||||
		bytesRead = SSL_read(ssl,tempString,sizeof(tempString) - 1);
 | 
			
		||||
		
 | 
			
		||||
		if (bytesRead == 0 && MacSocket_RemoteEndIsClosing(theSocket))
 | 
			
		||||
		{
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		else if (bytesRead < 0)
 | 
			
		||||
		{
 | 
			
		||||
			SetErrorMessageAndLongIntAndBail("OpenSSL: Error reading data via ssl, SSL_read() = ",bytesRead);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		tempString[bytesRead] = '\0';
 | 
			
		||||
		
 | 
			
		||||
		printf("%s", tempString);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	printf("\n\n\n");
 | 
			
		||||
	
 | 
			
		||||
	//	All done!
 | 
			
		||||
	
 | 
			
		||||
	errCode = noErr;
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
EXITPOINT:
 | 
			
		||||
 | 
			
		||||
	//	Clean up and go home
 | 
			
		||||
	
 | 
			
		||||
	if (theSocket >= 0)
 | 
			
		||||
	{
 | 
			
		||||
		MacSocket_close(theSocket);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (ssl != nil)
 | 
			
		||||
	{
 | 
			
		||||
		SSL_free(ssl);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (ssl_ctx != nil)
 | 
			
		||||
	{
 | 
			
		||||
		SSL_CTX_free(ssl_ctx);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	if (errCode != noErr)
 | 
			
		||||
	{
 | 
			
		||||
		printf("An error occurred:\n");
 | 
			
		||||
		
 | 
			
		||||
		printf("%s",GetErrorMessage());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	MacSocket_Shutdown();
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,104 +0,0 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    kMacSocket_TimeoutErr = -2
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Since MacSocket does busy waiting, I do a callback while waiting
 | 
			
		||||
 | 
			
		||||
typedef OSErr(*MacSocket_IdleWaitCallback) (void *);
 | 
			
		||||
 | 
			
		||||
// Call this before anything else!
 | 
			
		||||
 | 
			
		||||
OSErr MacSocket_Startup(void);
 | 
			
		||||
 | 
			
		||||
// Call this to cleanup before quitting
 | 
			
		||||
 | 
			
		||||
OSErr MacSocket_Shutdown(void);
 | 
			
		||||
 | 
			
		||||
// Call this to allocate a "socket" (reference number is returned in
 | 
			
		||||
// outSocketNum)
 | 
			
		||||
// Note that inDoThreadSwitching is pretty much irrelevant right now, since I
 | 
			
		||||
// ignore it
 | 
			
		||||
// The inTimeoutTicks parameter is applied during reads/writes of data
 | 
			
		||||
// The inIdleWaitCallback parameter specifies a callback which is called
 | 
			
		||||
// during busy-waiting periods
 | 
			
		||||
// The inUserRefPtr parameter is passed back to the idle-wait callback
 | 
			
		||||
 | 
			
		||||
OSErr MacSocket_socket(int *outSocketNum, const Boolean inDoThreadSwitching,
 | 
			
		||||
                       const long inTimeoutTicks,
 | 
			
		||||
                       MacSocket_IdleWaitCallback inIdleWaitCallback,
 | 
			
		||||
                       void *inUserRefPtr);
 | 
			
		||||
 | 
			
		||||
// Call this to connect to an IP/DNS address
 | 
			
		||||
// Note that inTargetAddressAndPort is in "IP:port" format-- e.g.
 | 
			
		||||
// 10.1.1.1:123
 | 
			
		||||
 | 
			
		||||
OSErr MacSocket_connect(const int inSocketNum, char *inTargetAddressAndPort);
 | 
			
		||||
 | 
			
		||||
// Call this to listen on a port
 | 
			
		||||
// Since this a low-performance implementation, I allow a maximum of 1 (one!)
 | 
			
		||||
// incoming request when I listen
 | 
			
		||||
 | 
			
		||||
OSErr MacSocket_listen(const int inSocketNum, const int inPortNum);
 | 
			
		||||
 | 
			
		||||
// Call this to close a socket
 | 
			
		||||
 | 
			
		||||
OSErr MacSocket_close(const int inSocketNum);
 | 
			
		||||
 | 
			
		||||
// Call this to receive data on a socket
 | 
			
		||||
// Most parameters' purpose are obvious-- except maybe "inBlock" which
 | 
			
		||||
// controls whether I wait for data or return immediately
 | 
			
		||||
 | 
			
		||||
int MacSocket_recv(const int inSocketNum, void *outBuff, int outBuffLength,
 | 
			
		||||
                   const Boolean inBlock);
 | 
			
		||||
 | 
			
		||||
// Call this to send data on a socket
 | 
			
		||||
 | 
			
		||||
int MacSocket_send(const int inSocketNum, const void *inBuff,
 | 
			
		||||
                   int inBuffLength);
 | 
			
		||||
 | 
			
		||||
// If zero bytes were read in a call to MacSocket_recv(), it may be that the
 | 
			
		||||
// remote end has done a half-close
 | 
			
		||||
// This function will let you check whether that's true or not
 | 
			
		||||
 | 
			
		||||
Boolean MacSocket_RemoteEndIsClosing(const int inSocketNum);
 | 
			
		||||
 | 
			
		||||
// Call this to see if the listen has completed after a call to
 | 
			
		||||
// MacSocket_listen()
 | 
			
		||||
 | 
			
		||||
Boolean MacSocket_ListenCompleted(const int inSocketNum);
 | 
			
		||||
 | 
			
		||||
// These really aren't very useful anymore
 | 
			
		||||
 | 
			
		||||
Boolean MacSocket_LocalEndIsOpen(const int inSocketNum);
 | 
			
		||||
Boolean MacSocket_RemoteEndIsOpen(const int inSocketNum);
 | 
			
		||||
 | 
			
		||||
// You may wish to change the userRefPtr for a socket callback-- use this to
 | 
			
		||||
// do it
 | 
			
		||||
 | 
			
		||||
void MacSocket_SetUserRefPtr(const int inSocketNum, void *inNewRefPtr);
 | 
			
		||||
 | 
			
		||||
// Call these to get the socket's IP:port descriptor
 | 
			
		||||
 | 
			
		||||
void MacSocket_GetLocalIPAndPort(const int inSocketNum, char *outIPAndPort,
 | 
			
		||||
                                 const int inIPAndPortLength);
 | 
			
		||||
void MacSocket_GetRemoteIPAndPort(const int inSocketNum, char *outIPAndPort,
 | 
			
		||||
                                  const int inIPAndPortLength);
 | 
			
		||||
 | 
			
		||||
// Call this to get error info from a socket
 | 
			
		||||
 | 
			
		||||
void MacSocket_GetSocketErrorInfo(const int inSocketNum,
 | 
			
		||||
                                  int *outSocketErrCode,
 | 
			
		||||
                                  char *outSocketErrString,
 | 
			
		||||
                                  const int inSocketErrStringMaxLength);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,476 +0,0 @@
 | 
			
		||||
/* 
 | 
			
		||||
------- Strong random data generation on a Macintosh (pre - OS X) ------
 | 
			
		||||
		
 | 
			
		||||
--	GENERAL: We aim to generate unpredictable bits without explicit
 | 
			
		||||
	user interaction. A general review of the problem may be found
 | 
			
		||||
	in RFC 1750, "Randomness Recommendations for Security", and some
 | 
			
		||||
	more discussion, of general and Mac-specific issues has appeared
 | 
			
		||||
	in "Using and Creating Cryptographic- Quality Random Numbers" by
 | 
			
		||||
	Jon Callas (www.merrymeet.com/jon/usingrandom.html).
 | 
			
		||||
 | 
			
		||||
	The data and entropy estimates provided below are based on my
 | 
			
		||||
	limited experimentation and estimates, rather than by any
 | 
			
		||||
	rigorous study, and the entropy estimates tend to be optimistic.
 | 
			
		||||
	They should not be considered absolute.
 | 
			
		||||
 | 
			
		||||
	Some of the information being collected may be correlated in
 | 
			
		||||
	subtle ways. That includes mouse positions, timings, and disk
 | 
			
		||||
	size measurements. Some obvious correlations will be eliminated
 | 
			
		||||
	by the programmer, but other, weaker ones may remain. The
 | 
			
		||||
	reliability of the code depends on such correlations being
 | 
			
		||||
	poorly understood, both by us and by potential interceptors.
 | 
			
		||||
 | 
			
		||||
	This package has been planned to be used with OpenSSL, v. 0.9.5.
 | 
			
		||||
	It requires the OpenSSL function RAND_add. 
 | 
			
		||||
 | 
			
		||||
--	OTHER WORK: Some source code and other details have been
 | 
			
		||||
	published elsewhere, but I haven't found any to be satisfactory
 | 
			
		||||
	for the Mac per se:
 | 
			
		||||
 | 
			
		||||
	* The Linux random number generator (by Theodore Ts'o, in
 | 
			
		||||
	  drivers/char/random.c), is a carefully designed open-source
 | 
			
		||||
	  crypto random number package. It collects data from a variety
 | 
			
		||||
	  of sources, including mouse, keyboard and other interrupts.
 | 
			
		||||
	  One nice feature is that it explicitly estimates the entropy
 | 
			
		||||
	  of the data it collects. Some of its features (e.g. interrupt
 | 
			
		||||
	  timing) cannot be reliably exported to the Mac without using
 | 
			
		||||
	  undocumented APIs.
 | 
			
		||||
 | 
			
		||||
	* Truerand by Don P. Mitchell and Matt Blaze uses variations
 | 
			
		||||
	  between different timing mechanisms on the same system. This
 | 
			
		||||
	  has not been tested on the Mac, but requires preemptive
 | 
			
		||||
	  multitasking, and is hardware-dependent, and can't be relied
 | 
			
		||||
	  on to work well if only one oscillator is present.
 | 
			
		||||
 | 
			
		||||
	* Cryptlib's RNG for the Mac (RNDMAC.C by Peter Gutmann),
 | 
			
		||||
	  gathers a lot of information about the machine and system
 | 
			
		||||
	  environment. Unfortunately, much of it is constant from one
 | 
			
		||||
	  startup to the next. In other words, the random seed could be
 | 
			
		||||
	  the same from one day to the next. Some of the APIs are
 | 
			
		||||
	  hardware-dependent, and not all are compatible with Carbon (OS
 | 
			
		||||
	  X). Incidentally, the EGD library is based on the UNIX entropy
 | 
			
		||||
	  gathering methods in cryptlib, and isn't suitable for MacOS
 | 
			
		||||
	  either.
 | 
			
		||||
 | 
			
		||||
	* Mozilla (and perhaps earlier versions of Netscape) uses the
 | 
			
		||||
	  time of day (in seconds) and an uninitialized local variable
 | 
			
		||||
	  to seed the random number generator. The time of day is known
 | 
			
		||||
	  to an outside interceptor (to within the accuracy of the
 | 
			
		||||
	  system clock). The uninitialized variable could easily be
 | 
			
		||||
	  identical between subsequent launches of an application, if it
 | 
			
		||||
	  is reached through the same path.
 | 
			
		||||
 | 
			
		||||
	* OpenSSL provides the function RAND_screen(), by G. van
 | 
			
		||||
	  Oosten, which hashes the contents of the screen to generate a
 | 
			
		||||
	  seed. This is not useful for an extension or for an
 | 
			
		||||
	  application which launches at startup time, since the screen
 | 
			
		||||
	  is likely to look identical from one launch to the next. This
 | 
			
		||||
	  method is also rather slow.
 | 
			
		||||
 | 
			
		||||
	* Using variations in disk drive seek times has been proposed
 | 
			
		||||
	  (Davis, Ihaka and Fenstermacher, world.std.com/~dtd/;
 | 
			
		||||
	  Jakobsson, Shriver, Hillyer and Juels,
 | 
			
		||||
	  www.bell-labs.com/user/shriver/random.html). These variations
 | 
			
		||||
	  appear to be due to air turbulence inside the disk drive
 | 
			
		||||
	  mechanism, and are very strongly unpredictable. Unfortunately
 | 
			
		||||
	  this technique is slow, and some implementations of it may be
 | 
			
		||||
	  patented (see Shriver's page above.) It of course cannot be
 | 
			
		||||
	  used with a RAM disk.
 | 
			
		||||
 | 
			
		||||
--	TIMING: On the 601 PowerPC the time base register is guaranteed
 | 
			
		||||
	to change at least once every 10 addi instructions, i.e. 10
 | 
			
		||||
	cycles. On a 60 MHz machine (slowest PowerPC) this translates to
 | 
			
		||||
	a resolution of 1/6 usec. Newer machines seem to be using a 10
 | 
			
		||||
	cycle resolution as well.
 | 
			
		||||
	
 | 
			
		||||
	For 68K Macs, the Microseconds() call may be used. See Develop
 | 
			
		||||
	issue 29 on the Apple developer site
 | 
			
		||||
	(developer.apple.com/dev/techsupport/develop/issue29/minow.html)
 | 
			
		||||
	for information on its accuracy and resolution. The code below
 | 
			
		||||
	has been tested only on PowerPC based machines.
 | 
			
		||||
 | 
			
		||||
	The time from machine startup to the launch of an application in
 | 
			
		||||
	the startup folder has a variance of about 1.6 msec on a new G4
 | 
			
		||||
	machine with a defragmented and optimized disk, most extensions
 | 
			
		||||
	off and no icons on the desktop. This can be reasonably taken as
 | 
			
		||||
	a lower bound on the variance. Most of this variation is likely
 | 
			
		||||
	due to disk seek time variability. The distribution of startup
 | 
			
		||||
	times is probably not entirely even or uncorrelated. This needs
 | 
			
		||||
	to be investigated, but I am guessing that it not a majpor
 | 
			
		||||
	problem. Entropy = log2 (1600/0.166) ~= 13 bits on a 60 MHz
 | 
			
		||||
	machine, ~16 bits for a 450 MHz machine.
 | 
			
		||||
 | 
			
		||||
	User-launched application startup times will have a variance of
 | 
			
		||||
	a second or more relative to machine startup time. Entropy >~22
 | 
			
		||||
	bits.
 | 
			
		||||
 | 
			
		||||
	Machine startup time is available with a 1-second resolution. It
 | 
			
		||||
	is predictable to no better a minute or two, in the case of
 | 
			
		||||
	people who show up punctually to work at the same time and
 | 
			
		||||
	immediately start their computer. Using the scheduled startup
 | 
			
		||||
	feature (when available) will cause the machine to start up at
 | 
			
		||||
	the same time every day, making the value predictable. Entropy
 | 
			
		||||
	>~7 bits, or 0 bits with scheduled startup.
 | 
			
		||||
 | 
			
		||||
	The time of day is of course known to an outsider and thus has 0
 | 
			
		||||
	entropy if the system clock is regularly calibrated.
 | 
			
		||||
 | 
			
		||||
--	KEY TIMING: A  very fast typist (120 wpm) will have a typical
 | 
			
		||||
	inter-key timing interval of 100 msec. We can assume a variance
 | 
			
		||||
	of no less than 2 msec -- maybe. Do good typists have a constant
 | 
			
		||||
	rhythm, like drummers? Since what we measure is not the
 | 
			
		||||
	key-generated interrupt but the time at which the key event was
 | 
			
		||||
	taken off the event queue, our resolution is roughly the time
 | 
			
		||||
	between process switches, at best 1 tick (17 msec). I  therefore
 | 
			
		||||
	consider this technique questionable and not very useful for
 | 
			
		||||
	obtaining high entropy data on the Mac.
 | 
			
		||||
 | 
			
		||||
--	MOUSE POSITION AND TIMING: The high bits of the mouse position
 | 
			
		||||
	are far from arbitrary, since the mouse tends to stay in a few
 | 
			
		||||
	limited areas of the screen. I am guessing that the position of
 | 
			
		||||
	the mouse is arbitrary within a 6 pixel square. Since the mouse
 | 
			
		||||
	stays still for long periods of time, it should be sampled only
 | 
			
		||||
	after it was moved, to avoid correlated data. This gives an
 | 
			
		||||
	entropy of log2(6*6) ~= 5 bits per measurement.
 | 
			
		||||
 | 
			
		||||
	The time during which the mouse stays still can vary from zero
 | 
			
		||||
	to, say, 5 seconds (occasionally longer). If the still time is
 | 
			
		||||
	measured by sampling the mouse during null events, and null
 | 
			
		||||
	events are received once per tick, its resolution is 1/60th of a
 | 
			
		||||
	second, giving an entropy of log2 (60*5) ~= 8 bits per
 | 
			
		||||
	measurement. Since the distribution of still times is uneven,
 | 
			
		||||
	this estimate is on the high side.
 | 
			
		||||
 | 
			
		||||
	For simplicity and compatibility across system versions, the
 | 
			
		||||
	mouse is to be sampled explicitly (e.g. in the event loop),
 | 
			
		||||
	rather than in a time manager task.
 | 
			
		||||
 | 
			
		||||
--	STARTUP DISK TOTAL FILE SIZE: Varies typically by at least 20k
 | 
			
		||||
	from one startup to the next, with 'minimal' computer use. Won't
 | 
			
		||||
	vary at all if machine is started again immediately after
 | 
			
		||||
	startup (unless virtual memory is on), but any application which
 | 
			
		||||
	uses the web and caches information to disk is likely to cause
 | 
			
		||||
	this much variation or more. The variation is probably not
 | 
			
		||||
	random, but I don't know in what way. File sizes tend to be
 | 
			
		||||
	divisible by 4 bytes since file format fields are often
 | 
			
		||||
	long-aligned. Entropy > log2 (20000/4) ~= 12 bits.
 | 
			
		||||
	
 | 
			
		||||
--	STARTUP DISK FIRST AVAILABLE ALLOCATION BLOCK: As the volume
 | 
			
		||||
	gets fragmented this could be anywhere in principle. In a
 | 
			
		||||
	perfectly unfragmented volume this will be strongly correlated
 | 
			
		||||
	with the total file size on the disk. With more fragmentation
 | 
			
		||||
	comes less certainty. I took the variation in this value to be
 | 
			
		||||
	1/8 of the total file size on the volume.
 | 
			
		||||
 | 
			
		||||
--	SYSTEM REQUIREMENTS: The code here requires System 7.0 and above
 | 
			
		||||
	(for Gestalt and Microseconds calls). All the calls used are
 | 
			
		||||
	Carbon-compatible.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*------------------------------ Includes ----------------------------*/
 | 
			
		||||
 | 
			
		||||
#include "Randomizer.h"
 | 
			
		||||
 | 
			
		||||
// Mac OS API
 | 
			
		||||
#include <Files.h>
 | 
			
		||||
#include <Folders.h>
 | 
			
		||||
#include <Events.h>
 | 
			
		||||
#include <Processes.h>
 | 
			
		||||
#include <Gestalt.h>
 | 
			
		||||
#include <Resources.h>
 | 
			
		||||
#include <LowMem.h>
 | 
			
		||||
 | 
			
		||||
// Standard C library
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
/*---------------------- Function declarations -----------------------*/
 | 
			
		||||
 | 
			
		||||
// declared in OpenSSL/crypto/rand/rand.h
 | 
			
		||||
extern "C" void RAND_add (const void *buf, int num, double entropy);
 | 
			
		||||
 | 
			
		||||
unsigned long GetPPCTimer (bool is601);	// Make it global if needed
 | 
			
		||||
					// elsewhere
 | 
			
		||||
 | 
			
		||||
/*---------------------------- Constants -----------------------------*/
 | 
			
		||||
 | 
			
		||||
#define kMouseResolution 6		// Mouse position has to differ
 | 
			
		||||
					// from the last one by this
 | 
			
		||||
					// much to be entered
 | 
			
		||||
#define kMousePositionEntropy 5.16	// log2 (kMouseResolution**2)
 | 
			
		||||
#define kTypicalMouseIdleTicks 300.0	// I am guessing that a typical
 | 
			
		||||
					// amount of time between mouse
 | 
			
		||||
					// moves is 5 seconds
 | 
			
		||||
#define kVolumeBytesEntropy 12.0	// about log2 (20000/4),
 | 
			
		||||
					// assuming a variation of 20K
 | 
			
		||||
					// in total file size and
 | 
			
		||||
					// long-aligned file formats.
 | 
			
		||||
#define kApplicationUpTimeEntropy 6.0	// Variance > 1 second, uptime
 | 
			
		||||
					// in ticks  
 | 
			
		||||
#define kSysStartupEntropy 7.0		// Entropy for machine startup
 | 
			
		||||
					// time
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*------------------------ Function definitions ----------------------*/
 | 
			
		||||
 | 
			
		||||
CRandomizer::CRandomizer (void)
 | 
			
		||||
{
 | 
			
		||||
	long	result;
 | 
			
		||||
	
 | 
			
		||||
	mSupportsLargeVolumes =
 | 
			
		||||
		(Gestalt(gestaltFSAttr, &result) == noErr) &&
 | 
			
		||||
		((result & (1L << gestaltFSSupports2TBVols)) != 0);
 | 
			
		||||
	
 | 
			
		||||
	if (Gestalt (gestaltNativeCPUtype, &result) != noErr)
 | 
			
		||||
	{
 | 
			
		||||
		mIsPowerPC = false;
 | 
			
		||||
		mIs601 = false;
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		mIs601 = (result == gestaltCPU601);
 | 
			
		||||
		mIsPowerPC = (result >= gestaltCPU601);
 | 
			
		||||
	}
 | 
			
		||||
	mLastMouse.h = mLastMouse.v = -10;	// First mouse will
 | 
			
		||||
						// always be recorded
 | 
			
		||||
	mLastPeriodicTicks = TickCount();
 | 
			
		||||
	GetTimeBaseResolution ();
 | 
			
		||||
	
 | 
			
		||||
	// Add initial entropy
 | 
			
		||||
	AddTimeSinceMachineStartup ();
 | 
			
		||||
	AddAbsoluteSystemStartupTime ();
 | 
			
		||||
	AddStartupVolumeInfo ();
 | 
			
		||||
	AddFiller ();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CRandomizer::PeriodicAction (void)
 | 
			
		||||
{
 | 
			
		||||
	AddCurrentMouse ();
 | 
			
		||||
	AddNow (0.0);	// Should have a better entropy estimate here
 | 
			
		||||
	mLastPeriodicTicks = TickCount();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*------------------------- Private Methods --------------------------*/
 | 
			
		||||
 | 
			
		||||
void CRandomizer::AddCurrentMouse (void)
 | 
			
		||||
{
 | 
			
		||||
	Point mouseLoc;
 | 
			
		||||
	unsigned long lastCheck;	// Ticks since mouse was last
 | 
			
		||||
					// sampled
 | 
			
		||||
 | 
			
		||||
#if TARGET_API_MAC_CARBON
 | 
			
		||||
	GetGlobalMouse (&mouseLoc);
 | 
			
		||||
#else
 | 
			
		||||
	mouseLoc = LMGetMouseLocation();
 | 
			
		||||
#endif
 | 
			
		||||
	
 | 
			
		||||
	if (labs (mLastMouse.h - mouseLoc.h) > kMouseResolution/2 &&
 | 
			
		||||
	    labs (mLastMouse.v - mouseLoc.v) > kMouseResolution/2)
 | 
			
		||||
		AddBytes (&mouseLoc, sizeof (mouseLoc),
 | 
			
		||||
				kMousePositionEntropy);
 | 
			
		||||
	
 | 
			
		||||
	if (mLastMouse.h == mouseLoc.h && mLastMouse.v == mouseLoc.v)
 | 
			
		||||
		mMouseStill ++;
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		double entropy;
 | 
			
		||||
		
 | 
			
		||||
		// Mouse has moved. Add the number of measurements for
 | 
			
		||||
		// which it's been still. If the resolution is too
 | 
			
		||||
		// coarse, assume the entropy is 0.
 | 
			
		||||
 | 
			
		||||
		lastCheck = TickCount() - mLastPeriodicTicks;
 | 
			
		||||
		if (lastCheck <= 0)
 | 
			
		||||
			lastCheck = 1;
 | 
			
		||||
		entropy = log2l
 | 
			
		||||
			(kTypicalMouseIdleTicks/(double)lastCheck);
 | 
			
		||||
		if (entropy < 0.0)
 | 
			
		||||
			entropy = 0.0;
 | 
			
		||||
		AddBytes (&mMouseStill, sizeof (mMouseStill), entropy);
 | 
			
		||||
		mMouseStill = 0;
 | 
			
		||||
	}
 | 
			
		||||
	mLastMouse = mouseLoc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CRandomizer::AddAbsoluteSystemStartupTime (void)
 | 
			
		||||
{
 | 
			
		||||
	unsigned long	now;		// Time in seconds since
 | 
			
		||||
					// 1/1/1904
 | 
			
		||||
	GetDateTime (&now);
 | 
			
		||||
	now -= TickCount() / 60;	// Time in ticks since machine
 | 
			
		||||
					// startup
 | 
			
		||||
	AddBytes (&now, sizeof (now), kSysStartupEntropy);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CRandomizer::AddTimeSinceMachineStartup (void)
 | 
			
		||||
{
 | 
			
		||||
	AddNow (1.5);			// Uncertainty in app startup
 | 
			
		||||
					// time is > 1.5 msec (for
 | 
			
		||||
					// automated app startup).
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CRandomizer::AddAppRunningTime (void)
 | 
			
		||||
{
 | 
			
		||||
	ProcessSerialNumber PSN;
 | 
			
		||||
	ProcessInfoRec		ProcessInfo;
 | 
			
		||||
	
 | 
			
		||||
	ProcessInfo.processInfoLength = sizeof (ProcessInfoRec);
 | 
			
		||||
	ProcessInfo.processName = nil;
 | 
			
		||||
	ProcessInfo.processAppSpec = nil;
 | 
			
		||||
	
 | 
			
		||||
	GetCurrentProcess (&PSN);
 | 
			
		||||
	GetProcessInformation (&PSN, &ProcessInfo);
 | 
			
		||||
 | 
			
		||||
	// Now add the amount of time in ticks that the current process
 | 
			
		||||
	// has been active
 | 
			
		||||
 | 
			
		||||
	AddBytes (&ProcessInfo, sizeof (ProcessInfoRec),
 | 
			
		||||
			kApplicationUpTimeEntropy);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CRandomizer::AddStartupVolumeInfo (void)
 | 
			
		||||
{
 | 
			
		||||
	short			vRefNum;
 | 
			
		||||
	long			dirID;
 | 
			
		||||
	XVolumeParam	pb;
 | 
			
		||||
	OSErr			err;
 | 
			
		||||
	
 | 
			
		||||
	if (!mSupportsLargeVolumes)
 | 
			
		||||
		return;
 | 
			
		||||
		
 | 
			
		||||
	FindFolder (kOnSystemDisk, kSystemFolderType, kDontCreateFolder,
 | 
			
		||||
			&vRefNum, &dirID);
 | 
			
		||||
	pb.ioVRefNum = vRefNum;
 | 
			
		||||
	pb.ioCompletion = 0;
 | 
			
		||||
	pb.ioNamePtr = 0;
 | 
			
		||||
	pb.ioVolIndex = 0;
 | 
			
		||||
	err = PBXGetVolInfoSync (&pb);
 | 
			
		||||
	if (err != noErr)
 | 
			
		||||
		return;
 | 
			
		||||
		
 | 
			
		||||
	// Base the entropy on the amount of space used on the disk and
 | 
			
		||||
	// on the next available allocation block. A lot else might be
 | 
			
		||||
	// unpredictable, so might as well toss the whole block in. See
 | 
			
		||||
	// comments for entropy estimate justifications.
 | 
			
		||||
 | 
			
		||||
	AddBytes (&pb, sizeof (pb),
 | 
			
		||||
		kVolumeBytesEntropy +
 | 
			
		||||
		log2l (((pb.ioVTotalBytes.hi - pb.ioVFreeBytes.hi)
 | 
			
		||||
				* 4294967296.0D +
 | 
			
		||||
			(pb.ioVTotalBytes.lo - pb.ioVFreeBytes.lo))
 | 
			
		||||
				/ pb.ioVAlBlkSiz - 3.0));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
	On a typical startup CRandomizer will come up with about 60
 | 
			
		||||
	bits of good, unpredictable data. Assuming no more input will
 | 
			
		||||
	be available, we'll need some more lower-quality data to give
 | 
			
		||||
	OpenSSL the 128 bits of entropy it desires. AddFiller adds some
 | 
			
		||||
	relatively predictable data into the soup.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
void CRandomizer::AddFiller (void)
 | 
			
		||||
{
 | 
			
		||||
	struct
 | 
			
		||||
	{
 | 
			
		||||
		ProcessSerialNumber psn;	// Front process serial
 | 
			
		||||
						// number
 | 
			
		||||
		RGBColor	hiliteRGBValue;	// User-selected
 | 
			
		||||
						// highlight color
 | 
			
		||||
		long		processCount;	// Number of active
 | 
			
		||||
						// processes
 | 
			
		||||
		long		cpuSpeed;	// Processor speed
 | 
			
		||||
		long		totalMemory;	// Total logical memory
 | 
			
		||||
						// (incl. virtual one)
 | 
			
		||||
		long		systemVersion;	// OS version
 | 
			
		||||
		short		resFile;	// Current resource file
 | 
			
		||||
	} data;
 | 
			
		||||
	
 | 
			
		||||
	GetNextProcess ((ProcessSerialNumber*) kNoProcess);
 | 
			
		||||
	while (GetNextProcess (&data.psn) == noErr)
 | 
			
		||||
		data.processCount++;
 | 
			
		||||
	GetFrontProcess (&data.psn);
 | 
			
		||||
	LMGetHiliteRGB (&data.hiliteRGBValue);
 | 
			
		||||
	Gestalt (gestaltProcClkSpeed, &data.cpuSpeed);
 | 
			
		||||
	Gestalt (gestaltLogicalRAMSize, &data.totalMemory);
 | 
			
		||||
	Gestalt (gestaltSystemVersion, &data.systemVersion);
 | 
			
		||||
	data.resFile = CurResFile ();
 | 
			
		||||
	
 | 
			
		||||
	// Here we pretend to feed the PRNG completely random data. This
 | 
			
		||||
	// is of course false, as much of the above data is predictable
 | 
			
		||||
	// by an outsider. At this point we don't have any more
 | 
			
		||||
	// randomness to add, but with OpenSSL we must have a 128 bit
 | 
			
		||||
	// seed before we can start. We just add what we can, without a
 | 
			
		||||
	// real entropy estimate, and hope for the best.
 | 
			
		||||
 | 
			
		||||
	AddBytes (&data, sizeof(data), 8.0 * sizeof(data));
 | 
			
		||||
	AddCurrentMouse ();
 | 
			
		||||
	AddNow (1.0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------  LOW LEVEL ---------------------
 | 
			
		||||
 | 
			
		||||
void CRandomizer::AddBytes (void *data, long size, double entropy)
 | 
			
		||||
{
 | 
			
		||||
	RAND_add (data, size, entropy * 0.125);	// Convert entropy bits
 | 
			
		||||
						// to bytes
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CRandomizer::AddNow (double millisecondUncertainty)
 | 
			
		||||
{
 | 
			
		||||
	long time = SysTimer();
 | 
			
		||||
	AddBytes (&time, sizeof (time), log2l (millisecondUncertainty *
 | 
			
		||||
			mTimebaseTicksPerMillisec));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------- TIMING SUPPORT ------------------
 | 
			
		||||
 | 
			
		||||
void CRandomizer::GetTimeBaseResolution (void)
 | 
			
		||||
{	
 | 
			
		||||
#ifdef __powerc
 | 
			
		||||
	long speed;
 | 
			
		||||
	
 | 
			
		||||
	// gestaltProcClkSpeed available on System 7.5.2 and above
 | 
			
		||||
	if (Gestalt (gestaltProcClkSpeed, &speed) != noErr)
 | 
			
		||||
		// Only PowerPCs running pre-7.5.2 are 60-80 MHz
 | 
			
		||||
		// machines.
 | 
			
		||||
		mTimebaseTicksPerMillisec =  6000.0D;
 | 
			
		||||
	// Assume 10 cycles per clock update, as in 601 spec. Seems true
 | 
			
		||||
	// for later chips as well.
 | 
			
		||||
	mTimebaseTicksPerMillisec = speed / 1.0e4D;
 | 
			
		||||
#else
 | 
			
		||||
	// 68K VIA-based machines (see Develop Magazine no. 29)
 | 
			
		||||
	mTimebaseTicksPerMillisec = 783.360D;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsigned long CRandomizer::SysTimer (void)	// returns the lower 32
 | 
			
		||||
						// bit of the chip timer
 | 
			
		||||
{
 | 
			
		||||
#ifdef __powerc
 | 
			
		||||
	return GetPPCTimer (mIs601);
 | 
			
		||||
#else
 | 
			
		||||
	UnsignedWide usec;
 | 
			
		||||
	Microseconds (&usec);
 | 
			
		||||
	return usec.lo;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef __powerc
 | 
			
		||||
// The timebase is available through mfspr on 601, mftb on later chips.
 | 
			
		||||
// Motorola recommends that an 601 implementation map mftb to mfspr
 | 
			
		||||
// through an exception, but I haven't tested to see if MacOS actually
 | 
			
		||||
// does this. We only sample the lower 32 bits of the timer (i.e. a
 | 
			
		||||
// few minutes of resolution)
 | 
			
		||||
 | 
			
		||||
asm unsigned long GetPPCTimer (register bool is601)
 | 
			
		||||
{
 | 
			
		||||
	cmplwi	is601, 0	// Check if 601
 | 
			
		||||
	bne	_601		// if non-zero goto _601
 | 
			
		||||
	mftb  	r3		// Available on 603 and later.
 | 
			
		||||
	blr			// return with result in r3
 | 
			
		||||
_601:
 | 
			
		||||
	mfspr r3, spr5  	// Available on 601 only.
 | 
			
		||||
				// blr inserted automatically
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1,42 +0,0 @@
 | 
			
		||||
 | 
			
		||||
// Gathers unpredictable system data to be used for generating
 | 
			
		||||
// random bits
 | 
			
		||||
 | 
			
		||||
#include <MacTypes.h>
 | 
			
		||||
 | 
			
		||||
class CRandomizer {
 | 
			
		||||
 public:
 | 
			
		||||
    CRandomizer(void);
 | 
			
		||||
    void PeriodicAction(void);
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
 | 
			
		||||
    // Private calls
 | 
			
		||||
 | 
			
		||||
    void AddTimeSinceMachineStartup(void);
 | 
			
		||||
    void AddAbsoluteSystemStartupTime(void);
 | 
			
		||||
    void AddAppRunningTime(void);
 | 
			
		||||
    void AddStartupVolumeInfo(void);
 | 
			
		||||
    void AddFiller(void);
 | 
			
		||||
 | 
			
		||||
    void AddCurrentMouse(void);
 | 
			
		||||
    void AddNow(double millisecondUncertainty);
 | 
			
		||||
    void AddBytes(void *data, long size, double entropy);
 | 
			
		||||
 | 
			
		||||
    void GetTimeBaseResolution(void);
 | 
			
		||||
    unsigned long SysTimer(void);
 | 
			
		||||
 | 
			
		||||
    // System Info
 | 
			
		||||
    bool mSupportsLargeVolumes;
 | 
			
		||||
    bool mIsPowerPC;
 | 
			
		||||
    bool mIs601;
 | 
			
		||||
 | 
			
		||||
    // Time info
 | 
			
		||||
    double mTimebaseTicksPerMillisec;
 | 
			
		||||
    unsigned long mLastPeriodicTicks;
 | 
			
		||||
 | 
			
		||||
    // Mouse info
 | 
			
		||||
    long mSamplePeriod;
 | 
			
		||||
    Point mLastMouse;
 | 
			
		||||
    long mMouseStill;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										18
									
								
								MacOS/TODO
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								MacOS/TODO
									
									
									
									
									
								
							@@ -1,18 +0,0 @@
 | 
			
		||||
-------------------------------------------------------------------
 | 
			
		||||
Verify server certificate
 | 
			
		||||
-------------------------------------------------------------------
 | 
			
		||||
Currently omitted from the project:
 | 
			
		||||
 | 
			
		||||
	crypto/tmdiff.c
 | 
			
		||||
	crypto/bio/bss_conn.c
 | 
			
		||||
	crypto/bio/b_sock.c
 | 
			
		||||
	crypto/bio/bss_acpt.c
 | 
			
		||||
	crypto/bio/bss_log.h
 | 
			
		||||
 | 
			
		||||
-------------------------------------------------------------------
 | 
			
		||||
Build libraries to link with...
 | 
			
		||||
-------------------------------------------------------------------
 | 
			
		||||
Port openssl application.
 | 
			
		||||
-------------------------------------------------------------------
 | 
			
		||||
BN optimizations (currently PPC version is compiled with BN_LLONG)
 | 
			
		||||
-------------------------------------------------------------------
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
#include <MacHeaders.h>
 | 
			
		||||
#define B_ENDIAN
 | 
			
		||||
#ifdef __POWERPC__
 | 
			
		||||
# pragma longlong on
 | 
			
		||||
#endif
 | 
			
		||||
#if 1
 | 
			
		||||
# define MAC_OS_GUSI_SOURCE
 | 
			
		||||
#endif
 | 
			
		||||
#define MONOLITH
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
#include <MacHeaders.h>
 | 
			
		||||
#define B_ENDIAN
 | 
			
		||||
#ifdef __POWERPC__
 | 
			
		||||
# pragma longlong on
 | 
			
		||||
#endif
 | 
			
		||||
#if 0
 | 
			
		||||
# define MAC_OS_GUSI_SOURCE
 | 
			
		||||
#endif
 | 
			
		||||
#define MONOLITH
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
#ifndef MK1MF_BUILD
 | 
			
		||||
# define CFLAGS        "-DB_ENDIAN"
 | 
			
		||||
# define PLATFORM      "macos"
 | 
			
		||||
# define DATE          "Sun Feb 27 19:44:16 MET 2000"
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1,820 +0,0 @@
 | 
			
		||||
(This file must be converted with BinHex 4.0)
 | 
			
		||||
 | 
			
		||||
:#QeVE'PZDh-ZBA-!39"36'&`E(3J!!!!!!!!!*LiI6m!!!!!!3!!!*G#!!#@3J!
 | 
			
		||||
!!AChFQPd!!!!K3)"!3m(Fh9`F'pbG!!!!)B#!3%$"(0eFQ8!!!#(!J-%"!3("3C
 | 
			
		||||
cGfPdBfJ!!!#)!J%"#39cH@jMD!!!!)N#"J%$!`-&"3-'FhPcG'9Y!!!!LJ)&"3)
 | 
			
		||||
%!J8("!-#!`4dB@*X!!!!L`))!3-$!`-$!`-$"(4PE'`!!!#-!J)"#38$G'KP!!!
 | 
			
		||||
!M3))(J)@!Ki#!J))!K)#!`)B!Kd%G'KPE3!!!)i#!J%&#`4dD'9j!!!!M`)#!J)
 | 
			
		||||
#$3TdD(*[G@GSEh9d!!!!N!!#!3%&"(4TCQB!!!#4!J%"!`4dD@eP!!!!NJ)"!JS
 | 
			
		||||
#!h4T!!!!'N!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!H!!!!!!!#!!!!!!
 | 
			
		||||
!!!!!!!!!!!!!rrrrr`!!!$3!!!!N!!!!!#"[!!5JAb"[!!5K++!M6R9$9'mJFR9
 | 
			
		||||
Z)(4SDA-JFf0bDA"d)'&`F'aTBf&dD@pZ,#"jEh8JEA9cG#"QDA*cG#"TER0dB@a
 | 
			
		||||
X)%&`F'aP8f0bDA"d,J!!!)C8D'Pc)(0MFQP`G#"MFQ9KG'9c)#iZ,fPZBfaeC'8
 | 
			
		||||
[Eh"PER0cE#"KEQ3JCQPXE(-JDA3JGfPdD#"ZC@0PFh0KFRNJB@aTBA0PFbi0$8P
 | 
			
		||||
d)'eTCfKd)(4KDf8JB5"hD'PXC5"dEb"MEfe`E'9dC5"cEb"`E'9KFf8JBQ8JF'&
 | 
			
		||||
dD@9ZG$SY+3!!!#S!!J!!!!!!$3!+!"!!!!!-!!!!!!!!!!!!63!0!!S!%!%!!!`
 | 
			
		||||
!!!!!!!!!!!!B!!!!+!!!!!!!!!!)!!!!)!#N2c`!!DR`!!!!l!!!!!&19[ri,`0
 | 
			
		||||
f!#m$-$bKVDG'*KmY52ri,`-`2+LITdBQ(b!ZrrLa`'FJ,`-J2'0`ER4"l[rm)NL
 | 
			
		||||
KV5+)*Kp+3'B)5Ulrr'F#GJ%3!bBZrr41ANje6PB!!#m-@Bm[2%j29%Nr2!#!U"m
 | 
			
		||||
SAb!-CJK`!cm!UFKJ+#m-UC)J9#!)d+J!'#&!!"JJ9#!)d+J!(#&!!"a9Mbm8)&q
 | 
			
		||||
JAMk!9%mSE[rm6Pj1G8j@!!![$%kkre4+!'FU@Bm[2'&`E(3[2(0MF(4`)DJU+&m
 | 
			
		||||
J$'F5@Bm[$#mm!!!!!A!!U#UTp&K26VVrG#KZrra1ANje!!!!('&`E(3!!!!"4P*
 | 
			
		||||
&4J!!!!!!J%P$6L-!!!!!!*B!!!!"!!!!!!G"8&"-!!!!!!!"!!!"!!!!!S!!!!4
 | 
			
		||||
!!!"i)!!!K"!!!3))!!)#"!!%"!)!#!J"!"!8!)!J)J"!3%%!)2#!J"#*!%!)KJ!
 | 
			
		||||
J")3!)!*!!"!")!!3!K!!%!3)!"!)"!!J%!)!3#!"!)"!!S%!J!5#!3!)4!)!#%J
 | 
			
		||||
%!!KB#!!%C"!!!m)J!!!"3!!!!)!!!!%!!!!$J!!!"m!!!(rJ!!$rm!!"rrJ!!rr
 | 
			
		||||
m!!IrrJ!2rrm!(rrrJ$rrrm"rrrrJrrrrm2rrrrMrrrrmrrrrrRrrrrmrrrrq(rr
 | 
			
		||||
rr!rrrrJ(rrr`!rrri!(rrm!$rrq!"rrr!!rrrJ!2rr`!$rri!!IRm!!$`q!!!!(
 | 
			
		||||
!!!!!J!!!!!)!!!!!!!!!!!m!!!!!!!!!!!!!!!!!!!$`m!!!!!!!!!!!!!!!!!!
 | 
			
		||||
2!!m!!!!!!!!!!!!!!!rrm!!!m!!!!!!!!!!!!!$`c0m!!!m!!!!!!!!!!!!2!!c
 | 
			
		||||
-m!!!m!!!!!!!!!!!m!$-cI!!!!m!!!!!!!!!$`!-c0m!!!!!m!!!!!!!!2!!c-h
 | 
			
		||||
`!!!!!!m!!!!!!!m!$-cIh`!!!!!!m!!!!!$`!-c0rGh`!!!!!!m!!!!2!!c-hph
 | 
			
		||||
-h`!!!!!!m!!!rrr-cIhF`-h`!!!!!!m!!2lFr0rGc!`-h`!!!!!!m!$pc-rph-$
 | 
			
		||||
!`-h`!!!!!!m!r-`2cF`-$!!-r3!!!!!!m!m!`-c!`-!!$0m!!!!!$-m!m!`-$!`
 | 
			
		||||
!!-cI!!!!!-c`!!m!`-$!!!`-h`!!!!c2!!!!m!`-!!$!c0m!!!$-m!!!!!m!`!!
 | 
			
		||||
-$-hm!!!-c`!!!!!!m!!!`-cIc!!!c2!!!!!!!!m!$!c0r-`!$-m!!!!!!!$pm-$
 | 
			
		||||
-hmc!!-c`!!!!!!!2hI`-cIc-!!c2!!!!!!!!rGc2c0r-`!$-m!!!!!!!!2h-cmh
 | 
			
		||||
mc!!-c`!!!!!!!!$mc!rIr-!!c2!!!!!!!!!!$m$2m!r-$-m!!!!!!!!!!!$rr`!
 | 
			
		||||
!r-c`!!!!!!!!!!!!!!!!!!r2!!!!!!!!!!!!!!!!!!!!m!!!!!!!!!!!!!"!!B!
 | 
			
		||||
13"%J)4"##18%Q)+3!%&!)5!L%%3BL#83*L!G3!#!!B!2`"rJ2r"rq2rmrrlrrhr
 | 
			
		||||
r2riIr"ri2r!ri"h!!)!!!!#!!!!!$r!!!!!!!2r`$`!!!!!2$!m!m!!!!2$!c`!
 | 
			
		||||
2!!!2$!c`!!$`!2r`cpm!!!m!rGrpc2!!!2$p$p`-c`!!$`m!`-$0m!$2!2!-$-h
 | 
			
		||||
`$2!!$`$-hm$2!!!2m-hm$2!!!2h2hm$2!!!!r-rm$2!!!!!2r`r2!!!!!!!!!2!
 | 
			
		||||
!!!!!!!#D8f0bDA"d)%&`F'aTBf&dD@pZ$3e8D'Pc)(0MFQP`G#"MFQ9KG'9c)#i
 | 
			
		||||
Z,fPZBfaeC'8[Eh"PER0cE#"KEQ3JCQPXE(-JDA3JGfPdD#"ZC@0PFh0KFRNJB@a
 | 
			
		||||
TBA0PFbi0$8Pd)'eTCfKd)(4KDf8JB5"hD'PXC5"dEb"MEfe`E'9dC5"cEb"`E'9
 | 
			
		||||
KFf8JBQ8JF'&dD@9ZG$SY+3!!!")!!J!!!!!!!!!!!!%!"J!'%iN!!!!+@1!!!b!
 | 
			
		||||
!!!-J!!!!!"3!+`!(!Cm#@!!V!!F"f!*B!!!!!3!!M`C'BA0N98&6)$%Z-6!a,M%
 | 
			
		||||
`$J!!!!32rrm!!3!#!!-"rrm!!!d!!3!"D`!!!!!!!!!%!J!%!!)!"3!'$3!&!!*
 | 
			
		||||
X!!)!!!U`!!IrrJd!"`!#6`!!!!!+X!!)!!N0!!J!!@X!!!!%#Um!#J)!#J!#!!X
 | 
			
		||||
!$!d!#`!#E!!#!!3!"2rprr`"rrd!!!(rr!!!!J!-!!)!$3!1$3!0!!*X!!%!"!!
 | 
			
		||||
%rrX!$`(rq`!!$!!2!&N!8b"(CA3JF'&dD#"dEb"dD'Pc)%&`F'aP8f0bDA"d)'&
 | 
			
		||||
`F'aPG$XJGA0P)'Pd)(4[)'C[FQdJG'KP)("KG'JJG'mJG'KP)'PZBfaeC'8JCQp
 | 
			
		||||
XC'9b!!)!!!)!$J!#!"!!%3d!%!!#E!!"!!3!"2rk!")"rrS!!!`!%J!Q!#!JB@j
 | 
			
		||||
N)(4SC5"[G'KPFL"bC@aPGQ&ZG#"QEfaNCA*c,J!#!!!#!"%!!J!6!"30!"-!!R-
 | 
			
		||||
!!!!%!"%!&3!@$3!9!!*M!!!!"!!1!"F!'!d!&`!#E!!&!!3!$!!CrrN0!"N!!Qi
 | 
			
		||||
!!!!%!!`!'J!E$3!D!!)d!!!!"3!-rrJ!(!Vrq!!%#Q0[BQS0!"`!!Q`!"3!'!!X
 | 
			
		||||
!(Irh$3!G!!0*!!)!"J!,rrB!([re#[rf!"JZC@&bFfCQC(*KE'Pc!!!!!!!!)!"
 | 
			
		||||
KCQ4b$3!H!!"Q!!!!"J!(![re!!!"rrF!!!d!'`!"E3!!!!3!"3!I$`!I!6J)ER9
 | 
			
		||||
XE!!!!!!!!Gq!rrm!!!!A"NCTEQ4PFJ!!(`*[Me!!ASfm!Qq,i!"HA[!!I&M!!!!
 | 
			
		||||
!!!!!'mi!!JN#!Qq-1!!!Kb%#Ei`J!!!!!%C14&*038e"3e-!!"%!B@aTF`!!!!!
 | 
			
		||||
!fJ!#!!!-6@&MD@jdEh0S)%K%!!!!!!!!!!!!!!!!!!!!XSA5h%*%!!!!!!!A"NC
 | 
			
		||||
TEQ4PFJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 | 
			
		||||
!!!!!!!!!!!!!!!!!!!!!3rLc#@a!4Nj%8Ne"3e2rrrrr!!!!!!!!!!!!!!!!!!!
 | 
			
		||||
!!!!!!!e6HA0dC@dJ4QpXC'9b!!!"!!3!!!!A!!)!)8eKBfPZG'pcD#")4$T6HA0
 | 
			
		||||
dC@dJ4QpXC'9b1NCTEQ4PFJ$rr`!!!Irj!!!0!"J!!@d!!!!-!!hrp!Vrp!!%#Q0
 | 
			
		||||
dH(30!"B!!@m!!!!!!!$rm`[rm`!5-!!(G'KPF'&dD!!(G'KP8'&dD!)!&!!#!#!
 | 
			
		||||
!)3d!)!!#E!!#!")!%[rbrr%"rr)!!!(rm3!!!J!K!!)!)J!M$3!L!!*b!!!!%J!
 | 
			
		||||
A!#3!*3d!*!!#EJ!$!")!&3!Q!#F0!#B!!6%!!!!6!"Arm!Vrm!!%#R4iC'`0!#F
 | 
			
		||||
!!6%!!!!5!"2rl`Vrl`!%#Q&cBh)0!#8!!@m!!!!!!!$rlJ[rlJ!F-!!-G'KPEfa
 | 
			
		||||
NC'9XD@ec!!adD'92E'4%C@aTEA-#!#-!!J!S!#N0!#J!!R)!!!!B!"d!+J!V$3!
 | 
			
		||||
U!!&Y!!!!'!!C!#`-!#`!"`!"1J!#!!!0!#X!!Qi!!`!!!!!!,3!Z$3!Y!!%a!!!
 | 
			
		||||
!'J!Frqd+rqd!"!TdH'4X$3!Z!!%a!!!!'3!Drq`+rq`!"!TKFf0b!J!T!!)!,`!
 | 
			
		||||
`$3![!!*X!!)!(J!Hrq[rkJ(rk`!!!IrU!!!#!$!!!J!a!$)0!$%!!R)!!!!H!#X
 | 
			
		||||
!-`!d$3!c!!*X!!8!(J!T!$Ark3d!03!#EJ!!!"i!+3!f!$F0!$B!!cF"!!!I!#R
 | 
			
		||||
rk!!i!$N+rqJ!"!TMDA4Y$3!i!!&Y!!!!)`!PrqF$rqF!!3d!13!"E3!!!#B!+2r
 | 
			
		||||
Q!rrQrrd0!$F!!@m!!!!H!"rrj3[rj3!5-!!(G'KPF'&dD!!(G'KP8'&dD!(rk3!
 | 
			
		||||
!$3!d!!&[!!!!!!!!rq3,rq3!)$!!$R4SCA"bEfTPBh4`BA4S!!jdD'93FQpUC@0
 | 
			
		||||
d8'&dD!)!-J!#!$S!1`d!1J!#FJ!!!#`!1`!m!$d0!$`!!Q-!!!!X!$N!2J!r$3!
 | 
			
		||||
q!!*X!!8!,!!h!%$ri`d!3!!#EJ!!!#`!0`""!%)0!%%!!cF"!!!Y!$IriJ"$!%3
 | 
			
		||||
+rq)!"!TMDA4Y$3"$!!&Y!!!!-3!crq%$rq%!!3d!4!!"E3!!!$3!0[rJ!rrJrri
 | 
			
		||||
0!%)!!@m!!!!X!#hrh`[rh`!5-!!(G'KPF'&dD!!(G'KP8'&dD!(ri`!!$3!r!!&
 | 
			
		||||
Y!!!!0`!irpi+rpi!"!T849K8$3!p!!&[!!!!!!!!rpd,rpd!&M!!#A4SC@ePF'&
 | 
			
		||||
dD!!*G'KP6@93BA4S!J!l!!)!43"'$3"&!!*X!!)!2!!mrpcrf`(rh!!!!IrE!!!
 | 
			
		||||
#!%B!!J"(!%J0!%F!!R)!!!!m!%8!53"+$3"*!!*M!!!!2!""!%X!6!d!5`!#BJ!
 | 
			
		||||
!!$`!2`"0!%i0!%d!!@m!!!!m!$hrfJ[rfJ!J-!!1G'KPF(*[DQ9MG("KG'J!$R4
 | 
			
		||||
SC9"bEfTPBh43BA4S$3"1!!&Y!!!!23!q!%m-!%m!$3!(D@jME(9NC3!#!!!0!%`
 | 
			
		||||
!!@d!!!!r!%$rf3Vrf3!%#P4&@&30!%S!!@m!!!!!!!$rf![rf!!Q-!!4D@jME(9
 | 
			
		||||
NC@C[E'4PFR"KG'J!%@PZBfaeC'9'EfaNCA*3BA4S!J")!!)!8!"4$3"3!!*b!!!
 | 
			
		||||
!4J"9!&)!8`d!8J!#B`!!!%B!83"8!&80!&3!!Q)!!!"'!%m!9J"A$3"@!!*L!!!
 | 
			
		||||
!4J",!&J!@3d!@!!"E`!!!%B!4rrA#rrA!#!`!!jdD'9`FQpUC@0dF'&dD!!1G'K
 | 
			
		||||
P8(*[DQ9MG&"KG'J0!&N!!@d!!!"(!%S!@J`!@J!0!!GTEQ0XG@4P!!)!!!d!9`!
 | 
			
		||||
"E3!!!%X!6J"E$!"E!!d!"fp`C@jcFf`!!J!!$3"9!!&Y!!!!6`"3rpB+rpB!"!T
 | 
			
		||||
849K8$3"6!!&[!!!!!!!!rp8,rp8!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&
 | 
			
		||||
dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S!J"4!!)!A!"G$3"F!!*b!!!!9J"
 | 
			
		||||
K!&i!A`d!AJ!#B`!!!&B!A3"J!'%0!'!!!Q)!!!"@!&X!BJ"M$3"L!!&[!!!!9J"
 | 
			
		||||
Arp3,rp3!)$!!$R4SCA"bEfTPBh4`BA4S!!jdD'93FQpUC@0d8'&dD!d!B`!"E3!
 | 
			
		||||
!!&F!@J"N$!"N!!`!"Q0bHA"dE`!#!!!0!'%!!@d!!!"E!&crd`Vrd`!%#P4&@&3
 | 
			
		||||
0!&m!!@m!!!!!!!$rdJ[rdJ!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4Qp
 | 
			
		||||
XC'9b8'&dD!)!A3!#!'8!CJd!C3!#FJ!!!')!E3"R!'J0!'F!!Q-!!!"L!'N!D3"
 | 
			
		||||
U$3"T!!*L!!!!BJ"R!'X!E!d!D`!"E`!!!')!Brr4#rr4!#!`!!jdD'9`FQpUC@0
 | 
			
		||||
dF'&dD!!1G'KP8(*[DQ9MG&"KG'J0!'`!!@d!!!"M!'B!E3`!E3!*!!0cFf`!!J!
 | 
			
		||||
!$3"U!!&Y!!!!C`"Srp!+rp!!"!T849K8$3"S!!&[!!!!!!!!rmm,rmm!(M!!$A0
 | 
			
		||||
cE'C[E'4PFR"KG'J!$A0cE%C[E'4PFP"KG'J#!'B!!J"Z!'m0!'i!!R)!!!"Z!(8
 | 
			
		||||
!F!"a$3"`!!*M!!!!EJ"a!()!F`d!FJ!"E`!!!'i!Err1#rr1!#!`!!jdD'9`FQp
 | 
			
		||||
UC@0dF'&dD!!1G'KP8(*[DQ9MG&"KG'J0!(-!!@d!!!"[!($rc3Vrc3!%#P4&@&3
 | 
			
		||||
0!(%!!@m!!!!!!!$rc![rc!!Q-!!4Eh"PER0cE'C[E'4PFR"KG'J!%@p`C@jcFfa
 | 
			
		||||
'EfaNCA*3BA4S!J"[!!)!G!"e$3"d!!*X!!)!GJ"frm[rbJ(rb`!!!Ir+!!!#!(8
 | 
			
		||||
!!J"f!(F0!(B!!R)!!!"f!(X!H!"j$3"i!!&[!!!!GJ"hrmN,rmN!($!!$(4SC@p
 | 
			
		||||
XC'4PE'PYF`!-G'KP6faN4'9XD@ec$3"j!!*Z!!-!!!!!!(S!H`d!HJ!"-3!!!(J
 | 
			
		||||
!H[r)#[r)!!3+G(KNE!d!H`!"-3!!!(F!H2r(#[r(!!3+BA0MFJ)!G`!#!(`!I3d
 | 
			
		||||
!I!!#E!!#!(`!I2r'rm8"rmB!!!(ra3!!!J"p!!)!IJ"r$3"q!!*X!!%!I!"mrm3
 | 
			
		||||
!J!(ra!!!$!#!!%!!1L"NC@aPG'8JEfaN)'PZBfaeC'8kEh"PER0cE#"QEfaNCA)
 | 
			
		||||
JB@jN)(*PBh*PBA4P)'Pd)'0XC@&ZE(N!!J!!!J"r!!)!J3##$3#"!!*X!!)!I!"
 | 
			
		||||
mrm2r`J(r``!!!Ir#!!!#!))!!J#$!)30!)-!!e%!!!"m!+8!K3#'!)F0!)8!!@X
 | 
			
		||||
!!!"r!*`!L!)!L!!#!)N!LJd!L3!$53!#!(m!N[r"!)[r`!Vr`3!B,QeTFf0cE'0
 | 
			
		||||
d+LSU+J!!!!!!!*!!!#SU+LS0!)X!!Qi!!!"r!)i!M!#0$3#-!!)d!!!!K`#1rlm
 | 
			
		||||
!MJVr[`!%#Q0QEf`0!)i!!@d!!!#+!)d!M``!M`!0!!G[F'9ZFh0X!!)!!!d!M3!
 | 
			
		||||
#0!!!!(m!Krqq!*!!#[qq!!3+BfC[E!d!N!!!!@m!!!#$!)Er[3[r[3!Q-!!4D@j
 | 
			
		||||
ME(9NC@C[E'4PFR"KG'J!%@PZBfaeC'9'EfaNCA*3BA4S![r!!!!#!)S!!J#4rl`
 | 
			
		||||
0!*%!!dN!!J#6!*crZ`#5rlS+rlX!'#jMEh*PC'9XEbSU+LS!!!!!!!#3!!!U+LS
 | 
			
		||||
U$3#5!!%a!!!!N`#BrlN+rlN!"!TcC@aP![qk!!!#rl`!!!d!KJ!$8J!!!!!!!2q
 | 
			
		||||
irlIrYJVrZ!!B,Q&cBh*PFR)J+LSU+J!!!!!!!*!!!#SU+LS"rlF!!!,rYJ!!$3#
 | 
			
		||||
(!!*X!!%!T!#Nrl8!N`(rY3!!$!#6!"-!$5"TCfj[FQ8JCA*bEh)!!J!!!J#%!!)
 | 
			
		||||
!P!#9$3#8!!*X!!)!TJ#Qrl6rX`(rY!!!!Iqc!!!#!*8!!J#@!*F0!*B!!dN!!J#
 | 
			
		||||
Q!,lrX[qa!*J+rl)!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Iqa!!!'!*J
 | 
			
		||||
!!rq`!*N!QJVrX!!%#QY[Bf`0!*N!!@d!!!#U!+hrV`VrV`!%#Q0QEf`'!*S!!rq
 | 
			
		||||
Z!*[rV3VrVJ!%#QPZFfJ0!*X!!M3!!!#`!,MrV!#F#[qX!!3+BfC[E!d!R!!"E`!
 | 
			
		||||
!!,3!YrqV#rqV!#B`!"&TEQ0XG@4PCQpXC'9bF'&dD!!4D@jME(9NC8C[E'4PFP"
 | 
			
		||||
KG'J'rkd!!!)!P`!#!*d!RJd!R3!#FJ!!!,m!aJ#I!+!0!*m!!Q`"!!#r!-)!SIq
 | 
			
		||||
U$3#K!!%a!!!![`$#rkN+rkN!"!TbFfad!IqU!!!0!+!!!@m!!!!!!!$rU![rU!!
 | 
			
		||||
Z-!!9G'KPEQ9hCQpXC'9bFQ9QCA*PEQ0P!"9dD'91CAG'EfaNCA*5C@CPFQ9ZBf8
 | 
			
		||||
#!*i!!J#L!+-0!+)!!dN!!J$(!-lrT`#NrkB+rkF!'#jYDA0MFfaMG#SU+LS!!!!
 | 
			
		||||
!!!#3!!!U+LSU$3#N!!&[!!!!a`$+rk8,rk8!,M!!&A4SC@jPGfC[E'4PFR*PCQ9
 | 
			
		||||
bC@jMC3!9G'KP6Q9h4QpXC'9b8Q9QCA*PEQ0P![qQ!!!#!+-!!J#P!+B0!+8!!R)
 | 
			
		||||
!!!$2!0`!T`#S$3#R!!&Y!!!!c`$5!+N-!+N!$3!(Eh"PER0cE!!#!!!0!+J!!Qi
 | 
			
		||||
!!!!!!!!!UJ#V$3#U!!%a!!!!e`$Erk3+rk3!"!T`EQ&Y$3#V!!%a!!!!dJ$Ark-
 | 
			
		||||
+rk-!"!TcC@aP!J#Q!!)!V!#Y$3#X!!*X!!)!h3$Grk,rS3(rSJ!!!IqK!!!#!+d
 | 
			
		||||
!!J#Z!+m0!+i!!Q`!!3$G!0hrS!#`!IqJ!!!-!,!!(`!C)&0dBA*d)'eKDfPZCb"
 | 
			
		||||
dD'8JB@aTBA0PF`!#!!!#!+m!!J#a!,)0!,%!!dN!!J$G!3ArRrqH!,-+rjm!'#j
 | 
			
		||||
MEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!IqH!!!'!,-!!rqG!,3!Y3VrR3!%#QY
 | 
			
		||||
[Bf`0!,3!!@d!!!$K!16rR!VrR!!%#Q&XD@%'!,8!!rqE!,B!Y`VrQ`!%#QPZFfJ
 | 
			
		||||
0!,B!!M3!!!$R!1rrQJ#i#[qD!!3+BfC[E!d!Z!!"E`!!!1X!l[qC#rqC!$3`!"K
 | 
			
		||||
[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&
 | 
			
		||||
dD!B!Y`!$rjJ!ZIqA#[qB!!3+G'mJ)!d!Z3!#EJ!!!2)!r`#k!,X0!,S!!M3!!!$
 | 
			
		||||
i!2rrPJ#m#[q@!!3+CQPXC3d![!!"E3!!!2X!rJ#p$!#p!"-!$@p`C@jcFfaMEfj
 | 
			
		||||
Q,QJ!!J!!$3#l!!)d!!!!mJ$irj8![JVrP3!%#Q0QEf`0!,i!!@m!!!$f!2IrP![
 | 
			
		||||
rP!!@-!!*G'KPE@9`BA4S!!PdD'90C9"KG'J'rjF!!!)!XJ!#!,m!`!d![`!#E!!
 | 
			
		||||
#!3B""[q6rj)"rj-!!!(rNJ!!!J$!!!)!`3$#$3$"!!*b!!!""J%4!--!a!d!``!
 | 
			
		||||
#BJ!!!3B"$3$&!-B0!-8!!@m!!!%'!3RrN3[rN3!N-!!3Bh*jF(4[CQpXC'9bF'&
 | 
			
		||||
dD!!3Bh*jF(4[4QpXC'9b8'&dD!d!aJ!"E3!!!3N"$!$($!$(!!X!"6TKFfia!!)
 | 
			
		||||
!!!d!a!!"E`!!!!!!!2q3!![rN!!!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)!`J!
 | 
			
		||||
#!-J!b3d!b!!$53!#!4)"22q2rii!bJVrM`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!
 | 
			
		||||
!!'jeE'`"rii!!!B!bJ!$rid!b`$-#[q0!!3+DfpME!d!b`!"E3!!!4B"'Iq-#[q
 | 
			
		||||
-!!3+B@aTB3B!c!!$riX!c3$1#[q,!!3+D@jcD!d!c3!#0!!!!4`"*2q+!-m+riS
 | 
			
		||||
!"!TMCQpX$3$2!!&[!!!")!%MriN,riN!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9
 | 
			
		||||
bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J$1!!2rL!$3riF+riJ!"!T
 | 
			
		||||
dEb!J$3$3!!*Z!!!"*`%f!0%!dJd!d3!#0!!!!5m"0[q'!0-+riB!"!TQD@aP$3$
 | 
			
		||||
6!!&Y!!!"-J%e!03-!03!$!!'BA0Z-5jS!!)!!!d!dJ!#0!!!!5F",rq&!08+ri8
 | 
			
		||||
!"!TMCQpX$3$9!!&[!!!"+`%Zri3,ri3!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!E
 | 
			
		||||
rK`!!!J$*!!)!eJ$A$3$@!!0*!!)"23&Rri2rJJ$B#[q$!"JZBfpbC@0bC@`U+LS
 | 
			
		||||
U!!!!!!!!N!!!ER9XE!(rJJ!!"J$B!!2rJ3$C!0S+ri%!"!TVEf0X$3$C!!&Y!!!
 | 
			
		||||
"33&%ri!+ri!!"!TKE'PK"J$D!!2rI`$E!0`+rhm!"!TTER0S$3$E!!)d!!!"4`&
 | 
			
		||||
2rhi!h3VrIJ!%#Q0QEf`0!0d!!@m!!!&,!8lrI3[rI3!d-!!BEh"PER0cE'PZBfa
 | 
			
		||||
eC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!0`!!rpm!0l
 | 
			
		||||
rH`VrI!!%#R4[)#!0!0i!!Qi!!!&5!@%!h`$J$3$I!!)d!!!"@J&KrhS!i3VrHJ!
 | 
			
		||||
%#QCTE'80!1%!!@d!!!&G!@!!iJ`!iJ!3!!TKFfiaAfeKBbjS!!)!!!d!i!!#0!!
 | 
			
		||||
!!9)"@[pj!1-+rhN!"!TMCQpX$3$M!!&[!!!"9J&CrhJ,rhJ!&$!!#(4PEA"`BA4
 | 
			
		||||
S!!KdC@e`8'&dD!ErH`!!!J$A!!)!j!$P$3$N!!*X!!)"D!&SrhIrGJ(rG`!!!Ip
 | 
			
		||||
f!!!#!18!!J$Q!1F0!1B!!R)!!!&S!A-!k!$T$3$S!!*L!!!"D!&[!1S!k`d!kJ!
 | 
			
		||||
"E`!!!@J"Drpe#rpe!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*
 | 
			
		||||
3BA4S$3$V!!&Y!!!"D`&Z!1`-!1`!#J!%1Q*TE`!#!!!0!1N!!@m!!!!!!!$rG![
 | 
			
		||||
rG!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J$R!!)!l3$Z$3$Y!!0*!!)"G!'Hrh2
 | 
			
		||||
rFJ$[#[pc!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(rFJ!!"J$[!!2rF3$
 | 
			
		||||
`!2%+rh%!"!TVEf0X$3$`!!&Y!!!"H!&lrh!+rh!!"!TKE'PK"J$a!!2rE`$b!2-
 | 
			
		||||
+rfm!"!TTER0S$3$b!!)d!!!"IJ''rfi!p!VrEJ!%#Q0QEf`0!23!!@m!!!'#!BA
 | 
			
		||||
rE3[rE3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9
 | 
			
		||||
NC8C[E'4PFP"KG'J'!2-!!rpX!2ArD`VrE!!%#R4[)#!0!28!!Qi!!!'*!CJ!pJ$
 | 
			
		||||
h$3$f!!)d!!!"N3'BrfS!q!VrDJ!%#QCTE'80!2J!!@d!!!'8!CF!q3`!q3!,!!9
 | 
			
		||||
LD@mZD!!#!!!0!2F!!M3!!!'*!C(rD3$k#[pT!!3+BfC[E!d!qJ!"E`!!!Bd"N!$
 | 
			
		||||
rD![rD!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[pV!!!#!1i!!J$l!2`0!2X!!Q`
 | 
			
		||||
!!J'I!CrrCrpQ!IpR!!!"rfB!!!)!r!!#!2d!rJd!r3!#FJ!!!Cm"UJ$r!3!0!2m
 | 
			
		||||
!!Q)!!!'I!DB"!3%#$3%"!!&[!!!"R`'Lrf8,rf8!*$!!%'0bHA"dEfC[E'4PFR"
 | 
			
		||||
KG'J!%'0bHA"dEdC[E'4PFP"KG'J0!3)!!@d!!!'L!D8"!``"!`!*!!-kBQB!!J!
 | 
			
		||||
!$3%!!!&[!!!!!!!!rf3,rf3!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)!rJ!#!33
 | 
			
		||||
""3d""!!$53!#!DX"eIpMrf)""JVrB`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'j
 | 
			
		||||
eE'`"rf)!!!B""J!$rf%""`%)#[pK!!3+DfpME!d""`!"E3!!!Dm"X[pJ#[pJ!!3
 | 
			
		||||
+B@aTB3B"#!!$rem"#3%+#[pI!!3+D@jcD!d"#3!#0!!!!E8"[IpH!3X+rei!"!T
 | 
			
		||||
MCQpX$3%,!!&[!!!"Z3'mred,red!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&
 | 
			
		||||
dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J%+!!2rA!%-reX+re`!"!TdEb!
 | 
			
		||||
J$3%-!!*Z!!!"`!(2!3d"$Jd"$3!#0!!!!FJ"crpD!3m+reS!"!TQD@aP$3%2!!&
 | 
			
		||||
Y!!!"b`(1!4!-!4!!%!!+BQa[GfCTFfJZD!!#!!!0!3i!!M3!!!(!!FMr@3%4#[p
 | 
			
		||||
C!!3+BfC[E!d"%3!"E`!!!F3"arpB#rpB!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J
 | 
			
		||||
'reX!!!)""3!#!4)"%`d"%J!#E!!#!GB"e[pAreB"reF!!!(r9J!!!J%6!!)"&!%
 | 
			
		||||
9$3%8!!*b!!!"eJ(K!4B"&`d"&J!#BJ!!!GB"h3%B!4N0!4J!!@m!!!(@!GRr93[
 | 
			
		||||
r93!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d"'3!"E3!
 | 
			
		||||
!!GN"h!%D$!%D!!N!!cTLEJ!#!!!0!4F!!@m!!!!!!!$r9![r9!!8-!!)G'9YF("
 | 
			
		||||
KG'J!#(4PEA"3BA4S!J%9!!)"'`%F$3%E!!0*!!)"iJ)-re2r8J%G#[p6!"JZBfp
 | 
			
		||||
bC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(r8J!!"J%G!!2r83%H!4m+re%!"!TVEf0
 | 
			
		||||
X$3%H!!&Y!!!"jJ(Tre!+re!!"!TKE'PK"J%I!!2r6`%J!5%+rdm!"!TTER0S$3%
 | 
			
		||||
J!!)d!!!"l!(drdi")JVr6J!%#Q0QEf`0!5)!!@m!!!(`!I2r63[r63!d-!!BEh"
 | 
			
		||||
PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J
 | 
			
		||||
'!5%!!rp-!52r5`Vr6!!%#R4[)#!0!5-!!Qi!!!(h!JB"*!%P$3%N!!)d!!!"r`)
 | 
			
		||||
'rdS"*JVr5J!%#QCTE'80!5B!!@d!!!)#!J8"*``"*`!+!!4LELjS!!)!!!d"*3!
 | 
			
		||||
#0!!!!IF"rrp*!5J+rdN!"!TMCQpX$3%S!!&[!!!"q`(qrdJ,rdJ!&$!!#(4PEA"
 | 
			
		||||
`BA4S!!KdC@e`8'&dD!Er5`!!!J%F!!)"+3%U$3%T!!*X!!)#$3)0rdIr4J(r4`!
 | 
			
		||||
!!Ip'!!!#!5S!!J%V!5`0!5X!!R)!!!)0!KJ",3%Z$3%Y!!*L!!!#$3)8!5m"-!d
 | 
			
		||||
",`!"E`!!!Jd#%2p&#rp&!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'Efa
 | 
			
		||||
NCA*3BA4S$3%`!!&Y!!!#%!)6!6%-!6%!$3!(1Q*eCQCPFJ!#!!!0!5i!!@m!!!!
 | 
			
		||||
!!!$r4![r4!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J%X!!)"-J%c$3%b!!0*!!)
 | 
			
		||||
#'3*$rd2r3J%d#[p$!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(r3J!!"J%
 | 
			
		||||
d!!2r33%e!6B+rd%!"!TVEf0X$3%e!!&Y!!!#(3)Jrd!+rd!!"!TKE'PK"J%f!!2
 | 
			
		||||
r2`%h!6J+rcm!"!TTER0S$3%h!!)d!!!#)`)Vrci"13Vr2J!%#Q0QEf`0!6N!!@m
 | 
			
		||||
!!!)R!LVr23[r23!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0
 | 
			
		||||
-5@jME(9NC8C[E'4PFP"KG'J'!6J!!rmm!6Vr1`Vr2!!%#R4[)#!0!6S!!Qi!!!)
 | 
			
		||||
Z!Md"1`%m$3%l!!)d!!!#0J)prcS"23Vr1J!%#QCTE'80!6d!!@d!!!)j!M`"2J`
 | 
			
		||||
"2J!1!!KLG@CQCA)ZD!!#!!!0!6`!!M3!!!)Z!MEr13%r#[mj!!3+BfC[E!d"2`!
 | 
			
		||||
"E`!!!M)#0Imi#rmi!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'rcX!!!)"-`!#!8!
 | 
			
		||||
"33d"3!!#E!!#!N3#42mhrcB"rcF!!!(r0J!!!J&"!!)"3J&$$3&#!!*b!!!#4!*
 | 
			
		||||
2!83"43d"4!!#BJ!!!N3#5`&'!8F0!8B!!@m!!!*%!NIr03[r03!N-!!3Bh*jF(4
 | 
			
		||||
[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d"4`!"E3!!!NF#5J&)$!&)!!X
 | 
			
		||||
!"6TMBA0d!!)!!!d"43!"E`!!!!!!!2md#rmd!"3`!!KdC@e`F'&dD!!)G'9YF&"
 | 
			
		||||
KG'J#!8-!!J&*!8S0!8N!!dN!!J*3!RVr-rmb!8X+rc-!'#jMEh*PBh*PE#SU+LS
 | 
			
		||||
!!!!!!!#3!!"ZG@aX!Imb!!!'!8X!!rma!8`"63Vr-3!%#QY[Bf`0!8`!!@d!!!*
 | 
			
		||||
8!PIr-!Vr-!!%#Q&XD@%'!8d!!rm[!8i"6`Vr,`!%#QPZFfJ0!8i!!M3!!!*D!Q,
 | 
			
		||||
r,J&3#[mZ!!3+BfC[E!d"8!!"E`!!!Pi#BImY#rmY!$3`!"K[F'9ZFh0XD@jME(9
 | 
			
		||||
NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B"6`!$rb`"8Im
 | 
			
		||||
V#[mX!!3+G'mJ)!d"83!#EJ!!!Q8#G!&5!9-0!9)!!M3!!!*Y!R6r+J&8#[mU!!3
 | 
			
		||||
+CQPXC3d"9!!"E3!!!R!#F`&9$!&9!!`!"Q0KFh3ZD!!#!!!0!9-!!M3!!!*P!Qh
 | 
			
		||||
r+3&@#[mT!!3+BfC[E!d"9J!"E`!!!QN#E2mS#rmS!"3`!!KdC@e`F'&dD!!)G'9
 | 
			
		||||
YF&"KG'J'rbX!!!)"5J!#!9F"@!d"9`!#E!!#!RX#HrmRrbB"rbF!!!(r*J!!!J&
 | 
			
		||||
B!!)"@3&D$3&C!!*b!!!#H`+'!9X"A!d"@`!#BJ!!!RX#JJ&G!9i0!9d!!@m!!!*
 | 
			
		||||
l!Rlr*3[r*3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d
 | 
			
		||||
"AJ!"E3!!!Ri#J3&I$!&I!!X!"6TMEfe`!!)!!!d"A!!"E`!!!!!!!2mN#rmN!"3
 | 
			
		||||
`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!9S!!J&J!@%0!@!!!dN!!J+(!V(r)rmL!@)
 | 
			
		||||
+rb-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!ImL!!!'!@)!!rmK!@-"C!V
 | 
			
		||||
r)3!%#QY[Bf`0!@-!!@d!!!+,!Slr)!Vr)!!%#Q&XD@%'!@3!!rmI!@8"CJVr(`!
 | 
			
		||||
%#QPZFfJ0!@8!!M3!!!+4!TRr(J&R#[mH!!3+BfC[E!d"C`!"E`!!!T8#Q2mG#rm
 | 
			
		||||
G!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4Qp
 | 
			
		||||
XC'9b8'&dD!B"CJ!$ra`"D2mE#[mF!!3+G'mJ)!d"D!!#EJ!!!T`#U`&T!@S0!@N
 | 
			
		||||
!!M3!!!+N!U[r'J&V#[mD!!3+CQPXC3d"D`!"E3!!!UF#UJ&X$!&X!!`!"Q0[EA!
 | 
			
		||||
ZD!!#!!!0!@S!!M3!!!+F!U6r'3&Y#[mC!!3+BfC[E!d"E3!"E`!!!U!#SrmB#rm
 | 
			
		||||
B!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'raX!!!)"B3!#!@i"E`d"EJ!#E!!#!V)
 | 
			
		||||
#X[mAraB"raF!!!(r&J!!!J&[!!)"F!&a$3&`!!*b!!!#XJ+p!A)"F`d"FJ!#BJ!
 | 
			
		||||
!!V)#Z3&d!A80!A3!!@m!!!+b!VAr&3[r&3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!
 | 
			
		||||
3Bh*jF(4[4QpXC'9b8'&dD!d"G3!"E3!!!V8#Z!&f$!&f!!X!"6TMEfjQ!!)!!!d
 | 
			
		||||
"F`!"E`!!!!!!!2m8#rm8!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!A%!!J&h!AJ
 | 
			
		||||
0!AF!!dN!!J+q!ZMr%rm5!AN+ra-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@a
 | 
			
		||||
X!Im5!!!'!AN!!rm4!AS"H`Vr%3!%#QY[Bf`0!AS!!@d!!!,#!XAr%!Vr%!!%#Q&
 | 
			
		||||
XD@%'!AX!!rm2!A`"I3Vr$`!%#QPZFfJ0!A`!!M3!!!,)!Y$r$J&q#[m1!!3+BfC
 | 
			
		||||
[E!d"IJ!"E`!!!X`#crm0#rm0!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J
 | 
			
		||||
!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B"I3!$r``"Irm,#[m-!!3+G'mJ)!d
 | 
			
		||||
"I`!#EJ!!!Y-#iJ'!!B%0!B!!!M3!!!,E!Z,r#J'##[m+!!3+CQPXC3d"JJ!"E3!
 | 
			
		||||
!!Yi#i3'$$!'$!!`!"Q0[EQBZD!!#!!!0!B%!!M3!!!,6!Y[r#3'%#[m*!!3+BfC
 | 
			
		||||
[E!d"K!!"E`!!!YF#f[m)#rm)!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'r`X!!!)
 | 
			
		||||
"H!!#!B8"KJd"K3!#E!!#!ZN#kIm(r`B"r`F!!!(r"J!!!J''!!)"K`')$3'(!!*
 | 
			
		||||
b!!!#k3,d!BN"LJd"L3!#BJ!!!ZN#m!',!B`0!BX!!@m!!!,T!Zcr"3[r"3!N-!!
 | 
			
		||||
3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d"M!!"E3!!!Z`#l`'
 | 
			
		||||
0$!'0!!S!"$TNCA-!!J!!$3'+!!&[!!!!!!!!r`3,r`3!&$!!#(4PEA"`BA4S!!K
 | 
			
		||||
dC@e`8'&dD!)"L!!#!Bi"M`d"MJ!$53!#![8$(rm$r`)"N!!+r`-!'#jMEh*PBh*
 | 
			
		||||
PE#SU+LS!!!!!!!#3!!"ZG@aX!Im#!!!'!C!!!!2r!3'4!C)+r`%!"!TVEf0X$3'
 | 
			
		||||
4!!&Y!!!#q3,mr`!+r`!!"!TKE'PK"J'5!!2qr`'6!C3+r[m!"!TTER0S$3'6!!)
 | 
			
		||||
d!!!#r`-(r[i"P3VqrJ!%#Q0QEf`0!C8!!@m!!!-$!`Eqr3[qr3!d-!!BEh"PER0
 | 
			
		||||
cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!C3
 | 
			
		||||
!!rlm!CEqq`Vqr!!%#R4[)#!0!CB!!Qi!!!-+!aN"P`'B$3'A!!)d!!!$%J-Cr[S
 | 
			
		||||
"Q3VqqJ!%#QCTE'80!CN!!@d!!!-9!aJ"QJ`"QJ!,!!9NCA-ZD!!#!!!0!CJ!!M3
 | 
			
		||||
!!!-+!a,qq3'E#[lj!!3+BfC[E!d"Q`!"E`!!!`i$%Ili#rli!"3`!!KdC@e`F'&
 | 
			
		||||
dD!!)G'9YF&"KG'J'r[X!!!)"M`!#!C`"R3d"R!!#E!!#!b!$)2lhr[B"r[F!!!(
 | 
			
		||||
qpJ!!!J'G!!)"RJ'I$3'H!!*b!!!$)!-V!D!"S3d"S!!#BJ!!!b!$*`'L!D-0!D)
 | 
			
		||||
!!@m!!!-J!b2qp3[qp3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9
 | 
			
		||||
b8'&dD!d"S`!"E3!!!b-$*J'N$!'N!!N!!cTND!!#!!!0!D%!!@m!!!!!!!$qp![
 | 
			
		||||
qp!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J'I!!)"T3'Q$3'P!!0*!!)$,!0@r[2
 | 
			
		||||
qmJ'R#[lc!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(qmJ!!"J'R!!2qm3'
 | 
			
		||||
S!DN+r[%!"!TVEf0X$3'S!!&Y!!!$-!-cr[!+r[!!"!TKE'PK"J'T!!2ql`'U!DX
 | 
			
		||||
+rZm!"!TTER0S$3'U!!)d!!!$0J-qrZi"V!VqlJ!%#Q0QEf`0!D`!!@m!!!-k!ch
 | 
			
		||||
ql3[ql3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9
 | 
			
		||||
NC8C[E'4PFP"KG'J'!DX!!rlX!Dhqk`Vql!!%#R4[)#!0!Dd!!Qi!!!0"!e!"VJ'
 | 
			
		||||
[$3'Z!!)d!!!$5303rZS"X!VqkJ!%#QCTE'80!E!!!@d!!!0-!dm"X3`"X3!+!!4
 | 
			
		||||
ND#jS!!)!!!d"V`!#0!!!!d%$5IlT!E)+rZN!"!TMCQpX$3'b!!&[!!!$430)rZJ
 | 
			
		||||
,rZJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eqk`!!!J'Q!!)"X`'d$3'c!!*X!!)
 | 
			
		||||
$9`0ArZIqjJ(qj`!!!IlQ!!!#!E3!!J'e!EB0!E8!!R)!!!0A!f)"Y`'i$3'h!!*
 | 
			
		||||
L!!!$9`0H!EN"ZJd"Z3!"E`!!!eF$@[lP#rlP!#3`!""MFRP`G'pQEfaNCA*`BA4
 | 
			
		||||
S!""MFRP`G'p'EfaNCA*3BA4S$3'k!!&Y!!!$@J0G!EX-!EX!#J!%1Q4cB3!#!!!
 | 
			
		||||
0!EJ!!@m!!!!!!!$qj![qj!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J'f!!)"[!'
 | 
			
		||||
p$3'm!!0*!!)$B`10rZ2qiJ'q#[lM!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9
 | 
			
		||||
XE!(qiJ!!"J'q!!2qi3'r!F!+rZ%!"!TVEf0X$3'r!!&Y!!!$C`0UrZ!+rZ!!"!T
 | 
			
		||||
KE'PK"J(!!!2qh`("!F)+rYm!"!TTER0S$3("!!)d!!!$E30erYi"``VqhJ!%#Q0
 | 
			
		||||
QEf`0!F-!!@m!!!0a!h6qh3[qh3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4
 | 
			
		||||
S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!F)!!rlF!F6qf`Vqh!!%#R4[)#!
 | 
			
		||||
0!F3!!Qi!!!0i!iF"a3('$3(&!!)d!!!$J!1(rYS"a`VqfJ!%#QCTE'80!FF!!@d
 | 
			
		||||
!!!1$!iB"b!`"b!!,!!9NFf%ZD!!#!!!0!FB!!M3!!!0i!i$qf3(*#[lC!!3+BfC
 | 
			
		||||
[E!d"b3!"E`!!!h`$IrlB#rlB!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'rYX!!!)
 | 
			
		||||
"[3!#!FS"b`d"bJ!#E!!#!ii$M[lArYB"rYF!!!(qeJ!!!J(,!!)"c!(0$3(-!!*
 | 
			
		||||
b!!!$MJ1C!Fi"c`d"cJ!#BJ!!!ii$P3(3!G%0!G!!!@m!!!11!j(qe3[qe3!N-!!
 | 
			
		||||
3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d"d3!"E3!!!j%$P!(
 | 
			
		||||
5$!(5!!S!"$TPFR)!!J!!$3(2!!&[!!!!!!!!rY3,rY3!&$!!#(4PEA"`BA4S!!K
 | 
			
		||||
dC@e`8'&dD!)"c3!#!G-"e!d"d`!$53!#!jS$a2l6rY)"e3Vqd`!B,Q0[FQ9MFQ9
 | 
			
		||||
X+LSU+J!!!!!!!*!!!'jeE'`"rY)!!!B"e3!$rY%"eJ(A#[l4!!3+DfpME!d"eJ!
 | 
			
		||||
"E3!!!ji$SIl3#[l3!!3+B@aTB3B"e`!$rXm"f!(C#[l2!!3+D@jcD!d"f!!#0!!
 | 
			
		||||
!!k3$V2l1!GS+rXi!"!TMCQpX$3(D!!&[!!!$U!1VrXd,rXd!0$!!''p`C@jcFfa
 | 
			
		||||
TEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J(C!!2
 | 
			
		||||
qc!(ErXX+rX`!"!TdEb!J$3(E!!*Z!!!$V`1q!G`"h3d"h!!#0!!!!lF$[[l+!Gi
 | 
			
		||||
+rXS!"!TQD@aP$3(H!!&Y!!!$ZJ1p!Gm-!Gm!#`!&CA*b,QJ!!J!!$3(G!!)d!!!
 | 
			
		||||
$V`1hrXN"i!Vqb3!%#Q0QEf`0!H!!!@m!!!1c!lEqb![qb!!8-!!)G'9YF("KG'J
 | 
			
		||||
!#(4PEA"3BA4S"[l,!!!#!G3!!J(K!H)0!H%!!Q`!!J2&!mAqarl'!Il(!!!"rXB
 | 
			
		||||
!!!)"iJ!#!H-"j!d"i`!#FJ!!!m8$d!(P!HB0!H8!!Q)!!!2&!m`"j`(S$3(R!!&
 | 
			
		||||
[!!!$a32)rX8,rX8!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0bHA"dEdC[E'4PFP"
 | 
			
		||||
KG'J0!HJ!!@d!!!2)!mX"k3`"k3!+!!3kCAC`!!)!!!d"jJ!"E`!!!!!!!2l%#rl
 | 
			
		||||
%!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!H3!!J(U!HX0!HS!!dN!!J24!r[q`rl
 | 
			
		||||
#!H`+rX-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Il#!!!'!H`!!rl"!Hd
 | 
			
		||||
"lJVq`3!%#QY[Bf`0!Hd!!@d!!!29!pMq`!Vq`!!%#Q&XD@%'!Hi!!rkr!Hm"m!V
 | 
			
		||||
q[`!%#QPZFfJ0!Hm!!M3!!!2E!q2q[J(a#[kq!!3+BfC[E!d"m3!"E`!!!pm$i[k
 | 
			
		||||
p#rkp!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4
 | 
			
		||||
P4QpXC'9b8'&dD!B"m!!$rV`"m[kl#[km!!3+G'mJ)!d"mJ!#EJ!!!qB$p3(c!I3
 | 
			
		||||
0!I-!!M3!!!2Z!rAqZJ(e#[kk!!3+CQPXC3d"p3!"E3!!!r%$p!(f$!(f!!X!"@9
 | 
			
		||||
fF#jS!!)!!!d"p!!#0!!!!qB$l[kj!IF+rVN!"!TMCQpX$3(h!!&[!!!$kJ2YrVJ
 | 
			
		||||
,rVJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!EqZ`!!!J(V!!)"q!(j$3(i!!*X!!)
 | 
			
		||||
$r!2mrVIqYJ(qY`!!!Ikf!!!#!IN!!J(k!IX0!IS!!R)!!!2m"!F"r!(p$3(m!!*
 | 
			
		||||
L!!!$r!3$!Ii"r`d"rJ!"E`!!!r`$rrke#rke!#3`!""MFRP`G'pQEfaNCA*`BA4
 | 
			
		||||
S!""MFRP`G'p'EfaNCA*3BA4S$3(r!!&Y!!!$r`3#!J!-!J!!#`!&1QKYB@-!!J!
 | 
			
		||||
!$3(p!!&[!!!!!!!!rV3,rV3!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)"q`!#!J%
 | 
			
		||||
#!Jd#!3!$53!#"!J%-[kcrV)#!`VqX`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'j
 | 
			
		||||
eE'`"rV)!!!B#!`!$rV%#"!)&#[ka!!3+DfpME!d#"!!"E3!!"!`%$rk`#[k`!!3
 | 
			
		||||
+B@aTB3B#"3!$rUm#"J)(#[k[!!3+D@jcD!d#"J!#0!!!"")%'[kZ!JJ+rUi!"!T
 | 
			
		||||
MCQpX$3))!!&[!!!%&J3CrUd,rUd!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&
 | 
			
		||||
dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J)(!!2qV!)*rUX+rU`!"!TdEb!
 | 
			
		||||
J$3)*!!*Z!!!%(33X!JS##`d##J!#0!!!"#8%,2kU!J`+rUS!"!TQD@aP$3)-!!&
 | 
			
		||||
Y!!!%+!3V!Jd-!Jd!$!!'D'eKBbjS!!)!!!d##`!#0!!!""d%*IkT!Ji+rUN!"!T
 | 
			
		||||
MCQpX$3)1!!&[!!!%)33NrUJ,rUJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!EqU`!
 | 
			
		||||
!!J)#!!)#$`)3$3)2!!*X!!)%-`3crUIqTJ(qT`!!!IkQ!!!#!K!!!J)4!K)0!K%
 | 
			
		||||
!!R)!!!3c"$i#%`)8$3)6!!*L!!!%-`3k!K8#&Jd#&3!"E`!!"$-%0[kP#rkP!#3
 | 
			
		||||
`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3)@!!&Y!!!%0J3
 | 
			
		||||
j!KF-!KF!#`!&1QPNC@%!!J!!$3)8!!&[!!!!!!!!rU3,rU3!&$!!#(4PEA"`BA4
 | 
			
		||||
S!!KdC@e`8'&dD!)#%J!#!KJ#'3d#'!!$53!#"$m%DIkMrU)#'JVqS`!B,Q0[FQ9
 | 
			
		||||
MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rU)!!!B#'J!$rU%#'`)F#[kK!!3+DfpME!d
 | 
			
		||||
#'`!"E3!!"%-%4[kJ#[kJ!!3+B@aTB3B#(!!$rTm#(3)H#[kI!!3+D@jcD!d#(3!
 | 
			
		||||
#0!!!"%N%8IkH!Km+rTi!"!TMCQpX$3)I!!&[!!!%6343rTd,rTd!0$!!''p`C@j
 | 
			
		||||
cFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J)
 | 
			
		||||
H!!2qR!)JrTX+rT`!"!TdEb!J$3)J!!*Z!!!%9!4M!L%#)Jd#)3!#0!!!"&`%Brk
 | 
			
		||||
D!L-+rTS!"!TQD@aP$3)M!!&Y!!!%A`4L!L3-!L3!$!!'D@4PB5jS!!)!!!d#)J!
 | 
			
		||||
#0!!!"&3%A2kC!L8+rTN!"!TMCQpX$3)P!!&[!!!%@!4ErTJ,rTJ!&$!!#(4PEA"
 | 
			
		||||
`BA4S!!KdC@e`8'&dD!EqQ`!!!J)C!!)#*J)R$3)Q!!*X!!)%DJ4UrTIqPJ(qP`!
 | 
			
		||||
!!Ik@!!!#!LF!!J)S!LN0!LJ!!R)!!!4U"(8#+J)V$3)U!!*L!!!%DJ4a!L`#,3d
 | 
			
		||||
#,!!"E`!!"'S%EIk9#rk9!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'Efa
 | 
			
		||||
NCA*3BA4S$3)Y!!&Y!!!%E34`!Li-!Li!$!!'1QaSBA0S!!)!!!d#+`!"E`!!!!!
 | 
			
		||||
!!2k8#rk8!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!LN!!J)[!M!0!Lm!!dN!!J4
 | 
			
		||||
f"+$qNrk5!M%+rT-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Ik5!!!'!M%
 | 
			
		||||
!!rk4!M)#-`VqN3!%#QY[Bf`0!M)!!@d!!!4k"(hqN!!+rT!!!!3+B@aTB3B#-`!
 | 
			
		||||
$rSm#0!)e#[k2!!3+D@jcD!d#0!!#0!!!")!%L2k1!MB+rSi!"!TMCQpX$3)f!!&
 | 
			
		||||
[!!!%K!5(rSd,rSd!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP0
 | 
			
		||||
66%PZBfaeC'9'EfaNCA*3BA4S"J)e!!2qM!)hrSX+rS`!"!TdEb!J$3)h!!*Z!!!
 | 
			
		||||
%L`5D!MJ#13d#1!!#0!!!"*-%Q[k+!MS+rSS!"!TQD@aP$3)k!!&Y!!!%PJ5C!MX
 | 
			
		||||
-!MX!$3!(E'KKFfJZD!!#!!!0!MN!!M3!!!5,"*2qL3)m#[k*!!3+BfC[E!d#2!!
 | 
			
		||||
"E`!!")m%N[k)#rk)!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'rSX!!!)#-!!#!Md
 | 
			
		||||
#2Jd#23!#E!!#"+%%SIk(rSB"rSF!!!(qKJ!!!J)q!!)#2`*!$3)r!!*b!!!%S35
 | 
			
		||||
X!N%#3Jd#33!#BJ!!"+%%U!*$!N30!N-!!@m!!!5K"+6qK3[qK3!N-!!3Bh*jF(4
 | 
			
		||||
[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d#4!!"E3!!"+3%T`*&$!*&!!S
 | 
			
		||||
!"$TYC$)!!J!!$3*#!!&[!!!!!!!!rS3,rS3!&$!!#(4PEA"`BA4S!!KdC@e`8'&
 | 
			
		||||
dD!)#3!!#!NB#4`d#4J!$53!#"+d%erk$rS)#5!VqJ`!B,Q0[FQ9MFQ9X+LSU+J!
 | 
			
		||||
!!!!!!*!!!'jeE'`"rS)!!!B#5!!$rS%#53*+#[k"!!3+DfpME!d#53!"E3!!",%
 | 
			
		||||
%Y2k!#[k!!!3+B@aTB3B#5J!$rRm#5`*-#[jr!!3+D@jcD!d#5`!#0!!!",F%[rj
 | 
			
		||||
q!Nd+rRi!"!TMCQpX$3*0!!&[!!!%Z`5qrRd,rRd!0$!!''p`C@jcFfaTEQ0XG@4
 | 
			
		||||
PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J*-!!2qI!*1rRX
 | 
			
		||||
+rR`!"!TdEb!J$3*1!!*Z!!!%`J64!Nm#8!d#6`!#0!!!"-S%dIjk!P%+rRS!"!T
 | 
			
		||||
QD@aP$3*4!!&Y!!!%c363!P)-!P)!#`!&E@3b,QJ!!J!!$3*3!!)d!!!%`J6+rRN
 | 
			
		||||
#8`VqH3!%#Q0QEf`0!P-!!@m!!!6'"-RqH![qH!!8-!!)G'9YF("KG'J!#(4PEA"
 | 
			
		||||
3BA4S"[jl!!!#!NF!!J*8!P80!P3!!Q`!!J6B"0MqGrjf!Ijh!!!"rRB!!!)#93!
 | 
			
		||||
#!PB#9`d#9J!#FJ!!"0J%i`*B!PN0!PJ!!Q)!!!6B"0m#@J*E$3*D!!&[!!!%f!6
 | 
			
		||||
ErR8,rR8!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0bHA"dEdC[E'4PFP"KG'J0!PX
 | 
			
		||||
!!@d!!!6E"0i#A!`#A!!+!!3kE@3e!!)!!!d#@3!"E`!!!!!!!2jd#rjd!"3`!!K
 | 
			
		||||
dC@e`F'&dD!!)G'9YF&"KG'J#!PF!!J*G!Pi0!Pd!!dN!!J6N"3lqFrjb!Pm+rR-
 | 
			
		||||
!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Ijb!!!'!Pm!!rja!Q!#B3VqF3!
 | 
			
		||||
%#QY[Bf`0!Q!!!@d!!!6S"1[qF!VqF!!%#Q&XD@%'!Q%!!rj[!Q)#B`VqE`!%#QP
 | 
			
		||||
ZFfJ0!Q)!!M3!!!6Z"2EqEJ*N#[jZ!!3+BfC[E!d#C!!"E`!!"2)%pIjY#rjY!$3
 | 
			
		||||
`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9
 | 
			
		||||
b8'&dD!B#B`!$rQ`#CIjV#[jX!!3+G'mJ)!d#C3!#EJ!!"2N&#!*Q!QF0!QB!!M3
 | 
			
		||||
!!!8""3MqDJ*S#[jU!!3+CQPXC3d#D!!"E3!!"33&"`*T$!*T!!X!"@eN05jS!!)
 | 
			
		||||
!!!d#C`!#0!!!"2N&!IjT!QS+rQN!"!TMCQpX$3*U!!&[!!!%r38!rQJ,rQJ!&$!
 | 
			
		||||
!#(4PEA"`BA4S!!KdC@e`8'&dD!EqD`!!!J*H!!)#D`*X$3*V!!*X!!)&$`82rQI
 | 
			
		||||
qCJ(qC`!!!IjQ!!!#!Q`!!J*Y!Qi0!Qd!!R)!!!82"4S#E`*`$3*[!!*L!!!&$`8
 | 
			
		||||
@!R%#FJd#F3!"E`!!"3m&%[jP#rjP!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP
 | 
			
		||||
`G'p'EfaNCA*3BA4S$3*b!!&Y!!!&%J89!R--!R-!#`!&1QeNBc)!!J!!$3*`!!&
 | 
			
		||||
[!!!!!!!!rQ3,rQ3!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)#EJ!#!R3#G3d#G!!
 | 
			
		||||
$53!#"4X&4IjMrQ)#GJVqB`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rQ)
 | 
			
		||||
!!!B#GJ!$rQ%#G`*i#[jK!!3+DfpME!d#G`!"E3!!"4m&)[jJ#[jJ!!3+B@aTB3B
 | 
			
		||||
#H!!$rPm#H3*k#[jI!!3+D@jcD!d#H3!#0!!!"58&,IjH!RX+rPi!"!TMCQpX$3*
 | 
			
		||||
l!!&[!!!&+38XrPd,rPd!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"
 | 
			
		||||
PEP066%PZBfaeC'9'EfaNCA*3BA4S"J*k!!2qA!*mrPX+rP`!"!TdEb!J$3*m!!*
 | 
			
		||||
Z!!!&-!8r!Rd#IJd#I3!#0!!!"6J&2rjD!Rm+rPS!"!TQD@aP$3*r!!&Y!!!&1`8
 | 
			
		||||
q!S!-!S!!$!!'E@4M-LjS!!)!!!d#IJ!#0!!!"6!&12jC!S%+rPN!"!TMCQpX$3+
 | 
			
		||||
"!!&[!!!&0!8hrPJ,rPJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eq@`!!!J*e!!)
 | 
			
		||||
#JJ+$$3+#!!*X!!)&4J9'rPIq9J(q9`!!!Ij@!!!#!S-!!J+%!S80!S3!!R)!!!9
 | 
			
		||||
'"9%#KJ+($3+'!!*L!!!&4J90!SJ#L3d#L!!"E`!!"8B&5Ij9#rj9!#3`!""MFRP
 | 
			
		||||
`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3+*!!&Y!!!&539-!SS-!SS
 | 
			
		||||
!$J!)1QpLDQ9MG(-!!J!!$3+(!!&[!!!!!!!!rP3,rP3!&$!!#(4PEA"`BA4S!!K
 | 
			
		||||
dC@e`8'&dD!)#K3!#!SX#M!d#L`!$53!#"9)&I2j6rP)#M3Vq8`!B,Q0[FQ9MFQ9
 | 
			
		||||
X+LSU+J!!!!!!!*!!!'jeE'`"rP)!!!B#M3!$rP%#MJ+2#[j4!!3+DfpME!d#MJ!
 | 
			
		||||
"E3!!"9B&@Ij3#[j3!!3+B@aTB3B#M`!$rNm#N!!#N3Vq6`!%#QPZFfJ0!T!!!!)
 | 
			
		||||
d!!!&A!9NrNi#NJVq6J!%#Q0QEf`0!T)!!@m!!!9J"@2q63[q63!d-!!BEh"PER0
 | 
			
		||||
cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!T%
 | 
			
		||||
!!rj-!T2q5`Vq6!!%#R4[)#!0!T-!!Qi!!!9R"AB#P!+9$3+8!!)d!!!&E`9frNS
 | 
			
		||||
#PJVq5J!%#QCTE'80!TB!!@d!!!9b"A8#P``#P`!2!!P[BQTPBh4c,QJ!!J!!$3+
 | 
			
		||||
9!!)d!!!&C`9[rNN#Q!Vq53!%#Q0QEf`0!TJ!!@m!!!9V"@lq5![q5!!8-!!)G'9
 | 
			
		||||
YF("KG'J!#(4PEA"3BA4S"[j,!!!#!S`!!J+C!TS0!TN!!Q`!!J9p"Ahq4rj'!Ij
 | 
			
		||||
(!!!"rNB!!!)#QJ!#!TX#R!d#Q`!#FJ!!"Ad&L!+G!Ti0!Td!!Q)!!!9p"B3#R`+
 | 
			
		||||
J$3+I!!&[!!!&I3@!rN8,rN8!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0bHA"dEdC
 | 
			
		||||
[E'4PFP"KG'J0!U!!!@d!!!@!"B-#S3`#S3!+!!3kF'9Y!!)!!!d#RJ!"E`!!!!!
 | 
			
		||||
!!2j%#rj%!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!T`!!J+L!U-0!U)!!dN!!J@
 | 
			
		||||
*"E2q3rj#!U3+rN-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Ij#!!!'!U3
 | 
			
		||||
!!rj"!U8#TJVq33!%#QY[Bf`0!U8!!@d!!!@0"C!!rN!+rN!!"!TKE'PK"J+Q!!2
 | 
			
		||||
q2`+R!UJ+rMm!"!TTER0S$3+R!!)d!!!&N`@ErMi#U3Vq2J!%#Q0QEf`0!UN!!@m
 | 
			
		||||
!!!@A"CVq23[q23!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0
 | 
			
		||||
-5@jME(9NC8C[E'4PFP"KG'J'!UJ!!rim!UVq1`Vq2!!%#R4[)#!0!US!!Qi!!!@
 | 
			
		||||
H"Dd#U`+X$3+V!!)d!!!&TJ@YrMS#V3Vq1J!%#QCTE'80!Ud!!@d!!!@T"D`#VJ`
 | 
			
		||||
#VJ!,!!9`C@dZD!!#!!!0!U`!!M3!!!@H"DEq13+[#[ij!!3+BfC[E!d#V`!"E`!
 | 
			
		||||
!"D)&TIii#rii!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'rMX!!!)#S`!#!V!#X3d
 | 
			
		||||
#X!!$53!#"E3&h[ihrMB#XJVq0`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`
 | 
			
		||||
"rMB!!!B#XJ!$rM8#X`+d#[ie!!3+DfpME!d#X`!"E3!!"EJ&Zrid#[id!!3+B@a
 | 
			
		||||
TB3B#Y!!$rM-#Y3+f#[ic!!3+D@jcD!d#Y3!#0!!!"Ei&a[ib!VF+rM)!"!TMCQp
 | 
			
		||||
X$3+h!!&[!!!&`JA&rM%,rM%!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!
 | 
			
		||||
BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J+f!!2q-!+irLm+rM!!"!TdEb!J$3+
 | 
			
		||||
i!!*Z!!!&b3AB!VN#ZJd#Z3!#0!!!"G%&f2iZ!VX+rLi!"!TQD@aP$3+l!!&Y!!!
 | 
			
		||||
&e!AA!V`-!V`!$!!'F'9Y-LjS!!)!!!d#ZJ!#0!!!"FN&dIiY!Vd+rLd!"!TMCQp
 | 
			
		||||
X$3+p!!&[!!!&c3A3rL`,rL`!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eq,`!!!J+
 | 
			
		||||
a!!)#[J+r$3+q!!*X!!)&h`AIrL[q+J(q+`!!!IiU!!!#!Vm!!J,!!X%0!X!!!R)
 | 
			
		||||
!!!AI"HS#`J,$$3,#!!*L!!!&h`AQ!X3#a3d#a!!"E`!!"Gm&i[iT#riT!#3`!""
 | 
			
		||||
MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3,&!!&Y!!!&iJAP!XB
 | 
			
		||||
-!XB!$3!(1R"VBh-a-J!#!!!0!X-!!@m!!!!!!!$q+![q+!!8-!!)G'9YF("KG'J
 | 
			
		||||
!#(4PEA"3BA4S!J,"!!)#a`,)$3,(!!0*!!)&k`B9rLIq*J,*#[iR!"JZBfpbC@0
 | 
			
		||||
bC@`U+LSU!!!!!!!!N!!!ER9XE!(q*J!!"J,*!!2q*3,+!XX+rL8!"!TVEf0X$3,
 | 
			
		||||
+!!&Y!!!&l`AbrL3+rL3!"!TKE'PK"J,,!!2q)`,-!Xd+rL-!"!TTER0S$3,-!!)
 | 
			
		||||
d!!!&p3AprL)#cJVq)J!%#Q0QEf`0!Xi!!@m!!!Aj"Icq)3[q)3!d-!!BEh"PER0
 | 
			
		||||
cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!Xd
 | 
			
		||||
!!riJ!Xrq(`Vq)!!%#R4[)#!0!Xm!!Qi!!!B!"Jm#d!,4$3,3!!)d!!!'#!B2rKi
 | 
			
		||||
#dJVq(J!%#QCTE'80!Y)!!@d!!!B,"Ji#d``#d`!1!!K`Df0c-6)ZD!!#!!!0!Y%
 | 
			
		||||
!!M3!!!B!"JMq(3,8#[iG!!3+BfC[E!d#e!!"E`!!"J3'"riF#riF!"3`!!KdC@e
 | 
			
		||||
`F'&dD!!)G'9YF&"KG'J'rKm!!!)#b!!#!Y8#eJd#e3!#E!!#"KB'&[iErKS"rKX
 | 
			
		||||
!!!(q'J!!!J,@!!)#e`,B$3,A!!*b!!!'&JBK!YN#fJd#f3!#BJ!!"KB'(3,E!Y`
 | 
			
		||||
0!YX!!@m!!!B@"KRq'3[q'3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4Qp
 | 
			
		||||
XC'9b8'&dD!d#h!!"E3!!"KN'(!,G$!,G!!`!"MT`Df0c0`!#!!!0!YS!!@m!!!!
 | 
			
		||||
!!!$q'![q'!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J,B!!)#hJ,I$3,H!!0*!!)
 | 
			
		||||
')JC-rKIq&J,J#[iA!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(q&J!!"J,
 | 
			
		||||
J!!2q&3,K!Z)+rK8!"!TVEf0X$3,K!!&Y!!!'*JBTrK3+rK3!"!TKE'PK"J,L!!2
 | 
			
		||||
q%`,M!Z3+rK-!"!TTER0S$3,M!!)d!!!',!BdrK)#j3Vq%J!%#Q0QEf`0!Z8!!@m
 | 
			
		||||
!!!B`"M2q%3[q%3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0
 | 
			
		||||
-5@jME(9NC8C[E'4PFP"KG'J'!Z3!!ri3!ZEq$`Vq%!!%#R4[)#!0!ZB!!Qi!!!B
 | 
			
		||||
h"NB#j`,S$3,R!!)d!!!'2`C'rJi#k3Vq$J!%#QCTE'80!ZN!!@d!!!C#"N8#kJ`
 | 
			
		||||
#kJ!0!!G`Df0c0bjS!!)!!!d#k!!#0!!!"MF'2ri0!ZX+rJd!"!TMCQpX$3,V!!&
 | 
			
		||||
[!!!'1`BqrJ`,rJ`!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eq$`!!!J,I!!)#l!,
 | 
			
		||||
Y$3,X!!*X!!)'63C0rJ[q#J(q#`!!!Ii+!!!#!Zd!!J,Z!Zm0!Zi!!R)!!!C0"PJ
 | 
			
		||||
#m!,a$3,`!!*L!!!'63C8![)#m`d#mJ!"E`!!"Nd'82i*#ri*!#3`!""MFRP`G'p
 | 
			
		||||
QEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3,c!!&Y!!!'8!C6![3-![3!#`!
 | 
			
		||||
&1R*KEQ3!!J!!$3,a!!&[!!!!!!!!rJJ,rJJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&
 | 
			
		||||
dD!)#l`!#![8#pJd#p3!$53!#"PN'Jri(rJB#p`Vq"`!B,Q0[FQ9MFQ9X+LSU+J!
 | 
			
		||||
!!!!!!*!!!'jeE'`"rJB!!!B#p`!$rJ8#q!,j#[i&!!3+DfpME!d#q!!"E3!!"Pd
 | 
			
		||||
'B2i%#[i%!!3+B@aTB3B#q3!$rJ-#qJ,l#[i$!!3+D@jcD!d#qJ!#0!!!"Q-'Dri
 | 
			
		||||
#![`+rJ)!"!TMCQpX$3,m!!&[!!!'C`CUrJ%,rJ%!0$!!''p`C@jcFfaTEQ0XG@4
 | 
			
		||||
PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J,l!!2q!!,prIm
 | 
			
		||||
+rJ!!"!TdEb!J$3,p!!*Z!!!'EJCp![i#r`d#rJ!#0!!!"RB'IIhq!`!+rIi!"!T
 | 
			
		||||
QD@aP$3-!!!&Y!!!'H3Cm!`%-!`%!$!!'FQ&ZC#jS!!)!!!d#r`!#0!!!"Qi'G[h
 | 
			
		||||
p!`)+rId!"!TMCQpX$3-#!!&[!!!'FJCerI`,rI`!&$!!#(4PEA"`BA4S!!KdC@e
 | 
			
		||||
`8'&dD!Epr`!!!J,f!!)$!`-%$3-$!!*X!!)'K!D%rI[pqJ(pq`!!!Ihk!!!#!`3
 | 
			
		||||
!!J-&!`B0!`8!!R)!!!D%"Sm$"`-)$3-(!!*L!!!'K!D,!`N$#Jd$#3!"E`!!"S3
 | 
			
		||||
'Krhj#rhj!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3-
 | 
			
		||||
+!!&Y!!!'K`D+!`X-!`X!#J!%1R*M-J!#!!!0!`J!!@m!!!!!!!$pq![pq!!8-!!
 | 
			
		||||
)G'9YF("KG'J!#(4PEA"3BA4S!J-'!!)$$!-0$3--!!0*!!)'N!!'Z[hhrIB$$JV
 | 
			
		||||
pp`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rIB!!!B$$J!$rI8$$`-3#[h
 | 
			
		||||
e!!3+DfpME!d$$`!"E3!!"T3'Prhd#[hd!!3+B@aTB3B$%!!$rI-$%3-5#[hc!!3
 | 
			
		||||
+D@jcD!d$%3!#0!!!"TS'S[hb!a-+rI)!"!TMCQpX$3-6!!&[!!!'RJDKrI%,rI%
 | 
			
		||||
!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'Efa
 | 
			
		||||
NCA*3BA4S"J-5!!2pm!-8rHm+rI!!"!TdEb!J$3-8!!*Z!!!'T3Dd!a8$&Jd$&3!
 | 
			
		||||
#0!!!"Ud'Y2hZ!aF+rHi!"!TQD@aP$3-A!!&Y!!!'X!Dc!aJ-!aJ!#`!&FQ-b,QJ
 | 
			
		||||
!!J!!$3-@!!)d!!!'T3DYrHd$'3Vpl3!%#Q0QEf`0!aN!!@m!!!DT"Ucpl![pl!!
 | 
			
		||||
8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[h[!!!#!`d!!J-D!aX0!aS!!Q`!!JDl"V[
 | 
			
		||||
pkrhU!IhV!!!"rHS!!!)$'`!#!a`$(3d$(!!#FJ!!"VX'aJ-H!am0!ai!!Q)!!!D
 | 
			
		||||
l"X)$)!-K$3-J!!&[!!!'Z`DqrHN,rHN!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0
 | 
			
		||||
bHA"dEdC[E'4PFP"KG'J0!b%!!@d!!!Dq"X%$)J`$)J!+!!3kFQ-d!!)!!!d$(`!
 | 
			
		||||
"E`!!!!!!!2hS#rhS!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!ad!!J-M!b30!b-
 | 
			
		||||
!!dN!!JE("[(pjrhQ!b8+rHF!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Ih
 | 
			
		||||
Q!!!'!b8!!rhP!bB$*`Vpj3!%#QY[Bf`0!bB!!@d!!!E,"Xlpj!Vpj!!%#Q&XD@%
 | 
			
		||||
'!bF!!rhM!bJ$+3Vpi`!%#QPZFfJ0!bJ!!M3!!!E4"YRpiJ-U#[hL!!3+BfC[E!d
 | 
			
		||||
$+J!"E`!!"Y8'f2hK#rhK!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p
 | 
			
		||||
`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B$+3!$rH!$+rhI#[hJ!!3+G'mJ)!d$+`!
 | 
			
		||||
#EJ!!"Y`'k`-X!bd0!b`!!M3!!!EN"Z[phJ-Z#[hH!!3+CQPXC3d$,J!"E3!!"ZF
 | 
			
		||||
'kJ-[$!-[!!X!"A*M0#jS!!)!!!d$,3!#0!!!"Y`'j2hG!c!+rGd!"!TMCQpX$3-
 | 
			
		||||
`!!&[!!!'i!EMrG`,rG`!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eph`!!!J-N!!)
 | 
			
		||||
$-3-b$3-a!!*X!!)'mJEbrG[pfJ(pf`!!!IhD!!!#!c)!!J-c!c30!c-!!R)!!!E
 | 
			
		||||
b"[d$03-f$3-e!!*L!!!'mJEj!cF$1!d$0`!"E`!!"[)'pIhC#rhC!#3`!""MFRP
 | 
			
		||||
`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3-i!!&Y!!!'p3Ei!cN-!cN
 | 
			
		||||
!#J!%1R*M03!#!!!0!cB!!@m!!!!!!!$pf![pf!!8-!!)G'9YF("KG'J!#(4PEA"
 | 
			
		||||
3BA4S!J-d!!)$1J-l$3-k!!0*!!)'rJFSrGIpeJ-m#[hA!"JZBfpbC@0bC@`U+LS
 | 
			
		||||
U!!!!!!!!N!!!ER9XE!(peJ!!"J-m!!2pe3-p!ci+rG8!"!TVEf0X$3-p!!&Y!!!
 | 
			
		||||
(!JF&rG3+rG3!"!TKE'PK"J-q!!2pd`-r!d!+rG-!"!TTER0S$3-r!!)d!!!(#!F
 | 
			
		||||
3rG)$33VpdJ!%#Q0QEf`0!d%!!@m!!!F-"`rpd3[pd3!d-!!BEh"PER0cE'PZBfa
 | 
			
		||||
eC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!d!!!rh3!d,
 | 
			
		||||
pc`Vpd!!%#R4[)#!0!d)!!Qi!!!F6"b)$3`0%$30$!!)d!!!('`FLrFi$43VpcJ!
 | 
			
		||||
%#QCTE'80!d8!!@d!!!FH"b%$4J`$4J!,!!9bBc8ZD!!#!!!0!d3!!M3!!!F6"a[
 | 
			
		||||
pc30(#[h0!!3+BfC[E!d$4`!"E`!!"aF('[h-#rh-!"3`!!KdC@e`F'&dD!!)G'9
 | 
			
		||||
YF&"KG'J'rFm!!!)$1`!#!dJ$53d$5!!#E!!#"bN(+Ih,rFS"rFX!!!(pbJ!!!J0
 | 
			
		||||
*!!)$5J0,$30+!!*b!!!(+3Fd!d`$63d$6!!#BJ!!"bN(-!01!dm0!di!!@m!!!F
 | 
			
		||||
T"bcpb3[pb3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d
 | 
			
		||||
$6`!"E3!!"b`(,`03$!03!!d!"cTbDA"PE@3!!J!!$300!!&[!!!!!!!!rFJ,rFJ
 | 
			
		||||
!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)$5`!#!e%$8Jd$83!$53!#"c8(Arh(rFB
 | 
			
		||||
$8`Vpa`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rFB!!!B$8`!$rF8$9!0
 | 
			
		||||
9#[h&!!3+DfpME!d$9!!"E3!!"cN(22h%#[h%!!3+B@aTB3B$93!$rF-$9J0A#[h
 | 
			
		||||
$!!3+D@jcD!d$9J!#0!!!"cm(4rh#!eJ+rF)!"!TMCQpX$30B!!&[!!!(3`G'rF%
 | 
			
		||||
,rF%!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9
 | 
			
		||||
'EfaNCA*3BA4S"J0A!!2p`!0CrEm+rF!!"!TdEb!J$30C!!*Z!!!(5JGC!eS$@`d
 | 
			
		||||
$@J!#0!!!"e)(@Ifq!e`+rEi!"!TQD@aP$30F!!&Y!!!(93GB!ed-!ed!$J!)FQP
 | 
			
		||||
`C@eN,QJ!!J!!$30E!!)d!!!(5JG5rEd$AJVp[3!%#Q0QEf`0!ei!!@m!!!G1"e(
 | 
			
		||||
p[![p[!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[fr!!!#!e)!!J0I!f!0!em!!Q`
 | 
			
		||||
!!JGJ"f$pZrfk!Ifl!!!"rES!!!)$B!!#!f%$BJd$B3!#FJ!!"f!(D`0M!f30!f-
 | 
			
		||||
!!Q)!!!GJ"fF$C30Q$30P!!&[!!!(B!GMrEN,rEN!*$!!%'0bHA"dEfC[E'4PFR"
 | 
			
		||||
KG'J!%'0bHA"dEdC[E'4PFP"KG'J0!fB!!@d!!!GM"fB$C``$C`!+!!3kFR0K!!)
 | 
			
		||||
!!!d$C!!"E`!!!!!!!2fi#rfi!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!f)!!J0
 | 
			
		||||
S!fN0!fJ!!dN!!JGX"jEpYrff!fS+rEF!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"
 | 
			
		||||
ZG@aX!Iff!!!'!fS!!rfe!fX$E!VpY3!%#QY[Bf`0!fX!!@d!!!G`"h2pY!VpY!!
 | 
			
		||||
%#Q&XD@%'!f`!!rfc!fd$EJVpX`!%#QPZFfJ0!fd!!M3!!!Gf"hlpXJ0[#[fb!!3
 | 
			
		||||
+BfC[E!d$E`!"E`!!"hS(IIfa#rfa!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"
 | 
			
		||||
KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B$EJ!$rE!$F2f[#[f`!!3+G'm
 | 
			
		||||
J)!d$F!!#EJ!!"i%(N!!$F30b$30a!!)d!!!(L3H3!2fZ!h-+rDi!"!TQD@aP$30
 | 
			
		||||
c!!&Y!!!(M!H2!h3-!h3!#`!&FR0K,QJ!!J!!$30b!!)d!!!(J3H*rDd$G3VpV3!
 | 
			
		||||
%#Q0QEf`0!h8!!@m!!!H&"iMpV![pV!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[f
 | 
			
		||||
[!!!#!fN!!J0f!hF0!hB!!Q`!!JHA"jIpUrfU!IfV!!!"rDS!!!)$G`!#!hJ$H3d
 | 
			
		||||
$H!!#FJ!!"jF(SJ0k!hX0!hS!!Q)!!!HA"ji$I!0p$30m!!&[!!!(P`HDrDN,rDN
 | 
			
		||||
!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0bHA"dEdC[E'4PFP"KG'J0!hd!!@d!!!H
 | 
			
		||||
D"jd$IJ`$IJ!-!!BkFh4KBfX!!J!!$30l!!&[!!!!!!!!rDJ,rDJ!&$!!#(4PEA"
 | 
			
		||||
`BA4S!!KdC@e`8'&dD!)$H3!#!hm$J!d$I`!$53!#"k-(cIfRrDB$J3VpT`!B,Q0
 | 
			
		||||
[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rDB!!!B$J3!$rD8$JJ1$#[fP!!3+Dfp
 | 
			
		||||
ME!d$JJ!"E3!!"kF(U[fN#[fN!!3+B@aTB3B$J`!$rD-$K!1&#[fM!!3+D@jcD!d
 | 
			
		||||
$K!!#0!!!"kd(YIfL!iB+rD)!"!TMCQpX$31'!!&[!!!(X3HdrD%,rD%!0$!!''p
 | 
			
		||||
`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4
 | 
			
		||||
S"J1&!!2pS!1(rCm+rD!!"!TdEb!J$31(!!*Z!!!(Z!I(!iJ$L3d$L!!#0!!!"m!
 | 
			
		||||
(arfH!iS+rCi!"!TQD@aP$31+!!&Y!!!(``I'!iX-!iX!$3!(Fh4KBfXZD!!#!!!
 | 
			
		||||
0!iN!!M3!!!Hi"m$pR31-#[fG!!3+BfC[E!d$M!!"E`!!"l`([rfF#rfF!"3`!!K
 | 
			
		||||
dC@e`F'&dD!!)G'9YF&"KG'J'rCm!!!)$J!!#!id$MJd$M3!$53!#"mi(q2fErCS
 | 
			
		||||
$M`VpQ`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rCS!!!B$M`!$rCN$N!!
 | 
			
		||||
$N3VpQ3!%#QY[Bf`0!j!!!!&Y!!!(dJI9rCJ+rCJ!"!TKE'PK"J14!!2pP`15!j-
 | 
			
		||||
+rCF!"!TTER0S$315!!)d!!!(f!IJrCB$P!VpPJ!%#Q0QEf`0!j3!!@m!!!IF"pr
 | 
			
		||||
pP3[pP3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9
 | 
			
		||||
NC8C[E'4PFP"KG'J'!j-!!rf8!jApN`VpP!!%#R4[)#!0!j8!!Qi!!!IM"r)$PJ1
 | 
			
		||||
A$31@!!)d!!!(k`IbrC)$Q!VpNJ!%#QCTE'80!jJ!!@d!!!IZ"r%$Q3`$Q3!4!!Y
 | 
			
		||||
cB@CPFh4KBfXZD!!#!!!0!jF!!M3!!!IM"q[pN31D#[f4!!3+BfC[E!d$QJ!"E`!
 | 
			
		||||
!"qF(k[f3!![pN!!!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!EpN`!!!J11!!)$Q`1
 | 
			
		||||
F$31E!!*X!!)(q3IjrBrpMJ(pM`!!!If1!!!#!j`!!J1G!ji0!jd!!R)!!!Ij#!3
 | 
			
		||||
$R`1J$31I!!*L!!!(q3J!!k%$SJd$S3!"E`!!"rN(r2f0#rf0!#3`!""MFRP`G'p
 | 
			
		||||
QEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$31L!!&Y!!!(r!Ir!k--!k-!#J!
 | 
			
		||||
%1R0SB3!#!!!0!k!!!@m!!!!!!!$pM![pM!!8-!!)G'9YF("KG'J!#(4PEA"3BA4
 | 
			
		||||
S!J1H!!)$T!1P$31N!!0*!!))"3J[rB[pLJ1Q#[f,!"JZBfpbC@0bC@`U+LSU!!!
 | 
			
		||||
!!!!!N!!!ER9XE!(pLJ!!"J1Q!!2pL31R!kJ+rBN!"!TVEf0X$31R!!&Y!!!)#3J
 | 
			
		||||
-rBJ+rBJ!"!TKE'PK"J1S!!2pK`1T!kS+rBF!"!TTER0S$31T!!)d!!!)$`JArBB
 | 
			
		||||
$U`VpKJ!%#Q0QEf`0!kX!!@m!!!J6#"EpK3[pK3!d-!!BEh"PER0cE'PZBfaeC'9
 | 
			
		||||
QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!kS!!rf%!kcpJ`V
 | 
			
		||||
pK!!%#R4[)#!0!k`!!Qi!!!JD##N$V31Z$31Y!!)d!!!))JJTrB)$V`VpJJ!%#QC
 | 
			
		||||
TE'80!km!!@d!!!JP##J$X!`$X!!,!!9cD'%ZD!!#!!!0!ki!!M3!!!JD##,pJ31
 | 
			
		||||
a#[f"!!3+BfC[E!d$X3!"E`!!#"i))If!#rf!!"3`!!KdC@e`F'&dD!!)G'9YF&"
 | 
			
		||||
KG'J'rB-!!!)$T3!#!l)$X`d$XJ!#E!!##$!)-2errAi"rAm!!!(pIJ!!!J1c!!)
 | 
			
		||||
$Y!1e$31d!!*b!!!)-!Jl!lB$Y`d$YJ!#BJ!!#$!)0`1i!lN0!lJ!!@m!!!J`#$2
 | 
			
		||||
pI3[pI3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d$Z3!
 | 
			
		||||
"E3!!#$-)0J1k$!1k!!d!"cTdH(4IC')!!J!!$31h!!&[!!!!!!!!rA`,rA`!&$!
 | 
			
		||||
!#(4PEA"`BA4S!!KdC@e`8'&dD!)$Y3!#!lX$[!d$Z`!$53!##$`)C[elrAS$[3V
 | 
			
		||||
pH`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rAS!!!B$[3!$rAN$[J1r#[e
 | 
			
		||||
j!!3+DfpME!d$[J!"E3!!#%!)3rei#[ei!!3+B@aTB3B$[`!$rAF$`!2"#[eh!!3
 | 
			
		||||
+D@jcD!d$`!!#0!!!#%B)6[ef!m)+rAB!"!TMCQpX$32#!!&[!!!)5JK0rA8,rA8
 | 
			
		||||
!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'Efa
 | 
			
		||||
NCA*3BA4S"J2"!!2pG!2$rA-+rA3!"!TdEb!J$32$!!*Z!!!)83KJ!m3$a3d$a!!
 | 
			
		||||
#0!!!#&N)B2eb!mB+rA)!"!TQD@aP$32'!!&Y!!!)A!KI!mF-!mF!$J!)G(KdAf4
 | 
			
		||||
L,QJ!!J!!$32&!!)d!!!)83KCrA%$b!VpF3!%#Q0QEf`0!mJ!!@m!!!K9#&MpF![
 | 
			
		||||
pF!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[ec!!!#!l`!!J2*!mS0!mN!!Q`!!JK
 | 
			
		||||
R#'IpEreZ!Ie[!!!"r@i!!!)$bJ!#!mX$c!d$b`!#FJ!!#'F)FJ20!mi0!md!!Q)
 | 
			
		||||
!!!KR#'i$c`23$322!!&[!!!)C`KUr@d,r@d!*$!!%'0bHA"dEfC[E'4PFR"KG'J
 | 
			
		||||
!%'0bHA"dEdC[E'4PFP"KG'J0!p!!!@d!!!KU#'d$d3`$d3!,!!8kH$8`13!#!!!
 | 
			
		||||
0!mi!!@m!!!!!!!$pE![pE!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J2-!!)$dJ2
 | 
			
		||||
6$325!!0*!!))F`LGr@[pDJ28#[eV!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9
 | 
			
		||||
XE!(pDJ!!"J28!!2pD329!pB+r@N!"!TVEf0X$329!!&Y!!!)G`Kkr@J+r@J!"!T
 | 
			
		||||
KE'PK"J2@!!2pC`2A!pJ+r@F!"!TTER0S$32A!!)d!!!)I3L&r@B$f3VpCJ!%#Q0
 | 
			
		||||
QEf`0!pN!!@m!!!L"#)6pC3[pC3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4
 | 
			
		||||
S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!pJ!!reN!pVpB`VpC!!%#R4[)#!
 | 
			
		||||
0!pS!!Qi!!!L)#*F$f`2F$32E!!)d!!!)N!!)PreL!pd+r@)!"!TQD@aP$32G!!&
 | 
			
		||||
Y!!!)N`L@!pi-!pi!$!!'H$8`15jS!!)!!!d$h!!#0!!!#)J)N!$pB32I#[eK!!3
 | 
			
		||||
+BfC[E!d$h`!"E`!!#)`)MreJ#reJ!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'r@-
 | 
			
		||||
!!!)$d`!#!q!$i3d$i!!$53!##*i)b2eIr9i$iJVpA`!B,Q0[FQ9MFQ9X+LSU+J!
 | 
			
		||||
!!!!!!*!!!'jeE'`"r9i!!!B$iJ!$r9d$i`2N#[eG!!3+DfpME!d$i`!"E3!!#+)
 | 
			
		||||
)TIeF#[eF!!3+B@aTB3B$j!!$r9X$j32Q#[eE!!3+D@jcD!d$j3!#0!!!#+J)X2e
 | 
			
		||||
D!qF+r9S!"!TMCQpX$32R!!&[!!!)V!L[r9N,r9N!0$!!''p`C@jcFfaTEQ0XG@4
 | 
			
		||||
PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J2Q!!2p@!2Sr9F
 | 
			
		||||
+r9J!"!TdEb!J$32S!!*Z!!!)X`M#!qN$kJd$k3!#0!!!#,X)`[e@!qX+r9B!"!T
 | 
			
		||||
QD@aP$32V!!&Y!!!)[JM"!q`-!q`!%!!+H$8`19pfCRNZD!!#!!!0!qS!!M3!!!L
 | 
			
		||||
c#,[p932Y#[e9!!3+BfC[E!d$l3!"E`!!#,F)Z[e8#re8!"3`!!KdC@e`F'&dD!!
 | 
			
		||||
)G'9YF&"KG'J'r9F!!!)$i3!#!qi$l`d$lJ!#E!!##-N)bIe6r9)"r9-!!!(p8J!
 | 
			
		||||
!!J2[!!)$m!2a$32`!!*b!!!)b3M8!r)$m`d$mJ!#BJ!!#-N)d!2d!r80!r3!!@m
 | 
			
		||||
!!!M*#-cp83[p83!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&
 | 
			
		||||
dD!d$p3!"E3!!#-`)c`2f$!2f!!d!"cTi06!jGM-!!J!!$32c!!&[!!!!!!!!r9!
 | 
			
		||||
,r9!!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)$m3!#!rF$q!d$p`!$53!##08)rre
 | 
			
		||||
2r8i$q3Vp6`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r8i!!!B$q3!$r8d
 | 
			
		||||
$qJ2l#[e0!!3+DfpME!d$qJ!"E3!!#0N)h2e-#[e-!!3+B@aTB3B$q`!$r8X$r!2
 | 
			
		||||
p#[e,!!3+D@jcD!d$r!!#0!!!#0m)jre+!ri+r8S!"!TMCQpX$32q!!&[!!!)i`M
 | 
			
		||||
Qr8N,r8N!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfa
 | 
			
		||||
eC'9'EfaNCA*3BA4S"J2p!!2p5!2rr8F+r8J!"!TdEb!J$32r!!*Z!!!)kJMj"!!
 | 
			
		||||
%!3d%!!!#0!!!#2))qIe'"!)+r8B!"!TQD@aP$33#!!&Y!!!)p3Mi"!--"!-!$J!
 | 
			
		||||
)H$8`1ABc,QJ!!J!!$33"!!)d!!!)kJMbr88%"!Vp43!%#Q0QEf`0"!3!!@m!!!M
 | 
			
		||||
Z#2(p4![p4!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[e(!!!#!rJ!!J3&"!B0"!8
 | 
			
		||||
!!Q`!!JN!#3$p3re#!Ie$!!!"r8)!!!)%"J!#"!F%#!d%"`!$53!##3!*+[e"r8!
 | 
			
		||||
%#3Vp33!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r8!!!!B%#3!$r6m%#J3
 | 
			
		||||
,#[dr!!3+DfpME!d%#J!"E3!!#33*"rdq#[dq!!3+B@aTB3B%#`!$r6d%$!30#[d
 | 
			
		||||
p!!3+D@jcD!d%$!!#0!!!#3S*%[dm"!i+r6`!"!TMCQpX$331!!&[!!!*$JN4r6X
 | 
			
		||||
,r6X!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9
 | 
			
		||||
'EfaNCA*3BA4S"J30!!2p1J32r6N+r6S!"!TdEb!J$332!!*Z!!!*&3NN""!%%3d
 | 
			
		||||
%%!!#0!!!#4d**2di"")+r6J!"!TQD@aP$335!!&Y!!!*)!NM""--""-!#`!&Fh0
 | 
			
		||||
X,QJ!!J!!$334!!)d!!!*&3NGr6F%&!Vp0`!%#Q0QEf`0""3!!@m!!!NC#4cp0J[
 | 
			
		||||
p0J!H-!!0Fh0XCQpXC'9bF'&dD!!0Fh0X4QpXC'9b8'&dD!Ep13!!!J3)!!)%&33
 | 
			
		||||
@$339!!0*!!)*+`P9r6Ap0!3A#[de!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9
 | 
			
		||||
XE!(p0!!!"J3A!!2p-`3B""N+r6-!"!TVEf0X$33B!!&Y!!!*,`Nbr6)+r6)!"!T
 | 
			
		||||
KE'PK"J3C!!2p-33D""X+r6%!"!TTER0S$33D!!)d!!!*03Npr6!%(!Vp-!!%#Q0
 | 
			
		||||
QEf`0""`!!@m!!!Nj#6cp,`[p,`!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4
 | 
			
		||||
S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'""X!!rdZ""hp,3Vp,J!%#R4[)#!
 | 
			
		||||
0""d!!Qi!!!P!#8m%(J3I$33H!!)d!!!*5!P2r5`%)!Vp,!!%#QCTE'80"#!!!@d
 | 
			
		||||
!!!P,#8i%)3`%)3!-!!CcFf`b,QJ!!J!!$33I!!)d!!!*3!P)r5X%)JVp+`!%#Q0
 | 
			
		||||
QEf`0"#)!!@m!!!P%#8Ip+J[p+J!H-!!0Fh0XCQpXC'9bF'&dD!!0Fh0X4QpXC'9
 | 
			
		||||
b8'&dD!Ep,3!!!J3@!!)%)`3N$33M!!0*!!)*9JQ!r5Rp+!3P#[dT!"JZBfpbC@0
 | 
			
		||||
bC@`U+LSU!!!!!!!!N!!!ER9XE!(p+!!!"J3P!!2p*`3Q"#F+r5F!"!TVEf0X$33
 | 
			
		||||
Q!!&Y!!!*@JPGr5B+r5B!"!TKE'PK"J3R!!2p*33S"#N+r58!"!TTER0S$33S!!)
 | 
			
		||||
d!!!*B!PSr53%+JVp*!!%#Q0QEf`0"#S!!@m!!!PN#@Ip)`[p)`!d-!!BEh"PER0
 | 
			
		||||
cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'"#N
 | 
			
		||||
!!rdL"#[p)3Vp)J!%#R4[)#!0"#X!!Qi!!!PV#AS%,!3Y$33X!!)d!!!*F`Pkr5!
 | 
			
		||||
%,JVp)!!%#QCTE'80"#i!!@d!!!Pf#AN%,``%,`!0!!GcFf`b-bjS!!)!!!d%,3!
 | 
			
		||||
#0!!!#@X*FrdI"$!+r4m!"!TMCQpX$33`!!&[!!!*E`Pbr4i,r4i!(M!!$A0cE'C
 | 
			
		||||
[E'4PFR"KG'J!$A0cE%C[E'4PFP"KG'J'r5%!!!)%*!!#"$%%-Jd%-3!$53!##B%
 | 
			
		||||
*UrdGr4`%-`Vp(3!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r4`!!!B%-`!
 | 
			
		||||
$r4X%0!3e#[dE!!3+DfpME!d%0!!"E3!!#B8*L2dD#[dD!!3+B@aTB3B%03!$r4N
 | 
			
		||||
%0J3h#[dC!!3+D@jcD!d%0J!#0!!!#BX*NrdB"$J+r4J!"!TMCQpX$33i!!&[!!!
 | 
			
		||||
*M`Q5r4F,r4F!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%P
 | 
			
		||||
ZBfaeC'9'EfaNCA*3BA4S"J3h!!2p&J3jr48+r4B!"!TdEb!J$33j!!*Z!!!*PJQ
 | 
			
		||||
P"$S%1`d%1J!#0!!!#Ci*TId8"$`+r43!"!TQD@aP$33m!!&Y!!!*S3QN"$d-"$d
 | 
			
		||||
!$!!'Fh0X-bjS!!)!!!d%1`!#0!!!#CB*R[d6"$i+r4-!"!TMCQpX$33q!!&[!!!
 | 
			
		||||
*QJQGr4),r4)!(M!!$A0cE'C[E'4PFR"KG'J!$A0cE%C[E'4PFP"KG'J'r48!!!)
 | 
			
		||||
%-J!#"$m%3!d%2`!$53!##D`*e[d4r4!%33Vp%3!B,Q0[FQ9MFQ9X+LSU+J!!!!!
 | 
			
		||||
!!*!!!'jeE'`"r4!!!!B%33!$r3m%3J4$#[d2!!3+DfpME!d%3J!"E3!!#E!*Xrd
 | 
			
		||||
1#[d1!!3+B@aTB3B%3`!$r3d%4!4&#[d0!!3+D@jcD!d%4!!#0!!!#EB*[[d-"%B
 | 
			
		||||
+r3`!"!TMCQpX$34'!!&[!!!*ZJQpr3X,r3X!0$!!''p`C@jcFfaTEQ0XG@4PCQp
 | 
			
		||||
XC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J4&!!2p#J4(r3N+r3S
 | 
			
		||||
!"!TdEb!J$34(!!*Z!!!*`3R3"%J%53d%5!!#0!!!#FN*d2d)"%S+r3J!"!TQD@a
 | 
			
		||||
P$34+!!&Y!!!*c!R2"%X-"%X!$!!'G'ac-5jS!!)!!!d%53!#0!!!#F%*bId("%`
 | 
			
		||||
+r3F!"!TMCQpX$34-!!&[!!!*a3R)r3B,r3B!(M!!$A0cE'C[E'4PFR"KG'J!$A0
 | 
			
		||||
cE%C[E'4PFP"KG'J'r3N!!!)%3!!#"%d%6Jd%63!#E!!##GF*erd&r33"r38!!!(
 | 
			
		||||
p"!!!!J41!!)%6`43$342!!0*!!)*e`S"r32p!J44#[d$!"JZBfpbC@0bC@`U+LS
 | 
			
		||||
U!!!!!!!!N!!!ER9XE!(p!J!!"J44!!2p!345"&-+r3%!"!TVEf0X$345!!&Y!!!
 | 
			
		||||
*f`RHr3!+r3!!"!TKE'PK"J46!!2mr`48"&8+r2m!"!TTER0S$348!!)d!!!*i3R
 | 
			
		||||
Tr2i%9JVmrJ!%#Q0QEf`0"&B!!@m!!!RP#HMmr3[mr3!d-!!BEh"PER0cE'PZBfa
 | 
			
		||||
eC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'"&8!!rcm"&I
 | 
			
		||||
mq`Vmr!!%#R4[)#!0"&F!!Qi!!!RX#IX%@!4C$34B!!)d!!!*p!Rlr2S%@JVmqJ!
 | 
			
		||||
%#QCTE'80"&S!!@d!!!Rh#IS%@``%@`!1!!KMFRP`G'mZD!!#!!!0"&N!!M3!!!R
 | 
			
		||||
X#I6mq34F#[cj!!3+BfC[E!d%A!!"E`!!#I!*mrci#rci!#3`!""MFRP`G'pQEfa
 | 
			
		||||
NCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S"[cl!!!#"&!!!J4G"&i0"&d!!Q`!!JS
 | 
			
		||||
##J,mprcf!Ich!!!"r2B!!!)%AJ!#"&m%B!d%A`!$53!##J)+,2cer23%B3Vmp3!
 | 
			
		||||
B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r23!!!B%B3!$r2-%BJ4M#[cc!!3
 | 
			
		||||
+DfpME!d%BJ!"E3!!#JB+#Icb#[cb!!3+B@aTB3B%B`!$r2%%C!4P#[ca!!3+D@j
 | 
			
		||||
cD!d%C!!#0!!!#J`+&2c`"'B+r2!!"!TMCQpX$34Q!!&[!!!+%!S6r1m,r1m!0$!
 | 
			
		||||
!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*
 | 
			
		||||
3BA4S"J4P!!2mlJ4Rr1d+r1i!"!TdEb!J$34R!!*Z!!!+&`SQ"'J%D3d%D!!#0!!
 | 
			
		||||
!#Km+*[cX"'S+r1`!"!TQD@aP$34U!!&Y!!!+)JSP"'X-"'X!%!!+Eh"PER0cE(B
 | 
			
		||||
ZD!!#!!!0"'N!!M3!!!SA#Krmk`4X#[cV!!3+BfC[E!d%E!!"E`!!#KX+([cU#rc
 | 
			
		||||
U!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S"[cY!!!#"'!
 | 
			
		||||
!!J4Y"'i0"'d!!dN!!JSY#PImkIcS"'m+r1N!'#jMEh*PBh*PE#SU+LS!!!!!!!#
 | 
			
		||||
3!!"ZG@aX!IcS!!!'"'m!!rcR"(!%F3Vmj`!%#QY[Bf`0"(!!!@d!!!Sa#M6mjJV
 | 
			
		||||
mjJ!%#Q&XD@%'"(%!!rcP"()%F`Vmj3!%#QPZFfJ0"()!!M3!!!Sh#Mrmj!4d#[c
 | 
			
		||||
N!!3+BfC[E!d%G!!"E`!!#MX+2[cM#rcM!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4
 | 
			
		||||
PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B%F`!$r1)%GIcK#[cL!!3
 | 
			
		||||
+G'mJ)!d%G3!#EJ!!#N)+834f"(F0"(B!!M3!!!T+#P(mi!4i#[cJ!!3+CQPXC3d
 | 
			
		||||
%H!!"E3!!#Nd+8!4j$!4j!!i!#(4YC'PQCLjS!!)!!!d%G`!#0!!!#N)+5[cI"(S
 | 
			
		||||
+r0m!"!TMCQpX$34k!!&[!!!+4JT*r0i,r0i!*$!!%'0bHA"dEfC[E'4PFR"KG'J
 | 
			
		||||
!%'0bHA"dEdC[E'4PFP"KG'J'r1%!!!)%EJ!#"(X%I!d%H`!#E!!##PJ+@2cGr0`
 | 
			
		||||
"r0d!!!(mh!!!!J4m!!)%I34q$34p!!*X!!)+@!TBr0[mfJ(mf`!!!IcD!!!#"(i
 | 
			
		||||
!!J4r")!0"(m!!dN!!JTB#S,mfIcB")%+r0N!'#jMEh*PBh*PE#SU+LS!!!!!!!#
 | 
			
		||||
3!!"ZG@aX!IcB!!!'")%!!rcA"))%J`Vme`!%#QY[Bf`0"))!!@d!!!TF#PrmeJV
 | 
			
		||||
meJ!%#Q&XD@%'")-!!rc9")3%K3Vme3!%#QPZFfJ0")3!!M3!!!TL#QVme!5'#[c
 | 
			
		||||
8!!3+BfC[E!d%KJ!"E`!!#QB+DIc6#rc6!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4
 | 
			
		||||
PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B%K3!$r0)%Krc4#[c5!!3
 | 
			
		||||
+G'mJ)!d%K`!#EJ!!#Qd+I!5)")N0")J!!M3!!!Te#Rcmd!5+#[c3!!3+CQPXC3d
 | 
			
		||||
%LJ!"E3!!#RJ+H`5,$!5,!!`!"Q9IEh-ZD!!#!!!0")N!!M3!!!TY#RAmc`5-#[c
 | 
			
		||||
2!!3+BfC[E!d%M!!"E`!!#R%+G2c1#rc1!#B`!"&[F'9ZFh0XCQpXC'9bF'&dD!!
 | 
			
		||||
4Eh"PER0cE%C[E'4PFP"KG'J'r0%!!!)%J!!#")d%MJd%M3!$53!##S-+VIc0r-`
 | 
			
		||||
%M`Vmc3!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r-`!!!B%M`!$r-X%N!!
 | 
			
		||||
%N3Vmb`!%#QY[Bf`0"*!!!!&Y!!!+K`U+r-S+r-S!"!TKE'PK"J54!!2mb355"*-
 | 
			
		||||
+r-N!"!TTER0S$355!!)d!!!+M3U9r-J%P!Vmb!!%#Q0QEf`0"*3!!@m!!!U4#T6
 | 
			
		||||
ma`[ma`!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9
 | 
			
		||||
NC8C[E'4PFP"KG'J'"*-!!rc'"*Ama3VmaJ!%#R4[)#!0"*8!!Qi!!!UB#UF%PJ5
 | 
			
		||||
A$35@!!)d!!!+S!URr-3%Q!Vma!!%#QCTE'80"*J!!@d!!!UM#UB%Q3`%Q3!0!!G
 | 
			
		||||
PAfpc-LjS!!)!!!d%P`!#0!!!#TJ+S2c$"*S+r--!"!TMCQpX$35D!!&[!!!+R!U
 | 
			
		||||
Ir-),r-)!*M!!%@p`C@jcFfaQEfaNCA*`BA4S!"&[F'9ZFh0X4QpXC'9b8'&dD!E
 | 
			
		||||
ma3!!!J51!!)%Qrc"$35E!!*X!!)+VJUZr-$m[`(m`!!!!Ibr!!!#r-%!!!d!#3!
 | 
			
		||||
"E3!!!!!!!3!I!Irq!!!#!!B!!J5F"*d0"*`!!Q`!!J!!!!$m[[bp!Ibq!!!"r,d
 | 
			
		||||
!!!)%R3!#"*i%R`d%RJ!#E!!##V%+b!5Jr,`0"+!!!dN!!JUa#XMmZ`5K"+)+r,X
 | 
			
		||||
!'#jcHA0[C'a[Cf&cDh)!!!!!!!!!!&4&@&30"+%!!@d!!!Ua#V3%S``%S`!'!!!
 | 
			
		||||
!!J!!"J5L!!2mZJ5N"+8+r,S!"!TLG'jc$35N!!&+!!!+Y`Um"+B#"+B!!J5Rr,N
 | 
			
		||||
0"+F!!@d!!!Uh#VS%U!`%U!!+!!4%EfjP!!)!!!,mZ3!!"J5P!!2mZ!5Tr,F+r,J
 | 
			
		||||
!"!TRDACe$35T!!&Y!!!+[`V#r,B$r,B!"3EmY`!!!Ibm!!!#"*m!!J5Ur,80"+S
 | 
			
		||||
!!Q`!!J!!!!$mY2bc!Ibd!!!"r,-!!!,mY3!!$J!#!!!2%!!$!",mXJ5V"+`%V35
 | 
			
		||||
Z"+m%X!5a",)%X`5d",8%YJ5hr,(mX2b[r+i"r,)!!"!%U`!3r+hmV2bVr+VmUIb
 | 
			
		||||
Sr+ImT[bPr+6mSrbLr+(mS2bIr*i+r+d!'#jKCACdEf&`F'jeE'`!!)!!!!#3!!!
 | 
			
		||||
U+LSU#rbX!")`!!GdD'9`BA4S!!GdD'93BA4S#rbV!"``!!adD'9[E'4NC@aTEA-
 | 
			
		||||
!$(4SC8pXC%4PE'PYF`[mUJ!J-!!1G'KPF(*[DQ9MG("KG'J!$R4SC9"bEfTPBh4
 | 
			
		||||
3BA4S#rbT!"B`!!PdD'9YCA"KG'J!#A4SC8eP8'&dD![mU!!Q-!!4D@jME(9NC@C
 | 
			
		||||
[E'4PFR"KG'J!%@PZBfaeC'9'EfaNCA*3BA4S#rbR!$3`!"K[F'9ZFh0XD@jME(9
 | 
			
		||||
NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD![mTJ!N-!!3Bh*
 | 
			
		||||
jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD![mT3!H-!!0Fh0XCQpXC'9
 | 
			
		||||
bF'&dD!!0Fh0X4QpXC'9b8'&dD![mT!!Q-!!4Eh"PER0cE'C[E'4PFR"KG'J!%@p
 | 
			
		||||
`C@jcFfa'EfaNCA*3BA4S#rbM!#i`!"9dD'9ZCAGQEfaNCA*bC@CPFQ9ZBf8!&A4
 | 
			
		||||
SC8jPGdC[E'4PFP*PCQ9bC@jMC3[mSJ!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!Ib
 | 
			
		||||
K!!!"r+!!!!(mR`!!!IbH!!!1"+`!"a$mR35ir*cmQ`5j",VmQJVmR3!B,Q&PGR4
 | 
			
		||||
[BA"`ER9XE!!!J!!!!*!!!#SU+LS0",J!!@X!!!!!#XJ%Z`)%Z`!#!!8%[!)%[!!
 | 
			
		||||
#"*lmQ3,mQ3!!!IbF!!!#r*X!!"!%Z3!!%!5k!)B!(rbBr*ImP[b9r*6mNrb5!#c
 | 
			
		||||
mNIb3!2b2r)lmMIb-!%rmL`"D!&[mLJ"Nr)N!EIb)r)ImKJ#2r)AmK2b$r),mJIb
 | 
			
		||||
!r(rmI[apr(cmH`#Tr(VmHIair(F![Iaf!-ImG3$8!1)!l!$j!3-"%!%D!5F"-3%
 | 
			
		||||
q!8J"93&I!@`"GJ'$!Bd"QJ'N!E%"Z`()!G)"h`(T!IB#!!)0!KF#*!)Z!MX#43*
 | 
			
		||||
5!P`#D3*c!S!#LJ+A!U%#VJ+m!XB#d`,G!ZS#p!-"!`X$'!-L!bm$130'!e!$A30
 | 
			
		||||
R!h3$IJ1,!jN$S`1`!lS$a`24!pi$l!2f"!-%%`3K"#m%234,"&X%D`4j")X%Q35
 | 
			
		||||
Mr(3%U2acr(,mF3VmQ!!%#Q0[BQS+r*F!'#jPBA*cCQCNFQ&XDA-!!!!!!!!J!'&
 | 
			
		||||
QC()+r*B!"!TMG(Kd#rb9!")`!!GdD'9`BA4S!!GdD'93BA4S#[b8!!3+BA0MFJV
 | 
			
		||||
mN`!%#R4iC'`,r*)!($!!$(4SC@pXC'4PE'PYF`!-G'KP6faN4'9XD@ec#[b4!!3
 | 
			
		||||
+BfPdE32mN!$rr3[mM`!J-!!1G'KPF(*[DQ9MG("KG'J!$R4SC9"bEfTPBh43BA4
 | 
			
		||||
S!rb1rri+r)d!"!T849K8#rb-!"B`!!PdD'9YCA"KG'J!#A4SC8eP8'&dD![mL`!
 | 
			
		||||
Q-!!4D@jME(9NC@C[E'4PFR"KG'J!%@PZBfaeC'9'EfaNCA*3BA4S#rb+!$3`!"K
 | 
			
		||||
[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&
 | 
			
		||||
dD![mL3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD![mL!!
 | 
			
		||||
H-!!0Fh0XCQpXC'9bF'&dD!!0Fh0X4QpXC'9b8'&dD![mK`!Q-!!4Eh"PER0cE'C
 | 
			
		||||
[E'4PFR"KG'J!%@p`C@jcFfa'EfaNCA*3BA4S#[b'!!3+BfC[E!VmK3!B,QeTFf0
 | 
			
		||||
cE'0d+LSU+J!!!!!!!*!!!#SU+LS+r)3!"!TcC@aP#[b$!"JZBfpbC@4PE'mU+LS
 | 
			
		||||
U!!!!!!!!N!!!+LSU+J(mJJ!!![b"!!!+r)!!"!TVEf0X#[ar!!3+D@jcD!2mIJ!
 | 
			
		||||
%#[ap!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!VmI!!%#R*cE(3,r(X!,M!
 | 
			
		||||
!&A4SC@jPGfC[E'4PFR*PCQ9bC@jMC3!9G'KP6Q9h4QpXC'9b8Q9QCA*PEQ0P#[a
 | 
			
		||||
k!!3+F'jKE3VmH3!%#Q&XD@%+r(J!"!TdEb!J#[ah!!3+CQPXC32mGJ!'#rae!"3
 | 
			
		||||
`!!KdC@e`F'&dD!!)G'9YF&"KG'J+r(3!"!TLG'jc#[ac!!3+CfPfG32mFJ!&#[a
 | 
			
		||||
a!"JZFhPcEf4XEfGKFfYb!!!!!!!!!!"849K8%IbD#XRJ%JUYi1%TDJ`!!LrM*N9
 | 
			
		||||
4e%r&jLa&edrSaHBX4Nr%@qPF@eTVA&VU-NAE6m4Ek9aE@QYF@Z`bl5C&hNr,lbA
 | 
			
		||||
Y*N9J!""2bf%!%59K!")Pl5C&B!!66mYK!"3Pl5C&B!!96mYK!"BPl5C&B!!A6m[
 | 
			
		||||
Y*N9J!"K2amAQ,%C2&!!L+Q%!'9m!%#pK!"PK!"S[DJ`!'dmUB3!F,'S-!"eA!!K
 | 
			
		||||
B!"i!(fK2+Q%!)'%!'@%!)5TK!"PI!"![B3!L$!!M6em!*%9J!#92A`!PDJ`!'dp
 | 
			
		||||
K!#BUB3!F,'%!*ba'6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"R1,f%!+Q%!+bp
 | 
			
		||||
K!#`-!#02A`!9B3!Y*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,Lp
 | 
			
		||||
K!#TK!#m[B3!X$!!M6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3!
 | 
			
		||||
`,f%!,!`!)dpI!"9K!$%P4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!
 | 
			
		||||
Z,f%!+Q%!-LpK!#`-!#02A`!9B3!c*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!
 | 
			
		||||
T+Q%!'9m!,LpK!#TK!$3[B3!X$!!M6em!&@%!059&B!!Z6bTK!#"K!#KK!#%UB3!
 | 
			
		||||
CA`!6,f%!+5TK!"PI!#i[B3!UB3!f,f%!,!`!)dpI!"9K!$FP4@!!,NmUB3!JB3!
 | 
			
		||||
SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!1#pK!#`-!#02A`!9B3!j*89J!#j
 | 
			
		||||
2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!$S[B3!X$!!M6em!&@%
 | 
			
		||||
!1b9&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3!m,f%!,!`
 | 
			
		||||
!)dpI!"9K!$dP4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%
 | 
			
		||||
!2LpK!#`-!#02A`!9B3!r*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m
 | 
			
		||||
!,LpK!#TK!%![B3!X$!!M6em!&@%!359&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%
 | 
			
		||||
!+5TK!"PI!#i[B3!UB3"#,f%!,!`!)dpI!"9K!%-P4@!!,NmUB3!JB3!SB3!K+Q%
 | 
			
		||||
!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!4#pK!#`-!#02A`!9B3"&*89J!#j2+Q%!)'%
 | 
			
		||||
!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!%B[B3!X$!!M6em!&@%!4b9&B!!
 | 
			
		||||
Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"),f%!,!`!)dpI!"9
 | 
			
		||||
K!%NP4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!5LpK!#`
 | 
			
		||||
-!#02A`!9B3",*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#T
 | 
			
		||||
K!%`[B3!X$!!M6em!&@%!659&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"P
 | 
			
		||||
I!#i[B3!UB3"1,f%!,!`!)dpI!"9K!%mP4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bp
 | 
			
		||||
K!#NUB3!CA`!Z,f%!+Q%!8#pK!#`-!#02A`!9B3"4*89J!#j2+Q%!)'%!+'%!)5T
 | 
			
		||||
K!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!&)[B3!X$!!M6em!&@%!8b9&B!!Z6bTK!#"
 | 
			
		||||
K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"8,f%!,!`!)dpI!"9K!&8P4@!
 | 
			
		||||
!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!9LpK!#`-!#02A`!
 | 
			
		||||
9B3"A*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!&J[B3!
 | 
			
		||||
X$!!M6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"C,f%!,!`!)dp
 | 
			
		||||
I!"9K!&SP4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!@bp
 | 
			
		||||
K!#`-!#02A`!9B3"F*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,Lp
 | 
			
		||||
K!#TK!&d[B3!X$!!M6em!&@%!AL9&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5T
 | 
			
		||||
K!"PI!#i[B3!UB3"I,f%!,!`!)dpI!"9K!'!P4@!!,NmUB3!JB3!SB3!K+Q%!'9m
 | 
			
		||||
!%bpK!#NUB3!CA`!Z,f%!+Q%!B5pK!#`-!#02A`!9B3"L*89J!#j2+Q%!)'%!+'%
 | 
			
		||||
!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!'-[B3!X$!!M6em!&@%!C#9&B!!Z6bT
 | 
			
		||||
K!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"P,f%!,!`!)dpI!"9K!'B
 | 
			
		||||
P4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!CbpK!#`-!#0
 | 
			
		||||
2A`!9B3"S*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!'N
 | 
			
		||||
[B3!X$!!M6em!&@%!DL9&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i
 | 
			
		||||
[B3!UB3"V,f%!,!`!)dmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%
 | 
			
		||||
!E#pK!#`-!#02A`!9B3"Y*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m
 | 
			
		||||
!,LpK!#TK!'i[B3!X$!!M6em!&@%!Eb9&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%
 | 
			
		||||
!+5TK!"PI!#i[B3!UB3"`,f%!,!`!)dpI!"9K!(%P4@!!,NmUB3!JB3!SB3!K+Q%
 | 
			
		||||
!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!FLpK!#`-!#02+Q%!)'%!+'%!)5TK!"PI!"-
 | 
			
		||||
[B3!T+Q%!'9m!,LpK!#TK!(-[B3!X$!!M6em!&@%!G#9&B!!Z6bTK!#"K!#KK!#%
 | 
			
		||||
UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"e,f%!,!`!)dmUB3!JB3!SB3!K+Q%!'9m
 | 
			
		||||
!%bpK!#NUB3!CA`!A,f%!+Q%!GLpK!#`-!#02+Q%!)'%!+'%!)5TK!"PI!"-[B3!
 | 
			
		||||
T+Q%!'9m!&bpK!#TK!(F[B3!X$!!M6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"P
 | 
			
		||||
I!"F[B3!UB3"i,f%!,!`!)dmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!A,f%
 | 
			
		||||
!+Q%!H5pK!#`-!#02+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!&bpK!#TK!(S
 | 
			
		||||
[B3!X$!!M6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!"8[B3!UB3"l,f%!,!`
 | 
			
		||||
!)dmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!9,f%!+Q%!I#pK!#`-!#02+Q%
 | 
			
		||||
!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!&5pK!#TK!(d[B3!X$!!M6bTK!#"K!#K
 | 
			
		||||
K!#%UB3!CA`!6,f%!+5TK!"PI!"J[B3!UB3"q,f%!,!`!)dmUB3!JB3!SB3!K+Q%
 | 
			
		||||
!'9m!%bpK!#NUB3!CA`!B,f%!+Q%!IbpK!#`-!#028&92B3#!B3#"B3##DhCK!)0
 | 
			
		||||
K!)4K!#)-!)82$!5Y!&%!5deKBfPZG'pcD#")4$T%CA0VG'p`)%C[E'4PFMT*EQ0
 | 
			
		||||
[E@PZCcT[F'9ZFh0X,90139!Y-6Nj16%b-6%k6@&M6e-kE@YXD@jVFbjKF`!#!!!
 | 
			
		||||
1"+i!!J6mF!5p!ra`!!%1",d!!3!%[J`%[J!'!!!!!J!!$J5[!!)%r'm%[`2mE`!
 | 
			
		||||
%$J5r!!3!"-!%`36#"---"-!!%J!-6@&MD@jdEh0S)%K%!!)!!!`%`3!8!!j%CA0
 | 
			
		||||
VG'p`)%C[E'4PFJ!#!!!-"-)!$J!)5@jMEfeTEQF!!J!!$!6$!"X!&@p`C@jcFf`
 | 
			
		||||
Y8dj"8#da16Nj-6)a-3!#!!!-",!!4J"!6@&MD@jdEh0S)%K%1N4PFfYdEh!J4Qp
 | 
			
		||||
XC'9b1NPZBfpYD@jR1Qp`C@jcFf`Y8dj"8#da16Nj-6)a-6T0B@028`!#!!!-",%
 | 
			
		||||
!5!"#6@&MD@jdEh0S)%K%1N4PFfYdEh!J4QpXC'9b1NPZBfpYD@jR1Qp`C@jcFf`
 | 
			
		||||
Y8dj"8#da16Nj-6)a-6TTEQ0XG@4P!!)!!!`%XJ"3!%T0B@0TER4[FfJJ5%3k4'9
 | 
			
		||||
cDh4[F#"'EfaNCA)k5@jMEfeTEQFkEh"PER0cE#e66N&3,6%j16Na-M%a1QPZBfa
 | 
			
		||||
eC'8kEh"PER0cE!!#!!!-",-!4`""6@&MD@jdEh0S)%K%1N4PFfYdEh!J4QpXC'9
 | 
			
		||||
b1NPZBfpYD@jR1Qp`C@jcFf`Y8dj"8#da16Nj-6)a-6TMFRP`G'm!!J!!$!5d!%3
 | 
			
		||||
!2NeKBfPZG'pcD#")4$T%CA0VG'p`)%C[E'4PFMT*EQ0[E@PZCcT[F'9ZFh0X,90
 | 
			
		||||
139!Y-6Nj16%b-6%kFh0X!!)!!!`%Y3"!!$T0B@0TER4[FfJJ5%3k4'9cDh4[F#"
 | 
			
		||||
'EfaNCA)k5@jMEfeTEQFkEh"PER0cE#e66N&3,6%j16Na-M%a!!)!!!i%YJ!"&!6
 | 
			
		||||
%$J6%!!-B"-AmEJ6'$J6&!!-B"-ImE36)$J6(!!-B"-RmE!6+$J6*!!-B!"rmD`6
 | 
			
		||||
,#[aV!!3+BfC[E!`%b`!1!!K*EQ0[E@PZC`!#!!!+r'`!"!TMCQpX$!6+!"X!&@p
 | 
			
		||||
`C@jcFf`Y8dj"8#da16Nj-6)a-3!#!!!+r'd!"!TMCQpX$!6)!!d!"fPZBfaeC'8
 | 
			
		||||
!!J!!#[aZ!!3+BfC[E!`%aJ!9!!peER4TG'aPC#"QEfaNCA)!!J!!$!5h!%i!5%e
 | 
			
		||||
KBfPZG'pcD#")4$T%CA0VG'p`)%C[E'4PFMT*EQ0[E@PZCcT[F'9ZFh0X,90139!
 | 
			
		||||
Y-6Nj16%b-6%kBh*jF(4[1RJe-$Pf-`!#!!!"r,%!!!(mX!!!!Ib[!!!"r+i!!'&
 | 
			
		||||
cBh)!!3!-qYlHV3!!!3!!!*G#!!#@3J!!!AB!!$-8-0J!!!!F!AB!$h0MFhS!!!#
 | 
			
		||||
#6Np853!!!)jcBh"d!!!!QP4&@&3!!3#QFh4jE!!!!,j$6d4&!!%!bN*14%`!!!$
 | 
			
		||||
LBA"XG!!!!1j'8N9'!!!!qNP$6L-!!!%'D@0X0!!!!4*TBh-M!!!"(QPMFc3!!!%
 | 
			
		||||
UD'CNFJ!!!6C659T&!!!"3PG3Eh-!!!&1!!$rr`!!!!!!!!!!!)$rre!!!"i!!!!
 | 
			
		||||
!!)$rr`!!"cJ#DH#m"'Mrr`!!!*S!!!!!%iRrr`!!"Pi!!!!!"'Mrr`!!!53!!!!
 | 
			
		||||
!!!$rrb!!!9)!!!!!!!(rra3!!@i#DG`%!)$rr`!!!Pi#DH"X!!$rr`!!!Ri!!!!
 | 
			
		||||
!!)$rr`!!!S-#DH"d!*Err`!!!Si!!!!!!*Err`!!!j)!!!!!!*Err`!!"CB#DH%
 | 
			
		||||
i!*Err`!!"GS#DH%dkF$rr`!!"[`!!!!!rrrrr`!!"a)!!!!!!)$rr`!!"b!!!!!
 | 
			
		||||
!*4S:
 | 
			
		||||
@@ -1,126 +0,0 @@
 | 
			
		||||
/* MacOS/opensslconf.h */
 | 
			
		||||
 | 
			
		||||
#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
 | 
			
		||||
# if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
 | 
			
		||||
#  define OPENSSLDIR "/usr/local/ssl"
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)
 | 
			
		||||
# define IDEA_INT unsigned int
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_MD2_H) && !defined(MD2_INT)
 | 
			
		||||
# define MD2_INT unsigned int
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_RC2_H) && !defined(RC2_INT)
 | 
			
		||||
/* I need to put in a mod for the alpha - eay */
 | 
			
		||||
# define RC2_INT unsigned int
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_RC4_H)
 | 
			
		||||
# if !defined(RC4_INT)
 | 
			
		||||
/*
 | 
			
		||||
 * using int types make the structure larger but make the code faster on most
 | 
			
		||||
 * boxes I have tested - up to %20 faster.
 | 
			
		||||
 */
 | 
			
		||||
/*-
 | 
			
		||||
 * I don't know what does "most" mean, but declaring "int" is a must on:
 | 
			
		||||
 * - Intel P6 because partial register stalls are very expensive;
 | 
			
		||||
 * - elder Alpha because it lacks byte load/store instructions;
 | 
			
		||||
 */
 | 
			
		||||
#  define RC4_INT unsigned char
 | 
			
		||||
# endif
 | 
			
		||||
# if !defined(RC4_CHUNK)
 | 
			
		||||
/*
 | 
			
		||||
 * This enables code handling data aligned at natural CPU word
 | 
			
		||||
 * boundary. See crypto/rc4/rc4_enc.c for further details.
 | 
			
		||||
 */
 | 
			
		||||
#  define RC4_CHUNK unsigned long
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_DES_H) && !defined(DES_LONG)
 | 
			
		||||
/*
 | 
			
		||||
 * If this is set to 'unsigned int' on a DEC Alpha, this gives about a %20
 | 
			
		||||
 * speed up (longs are 8 bytes, int's are 4).
 | 
			
		||||
 */
 | 
			
		||||
# ifndef DES_LONG
 | 
			
		||||
#  define DES_LONG unsigned long
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)
 | 
			
		||||
# define CONFIG_HEADER_BN_H
 | 
			
		||||
# if __option(longlong)
 | 
			
		||||
#  define BN_LLONG
 | 
			
		||||
# else
 | 
			
		||||
#  undef BN_LLONG
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
/* Should we define BN_DIV2W here? */
 | 
			
		||||
 | 
			
		||||
/* Only one for the following should be defined */
 | 
			
		||||
/*
 | 
			
		||||
 * The prime number generation stuff may not work when EIGHT_BIT but I don't
 | 
			
		||||
 * care since I've only used this mode for debuging the bignum libraries
 | 
			
		||||
 */
 | 
			
		||||
# undef SIXTY_FOUR_BIT_LONG
 | 
			
		||||
# undef SIXTY_FOUR_BIT
 | 
			
		||||
# define THIRTY_TWO_BIT
 | 
			
		||||
# undef SIXTEEN_BIT
 | 
			
		||||
# undef EIGHT_BIT
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H)
 | 
			
		||||
# define CONFIG_HEADER_RC4_LOCL_H
 | 
			
		||||
/*
 | 
			
		||||
 * if this is defined data[i] is used instead of *data, this is a %20 speedup
 | 
			
		||||
 * on x86
 | 
			
		||||
 */
 | 
			
		||||
# undef RC4_INDEX
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
 | 
			
		||||
# define CONFIG_HEADER_BF_LOCL_H
 | 
			
		||||
# define BF_PTR
 | 
			
		||||
#endif                          /* HEADER_BF_LOCL_H */
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)
 | 
			
		||||
# define CONFIG_HEADER_DES_LOCL_H
 | 
			
		||||
/*
 | 
			
		||||
 * the following is tweaked from a config script, that is why it is a
 | 
			
		||||
 * protected undef/define
 | 
			
		||||
 */
 | 
			
		||||
# ifndef DES_PTR
 | 
			
		||||
#  define DES_PTR
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This helps C compiler generate the correct code for multiple functional
 | 
			
		||||
 * units.  It reduces register dependancies at the expense of 2 more
 | 
			
		||||
 * registers
 | 
			
		||||
 */
 | 
			
		||||
# ifndef DES_RISC1
 | 
			
		||||
#  define DES_RISC1
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# ifndef DES_RISC2
 | 
			
		||||
#  undef DES_RISC2
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# if defined(DES_RISC1) && defined(DES_RISC2)
 | 
			
		||||
YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED ! !!!!
 | 
			
		||||
# endif
 | 
			
		||||
/*
 | 
			
		||||
 * Unroll the inner loop, this sometimes helps, sometimes hinders. Very mucy
 | 
			
		||||
 * CPU dependant
 | 
			
		||||
 */
 | 
			
		||||
# ifndef DES_UNROLL
 | 
			
		||||
#  define DES_UNROLL
 | 
			
		||||
# endif
 | 
			
		||||
#endif                          /* HEADER_DES_LOCL_H */
 | 
			
		||||
#ifndef __POWERPC__
 | 
			
		||||
# define MD32_XARRAY
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										638
									
								
								Makefile.fips
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										638
									
								
								Makefile.fips
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,638 @@
 | 
			
		||||
##
 | 
			
		||||
## Makefile for OpenSSL: fipscanister.o only
 | 
			
		||||
##
 | 
			
		||||
 | 
			
		||||
VERSION=fips-2.0-test
 | 
			
		||||
MAJOR=
 | 
			
		||||
MINOR=
 | 
			
		||||
SHLIB_VERSION_NUMBER=
 | 
			
		||||
SHLIB_VERSION_HISTORY=
 | 
			
		||||
SHLIB_MAJOR=
 | 
			
		||||
SHLIB_MINOR=
 | 
			
		||||
SHLIB_EXT=
 | 
			
		||||
PLATFORM=dist
 | 
			
		||||
OPTIONS=
 | 
			
		||||
CONFIGURE_ARGS=
 | 
			
		||||
SHLIB_TARGET=
 | 
			
		||||
 | 
			
		||||
# HERE indicates where this Makefile lives.  This can be used to indicate
 | 
			
		||||
# where sub-Makefiles are expected to be.  Currently has very limited usage,
 | 
			
		||||
# and should probably not be bothered with at all.
 | 
			
		||||
HERE=.
 | 
			
		||||
 | 
			
		||||
# INSTALL_PREFIX is for package builders so that they can configure
 | 
			
		||||
# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
 | 
			
		||||
# Normally it is left empty.
 | 
			
		||||
INSTALL_PREFIX=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
 | 
			
		||||
# Do not edit this manually. Use Configure --openssldir=DIR do change this!
 | 
			
		||||
OPENSSLDIR=/usr/local/ssl
 | 
			
		||||
 | 
			
		||||
# NO_IDEA - Define to build without the IDEA algorithm
 | 
			
		||||
# NO_RC4  - Define to build without the RC4 algorithm
 | 
			
		||||
# NO_RC2  - Define to build without the RC2 algorithm
 | 
			
		||||
# THREADS - Define when building with threads, you will probably also need any
 | 
			
		||||
#           system defines as well, i.e. _REENTERANT for Solaris 2.[34]
 | 
			
		||||
# TERMIO  - Define the termio terminal subsystem, needed if sgtty is missing.
 | 
			
		||||
# TERMIOS - Define the termios terminal subsystem, Silicon Graphics.
 | 
			
		||||
# LONGCRYPT - Define to use HPUX 10.x's long password modification to crypt(3).
 | 
			
		||||
# DEVRANDOM - Give this the value of the 'random device' if your OS supports
 | 
			
		||||
#           one.  32 bytes will be read from this when the random
 | 
			
		||||
#           number generator is initalised.
 | 
			
		||||
# SSL_FORBID_ENULL - define if you want the server to be not able to use the
 | 
			
		||||
#           NULL encryption ciphers.
 | 
			
		||||
#
 | 
			
		||||
# LOCK_DEBUG - turns on lots of lock debug output :-)
 | 
			
		||||
# REF_CHECK - turn on some xyz_free() assertions.
 | 
			
		||||
# REF_PRINT - prints some stuff on structure free.
 | 
			
		||||
# CRYPTO_MDEBUG - turns on my 'memory leak' detecting stuff
 | 
			
		||||
# MFUNC - Make all Malloc/Free/Realloc calls call
 | 
			
		||||
#       CRYPTO_malloc/CRYPTO_free/CRYPTO_realloc which can be setup to
 | 
			
		||||
#       call application defined callbacks via CRYPTO_set_mem_functions()
 | 
			
		||||
# MD5_ASM needs to be defined to use the x86 assembler for MD5
 | 
			
		||||
# SHA1_ASM needs to be defined to use the x86 assembler for SHA1
 | 
			
		||||
# RMD160_ASM needs to be defined to use the x86 assembler for RIPEMD160
 | 
			
		||||
# Do not define B_ENDIAN or L_ENDIAN if 'unsigned long' == 8.  It must
 | 
			
		||||
# equal 4.
 | 
			
		||||
# PKCS1_CHECK - pkcs1 tests.
 | 
			
		||||
 | 
			
		||||
CC= cc
 | 
			
		||||
CFLAG= -O
 | 
			
		||||
DEPFLAG= 
 | 
			
		||||
PEX_LIBS= 
 | 
			
		||||
EX_LIBS= 
 | 
			
		||||
EXE_EXT= 
 | 
			
		||||
ARFLAGS=
 | 
			
		||||
AR=ar $(ARFLAGS) r
 | 
			
		||||
RANLIB= ranlib
 | 
			
		||||
NM= nm
 | 
			
		||||
PERL= perl
 | 
			
		||||
TAR= tar
 | 
			
		||||
TARFLAGS= --no-recursion
 | 
			
		||||
MAKEDEPPROG=makedepend
 | 
			
		||||
LIBDIR=lib
 | 
			
		||||
 | 
			
		||||
# We let the C compiler driver to take care of .s files. This is done in
 | 
			
		||||
# order to be excused from maintaining a separate set of architecture
 | 
			
		||||
# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
 | 
			
		||||
# gcc, then the driver will automatically translate it to -xarch=v8plus
 | 
			
		||||
# and pass it down to assembler.
 | 
			
		||||
#AS=$(CC) -c
 | 
			
		||||
ASFLAG=$(CFLAG)
 | 
			
		||||
 | 
			
		||||
# For x86 assembler: Set PROCESSOR to 386 if you want to support
 | 
			
		||||
# the 80386.
 | 
			
		||||
PROCESSOR=
 | 
			
		||||
 | 
			
		||||
# CPUID module collects small commonly used assembler snippets
 | 
			
		||||
CPUID_OBJ= 
 | 
			
		||||
BN_ASM= bn_asm.o
 | 
			
		||||
DES_ENC= des_enc.o fcrypt_b.o
 | 
			
		||||
AES_ENC= aes_core.o aes_cbc.o
 | 
			
		||||
BF_ENC= bf_enc.o
 | 
			
		||||
CAST_ENC= c_enc.o
 | 
			
		||||
RC4_ENC= rc4_enc.o
 | 
			
		||||
RC5_ENC= rc5_enc.o
 | 
			
		||||
MD5_ASM_OBJ= 
 | 
			
		||||
SHA1_ASM_OBJ= 
 | 
			
		||||
RMD160_ASM_OBJ= 
 | 
			
		||||
WP_ASM_OBJ=
 | 
			
		||||
CMLL_ENC=
 | 
			
		||||
MODES_ASM_OBJ=
 | 
			
		||||
PERLASM_SCHEME=
 | 
			
		||||
 | 
			
		||||
# KRB5 stuff
 | 
			
		||||
KRB5_INCLUDES=
 | 
			
		||||
LIBKRB5=
 | 
			
		||||
 | 
			
		||||
# Zlib stuff
 | 
			
		||||
ZLIB_INCLUDE=
 | 
			
		||||
LIBZLIB=
 | 
			
		||||
 | 
			
		||||
# This is the location of fipscanister.o and friends.
 | 
			
		||||
# The FIPS module build will place it $(INSTALLTOP)/lib
 | 
			
		||||
# but since $(INSTALLTOP) can only take the default value
 | 
			
		||||
# when the module is built it will be in /usr/local/ssl/lib
 | 
			
		||||
# $(INSTALLTOP) for this build may be different so hard
 | 
			
		||||
# code the path.
 | 
			
		||||
 | 
			
		||||
FIPSLIBDIR=/usr/local/ssl/$(LIBDIR)/
 | 
			
		||||
 | 
			
		||||
# This is set to "y" if fipscanister.o is compiled internally as
 | 
			
		||||
# opposed to coming from an external validated location.
 | 
			
		||||
 | 
			
		||||
FIPSCANISTERINTERNAL=n
 | 
			
		||||
 | 
			
		||||
# This is set if we only build fipscanister.o
 | 
			
		||||
 | 
			
		||||
FIPSCANISTERONLY=y
 | 
			
		||||
 | 
			
		||||
# The location of the library which contains fipscanister.o
 | 
			
		||||
# normally it will be libcrypto unless fipsdso is set in which
 | 
			
		||||
# case it will be libfips. If not compiling in FIPS mode at all
 | 
			
		||||
# this is empty making it a useful test for a FIPS compile.
 | 
			
		||||
 | 
			
		||||
FIPSCANLIB=
 | 
			
		||||
 | 
			
		||||
# Shared library base address. Currently only used on Windows.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
BASEADDR=
 | 
			
		||||
 | 
			
		||||
DIRS=   crypto fips test 
 | 
			
		||||
ENGDIRS= ccgost
 | 
			
		||||
SHLIBDIRS= crypto 
 | 
			
		||||
 | 
			
		||||
# dirs in crypto to build
 | 
			
		||||
SDIRS=  \
 | 
			
		||||
	sha hmac des aes modes \
 | 
			
		||||
	bn ec rsa dsa ecdsa dh \
 | 
			
		||||
	buffer evp ecdh cmac
 | 
			
		||||
# keep in mind that the above list is adjusted by ./Configure
 | 
			
		||||
# according to no-xxx arguments...
 | 
			
		||||
 | 
			
		||||
LINKDIRS=  \
 | 
			
		||||
	objects sha hmac des aes modes \
 | 
			
		||||
	bn ec rsa dsa ecdh cmac ecdsa dh engine \
 | 
			
		||||
	buffer bio stack lhash rand err \
 | 
			
		||||
	evp asn1 ui
 | 
			
		||||
 | 
			
		||||
# tests to perform.  "alltests" is a special word indicating that all tests
 | 
			
		||||
# should be performed.
 | 
			
		||||
TESTS = alltests
 | 
			
		||||
 | 
			
		||||
MAKEFILE= Makefile
 | 
			
		||||
 | 
			
		||||
MANDIR=$(OPENSSLDIR)/man
 | 
			
		||||
MAN1=1
 | 
			
		||||
MAN3=3
 | 
			
		||||
MANSUFFIX=
 | 
			
		||||
HTMLSUFFIX=html
 | 
			
		||||
HTMLDIR=$(OPENSSLDIR)/html
 | 
			
		||||
SHELL=/bin/sh
 | 
			
		||||
 | 
			
		||||
TOP=    .
 | 
			
		||||
ONEDIRS=out tmp
 | 
			
		||||
EDIRS=  times doc bugs util include certs ms shlib mt demos perl sf dep VMS
 | 
			
		||||
WDIRS=  windows
 | 
			
		||||
LIBS=   
 | 
			
		||||
SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
 | 
			
		||||
SHARED_SSL=libssl$(SHLIB_EXT)
 | 
			
		||||
SHARED_LIBS=
 | 
			
		||||
SHARED_LIBS_LINK_EXTS=
 | 
			
		||||
SHARED_LDFLAGS=
 | 
			
		||||
 | 
			
		||||
GENERAL=        Makefile
 | 
			
		||||
BASENAME=       openssl
 | 
			
		||||
NAME=           $(BASENAME)-$(VERSION)
 | 
			
		||||
TARFILE=        openssl-fips-2.0.tar
 | 
			
		||||
WTARFILE=       $(NAME)-win.tar
 | 
			
		||||
EXHEADER=       e_os2.h
 | 
			
		||||
HEADER=         e_os.h
 | 
			
		||||
 | 
			
		||||
all: Makefile build_all openssl.pc libssl.pc libcrypto.pc
 | 
			
		||||
 | 
			
		||||
# as we stick to -e, CLEARENV ensures that local variables in lower
 | 
			
		||||
# Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn
 | 
			
		||||
# shell, which [annoyingly enough] terminates unset with error if VAR
 | 
			
		||||
# is not present:-( TOP= && unset TOP is tribute to HP-UX /bin/sh,
 | 
			
		||||
# which terminates unset with error if no variable was present:-(
 | 
			
		||||
CLEARENV=	TOP= && unset TOP $${LIB+LIB} $${LIBS+LIBS}	\
 | 
			
		||||
		$${INCLUDE+INCLUDE} $${INCLUDES+INCLUDES}	\
 | 
			
		||||
		$${DIR+DIR} $${DIRS+DIRS} $${SRC+SRC}		\
 | 
			
		||||
		$${LIBSRC+LIBSRC} $${LIBOBJ+LIBOBJ} $${ALL+ALL}	\
 | 
			
		||||
		$${EXHEADER+EXHEADER} $${HEADER+HEADER}		\
 | 
			
		||||
		$${GENERAL+GENERAL} $${CFLAGS+CFLAGS}		\
 | 
			
		||||
		$${ASFLAGS+ASFLAGS} $${AFLAGS+AFLAGS}		\
 | 
			
		||||
		$${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS}		\
 | 
			
		||||
		$${SHAREDCMD+SHAREDCMD} $${SHAREDFLAGS+SHAREDFLAGS}	\
 | 
			
		||||
		$${SHARED_LIB+SHARED_LIB} $${LIBEXTRAS+LIBEXTRAS}
 | 
			
		||||
 | 
			
		||||
BUILDENV=	PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
 | 
			
		||||
		CC='$(CC)' CFLAG='$(CFLAG)' 			\
 | 
			
		||||
		ASFLAG='$(CFLAG) -c'			\
 | 
			
		||||
		AR='$(AR)' NM='$(NM)' RANLIB='$(RANLIB)'	\
 | 
			
		||||
		CROSS_COMPILE='$(CROSS_COMPILE)'	\
 | 
			
		||||
		PERL='$(PERL)' ENGDIRS='$(ENGDIRS)'		\
 | 
			
		||||
		SDIRS='$(SDIRS)' LIBRPATH='$(INSTALLTOP)/$(LIBDIR)'	\
 | 
			
		||||
		INSTALL_PREFIX='$(INSTALL_PREFIX)'		\
 | 
			
		||||
		INSTALLTOP='$(INSTALLTOP)' OPENSSLDIR='$(OPENSSLDIR)'	\
 | 
			
		||||
		LIBDIR='$(LIBDIR)'				\
 | 
			
		||||
		MAKEDEPEND='$$$${TOP}/util/domd $$$${TOP} -MD $(MAKEDEPPROG)' \
 | 
			
		||||
		DEPFLAG='-DOPENSSL_NO_DEPRECATED $(DEPFLAG)'	\
 | 
			
		||||
		MAKEDEPPROG='$(MAKEDEPPROG)'			\
 | 
			
		||||
		SHARED_LDFLAGS='$(SHARED_LDFLAGS)'		\
 | 
			
		||||
		KRB5_INCLUDES='$(KRB5_INCLUDES)' LIBKRB5='$(LIBKRB5)'	\
 | 
			
		||||
		ZLIB_INCLUDE='$(ZLIB_INCLUDE)' LIBZLIB='$(LIBZLIB)'	\
 | 
			
		||||
		EXE_EXT='$(EXE_EXT)' SHARED_LIBS='$(SHARED_LIBS)'	\
 | 
			
		||||
		SHLIB_EXT='$(SHLIB_EXT)' SHLIB_TARGET='$(SHLIB_TARGET)'	\
 | 
			
		||||
		PEX_LIBS='$(PEX_LIBS)' EX_LIBS='$(EX_LIBS)'	\
 | 
			
		||||
		CPUID_OBJ='$(CPUID_OBJ)'			\
 | 
			
		||||
		BN_ASM='$(BN_ASM)' DES_ENC='$(DES_ENC)' 	\
 | 
			
		||||
		AES_ENC='$(AES_ENC)' CMLL_ENC='$(CMLL_ENC)'	\
 | 
			
		||||
		BF_ENC='$(BF_ENC)' CAST_ENC='$(CAST_ENC)'	\
 | 
			
		||||
		RC4_ENC='$(RC4_ENC)' RC5_ENC='$(RC5_ENC)'	\
 | 
			
		||||
		SHA1_ASM_OBJ='$(SHA1_ASM_OBJ)'			\
 | 
			
		||||
		MD5_ASM_OBJ='$(MD5_ASM_OBJ)'			\
 | 
			
		||||
		RMD160_ASM_OBJ='$(RMD160_ASM_OBJ)'		\
 | 
			
		||||
		WP_ASM_OBJ='$(WP_ASM_OBJ)'			\
 | 
			
		||||
		MODES_ASM_OBJ='$(MODES_ASM_OBJ)'		\
 | 
			
		||||
		PERLASM_SCHEME='$(PERLASM_SCHEME)'		\
 | 
			
		||||
		FIPSLIBDIR='${FIPSLIBDIR}'			\
 | 
			
		||||
		FIPSCANLIB="$${FIPSCANLIB:-$(FIPSCANLIB)}"	\
 | 
			
		||||
		FIPSCANISTERINTERNAL='${FIPSCANISTERINTERNAL}'	\
 | 
			
		||||
		FIPSCANISTERONLY='${FIPSCANISTERONLY}'	\
 | 
			
		||||
		FIPS_EX_OBJ='${FIPS_EX_OBJ}'	\
 | 
			
		||||
		THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
 | 
			
		||||
# MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors,
 | 
			
		||||
# which in turn eliminates ambiguities in variable treatment with -e.
 | 
			
		||||
 | 
			
		||||
# BUILD_CMD is a generic macro to build a given target in a given
 | 
			
		||||
# subdirectory.  The target must be given through the shell variable
 | 
			
		||||
# `target' and the subdirectory to build in must be given through `dir'.
 | 
			
		||||
# This macro shouldn't be used directly, use RECURSIVE_BUILD_CMD or
 | 
			
		||||
# BUILD_ONE_CMD instead.
 | 
			
		||||
#
 | 
			
		||||
# BUILD_ONE_CMD is a macro to build a given target in a given
 | 
			
		||||
# subdirectory if that subdirectory is part of $(DIRS).  It requires
 | 
			
		||||
# exactly the same shell variables as BUILD_CMD.
 | 
			
		||||
#
 | 
			
		||||
# RECURSIVE_BUILD_CMD is a macro to build a given target in all
 | 
			
		||||
# subdirectories defined in $(DIRS).  It requires that the target
 | 
			
		||||
# is given through the shell variable `target'.
 | 
			
		||||
BUILD_CMD=  if [ -d "$$dir" ]; then \
 | 
			
		||||
	    (	cd $$dir && echo "making $$target in $$dir..." && \
 | 
			
		||||
		$(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. DIR=$$dir $$target \
 | 
			
		||||
	    ) || exit 1; \
 | 
			
		||||
	    fi
 | 
			
		||||
RECURSIVE_BUILD_CMD=for dir in $(DIRS); do $(BUILD_CMD); done
 | 
			
		||||
BUILD_ONE_CMD=\
 | 
			
		||||
	if expr " $(DIRS) " : ".* $$dir " >/dev/null 2>&1; then \
 | 
			
		||||
		$(BUILD_CMD); \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
reflect:
 | 
			
		||||
	@[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)
 | 
			
		||||
 | 
			
		||||
FIPS_EX_OBJ= ../crypto/aes/aes_cfb.o \
 | 
			
		||||
	../crypto/aes/aes_ecb.o \
 | 
			
		||||
	../crypto/aes/aes_ofb.o \
 | 
			
		||||
	../crypto/bn/bn_add.o \
 | 
			
		||||
	../crypto/bn/bn_blind.o \
 | 
			
		||||
	../crypto/bn/bn_ctx.o \
 | 
			
		||||
	../crypto/bn/bn_div.o \
 | 
			
		||||
	../crypto/bn/bn_exp2.o \
 | 
			
		||||
	../crypto/bn/bn_exp.o \
 | 
			
		||||
	../crypto/bn/bn_gcd.o \
 | 
			
		||||
	../crypto/bn/bn_gf2m.o \
 | 
			
		||||
	../crypto/bn/bn_lib.o \
 | 
			
		||||
	../crypto/bn/bn_mod.o \
 | 
			
		||||
	../crypto/bn/bn_mont.o \
 | 
			
		||||
	../crypto/bn/bn_mul.o \
 | 
			
		||||
	../crypto/bn/bn_nist.o \
 | 
			
		||||
	../crypto/bn/bn_prime.o \
 | 
			
		||||
	../crypto/bn/bn_rand.o \
 | 
			
		||||
	../crypto/bn/bn_recp.o \
 | 
			
		||||
	../crypto/bn/bn_shift.o \
 | 
			
		||||
	../crypto/bn/bn_sqr.o \
 | 
			
		||||
	../crypto/bn/bn_word.o \
 | 
			
		||||
	../crypto/bn/bn_x931p.o \
 | 
			
		||||
	../crypto/buffer/buf_str.o \
 | 
			
		||||
	../crypto/cmac/cmac.o \
 | 
			
		||||
	../crypto/cryptlib.o \
 | 
			
		||||
	../crypto/des/cfb64ede.o \
 | 
			
		||||
	../crypto/des/cfb64enc.o \
 | 
			
		||||
	../crypto/des/cfb_enc.o \
 | 
			
		||||
	../crypto/des/ecb3_enc.o \
 | 
			
		||||
	../crypto/des/ofb64ede.o \
 | 
			
		||||
	../crypto/des/fcrypt.o \
 | 
			
		||||
	../crypto/des/set_key.o \
 | 
			
		||||
	../crypto/dh/dh_check.o \
 | 
			
		||||
	../crypto/dh/dh_gen.o \
 | 
			
		||||
	../crypto/dh/dh_key.o \
 | 
			
		||||
	../crypto/dsa/dsa_gen.o \
 | 
			
		||||
	../crypto/dsa/dsa_key.o \
 | 
			
		||||
	../crypto/dsa/dsa_ossl.o \
 | 
			
		||||
	../crypto/ec/ec_curve.o \
 | 
			
		||||
	../crypto/ec/ec_cvt.o \
 | 
			
		||||
	../crypto/ec/ec_key.o \
 | 
			
		||||
	../crypto/ec/ec_lib.o \
 | 
			
		||||
	../crypto/ec/ecp_mont.o \
 | 
			
		||||
	../crypto/ec/ec_mult.o \
 | 
			
		||||
	../crypto/ec/ecp_nist.o \
 | 
			
		||||
	../crypto/ec/ecp_smpl.o \
 | 
			
		||||
	../crypto/ec/ec2_mult.o \
 | 
			
		||||
	../crypto/ec/ec2_smpl.o \
 | 
			
		||||
	../crypto/ecdh/ech_key.o \
 | 
			
		||||
	../crypto/ecdh/ech_ossl.o \
 | 
			
		||||
	../crypto/ecdsa/ecs_ossl.o \
 | 
			
		||||
	../crypto/evp/e_aes.o \
 | 
			
		||||
	../crypto/evp/e_des3.o \
 | 
			
		||||
	../crypto/evp/e_null.o \
 | 
			
		||||
	../crypto/evp/m_sha1.o \
 | 
			
		||||
	../crypto/evp/m_dss1.o \
 | 
			
		||||
	../crypto/evp/m_dss.o \
 | 
			
		||||
	../crypto/evp/m_ecdsa.o \
 | 
			
		||||
	../crypto/hmac/hmac.o \
 | 
			
		||||
	../crypto/modes/cbc128.o \
 | 
			
		||||
	../crypto/modes/ccm128.o \
 | 
			
		||||
	../crypto/modes/cfb128.o \
 | 
			
		||||
	../crypto/modes/ctr128.o \
 | 
			
		||||
	../crypto/modes/gcm128.o \
 | 
			
		||||
	../crypto/modes/ofb128.o \
 | 
			
		||||
	../crypto/modes/xts128.o \
 | 
			
		||||
	../crypto/rsa/rsa_eay.o \
 | 
			
		||||
	../crypto/rsa/rsa_gen.o \
 | 
			
		||||
	../crypto/rsa/rsa_crpt.o \
 | 
			
		||||
	../crypto/rsa/rsa_none.o \
 | 
			
		||||
	../crypto/rsa/rsa_oaep.o \
 | 
			
		||||
	../crypto/rsa/rsa_pk1.o \
 | 
			
		||||
	../crypto/rsa/rsa_pss.o \
 | 
			
		||||
	../crypto/rsa/rsa_ssl.o \
 | 
			
		||||
	../crypto/rsa/rsa_x931.o \
 | 
			
		||||
	../crypto/rsa/rsa_x931g.o \
 | 
			
		||||
	../crypto/sha/sha1dgst.o \
 | 
			
		||||
	../crypto/sha/sha256.o \
 | 
			
		||||
	../crypto/sha/sha512.o \
 | 
			
		||||
	../crypto/thr_id.o \
 | 
			
		||||
	../crypto/uid.o
 | 
			
		||||
 | 
			
		||||
sub_all: build_all
 | 
			
		||||
build_all: build_libs
 | 
			
		||||
 | 
			
		||||
build_libs: build_crypto build_fips
 | 
			
		||||
 | 
			
		||||
build_fips:
 | 
			
		||||
	@dir=fips; target=all; [ -z "$(FIPSCANLIB)" ] || $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
build_crypto:
 | 
			
		||||
	if [ -n "$(FIPSCANLIB)" ]; then \
 | 
			
		||||
		EXCL_OBJ='$(AES_ENC) $(BN_ASM) $(DES_ENC) $(CPUID_OBJ) $(SHA1_ASM_OBJ) $(MODES_ASM_OBJ) $(FIPS_EX_OBJ)' ; export EXCL_OBJ ; \
 | 
			
		||||
		ARX='$(PERL) $${TOP}/util/arx.pl $(AR)' ; \
 | 
			
		||||
	else \
 | 
			
		||||
		ARX='${AR}' ; \
 | 
			
		||||
	fi ; export ARX ; \
 | 
			
		||||
	if [ $(FIPSCANISTERINTERNAL) = "y" ]; then \
 | 
			
		||||
		AS='$(PERL) $${TOP}/util/fipsas.pl $${TOP} $${<} $(CC)' ; \
 | 
			
		||||
	else \
 | 
			
		||||
		AS='$(CC) -c' ; \
 | 
			
		||||
	fi ; export AS ; \
 | 
			
		||||
		dir=crypto; target=fips; $(BUILD_ONE_CMD)
 | 
			
		||||
build_ssl:
 | 
			
		||||
	@dir=ssl; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_engines:
 | 
			
		||||
	@dir=engines; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_apps:
 | 
			
		||||
	@dir=apps; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_tests:
 | 
			
		||||
	@dir=test; target=fipsexe; $(BUILD_ONE_CMD)
 | 
			
		||||
build_algvs:
 | 
			
		||||
	@dir=test; target=fipsalgvs; $(BUILD_ONE_CMD)
 | 
			
		||||
build_tools:
 | 
			
		||||
	@dir=tools; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
all_testapps: build_libs build_testapps
 | 
			
		||||
build_testapps:
 | 
			
		||||
	@dir=crypto; target=testapps; $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
libcrypto$(SHLIB_EXT): libcrypto.a build_fips
 | 
			
		||||
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
			
		||||
		if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
 | 
			
		||||
			FIPSLD_CC="$(CC)"; CC=fips/fipsld; \
 | 
			
		||||
			export CC FIPSLD_CC; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		$(MAKE) SHLIBDIRS=crypto build-shared; \
 | 
			
		||||
	else \
 | 
			
		||||
		echo "There's no support for shared libraries on this platform" >&2; \
 | 
			
		||||
		exit 1; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a
 | 
			
		||||
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
			
		||||
		$(MAKE) SHLIBDIRS=ssl SHLIBDEPS='-lcrypto' build-shared; \
 | 
			
		||||
	else \
 | 
			
		||||
		echo "There's no support for shared libraries on this platform" >&2; \
 | 
			
		||||
		exit 1; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
clean-shared:
 | 
			
		||||
	@set -e; for i in $(SHLIBDIRS); do \
 | 
			
		||||
		if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
 | 
			
		||||
			tmp="$(SHARED_LIBS_LINK_EXTS)"; \
 | 
			
		||||
			for j in $${tmp:-x}; do \
 | 
			
		||||
				( set -x; rm -f lib$$i$$j ); \
 | 
			
		||||
			done; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
 | 
			
		||||
		if [ "$(PLATFORM)" = "Cygwin" ]; then \
 | 
			
		||||
			( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
 | 
			
		||||
		fi; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
link-shared:
 | 
			
		||||
	@ set -e; for i in $(SHLIBDIRS); do \
 | 
			
		||||
		$(MAKE) -f $(HERE)/Makefile.shared -e $(BUILDENV) \
 | 
			
		||||
			LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \
 | 
			
		||||
			LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \
 | 
			
		||||
			symlink.$(SHLIB_TARGET); \
 | 
			
		||||
		libs="$$libs -l$$i"; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
build-shared: do_$(SHLIB_TARGET) link-shared
 | 
			
		||||
 | 
			
		||||
do_$(SHLIB_TARGET):
 | 
			
		||||
	@ set -e; libs='-L. $(SHLIBDEPS)'; for i in $(SHLIBDIRS); do \
 | 
			
		||||
		if [ "$$i" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
			
		||||
			libs="$(LIBKRB5) $$libs"; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		$(CLEARENV) && $(MAKE) -f Makefile.shared -e $(BUILDENV) \
 | 
			
		||||
			LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \
 | 
			
		||||
			LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \
 | 
			
		||||
			LIBDEPS="$$libs $(EX_LIBS)" \
 | 
			
		||||
			link_a.$(SHLIB_TARGET); \
 | 
			
		||||
		libs="-l$$i $$libs"; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
libcrypto.pc: Makefile
 | 
			
		||||
	@ ( echo 'prefix=$(INSTALLTOP)'; \
 | 
			
		||||
	    echo 'exec_prefix=$${prefix}'; \
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
 | 
			
		||||
	    echo 'includedir=$${prefix}/include'; \
 | 
			
		||||
	    echo ''; \
 | 
			
		||||
	    echo 'Name: OpenSSL-libcrypto'; \
 | 
			
		||||
	    echo 'Description: OpenSSL cryptography library'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lcrypto $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc
 | 
			
		||||
 | 
			
		||||
libssl.pc: Makefile
 | 
			
		||||
	@ ( echo 'prefix=$(INSTALLTOP)'; \
 | 
			
		||||
	    echo 'exec_prefix=$${prefix}'; \
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
 | 
			
		||||
	    echo 'includedir=$${prefix}/include'; \
 | 
			
		||||
	    echo ''; \
 | 
			
		||||
	    echo 'Name: OpenSSL'; \
 | 
			
		||||
	    echo 'Description: Secure Sockets Layer and cryptography libraries'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
 | 
			
		||||
 | 
			
		||||
openssl.pc: Makefile
 | 
			
		||||
	@ ( echo 'prefix=$(INSTALLTOP)'; \
 | 
			
		||||
	    echo 'exec_prefix=$${prefix}'; \
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
 | 
			
		||||
	    echo 'includedir=$${prefix}/include'; \
 | 
			
		||||
	    echo ''; \
 | 
			
		||||
	    echo 'Name: OpenSSL'; \
 | 
			
		||||
	    echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
 | 
			
		||||
 | 
			
		||||
Makefile: Makefile.fips Configure config
 | 
			
		||||
	@echo "Makefile is older than Makefile.org, Configure or config."
 | 
			
		||||
	@echo "Reconfigure the source tree (via './config' or 'perl Configure'), please."
 | 
			
		||||
	@false
 | 
			
		||||
 | 
			
		||||
libclean:
 | 
			
		||||
	rm -f *.map *.so *.so.* *.dll engines/*.so engines/*.dll *.a engines/*.a */lib */*/lib
 | 
			
		||||
 | 
			
		||||
clean:	libclean
 | 
			
		||||
	rm -f shlib/*.o *.o core a.out fluff testlog make.log cctest cctest.c
 | 
			
		||||
	@set -e; target=clean; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
	rm -f $(LIBS)
 | 
			
		||||
	rm -f openssl.pc libssl.pc libcrypto.pc
 | 
			
		||||
	rm -f speed.* .pure
 | 
			
		||||
	rm -f $(TARFILE)
 | 
			
		||||
	@set -e; for i in $(ONEDIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	rm -fr $$i/*; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
makefile.one: files
 | 
			
		||||
	$(PERL) util/mk1mf.pl >makefile.one; \
 | 
			
		||||
	sh util/do_ms.sh
 | 
			
		||||
 | 
			
		||||
files:
 | 
			
		||||
	$(PERL) $(TOP)/util/files.pl Makefile > $(TOP)/MINFO
 | 
			
		||||
	@set -e; target=files; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
links:
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
 | 
			
		||||
	@$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
 | 
			
		||||
	@set -e; dir=fips target=links; $(BUILD_ONE_CMD)
 | 
			
		||||
	@(cd crypto ; TEST='' SDIRS='$(LINKDIRS)' $(MAKE) -e links)
 | 
			
		||||
 | 
			
		||||
gentests:
 | 
			
		||||
	@(cd test && echo "generating dummy tests (if needed)..." && \
 | 
			
		||||
	$(CLEARENV) && $(MAKE) -e $(BUILDENV) TESTS='$(TESTS)' OPENSSL_DEBUG_MEMORY=on generate );
 | 
			
		||||
 | 
			
		||||
dclean:
 | 
			
		||||
	rm -rf *.bak include/openssl certs/.0
 | 
			
		||||
	@set -e; target=dclean; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
test:   tests
 | 
			
		||||
 | 
			
		||||
tests:
 | 
			
		||||
	@echo "Not implemented in FIPS build" ; false
 | 
			
		||||
 | 
			
		||||
report:
 | 
			
		||||
	@$(PERL) util/selftest.pl
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	@echo make depend not supported ; false
 | 
			
		||||
 | 
			
		||||
lint:
 | 
			
		||||
	@set -e; target=lint; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
tags:
 | 
			
		||||
	rm -f TAGS
 | 
			
		||||
	find . -name '[^.]*.[ch]' | xargs etags -a
 | 
			
		||||
 | 
			
		||||
errors:
 | 
			
		||||
	$(PERL) util/mkerr.pl -recurse -write
 | 
			
		||||
	(cd engines; $(MAKE) PERL=$(PERL) errors)
 | 
			
		||||
	$(PERL) util/ck_errf.pl -strict */*.c */*/*.c
 | 
			
		||||
 | 
			
		||||
stacks:
 | 
			
		||||
	$(PERL) util/mkstack.pl -write
 | 
			
		||||
 | 
			
		||||
util/libeay.num::
 | 
			
		||||
	$(PERL) util/mkdef.pl crypto update
 | 
			
		||||
 | 
			
		||||
util/ssleay.num::
 | 
			
		||||
	$(PERL) util/mkdef.pl ssl update
 | 
			
		||||
 | 
			
		||||
crypto/objects/obj_dat.h: crypto/objects/obj_dat.pl crypto/objects/obj_mac.h
 | 
			
		||||
	$(PERL) crypto/objects/obj_dat.pl crypto/objects/obj_mac.h crypto/objects/obj_dat.h
 | 
			
		||||
crypto/objects/obj_mac.h: crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num
 | 
			
		||||
	$(PERL) crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num crypto/objects/obj_mac.h
 | 
			
		||||
crypto/objects/obj_xref.h: crypto/objects/objxref.pl crypto/objects/obj_xref.txt crypto/objects/obj_mac.num
 | 
			
		||||
	$(PERL) crypto/objects/objxref.pl crypto/objects/obj_mac.num crypto/objects/obj_xref.txt >crypto/objects/obj_xref.h
 | 
			
		||||
 | 
			
		||||
apps/openssl-vms.cnf: apps/openssl.cnf
 | 
			
		||||
	$(PERL) VMS/VMSify-conf.pl < apps/openssl.cnf > apps/openssl-vms.cnf
 | 
			
		||||
 | 
			
		||||
crypto/bn/bn_prime.h: crypto/bn/bn_prime.pl
 | 
			
		||||
	$(PERL) crypto/bn/bn_prime.pl >crypto/bn/bn_prime.h
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TABLE: Configure
 | 
			
		||||
	(echo 'Output of `Configure TABLE'"':"; \
 | 
			
		||||
	$(PERL) Configure TABLE) > TABLE
 | 
			
		||||
 | 
			
		||||
update: errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h crypto/objects/obj_xref.h apps/openssl-vms.cnf crypto/bn/bn_prime.h TABLE depend
 | 
			
		||||
 | 
			
		||||
# Build distribution tar-file. As the list of files returned by "find" is
 | 
			
		||||
# pretty long, on several platforms a "too many arguments" error or similar
 | 
			
		||||
# would occur. Therefore the list of files is temporarily stored into a file
 | 
			
		||||
# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal
 | 
			
		||||
# tar does not support the --files-from option.
 | 
			
		||||
tar:
 | 
			
		||||
	find . -type d -print | xargs chmod 755
 | 
			
		||||
	find . -type f -print | xargs chmod a+r
 | 
			
		||||
	find . -type f -perm -0100 -print | xargs chmod a+x
 | 
			
		||||
	find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE | $(BUILDENV) LINKDIRS='$(LINKDIRS)' $(PERL) util/fipsdist.pl | sort > ../$(TARFILE).list; \
 | 
			
		||||
	$(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list -cvf - | \
 | 
			
		||||
	tardy --user_number=0  --user_name=openssl \
 | 
			
		||||
	      --group_number=0 --group_name=openssl \
 | 
			
		||||
	      --prefix=openssl-$(VERSION) - |\
 | 
			
		||||
	gzip --best >../$(TARFILE).gz; \
 | 
			
		||||
	rm -f ../$(TARFILE).list; \
 | 
			
		||||
	ls -l ../$(TARFILE).gz
 | 
			
		||||
 | 
			
		||||
tar-snap:
 | 
			
		||||
	@$(TAR) $(TARFLAGS) -cvf - \
 | 
			
		||||
		`find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \! -name '*.so' \! -name '*.so.*'  \! -name 'openssl' \! -name '*test' \! -name '.#*' \! -name '*~' | sort` |\
 | 
			
		||||
	tardy --user_number=0  --user_name=openssl \
 | 
			
		||||
	      --group_number=0 --group_name=openssl \
 | 
			
		||||
	      --prefix=openssl-$(VERSION) - > ../$(TARFILE);\
 | 
			
		||||
	ls -l ../$(TARFILE)
 | 
			
		||||
 | 
			
		||||
dist:   
 | 
			
		||||
	$(PERL) Configure dist fipscanisteronly
 | 
			
		||||
	@$(MAKE) dist_pem_h
 | 
			
		||||
	@$(MAKE) SDIRS='$(SDIRS)' clean
 | 
			
		||||
	@$(MAKE) -f Makefile.fips TAR='$(TAR)' TARFLAGS='$(TARFLAGS)' tar
 | 
			
		||||
 | 
			
		||||
dist_pem_h:
 | 
			
		||||
	(cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
 | 
			
		||||
 | 
			
		||||
install: all install_sw
 | 
			
		||||
 | 
			
		||||
install_sw:
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl
 | 
			
		||||
	@set -e; headerlist="$(EXHEADER)"; for i in $$headerlist;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
 | 
			
		||||
	done;
 | 
			
		||||
	@set -e; target=install; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
 | 
			
		||||
							
								
								
									
										190
									
								
								Makefile.org
									
									
									
									
									
								
							
							
						
						
									
										190
									
								
								Makefile.org
									
									
									
									
									
								
							@@ -78,7 +78,7 @@ LIBDIR=lib
 | 
			
		||||
# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
 | 
			
		||||
# gcc, then the driver will automatically translate it to -xarch=v8plus
 | 
			
		||||
# and pass it down to assembler.
 | 
			
		||||
AS=$(CC) -c
 | 
			
		||||
#AS=$(CC) -c
 | 
			
		||||
ASFLAG=$(CFLAG)
 | 
			
		||||
 | 
			
		||||
# For x86 assembler: Set PROCESSOR to 386 if you want to support
 | 
			
		||||
@@ -99,6 +99,8 @@ SHA1_ASM_OBJ=
 | 
			
		||||
RMD160_ASM_OBJ= 
 | 
			
		||||
WP_ASM_OBJ=
 | 
			
		||||
CMLL_ENC=
 | 
			
		||||
MODES_ASM_OBJ=
 | 
			
		||||
ENGINES_ASM_OBJ=
 | 
			
		||||
PERLASM_SCHEME=
 | 
			
		||||
 | 
			
		||||
# KRB5 stuff
 | 
			
		||||
@@ -109,7 +111,33 @@ LIBKRB5=
 | 
			
		||||
ZLIB_INCLUDE=
 | 
			
		||||
LIBZLIB=
 | 
			
		||||
 | 
			
		||||
DIRS=   crypto ssl engines apps test tools
 | 
			
		||||
# This is the location of fipscanister.o and friends.
 | 
			
		||||
# The FIPS module build will place it $(INSTALLTOP)/lib
 | 
			
		||||
# but since $(INSTALLTOP) can only take the default value
 | 
			
		||||
# when the module is built it will be in /usr/local/ssl/lib
 | 
			
		||||
# $(INSTALLTOP) for this build may be different so hard
 | 
			
		||||
# code the path.
 | 
			
		||||
 | 
			
		||||
FIPSLIBDIR=/usr/local/ssl/$(LIBDIR)/
 | 
			
		||||
 | 
			
		||||
# This is set to "y" if fipscanister.o is compiled internally as
 | 
			
		||||
# opposed to coming from an external validated location.
 | 
			
		||||
 | 
			
		||||
FIPSCANISTERINTERNAL=n
 | 
			
		||||
 | 
			
		||||
# The location of the library which contains fipscanister.o
 | 
			
		||||
# normally it will be libcrypto unless fipsdso is set in which
 | 
			
		||||
# case it will be libfips. If not compiling in FIPS mode at all
 | 
			
		||||
# this is empty making it a useful test for a FIPS compile.
 | 
			
		||||
 | 
			
		||||
FIPSCANLIB=
 | 
			
		||||
 | 
			
		||||
# Shared library base address. Currently only used on Windows.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
BASEADDR=
 | 
			
		||||
 | 
			
		||||
DIRS=   crypto fips ssl engines apps test tools
 | 
			
		||||
ENGDIRS= ccgost
 | 
			
		||||
SHLIBDIRS= crypto ssl
 | 
			
		||||
 | 
			
		||||
@@ -121,7 +149,7 @@ SDIRS=  \
 | 
			
		||||
	bn ec rsa dsa ecdsa dh ecdh dso engine \
 | 
			
		||||
	buffer bio stack lhash rand err \
 | 
			
		||||
	evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 \
 | 
			
		||||
	cms pqueue ts jpake store
 | 
			
		||||
	cms pqueue ts jpake srp store cmac
 | 
			
		||||
# keep in mind that the above list is adjusted by ./Configure
 | 
			
		||||
# according to no-xxx arguments...
 | 
			
		||||
 | 
			
		||||
@@ -172,13 +200,13 @@ CLEARENV=	TOP= && unset TOP $${LIB+LIB} $${LIBS+LIBS}	\
 | 
			
		||||
		$${EXHEADER+EXHEADER} $${HEADER+HEADER}		\
 | 
			
		||||
		$${GENERAL+GENERAL} $${CFLAGS+CFLAGS}		\
 | 
			
		||||
		$${ASFLAGS+ASFLAGS} $${AFLAGS+AFLAGS}		\
 | 
			
		||||
		$${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS} $${SCRIPTS+SCRIPTS}	\
 | 
			
		||||
		$${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS}		\
 | 
			
		||||
		$${SHAREDCMD+SHAREDCMD} $${SHAREDFLAGS+SHAREDFLAGS}	\
 | 
			
		||||
		$${SHARED_LIB+SHARED_LIB} $${LIBEXTRAS+LIBEXTRAS}
 | 
			
		||||
 | 
			
		||||
BUILDENV=	PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
 | 
			
		||||
		CC='$(CC)' CFLAG='$(CFLAG)' 			\
 | 
			
		||||
		AS='$(CC)' ASFLAG='$(CFLAG) -c'			\
 | 
			
		||||
		ASFLAG='$(CFLAG) -c'			\
 | 
			
		||||
		AR='$(AR)' NM='$(NM)' RANLIB='$(RANLIB)'	\
 | 
			
		||||
		CROSS_COMPILE='$(CROSS_COMPILE)'	\
 | 
			
		||||
		PERL='$(PERL)' ENGDIRS='$(ENGDIRS)'		\
 | 
			
		||||
@@ -204,7 +232,13 @@ BUILDENV=	PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
 | 
			
		||||
		MD5_ASM_OBJ='$(MD5_ASM_OBJ)'			\
 | 
			
		||||
		RMD160_ASM_OBJ='$(RMD160_ASM_OBJ)'		\
 | 
			
		||||
		WP_ASM_OBJ='$(WP_ASM_OBJ)'			\
 | 
			
		||||
		MODES_ASM_OBJ='$(MODES_ASM_OBJ)'		\
 | 
			
		||||
		ENGINES_ASM_OBJ='$(ENGINES_ASM_OBJ)'		\
 | 
			
		||||
		PERLASM_SCHEME='$(PERLASM_SCHEME)'		\
 | 
			
		||||
		FIPSLIBDIR='${FIPSLIBDIR}'			\
 | 
			
		||||
		FIPSCANLIB="$${FIPSCANLIB:-$(FIPSCANLIB)}"	\
 | 
			
		||||
		FIPSCANISTERINTERNAL='${FIPSCANISTERINTERNAL}'	\
 | 
			
		||||
		FIPS_EX_OBJ='${FIPS_EX_OBJ}'	\
 | 
			
		||||
		THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
 | 
			
		||||
# MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors,
 | 
			
		||||
# which in turn eliminates ambiguities in variable treatment with -e.
 | 
			
		||||
@@ -236,17 +270,114 @@ BUILD_ONE_CMD=\
 | 
			
		||||
reflect:
 | 
			
		||||
	@[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)
 | 
			
		||||
 | 
			
		||||
FIPS_EX_OBJ= ../crypto/aes/aes_cfb.o \
 | 
			
		||||
	../crypto/aes/aes_ecb.o \
 | 
			
		||||
	../crypto/aes/aes_ofb.o \
 | 
			
		||||
	../crypto/bn/bn_add.o \
 | 
			
		||||
	../crypto/bn/bn_blind.o \
 | 
			
		||||
	../crypto/bn/bn_ctx.o \
 | 
			
		||||
	../crypto/bn/bn_div.o \
 | 
			
		||||
	../crypto/bn/bn_exp2.o \
 | 
			
		||||
	../crypto/bn/bn_exp.o \
 | 
			
		||||
	../crypto/bn/bn_gcd.o \
 | 
			
		||||
	../crypto/bn/bn_gf2m.o \
 | 
			
		||||
	../crypto/bn/bn_lib.o \
 | 
			
		||||
	../crypto/bn/bn_mod.o \
 | 
			
		||||
	../crypto/bn/bn_mont.o \
 | 
			
		||||
	../crypto/bn/bn_mul.o \
 | 
			
		||||
	../crypto/bn/bn_nist.o \
 | 
			
		||||
	../crypto/bn/bn_prime.o \
 | 
			
		||||
	../crypto/bn/bn_rand.o \
 | 
			
		||||
	../crypto/bn/bn_recp.o \
 | 
			
		||||
	../crypto/bn/bn_shift.o \
 | 
			
		||||
	../crypto/bn/bn_sqr.o \
 | 
			
		||||
	../crypto/bn/bn_word.o \
 | 
			
		||||
	../crypto/bn/bn_x931p.o \
 | 
			
		||||
	../crypto/buffer/buf_str.o \
 | 
			
		||||
	../crypto/cmac/cmac.o \
 | 
			
		||||
	../crypto/cryptlib.o \
 | 
			
		||||
	../crypto/des/cfb64ede.o \
 | 
			
		||||
	../crypto/des/cfb64enc.o \
 | 
			
		||||
	../crypto/des/cfb_enc.o \
 | 
			
		||||
	../crypto/des/ecb3_enc.o \
 | 
			
		||||
	../crypto/des/ofb64ede.o \
 | 
			
		||||
	../crypto/des/fcrypt.o \
 | 
			
		||||
	../crypto/des/set_key.o \
 | 
			
		||||
	../crypto/dh/dh_check.o \
 | 
			
		||||
	../crypto/dh/dh_gen.o \
 | 
			
		||||
	../crypto/dh/dh_key.o \
 | 
			
		||||
	../crypto/dsa/dsa_gen.o \
 | 
			
		||||
	../crypto/dsa/dsa_key.o \
 | 
			
		||||
	../crypto/dsa/dsa_ossl.o \
 | 
			
		||||
	../crypto/ec/ec_curve.o \
 | 
			
		||||
	../crypto/ec/ec_cvt.o \
 | 
			
		||||
	../crypto/ec/ec_key.o \
 | 
			
		||||
	../crypto/ec/ec_lib.o \
 | 
			
		||||
	../crypto/ec/ecp_mont.o \
 | 
			
		||||
	../crypto/ec/ec_mult.o \
 | 
			
		||||
	../crypto/ec/ecp_nist.o \
 | 
			
		||||
	../crypto/ec/ecp_smpl.o \
 | 
			
		||||
	../crypto/ec/ec2_mult.o \
 | 
			
		||||
	../crypto/ec/ec2_smpl.o \
 | 
			
		||||
	../crypto/ecdh/ech_key.o \
 | 
			
		||||
	../crypto/ecdh/ech_ossl.o \
 | 
			
		||||
	../crypto/ecdsa/ecs_ossl.o \
 | 
			
		||||
	../crypto/evp/e_aes.o \
 | 
			
		||||
	../crypto/evp/e_des3.o \
 | 
			
		||||
	../crypto/evp/e_null.o \
 | 
			
		||||
	../crypto/evp/m_sha1.o \
 | 
			
		||||
	../crypto/evp/m_dss1.o \
 | 
			
		||||
	../crypto/evp/m_dss.o \
 | 
			
		||||
	../crypto/evp/m_ecdsa.o \
 | 
			
		||||
	../crypto/hmac/hmac.o \
 | 
			
		||||
	../crypto/modes/cbc128.o \
 | 
			
		||||
	../crypto/modes/ccm128.o \
 | 
			
		||||
	../crypto/modes/cfb128.o \
 | 
			
		||||
	../crypto/modes/ctr128.o \
 | 
			
		||||
	../crypto/modes/gcm128.o \
 | 
			
		||||
	../crypto/modes/ofb128.o \
 | 
			
		||||
	../crypto/modes/xts128.o \
 | 
			
		||||
	../crypto/rsa/rsa_eay.o \
 | 
			
		||||
	../crypto/rsa/rsa_gen.o \
 | 
			
		||||
	../crypto/rsa/rsa_crpt.o \
 | 
			
		||||
	../crypto/rsa/rsa_none.o \
 | 
			
		||||
	../crypto/rsa/rsa_oaep.o \
 | 
			
		||||
	../crypto/rsa/rsa_pk1.o \
 | 
			
		||||
	../crypto/rsa/rsa_pss.o \
 | 
			
		||||
	../crypto/rsa/rsa_ssl.o \
 | 
			
		||||
	../crypto/rsa/rsa_x931.o \
 | 
			
		||||
	../crypto/rsa/rsa_x931g.o \
 | 
			
		||||
	../crypto/sha/sha1dgst.o \
 | 
			
		||||
	../crypto/sha/sha256.o \
 | 
			
		||||
	../crypto/sha/sha512.o \
 | 
			
		||||
	../crypto/thr_id.o \
 | 
			
		||||
	../crypto/uid.o
 | 
			
		||||
 | 
			
		||||
sub_all: build_all
 | 
			
		||||
build_all: build_libs build_apps build_tests build_tools
 | 
			
		||||
 | 
			
		||||
build_libs: build_crypto build_ssl build_engines
 | 
			
		||||
build_libs: build_crypto build_fips build_ssl build_engines
 | 
			
		||||
 | 
			
		||||
build_fips:
 | 
			
		||||
	@dir=fips; target=all; [ -z "$(FIPSCANLIB)" ] || $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
build_crypto:
 | 
			
		||||
	@dir=crypto; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
	if [ -n "$(FIPSCANLIB)" ]; then \
 | 
			
		||||
		EXCL_OBJ='$(AES_ENC) $(BN_ASM) $(DES_ENC) $(CPUID_OBJ) $(SHA1_ASM_OBJ) $(MODES_ASM_OBJ) $(FIPS_EX_OBJ)' ; export EXCL_OBJ ; \
 | 
			
		||||
		ARX='$(PERL) $${TOP}/util/arx.pl $(AR)' ; \
 | 
			
		||||
	else \
 | 
			
		||||
		ARX='${AR}' ; \
 | 
			
		||||
	fi ; export ARX ; \
 | 
			
		||||
	if [ $(FIPSCANISTERINTERNAL) = "y" ]; then \
 | 
			
		||||
		AS='$(PERL) $${TOP}/util/fipsas.pl $${TOP} $${<} $(CC) -c' ; \
 | 
			
		||||
	else \
 | 
			
		||||
		AS='$(CC) -c' ; \
 | 
			
		||||
	fi ; export AS ; \
 | 
			
		||||
		dir=crypto; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_ssl:
 | 
			
		||||
	@dir=ssl; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_engines:
 | 
			
		||||
	@dir=engines; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
	@dir=engines; target=all; AS='$(CC) -c'; export AS; $(BUILD_ONE_CMD)
 | 
			
		||||
build_apps:
 | 
			
		||||
	@dir=apps; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_tests:
 | 
			
		||||
@@ -258,9 +389,13 @@ all_testapps: build_libs build_testapps
 | 
			
		||||
build_testapps:
 | 
			
		||||
	@dir=crypto; target=testapps; $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
libcrypto$(SHLIB_EXT): libcrypto.a
 | 
			
		||||
libcrypto$(SHLIB_EXT): libcrypto.a build_fips
 | 
			
		||||
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
			
		||||
		$(MAKE) SHLIBDIRS=crypto build-shared; \
 | 
			
		||||
		if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
 | 
			
		||||
			FIPSLD_CC="$(CC)"; CC=fips/fipsld; \
 | 
			
		||||
			export CC FIPSLD_CC; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		$(MAKE) -e SHLIBDIRS=crypto build-shared; \
 | 
			
		||||
	else \
 | 
			
		||||
		echo "There's no support for shared libraries on this platform" >&2; \
 | 
			
		||||
		exit 1; \
 | 
			
		||||
@@ -322,8 +457,7 @@ libcrypto.pc: Makefile
 | 
			
		||||
	    echo 'Description: OpenSSL cryptography library'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lcrypto'; \
 | 
			
		||||
	    echo 'Libs.private: $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lcrypto $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc
 | 
			
		||||
 | 
			
		||||
libssl.pc: Makefile
 | 
			
		||||
@@ -336,8 +470,7 @@ libssl.pc: Makefile
 | 
			
		||||
	    echo 'Description: Secure Sockets Layer and cryptography libraries'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl -lcrypto'; \
 | 
			
		||||
	    echo 'Libs.private: $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
 | 
			
		||||
 | 
			
		||||
openssl.pc: Makefile
 | 
			
		||||
@@ -350,8 +483,7 @@ openssl.pc: Makefile
 | 
			
		||||
	    echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl -lcrypto'; \
 | 
			
		||||
	    echo 'Libs.private: $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
 | 
			
		||||
 | 
			
		||||
Makefile: Makefile.org Configure config
 | 
			
		||||
@@ -386,6 +518,9 @@ links:
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
 | 
			
		||||
	@$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
 | 
			
		||||
	@set -e; target=links; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
	@if [ -z "$(FIPSCANLIB)" ]; then \
 | 
			
		||||
		set -e; target=links; dir=fips ; $(BUILD_CMD) ; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
gentests:
 | 
			
		||||
	@(cd test && echo "generating dummy tests (if needed)..." && \
 | 
			
		||||
@@ -416,9 +551,6 @@ tests: rehash
 | 
			
		||||
report:
 | 
			
		||||
	@$(PERL) util/selftest.pl
 | 
			
		||||
 | 
			
		||||
update: errors stacks util/libeay.num util/ssleay.num TABLE
 | 
			
		||||
	@set -e; target=update; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	@set -e; target=depend; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
@@ -432,7 +564,7 @@ tags:
 | 
			
		||||
errors:
 | 
			
		||||
	$(PERL) util/mkerr.pl -recurse -write
 | 
			
		||||
	(cd engines; $(MAKE) PERL=$(PERL) errors)
 | 
			
		||||
	$(PERL) util/ck_errf.pl */*.c */*/*.c
 | 
			
		||||
	$(PERL) util/ck_errf.pl -strict */*.c */*/*.c
 | 
			
		||||
 | 
			
		||||
stacks:
 | 
			
		||||
	$(PERL) util/mkstack.pl -write
 | 
			
		||||
@@ -443,10 +575,26 @@ util/libeay.num::
 | 
			
		||||
util/ssleay.num::
 | 
			
		||||
	$(PERL) util/mkdef.pl ssl update
 | 
			
		||||
 | 
			
		||||
crypto/objects/obj_dat.h: crypto/objects/obj_dat.pl crypto/objects/obj_mac.h
 | 
			
		||||
	$(PERL) crypto/objects/obj_dat.pl crypto/objects/obj_mac.h crypto/objects/obj_dat.h
 | 
			
		||||
crypto/objects/obj_mac.h: crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num
 | 
			
		||||
	$(PERL) crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num crypto/objects/obj_mac.h
 | 
			
		||||
crypto/objects/obj_xref.h: crypto/objects/objxref.pl crypto/objects/obj_xref.txt crypto/objects/obj_mac.num
 | 
			
		||||
	$(PERL) crypto/objects/objxref.pl crypto/objects/obj_mac.num crypto/objects/obj_xref.txt >crypto/objects/obj_xref.h
 | 
			
		||||
 | 
			
		||||
apps/openssl-vms.cnf: apps/openssl.cnf
 | 
			
		||||
	$(PERL) VMS/VMSify-conf.pl < apps/openssl.cnf > apps/openssl-vms.cnf
 | 
			
		||||
 | 
			
		||||
crypto/bn/bn_prime.h: crypto/bn/bn_prime.pl
 | 
			
		||||
	$(PERL) crypto/bn/bn_prime.pl >crypto/bn/bn_prime.h
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TABLE: Configure
 | 
			
		||||
	(echo 'Output of `Configure TABLE'"':"; \
 | 
			
		||||
	$(PERL) Configure TABLE) > TABLE
 | 
			
		||||
 | 
			
		||||
update: errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h crypto/objects/obj_xref.h apps/openssl-vms.cnf crypto/bn/bn_prime.h TABLE depend
 | 
			
		||||
 | 
			
		||||
# Build distribution tar-file. As the list of files returned by "find" is
 | 
			
		||||
# pretty long, on several platforms a "too many arguments" error or similar
 | 
			
		||||
# would occur. Therefore the list of files is temporarily stored into a file
 | 
			
		||||
@@ -499,7 +647,7 @@ install_sw:
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
 | 
			
		||||
	done;
 | 
			
		||||
	@set -e; target=install; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
	@set -e; for i in $(LIBS) ;\
 | 
			
		||||
	@set -e; liblist="$(LIBS)"; for i in $$liblist ;\
 | 
			
		||||
	do \
 | 
			
		||||
		if [ -f "$$i" ]; then \
 | 
			
		||||
		(       echo installing $$i; \
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										232
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										232
									
								
								NEWS
									
									
									
									
									
								
							@@ -5,120 +5,11 @@
 | 
			
		||||
  This file gives a brief overview of the major changes between each OpenSSL
 | 
			
		||||
  release. For more details please read the CHANGES file.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0r and OpenSSL 1.0.0s [11 Jun 2015]
 | 
			
		||||
 | 
			
		||||
      o Malformed ECParameters causes infinite loop (CVE-2015-1788)
 | 
			
		||||
      o Exploitable out-of-bounds read in X509_cmp_time (CVE-2015-1789)
 | 
			
		||||
      o PKCS7 crash with missing EnvelopedContent (CVE-2015-1790)
 | 
			
		||||
      o CMS verify infinite loop with unknown hash function (CVE-2015-1792)
 | 
			
		||||
      o Race condition handling NewSessionTicket (CVE-2015-1791)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0q and OpenSSL 1.0.0r [19 Mar 2015]
 | 
			
		||||
 | 
			
		||||
      o Segmentation fault in ASN1_TYPE_cmp fix (CVE-2015-0286)
 | 
			
		||||
      o ASN.1 structure reuse memory corruption fix (CVE-2015-0287)
 | 
			
		||||
      o PKCS7 NULL pointer dereferences fix (CVE-2015-0289)
 | 
			
		||||
      o DoS via reachable assert in SSLv2 servers fix (CVE-2015-0293)
 | 
			
		||||
      o Use After Free following d2i_ECPrivatekey error fix (CVE-2015-0209)
 | 
			
		||||
      o X509_to_X509_REQ NULL pointer deref fix (CVE-2015-0288)
 | 
			
		||||
      o Removed the export ciphers from the DEFAULT ciphers
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0p and OpenSSL 1.0.0q [15 Jan 2015]
 | 
			
		||||
 | 
			
		||||
      o Build fixes for the Windows and OpenVMS platforms
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0o and OpenSSL 1.0.0p [8 Jan 2015]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-3571
 | 
			
		||||
      o Fix for CVE-2015-0206
 | 
			
		||||
      o Fix for CVE-2014-3569
 | 
			
		||||
      o Fix for CVE-2014-3572
 | 
			
		||||
      o Fix for CVE-2015-0204
 | 
			
		||||
      o Fix for CVE-2015-0205
 | 
			
		||||
      o Fix for CVE-2014-8275
 | 
			
		||||
      o Fix for CVE-2014-3570
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0n and OpenSSL 1.0.0o [15 Oct 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-3513
 | 
			
		||||
      o Fix for CVE-2014-3567
 | 
			
		||||
      o Mitigation for CVE-2014-3566 (SSL protocol vulnerability)
 | 
			
		||||
      o Fix for CVE-2014-3568
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0m and OpenSSL 1.0.0n [6 Aug 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-3510
 | 
			
		||||
      o Fix for CVE-2014-3507
 | 
			
		||||
      o Fix for CVE-2014-3506
 | 
			
		||||
      o Fix for CVE-2014-3505
 | 
			
		||||
      o Fix for CVE-2014-3509
 | 
			
		||||
      o Fix for CVE-2014-3508
 | 
			
		||||
 | 
			
		||||
  Known issues in OpenSSL 1.0.0m:
 | 
			
		||||
 | 
			
		||||
      o EAP-FAST and other applications using tls_session_secret_cb
 | 
			
		||||
        wont resume sessions. Fixed in 1.0.0n-dev
 | 
			
		||||
      o Compilation failure of s3_pkt.c on some platforms due to missing
 | 
			
		||||
        <limits.h> include. Fixed in 1.0.0n-dev
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0l and OpenSSL 1.0.0m [5 Jun 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-0224
 | 
			
		||||
      o Fix for CVE-2014-0221
 | 
			
		||||
      o Fix for CVE-2014-0198
 | 
			
		||||
      o Fix for CVE-2014-0195
 | 
			
		||||
      o Fix for CVE-2014-3470
 | 
			
		||||
      o Fix for CVE-2014-0076
 | 
			
		||||
      o Fix for CVE-2010-5298
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0k and OpenSSL 1.0.0l [6 Jan 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for DTLS retransmission bug CVE-2013-6450
 | 
			
		||||
 | 
			
		||||
  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]:
 | 
			
		||||
  Major changes between OpenSSL 1.0.0c and OpenSSL 1.0.0d:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2011-0014
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0b and OpenSSL 1.0.0c [2 Dec 2010]:
 | 
			
		||||
  Major changes between OpenSSL 1.0.0b and OpenSSL 1.0.0c:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-4180
 | 
			
		||||
      o Fix for CVE-2010-4252
 | 
			
		||||
@@ -126,18 +17,18 @@
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 1.0.0a and OpenSSL 1.0.0b:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8n and OpenSSL 1.0.0:
 | 
			
		||||
 | 
			
		||||
      o RFC3280 path validation: sufficient to process PKITS tests.
 | 
			
		||||
      o Integrated support for PVK files and keyblobs.
 | 
			
		||||
@@ -160,12 +51,33 @@
 | 
			
		||||
      o Opaque PRF Input TLS extension support.
 | 
			
		||||
      o Updated time routines to avoid OS limitations.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8m and OpenSSL 0.9.8n [24 Mar 2010]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8q and OpenSSL 0.9.8r:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2011-0014
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8p and OpenSSL 0.9.8q:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-4180
 | 
			
		||||
      o Fix for CVE-2010-4252
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8o and OpenSSL 0.9.8p:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-3864.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8n and OpenSSL 0.9.8o:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-0742.
 | 
			
		||||
      o Various DTLS fixes.
 | 
			
		||||
      o Recognise SHA2 certificates if only SSL algorithms added.
 | 
			
		||||
      o Fix for no-rc4 compilation.
 | 
			
		||||
      o Chil ENGINE unload workaround.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8m and OpenSSL 0.9.8n:
 | 
			
		||||
 | 
			
		||||
      o CFB cipher definition fixes.
 | 
			
		||||
      o 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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8l and OpenSSL 0.9.8m:
 | 
			
		||||
 | 
			
		||||
      o Cipher definition fixes.
 | 
			
		||||
      o Workaround for slow RAND_poll() on some WIN32 versions.
 | 
			
		||||
@@ -177,33 +89,33 @@
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8k and OpenSSL 0.9.8l:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8j and OpenSSL 0.9.8k:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8i and OpenSSL 0.9.8j:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8g and OpenSSL 0.9.8h:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8f and OpenSSL 0.9.8g:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8e and OpenSSL 0.9.8f:
 | 
			
		||||
 | 
			
		||||
      o Add gcc 4.2 support.
 | 
			
		||||
      o Add support for AES and SSE2 assembly lanugauge optimization
 | 
			
		||||
@@ -214,23 +126,23 @@
 | 
			
		||||
      o RFC4507bis support.
 | 
			
		||||
      o TLS Extensions support.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e [23 Feb 2007]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e:
 | 
			
		||||
 | 
			
		||||
      o Various ciphersuite selection fixes.
 | 
			
		||||
      o RFC3779 support.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d [28 Sep 2006]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8b and OpenSSL 0.9.8c:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b:
 | 
			
		||||
 | 
			
		||||
      o Cipher string fixes.
 | 
			
		||||
      o Fixes for VC++ 2005.
 | 
			
		||||
@@ -240,12 +152,12 @@
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8 and OpenSSL 0.9.8a:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.8:
 | 
			
		||||
 | 
			
		||||
      o Major work on the BIGNUM library for higher efficiency and to
 | 
			
		||||
        make operations more streamlined and less contradictory.  This
 | 
			
		||||
@@ -319,36 +231,36 @@
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7l and OpenSSL 0.9.7m:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7k and OpenSSL 0.9.7l:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7j and OpenSSL 0.9.7k:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7h and OpenSSL 0.9.7i:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.7h:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g:
 | 
			
		||||
 | 
			
		||||
      o More compilation issues fixed.
 | 
			
		||||
      o Adaptation to more modern Kerberos API.
 | 
			
		||||
@@ -357,7 +269,7 @@
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f:
 | 
			
		||||
 | 
			
		||||
      o Several compilation issues fixed.
 | 
			
		||||
      o Many memory allocation failure checks added.
 | 
			
		||||
@@ -365,12 +277,12 @@
 | 
			
		||||
      o Mandatory basic checks on certificates.
 | 
			
		||||
      o Performance improvements.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e [25 Oct 2004]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e:
 | 
			
		||||
 | 
			
		||||
      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]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d:
 | 
			
		||||
 | 
			
		||||
      o Security: Fix Kerberos ciphersuite SSL/TLS handshaking bug
 | 
			
		||||
      o Security: Fix null-pointer assignment in do_change_cipher_spec()
 | 
			
		||||
@@ -378,14 +290,14 @@
 | 
			
		||||
      o Multiple X509 verification fixes
 | 
			
		||||
      o Speed up HMAC and other operations
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c [30 Sep 2003]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c:
 | 
			
		||||
 | 
			
		||||
      o Security: fix various ASN1 parsing bugs.
 | 
			
		||||
      o New -ignore_err option to OCSP utility.
 | 
			
		||||
      o Various interop and bug fixes in S/MIME code.
 | 
			
		||||
      o SSL/TLS protocol fix for unrequested client certificates.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b [10 Apr 2003]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b:
 | 
			
		||||
 | 
			
		||||
      o Security: counter the Klima-Pokorny-Rosa extension of
 | 
			
		||||
        Bleichbacher's attack 
 | 
			
		||||
@@ -396,7 +308,7 @@
 | 
			
		||||
      o ASN.1: treat domainComponent correctly.
 | 
			
		||||
      o Documentation: fixes and additions.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a [19 Feb 2003]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a:
 | 
			
		||||
 | 
			
		||||
      o Security: Important security related bugfixes.
 | 
			
		||||
      o Enhanced compatibility with MIT Kerberos.
 | 
			
		||||
@@ -407,7 +319,7 @@
 | 
			
		||||
      o SSL/TLS: now handles manual certificate chain building.
 | 
			
		||||
      o SSL/TLS: certain session ID malfunctions corrected.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7 [30 Dec 2002]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7:
 | 
			
		||||
 | 
			
		||||
      o New library section OCSP.
 | 
			
		||||
      o Complete rewrite of ASN1 code.
 | 
			
		||||
@@ -453,23 +365,23 @@
 | 
			
		||||
      o SSL/TLS: add callback to retrieve SSL/TLS messages.
 | 
			
		||||
      o SSL/TLS: support AES cipher suites (RFC3268).
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k [30 Sep 2003]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k:
 | 
			
		||||
 | 
			
		||||
      o Security: fix various ASN1 parsing bugs.
 | 
			
		||||
      o SSL/TLS protocol fix for unrequested client certificates.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j [10 Apr 2003]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j:
 | 
			
		||||
 | 
			
		||||
      o Security: counter the Klima-Pokorny-Rosa extension of
 | 
			
		||||
        Bleichbacher's attack 
 | 
			
		||||
      o Security: make RSA blinding default.
 | 
			
		||||
      o Build: shared library support fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i [19 Feb 2003]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i:
 | 
			
		||||
 | 
			
		||||
      o Important security related bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h [5 Dec 2002]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h:
 | 
			
		||||
 | 
			
		||||
      o New configuration targets for Tandem OSS and A/UX.
 | 
			
		||||
      o New OIDs for Microsoft attributes.
 | 
			
		||||
@@ -483,25 +395,25 @@
 | 
			
		||||
      o Fixes for smaller building problems.
 | 
			
		||||
      o Updates of manuals, FAQ and other instructive documents.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g [9 Aug 2002]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g:
 | 
			
		||||
 | 
			
		||||
      o Important building fixes on Unix.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f [8 Aug 2002]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f:
 | 
			
		||||
 | 
			
		||||
      o Various important bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e [30 Jul 2002]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e:
 | 
			
		||||
 | 
			
		||||
      o Important security related bugfixes.
 | 
			
		||||
      o Various SSL/TLS library bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d [9 May 2002]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d:
 | 
			
		||||
 | 
			
		||||
      o Various SSL/TLS library bugfixes.
 | 
			
		||||
      o Fix DH parameter generation for 'non-standard' generators.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c [21 Dec 2001]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c:
 | 
			
		||||
 | 
			
		||||
      o Various SSL/TLS library bugfixes.
 | 
			
		||||
      o BIGNUM library fixes.
 | 
			
		||||
@@ -514,7 +426,7 @@
 | 
			
		||||
        Broadcom and Cryptographic Appliance's keyserver
 | 
			
		||||
        [in 0.9.6c-engine release].
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b [9 Jul 2001]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b:
 | 
			
		||||
 | 
			
		||||
      o Security fix: PRNG improvements.
 | 
			
		||||
      o Security fix: RSA OAEP check.
 | 
			
		||||
@@ -531,7 +443,7 @@
 | 
			
		||||
      o Increase default size for BIO buffering filter.
 | 
			
		||||
      o Compatibility fixes in some scripts.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.6a [5 Apr 2001]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.6a:
 | 
			
		||||
 | 
			
		||||
      o Security fix: change behavior of OpenSSL to avoid using
 | 
			
		||||
        environment variables when running as root.
 | 
			
		||||
@@ -556,7 +468,7 @@
 | 
			
		||||
      o New function BN_rand_range().
 | 
			
		||||
      o Add "-rand" option to openssl s_client and s_server.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6 [10 Oct 2000]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6:
 | 
			
		||||
 | 
			
		||||
      o Some documentation for BIO and SSL libraries.
 | 
			
		||||
      o Enhanced chain verification using key identifiers.
 | 
			
		||||
@@ -571,7 +483,7 @@
 | 
			
		||||
    [1] The support for external crypto devices is currently a separate
 | 
			
		||||
        distribution.  See the file README.ENGINE.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a [1 Apr 2000]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a:
 | 
			
		||||
 | 
			
		||||
      o Bug fixes for Win32, SuSE Linux, NeXTSTEP and FreeBSD 2.2.8 
 | 
			
		||||
      o Shared library support for HPUX and Solaris-gcc
 | 
			
		||||
@@ -580,7 +492,7 @@
 | 
			
		||||
      o New 'rand' application
 | 
			
		||||
      o New way to check for existence of algorithms from scripts
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5 [25 May 2000]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5:
 | 
			
		||||
 | 
			
		||||
      o S/MIME support in new 'smime' command
 | 
			
		||||
      o Documentation for the OpenSSL command line application
 | 
			
		||||
@@ -616,7 +528,7 @@
 | 
			
		||||
      o Enhanced support for Alpha Linux
 | 
			
		||||
      o Experimental MacOS support
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4 [9 Aug 1999]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4:
 | 
			
		||||
 | 
			
		||||
      o Transparent support for PKCS#8 format private keys: these are used
 | 
			
		||||
        by several software packages and are more secure than the standard
 | 
			
		||||
@@ -627,7 +539,7 @@
 | 
			
		||||
      o New pipe-like BIO that allows using the SSL library when actual I/O
 | 
			
		||||
        must be handled by the application (BIO pair)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.2b and OpenSSL 0.9.3 [24 May 1999]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.2b and OpenSSL 0.9.3:
 | 
			
		||||
      o Lots of enhancements and cleanups to the Configuration mechanism
 | 
			
		||||
      o RSA OEAP related fixes
 | 
			
		||||
      o Added `openssl ca -revoke' option for revoking a certificate
 | 
			
		||||
@@ -641,7 +553,7 @@
 | 
			
		||||
      o Sparc assembler bignum implementation, optimized hash functions
 | 
			
		||||
      o Option to disable selected ciphers
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.1c and OpenSSL 0.9.2b [22 Mar 1999]:
 | 
			
		||||
  Major changes between OpenSSL 0.9.1c and OpenSSL 0.9.2b:
 | 
			
		||||
      o Fixed a security hole related to session resumption
 | 
			
		||||
      o Fixed RSA encryption routines for the p < q case
 | 
			
		||||
      o "ALL" in cipher lists now means "everything except NULL ciphers"
 | 
			
		||||
@@ -663,7 +575,7 @@
 | 
			
		||||
      o Lots of memory leak fixes.
 | 
			
		||||
      o Lots of bug fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c [23 Dec 1998]:
 | 
			
		||||
  Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c:
 | 
			
		||||
      o Integration of the popular NO_RSA/NO_DSA patches
 | 
			
		||||
      o Initial support for compression inside the SSL record layer
 | 
			
		||||
      o Added BIO proxy and filtering functionality
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								PROBLEMS
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								PROBLEMS
									
									
									
									
									
								
							@@ -197,17 +197,3 @@ reconfigure with additional no-sse2 [or 386] option passed to ./config.
 | 
			
		||||
We don't have framework to associate -ldl with no-dso, therefore the only
 | 
			
		||||
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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								README
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
 | 
			
		||||
 OpenSSL 1.0.0s 11 Jun 2015
 | 
			
		||||
 OpenSSL 1.1.0-dev
 | 
			
		||||
 | 
			
		||||
 Copyright (c) 1998-2011 The OpenSSL Project
 | 
			
		||||
 Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
 | 
			
		||||
@@ -190,7 +190,7 @@
 | 
			
		||||
 reason as to why that feature isn't implemented.
 | 
			
		||||
 | 
			
		||||
 Patches should be as up to date as possible, preferably relative to the
 | 
			
		||||
 current Git or the last snapshot. They should follow the coding style of
 | 
			
		||||
 current CVS or the last snapshot. They should follow the coding style of
 | 
			
		||||
 OpenSSL and compile without warnings. Some of the core team developer targets
 | 
			
		||||
 can be used for testing purposes, (debug-steve64, debug-geoff etc). OpenSSL
 | 
			
		||||
 compiles on many varied platforms: try to ensure you only use portable
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										61
									
								
								README.ECC
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								README.ECC
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
NOTE: The OpenSSL Software Foundation has executed a sublicense agreement
 | 
			
		||||
entitled "Elliptic Curve Cryptography Patent License Agreement" with the
 | 
			
		||||
National Security Agency/ Central Security Service Commercial Solutions
 | 
			
		||||
Center (NCSC) dated 2010-11-04. That agreement permits implementation and
 | 
			
		||||
distribution of software containing features covered by any or all of the
 | 
			
		||||
following patents:
 | 
			
		||||
 | 
			
		||||
1.) U.S. Pat. No. 5,761,305 entitled "Key Agreement and Transport Protocol 
 | 
			
		||||
    with Implicit Signatures" issued on June 2, 1998;
 | 
			
		||||
2.) Can. Pat. Appl. Ser. No. 2176972 entitled "Key Agreement and Transport 
 | 
			
		||||
    Protocol with Implicit Signature and Reduced Bandwidth" filed on May 
 | 
			
		||||
    16, 1996;
 | 
			
		||||
3.) U.S. Pat. No. 5,889,865 entitled "Key Agreement and Transport Protocol 
 | 
			
		||||
    with Implicit Signatures" issued on March 30, 1999;
 | 
			
		||||
4.) U.S. Pat. No. 5,896,455 entitled "Key Agreement and Transport Protocol 
 | 
			
		||||
    with Implicit Signatures" issued on April 20, 1999;
 | 
			
		||||
5.) U.S. Pat. No. 5,933,504 entitled "Strengthened Public Key Protocol" 
 | 
			
		||||
    issued on August 3, 1999;
 | 
			
		||||
6.) Can. Pat. Appl. Ser. No. 2176866 entitled "Strengthened Public Key 
 | 
			
		||||
    Protocol" filed on May 17, 1996;
 | 
			
		||||
7.) E.P. Pat. Appl. Ser. No. 96201322.3 entitled "Strengthened Public Key 
 | 
			
		||||
    Protocol" filed on May 17, 1996;
 | 
			
		||||
8.) U.S. Pat. No. 5,999,626 entitled "Digital Signatures on a Smartcard" 
 | 
			
		||||
    issued on December 7, 1999;
 | 
			
		||||
9.) Can. Pat. Appl. Ser. No. 2202566 entitled "Digital Signatures on a 
 | 
			
		||||
    Smartcard" filed on April 14, 1997;
 | 
			
		||||
10.) E.P. Pat. Appl. No. 97106114.8 entitled "Digital Signatures on a 
 | 
			
		||||
     Smartcard" filed on April 15, 1997;
 | 
			
		||||
11.) U.S Pat. No. 6,122,736 entitled "Key Agreement and Transport Protocol 
 | 
			
		||||
     with Implicit Signatures" issued on September 19, 2000;
 | 
			
		||||
12.) Can. Pat. Appl. Ser. No. 2174261 entitled "Key Agreement and Transport 
 | 
			
		||||
     Protocol with Implicit Signatures" filed on April 16, 1996;
 | 
			
		||||
13.) E.P. Pat. Appl. Ser. No. 96105920.1 entitled "Key Agreement and 
 | 
			
		||||
     Transport Protocol with Implicit Signatures" filed on April 16, 1996;
 | 
			
		||||
14.) U.S. Pat. No. 6,141,420 entitled "Elliptic Curve Encryption Systems" 
 | 
			
		||||
     issued on October 31, 2000;
 | 
			
		||||
15.) Can. Pat. Appl. Ser. No. 2155038 entitled "Elliptic Curve Encryption 
 | 
			
		||||
     Systems" filed on July 31, 1995;
 | 
			
		||||
16.) E.P. Pat. Appl. Ser. No. 95926348.4 entitled "Elliptic Curve Encryption 
 | 
			
		||||
     Systems" filed on July 31, 1995;
 | 
			
		||||
17.) U.S. Pat. No. 6,336,188 entitled "Authenticated Key Agreement" issued 
 | 
			
		||||
     on January 1, 2002;
 | 
			
		||||
18.) U.S. Pat. No. 6,487,661 entitled "Key Agreement and Transport Protocol" 
 | 
			
		||||
     issued on November 26, 2002;
 | 
			
		||||
19.) Can. Pat. Appl. Ser. No. 2174260 entitled "Key Agreement and Transport 
 | 
			
		||||
     Protocol" filed on April 16, 1996;
 | 
			
		||||
20.) E.P. Pat. Appl. Ser. No. 96105921.9 entitled "Key Agreement and 
 | 
			
		||||
     Transport Protocol" filed on April 21, 1996;
 | 
			
		||||
21.) U.S. Pat. No. 6,563,928 entitled "Strengthened Public Key Protocol" 
 | 
			
		||||
     issued on May 13, 2003;
 | 
			
		||||
22.) U.S. Pat. No. 6,618,483 entitled "Elliptic Curve Encryption Systems" 
 | 
			
		||||
     issued September 9, 2003;
 | 
			
		||||
23.) U.S. Pat. Appl. Ser. No. 09/434,247 entitled "Digital Signatures on a 
 | 
			
		||||
     Smartcard" filed on November 5, 1999;
 | 
			
		||||
24.) U.S. Pat. Appl. Ser. No. 09/558,256 entitled "Key Agreement and 
 | 
			
		||||
     Transport Protocol with Implicit Signatures" filed on April 25, 2000;
 | 
			
		||||
25.) U.S. Pat. Appl. Ser. No. 09/942,492 entitled "Digital Signatures on a 
 | 
			
		||||
     Smartcard" filed on August 29, 2001 and published on July 18, 2002; and,
 | 
			
		||||
26.) U.S. Pat. Appl. Ser. No. 10/185,735 entitled "Strengthened Public Key 
 | 
			
		||||
     Protocol" filed on July 1, 2000.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										130
									
								
								README.FIPS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								README.FIPS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,130 @@
 | 
			
		||||
Preliminary status and build information for FIPS module v2.0 
 | 
			
		||||
 | 
			
		||||
NB: if you are cross compiling you now need to use the latest "incore" script
 | 
			
		||||
this can be found at util/incore in the tarballs.
 | 
			
		||||
 | 
			
		||||
If you have any object files from a previous build do:
 | 
			
		||||
 | 
			
		||||
make clean
 | 
			
		||||
 | 
			
		||||
To build the module do:
 | 
			
		||||
 | 
			
		||||
./config fipscanisteronly
 | 
			
		||||
make
 | 
			
		||||
 | 
			
		||||
Build should complete without errors.
 | 
			
		||||
 | 
			
		||||
Build test utilities:
 | 
			
		||||
 | 
			
		||||
make build_tests
 | 
			
		||||
 | 
			
		||||
Run test suite:
 | 
			
		||||
 | 
			
		||||
test/fips_test_suite
 | 
			
		||||
 | 
			
		||||
again should complete without errors.
 | 
			
		||||
 | 
			
		||||
Run test vectors: 
 | 
			
		||||
 | 
			
		||||
1. Download an appropriate set of testvectors from www.openssl.org/docs/fips
 | 
			
		||||
   only the fips-2.0 testvector files are usable for complete tests.
 | 
			
		||||
 | 
			
		||||
2. Extract the files to a suitable directory.
 | 
			
		||||
 | 
			
		||||
3. Run the test vector perl script, for example:
 | 
			
		||||
 | 
			
		||||
   cd fips
 | 
			
		||||
   perl fipsalgtest.pl --dir=/wherever/stuff/was/extracted
 | 
			
		||||
 | 
			
		||||
4. It should say "passed all tests" at the end. Report full details of any
 | 
			
		||||
   failures.
 | 
			
		||||
 | 
			
		||||
If you wish to use the older 1.2.x testvectors (for example those from 2007)
 | 
			
		||||
you need the command line switch --disable-v2 to fipsalgtest.pl
 | 
			
		||||
 | 
			
		||||
Examine the external symbols in fips/fipscanister.o they should all begin
 | 
			
		||||
with FIPS or fips. One way to check with GNU nm is:
 | 
			
		||||
 | 
			
		||||
	nm -g --defined-only fips/fipscanister.o | grep -v -i fips
 | 
			
		||||
 | 
			
		||||
If you get *any* output at all from this test (i.e. symbols not starting with
 | 
			
		||||
fips or FIPS) please report it.
 | 
			
		||||
 | 
			
		||||
Restricted tarball tests.
 | 
			
		||||
 | 
			
		||||
The validated module will have its own tarball containing sufficient code to
 | 
			
		||||
build fipscanister.o and the associated algorithm tests. You can create a
 | 
			
		||||
similar tarball yourself for testing purposes using the commands below.
 | 
			
		||||
 | 
			
		||||
Standard restricted tarball:
 | 
			
		||||
 | 
			
		||||
make -f Makefile.fips dist
 | 
			
		||||
 | 
			
		||||
Prime field field only ECC tarball:
 | 
			
		||||
 | 
			
		||||
make NOEC2M=1 -f Makefile.fips dist
 | 
			
		||||
 | 
			
		||||
Once you've created the tarball extract into a fresh directory and do:
 | 
			
		||||
 | 
			
		||||
./config
 | 
			
		||||
make
 | 
			
		||||
 | 
			
		||||
You can then run the algorithm tests as above. This build automatically uses
 | 
			
		||||
fipscanisterbuild and no-ec2m as appropriate.
 | 
			
		||||
 | 
			
		||||
FIPS capable OpenSSL test: WARNING PRELIMINARY INSTRUCTIONS, SUBJECT TO CHANGE.
 | 
			
		||||
 | 
			
		||||
At least initially the test module and FIPS capable OpenSSL may change and
 | 
			
		||||
by out of sync. You are advised to check for any changes and pull the latest
 | 
			
		||||
source from CVS if you have problems. See anon CVS and rsync instructions at:
 | 
			
		||||
 | 
			
		||||
http://www.openssl.org/source/repos.html
 | 
			
		||||
 | 
			
		||||
Make or download a restricted tarball from ftp://ftp.openssl.org/snapshot/
 | 
			
		||||
 | 
			
		||||
If required set the environment variable FIPSDIR to an appropriate location
 | 
			
		||||
to install the test module. If cross compiling set other environment
 | 
			
		||||
variables too.
 | 
			
		||||
 | 
			
		||||
In this restricted tarball on a Linux or U*ix like system run:
 | 
			
		||||
 | 
			
		||||
./config
 | 
			
		||||
make
 | 
			
		||||
make install
 | 
			
		||||
 | 
			
		||||
On Windows from a VC++ environment do:
 | 
			
		||||
 | 
			
		||||
ms\do_fips
 | 
			
		||||
 | 
			
		||||
This will build and install the test module and some associated files.
 | 
			
		||||
 | 
			
		||||
Now download the latest version of the OpenSSL 1.0.1 branch from either a
 | 
			
		||||
snapshot or preferably CVS. For Linux do:
 | 
			
		||||
 | 
			
		||||
./config fips [other args]
 | 
			
		||||
make
 | 
			
		||||
 | 
			
		||||
For Windows:
 | 
			
		||||
 | 
			
		||||
perl Configure VC-WIN32 fips [other args]
 | 
			
		||||
ms\do_nasm
 | 
			
		||||
nmake -f ms\ntdll.mak
 | 
			
		||||
 | 
			
		||||
(or ms\nt.mak for a static build).
 | 
			
		||||
 | 
			
		||||
Where [other args] can be any other arguments you use for an OpenSSL build
 | 
			
		||||
such as "shared" or "zlib".
 | 
			
		||||
 | 
			
		||||
This will build the fips capable OpenSSL and link it to the test module. You
 | 
			
		||||
can now try linking and testing applications against the FIPS capable OpenSSL.
 | 
			
		||||
 | 
			
		||||
Please report any problems to either the openssl-dev mailing list or directly
 | 
			
		||||
to me steve@openssl.org . Check the mailing lists regularly to avoid duplicate
 | 
			
		||||
reports.
 | 
			
		||||
 | 
			
		||||
Known issues:
 | 
			
		||||
 | 
			
		||||
Code needs extensively reviewing to ensure it builds correctly on 
 | 
			
		||||
supported platforms and is compliant with FIPS 140-2.
 | 
			
		||||
The "FIPS capable OpenSSL" is still largely untested, it builds and runs
 | 
			
		||||
some simple tests OK on some systems but needs far more "real world" testing.
 | 
			
		||||
							
								
								
									
										148
									
								
								STATUS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								STATUS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,148 @@
 | 
			
		||||
 | 
			
		||||
  OpenSSL STATUS                           Last modified at
 | 
			
		||||
  ______________                           $Date: 2011/02/08 17:48:56 $
 | 
			
		||||
 | 
			
		||||
  DEVELOPMENT STATE
 | 
			
		||||
 | 
			
		||||
    o  OpenSSL 1.1.0:  Under development...
 | 
			
		||||
    o  OpenSSL 1.0.1:  Under development...
 | 
			
		||||
    o  OpenSSL 1.0.0d: Released on February   8nd, 2011
 | 
			
		||||
    o  OpenSSL 1.0.0c: Released on December   2nd, 2010
 | 
			
		||||
    o  OpenSSL 1.0.0b: Released on November  16th, 2010
 | 
			
		||||
    o  OpenSSL 1.0.0a: Released on June      1st,  2010
 | 
			
		||||
    o  OpenSSL 1.0.0:  Released on March     29th, 2010
 | 
			
		||||
    o  OpenSSL 0.9.8r: Released on February   8nd, 2011
 | 
			
		||||
    o  OpenSSL 0.9.8q: Released on December   2nd, 2010
 | 
			
		||||
    o  OpenSSL 0.9.8p: Released on November  16th, 2010
 | 
			
		||||
    o  OpenSSL 0.9.8o: Released on June       1st, 2010
 | 
			
		||||
    o  OpenSSL 0.9.8n: Released on March     24th, 2010
 | 
			
		||||
    o  OpenSSL 0.9.8m: Released on February  25th, 2010
 | 
			
		||||
    o  OpenSSL 0.9.8l: Released on November   5th, 2009
 | 
			
		||||
    o  OpenSSL 0.9.8k: Released on March     25th, 2009
 | 
			
		||||
    o  OpenSSL 0.9.8j: Released on January    7th, 2009
 | 
			
		||||
    o  OpenSSL 0.9.8i: Released on September 15th, 2008
 | 
			
		||||
    o  OpenSSL 0.9.8h: Released on May       28th, 2008
 | 
			
		||||
    o  OpenSSL 0.9.8g: Released on October   19th, 2007
 | 
			
		||||
    o  OpenSSL 0.9.8f: Released on October   11th, 2007
 | 
			
		||||
    o  OpenSSL 0.9.8e: Released on February  23rd, 2007
 | 
			
		||||
    o  OpenSSL 0.9.8d: Released on September 28th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.8c: Released on September  5th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.8b: Released on May        4th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.8a: Released on October   11th, 2005
 | 
			
		||||
    o  OpenSSL 0.9.8:  Released on July       5th, 2005
 | 
			
		||||
    o  OpenSSL 0.9.7m: Released on February  23rd, 2007
 | 
			
		||||
    o  OpenSSL 0.9.7l: Released on September 28th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.7k: Released on September  5th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.7j: Released on May        4th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.7i: Released on October   14th, 2005
 | 
			
		||||
    o  OpenSSL 0.9.7h: Released on October   11th, 2005
 | 
			
		||||
    o  OpenSSL 0.9.7g: Released on April     11th, 2005
 | 
			
		||||
    o  OpenSSL 0.9.7f: Released on March     22nd, 2005
 | 
			
		||||
    o  OpenSSL 0.9.7e: Released on October   25th, 2004
 | 
			
		||||
    o  OpenSSL 0.9.7d: Released on March     17th, 2004
 | 
			
		||||
    o  OpenSSL 0.9.7c: Released on September 30th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.7b: Released on April     10th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.7a: Released on February  19th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.7:  Released on December  31st, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6m: Released on March     17th, 2004
 | 
			
		||||
    o  OpenSSL 0.9.6l: Released on November   4th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.6k: Released on September 30th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.6j: Released on April     10th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.6i: Released on February  19th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.6h: Released on December   5th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6g: Released on August     9th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6f: Released on August     8th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6e: Released on July      30th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6d: Released on May        9th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6c: Released on December  21st, 2001
 | 
			
		||||
    o  OpenSSL 0.9.6b: Released on July       9th, 2001
 | 
			
		||||
    o  OpenSSL 0.9.6a: Released on April      5th, 2001
 | 
			
		||||
    o  OpenSSL 0.9.6:  Released on September 24th, 2000
 | 
			
		||||
    o  OpenSSL 0.9.5a: Released on April      1st, 2000
 | 
			
		||||
    o  OpenSSL 0.9.5:  Released on February  28th, 2000
 | 
			
		||||
    o  OpenSSL 0.9.4:  Released on August    09th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.3a: Released on May       29th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.3:  Released on May       25th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.2b: Released on March     22th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.1c: Released on December  23th, 1998
 | 
			
		||||
 | 
			
		||||
  [See also http://www.openssl.org/support/rt.html]
 | 
			
		||||
 | 
			
		||||
  RELEASE SHOWSTOPPERS
 | 
			
		||||
 | 
			
		||||
    o The Makefiles fail with some SysV makes.
 | 
			
		||||
    o 
 | 
			
		||||
 | 
			
		||||
  AVAILABLE PATCHES
 | 
			
		||||
 | 
			
		||||
    o 
 | 
			
		||||
 | 
			
		||||
  IN PROGRESS
 | 
			
		||||
 | 
			
		||||
    o Steve is currently working on (in no particular order):
 | 
			
		||||
        ASN1 code redesign, butchery, replacement.
 | 
			
		||||
        OCSP
 | 
			
		||||
        EVP cipher enhancement.
 | 
			
		||||
        Enhanced certificate chain verification.
 | 
			
		||||
	Private key, certificate and CRL API and implementation.
 | 
			
		||||
	Developing and bugfixing PKCS#7 (S/MIME code).
 | 
			
		||||
        Various X509 issues: character sets, certificate request extensions.
 | 
			
		||||
    o Richard is currently working on:
 | 
			
		||||
	Constification
 | 
			
		||||
	Attribute Certificate support
 | 
			
		||||
	Certificate Pair support
 | 
			
		||||
	Storage Engines (primarly an LDAP storage engine)
 | 
			
		||||
	Certificate chain validation with full RFC 3280 compatibility
 | 
			
		||||
 | 
			
		||||
  NEEDS PATCH
 | 
			
		||||
 | 
			
		||||
    o  0.9.8-dev: COMPLEMENTOFALL and COMPLEMENTOFDEFAULT do not
 | 
			
		||||
       handle ECCdraft cipher suites correctly.
 | 
			
		||||
 | 
			
		||||
    o  apps/ca.c: "Sign the certificate?" - "n" creates empty certificate file
 | 
			
		||||
 | 
			
		||||
    o  "OpenSSL STATUS" is never up-to-date.
 | 
			
		||||
 | 
			
		||||
  OPEN ISSUES
 | 
			
		||||
 | 
			
		||||
    o  The Makefile hierarchy and build mechanism is still not a round thing:
 | 
			
		||||
 | 
			
		||||
       1. The config vs. Configure scripts
 | 
			
		||||
          It's the same nasty situation as for Apache with APACI vs.
 | 
			
		||||
          src/Configure. It confuses.
 | 
			
		||||
          Suggestion: Merge Configure and config into a single configure
 | 
			
		||||
                      script with a Autoconf style interface ;-) and remove
 | 
			
		||||
                      Configure and config. Or even let us use GNU Autoconf
 | 
			
		||||
                      itself. Then we can avoid a lot of those platform checks
 | 
			
		||||
                      which are currently in Configure.
 | 
			
		||||
 | 
			
		||||
    o  Support for Shared Libraries has to be added at least
 | 
			
		||||
       for the major Unix platforms. The details we can rip from the stuff
 | 
			
		||||
       Ralf has done for the Apache src/Configure script. Ben wants the
 | 
			
		||||
       solution to be really simple.
 | 
			
		||||
 | 
			
		||||
       Status: Ralf will look how we can easily incorporate the
 | 
			
		||||
               compiler PIC and linker DSO flags from Apache
 | 
			
		||||
               into the OpenSSL Configure script.
 | 
			
		||||
 | 
			
		||||
               Ulf: +1 for using GNU autoconf and libtool (but not automake,
 | 
			
		||||
                    which apparently is not flexible enough to generate
 | 
			
		||||
                    libcrypto)
 | 
			
		||||
 | 
			
		||||
  WISHES
 | 
			
		||||
 | 
			
		||||
    o  Add variants of DH_generate_parameters() and BN_generate_prime() [etc?]
 | 
			
		||||
       where the callback function can request that the function be aborted.
 | 
			
		||||
       [Gregory Stark <ghstark@pobox.com>, <rayyang2000@yahoo.com>]
 | 
			
		||||
 | 
			
		||||
    o  SRP in TLS.
 | 
			
		||||
       [wished by:
 | 
			
		||||
        Dj <derek@yo.net>, Tom Wu <tom@arcot.com>,
 | 
			
		||||
        Tom Holroyd <tomh@po.crl.go.jp>]
 | 
			
		||||
 | 
			
		||||
       See http://search.ietf.org/internet-drafts/draft-ietf-tls-srp-00.txt
 | 
			
		||||
       as well as http://www-cs-students.stanford.edu/~tjw/srp/.
 | 
			
		||||
 | 
			
		||||
       Tom Holroyd tells us there is a SRP patch for OpenSSH at
 | 
			
		||||
       http://members.tripod.com/professor_tom/archives/, that could
 | 
			
		||||
       be useful.
 | 
			
		||||
@@ -6,7 +6,6 @@ $! P2: Zlib object library path (optional).
 | 
			
		||||
$!
 | 
			
		||||
$! Input:	[.UTIL]LIBEAY.NUM,[.xxx.EXE.CRYPTO]SSL_LIBCRYPTO[32].OLB
 | 
			
		||||
$!		[.UTIL]SSLEAY.NUM,[.xxx.EXE.SSL]SSL_LIBSSL[32].OLB
 | 
			
		||||
$!		[.CRYPTO.xxx]OPENSSLCONF.H
 | 
			
		||||
$! Output:	[.xxx.EXE.CRYPTO]SSL_LIBCRYPTO_SHR[32].OPT,.MAP,.EXE
 | 
			
		||||
$!		[.xxx.EXE.SSL]SSL_LIBSSL_SRH[32].OPT,.MAP,.EXE
 | 
			
		||||
$!
 | 
			
		||||
@@ -71,9 +70,6 @@ $     endif
 | 
			
		||||
$   endif
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$! ----- Prepare info for processing: disabled algorithms info
 | 
			
		||||
$ gosub read_disabled_algorithms_info
 | 
			
		||||
$!
 | 
			
		||||
$ ZLIB = p2
 | 
			
		||||
$ zlib_lib = ""
 | 
			
		||||
$ if (ZLIB .nes. "")
 | 
			
		||||
@@ -388,7 +384,8 @@ $	alg_i = alg_i + 1
 | 
			
		||||
$       if alg_entry .eqs. "" then goto loop2
 | 
			
		||||
$       if alg_entry .nes. ","
 | 
			
		||||
$       then
 | 
			
		||||
$	  if disabled_algorithms - ("," + alg_entry + ",") .nes disabled_algorithms then goto loop
 | 
			
		||||
$         if alg_entry .eqs. "KRB5" then goto loop ! Special for now
 | 
			
		||||
$	  if alg_entry .eqs. "STATIC_ENGINE" then goto loop ! Special for now
 | 
			
		||||
$         if f$trnlnm("OPENSSL_NO_"+alg_entry) .nes. "" then goto loop
 | 
			
		||||
$	  goto loop2
 | 
			
		||||
$       endif
 | 
			
		||||
@@ -455,22 +452,3 @@ $     endif
 | 
			
		||||
$   endloop_rvi:
 | 
			
		||||
$   close vf
 | 
			
		||||
$   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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										131
									
								
								apps/Makefile
									
									
									
									
									
								
							
							
						
						
									
										131
									
								
								apps/Makefile
									
									
									
									
									
								
							@@ -39,7 +39,7 @@ E_EXE=	verify asn1pars req dgst dh dhparam enc passwd gendh errstr \
 | 
			
		||||
	ca crl rsa rsautl dsa dsaparam ec ecparam \
 | 
			
		||||
	x509 genrsa gendsa genpkey s_server s_client speed \
 | 
			
		||||
	s_time version pkcs7 cms crl2pkcs7 sess_id ciphers nseq pkcs12 \
 | 
			
		||||
	pkcs8 pkey pkeyparam pkeyutl spkac smime rand engine ocsp prime ts
 | 
			
		||||
	pkcs8 pkey pkeyparam pkeyutl spkac smime rand engine ocsp prime ts srp
 | 
			
		||||
 | 
			
		||||
PROGS= $(PROGRAM).c
 | 
			
		||||
 | 
			
		||||
@@ -56,7 +56,7 @@ E_OBJ=	verify.o asn1pars.o req.o dgst.o dh.o dhparam.o enc.o passwd.o gendh.o er
 | 
			
		||||
	x509.o genrsa.o gendsa.o genpkey.o s_server.o s_client.o speed.o \
 | 
			
		||||
	s_time.o $(A_OBJ) $(S_OBJ) $(RAND_OBJ) version.o sess_id.o \
 | 
			
		||||
	ciphers.o nseq.o pkcs12.o pkcs8.o pkey.o pkeyparam.o pkeyutl.o \
 | 
			
		||||
	spkac.o smime.o cms.o rand.o engine.o ocsp.o prime.o ts.o
 | 
			
		||||
	spkac.o smime.o cms.o rand.o engine.o ocsp.o prime.o ts.o srp.o
 | 
			
		||||
 | 
			
		||||
E_SRC=	verify.c asn1pars.c req.c dgst.c dh.c enc.c passwd.c gendh.c errstr.c ca.c \
 | 
			
		||||
	pkcs7.c crl2p7.c crl.c \
 | 
			
		||||
@@ -64,7 +64,7 @@ E_SRC=	verify.c asn1pars.c req.c dgst.c dh.c enc.c passwd.c gendh.c errstr.c ca.
 | 
			
		||||
	x509.c genrsa.c gendsa.c genpkey.c s_server.c s_client.c speed.c \
 | 
			
		||||
	s_time.c $(A_SRC) $(S_SRC) $(RAND_SRC) version.c sess_id.c \
 | 
			
		||||
	ciphers.c nseq.c pkcs12.c pkcs8.c pkey.c pkeyparam.c pkeyutl.c \
 | 
			
		||||
	spkac.c smime.c cms.c rand.c engine.c ocsp.c prime.c ts.c
 | 
			
		||||
	spkac.c smime.c cms.c rand.c engine.c ocsp.c prime.c ts.c srp.c
 | 
			
		||||
 | 
			
		||||
SRC=$(E_SRC)
 | 
			
		||||
 | 
			
		||||
@@ -94,9 +94,6 @@ req: sreq.o $(A_OBJ) $(DLIBCRYPTO)
 | 
			
		||||
sreq.o: req.c 
 | 
			
		||||
	$(CC) -c $(INCLUDES) $(CFLAG) -o sreq.o req.c
 | 
			
		||||
 | 
			
		||||
openssl-vms.cnf: openssl.cnf
 | 
			
		||||
	$(PERL) $(TOP)/VMS/VMSify-conf.pl < openssl.cnf > openssl-vms.cnf
 | 
			
		||||
 | 
			
		||||
files:
 | 
			
		||||
	$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
 | 
			
		||||
 | 
			
		||||
@@ -130,12 +127,12 @@ links:
 | 
			
		||||
lint:
 | 
			
		||||
	lint -DLINT $(INCLUDES) $(SRC)>fluff
 | 
			
		||||
 | 
			
		||||
update: openssl-vms.cnf local_depend
 | 
			
		||||
 | 
			
		||||
depend: local_depend
 | 
			
		||||
	@if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
 | 
			
		||||
local_depend:
 | 
			
		||||
	@[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(SRC); \
 | 
			
		||||
depend:
 | 
			
		||||
	@if [ -z "$(THIS)" ]; then \
 | 
			
		||||
	    $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; \
 | 
			
		||||
	else \
 | 
			
		||||
	    $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(SRC); \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
dclean:
 | 
			
		||||
	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
 | 
			
		||||
@@ -815,13 +812,13 @@ s_client.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
s_client.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
s_client.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
 | 
			
		||||
s_client.o: ../include/openssl/rand.h ../include/openssl/safestack.h
 | 
			
		||||
s_client.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
s_client.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_client.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_client.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
s_client.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
s_client.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
s_client.o: s_apps.h s_client.c timeouts.h
 | 
			
		||||
s_client.o: ../include/openssl/sha.h ../include/openssl/srp.h
 | 
			
		||||
s_client.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
s_client.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
s_client.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
s_client.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
s_client.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
s_client.o: ../include/openssl/x509v3.h apps.h s_apps.h s_client.c timeouts.h
 | 
			
		||||
s_server.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
s_server.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
s_server.o: ../include/openssl/comp.h ../include/openssl/conf.h
 | 
			
		||||
@@ -839,34 +836,33 @@ s_server.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
s_server.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
 | 
			
		||||
s_server.o: ../include/openssl/rand.h ../include/openssl/rsa.h
 | 
			
		||||
s_server.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
s_server.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
s_server.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
s_server.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
s_server.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
s_server.o: ../include/openssl/ui.h ../include/openssl/x509.h
 | 
			
		||||
s_server.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
s_server.o: s_apps.h s_server.c timeouts.h
 | 
			
		||||
s_socket.o: ../e_os.h ../e_os2.h ../include/openssl/asn1.h
 | 
			
		||||
s_socket.o: ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
			
		||||
s_socket.o: ../include/openssl/comp.h ../include/openssl/conf.h
 | 
			
		||||
s_socket.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h
 | 
			
		||||
s_socket.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
 | 
			
		||||
s_socket.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
 | 
			
		||||
s_socket.o: ../include/openssl/engine.h ../include/openssl/evp.h
 | 
			
		||||
s_socket.o: ../include/openssl/hmac.h ../include/openssl/kssl.h
 | 
			
		||||
s_socket.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
 | 
			
		||||
s_socket.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
 | 
			
		||||
s_socket.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
s_socket.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
s_socket.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
s_socket.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
s_socket.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
s_socket.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_socket.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_socket.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
s_socket.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
s_socket.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
s_socket.o: s_apps.h s_socket.c
 | 
			
		||||
s_server.o: ../include/openssl/srp.h ../include/openssl/ssl.h
 | 
			
		||||
s_server.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_server.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_server.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
s_server.o: ../include/openssl/txt_db.h ../include/openssl/ui.h
 | 
			
		||||
s_server.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
s_server.o: ../include/openssl/x509v3.h apps.h s_apps.h s_server.c timeouts.h
 | 
			
		||||
s_socket.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
s_socket.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
s_socket.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
s_socket.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h
 | 
			
		||||
s_socket.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
 | 
			
		||||
s_socket.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
 | 
			
		||||
s_socket.o: ../include/openssl/evp.h ../include/openssl/hmac.h
 | 
			
		||||
s_socket.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
 | 
			
		||||
s_socket.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
 | 
			
		||||
s_socket.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
 | 
			
		||||
s_socket.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
s_socket.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
s_socket.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
 | 
			
		||||
s_socket.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
s_socket.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
s_socket.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
s_socket.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
s_socket.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
s_socket.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
s_socket.o: ../include/openssl/x509v3.h apps.h s_apps.h s_socket.c
 | 
			
		||||
s_time.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
s_time.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
s_time.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -938,19 +934,19 @@ speed.o: ../include/openssl/err.h ../include/openssl/evp.h
 | 
			
		||||
speed.o: ../include/openssl/hmac.h ../include/openssl/idea.h
 | 
			
		||||
speed.o: ../include/openssl/lhash.h ../include/openssl/md4.h
 | 
			
		||||
speed.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
 | 
			
		||||
speed.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
 | 
			
		||||
speed.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
 | 
			
		||||
speed.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
speed.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
 | 
			
		||||
speed.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
 | 
			
		||||
speed.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
 | 
			
		||||
speed.o: ../include/openssl/safestack.h ../include/openssl/seed.h
 | 
			
		||||
speed.o: ../include/openssl/sha.h ../include/openssl/stack.h
 | 
			
		||||
speed.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
 | 
			
		||||
speed.o: ../include/openssl/ui.h ../include/openssl/ui_compat.h
 | 
			
		||||
speed.o: ../include/openssl/whrlpool.h ../include/openssl/x509.h
 | 
			
		||||
speed.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
speed.o: speed.c testdsa.h testrsa.h
 | 
			
		||||
speed.o: ../include/openssl/modes.h ../include/openssl/obj_mac.h
 | 
			
		||||
speed.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
 | 
			
		||||
speed.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
speed.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h
 | 
			
		||||
speed.o: ../include/openssl/rand.h ../include/openssl/rc2.h
 | 
			
		||||
speed.o: ../include/openssl/rc4.h ../include/openssl/ripemd.h
 | 
			
		||||
speed.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 | 
			
		||||
speed.o: ../include/openssl/seed.h ../include/openssl/sha.h
 | 
			
		||||
speed.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
speed.o: ../include/openssl/txt_db.h ../include/openssl/ui.h
 | 
			
		||||
speed.o: ../include/openssl/ui_compat.h ../include/openssl/whrlpool.h
 | 
			
		||||
speed.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
speed.o: ../include/openssl/x509v3.h apps.h speed.c testdsa.h testrsa.h
 | 
			
		||||
spkac.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
spkac.o: ../include/openssl/buffer.h ../include/openssl/conf.h
 | 
			
		||||
spkac.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
@@ -967,6 +963,21 @@ spkac.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
spkac.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
spkac.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
spkac.o: spkac.c
 | 
			
		||||
srp.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
srp.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
srp.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
srp.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
 | 
			
		||||
srp.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
 | 
			
		||||
srp.o: ../include/openssl/engine.h ../include/openssl/err.h
 | 
			
		||||
srp.o: ../include/openssl/evp.h ../include/openssl/lhash.h
 | 
			
		||||
srp.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
 | 
			
		||||
srp.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
 | 
			
		||||
srp.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
srp.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h
 | 
			
		||||
srp.o: ../include/openssl/sha.h ../include/openssl/srp.h
 | 
			
		||||
srp.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
srp.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
srp.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h srp.c
 | 
			
		||||
ts.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
ts.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
ts.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
 
 | 
			
		||||
@@ -115,6 +115,7 @@
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int seeded = 0;
 | 
			
		||||
static int egdsocket = 0;
 | 
			
		||||
 | 
			
		||||
@@ -132,27 +133,26 @@ int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn)
 | 
			
		||||
 | 
			
		||||
	if (file == NULL)
 | 
			
		||||
		file = RAND_file_name(buffer, sizeof buffer);
 | 
			
		||||
    else if (RAND_egd(file) > 0) {
 | 
			
		||||
        /*
 | 
			
		||||
         * we try if the given filename is an EGD socket. if it is, we don't
 | 
			
		||||
         * write anything back to the file.
 | 
			
		||||
         */
 | 
			
		||||
	else if (RAND_egd(file) > 0)
 | 
			
		||||
		{
 | 
			
		||||
		/* we try if the given filename is an EGD socket.
 | 
			
		||||
		   if it is, we don't write anything back to the file. */
 | 
			
		||||
		egdsocket = 1;
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
    if (file == NULL || !RAND_load_file(file, -1)) {
 | 
			
		||||
        if (RAND_status() == 0) {
 | 
			
		||||
            if (!dont_warn) {
 | 
			
		||||
	if (file == NULL || !RAND_load_file(file, -1))
 | 
			
		||||
		{
 | 
			
		||||
		if (RAND_status() == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!dont_warn)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_e,"unable to load 'random state'\n");
 | 
			
		||||
                BIO_printf(bio_e,
 | 
			
		||||
                           "This means that the random number generator has not been seeded\n");
 | 
			
		||||
				BIO_printf(bio_e,"This means that the random number generator has not been seeded\n");
 | 
			
		||||
				BIO_printf(bio_e,"with much random data.\n");
 | 
			
		||||
                if (consider_randfile) { /* explanation does not apply when a
 | 
			
		||||
                                          * file is explicitly named */
 | 
			
		||||
                    BIO_printf(bio_e,
 | 
			
		||||
                               "Consider setting the RANDFILE environment variable to point at a file that\n");
 | 
			
		||||
                    BIO_printf(bio_e,
 | 
			
		||||
                               "'random' data can be kept in (the file will be overwritten).\n");
 | 
			
		||||
				if (consider_randfile) /* explanation does not apply when a file is explicitly named */
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_e,"Consider setting the RANDFILE environment variable to point at a file that\n");
 | 
			
		||||
					BIO_printf(bio_e,"'random' data can be kept in (the file will be overwritten).\n");
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			return 0;
 | 
			
		||||
@@ -169,24 +169,22 @@ long app_RAND_load_files(char *name)
 | 
			
		||||
	long tot=0;
 | 
			
		||||
	int egd;
 | 
			
		||||
	
 | 
			
		||||
    for (;;) {
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		last=0;
 | 
			
		||||
		for (p=name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++);
 | 
			
		||||
        if (*p == '\0')
 | 
			
		||||
            last = 1;
 | 
			
		||||
		if (*p == '\0') last=1;
 | 
			
		||||
		*p='\0';
 | 
			
		||||
		n=name;
 | 
			
		||||
		name=p+1;
 | 
			
		||||
        if (*n == '\0')
 | 
			
		||||
            break;
 | 
			
		||||
		if (*n == '\0') break;
 | 
			
		||||
 | 
			
		||||
		egd=RAND_egd(n);
 | 
			
		||||
		if (egd > 0)
 | 
			
		||||
			tot+=egd;
 | 
			
		||||
		else
 | 
			
		||||
			tot+=RAND_load_file(n,-1);
 | 
			
		||||
        if (last)
 | 
			
		||||
            break;
 | 
			
		||||
		if (last) break;
 | 
			
		||||
		}
 | 
			
		||||
	if (tot > 512)
 | 
			
		||||
		app_RAND_allow_write_file();
 | 
			
		||||
@@ -198,16 +196,16 @@ int app_RAND_write_file(const char *file, BIO *bio_e)
 | 
			
		||||
	char buffer[200];
 | 
			
		||||
	
 | 
			
		||||
	if (egdsocket || !seeded)
 | 
			
		||||
        /*
 | 
			
		||||
         * If we did not manage to read the seed file, we should not write a
 | 
			
		||||
         * low-entropy seed file back -- it would suppress a crucial warning
 | 
			
		||||
         * the next time we want to use it.
 | 
			
		||||
         */
 | 
			
		||||
		/* If we did not manage to read the seed file,
 | 
			
		||||
		 * we should not write a low-entropy seed file back --
 | 
			
		||||
		 * it would suppress a crucial warning the next time
 | 
			
		||||
		 * we want to use it. */
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (file == NULL)
 | 
			
		||||
		file = RAND_file_name(buffer, sizeof buffer);
 | 
			
		||||
    if (file == NULL || !RAND_write_file(file)) {
 | 
			
		||||
	if (file == NULL || !RAND_write_file(file))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_e,"unable to write 'random state'\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1154
									
								
								apps/apps.c
									
									
									
									
									
								
							
							
						
						
									
										1154
									
								
								apps/apps.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										55
									
								
								apps/apps.h
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								apps/apps.h
									
									
									
									
									
								
							@@ -129,9 +129,8 @@
 | 
			
		||||
 | 
			
		||||
int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn);
 | 
			
		||||
int app_RAND_write_file(const char *file, BIO *bio_e);
 | 
			
		||||
/*
 | 
			
		||||
 * When `file' is NULL, use defaults. `bio_e' is for error messages.
 | 
			
		||||
 */
 | 
			
		||||
/* When `file' is NULL, use defaults.
 | 
			
		||||
 * `bio_e' is for error messages. */
 | 
			
		||||
void app_RAND_allow_write_file(void);
 | 
			
		||||
long app_RAND_load_files(char *file); /* `file' is a list of files to read,
 | 
			
		||||
                                       * separated by LIST_SEPARATOR_CHAR
 | 
			
		||||
@@ -209,18 +208,22 @@ extern BIO *bio_err;
 | 
			
		||||
#  define openssl_fdset(a,b) FD_SET(a, b)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef struct args_st {
 | 
			
		||||
 | 
			
		||||
typedef struct args_st
 | 
			
		||||
	{
 | 
			
		||||
	char **data;
 | 
			
		||||
	int count;
 | 
			
		||||
	} ARGS;
 | 
			
		||||
 | 
			
		||||
#define PW_MIN_LENGTH 4
 | 
			
		||||
typedef struct pw_cb_data {
 | 
			
		||||
typedef struct pw_cb_data
 | 
			
		||||
	{
 | 
			
		||||
	const void *password;
 | 
			
		||||
	const char *prompt_info;
 | 
			
		||||
	} PW_CB_DATA;
 | 
			
		||||
 | 
			
		||||
int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_data);
 | 
			
		||||
int password_callback(char *buf, int bufsiz, int verify,
 | 
			
		||||
	PW_CB_DATA *cb_data);
 | 
			
		||||
 | 
			
		||||
int setup_ui_method(void);
 | 
			
		||||
void destroy_ui_method(void);
 | 
			
		||||
@@ -232,8 +235,7 @@ void program_name(char *in, char *out, int size);
 | 
			
		||||
int chopup_args(ARGS *arg,char *buf, int *argc, char **argv[]);
 | 
			
		||||
#ifdef HEADER_X509_H
 | 
			
		||||
int dump_cert_text(BIO *out, X509 *x);
 | 
			
		||||
void print_name(BIO *out, const char *title, X509_NAME *nm,
 | 
			
		||||
                unsigned long lflags);
 | 
			
		||||
void print_name(BIO *out, const char *title, X509_NAME *nm, unsigned long lflags);
 | 
			
		||||
#endif
 | 
			
		||||
int set_cert_ex(unsigned long *flags, const char *arg);
 | 
			
		||||
int set_name_ex(unsigned long *flags, const char *arg);
 | 
			
		||||
@@ -248,11 +250,9 @@ EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
 | 
			
		||||
EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin,
 | 
			
		||||
	const char *pass, ENGINE *e, const char *key_descrip);
 | 
			
		||||
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);
 | 
			
		||||
	const char *pass, ENGINE *e, const char *cert_descrip);
 | 
			
		||||
X509_STORE *setup_verify(BIO *bp, char *CAfile, char *CApath);
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
ENGINE *setup_engine(BIO *err, const char *engine, int debug);
 | 
			
		||||
@@ -260,8 +260,8 @@ ENGINE *setup_engine(BIO *err, const char *engine, int debug);
 | 
			
		||||
 | 
			
		||||
#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,
 | 
			
		||||
			char *host, char *path, char *port, int use_ssl,
 | 
			
		||||
			STACK_OF(CONF_VALUE) *headers,
 | 
			
		||||
			int req_timeout);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -277,32 +277,31 @@ int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
 | 
			
		||||
#define DB_rev_date     2
 | 
			
		||||
#define DB_serial       3       /* index - unique */
 | 
			
		||||
#define DB_file         4       
 | 
			
		||||
# define DB_name         5      /* index - unique when active and not
 | 
			
		||||
                                 * disabled */
 | 
			
		||||
#define DB_name         5       /* index - unique when active and not disabled */
 | 
			
		||||
#define DB_NUMBER       6
 | 
			
		||||
 | 
			
		||||
#define DB_TYPE_REV	'R'
 | 
			
		||||
#define DB_TYPE_EXP	'E'
 | 
			
		||||
#define DB_TYPE_VAL	'V'
 | 
			
		||||
 | 
			
		||||
typedef struct db_attr_st {
 | 
			
		||||
typedef struct db_attr_st
 | 
			
		||||
	{
 | 
			
		||||
	int unique_subject;
 | 
			
		||||
	} DB_ATTR;
 | 
			
		||||
typedef struct ca_db_st {
 | 
			
		||||
typedef struct ca_db_st
 | 
			
		||||
	{
 | 
			
		||||
	DB_ATTR attributes;
 | 
			
		||||
	TXT_DB *db;
 | 
			
		||||
	} CA_DB;
 | 
			
		||||
 | 
			
		||||
BIGNUM *load_serial(char *serialfile, int create, ASN1_INTEGER **retai);
 | 
			
		||||
int save_serial(char *serialfile, char *suffix, BIGNUM *serial,
 | 
			
		||||
                ASN1_INTEGER **retai);
 | 
			
		||||
int save_serial(char *serialfile, char *suffix, BIGNUM *serial, ASN1_INTEGER **retai);
 | 
			
		||||
int rotate_serial(char *serialfile, char *new_suffix, char *old_suffix);
 | 
			
		||||
int rand_serial(BIGNUM *b, ASN1_INTEGER *ai);
 | 
			
		||||
CA_DB *load_index(char *dbfile, DB_ATTR *dbattr);
 | 
			
		||||
int index_index(CA_DB *db);
 | 
			
		||||
int save_index(const char *dbfile, const char *suffix, CA_DB *db);
 | 
			
		||||
int rotate_index(const char *dbfile, const char *new_suffix,
 | 
			
		||||
                 const char *old_suffix);
 | 
			
		||||
int rotate_index(const char *dbfile, const char *new_suffix, const char *old_suffix);
 | 
			
		||||
void free_index(CA_DB *db);
 | 
			
		||||
#define index_name_cmp_noconst(a, b) \
 | 
			
		||||
	index_name_cmp((const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, a), \
 | 
			
		||||
@@ -318,6 +317,12 @@ 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
 | 
			
		||||
@@ -359,3 +364,9 @@ int raw_write_stdout(const void *, int);
 | 
			
		||||
#define TM_STOP		1
 | 
			
		||||
double app_tminterval (int stop,int usertime);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define OPENSSL_NO_SSL_INTERN
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_NEXTPROTONEG
 | 
			
		||||
unsigned char *next_protos_parse(unsigned short *outlen, const char *in);
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										215
									
								
								apps/asn1pars.c
									
									
									
									
									
								
							
							
						
						
									
										215
									
								
								apps/asn1pars.c
									
									
									
									
									
								
							@@ -56,9 +56,8 @@
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * A nice addition from Dr Stephen Henson <steve@openssl.org> to add the
 | 
			
		||||
 * -strparse option which parses nested binary structures
 | 
			
		||||
/* A nice addition from Dr Stephen Henson <steve@openssl.org> to 
 | 
			
		||||
 * add the -strparse option which parses nested binary structures
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
@@ -70,8 +69,7 @@
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -i		- indent the details by depth
 | 
			
		||||
 * -offset	- where in the file to start
 | 
			
		||||
@@ -115,62 +113,76 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    if ((osk = sk_OPENSSL_STRING_new_null()) == NULL) {
 | 
			
		||||
	if ((osk=sk_OPENSSL_STRING_new_null()) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"Memory allocation failure\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			derfile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-i") == 0) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-i") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			indent=1;
 | 
			
		||||
        } else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-oid") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0) noout = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-oid") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			oidfile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-offset") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-offset") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			offset= atoi(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-length") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-length") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			length= atoi(*(++argv));
 | 
			
		||||
            if (length == 0)
 | 
			
		||||
                goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-dump") == 0) {
 | 
			
		||||
			if (length == 0) goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-dump") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			dump= -1;
 | 
			
		||||
        } else if (strcmp(*argv, "-dlimit") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-dlimit") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			dump= atoi(*(++argv));
 | 
			
		||||
            if (dump <= 0)
 | 
			
		||||
                goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-strparse") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			if (dump <= 0) goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-strparse") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			sk_OPENSSL_STRING_push(osk,*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-genstr") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-genstr") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			genstr= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-genconf") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-genconf") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			genconf= *(++argv);
 | 
			
		||||
        } else {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
@@ -179,30 +191,26 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badops) {
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - one of DER PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -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," -offset arg   offset into file\n");
 | 
			
		||||
		BIO_printf(bio_err," -length arg   length of section in file\n");
 | 
			
		||||
		BIO_printf(bio_err," -i            indent entries\n");
 | 
			
		||||
		BIO_printf(bio_err," -dump         dump unknown data in hex form\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -dlimit arg   dump the first arg bytes of unknown data in hex form\n");
 | 
			
		||||
		BIO_printf(bio_err," -dlimit arg   dump the first arg bytes of unknown data in hex form\n");
 | 
			
		||||
		BIO_printf(bio_err," -oid file     file of extra oid definitions\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,
 | 
			
		||||
                   " -genstr str   string to generate ASN1 structure from\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -genconf file file to generate ASN1 structure from\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;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -210,7 +218,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -222,8 +231,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (oidfile != NULL) {
 | 
			
		||||
        if (BIO_read_filename(in, oidfile) <= 0) {
 | 
			
		||||
	if (oidfile != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,oidfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"problems opening %s\n",oidfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -233,8 +244,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -248,22 +261,24 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    if ((buf = BUF_MEM_new()) == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
    if (!BUF_MEM_grow(buf, BUFSIZ * 8))
 | 
			
		||||
        goto end;               /* Pre-allocate :-) */
 | 
			
		||||
	if ((buf=BUF_MEM_new()) == NULL) goto end;
 | 
			
		||||
	if (!BUF_MEM_grow(buf,BUFSIZ*8)) goto end; /* Pre-allocate :-) */
 | 
			
		||||
 | 
			
		||||
    if (genstr || genconf) {
 | 
			
		||||
	if (genstr || genconf)
 | 
			
		||||
		{
 | 
			
		||||
		num = do_generate(bio_err, genstr, genconf, buf);
 | 
			
		||||
        if (num < 0) {
 | 
			
		||||
		if (num < 0)
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    else {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
 | 
			
		||||
        if (informat == FORMAT_PEM) {
 | 
			
		||||
		if (informat == FORMAT_PEM)
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmp;
 | 
			
		||||
 | 
			
		||||
			if ((b64=BIO_new(BIO_f_base64())) == NULL)
 | 
			
		||||
@@ -275,12 +290,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		num=0;
 | 
			
		||||
        for (;;) {
 | 
			
		||||
            if (!BUF_MEM_grow(buf, (int)num + BUFSIZ))
 | 
			
		||||
                goto end;
 | 
			
		||||
		for (;;)
 | 
			
		||||
			{
 | 
			
		||||
			if (!BUF_MEM_grow(buf,(int)num+BUFSIZ)) goto end;
 | 
			
		||||
			i=BIO_read(in,&(buf->data[num]),BUFSIZ);
 | 
			
		||||
            if (i <= 0)
 | 
			
		||||
                break;
 | 
			
		||||
			if (i <= 0) break;
 | 
			
		||||
			num+=i;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@@ -288,16 +302,18 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	/* If any structs to parse go through in sequence */
 | 
			
		||||
 | 
			
		||||
    if (sk_OPENSSL_STRING_num(osk)) {
 | 
			
		||||
	if (sk_OPENSSL_STRING_num(osk))
 | 
			
		||||
		{
 | 
			
		||||
		tmpbuf=(unsigned char *)str;
 | 
			
		||||
		tmplen=num;
 | 
			
		||||
        for (i = 0; i < sk_OPENSSL_STRING_num(osk); i++) {
 | 
			
		||||
		for (i=0; i<sk_OPENSSL_STRING_num(osk); i++)
 | 
			
		||||
			{
 | 
			
		||||
			ASN1_TYPE *atmp;
 | 
			
		||||
			int typ;
 | 
			
		||||
			j=atoi(sk_OPENSSL_STRING_value(osk,i));
 | 
			
		||||
            if (j == 0) {
 | 
			
		||||
                BIO_printf(bio_err, "'%s' is an invalid number\n",
 | 
			
		||||
                           sk_OPENSSL_STRING_value(osk, i));
 | 
			
		||||
			if (j == 0)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"'%s' is an invalid number\n",sk_OPENSSL_STRING_value(osk,i));
 | 
			
		||||
				continue;
 | 
			
		||||
				}
 | 
			
		||||
			tmpbuf+=j;
 | 
			
		||||
@@ -306,14 +322,16 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			ctmpbuf = tmpbuf;
 | 
			
		||||
			at = d2i_ASN1_TYPE(NULL,&ctmpbuf,tmplen);
 | 
			
		||||
			ASN1_TYPE_free(atmp);
 | 
			
		||||
            if (!at) {
 | 
			
		||||
			if(!at)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"Error parsing structure\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			typ = ASN1_TYPE_get(at);
 | 
			
		||||
			if ((typ == V_ASN1_OBJECT)
 | 
			
		||||
                || (typ == V_ASN1_NULL)) {
 | 
			
		||||
				|| (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);
 | 
			
		||||
@@ -327,15 +345,15 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		num=tmplen;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (offset >= num) {
 | 
			
		||||
	if (offset >= num)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error: offset too large\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	num -= offset;
 | 
			
		||||
 | 
			
		||||
    if ((length == 0) || ((long)length > num))
 | 
			
		||||
        length = (unsigned int)num;
 | 
			
		||||
	if ((length == 0) || ((long)length > num)) length=(unsigned int)num;
 | 
			
		||||
	if(derout) {
 | 
			
		||||
		if(BIO_write(derout, str + offset, length) != (int)length) {
 | 
			
		||||
			BIO_printf(bio_err, "Error writing output\n");
 | 
			
		||||
@@ -345,27 +363,22 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	}
 | 
			
		||||
	if (!noout &&
 | 
			
		||||
	    !ASN1_parse_dump(out,(unsigned char *)&(str[offset]),length,
 | 
			
		||||
                         indent, dump)) {
 | 
			
		||||
		    indent,dump))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	BIO_free(derout);
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (b64 != NULL)
 | 
			
		||||
        BIO_free(b64);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (b64 != NULL) BIO_free(b64);
 | 
			
		||||
	if (ret != 0)
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
    if (buf != NULL)
 | 
			
		||||
        BUF_MEM_free(buf);
 | 
			
		||||
    if (at != NULL)
 | 
			
		||||
        ASN1_TYPE_free(at);
 | 
			
		||||
    if (osk != NULL)
 | 
			
		||||
        sk_OPENSSL_STRING_free(osk);
 | 
			
		||||
	if (buf != NULL) BUF_MEM_free(buf);
 | 
			
		||||
	if (at != NULL) ASN1_TYPE_free(at);
 | 
			
		||||
	if (osk != NULL) sk_OPENSSL_STRING_free(osk);
 | 
			
		||||
	OBJ_cleanup();
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
@@ -379,13 +392,15 @@ static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf)
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	ASN1_TYPE *atyp = NULL;
 | 
			
		||||
 | 
			
		||||
    if (genconf) {
 | 
			
		||||
	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) {
 | 
			
		||||
		if (!genstr)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio, "Can't find 'asn1' in '%s'\n", genconf);
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -96,7 +96,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	char buf[512];
 | 
			
		||||
	BIO *STDout=NULL;
 | 
			
		||||
 | 
			
		||||
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
	meth=SSLv23_server_method();
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
	meth=SSLv3_server_method();
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL2)
 | 
			
		||||
	meth=SSLv2_server_method();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
@@ -114,7 +120,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if (strcmp(*argv,"-v") == 0)
 | 
			
		||||
			verbose=1;
 | 
			
		||||
		else if (strcmp(*argv,"-V") == 0)
 | 
			
		||||
@@ -131,17 +138,22 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		else if (strcmp(*argv,"-tls1") == 0)
 | 
			
		||||
			meth=TLSv1_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
        else if ((strncmp(*argv, "-h", 2) == 0) || (strcmp(*argv, "-?") == 0)) {
 | 
			
		||||
		else if ((strncmp(*argv,"-h",2) == 0) ||
 | 
			
		||||
			 (strcmp(*argv,"-?") == 0))
 | 
			
		||||
			{
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
        } else {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			ciphers= *argv;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badops) {
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
		for (pp=ciphers_usage; (*pp != NULL); pp++)
 | 
			
		||||
			BIO_printf(bio_err,"%s",*pp);
 | 
			
		||||
		goto end;
 | 
			
		||||
@@ -150,8 +162,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	OpenSSL_add_ssl_algorithms();
 | 
			
		||||
 | 
			
		||||
	ctx=SSL_CTX_new(meth);
 | 
			
		||||
    if (ctx == NULL)
 | 
			
		||||
        goto err;
 | 
			
		||||
	if (ctx == NULL) goto err;
 | 
			
		||||
	if (ciphers != NULL) {
 | 
			
		||||
		if(!SSL_CTX_set_cipher_list(ctx,ciphers)) {
 | 
			
		||||
			BIO_printf(bio_err, "Error in cipher list\n");
 | 
			
		||||
@@ -159,48 +170,44 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	ssl=SSL_new(ctx);
 | 
			
		||||
    if (ssl == NULL)
 | 
			
		||||
        goto err;
 | 
			
		||||
	if (ssl == NULL) goto err;
 | 
			
		||||
 | 
			
		||||
    if (!verbose) {
 | 
			
		||||
        for (i = 0;; i++) {
 | 
			
		||||
 | 
			
		||||
	if (!verbose)
 | 
			
		||||
		{
 | 
			
		||||
		for (i=0; ; i++)
 | 
			
		||||
			{
 | 
			
		||||
			p=SSL_get_cipher_list(ssl,i);
 | 
			
		||||
            if (p == NULL)
 | 
			
		||||
                break;
 | 
			
		||||
            if (i != 0)
 | 
			
		||||
                BIO_printf(STDout, ":");
 | 
			
		||||
			if (p == NULL) break;
 | 
			
		||||
			if (i != 0) BIO_printf(STDout,":");
 | 
			
		||||
			BIO_printf(STDout,"%s",p);
 | 
			
		||||
			}
 | 
			
		||||
		BIO_printf(STDout,"\n");
 | 
			
		||||
    } else {                    /* verbose */
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	else /* verbose */
 | 
			
		||||
		{
 | 
			
		||||
		sk=SSL_get_ciphers(ssl);
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
 | 
			
		||||
		for (i=0; i<sk_SSL_CIPHER_num(sk); i++)
 | 
			
		||||
			{
 | 
			
		||||
			SSL_CIPHER *c;
 | 
			
		||||
 | 
			
		||||
			c = sk_SSL_CIPHER_value(sk,i);
 | 
			
		||||
			
 | 
			
		||||
            if (Verbose) {
 | 
			
		||||
                unsigned long id = c->id;
 | 
			
		||||
			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) {
 | 
			
		||||
                    /* SSL2 cipher */
 | 
			
		||||
                    BIO_printf(STDout, "     0x%02X,0x%02X,0x%02X - ", id1,
 | 
			
		||||
                               id2, id3);
 | 
			
		||||
                } else if ((id & 0xff000000L) == 0x03000000L) {
 | 
			
		||||
                    /* SSL3 cipher */
 | 
			
		||||
                    BIO_printf(STDout, "          0x%02X,0x%02X - ", id2,
 | 
			
		||||
                               id3);
 | 
			
		||||
                } else {
 | 
			
		||||
                    /* whatever */
 | 
			
		||||
                    BIO_printf(STDout, "0x%02X,0x%02X,0x%02X,0x%02X - ", id0,
 | 
			
		||||
                               id1, id2, id3);
 | 
			
		||||
                }
 | 
			
		||||
				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));
 | 
			
		||||
@@ -208,18 +215,17 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
    if (0) {
 | 
			
		||||
	if (0)
 | 
			
		||||
		{
 | 
			
		||||
err:
 | 
			
		||||
		SSL_load_error_strings();
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
end:
 | 
			
		||||
    if (ctx != NULL)
 | 
			
		||||
        SSL_CTX_free(ctx);
 | 
			
		||||
    if (ssl != NULL)
 | 
			
		||||
        SSL_free(ssl);
 | 
			
		||||
    if (STDout != NULL)
 | 
			
		||||
        BIO_free_all(STDout);
 | 
			
		||||
	if (ctx != NULL) SSL_CTX_free(ctx);
 | 
			
		||||
	if (ssl != NULL) SSL_free(ssl);
 | 
			
		||||
	if (STDout != NULL) BIO_free_all(STDout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										629
									
								
								apps/cms.c
									
									
									
									
									
								
							
							
						
						
									
										629
									
								
								apps/cms.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										220
									
								
								apps/crl.c
									
									
									
									
									
								
							
							
						
						
									
										220
									
								
								apps/crl.c
									
									
									
									
									
								
							@@ -81,9 +81,6 @@ static const char *crl_usage[] = {
 | 
			
		||||
" -in arg         - input file - default stdin\n",
 | 
			
		||||
" -out arg        - output file - default stdout\n",
 | 
			
		||||
" -hash           - print hash value\n",
 | 
			
		||||
#ifndef OPENSSL_NO_MD5
 | 
			
		||||
    " -hash_old       - print old-style (MD5) hash value\n",
 | 
			
		||||
#endif
 | 
			
		||||
" -fingerprint    - print the crl fingerprint\n",
 | 
			
		||||
" -issuer         - print issuer DN\n",
 | 
			
		||||
" -lastupdate     - lastUpdate field\n",
 | 
			
		||||
@@ -110,11 +107,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	BIO *out=NULL;
 | 
			
		||||
	int informat,outformat;
 | 
			
		||||
	char *infile=NULL,*outfile=NULL;
 | 
			
		||||
    int hash = 0, issuer = 0, lastupdate = 0, nextupdate = 0, noout =
 | 
			
		||||
        0, text = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_MD5
 | 
			
		||||
    int hash_old = 0;
 | 
			
		||||
#endif
 | 
			
		||||
	int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0;
 | 
			
		||||
	int fingerprint = 0, crlnumber = 0;
 | 
			
		||||
	const char **pp;
 | 
			
		||||
	X509_STORE *store = NULL;
 | 
			
		||||
@@ -135,7 +128,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	if (bio_out == NULL)
 | 
			
		||||
        if ((bio_out = BIO_new(BIO_s_file())) != NULL) {
 | 
			
		||||
		if ((bio_out=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_set_fp(bio_out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
@@ -151,58 +145,59 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	num=0;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
#ifdef undef
 | 
			
		||||
        if (strcmp(*argv, "-p") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!args_from_file(++argv, Nargc, Nargv)) {
 | 
			
		||||
                goto end;
 | 
			
		||||
		if	(strcmp(*argv,"-p") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			if (!args_from_file(++argv,Nargc,Nargv)) { goto end; }*/
 | 
			
		||||
			}
 | 
			
		||||
        */}
 | 
			
		||||
#endif
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-CApath") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-CApath") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			CApath = *(++argv);
 | 
			
		||||
			do_ver = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-CAfile") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-CAfile") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			CAfile = *(++argv);
 | 
			
		||||
			do_ver = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-verify") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-verify") == 0)
 | 
			
		||||
			do_ver = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-hash") == 0)
 | 
			
		||||
			hash= ++num;
 | 
			
		||||
#ifndef OPENSSL_NO_MD5
 | 
			
		||||
        else if (strcmp(*argv, "-hash_old") == 0)
 | 
			
		||||
            hash_old = ++num;
 | 
			
		||||
#endif
 | 
			
		||||
        else if (strcmp(*argv, "-nameopt") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!set_name_ex(&nmflag, *(++argv)))
 | 
			
		||||
                goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-issuer") == 0)
 | 
			
		||||
		else if (strcmp(*argv,"-nameopt") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			if (!set_name_ex(&nmflag, *(++argv))) goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-issuer") == 0)
 | 
			
		||||
			issuer= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-lastupdate") == 0)
 | 
			
		||||
			lastupdate= ++num;
 | 
			
		||||
@@ -214,10 +209,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			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 */
 | 
			
		||||
			digest=md_alg;
 | 
			
		||||
        } else {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
@@ -226,7 +224,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badops) {
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		for (pp=crl_usage; (*pp != NULL); pp++)
 | 
			
		||||
			BIO_printf(bio_err,"%s",*pp);
 | 
			
		||||
@@ -235,105 +234,110 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	x=load_crl(infile,informat);
 | 
			
		||||
    if (x == NULL) {
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
	if (x == NULL) { goto end; }
 | 
			
		||||
 | 
			
		||||
	if(do_ver) {
 | 
			
		||||
		store = X509_STORE_new();
 | 
			
		||||
		lookup=X509_STORE_add_lookup(store,X509_LOOKUP_file());
 | 
			
		||||
        if (lookup == NULL)
 | 
			
		||||
            goto end;
 | 
			
		||||
		if (lookup == NULL) goto end;
 | 
			
		||||
		if (!X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM))
 | 
			
		||||
			X509_LOOKUP_load_file(lookup,NULL,X509_FILETYPE_DEFAULT);
 | 
			
		||||
			
 | 
			
		||||
		lookup=X509_STORE_add_lookup(store,X509_LOOKUP_hash_dir());
 | 
			
		||||
        if (lookup == NULL)
 | 
			
		||||
            goto end;
 | 
			
		||||
		if (lookup == NULL) goto end;
 | 
			
		||||
		if (!X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM))
 | 
			
		||||
			X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
 | 
			
		||||
		ERR_clear_error();
 | 
			
		||||
 | 
			
		||||
		if(!X509_STORE_CTX_init(&ctx, store, NULL, NULL)) {
 | 
			
		||||
            BIO_printf(bio_err, "Error initialising X509 store\n");
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				"Error initialising X509 store\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		i = X509_STORE_get_by_subject(&ctx, X509_LU_X509, 
 | 
			
		||||
					X509_CRL_get_issuer(x), &xobj);
 | 
			
		||||
		if(i <= 0) {
 | 
			
		||||
            BIO_printf(bio_err, "Error getting CRL issuer certificate\n");
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				"Error getting CRL issuer certificate\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		pkey = X509_get_pubkey(xobj.data.x509);
 | 
			
		||||
		X509_OBJECT_free_contents(&xobj);
 | 
			
		||||
		if(!pkey) {
 | 
			
		||||
            BIO_printf(bio_err, "Error getting CRL issuer public key\n");
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				"Error getting CRL issuer public key\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		i = X509_CRL_verify(x, pkey);
 | 
			
		||||
		EVP_PKEY_free(pkey);
 | 
			
		||||
        if (i < 0)
 | 
			
		||||
            goto end;
 | 
			
		||||
        if (i == 0)
 | 
			
		||||
            BIO_printf(bio_err, "verify failure\n");
 | 
			
		||||
        else
 | 
			
		||||
            BIO_printf(bio_err, "verify OK\n");
 | 
			
		||||
		if(i < 0) goto end;
 | 
			
		||||
		if(i == 0) BIO_printf(bio_err, "verify failure\n");
 | 
			
		||||
		else BIO_printf(bio_err, "verify OK\n");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    if (num) {
 | 
			
		||||
        for (i = 1; i <= num; i++) {
 | 
			
		||||
            if (issuer == i) {
 | 
			
		||||
                print_name(bio_out, "issuer=", X509_CRL_get_issuer(x),
 | 
			
		||||
                           nmflag);
 | 
			
		||||
	if (num)
 | 
			
		||||
		{
 | 
			
		||||
		for (i=1; i<=num; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if (issuer == i)
 | 
			
		||||
				{
 | 
			
		||||
				print_name(bio_out, "issuer=", X509_CRL_get_issuer(x), nmflag);
 | 
			
		||||
				}
 | 
			
		||||
            if (crlnumber == i) {
 | 
			
		||||
			if (crlnumber == i)
 | 
			
		||||
				{
 | 
			
		||||
				ASN1_INTEGER *crlnum;
 | 
			
		||||
                crlnum = X509_CRL_get_ext_d2i(x, NID_crl_number, NULL, NULL);
 | 
			
		||||
				crlnum = X509_CRL_get_ext_d2i(x, NID_crl_number,
 | 
			
		||||
							      NULL, NULL);
 | 
			
		||||
				BIO_printf(bio_out,"crlNumber=");
 | 
			
		||||
                if (crlnum) {
 | 
			
		||||
				if (crlnum)
 | 
			
		||||
					{
 | 
			
		||||
					i2a_ASN1_INTEGER(bio_out, crlnum);
 | 
			
		||||
					ASN1_INTEGER_free(crlnum);
 | 
			
		||||
                } else
 | 
			
		||||
					}
 | 
			
		||||
				else
 | 
			
		||||
					BIO_puts(bio_out, "<NONE>");
 | 
			
		||||
				BIO_printf(bio_out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
            if (hash == i) {
 | 
			
		||||
			if (hash == i)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out,"%08lx\n",
 | 
			
		||||
					X509_NAME_hash(X509_CRL_get_issuer(x)));
 | 
			
		||||
				}
 | 
			
		||||
#ifndef OPENSSL_NO_MD5
 | 
			
		||||
            if (hash_old == i) {
 | 
			
		||||
                BIO_printf(bio_out, "%08lx\n",
 | 
			
		||||
                           X509_NAME_hash_old(X509_CRL_get_issuer(x)));
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
            if (lastupdate == i) {
 | 
			
		||||
			if (lastupdate == i)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out,"lastUpdate=");
 | 
			
		||||
                ASN1_TIME_print(bio_out, X509_CRL_get_lastUpdate(x));
 | 
			
		||||
				ASN1_TIME_print(bio_out,
 | 
			
		||||
						X509_CRL_get_lastUpdate(x));
 | 
			
		||||
				BIO_printf(bio_out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
            if (nextupdate == i) {
 | 
			
		||||
			if (nextupdate == i)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out,"nextUpdate=");
 | 
			
		||||
				if (X509_CRL_get_nextUpdate(x)) 
 | 
			
		||||
                    ASN1_TIME_print(bio_out, X509_CRL_get_nextUpdate(x));
 | 
			
		||||
					ASN1_TIME_print(bio_out,
 | 
			
		||||
						X509_CRL_get_nextUpdate(x));
 | 
			
		||||
				else
 | 
			
		||||
					BIO_printf(bio_out,"NONE");
 | 
			
		||||
				BIO_printf(bio_out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
            if (fingerprint == i) {
 | 
			
		||||
			if (fingerprint == i)
 | 
			
		||||
				{
 | 
			
		||||
				int j;
 | 
			
		||||
				unsigned int n;
 | 
			
		||||
				unsigned char md[EVP_MAX_MD_SIZE];
 | 
			
		||||
 | 
			
		||||
                if (!X509_CRL_digest(x, digest, md, &n)) {
 | 
			
		||||
				if (!X509_CRL_digest(x,digest,md,&n))
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,"out of memory\n");
 | 
			
		||||
					goto end;
 | 
			
		||||
					}
 | 
			
		||||
				BIO_printf(bio_out,"%s Fingerprint=",
 | 
			
		||||
						OBJ_nid2sn(EVP_MD_type(digest)));
 | 
			
		||||
                for (j = 0; j < (int)n; j++) {
 | 
			
		||||
                    BIO_printf(bio_out, "%02X%c", md[j], (j + 1 == (int)n)
 | 
			
		||||
				for (j=0; j<(int)n; j++)
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_out,"%02X%c",md[j],
 | 
			
		||||
						(j+1 == (int)n)
 | 
			
		||||
						?'\n':':');
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
@@ -341,12 +345,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
    if (out == NULL) {
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
@@ -354,17 +360,20 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (text)
 | 
			
		||||
        X509_CRL_print(out, x);
 | 
			
		||||
	if (text) X509_CRL_print(out, x);
 | 
			
		||||
 | 
			
		||||
    if (noout) {
 | 
			
		||||
	if (noout) 
 | 
			
		||||
		{
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -373,14 +382,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		i=(int)i2d_X509_CRL_bio(out,x);
 | 
			
		||||
	else if (outformat == FORMAT_PEM)
 | 
			
		||||
		i=PEM_write_bio_X509_CRL(out,x);
 | 
			
		||||
    else {
 | 
			
		||||
	else	
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!i) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to write CRL\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
	if (!i) { BIO_printf(bio_err,"unable to write CRL\n"); goto end; }
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
@@ -401,15 +408,18 @@ static X509_CRL *load_crl(char *infile, int format)
 | 
			
		||||
	BIO *in=NULL;
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
    if (in == NULL) {
 | 
			
		||||
	if (in == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -422,7 +432,8 @@ static X509_CRL *load_crl(char *infile, int format)
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified for input crl\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (x == NULL) {
 | 
			
		||||
	if (x == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load CRL\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
@@ -432,3 +443,4 @@ static X509_CRL *load_crl(char *infile, int format)
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	return(x);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										163
									
								
								apps/crl2p7.c
									
									
									
									
									
								
							
							
						
						
									
										163
									
								
								apps/crl2p7.c
									
									
									
									
									
								
							@@ -56,11 +56,9 @@
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This was written by Gordon Chaffee <chaffee@plateau.cs.berkeley.edu> and
 | 
			
		||||
 * donated 'to the cause' along with lots and lots of other fixes to the
 | 
			
		||||
 * library.
 | 
			
		||||
 */
 | 
			
		||||
/* This was written by Gordon Chaffee <chaffee@plateau.cs.berkeley.edu>
 | 
			
		||||
 * and donated 'to the cause' along with lots and lots of other fixes to
 | 
			
		||||
 * the library. */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@@ -77,8 +75,7 @@ static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile);
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	crl2pkcs7_main
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
@@ -114,37 +111,40 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	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, "-nocrl") == 0) {
 | 
			
		||||
            nocrl = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-certfile") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!certflst)
 | 
			
		||||
                certflst = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
            if (!certflst)
 | 
			
		||||
                goto end;
 | 
			
		||||
            if (!sk_OPENSSL_STRING_push(certflst, *(++argv))) {
 | 
			
		||||
                sk_OPENSSL_STRING_free(certflst);
 | 
			
		||||
                goto end;
 | 
			
		||||
			}
 | 
			
		||||
        } else {
 | 
			
		||||
		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,"-nocrl") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			nocrl=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-certfile") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			if(!certflst) certflst = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
			sk_OPENSSL_STRING_push(certflst,*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
@@ -153,7 +153,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badops) {
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
@@ -161,11 +162,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		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," -out arg       output file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -certfile arg  certificates file of chain to a trusted CA\n");
 | 
			
		||||
		BIO_printf(bio_err," -certfile arg  certificates file of chain to a trusted CA\n");
 | 
			
		||||
		BIO_printf(bio_err,"                (can be used more than once)\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -nocrl         no crl to load, just certs from '-certfile'\n");
 | 
			
		||||
		BIO_printf(bio_err," -nocrl         no crl to load, just certs from '-certfile'\n");
 | 
			
		||||
		ret = 1;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -174,16 +173,20 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (!nocrl) {
 | 
			
		||||
	if (!nocrl)
 | 
			
		||||
		{
 | 
			
		||||
		if (infile == NULL)
 | 
			
		||||
			BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
        else {
 | 
			
		||||
            if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				perror(infile);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
@@ -197,39 +200,36 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			BIO_printf(bio_err,"bad input format specified for input crl\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
        if (crl == NULL) {
 | 
			
		||||
		if (crl == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to load CRL\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
    if ((p7 = PKCS7_new()) == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
    if ((p7s = PKCS7_SIGNED_new()) == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
	if ((p7=PKCS7_new()) == NULL) goto end;
 | 
			
		||||
	if ((p7s=PKCS7_SIGNED_new()) == NULL) goto end;
 | 
			
		||||
	p7->type=OBJ_nid2obj(NID_pkcs7_signed);
 | 
			
		||||
	p7->d.sign=p7s;
 | 
			
		||||
	p7s->contents->type=OBJ_nid2obj(NID_pkcs7_data);
 | 
			
		||||
 | 
			
		||||
    if (!ASN1_INTEGER_set(p7s->version, 1))
 | 
			
		||||
        goto end;
 | 
			
		||||
    if ((crl_stack = sk_X509_CRL_new_null()) == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
	if (!ASN1_INTEGER_set(p7s->version,1)) goto end;
 | 
			
		||||
	if ((crl_stack=sk_X509_CRL_new_null()) == NULL) goto end;
 | 
			
		||||
	p7s->crl=crl_stack;
 | 
			
		||||
    if (crl != NULL) {
 | 
			
		||||
	if (crl != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		sk_X509_CRL_push(crl_stack,crl);
 | 
			
		||||
		crl=NULL; /* now part of p7 for OPENSSL_freeing */
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if ((cert_stack = sk_X509_new_null()) == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
	if ((cert_stack=sk_X509_new_null()) == NULL) goto end;
 | 
			
		||||
	p7s->cert=cert_stack;
 | 
			
		||||
 | 
			
		||||
    if (certflst)
 | 
			
		||||
        for (i = 0; i < sk_OPENSSL_STRING_num(certflst); i++) {
 | 
			
		||||
	if(certflst) for(i = 0; i < sk_OPENSSL_STRING_num(certflst); i++) {
 | 
			
		||||
		certfile = sk_OPENSSL_STRING_value(certflst, i);
 | 
			
		||||
            if (add_certs_from_file(cert_stack, certfile) < 0) {
 | 
			
		||||
		if (add_certs_from_file(cert_stack,certfile) < 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "error loading certificates\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -238,7 +238,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	sk_OPENSSL_STRING_free(certflst);
 | 
			
		||||
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
@@ -246,8 +247,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -261,27 +265,24 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!i) {
 | 
			
		||||
	if (!i)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to write pkcs7 object\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (p7 != NULL)
 | 
			
		||||
        PKCS7_free(p7);
 | 
			
		||||
    if (crl != NULL)
 | 
			
		||||
        X509_CRL_free(crl);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (p7 != NULL) PKCS7_free(p7);
 | 
			
		||||
	if (crl != NULL) X509_CRL_free(crl);
 | 
			
		||||
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
/*
 | 
			
		||||
 *----------------------------------------------------------------------
 | 
			
		||||
 * int add_certs_from_file
 | 
			
		||||
 *
 | 
			
		||||
@@ -300,7 +301,8 @@ static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile)
 | 
			
		||||
	X509_INFO *xi;
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (BIO_read_filename(in, certfile) <= 0)) {
 | 
			
		||||
	if ((in == NULL) || (BIO_read_filename(in,certfile) <= 0))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"error opening the file, %s\n",certfile);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -313,9 +315,11 @@ static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* scan over it and pull out the CRL's */
 | 
			
		||||
    while (sk_X509_INFO_num(sk)) {
 | 
			
		||||
	while (sk_X509_INFO_num(sk))
 | 
			
		||||
		{
 | 
			
		||||
		xi=sk_X509_INFO_shift(sk);
 | 
			
		||||
        if (xi->x509 != NULL) {
 | 
			
		||||
		if (xi->x509 != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			sk_X509_push(stack,xi->x509);
 | 
			
		||||
			xi->x509=NULL;
 | 
			
		||||
			count++;
 | 
			
		||||
@@ -326,9 +330,8 @@ static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile)
 | 
			
		||||
	ret=count;
 | 
			
		||||
end:
 | 
			
		||||
 	/* never need to OPENSSL_free x */
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (sk != NULL)
 | 
			
		||||
        sk_X509_INFO_free(sk);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (sk != NULL) sk_X509_INFO_free(sk);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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
 | 
			
		||||
							
								
								
									
										313
									
								
								apps/dgst.c
									
									
									
									
									
								
							
							
						
						
									
										313
									
								
								apps/dgst.c
									
									
									
									
									
								
							@@ -103,7 +103,7 @@ int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
	ENGINE *e = NULL, *impl = NULL;
 | 
			
		||||
	unsigned char *buf=NULL;
 | 
			
		||||
	int i,err=1;
 | 
			
		||||
	const EVP_MD *md=NULL,*m;
 | 
			
		||||
@@ -124,6 +124,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	char *passargin = NULL, *passin = NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
	int engine_impl = 0;
 | 
			
		||||
#endif
 | 
			
		||||
	char *hmac_key=NULL;
 | 
			
		||||
	char *mac_name=NULL;
 | 
			
		||||
@@ -131,7 +132,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
    if ((buf = (unsigned char *)OPENSSL_malloc(BUFSIZE)) == NULL) {
 | 
			
		||||
	if ((buf=(unsigned char *)OPENSSL_malloc(BUFSIZE)) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"out of memory\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -149,56 +151,66 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    while (argc > 0) {
 | 
			
		||||
        if ((*argv)[0] != '-')
 | 
			
		||||
            break;
 | 
			
		||||
	while (argc > 0)
 | 
			
		||||
		{
 | 
			
		||||
		if ((*argv)[0] != '-') break;
 | 
			
		||||
		if (strcmp(*argv,"-c") == 0)
 | 
			
		||||
			separator=1;
 | 
			
		||||
		else if (strcmp(*argv,"-r") == 0)
 | 
			
		||||
			separator=2;
 | 
			
		||||
        else if (strcmp(*argv, "-rand") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                break;
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			randfile=*(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                break;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			outfile=*(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-sign") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                break;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-sign") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			keyfile=*(++argv);
 | 
			
		||||
        } else if (!strcmp(*argv, "-passin")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*argv,"-passin"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				break;
 | 
			
		||||
			passargin=*++argv;
 | 
			
		||||
        } else if (strcmp(*argv, "-verify") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                break;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-verify") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			keyfile=*(++argv);
 | 
			
		||||
			want_pub = 1;
 | 
			
		||||
			do_verify = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-prverify") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                break;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-prverify") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			keyfile=*(++argv);
 | 
			
		||||
			do_verify = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-signature") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                break;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-signature") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			sigfile=*(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-keyform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                break;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-keyform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			keyform=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                break;
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
        		e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-engine_impl") == 0)
 | 
			
		||||
			engine_impl = 1;
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-hex") == 0)
 | 
			
		||||
			out_bin = 0;
 | 
			
		||||
@@ -206,29 +218,39 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			out_bin = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-d") == 0)
 | 
			
		||||
			debug=1;
 | 
			
		||||
        else if (!strcmp(*argv, "-hmac")) {
 | 
			
		||||
		else if (!strcmp(*argv,"-fips-fingerprint"))
 | 
			
		||||
			hmac_key = "etaonrishdlcupfm";
 | 
			
		||||
		else if (!strcmp(*argv,"-hmac"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				break;
 | 
			
		||||
			hmac_key=*++argv;
 | 
			
		||||
        } else if (!strcmp(*argv, "-mac")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*argv,"-mac"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				break;
 | 
			
		||||
			mac_name=*++argv;
 | 
			
		||||
        } else if (strcmp(*argv, "-sigopt") == 0) {
 | 
			
		||||
			}
 | 
			
		||||
		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) {
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
		else
 | 
			
		||||
			break;
 | 
			
		||||
@@ -236,62 +258,61 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	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");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    if ((argc > 0) && (argv[0][0] == '-')) { /* bad option */
 | 
			
		||||
	if ((argc > 0) && (argv[0][0] == '-')) /* bad option */
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unknown option '%s'\n",*argv);
 | 
			
		||||
		BIO_printf(bio_err,"options are\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,"-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,"-hex            output as hex dump\n");
 | 
			
		||||
		BIO_printf(bio_err,"-binary         output in binary form\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-sign   file    sign digest using private 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,
 | 
			
		||||
                   "-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,"-sign   file    sign digest using private 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,"-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,"-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");
 | 
			
		||||
		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
 | 
			
		||||
        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
 | 
			
		||||
 | 
			
		||||
		EVP_MD_do_all_sorted(list_md_fn, bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	if (engine_impl)
 | 
			
		||||
		impl = e;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	bmd=BIO_new(BIO_f_md());
 | 
			
		||||
    if (debug) {
 | 
			
		||||
	if (debug)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_callback(in,BIO_debug_callback);
 | 
			
		||||
		/* needed for windows 3.1 */
 | 
			
		||||
		BIO_set_callback_arg(in,(char *)bio_err);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    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");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if ((in == NULL) || (bmd == NULL)) {
 | 
			
		||||
	if ((in == NULL) || (bmd == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -309,8 +330,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if(outfile) {
 | 
			
		||||
		if(out_bin)
 | 
			
		||||
			out = BIO_new_file(outfile, "wb");
 | 
			
		||||
        else
 | 
			
		||||
            out = BIO_new_file(outfile, "w");
 | 
			
		||||
		else    out = BIO_new_file(outfile, "w");
 | 
			
		||||
	} else {
 | 
			
		||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
@@ -327,44 +347,52 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    if ((! !mac_name + ! !keyfile + ! !hmac_key) > 1) {
 | 
			
		||||
	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)
 | 
			
		||||
		{
 | 
			
		||||
		if (want_pub)
 | 
			
		||||
			sigkey = load_pubkey(bio_err, keyfile, keyform, 0, NULL,
 | 
			
		||||
				e, "key file");
 | 
			
		||||
		else
 | 
			
		||||
			sigkey = load_key(bio_err, keyfile, keyform, 0, passin,
 | 
			
		||||
				e, "key file");
 | 
			
		||||
        if (!sigkey) {
 | 
			
		||||
            /*
 | 
			
		||||
             * load_[pub]key() has already printed an appropriate message
 | 
			
		||||
             */
 | 
			
		||||
		if (!sigkey)
 | 
			
		||||
			{
 | 
			
		||||
			/* load_[pub]key() has already printed an appropriate
 | 
			
		||||
			   message */
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (mac_name) {
 | 
			
		||||
	if (mac_name)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_PKEY_CTX *mac_ctx = NULL;
 | 
			
		||||
		int r = 0;
 | 
			
		||||
        if (!init_gen_str(bio_err, &mac_ctx, mac_name, e, 0))
 | 
			
		||||
		if (!init_gen_str(bio_err, &mac_ctx, mac_name, impl, 0))
 | 
			
		||||
			goto mac_end;
 | 
			
		||||
        if (macopts) {
 | 
			
		||||
		if (macopts)
 | 
			
		||||
			{
 | 
			
		||||
			char *macopt;
 | 
			
		||||
            for (i = 0; i < sk_OPENSSL_STRING_num(macopts); i++) {
 | 
			
		||||
			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) {
 | 
			
		||||
				if (pkey_ctrl_string(mac_ctx, macopt) <= 0)
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,
 | 
			
		||||
                               "MAC parameter error \"%s\"\n", macopt);
 | 
			
		||||
						"MAC parameter error \"%s\"\n",
 | 
			
		||||
						macopt);
 | 
			
		||||
					ERR_print_errors(bio_err);
 | 
			
		||||
					goto mac_end;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
        if (EVP_PKEY_keygen(mac_ctx, &sigkey) <= 0) {
 | 
			
		||||
		if (EVP_PKEY_keygen(mac_ctx, &sigkey) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_puts(bio_err, "Error generating key\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto mac_end;
 | 
			
		||||
@@ -377,37 +405,46 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (hmac_key) {
 | 
			
		||||
        sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, e,
 | 
			
		||||
	if (hmac_key)
 | 
			
		||||
		{
 | 
			
		||||
		sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, impl,
 | 
			
		||||
					(unsigned char *)hmac_key, -1);
 | 
			
		||||
		if (!sigkey)
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (sigkey) {
 | 
			
		||||
	if (sigkey)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_MD_CTX *mctx = NULL;
 | 
			
		||||
		EVP_PKEY_CTX *pctx = NULL;
 | 
			
		||||
		int r;
 | 
			
		||||
        if (!BIO_get_md_ctx(bmd, &mctx)) {
 | 
			
		||||
		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, NULL, sigkey);
 | 
			
		||||
			r = EVP_DigestVerifyInit(mctx, &pctx, md, impl, sigkey);
 | 
			
		||||
		else
 | 
			
		||||
            r = EVP_DigestSignInit(mctx, &pctx, md, NULL, sigkey);
 | 
			
		||||
        if (!r) {
 | 
			
		||||
			r = EVP_DigestSignInit(mctx, &pctx, md, impl, sigkey);
 | 
			
		||||
		if (!r)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error setting context\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
        if (sigopts) {
 | 
			
		||||
		if (sigopts)
 | 
			
		||||
			{
 | 
			
		||||
			char *sigopt;
 | 
			
		||||
            for (i = 0; i < sk_OPENSSL_STRING_num(sigopts); i++) {
 | 
			
		||||
			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);
 | 
			
		||||
				if (pkey_ctrl_string(pctx, sigopt) <= 0)
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,
 | 
			
		||||
						"parameter error \"%s\"\n",
 | 
			
		||||
						sigopt);
 | 
			
		||||
					ERR_print_errors(bio_err);
 | 
			
		||||
					goto end;
 | 
			
		||||
					}
 | 
			
		||||
@@ -415,10 +452,19 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	/* we use md as a filter, reading from 'in' */
 | 
			
		||||
    else {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		EVP_MD_CTX *mctx = NULL;
 | 
			
		||||
		if (!BIO_get_md_ctx(bmd, &mctx))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error getting context\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (md == NULL)
 | 
			
		||||
			md = EVP_md5(); 
 | 
			
		||||
        if (!BIO_set_md(bmd, md)) {
 | 
			
		||||
		if (!EVP_DigestInit_ex(mctx, md, impl))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error setting digest %s\n", pname);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -431,34 +477,42 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		siglen = EVP_PKEY_size(sigkey);
 | 
			
		||||
		sigbuf = OPENSSL_malloc(siglen);
 | 
			
		||||
		if(!sigbio) {
 | 
			
		||||
            BIO_printf(bio_err, "Error opening signature file %s\n", sigfile);
 | 
			
		||||
			BIO_printf(bio_err, "Error opening signature file %s\n",
 | 
			
		||||
								sigfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		siglen = BIO_read(sigbio, sigbuf, siglen);
 | 
			
		||||
		BIO_free(sigbio);
 | 
			
		||||
		if(siglen <= 0) {
 | 
			
		||||
            BIO_printf(bio_err, "Error reading signature file %s\n", sigfile);
 | 
			
		||||
			BIO_printf(bio_err, "Error reading signature file %s\n",
 | 
			
		||||
								sigfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	inp=BIO_push(bmd,in);
 | 
			
		||||
 | 
			
		||||
    if (md == NULL) {
 | 
			
		||||
	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);
 | 
			
		||||
		err=do_fp(out, buf,inp,separator, out_bin, sigkey, sigbuf,
 | 
			
		||||
			  siglen,NULL,NULL,"stdin",bmd);
 | 
			
		||||
    } else {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		const char *md_name = NULL, *sig_name = NULL;
 | 
			
		||||
        if (!out_bin) {
 | 
			
		||||
            if (sigkey) {
 | 
			
		||||
		if(!out_bin)
 | 
			
		||||
			{
 | 
			
		||||
			if (sigkey)
 | 
			
		||||
				{
 | 
			
		||||
				const EVP_PKEY_ASN1_METHOD *ameth;
 | 
			
		||||
				ameth = EVP_PKEY_get0_asn1(sigkey);
 | 
			
		||||
				if (ameth)
 | 
			
		||||
@@ -468,13 +522,16 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			md_name = EVP_MD_name(md);
 | 
			
		||||
			}
 | 
			
		||||
		err = 0;
 | 
			
		||||
        for (i = 0; i < argc; i++) {
 | 
			
		||||
		for (i=0; i<argc; i++)
 | 
			
		||||
			{
 | 
			
		||||
			int r;
 | 
			
		||||
            if (BIO_read_filename(in, argv[i]) <= 0) {
 | 
			
		||||
			if (BIO_read_filename(in,argv[i]) <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				perror(argv[i]);
 | 
			
		||||
				err++;
 | 
			
		||||
				continue;
 | 
			
		||||
            } else
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
			r=do_fp(out,buf,inp,separator,out_bin,sigkey,sigbuf,
 | 
			
		||||
				siglen,sig_name,md_name, argv[i],bmd);
 | 
			
		||||
			if(r)
 | 
			
		||||
@@ -483,12 +540,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
end:
 | 
			
		||||
    if (buf != NULL) {
 | 
			
		||||
	if (buf != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		OPENSSL_cleanse(buf,BUFSIZE);
 | 
			
		||||
		OPENSSL_free(buf);
 | 
			
		||||
		}
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (passin)
 | 
			
		||||
		OPENSSL_free(passin);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
@@ -497,10 +554,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		sk_OPENSSL_STRING_free(sigopts);
 | 
			
		||||
	if (macopts)
 | 
			
		||||
		sk_OPENSSL_STRING_free(macopts);
 | 
			
		||||
    if (sigbuf)
 | 
			
		||||
        OPENSSL_free(sigbuf);
 | 
			
		||||
    if (bmd != NULL)
 | 
			
		||||
        BIO_free(bmd);
 | 
			
		||||
	if(sigbuf) OPENSSL_free(sigbuf);
 | 
			
		||||
	if (bmd != NULL) BIO_free(bmd);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(err);
 | 
			
		||||
	}
 | 
			
		||||
@@ -513,63 +568,76 @@ int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
			
		||||
	size_t len;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
    for (;;) {
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		i=BIO_read(bp,(char *)buf,BUFSIZE);
 | 
			
		||||
        if (i < 0) {
 | 
			
		||||
		if(i < 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Read Error in %s\n",file);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			return 1;
 | 
			
		||||
			}
 | 
			
		||||
        if (i == 0)
 | 
			
		||||
            break;
 | 
			
		||||
		if (i == 0) break;
 | 
			
		||||
		}
 | 
			
		||||
    if (sigin) {
 | 
			
		||||
	if(sigin)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_MD_CTX *ctx;
 | 
			
		||||
		BIO_get_md_ctx(bp, &ctx);
 | 
			
		||||
		i = EVP_DigestVerifyFinal(ctx, sigin, (unsigned int)siglen); 
 | 
			
		||||
		if(i > 0)
 | 
			
		||||
			BIO_printf(out, "Verified OK\n");
 | 
			
		||||
        else if (i == 0) {
 | 
			
		||||
		else if(i == 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(out, "Verification Failure\n");
 | 
			
		||||
			return 1;
 | 
			
		||||
        } else {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error Verifying Data\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			return 1;
 | 
			
		||||
			}
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
    if (key) {
 | 
			
		||||
	if(key)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_MD_CTX *ctx;
 | 
			
		||||
		BIO_get_md_ctx(bp, &ctx);
 | 
			
		||||
		len = BUFSIZE;
 | 
			
		||||
        if (!EVP_DigestSignFinal(ctx, buf, &len)) {
 | 
			
		||||
		if(!EVP_DigestSignFinal(ctx, buf, &len)) 
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error Signing Data\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			return 1;
 | 
			
		||||
			}
 | 
			
		||||
    } else {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		len=BIO_gets(bp,(char *)buf,BUFSIZE);
 | 
			
		||||
        if ((int)len < 0) {
 | 
			
		||||
		if ((int)len <0)
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			return 1;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (binout)
 | 
			
		||||
        BIO_write(out, buf, len);
 | 
			
		||||
    else if (sep == 2) {
 | 
			
		||||
	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 
 | 
			
		||||
		{
 | 
			
		||||
		if (sig_name)
 | 
			
		||||
			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++) {
 | 
			
		||||
		for (i=0; i<(int)len; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if (sep && (i != 0))
 | 
			
		||||
				BIO_printf(out, ":");
 | 
			
		||||
			BIO_printf(out, "%02x",buf[i]);
 | 
			
		||||
@@ -578,3 +646,4 @@ int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
			
		||||
		}
 | 
			
		||||
	return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										124
									
								
								apps/dh.c
									
									
									
									
									
								
							
							
						
						
									
										124
									
								
								apps/dh.c
									
									
									
									
									
								
							@@ -74,8 +74,7 @@
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dh_main
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
@@ -118,28 +117,32 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	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;
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -151,7 +154,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			C=1;
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
        else {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
@@ -160,23 +164,21 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badops) {
 | 
			
		||||
	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 - one of DER PEM\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -outform arg  output format - one of DER PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg  output format - one of DER PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg       input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg      output file\n");
 | 
			
		||||
		BIO_printf(bio_err," -check        check the DH parameters\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -text         print a text form of the DH parameters\n");
 | 
			
		||||
		BIO_printf(bio_err," -text         print a text form of the DH parameters\n");
 | 
			
		||||
		BIO_printf(bio_err," -C            Output C code\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout        no output\n");
 | 
			
		||||
#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
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -189,20 +191,24 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
@@ -210,8 +216,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -221,17 +230,22 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		dh=d2i_DHparams_bio(in,NULL);
 | 
			
		||||
	else if (informat == FORMAT_PEM)
 | 
			
		||||
		dh=PEM_read_bio_DHparams(in,NULL,NULL,NULL);
 | 
			
		||||
    else {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (dh == NULL) {
 | 
			
		||||
	if (dh == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load DH parameters\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (text) {
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		DHparams_print(out,dh);
 | 
			
		||||
#ifdef undef
 | 
			
		||||
		printf("p=");
 | 
			
		||||
@@ -244,8 +258,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
    if (check) {
 | 
			
		||||
        if (!DH_check(dh, &i)) {
 | 
			
		||||
	if (check)
 | 
			
		||||
		{
 | 
			
		||||
		if (!DH_check(dh,&i))
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -260,31 +276,33 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		if (i == 0)
 | 
			
		||||
			printf("DH parameters appear to be ok.\n");
 | 
			
		||||
		}
 | 
			
		||||
    if (C) {
 | 
			
		||||
	if (C)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char *data;
 | 
			
		||||
		int len,l,bits;
 | 
			
		||||
 | 
			
		||||
		len=BN_num_bytes(dh->p);
 | 
			
		||||
		bits=BN_num_bits(dh->p);
 | 
			
		||||
		data=(unsigned char *)OPENSSL_malloc(len);
 | 
			
		||||
        if (data == NULL) {
 | 
			
		||||
		if (data == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		l=BN_bn2bin(dh->p,data);
 | 
			
		||||
		printf("static unsigned char dh%d_p[]={",bits);
 | 
			
		||||
        for (i = 0; i < l; i++) {
 | 
			
		||||
            if ((i % 12) == 0)
 | 
			
		||||
                printf("\n\t");
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t};\n");
 | 
			
		||||
 | 
			
		||||
		l=BN_bn2bin(dh->g,data);
 | 
			
		||||
		printf("static unsigned char dh%d_g[]={",bits);
 | 
			
		||||
        for (i = 0; i < l; i++) {
 | 
			
		||||
            if ((i % 12) == 0)
 | 
			
		||||
                printf("\n\t");
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t};\n\n");
 | 
			
		||||
@@ -302,7 +320,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		OPENSSL_free(data);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (!noout) {
 | 
			
		||||
 | 
			
		||||
	if (!noout)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_DHparams_bio(out,dh);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
@@ -311,7 +331,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
        if (!i) {
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to write DH parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -319,12 +340,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (dh != NULL)
 | 
			
		||||
        DH_free(dh);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dh != NULL) DH_free(dh);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										225
									
								
								apps/dhparam.c
									
									
									
									
									
								
							
							
						
						
									
										225
									
								
								apps/dhparam.c
									
									
									
									
									
								
							@@ -132,8 +132,7 @@
 | 
			
		||||
 | 
			
		||||
#define DEFBITS	512
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
/* -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
 | 
			
		||||
@@ -181,28 +180,32 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	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;
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -222,47 +225,40 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			g=2;
 | 
			
		||||
		else if (strcmp(*argv,"-5") == 0)
 | 
			
		||||
			g=5;
 | 
			
		||||
        else if (strcmp(*argv, "-rand") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
        } else if (((sscanf(*argv, "%d", &num) == 0) || (num <= 0)))
 | 
			
		||||
			}
 | 
			
		||||
		else if (((sscanf(*argv,"%d",&num) == 0) || (num <= 0)))
 | 
			
		||||
			goto bad;
 | 
			
		||||
		argv++;
 | 
			
		||||
		argc--;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badops) {
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] [numbits]\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - one of DER PEM\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -outform arg  output format - one of DER PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg  output format - one of DER PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg       input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg      output file\n");
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -dsaparam     read or generate DSA parameters, convert to DH\n");
 | 
			
		||||
		BIO_printf(bio_err," -dsaparam     read or generate DSA parameters, convert to DH\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -check        check the DH parameters\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -text         print a text form of the DH parameters\n");
 | 
			
		||||
		BIO_printf(bio_err," -text         print a text form of the DH parameters\n");
 | 
			
		||||
		BIO_printf(bio_err," -C            Output C code\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -2            generate parameters using  2 as the generator value\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -5            generate parameters using  5 as the generator value\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " numbits       number of bits in to generate (default 512)\n");
 | 
			
		||||
		BIO_printf(bio_err," -2            generate parameters using  2 as the generator value\n");
 | 
			
		||||
		BIO_printf(bio_err," -5            generate parameters using  5 as the generator value\n");
 | 
			
		||||
		BIO_printf(bio_err," numbits       number of bits in to generate (default 512)\n");
 | 
			
		||||
#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
 | 
			
		||||
        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," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,"               - load the file (or the files in the directory) into\n");
 | 
			
		||||
		BIO_printf(bio_err,"               the random number generator\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout        no output\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
@@ -278,13 +274,15 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		num = DEFBITS;
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
    if (dsaparam) {
 | 
			
		||||
        if (g) {
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "generator may not be chosen for DSA parameters\n");
 | 
			
		||||
	if (dsaparam)
 | 
			
		||||
		{
 | 
			
		||||
		if (g)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "generator may not be chosen for DSA parameters\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    } else
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
#endif
 | 
			
		||||
		{
 | 
			
		||||
		/* DH parameters */
 | 
			
		||||
@@ -296,44 +294,45 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
		BN_GENCB cb;
 | 
			
		||||
		BN_GENCB_set(&cb, dh_cb, bio_err);
 | 
			
		||||
        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");
 | 
			
		||||
		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");
 | 
			
		||||
			}
 | 
			
		||||
		if (inrand != NULL)
 | 
			
		||||
			BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
				app_RAND_load_files(inrand));
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
        if (dsaparam) {
 | 
			
		||||
		if (dsaparam)
 | 
			
		||||
			{
 | 
			
		||||
			DSA *dsa = DSA_new();
 | 
			
		||||
			
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "Generating DSA parameters, %d bit long prime\n", num);
 | 
			
		||||
            if (!dsa
 | 
			
		||||
                || !DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL,
 | 
			
		||||
                                               &cb)) {
 | 
			
		||||
                if (dsa)
 | 
			
		||||
                    DSA_free(dsa);
 | 
			
		||||
			BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
 | 
			
		||||
			if(!dsa || !DSA_generate_parameters_ex(dsa, num,
 | 
			
		||||
						NULL, 0, NULL, NULL, &cb))
 | 
			
		||||
				{
 | 
			
		||||
				if(dsa) DSA_free(dsa);
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			dh = DSA_dup_DH(dsa);
 | 
			
		||||
			DSA_free(dsa);
 | 
			
		||||
            if (dh == NULL) {
 | 
			
		||||
			if (dh == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
        } else
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
#endif
 | 
			
		||||
			{
 | 
			
		||||
			dh = DH_new();
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "Generating DH parameters, %d bit long safe prime, generator %d\n",
 | 
			
		||||
                       num, g);
 | 
			
		||||
			BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g);
 | 
			
		||||
			BIO_printf(bio_err,"This is going to take a long time\n");
 | 
			
		||||
            if (!dh || !DH_generate_parameters_ex(dh, num, g, &cb)) {
 | 
			
		||||
			if(!dh || !DH_generate_parameters_ex(dh, num, g, &cb))
 | 
			
		||||
				{
 | 
			
		||||
				if(dh) DH_free(dh);
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
@@ -343,25 +342,31 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	} else {
 | 
			
		||||
 | 
			
		||||
		in=BIO_new(BIO_s_file());
 | 
			
		||||
        if (in == NULL) {
 | 
			
		||||
		if (in == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (infile == NULL)
 | 
			
		||||
			BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
        else {
 | 
			
		||||
            if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				perror(infile);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
        if (informat != FORMAT_ASN1 && informat != FORMAT_PEM) {
 | 
			
		||||
		if	(informat != FORMAT_ASN1 && informat != FORMAT_PEM)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"bad input format specified\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
        if (dsaparam) {
 | 
			
		||||
		if (dsaparam)
 | 
			
		||||
			{
 | 
			
		||||
			DSA *dsa;
 | 
			
		||||
			
 | 
			
		||||
			if (informat == FORMAT_ASN1)
 | 
			
		||||
@@ -369,7 +374,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			else /* informat == FORMAT_PEM */
 | 
			
		||||
				dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL);
 | 
			
		||||
			
 | 
			
		||||
            if (dsa == NULL) {
 | 
			
		||||
			if (dsa == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"unable to load DSA parameters\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
@@ -377,11 +383,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			
 | 
			
		||||
			dh = DSA_dup_DH(dsa);
 | 
			
		||||
			DSA_free(dsa);
 | 
			
		||||
            if (dh == NULL) {
 | 
			
		||||
			if (dh == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
        } else
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
#endif
 | 
			
		||||
			{
 | 
			
		||||
			if (informat == FORMAT_ASN1)
 | 
			
		||||
@@ -389,7 +397,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			else /* informat == FORMAT_PEM */
 | 
			
		||||
				dh=PEM_read_bio_DHparams(in,NULL,NULL,NULL);
 | 
			
		||||
			
 | 
			
		||||
            if (dh == NULL) {
 | 
			
		||||
			if (dh == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"unable to load DH parameters\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
@@ -400,11 +409,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
    if (out == NULL) {
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
@@ -412,19 +423,26 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (text) {
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		DHparams_print(out,dh);
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
    if (check) {
 | 
			
		||||
        if (!DH_check(dh, &i)) {
 | 
			
		||||
	if (check)
 | 
			
		||||
		{
 | 
			
		||||
		if (!DH_check(dh,&i))
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -439,35 +457,38 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		if (i == 0)
 | 
			
		||||
			printf("DH parameters appear to be ok.\n");
 | 
			
		||||
		}
 | 
			
		||||
    if (C) {
 | 
			
		||||
	if (C)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char *data;
 | 
			
		||||
		int len,l,bits;
 | 
			
		||||
 | 
			
		||||
		len=BN_num_bytes(dh->p);
 | 
			
		||||
		bits=BN_num_bits(dh->p);
 | 
			
		||||
		data=(unsigned char *)OPENSSL_malloc(len);
 | 
			
		||||
        if (data == NULL) {
 | 
			
		||||
		if (data == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		printf("#ifndef HEADER_DH_H\n"
 | 
			
		||||
               "#include <openssl/dh.h>\n" "#endif\n");
 | 
			
		||||
		       "#include <openssl/dh.h>\n"
 | 
			
		||||
		       "#endif\n");
 | 
			
		||||
		printf("DH *get_dh%d()\n\t{\n",bits);
 | 
			
		||||
 | 
			
		||||
		l=BN_bn2bin(dh->p,data);
 | 
			
		||||
		printf("\tstatic unsigned char dh%d_p[]={",bits);
 | 
			
		||||
        for (i = 0; i < l; i++) {
 | 
			
		||||
            if ((i % 12) == 0)
 | 
			
		||||
                printf("\n\t\t");
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t\t};\n");
 | 
			
		||||
 | 
			
		||||
		l=BN_bn2bin(dh->g,data);
 | 
			
		||||
		printf("\tstatic unsigned char dh%d_g[]={",bits);
 | 
			
		||||
        for (i = 0; i < l; i++) {
 | 
			
		||||
            if ((i % 12) == 0)
 | 
			
		||||
                printf("\n\t\t");
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t\t};\n");
 | 
			
		||||
@@ -486,7 +507,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		OPENSSL_free(data);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (!noout) {
 | 
			
		||||
 | 
			
		||||
	if (!noout)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_DHparams_bio(out,dh);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
@@ -495,7 +518,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
        if (!i) {
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to write DH parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -503,12 +527,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (dh != NULL)
 | 
			
		||||
        DH_free(dh);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dh != NULL) DH_free(dh);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
@@ -518,14 +539,10 @@ static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
 | 
			
		||||
    if (p == 0)
 | 
			
		||||
        c = '.';
 | 
			
		||||
    if (p == 1)
 | 
			
		||||
        c = '+';
 | 
			
		||||
    if (p == 2)
 | 
			
		||||
        c = '*';
 | 
			
		||||
    if (p == 3)
 | 
			
		||||
        c = '\n';
 | 
			
		||||
	if (p == 0) c='.';
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write(cb->arg,&c,1);
 | 
			
		||||
	(void)BIO_flush(cb->arg);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										150
									
								
								apps/dsa.c
									
									
									
									
									
								
							
							
						
						
									
										150
									
								
								apps/dsa.c
									
									
									
									
									
								
							@@ -74,8 +74,7 @@
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dsa_main
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (one of DER, NET or PEM)
 | 
			
		||||
/* -inform arg	- input format - default PEM (one of DER, NET or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
@@ -135,36 +134,42 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	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;
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passin") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passout") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -184,7 +189,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			pubin=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pubout") == 0)
 | 
			
		||||
			pubout=1;
 | 
			
		||||
        else if ((enc = EVP_get_cipherbyname(&(argv[0][1]))) == NULL) {
 | 
			
		||||
		else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
@@ -193,43 +199,35 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badops) {
 | 
			
		||||
	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," -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," -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");
 | 
			
		||||
		BIO_printf(bio_err," -engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -des            encrypt PEM output with cbc des\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -des3           encrypt PEM output with ede cbc des using 168 bit key\n");
 | 
			
		||||
		BIO_printf(bio_err," -des            encrypt PEM output with cbc des\n");
 | 
			
		||||
		BIO_printf(bio_err," -des3           encrypt PEM output with ede cbc des using 168 bit key\n");
 | 
			
		||||
#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
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		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");
 | 
			
		||||
		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");
 | 
			
		||||
		BIO_printf(bio_err," -seed           encrypt PEM output with cbc seed\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -text           print the key in text\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout          don't print key out\n");
 | 
			
		||||
@@ -250,15 +248,18 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -276,18 +277,21 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			pkey = load_key(bio_err, infile, informat, 1,
 | 
			
		||||
				passin, e, "Private Key");
 | 
			
		||||
 | 
			
		||||
        if (pkey) {
 | 
			
		||||
		if (pkey)
 | 
			
		||||
			{
 | 
			
		||||
			dsa = EVP_PKEY_get1_DSA(pkey);
 | 
			
		||||
			EVP_PKEY_free(pkey);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (dsa == NULL) {
 | 
			
		||||
	if (dsa == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load Key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
@@ -295,39 +299,40 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (text) 
 | 
			
		||||
        if (!DSA_print(out, dsa, 0)) {
 | 
			
		||||
		if (!DSA_print(out,dsa,0))
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
    if (modulus) {
 | 
			
		||||
	if (modulus)
 | 
			
		||||
		{
 | 
			
		||||
		fprintf(stdout,"Public Key=");
 | 
			
		||||
		BN_print(out,dsa->pub_key);
 | 
			
		||||
		fprintf(stdout,"\n");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (noout)
 | 
			
		||||
        goto end;
 | 
			
		||||
	if (noout) goto end;
 | 
			
		||||
	BIO_printf(bio_err,"writing DSA key\n");
 | 
			
		||||
	if 	(outformat == FORMAT_ASN1) {
 | 
			
		||||
        if (pubin || pubout)
 | 
			
		||||
            i = i2d_DSA_PUBKEY_bio(out, dsa);
 | 
			
		||||
        else
 | 
			
		||||
            i = i2d_DSAPrivateKey_bio(out, dsa);
 | 
			
		||||
		if(pubin || pubout) i=i2d_DSA_PUBKEY_bio(out,dsa);
 | 
			
		||||
		else i=i2d_DSAPrivateKey_bio(out,dsa);
 | 
			
		||||
	} else if (outformat == FORMAT_PEM) {
 | 
			
		||||
		if(pubin || pubout)
 | 
			
		||||
			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);
 | 
			
		||||
#if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_RC4)
 | 
			
		||||
	} else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
 | 
			
		||||
@@ -346,22 +351,19 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (i <= 0) {
 | 
			
		||||
	if (i <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to write private key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
    } else
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		ret=0;
 | 
			
		||||
end:
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (dsa != NULL)
 | 
			
		||||
        DSA_free(dsa);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
    if (passout)
 | 
			
		||||
        OPENSSL_free(passout);
 | 
			
		||||
	if(in != NULL) BIO_free(in);
 | 
			
		||||
	if(out != NULL) BIO_free_all(out);
 | 
			
		||||
	if(dsa != NULL) DSA_free(dsa);
 | 
			
		||||
	if(passin) OPENSSL_free(passin);
 | 
			
		||||
	if(passout) OPENSSL_free(passout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										221
									
								
								apps/dsaparam.c
									
									
									
									
									
								
							
							
						
						
									
										221
									
								
								apps/dsaparam.c
									
									
									
									
									
								
							@@ -57,10 +57,8 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>	/* for OPENSSL_NO_DSA */
 | 
			
		||||
/*
 | 
			
		||||
 * Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code
 | 
			
		||||
 */
 | 
			
		||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code */
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
@@ -82,8 +80,7 @@
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dsaparam_main
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
@@ -121,6 +118,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	char *infile,*outfile,*prog,*inrand=NULL;
 | 
			
		||||
	int numbits= -1,num,genkey=0;
 | 
			
		||||
	int need_rand=0;
 | 
			
		||||
	int non_fips_allow = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
@@ -145,35 +143,39 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	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;
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if(strcmp(*argv, "-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine = *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
        else if (strcmp(*argv, "-timebomb") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if(strcmp(*argv, "-timebomb") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			timebomb = atoi(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -181,21 +183,29 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*argv,"-C") == 0)
 | 
			
		||||
			C=1;
 | 
			
		||||
        else if (strcmp(*argv, "-genkey") == 0) {
 | 
			
		||||
		else if (strcmp(*argv,"-genkey") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			genkey=1;
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
        } else if (strcmp(*argv, "-rand") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
        } else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
        else if (sscanf(*argv, "%d", &num) == 1) {
 | 
			
		||||
		else if (strcmp(*argv,"-non-fips-allow") == 0)
 | 
			
		||||
			non_fips_allow = 1;
 | 
			
		||||
		else if (sscanf(*argv,"%d",&num) == 1)
 | 
			
		||||
			{
 | 
			
		||||
			/* generate a key */
 | 
			
		||||
			numbits=num;
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
        } else {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
@@ -204,7 +214,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badops) {
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] [bits] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
@@ -216,18 +227,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf(bio_err," -C            Output C code\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout        no output\n");
 | 
			
		||||
		BIO_printf(bio_err," -genkey       generate a DSA key\n");
 | 
			
		||||
        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
 | 
			
		||||
        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");
 | 
			
		||||
		BIO_printf(bio_err," -timebomb n   interrupt keygen after <n> seconds\n");
 | 
			
		||||
#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;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -235,20 +242,24 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
@@ -256,8 +267,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -267,104 +281,118 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (need_rand) {
 | 
			
		||||
	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 (numbits > 0) {
 | 
			
		||||
	if (numbits > 0)
 | 
			
		||||
		{
 | 
			
		||||
		BN_GENCB cb;
 | 
			
		||||
		BN_GENCB_set(&cb, dsa_cb, bio_err);
 | 
			
		||||
		assert(need_rand);
 | 
			
		||||
		dsa = DSA_new();
 | 
			
		||||
        if (!dsa) {
 | 
			
		||||
		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);
 | 
			
		||||
		if (non_fips_allow)
 | 
			
		||||
			dsa->flags |= DSA_FLAG_NON_FIPS_ALLOW;
 | 
			
		||||
		BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
 | 
			
		||||
	        BIO_printf(bio_err,"This could take some time\n");
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
        if (timebomb > 0) {
 | 
			
		||||
		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",
 | 
			
		||||
		BIO_printf(bio_err,"(though I'll stop it if not done within %d secs)\n",
 | 
			
		||||
				timebomb);
 | 
			
		||||
            if (sigaction(SIGALRM, &act, NULL) != 0) {
 | 
			
		||||
		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)) {
 | 
			
		||||
	        if(!DSA_generate_parameters_ex(dsa,num,NULL,0,NULL,NULL, &cb))
 | 
			
		||||
			{
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
            if (stop_keygen_flag) {
 | 
			
		||||
			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);
 | 
			
		||||
	else if (informat == FORMAT_PEM)
 | 
			
		||||
		dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL);
 | 
			
		||||
    else {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (dsa == NULL) {
 | 
			
		||||
	if (dsa == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load DSA parameters\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (text) {
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		DSAparams_print(out,dsa);
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
    if (C) {
 | 
			
		||||
	if (C)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char *data;
 | 
			
		||||
		int l,len,bits_p;
 | 
			
		||||
 | 
			
		||||
		len=BN_num_bytes(dsa->p);
 | 
			
		||||
		bits_p=BN_num_bits(dsa->p);
 | 
			
		||||
		data=(unsigned char *)OPENSSL_malloc(len+20);
 | 
			
		||||
        if (data == NULL) {
 | 
			
		||||
		if (data == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		l=BN_bn2bin(dsa->p,data);
 | 
			
		||||
		printf("static unsigned char dsa%d_p[]={",bits_p);
 | 
			
		||||
        for (i = 0; i < l; i++) {
 | 
			
		||||
            if ((i % 12) == 0)
 | 
			
		||||
                printf("\n\t");
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t};\n");
 | 
			
		||||
 | 
			
		||||
		l=BN_bn2bin(dsa->q,data);
 | 
			
		||||
		printf("static unsigned char dsa%d_q[]={",bits_p);
 | 
			
		||||
        for (i = 0; i < l; i++) {
 | 
			
		||||
            if ((i % 12) == 0)
 | 
			
		||||
                printf("\n\t");
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t};\n");
 | 
			
		||||
 | 
			
		||||
		l=BN_bn2bin(dsa->g,data);
 | 
			
		||||
		printf("static unsigned char dsa%d_g[]={",bits_p);
 | 
			
		||||
        for (i = 0; i < l; i++) {
 | 
			
		||||
            if ((i % 12) == 0)
 | 
			
		||||
                printf("\n\t");
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t};\n\n");
 | 
			
		||||
@@ -378,13 +406,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			bits_p,bits_p);
 | 
			
		||||
		printf("\tdsa->g=BN_bin2bn(dsa%d_g,sizeof(dsa%d_g),NULL);\n",
 | 
			
		||||
			bits_p,bits_p);
 | 
			
		||||
        printf
 | 
			
		||||
            ("\tif ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))\n");
 | 
			
		||||
		printf("\tif ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))\n");
 | 
			
		||||
		printf("\t\t{ DSA_free(dsa); return(NULL); }\n");
 | 
			
		||||
		printf("\treturn(dsa);\n\t}\n");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (!noout) {
 | 
			
		||||
 | 
			
		||||
	if (!noout)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_DSAparams_bio(out,dsa);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
@@ -393,27 +422,34 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
        if (!i) {
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to write DSA parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (genkey) {
 | 
			
		||||
	if (genkey)
 | 
			
		||||
		{
 | 
			
		||||
		DSA *dsakey;
 | 
			
		||||
 | 
			
		||||
		assert(need_rand);
 | 
			
		||||
        if ((dsakey = DSAparams_dup(dsa)) == NULL)
 | 
			
		||||
            goto end;
 | 
			
		||||
		if ((dsakey=DSAparams_dup(dsa)) == NULL) goto end;
 | 
			
		||||
		if (non_fips_allow)
 | 
			
		||||
			dsakey->flags |= DSA_FLAG_NON_FIPS_ALLOW;
 | 
			
		||||
		if (!DSA_generate_key(dsakey))
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			DSA_free(dsakey);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_DSAPrivateKey_bio(out,dsakey);
 | 
			
		||||
		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	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			DSA_free(dsakey);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		DSA_free(dsakey);
 | 
			
		||||
@@ -422,12 +458,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (dsa != NULL)
 | 
			
		||||
        DSA_free(dsa);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dsa != NULL) DSA_free(dsa);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
@@ -436,14 +469,10 @@ static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
 | 
			
		||||
    if (p == 0)
 | 
			
		||||
        c = '.';
 | 
			
		||||
    if (p == 1)
 | 
			
		||||
        c = '+';
 | 
			
		||||
    if (p == 2)
 | 
			
		||||
        c = '*';
 | 
			
		||||
    if (p == 3)
 | 
			
		||||
        c = '\n';
 | 
			
		||||
	if (p == 0) c='.';
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write(cb->arg,&c,1);
 | 
			
		||||
	(void)BIO_flush(cb->arg);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										147
									
								
								apps/ec.c
									
									
									
									
									
								
							
							
						
						
									
										147
									
								
								apps/ec.c
									
									
									
									
									
								
							@@ -70,8 +70,7 @@
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	ec_main
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg    - input format - default PEM (one of DER, NET or PEM)
 | 
			
		||||
/* -inform arg    - input format - default PEM (one of DER, NET or PEM)
 | 
			
		||||
 * -outform arg   - output format - default PEM
 | 
			
		||||
 * -in arg        - input file - default stdin
 | 
			
		||||
 * -out arg       - output file - default stdout
 | 
			
		||||
@@ -120,40 +119,49 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	prog = argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	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;
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passin") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passout") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
			noout = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
			text = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-conv_form") == 0) {
 | 
			
		||||
		else if (strcmp(*argv, "-conv_form") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
@@ -166,7 +174,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				form = POINT_CONVERSION_HYBRID;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-param_enc") == 0) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-param_enc") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
@@ -177,13 +187,15 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				asn1_flag = 0;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-param_out") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		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) {
 | 
			
		||||
		else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
@@ -192,7 +204,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badops) {
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
@@ -222,10 +235,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				" compressed\n");
 | 
			
		||||
		BIO_printf(bio_err, "                                 "
 | 
			
		||||
				" uncompressed (default)\n");
 | 
			
		||||
        BIO_printf(bio_err, "                                  " " hybrid\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, "                 in the asn1 der "
 | 
			
		||||
				"encoding\n");
 | 
			
		||||
		BIO_printf(bio_err, "                 possible values:"
 | 
			
		||||
				" named_curve (default)\n");
 | 
			
		||||
		BIO_printf(bio_err,"                                  "
 | 
			
		||||
@@ -239,49 +254,62 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#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");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	in = BIO_new(BIO_s_file());
 | 
			
		||||
	out = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
	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 (informat == FORMAT_ASN1) 
 | 
			
		||||
		{
 | 
			
		||||
		if (pubin) 
 | 
			
		||||
			eckey = d2i_EC_PUBKEY_bio(in, NULL);
 | 
			
		||||
		else 
 | 
			
		||||
			eckey = d2i_ECPrivateKey_bio(in, NULL);
 | 
			
		||||
    } else if (informat == FORMAT_PEM) {
 | 
			
		||||
		} 
 | 
			
		||||
	else if (informat == FORMAT_PEM) 
 | 
			
		||||
		{
 | 
			
		||||
		if (pubin) 
 | 
			
		||||
            eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL, NULL);
 | 
			
		||||
			eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL, 
 | 
			
		||||
				NULL);
 | 
			
		||||
		else 
 | 
			
		||||
            eckey = PEM_read_bio_ECPrivateKey(in, NULL, NULL, passin);
 | 
			
		||||
    } 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) {
 | 
			
		||||
	if (eckey == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load Key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
@@ -289,8 +317,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out, outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -305,26 +336,31 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		EC_KEY_set_asn1_flag(eckey, asn1_flag);
 | 
			
		||||
 | 
			
		||||
	if (text) 
 | 
			
		||||
        if (!EC_KEY_print(out, eckey, 0)) {
 | 
			
		||||
		if (!EC_KEY_print(out, eckey, 0))
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
    if (noout) {
 | 
			
		||||
	if (noout) 
 | 
			
		||||
		{
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err, "writing EC key\n");
 | 
			
		||||
    if (outformat == FORMAT_ASN1) {
 | 
			
		||||
	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) {
 | 
			
		||||
		} 
 | 
			
		||||
	else if (outformat == FORMAT_PEM) 
 | 
			
		||||
		{
 | 
			
		||||
		if (param_out)
 | 
			
		||||
			i = PEM_write_bio_ECPKParameters(out, group);
 | 
			
		||||
		else if (pubin || pubout)
 | 
			
		||||
@@ -332,15 +368,20 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		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");
 | 
			
		||||
		} 
 | 
			
		||||
	else 
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "bad output format specified for "
 | 
			
		||||
			"outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (!i) {
 | 
			
		||||
	if (!i)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "unable to write private key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
    } else
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (in)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										248
									
								
								apps/ecparam.c
									
									
									
									
									
								
							
							
						
						
									
										248
									
								
								apps/ecparam.c
									
									
									
									
									
								
							@@ -87,8 +87,7 @@
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	ecparam_main
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg      - input format - default PEM (DER or PEM)
 | 
			
		||||
/* -inform arg      - input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg     - output format - default PEM
 | 
			
		||||
 * -in  arg         - input file  - default stdin
 | 
			
		||||
 * -out arg         - output file - default stdout
 | 
			
		||||
@@ -106,14 +105,14 @@
 | 
			
		||||
 *                    in the asn1 der encoding
 | 
			
		||||
 *                    possible values: named_curve (default)
 | 
			
		||||
 *                                     explicit
 | 
			
		||||
 * -no_seed         - if 'explicit' parameters are chosen do not use the seed
 | 
			
		||||
 * -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 *);
 | 
			
		||||
 | 
			
		||||
static int ecparam_print_var(BIO *,BIGNUM *,const char *,int,unsigned char *);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
@@ -151,36 +150,44 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	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;
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		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) {
 | 
			
		||||
		else if (strcmp (*argv, "-name") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			curve_name = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-list_curves") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-list_curves") == 0)
 | 
			
		||||
			list_curves = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-conv_form") == 0) {
 | 
			
		||||
		else if (strcmp(*argv, "-conv_form") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
@@ -193,7 +200,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				form = POINT_CONVERSION_HYBRID;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-param_enc") == 0) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-param_enc") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
@@ -204,23 +213,29 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				asn1_flag = 0;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-no_seed") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-no_seed") == 0)
 | 
			
		||||
			no_seed = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
        else if (strcmp(*argv, "-genkey") == 0) {
 | 
			
		||||
		else if (strcmp(*argv,"-genkey") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			genkey=1;
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
        } else if (strcmp(*argv, "-rand") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
			}
 | 
			
		||||
		else if(strcmp(*argv, "-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine = *(++argv);
 | 
			
		||||
        } else {
 | 
			
		||||
			}	
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
@@ -229,7 +244,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badops) {
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err, "%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
@@ -270,8 +286,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf(bio_err, "                                   "
 | 
			
		||||
				" explicit\n");
 | 
			
		||||
		BIO_printf(bio_err, " -no_seed          if 'explicit'"
 | 
			
		||||
                   " parameters are chosen do not" " use the seed\n");
 | 
			
		||||
        BIO_printf(bio_err, " -genkey           generate ec" " key\n");
 | 
			
		||||
				" 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, "
 | 
			
		||||
@@ -283,20 +301,24 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
@@ -304,8 +326,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -315,7 +340,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (list_curves) {
 | 
			
		||||
	if (list_curves)
 | 
			
		||||
		{
 | 
			
		||||
		EC_builtin_curve *curves = NULL;
 | 
			
		||||
		size_t crv_len = 0;
 | 
			
		||||
		size_t n = 0;
 | 
			
		||||
@@ -327,12 +353,15 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		if (curves == NULL)
 | 
			
		||||
			goto end;
 | 
			
		||||
 | 
			
		||||
        if (!EC_get_builtin_curves(curves, crv_len)) {
 | 
			
		||||
		if (!EC_get_builtin_curves(curves, crv_len))
 | 
			
		||||
			{
 | 
			
		||||
			OPENSSL_free(curves);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
        for (n = 0; n < crv_len; n++) {
 | 
			
		||||
		
 | 
			
		||||
		for (n = 0; n < crv_len; n++)
 | 
			
		||||
			{
 | 
			
		||||
			const char *comment;
 | 
			
		||||
			const char *sname;
 | 
			
		||||
			comment = curves[n].comment;
 | 
			
		||||
@@ -351,48 +380,64 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (curve_name != NULL) {
 | 
			
		||||
	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)
 | 
			
		||||
		/* 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")) {
 | 
			
		||||
		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")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(curve_name, "secp256r1"))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "using curve name prime256v1 "
 | 
			
		||||
				"instead of secp256r1\n");
 | 
			
		||||
			nid = NID_X9_62_prime256v1;
 | 
			
		||||
        } else
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			nid = OBJ_sn2nid(curve_name);
 | 
			
		||||
	
 | 
			
		||||
        if (nid == 0) {
 | 
			
		||||
            BIO_printf(bio_err, "unknown curve name (%s)\n", 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);
 | 
			
		||||
		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) {
 | 
			
		||||
		}
 | 
			
		||||
	else if (informat == FORMAT_ASN1)
 | 
			
		||||
		{
 | 
			
		||||
		group = d2i_ECPKParameters_bio(in, NULL);
 | 
			
		||||
    } else if (informat == FORMAT_PEM) {
 | 
			
		||||
		}
 | 
			
		||||
	else if (informat == FORMAT_PEM)
 | 
			
		||||
		{
 | 
			
		||||
		group = PEM_read_bio_ECPKParameters(in,NULL,NULL,NULL);
 | 
			
		||||
    } else {
 | 
			
		||||
		}
 | 
			
		||||
	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");
 | 
			
		||||
	if (group == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, 
 | 
			
		||||
			"unable to load elliptic curve parameters\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -403,28 +448,34 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if (new_asn1_flag)
 | 
			
		||||
		EC_GROUP_set_asn1_flag(group, asn1_flag);
 | 
			
		||||
 | 
			
		||||
    if (no_seed) {
 | 
			
		||||
	if (no_seed)
 | 
			
		||||
		{
 | 
			
		||||
		EC_GROUP_set_seed(group, NULL, 0);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (text) {
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		if (!ECPKParameters_print(out, group, 0))
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (check) {
 | 
			
		||||
	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)) {
 | 
			
		||||
		if (!EC_GROUP_check(group, NULL))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "failed\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
        } else
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			BIO_printf(bio_err, "ok\n");
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (C) {
 | 
			
		||||
	if (C)
 | 
			
		||||
		{
 | 
			
		||||
		size_t	buf_len = 0, tmp_len = 0;
 | 
			
		||||
		const EC_POINT *point;
 | 
			
		||||
		int	is_prime, len = 0;
 | 
			
		||||
@@ -433,17 +484,23 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		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) {
 | 
			
		||||
		    (ec_cofactor = BN_new()) == NULL )
 | 
			
		||||
			{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
        is_prime = (EC_METHOD_get_field_type(meth) == NID_X9_62_prime_field);
 | 
			
		||||
		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))
 | 
			
		||||
		if (is_prime)
 | 
			
		||||
			{
 | 
			
		||||
			if (!EC_GROUP_get_curve_GFp(group, ec_p, ec_a,
 | 
			
		||||
				ec_b, NULL))
 | 
			
		||||
				goto end;
 | 
			
		||||
        } else {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			/* TODO */
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -451,15 +508,16 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		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))
 | 
			
		||||
			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)
 | 
			
		||||
		if (!ec_p || !ec_a || !ec_b || !ec_gen || 
 | 
			
		||||
			!ec_order || !ec_cofactor)
 | 
			
		||||
			goto end;
 | 
			
		||||
 | 
			
		||||
		len = BN_num_bits(ec_order);
 | 
			
		||||
@@ -479,7 +537,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
		buffer = (unsigned char *)OPENSSL_malloc(buf_len);
 | 
			
		||||
 | 
			
		||||
        if (buffer == NULL) {
 | 
			
		||||
		if (buffer == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -489,7 +548,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		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);
 | 
			
		||||
		ecparam_print_var(out, ec_cofactor, "ec_cofactor", len, 
 | 
			
		||||
			buffer);
 | 
			
		||||
 | 
			
		||||
		BIO_printf(out, "\n\n");
 | 
			
		||||
 | 
			
		||||
@@ -508,11 +568,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		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) {
 | 
			
		||||
		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 {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			/* TODO */
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -545,17 +608,20 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf(out, "\treturn(group);\n\t}\n");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    if (!noout) {
 | 
			
		||||
	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 {
 | 
			
		||||
		else	
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for"
 | 
			
		||||
				" outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
        if (!i) {
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "unable to write elliptic "
 | 
			
		||||
				"curve parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
@@ -563,14 +629,16 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
    if (need_rand) {
 | 
			
		||||
	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) {
 | 
			
		||||
	if (genkey)
 | 
			
		||||
		{
 | 
			
		||||
		EC_KEY *eckey = EC_KEY_new();
 | 
			
		||||
 | 
			
		||||
		if (eckey == NULL)
 | 
			
		||||
@@ -581,7 +649,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		if (EC_KEY_set_group(eckey, group) == 0)
 | 
			
		||||
			goto end;
 | 
			
		||||
		
 | 
			
		||||
        if (!EC_KEY_generate_key(eckey)) {
 | 
			
		||||
		if (!EC_KEY_generate_key(eckey))
 | 
			
		||||
			{
 | 
			
		||||
			EC_KEY_free(eckey);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -590,7 +659,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i = PEM_write_bio_ECPrivateKey(out, eckey, NULL,
 | 
			
		||||
				NULL, 0, NULL, NULL);
 | 
			
		||||
        else {
 | 
			
		||||
		else	
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "bad output format specified "
 | 
			
		||||
				"for outfile\n");
 | 
			
		||||
			EC_KEY_free(eckey);
 | 
			
		||||
@@ -634,11 +704,13 @@ static int ecparam_print_var(BIO *out, BIGNUM *in, const char *var,
 | 
			
		||||
	BIO_printf(out, "static unsigned char %s_%d[] = {", var, len);
 | 
			
		||||
	if (BN_is_zero(in))
 | 
			
		||||
		BIO_printf(out, "\n\t0x00");
 | 
			
		||||
    else {
 | 
			
		||||
	else 
 | 
			
		||||
		{
 | 
			
		||||
		int i, l;
 | 
			
		||||
 | 
			
		||||
		l = BN_bn2bin(in, buffer);
 | 
			
		||||
        for (i = 0; i < l - 1; i++) {
 | 
			
		||||
		for (i=0; i<l-1; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) 
 | 
			
		||||
				BIO_printf(out, "\n\t");
 | 
			
		||||
			BIO_printf(out, "0x%02X,", buffer[i]);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										375
									
								
								apps/enc.c
									
									
									
									
									
								
							
							
						
						
									
										375
									
								
								apps/enc.c
									
									
									
									
									
								
							@@ -67,9 +67,7 @@
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#ifndef OPENSSL_NO_COMP
 | 
			
		||||
#include <openssl/comp.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
 | 
			
		||||
int set_hex(char *in,unsigned char *out,int size);
 | 
			
		||||
@@ -90,10 +88,12 @@ static void show_ciphers(const OBJ_NAME *name, void *bio_)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio,"-%-25s",name->name);
 | 
			
		||||
    if (++n == 3) {
 | 
			
		||||
	if(++n == 3)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio,"\n");
 | 
			
		||||
		n=0;
 | 
			
		||||
    } else
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		BIO_printf(bio," ");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -122,8 +122,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	const EVP_CIPHER *cipher=NULL,*c;
 | 
			
		||||
	EVP_CIPHER_CTX *ctx = 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
 | 
			
		||||
	char pname[PROG_NAME_SIZE+1];
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
@@ -163,26 +162,29 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if	(strcmp(*argv,"-e") == 0)
 | 
			
		||||
			enc=1;
 | 
			
		||||
        else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inf= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outf= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-pass") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-pass") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passarg= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -212,65 +214,82 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		else if	(strcmp(*argv,"-z") == 0)
 | 
			
		||||
			do_zlib=1;
 | 
			
		||||
#endif
 | 
			
		||||
        else if (strcmp(*argv, "-bufsize") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-bufsize") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			bufsize=(unsigned char *)*(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-k") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-k") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			str= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-kfile") == 0) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-kfile") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			static char buf[128];
 | 
			
		||||
			FILE *infile;
 | 
			
		||||
			char *file;
 | 
			
		||||
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			file= *(++argv);
 | 
			
		||||
			infile=fopen(file,"r");
 | 
			
		||||
            if (infile == NULL) {
 | 
			
		||||
                BIO_printf(bio_err, "unable to read key from '%s'\n", file);
 | 
			
		||||
			if (infile == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"unable to read key from '%s'\n",
 | 
			
		||||
					file);
 | 
			
		||||
				goto bad;
 | 
			
		||||
				}
 | 
			
		||||
			buf[0]='\0';
 | 
			
		||||
            if (!fgets(buf, sizeof buf, infile)) {
 | 
			
		||||
                BIO_printf(bio_err, "unable to read key from '%s'\n", file);
 | 
			
		||||
			if (!fgets(buf,sizeof buf,infile))
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"unable to read key from '%s'\n",
 | 
			
		||||
					file);
 | 
			
		||||
				goto bad;
 | 
			
		||||
				}
 | 
			
		||||
			fclose(infile);
 | 
			
		||||
			i=strlen(buf);
 | 
			
		||||
            if ((i > 0) && ((buf[i - 1] == '\n') || (buf[i - 1] == '\r')))
 | 
			
		||||
			if ((i > 0) &&
 | 
			
		||||
				((buf[i-1] == '\n') || (buf[i-1] == '\r')))
 | 
			
		||||
				buf[--i]='\0';
 | 
			
		||||
            if ((i > 0) && ((buf[i - 1] == '\n') || (buf[i - 1] == '\r')))
 | 
			
		||||
			if ((i > 0) &&
 | 
			
		||||
				((buf[i-1] == '\n') || (buf[i-1] == '\r')))
 | 
			
		||||
				buf[--i]='\0';
 | 
			
		||||
            if (i < 1) {
 | 
			
		||||
			if (i < 1)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"zero length password\n");
 | 
			
		||||
				goto bad;
 | 
			
		||||
				}
 | 
			
		||||
			str=buf;
 | 
			
		||||
        } else if (strcmp(*argv, "-K") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-K") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			hkey= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-S") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-S") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			hsalt= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-iv") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-iv") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			hiv= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-md") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-md") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			md= *(++argv);
 | 
			
		||||
        } else if ((argv[0][0] == '-') &&
 | 
			
		||||
                   ((c = EVP_get_cipherbyname(&(argv[0][1]))) != NULL)) {
 | 
			
		||||
			}
 | 
			
		||||
		else if	((argv[0][0] == '-') &&
 | 
			
		||||
			((c=EVP_get_cipherbyname(&(argv[0][1]))) != NULL))
 | 
			
		||||
			{
 | 
			
		||||
			cipher=c;
 | 
			
		||||
        } else if (strcmp(*argv, "-none") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-none") == 0)
 | 
			
		||||
			cipher=NULL;
 | 
			
		||||
        else {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option '%s'\n",*argv);
 | 
			
		||||
bad:
 | 
			
		||||
			BIO_printf(bio_err,"options are\n");
 | 
			
		||||
@@ -279,38 +298,24 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			BIO_printf(bio_err,"%-14s pass phrase source\n","-pass <arg>");
 | 
			
		||||
			BIO_printf(bio_err,"%-14s encrypt\n","-e");
 | 
			
		||||
			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 passphrase is the next argument\n",
 | 
			
		||||
                       "-k");
 | 
			
		||||
            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 print the iv/key (then exit if -P)\n",
 | 
			
		||||
                       "-[pP]");
 | 
			
		||||
			BIO_printf(bio_err,"%-14s base64 encode/decode, depending on encryption flag\n","-a/-base64");
 | 
			
		||||
			BIO_printf(bio_err,"%-14s passphrase is the next argument\n","-k");
 | 
			
		||||
			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 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 disable standard block padding\n",
 | 
			
		||||
                       "-nopad");
 | 
			
		||||
			BIO_printf(bio_err,"%-14s disable standard block padding\n","-nopad");
 | 
			
		||||
#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
 | 
			
		||||
 | 
			
		||||
			BIO_printf(bio_err,"Cipher Types\n");
 | 
			
		||||
			OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH,
 | 
			
		||||
                                   show_ciphers, bio_err);
 | 
			
		||||
					       show_ciphers,
 | 
			
		||||
					       bio_err);
 | 
			
		||||
			BIO_printf(bio_err,"\n");
 | 
			
		||||
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -323,71 +328,81 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (md && (dgst = EVP_get_digestbyname(md)) == NULL) {
 | 
			
		||||
	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) {
 | 
			
		||||
	if (dgst == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		dgst = EVP_md5();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (bufsize != NULL) {
 | 
			
		||||
	if (bufsize != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned long n;
 | 
			
		||||
 | 
			
		||||
        for (n = 0; *bufsize; bufsize++) {
 | 
			
		||||
		for (n=0; *bufsize; bufsize++)
 | 
			
		||||
			{
 | 
			
		||||
			i= *bufsize;
 | 
			
		||||
			if ((i <= '9') && (i >= '0'))
 | 
			
		||||
				n=n*10+i-'0';
 | 
			
		||||
            else if (i == 'k') {
 | 
			
		||||
			else if (i == 'k')
 | 
			
		||||
				{
 | 
			
		||||
				n*=1024;
 | 
			
		||||
				bufsize++;
 | 
			
		||||
				break;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
        if (*bufsize != '\0') {
 | 
			
		||||
		if (*bufsize != '\0')
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"invalid 'bufsize' specified.\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		/* It must be large enough for a base64 encoded line */
 | 
			
		||||
        if (base64 && n < 80)
 | 
			
		||||
            n = 80;
 | 
			
		||||
		if (base64 && n < 80) n=80;
 | 
			
		||||
 | 
			
		||||
		bsize=(int)n;
 | 
			
		||||
        if (verbose)
 | 
			
		||||
            BIO_printf(bio_err, "bufsize=%d\n", bsize);
 | 
			
		||||
		if (verbose) BIO_printf(bio_err,"bufsize=%d\n",bsize);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	strbuf=OPENSSL_malloc(SIZE);
 | 
			
		||||
	buff=(unsigned char *)OPENSSL_malloc(EVP_ENCODE_LENGTH(bsize));
 | 
			
		||||
    if ((buff == NULL) || (strbuf == NULL)) {
 | 
			
		||||
        BIO_printf(bio_err, "OPENSSL_malloc failure %ld\n",
 | 
			
		||||
                   (long)EVP_ENCODE_LENGTH(bsize));
 | 
			
		||||
	if ((buff == NULL) || (strbuf == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"OPENSSL_malloc failure %ld\n",(long)EVP_ENCODE_LENGTH(bsize));
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (debug) {
 | 
			
		||||
	if (debug)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_callback(in,BIO_debug_callback);
 | 
			
		||||
		BIO_set_callback(out,BIO_debug_callback);
 | 
			
		||||
		BIO_set_callback_arg(in,(char *)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);
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_read_filename(in, inf) <= 0) {
 | 
			
		||||
	        }
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,inf) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(inf);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -401,8 +416,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		str = pass;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    if ((str == NULL) && (cipher != NULL) && (hkey == NULL)) {
 | 
			
		||||
        for (;;) {
 | 
			
		||||
	if ((str == NULL) && (cipher != NULL) && (hkey == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		for (;;)
 | 
			
		||||
			{
 | 
			
		||||
			char buf[200];
 | 
			
		||||
 | 
			
		||||
			BIO_snprintf(buf,sizeof buf,"enter %s %s password:",
 | 
			
		||||
@@ -410,22 +427,27 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				     (enc)?"encryption":"decryption");
 | 
			
		||||
			strbuf[0]='\0';
 | 
			
		||||
			i=EVP_read_pw_string((char *)strbuf,SIZE,buf,enc);
 | 
			
		||||
            if (i == 0) {
 | 
			
		||||
                if (strbuf[0] == '\0') {
 | 
			
		||||
			if (i == 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (strbuf[0] == '\0')
 | 
			
		||||
					{
 | 
			
		||||
					ret=1;
 | 
			
		||||
					goto end;
 | 
			
		||||
					}
 | 
			
		||||
				str=strbuf;
 | 
			
		||||
				break;
 | 
			
		||||
				}
 | 
			
		||||
            if (i < 0) {
 | 
			
		||||
			if (i < 0)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"bad password read\n");
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (outf == NULL) {
 | 
			
		||||
 | 
			
		||||
	if (outf == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifndef OPENSSL_NO_SETVBUF_IONBF
 | 
			
		||||
		if (bufsize != NULL)
 | 
			
		||||
@@ -437,8 +459,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outf) <= 0) {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outf) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outf);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -449,7 +474,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
#ifdef ZLIB
 | 
			
		||||
 | 
			
		||||
    if (do_zlib) {
 | 
			
		||||
	if (do_zlib)
 | 
			
		||||
		{
 | 
			
		||||
		if ((bzl=BIO_new(BIO_f_zlib())) == NULL)
 | 
			
		||||
			goto end;
 | 
			
		||||
		if (enc)
 | 
			
		||||
@@ -459,10 +485,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (base64) {
 | 
			
		||||
	if (base64)
 | 
			
		||||
		{
 | 
			
		||||
		if ((b64=BIO_new(BIO_f_base64())) == NULL)
 | 
			
		||||
			goto end;
 | 
			
		||||
        if (debug) {
 | 
			
		||||
		if (debug)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_set_callback(b64,BIO_debug_callback);
 | 
			
		||||
			BIO_set_callback_arg(b64,(char *)bio_err);
 | 
			
		||||
			}
 | 
			
		||||
@@ -474,31 +502,30 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			rbio=BIO_push(b64,rbio);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (cipher != NULL) {
 | 
			
		||||
        /*
 | 
			
		||||
         * Note that str is NULL if a key was passed on the command line, so
 | 
			
		||||
         * we get no salt in that case. Is this a bug?
 | 
			
		||||
	if (cipher != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		/* Note that str is NULL if a key was passed on the command
 | 
			
		||||
		 * line, so we get no salt in that case. Is this a bug?
 | 
			
		||||
		 */
 | 
			
		||||
        if (str != NULL) {
 | 
			
		||||
            /*
 | 
			
		||||
             * Salt handling: if encrypting generate a salt and write to
 | 
			
		||||
             * output BIO. If decrypting read salt from input BIO.
 | 
			
		||||
		if (str != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			/* Salt handling: if encrypting generate a salt and
 | 
			
		||||
			 * write to output BIO. If decrypting read salt from
 | 
			
		||||
			 * input BIO.
 | 
			
		||||
			 */
 | 
			
		||||
			unsigned char *sptr;
 | 
			
		||||
            if (nosalt)
 | 
			
		||||
                sptr = NULL;
 | 
			
		||||
			if(nosalt) sptr = NULL;
 | 
			
		||||
			else {
 | 
			
		||||
				if(enc) {
 | 
			
		||||
					if(hsalt) {
 | 
			
		||||
						if(!set_hex(hsalt,salt,sizeof salt)) {
 | 
			
		||||
                            BIO_printf(bio_err, "invalid hex salt value\n");
 | 
			
		||||
							BIO_printf(bio_err,
 | 
			
		||||
								"invalid hex salt value\n");
 | 
			
		||||
							goto end;
 | 
			
		||||
						}
 | 
			
		||||
					} else if (RAND_pseudo_bytes(salt, sizeof salt) < 0)
 | 
			
		||||
						goto end;
 | 
			
		||||
                    /*
 | 
			
		||||
                     * If -P option then don't bother writing
 | 
			
		||||
                     */
 | 
			
		||||
					/* If -P option then don't bother writing */
 | 
			
		||||
					if((printkey != 2)
 | 
			
		||||
					   && (BIO_write(wbio,magic,
 | 
			
		||||
							 sizeof magic-1) != sizeof magic-1
 | 
			
		||||
@@ -523,31 +550,33 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			EVP_BytesToKey(cipher,dgst,sptr,
 | 
			
		||||
                           (unsigned char *)str, strlen(str), 1, key, iv);
 | 
			
		||||
            /*
 | 
			
		||||
             * zero the complete buffer or the string passed from the command
 | 
			
		||||
             * line bug picked up by Larry J. Hughes Jr. <hughes@indiana.edu>
 | 
			
		||||
             */
 | 
			
		||||
				(unsigned char *)str,
 | 
			
		||||
				strlen(str),1,key,iv);
 | 
			
		||||
			/* zero the complete buffer or the string
 | 
			
		||||
			 * passed from the command line
 | 
			
		||||
			 * bug picked up by
 | 
			
		||||
			 * Larry J. Hughes Jr. <hughes@indiana.edu> */
 | 
			
		||||
			if (str == strbuf)
 | 
			
		||||
				OPENSSL_cleanse(str,SIZE);
 | 
			
		||||
			else
 | 
			
		||||
				OPENSSL_cleanse(str,strlen(str));
 | 
			
		||||
			}
 | 
			
		||||
        if ((hiv != NULL) && !set_hex(hiv, iv, sizeof iv)) {
 | 
			
		||||
		if ((hiv != NULL) && !set_hex(hiv,iv,sizeof iv))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"invalid hex iv value\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if ((hiv == NULL) && (str == NULL)
 | 
			
		||||
            && EVP_CIPHER_iv_length(cipher) != 0) {
 | 
			
		||||
            /*
 | 
			
		||||
             * No IV was explicitly set and no IV was generated during
 | 
			
		||||
             * EVP_BytesToKey. Hence the IV is undefined, making correct
 | 
			
		||||
             * decryption impossible.
 | 
			
		||||
             */
 | 
			
		||||
		    && EVP_CIPHER_iv_length(cipher) != 0)
 | 
			
		||||
			{
 | 
			
		||||
			/* No IV was explicitly set and no IV was generated
 | 
			
		||||
			 * during EVP_BytesToKey. Hence the IV is undefined,
 | 
			
		||||
			 * making correct decryption impossible. */
 | 
			
		||||
			BIO_printf(bio_err, "iv undefined\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
        if ((hkey != NULL) && !set_hex(hkey, key, sizeof key)) {
 | 
			
		||||
		if ((hkey != NULL) && !set_hex(hkey,key,sizeof key))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"invalid hex key value\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -555,13 +584,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		if ((benc=BIO_new(BIO_f_cipher())) == NULL)
 | 
			
		||||
			goto end;
 | 
			
		||||
 | 
			
		||||
        /*
 | 
			
		||||
         * Since we may be changing parameters work on the encryption context
 | 
			
		||||
         * rather than calling BIO_set_cipher().
 | 
			
		||||
		/* Since we may be changing parameters work on the encryption
 | 
			
		||||
		 * context rather than calling BIO_set_cipher().
 | 
			
		||||
		 */
 | 
			
		||||
 | 
			
		||||
		BIO_get_cipher_ctx(benc, &ctx);
 | 
			
		||||
        if (!EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, enc)) {
 | 
			
		||||
		if (!EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, enc))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error setting cipher %s\n",
 | 
			
		||||
				EVP_CIPHER_name(cipher));
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
@@ -571,38 +600,45 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		if (nopad)
 | 
			
		||||
			EVP_CIPHER_CTX_set_padding(ctx, 0);
 | 
			
		||||
 | 
			
		||||
        if (!EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, enc)) {
 | 
			
		||||
		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_arg(benc,(char *)bio_err);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
        if (printkey) {
 | 
			
		||||
            if (!nosalt) {
 | 
			
		||||
		if (printkey)
 | 
			
		||||
			{
 | 
			
		||||
			if (!nosalt)
 | 
			
		||||
				{
 | 
			
		||||
				printf("salt=");
 | 
			
		||||
				for (i=0; i<(int)sizeof(salt); i++)
 | 
			
		||||
					printf("%02X",salt[i]);
 | 
			
		||||
				printf("\n");
 | 
			
		||||
				}
 | 
			
		||||
            if (cipher->key_len > 0) {
 | 
			
		||||
			if (cipher->key_len > 0)
 | 
			
		||||
				{
 | 
			
		||||
				printf("key=");
 | 
			
		||||
				for (i=0; i<cipher->key_len; i++)
 | 
			
		||||
					printf("%02X",key[i]);
 | 
			
		||||
				printf("\n");
 | 
			
		||||
				}
 | 
			
		||||
            if (cipher->iv_len > 0) {
 | 
			
		||||
			if (cipher->iv_len > 0)
 | 
			
		||||
				{
 | 
			
		||||
				printf("iv =");
 | 
			
		||||
				for (i=0; i<cipher->iv_len; i++)
 | 
			
		||||
					printf("%02X",iv[i]);
 | 
			
		||||
				printf("\n");
 | 
			
		||||
				}
 | 
			
		||||
            if (printkey == 2) {
 | 
			
		||||
			if (printkey == 2)
 | 
			
		||||
				{
 | 
			
		||||
				ret=0;
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
@@ -613,45 +649,40 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if (benc != NULL)
 | 
			
		||||
		wbio=BIO_push(benc,wbio);
 | 
			
		||||
 | 
			
		||||
    for (;;) {
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		inl=BIO_read(rbio,(char *)buff,bsize);
 | 
			
		||||
        if (inl <= 0)
 | 
			
		||||
            break;
 | 
			
		||||
        if (BIO_write(wbio, (char *)buff, inl) != inl) {
 | 
			
		||||
		if (inl <= 0) break;
 | 
			
		||||
		if (BIO_write(wbio,(char *)buff,inl) != inl)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"error writing output file\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (!BIO_flush(wbio)) {
 | 
			
		||||
	if (!BIO_flush(wbio))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad decrypt\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
    if (verbose) {
 | 
			
		||||
	if (verbose)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bytes read   :%8ld\n",BIO_number_read(in));
 | 
			
		||||
		BIO_printf(bio_err,"bytes written:%8ld\n",BIO_number_written(out));
 | 
			
		||||
		}
 | 
			
		||||
end:
 | 
			
		||||
	ERR_print_errors(bio_err);
 | 
			
		||||
    if (strbuf != NULL)
 | 
			
		||||
        OPENSSL_free(strbuf);
 | 
			
		||||
    if (buff != NULL)
 | 
			
		||||
        OPENSSL_free(buff);
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (benc != NULL)
 | 
			
		||||
        BIO_free(benc);
 | 
			
		||||
    if (b64 != NULL)
 | 
			
		||||
        BIO_free(b64);
 | 
			
		||||
	if (strbuf != NULL) OPENSSL_free(strbuf);
 | 
			
		||||
	if (buff != NULL) OPENSSL_free(buff);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (benc != NULL) BIO_free(benc);
 | 
			
		||||
	if (b64 != NULL) BIO_free(b64);
 | 
			
		||||
#ifdef ZLIB
 | 
			
		||||
    if (bzl != NULL)
 | 
			
		||||
        BIO_free(bzl);
 | 
			
		||||
	if (bzl != NULL) BIO_free(bzl);
 | 
			
		||||
#endif
 | 
			
		||||
    if (pass)
 | 
			
		||||
        OPENSSL_free(pass);
 | 
			
		||||
	if(pass) OPENSSL_free(pass);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
@@ -662,23 +693,25 @@ int set_hex(char *in, unsigned char *out, int size)
 | 
			
		||||
	unsigned char j;
 | 
			
		||||
 | 
			
		||||
	n=strlen(in);
 | 
			
		||||
    if (n > (size * 2)) {
 | 
			
		||||
	if (n > (size*2))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"hex string is too long\n");
 | 
			
		||||
		return(0);
 | 
			
		||||
		}
 | 
			
		||||
	memset(out,0,size);
 | 
			
		||||
    for (i = 0; i < n; i++) {
 | 
			
		||||
	for (i=0; i<n; i++)
 | 
			
		||||
		{
 | 
			
		||||
		j=(unsigned char)*in;
 | 
			
		||||
		*(in++)='\0';
 | 
			
		||||
        if (j == 0)
 | 
			
		||||
            break;
 | 
			
		||||
		if (j == 0) break;
 | 
			
		||||
		if ((j >= '0') && (j <= '9'))
 | 
			
		||||
			j-='0';
 | 
			
		||||
		else if ((j >= 'A') && (j <= 'F'))
 | 
			
		||||
			j=j-'A'+10;
 | 
			
		||||
		else if ((j >= 'a') && (j <= 'f'))
 | 
			
		||||
			j=j-'a'+10;
 | 
			
		||||
        else {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"non-hex digit\n");
 | 
			
		||||
			return(0);
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										222
									
								
								apps/engine.c
									
									
									
									
									
								
							
							
						
						
									
										222
									
								
								apps/engine.c
									
									
									
									
									
								
							@@ -1,7 +1,6 @@
 | 
			
		||||
/* apps/engine.c -*- mode: C; c-file-style: "eay" -*- */
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Richard Levitte <richard@levitte.org> for the OpenSSL project
 | 
			
		||||
 * 2000.
 | 
			
		||||
/* Written by Richard Levitte <richard@levitte.org> for the OpenSSL
 | 
			
		||||
 * project 2000.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2000 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -57,6 +56,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@@ -101,7 +101,8 @@ static int append_buf(char **buf, const char *s, int *size, int step)
 | 
			
		||||
	{
 | 
			
		||||
	int l = strlen(s);
 | 
			
		||||
 | 
			
		||||
    if (*buf == NULL) {
 | 
			
		||||
	if (*buf == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		*size = step;
 | 
			
		||||
		*buf = OPENSSL_malloc(*size);
 | 
			
		||||
		if (*buf == NULL)
 | 
			
		||||
@@ -112,7 +113,8 @@ static int append_buf(char **buf, const char *s, int *size, int step)
 | 
			
		||||
	if (**buf != '\0')
 | 
			
		||||
		l += 2;		/* ", " */
 | 
			
		||||
 | 
			
		||||
    if (strlen(*buf) + strlen(s) >= (unsigned int)*size) {
 | 
			
		||||
	if (strlen(*buf) + strlen(s) >= (unsigned int)*size)
 | 
			
		||||
		{
 | 
			
		||||
		*size += step;
 | 
			
		||||
		*buf = OPENSSL_realloc(*buf, *size);
 | 
			
		||||
		}
 | 
			
		||||
@@ -132,38 +134,41 @@ static int util_flags(BIO *bio_out, unsigned int flags, const char *indent)
 | 
			
		||||
	int started = 0, err = 0;
 | 
			
		||||
	/* Indent before displaying input flags */
 | 
			
		||||
	BIO_printf(bio_out, "%s%s(input flags): ", indent, indent);
 | 
			
		||||
    if (flags == 0) {
 | 
			
		||||
	if(flags == 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_out, "<no flags>\n");
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
    /*
 | 
			
		||||
     * If the object is internal, mark it in a way that shows instead of
 | 
			
		||||
     * having it part of all the other flags, even if it really is.
 | 
			
		||||
     */
 | 
			
		||||
    if (flags & ENGINE_CMD_FLAG_INTERNAL) {
 | 
			
		||||
        /* If the object is internal, mark it in a way that shows instead of
 | 
			
		||||
         * having it part of all the other flags, even if it really is. */
 | 
			
		||||
	if(flags & ENGINE_CMD_FLAG_INTERNAL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_out, "[Internal] ");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (flags & ENGINE_CMD_FLAG_NUMERIC) {
 | 
			
		||||
	if(flags & ENGINE_CMD_FLAG_NUMERIC)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_out, "NUMERIC");
 | 
			
		||||
		started = 1;
 | 
			
		||||
		}
 | 
			
		||||
    /*
 | 
			
		||||
     * Now we check that no combinations of the mutually exclusive NUMERIC,
 | 
			
		||||
	/* Now we check that no combinations of the mutually exclusive NUMERIC,
 | 
			
		||||
	 * STRING, and NO_INPUT flags have been used. Future flags that can be
 | 
			
		||||
	 * OR'd together with these would need to added after these to preserve
 | 
			
		||||
     * the testing logic.
 | 
			
		||||
     */
 | 
			
		||||
    if (flags & ENGINE_CMD_FLAG_STRING) {
 | 
			
		||||
        if (started) {
 | 
			
		||||
	 * the testing logic. */
 | 
			
		||||
	if(flags & ENGINE_CMD_FLAG_STRING)
 | 
			
		||||
		{
 | 
			
		||||
		if(started)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_out, "|");
 | 
			
		||||
			err = 1;
 | 
			
		||||
			}
 | 
			
		||||
		BIO_printf(bio_out, "STRING");
 | 
			
		||||
		started = 1;
 | 
			
		||||
		}
 | 
			
		||||
    if (flags & ENGINE_CMD_FLAG_NO_INPUT) {
 | 
			
		||||
        if (started) {
 | 
			
		||||
	if(flags & ENGINE_CMD_FLAG_NO_INPUT)
 | 
			
		||||
		{
 | 
			
		||||
		if(started)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_out, "|");
 | 
			
		||||
			err = 1;
 | 
			
		||||
			}
 | 
			
		||||
@@ -173,10 +178,11 @@ static int util_flags(BIO *bio_out, unsigned int flags, const char *indent)
 | 
			
		||||
	/* Check for unknown flags */
 | 
			
		||||
	flags = flags & ~ENGINE_CMD_FLAG_NUMERIC &
 | 
			
		||||
			~ENGINE_CMD_FLAG_STRING &
 | 
			
		||||
        ~ENGINE_CMD_FLAG_NO_INPUT & ~ENGINE_CMD_FLAG_INTERNAL;
 | 
			
		||||
    if (flags) {
 | 
			
		||||
        if (started)
 | 
			
		||||
            BIO_printf(bio_out, "|");
 | 
			
		||||
			~ENGINE_CMD_FLAG_NO_INPUT &
 | 
			
		||||
			~ENGINE_CMD_FLAG_INTERNAL;
 | 
			
		||||
	if(flags)
 | 
			
		||||
		{
 | 
			
		||||
		if(started) BIO_printf(bio_out, "|");
 | 
			
		||||
		BIO_printf(bio_out, "<0x%04X>", flags);
 | 
			
		||||
		}
 | 
			
		||||
	if(err)
 | 
			
		||||
@@ -185,8 +191,7 @@ static int util_flags(BIO *bio_out, unsigned int flags, const char *indent)
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int util_verbose(ENGINE *e, int verbose, BIO *bio_out,
 | 
			
		||||
                        const char *indent)
 | 
			
		||||
static int util_verbose(ENGINE *e, int verbose, BIO *bio_out, const char *indent)
 | 
			
		||||
	{
 | 
			
		||||
	static const int line_wrap = 78;
 | 
			
		||||
	int num;
 | 
			
		||||
@@ -198,7 +203,8 @@ static int util_verbose(ENGINE *e, int verbose, BIO *bio_out,
 | 
			
		||||
	STACK_OF(OPENSSL_STRING) *cmds = NULL;
 | 
			
		||||
	if(!ENGINE_ctrl(e, ENGINE_CTRL_HAS_CTRL_FUNCTION, 0, NULL, NULL) ||
 | 
			
		||||
			((num = ENGINE_ctrl(e, ENGINE_CTRL_GET_FIRST_CMD_TYPE,
 | 
			
		||||
                            0, NULL, NULL)) <= 0)) {
 | 
			
		||||
					0, NULL, NULL)) <= 0))
 | 
			
		||||
		{
 | 
			
		||||
#if 0
 | 
			
		||||
		BIO_printf(bio_out, "%s<no control commands>\n", indent);
 | 
			
		||||
#endif
 | 
			
		||||
@@ -215,7 +221,8 @@ static int util_verbose(ENGINE *e, int verbose, BIO *bio_out,
 | 
			
		||||
		if((flags = ENGINE_ctrl(e, ENGINE_CTRL_GET_CMD_FLAGS, num,
 | 
			
		||||
					NULL, NULL)) < 0)
 | 
			
		||||
			goto err;
 | 
			
		||||
        if (!(flags & ENGINE_CMD_FLAG_INTERNAL) || verbose >= 4) {
 | 
			
		||||
                if (!(flags & ENGINE_CMD_FLAG_INTERNAL) || verbose >= 4)
 | 
			
		||||
                        {
 | 
			
		||||
                        /* Get the command name */
 | 
			
		||||
                        if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_LEN_FROM_CMD, num,
 | 
			
		||||
                                NULL, NULL)) <= 0)
 | 
			
		||||
@@ -229,7 +236,8 @@ static int util_verbose(ENGINE *e, int verbose, BIO *bio_out,
 | 
			
		||||
                        if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_LEN_FROM_CMD, num,
 | 
			
		||||
                                NULL, NULL)) < 0)
 | 
			
		||||
                                goto err;
 | 
			
		||||
            if (len > 0) {
 | 
			
		||||
                        if(len > 0)
 | 
			
		||||
                                {
 | 
			
		||||
                                if((desc = OPENSSL_malloc(len + 1)) == NULL)
 | 
			
		||||
                                        goto err;
 | 
			
		||||
                                if(ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_FROM_CMD, num, desc,
 | 
			
		||||
@@ -243,45 +251,42 @@ static int util_verbose(ENGINE *e, int verbose, BIO *bio_out,
 | 
			
		||||
                        else
 | 
			
		||||
                                /* Otherwise prepend a ", " */
 | 
			
		||||
                                xpos += BIO_printf(bio_out, ", ");
 | 
			
		||||
            if (verbose == 1) {
 | 
			
		||||
                /*
 | 
			
		||||
                 * We're just listing names, comma-delimited
 | 
			
		||||
                 */
 | 
			
		||||
                        if(verbose == 1)
 | 
			
		||||
                                {
 | 
			
		||||
                                /* We're just listing names, comma-delimited */
 | 
			
		||||
                                if((xpos > (int)strlen(indent)) &&
 | 
			
		||||
                    (xpos + (int)strlen(name) > line_wrap)) {
 | 
			
		||||
					(xpos + (int)strlen(name) > line_wrap))
 | 
			
		||||
                                        {
 | 
			
		||||
                                        BIO_printf(bio_out, "\n");
 | 
			
		||||
                                        xpos = BIO_puts(bio_out, indent);
 | 
			
		||||
                                        }
 | 
			
		||||
                                xpos += BIO_printf(bio_out, "%s", name);
 | 
			
		||||
            } else {
 | 
			
		||||
                                }
 | 
			
		||||
                        else
 | 
			
		||||
                                {
 | 
			
		||||
                                /* We're listing names plus descriptions */
 | 
			
		||||
                                BIO_printf(bio_out, "%s: %s\n", name,
 | 
			
		||||
                                        (desc == NULL) ? "<no description>" : desc);
 | 
			
		||||
                                /* ... and sometimes input flags */
 | 
			
		||||
                if ((verbose >= 3) && !util_flags(bio_out, flags, indent))
 | 
			
		||||
                                if((verbose >= 3) && !util_flags(bio_out, flags,
 | 
			
		||||
                                        indent))
 | 
			
		||||
                                        goto err;
 | 
			
		||||
                                xpos = 0;
 | 
			
		||||
                                }
 | 
			
		||||
                        }
 | 
			
		||||
        OPENSSL_free(name);
 | 
			
		||||
        name = NULL;
 | 
			
		||||
        if (desc) {
 | 
			
		||||
            OPENSSL_free(desc);
 | 
			
		||||
            desc = NULL;
 | 
			
		||||
        }
 | 
			
		||||
		OPENSSL_free(name); name = NULL;
 | 
			
		||||
		if(desc) { OPENSSL_free(desc); desc = NULL; }
 | 
			
		||||
		/* Move to the next command */
 | 
			
		||||
        num = ENGINE_ctrl(e, ENGINE_CTRL_GET_NEXT_CMD_TYPE, num, NULL, NULL);
 | 
			
		||||
		num = ENGINE_ctrl(e, ENGINE_CTRL_GET_NEXT_CMD_TYPE,
 | 
			
		||||
					num, NULL, NULL);
 | 
			
		||||
		} while(num > 0);
 | 
			
		||||
	if(xpos > 0)
 | 
			
		||||
		BIO_printf(bio_out, "\n");
 | 
			
		||||
	ret = 1;
 | 
			
		||||
err:
 | 
			
		||||
    if (cmds)
 | 
			
		||||
        sk_OPENSSL_STRING_pop_free(cmds, identity);
 | 
			
		||||
    if (name)
 | 
			
		||||
        OPENSSL_free(name);
 | 
			
		||||
    if (desc)
 | 
			
		||||
        OPENSSL_free(desc);
 | 
			
		||||
	if(cmds) sk_OPENSSL_STRING_pop_free(cmds, identity);
 | 
			
		||||
	if(name) OPENSSL_free(name);
 | 
			
		||||
	if(desc) OPENSSL_free(desc);
 | 
			
		||||
	return ret;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -290,21 +295,27 @@ static void util_do_cmds(ENGINE *e, STACK_OF(OPENSSL_STRING) *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");
 | 
			
		||||
		return;
 | 
			
		||||
		}
 | 
			
		||||
    for (loop = 0; loop < num; loop++) {
 | 
			
		||||
	for(loop = 0; loop < num; loop++)
 | 
			
		||||
		{
 | 
			
		||||
		char buf[256];
 | 
			
		||||
		const char *cmd, *arg;
 | 
			
		||||
		cmd = sk_OPENSSL_STRING_value(cmds, loop);
 | 
			
		||||
		res = 1; /* assume success */
 | 
			
		||||
		/* Check if this command has no ":arg" */
 | 
			
		||||
        if ((arg = strstr(cmd, ":")) == NULL) {
 | 
			
		||||
		if((arg = strstr(cmd, ":")) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			if(!ENGINE_ctrl_cmd_string(e, cmd, NULL, 0))
 | 
			
		||||
				res = 0;
 | 
			
		||||
        } else {
 | 
			
		||||
            if ((int)(arg - cmd) > 254) {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if((int)(arg - cmd) > 254)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out,"[Error]: command name too long\n");
 | 
			
		||||
				return;
 | 
			
		||||
				}
 | 
			
		||||
@@ -317,7 +328,8 @@ static void util_do_cmds(ENGINE *e, STACK_OF(OPENSSL_STRING) *cmds,
 | 
			
		||||
			}
 | 
			
		||||
		if(res)
 | 
			
		||||
			BIO_printf(bio_out, "[Success]: %s\n", cmd);
 | 
			
		||||
        else {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_out, "[Failure]: %s\n", cmd);
 | 
			
		||||
			ERR_print_errors(bio_out);
 | 
			
		||||
			}
 | 
			
		||||
@@ -357,33 +369,40 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strncmp(*argv, "-v", 2) == 0) {
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if (strncmp(*argv,"-v",2) == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if(strspn(*argv + 1, "v") < strlen(*argv + 1))
 | 
			
		||||
				goto skip_arg_loop;
 | 
			
		||||
			if((verbose=strlen(*argv + 1)) > 4)
 | 
			
		||||
				goto skip_arg_loop;
 | 
			
		||||
        } else if (strcmp(*argv, "-c") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-c") == 0)
 | 
			
		||||
			list_cap=1;
 | 
			
		||||
        else if (strncmp(*argv, "-t", 2) == 0) {
 | 
			
		||||
		else if (strncmp(*argv,"-t",2) == 0)
 | 
			
		||||
			{
 | 
			
		||||
			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) {
 | 
			
		||||
            argc--;
 | 
			
		||||
            argv++;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-pre") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			argc--; argv++;
 | 
			
		||||
			if (argc == 0)
 | 
			
		||||
				goto skip_arg_loop;
 | 
			
		||||
			sk_OPENSSL_STRING_push(pre_cmds,*argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-post") == 0) {
 | 
			
		||||
            argc--;
 | 
			
		||||
            argv++;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-post") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			argc--; 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))
 | 
			
		||||
			goto skip_arg_loop;
 | 
			
		||||
		else
 | 
			
		||||
@@ -395,32 +414,37 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	badops = 0;
 | 
			
		||||
skip_arg_loop:
 | 
			
		||||
 | 
			
		||||
    if (badops) {
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
		for (pp=engine_usage; (*pp != NULL); pp++)
 | 
			
		||||
			BIO_printf(bio_err,"%s",*pp);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (sk_OPENSSL_STRING_num(engines) == 0) {
 | 
			
		||||
        for (e = ENGINE_get_first(); e != NULL; e = ENGINE_get_next(e)) {
 | 
			
		||||
	if (sk_OPENSSL_STRING_num(engines) == 0)
 | 
			
		||||
		{
 | 
			
		||||
		for(e = ENGINE_get_first(); e != NULL; e = ENGINE_get_next(e))
 | 
			
		||||
			{
 | 
			
		||||
			sk_OPENSSL_STRING_push(engines,(char *)ENGINE_get_id(e));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < sk_OPENSSL_STRING_num(engines); i++) {
 | 
			
		||||
	for (i=0; i<sk_OPENSSL_STRING_num(engines); i++)
 | 
			
		||||
		{
 | 
			
		||||
		const char *id = sk_OPENSSL_STRING_value(engines,i);
 | 
			
		||||
        if ((e = ENGINE_by_id(id)) != NULL) {
 | 
			
		||||
		if ((e = ENGINE_by_id(id)) != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			const char *name = ENGINE_get_name(e);
 | 
			
		||||
            /*
 | 
			
		||||
             * Do "id" first, then "name". Easier to auto-parse.
 | 
			
		||||
             */
 | 
			
		||||
			/* Do "id" first, then "name". Easier to auto-parse. */
 | 
			
		||||
			BIO_printf(bio_out, "(%s) %s\n", id, name);
 | 
			
		||||
			util_do_cmds(e, pre_cmds, bio_out, indent);
 | 
			
		||||
            if (strcmp(ENGINE_get_id(e), id) != 0) {
 | 
			
		||||
			if (strcmp(ENGINE_get_id(e), id) != 0)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out, "Loaded: (%s) %s\n",
 | 
			
		||||
					ENGINE_get_id(e), ENGINE_get_name(e));
 | 
			
		||||
				}
 | 
			
		||||
            if (list_cap) {
 | 
			
		||||
			if (list_cap)
 | 
			
		||||
				{
 | 
			
		||||
				int cap_size = 256;
 | 
			
		||||
				char *cap_buf = NULL;
 | 
			
		||||
				int k,n;
 | 
			
		||||
@@ -430,45 +454,49 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				ENGINE_PKEY_METHS_PTR fn_pk;
 | 
			
		||||
 | 
			
		||||
				if (ENGINE_get_RSA(e) != NULL
 | 
			
		||||
                    && !append_buf(&cap_buf, "RSA", &cap_size, 256))
 | 
			
		||||
					&& !append_buf(&cap_buf, "RSA",
 | 
			
		||||
						&cap_size, 256))
 | 
			
		||||
					goto end;
 | 
			
		||||
				if (ENGINE_get_DSA(e) != NULL
 | 
			
		||||
                    && !append_buf(&cap_buf, "DSA", &cap_size, 256))
 | 
			
		||||
					&& !append_buf(&cap_buf, "DSA",
 | 
			
		||||
						&cap_size, 256))
 | 
			
		||||
					goto end;
 | 
			
		||||
				if (ENGINE_get_DH(e) != NULL
 | 
			
		||||
                    && !append_buf(&cap_buf, "DH", &cap_size, 256))
 | 
			
		||||
					&& !append_buf(&cap_buf, "DH",
 | 
			
		||||
						&cap_size, 256))
 | 
			
		||||
					goto end;
 | 
			
		||||
				if (ENGINE_get_RAND(e) != NULL
 | 
			
		||||
                    && !append_buf(&cap_buf, "RAND", &cap_size, 256))
 | 
			
		||||
					&& !append_buf(&cap_buf, "RAND",
 | 
			
		||||
						&cap_size, 256))
 | 
			
		||||
					goto end;
 | 
			
		||||
 | 
			
		||||
				fn_c = ENGINE_get_ciphers(e);
 | 
			
		||||
                if (!fn_c)
 | 
			
		||||
                    goto skip_ciphers;
 | 
			
		||||
				if(!fn_c) goto skip_ciphers;
 | 
			
		||||
				n = fn_c(e, NULL, &nids, 0);
 | 
			
		||||
				for(k=0 ; k < n ; ++k)
 | 
			
		||||
					if(!append_buf(&cap_buf,
 | 
			
		||||
                                    OBJ_nid2sn(nids[k]), &cap_size, 256))
 | 
			
		||||
						       OBJ_nid2sn(nids[k]),
 | 
			
		||||
						       &cap_size, 256))
 | 
			
		||||
						goto end;
 | 
			
		||||
 | 
			
		||||
skip_ciphers:
 | 
			
		||||
				fn_d = ENGINE_get_digests(e);
 | 
			
		||||
                if (!fn_d)
 | 
			
		||||
                    goto skip_digests;
 | 
			
		||||
				if(!fn_d) goto skip_digests;
 | 
			
		||||
				n = fn_d(e, NULL, &nids, 0);
 | 
			
		||||
				for(k=0 ; k < n ; ++k)
 | 
			
		||||
					if(!append_buf(&cap_buf,
 | 
			
		||||
                                    OBJ_nid2sn(nids[k]), &cap_size, 256))
 | 
			
		||||
						       OBJ_nid2sn(nids[k]),
 | 
			
		||||
						       &cap_size, 256))
 | 
			
		||||
						goto end;
 | 
			
		||||
 | 
			
		||||
skip_digests:
 | 
			
		||||
				fn_pk = ENGINE_get_pkey_meths(e);
 | 
			
		||||
                if (!fn_pk)
 | 
			
		||||
                    goto skip_pmeths;
 | 
			
		||||
				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))
 | 
			
		||||
						       OBJ_nid2sn(nids[k]),
 | 
			
		||||
						       &cap_size, 256))
 | 
			
		||||
						goto end;
 | 
			
		||||
skip_pmeths:
 | 
			
		||||
				if (cap_buf && (*cap_buf != '\0'))
 | 
			
		||||
@@ -476,13 +504,17 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
				OPENSSL_free(cap_buf);
 | 
			
		||||
				}
 | 
			
		||||
            if (test_avail) {
 | 
			
		||||
			if(test_avail)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out, "%s", indent);
 | 
			
		||||
                if (ENGINE_init(e)) {
 | 
			
		||||
				if (ENGINE_init(e))
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_out, "[ available ]\n");
 | 
			
		||||
					util_do_cmds(e, post_cmds, bio_out, indent);
 | 
			
		||||
					ENGINE_finish(e);
 | 
			
		||||
                } else {
 | 
			
		||||
					}
 | 
			
		||||
				else
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_out, "[ unavailable ]\n");
 | 
			
		||||
					if(test_avail_noise)
 | 
			
		||||
						ERR_print_errors_fp(stdout);
 | 
			
		||||
@@ -492,7 +524,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			if((verbose > 0) && !util_verbose(e, verbose, bio_out, indent))
 | 
			
		||||
				goto end;
 | 
			
		||||
			ENGINE_free(e);
 | 
			
		||||
        } else
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -503,8 +536,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	sk_OPENSSL_STRING_pop_free(engines, identity);
 | 
			
		||||
	sk_OPENSSL_STRING_pop_free(pre_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();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -84,33 +84,40 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	SSL_load_error_strings();
 | 
			
		||||
 | 
			
		||||
    if ((argc > 1) && (strcmp(argv[1], "-stats") == 0)) {
 | 
			
		||||
	if ((argc > 1) && (strcmp(argv[1],"-stats") == 0))
 | 
			
		||||
		{
 | 
			
		||||
		BIO *out=NULL;
 | 
			
		||||
 | 
			
		||||
		out=BIO_new(BIO_s_file());
 | 
			
		||||
        if ((out != NULL) && BIO_set_fp(out, stdout, BIO_NOCLOSE)) {
 | 
			
		||||
		if ((out != NULL) && BIO_set_fp(out,stdout,BIO_NOCLOSE))
 | 
			
		||||
			{
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
            lh_ERR_STRING_DATA_node_stats_bio(ERR_get_string_table(), out);
 | 
			
		||||
            lh_ERR_STRING_DATA_stats_bio(ERR_get_string_table(), out);
 | 
			
		||||
            lh_ERR_STRING_DATA_node_usage_stats_bio(ERR_get_string_table(),
 | 
			
		||||
			lh_ERR_STRING_DATA_node_stats_bio(
 | 
			
		||||
						  ERR_get_string_table(), out);
 | 
			
		||||
			lh_ERR_STRING_DATA_stats_bio(ERR_get_string_table(),
 | 
			
		||||
						     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--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    for (i = 1; i < argc; i++) {
 | 
			
		||||
        if (sscanf(argv[i], "%lx", &l)) {
 | 
			
		||||
	for (i=1; i<argc; i++)
 | 
			
		||||
		{
 | 
			
		||||
		if (sscanf(argv[i],"%lx",&l))
 | 
			
		||||
			{
 | 
			
		||||
			ERR_error_string_n(l, buf, sizeof buf);
 | 
			
		||||
			printf("%s\n",buf);
 | 
			
		||||
        } else {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			printf("%s: bad error code\n",argv[i]);
 | 
			
		||||
			printf("usage: errstr [-stats] <errno> ...\n");
 | 
			
		||||
			ret++;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										99
									
								
								apps/gendh.c
									
									
									
									
									
								
							
							
						
						
									
										99
									
								
								apps/gendh.c
									
									
									
									
									
								
							@@ -58,10 +58,8 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
/*
 | 
			
		||||
 * Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code
 | 
			
		||||
 */
 | 
			
		||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code */
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
@@ -113,66 +111,67 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	argv++;
 | 
			
		||||
	argc--;
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (argc <= 0)
 | 
			
		||||
            break;
 | 
			
		||||
        if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (argc <= 0) break;
 | 
			
		||||
		if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-2") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-2") == 0)
 | 
			
		||||
			g=2;
 | 
			
		||||
/*-     else if (strcmp(*argv,"-3") == 0)
 | 
			
		||||
	/*	else if (strcmp(*argv,"-3") == 0)
 | 
			
		||||
			g=3; */
 | 
			
		||||
		else if (strcmp(*argv,"-5") == 0)
 | 
			
		||||
			g=5;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
        else if (strcmp(*argv, "-rand") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
        } else
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			break;
 | 
			
		||||
		argv++;
 | 
			
		||||
		argc--;
 | 
			
		||||
		}
 | 
			
		||||
    if ((argc >= 1) && ((sscanf(*argv, "%d", &num) == 0) || (num < 0))) {
 | 
			
		||||
	if ((argc >= 1) && ((sscanf(*argv,"%d",&num) == 0) || (num < 0)))
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"usage: gendh [args] [numbits]\n");
 | 
			
		||||
		BIO_printf(bio_err," -out file - output the key to 'file\n");
 | 
			
		||||
		BIO_printf(bio_err," -2        - use 2 as the generator value\n");
 | 
			
		||||
        /*
 | 
			
		||||
         * BIO_printf(bio_err," -3 - use 3 as the generator value\n");
 | 
			
		||||
         */
 | 
			
		||||
	/*	BIO_printf(bio_err," -3        - use 3 as the generator value\n"); */
 | 
			
		||||
		BIO_printf(bio_err," -5        - use 5 as the generator value\n");
 | 
			
		||||
#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
 | 
			
		||||
        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," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,"           - load the file (or the files in the directory) into\n");
 | 
			
		||||
		BIO_printf(bio_err,"             the random number generator\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
    if (out == NULL) {
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
@@ -180,28 +179,28 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) {
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
	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");
 | 
			
		||||
		}
 | 
			
		||||
	if (inrand != NULL)
 | 
			
		||||
		BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
			app_RAND_load_files(inrand));
 | 
			
		||||
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               "Generating DH parameters, %d bit long safe prime, generator %d\n",
 | 
			
		||||
               num, g);
 | 
			
		||||
	BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g);
 | 
			
		||||
	BIO_printf(bio_err,"This is going to take a long time\n");
 | 
			
		||||
 | 
			
		||||
    if (((dh = DH_new()) == NULL)
 | 
			
		||||
        || !DH_generate_parameters_ex(dh, num, g, &cb))
 | 
			
		||||
	if(((dh = DH_new()) == NULL) || !DH_generate_parameters_ex(dh, num, g, &cb))
 | 
			
		||||
		goto end;
 | 
			
		||||
		
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
@@ -212,10 +211,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
end:
 | 
			
		||||
	if (ret != 0)
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (dh != NULL)
 | 
			
		||||
        DH_free(dh);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dh != NULL) DH_free(dh);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
@@ -224,14 +221,10 @@ static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
 | 
			
		||||
    if (p == 0)
 | 
			
		||||
        c = '.';
 | 
			
		||||
    if (p == 1)
 | 
			
		||||
        c = '+';
 | 
			
		||||
    if (p == 2)
 | 
			
		||||
        c = '*';
 | 
			
		||||
    if (p == 3)
 | 
			
		||||
        c = '\n';
 | 
			
		||||
	if (p == 0) c='.';
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write(cb->arg,&c,1);
 | 
			
		||||
	(void)BIO_flush(cb->arg);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										118
									
								
								apps/gendsa.c
									
									
									
									
									
								
							
							
						
						
									
										118
									
								
								apps/gendsa.c
									
									
									
									
									
								
							@@ -100,30 +100,32 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	argv++;
 | 
			
		||||
	argc--;
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (argc <= 0)
 | 
			
		||||
            break;
 | 
			
		||||
        if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (argc <= 0) break;
 | 
			
		||||
		if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passout") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
        else if (strcmp(*argv, "-rand") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-") == 0)
 | 
			
		||||
			goto bad;
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
		else if (strcmp(*argv,"-des") == 0)
 | 
			
		||||
@@ -155,57 +157,51 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		else if (strcmp(*argv,"-camellia256") == 0)
 | 
			
		||||
			enc=EVP_camellia_256_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
        else if (**argv != '-' && dsaparams == NULL) {
 | 
			
		||||
		else if (**argv != '-' && dsaparams == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			dsaparams = *argv;
 | 
			
		||||
        } else
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			goto bad;
 | 
			
		||||
		argv++;
 | 
			
		||||
		argc--;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (dsaparams == NULL) {
 | 
			
		||||
	if (dsaparams == NULL)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"usage: gendsa [args] dsaparam-file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out file - output the key to 'file'\n");
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -des      - encrypt the generated key with DES in cbc mode\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -des3     - encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
 | 
			
		||||
		BIO_printf(bio_err," -des      - encrypt the generated key with DES in cbc mode\n");
 | 
			
		||||
		BIO_printf(bio_err," -des3     - encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
 | 
			
		||||
#endif
 | 
			
		||||
#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
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		BIO_printf(bio_err," -seed\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc seed\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc seed\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		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");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
#endif
 | 
			
		||||
#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
 | 
			
		||||
        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," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,"           - load the file (or the files in the directory) into\n");
 | 
			
		||||
		BIO_printf(bio_err,"             the random number generator\n");
 | 
			
		||||
		BIO_printf(bio_err," dsaparam-file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "           - a DSA parameter file as generated by the dsaparam command\n");
 | 
			
		||||
		BIO_printf(bio_err,"           - a DSA parameter file as generated by the dsaparam command\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
@@ -215,13 +211,16 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
    if (!(BIO_read_filename(in, dsaparams))) {
 | 
			
		||||
	if (!(BIO_read_filename(in,dsaparams)))
 | 
			
		||||
		{
 | 
			
		||||
		perror(dsaparams);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if ((dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL)) == NULL) {
 | 
			
		||||
	if ((dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL)) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load DSA parameter file\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -229,10 +228,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	in = NULL;
 | 
			
		||||
		
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
    if (out == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
	if (out == NULL) goto end;
 | 
			
		||||
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
@@ -240,24 +239,27 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) {
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
	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");
 | 
			
		||||
		}
 | 
			
		||||
	if (inrand != NULL)
 | 
			
		||||
		BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
			app_RAND_load_files(inrand));
 | 
			
		||||
 | 
			
		||||
    BIO_printf(bio_err, "Generating DSA key, %d bits\n", BN_num_bits(dsa->p));
 | 
			
		||||
    if (!DSA_generate_key(dsa))
 | 
			
		||||
        goto end;
 | 
			
		||||
	BIO_printf(bio_err,"Generating DSA key, %d bits\n",
 | 
			
		||||
							BN_num_bits(dsa->p));
 | 
			
		||||
	if (!DSA_generate_key(dsa)) goto end;
 | 
			
		||||
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 | 
			
		||||
@@ -267,14 +269,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
end:
 | 
			
		||||
	if (ret != 0)
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (dsa != NULL)
 | 
			
		||||
        DSA_free(dsa);
 | 
			
		||||
    if (passout)
 | 
			
		||||
        OPENSSL_free(passout);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dsa != NULL) DSA_free(dsa);
 | 
			
		||||
	if(passout) OPENSSL_free(passout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										175
									
								
								apps/genpkey.c
									
									
									
									
									
								
							
							
						
						
									
										175
									
								
								apps/genpkey.c
									
									
									
									
									
								
							@@ -1,7 +1,6 @@
 | 
			
		||||
/* apps/genpkey.c */
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 2006
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 2006
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2006 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -102,26 +101,32 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	OpenSSL_add_all_algorithms();
 | 
			
		||||
	args = argv + 1;
 | 
			
		||||
    while (!badarg && *args && *args[0] == '-') {
 | 
			
		||||
        if (!strcmp(*args, "-outform")) {
 | 
			
		||||
            if (args[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;
 | 
			
		||||
				}
 | 
			
		||||
			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) {
 | 
			
		||||
		else if (strcmp(*args,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto bad;
 | 
			
		||||
        		e = setup_engine(bio_err, *(++args), 0);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
        else if (!strcmp(*args, "-paramfile")) {
 | 
			
		||||
		else if (!strcmp (*args, "-paramfile"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto bad;
 | 
			
		||||
			args++;
 | 
			
		||||
@@ -129,38 +134,54 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			if (!init_keygen_file(bio_err, &ctx, *args, e))
 | 
			
		||||
				goto end;
 | 
			
		||||
        } else if (!strcmp(*args, "-out")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-out"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outfile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (strcmp(*args, "-algorithm") == 0) {
 | 
			
		||||
				}
 | 
			
		||||
			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) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-pkeyopt") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto bad;
 | 
			
		||||
            if (!ctx) {
 | 
			
		||||
			if (!ctx)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_puts(bio_err, "No keytype specified\n");
 | 
			
		||||
				goto bad;
 | 
			
		||||
            } else if (pkey_ctrl_string(ctx, *(++args)) <= 0) {
 | 
			
		||||
				}
 | 
			
		||||
			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) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-genparam") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (ctx)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			do_param = 1;
 | 
			
		||||
        } else if (strcmp(*args, "-text") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
        else {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			cipher = EVP_get_cipherbyname(*args + 1);
 | 
			
		||||
            if (!cipher) {
 | 
			
		||||
                BIO_printf(bio_err, "Unknown cipher %s\n", *args + 1);
 | 
			
		||||
			if (!cipher)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Unknown cipher %s\n",
 | 
			
		||||
								*args + 1);
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
				}
 | 
			
		||||
			if (do_param == 1)
 | 
			
		||||
@@ -172,45 +193,45 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
		badarg = 1;
 | 
			
		||||
 | 
			
		||||
    if (badarg) {
 | 
			
		||||
	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");
 | 
			
		||||
		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");
 | 
			
		||||
		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"
 | 
			
		||||
		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, "-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");
 | 
			
		||||
		BIO_printf(bio_err, "NB: options order may be important!  See the manual page.\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (!app_passwd(bio_err, passarg, NULL, &pass, NULL)) {
 | 
			
		||||
	if (!app_passwd(bio_err, passarg, NULL, &pass, NULL))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(bio_err, "Error getting password\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "wb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open output file %s\n", outfile);
 | 
			
		||||
	if (outfile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(out = BIO_new_file (outfile, "wb")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    } else {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		out = BIO_new_fp (stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
@@ -223,14 +244,19 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	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) {
 | 
			
		||||
	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) {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (EVP_PKEY_keygen(ctx, &pkey) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_puts(bio_err, "Error generating key\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -240,26 +266,31 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	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);
 | 
			
		||||
		rv = PEM_write_bio_PrivateKey(out, pkey, cipher, NULL, 0,
 | 
			
		||||
								NULL, pass);
 | 
			
		||||
	else if (outformat == FORMAT_ASN1)
 | 
			
		||||
		rv = i2d_PrivateKey_bio(out, pkey);
 | 
			
		||||
    else {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (rv <= 0) {
 | 
			
		||||
	if (rv <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(bio_err, "Error writing key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (text) {
 | 
			
		||||
	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) {
 | 
			
		||||
		if (rv <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_puts(bio_err, "Error printing key\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			}
 | 
			
		||||
@@ -287,13 +318,15 @@ static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
 | 
			
		||||
	BIO *pbio;
 | 
			
		||||
	EVP_PKEY *pkey = NULL;
 | 
			
		||||
	EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
    if (*pctx) {
 | 
			
		||||
	if (*pctx)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(err, "Parameters already set!\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	pbio = BIO_new_file(file, "r");
 | 
			
		||||
    if (!pbio) {
 | 
			
		||||
	if (!pbio)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(err, "Can't open parameter file %s\n", file);
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
@@ -301,7 +334,8 @@ static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
 | 
			
		||||
	pkey = PEM_read_bio_Parameters(pbio, NULL);
 | 
			
		||||
	BIO_free(pbio);
 | 
			
		||||
 | 
			
		||||
    if (!pkey) {
 | 
			
		||||
	if (!pkey)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error reading parameter file %s\n", file);
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
@@ -334,7 +368,8 @@ int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
 | 
			
		||||
	ENGINE *tmpeng = NULL;
 | 
			
		||||
	int pkey_id;
 | 
			
		||||
 | 
			
		||||
    if (*pctx) {
 | 
			
		||||
	if (*pctx)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(err, "Algorithm already set!\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
@@ -346,7 +381,8 @@ int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
 | 
			
		||||
		ameth = ENGINE_get_pkey_asn1_meth_str(e, algname, -1);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (!ameth) {
 | 
			
		||||
	if (!ameth)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Algorithm %s not found\n", algname);
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
@@ -362,10 +398,13 @@ int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
 | 
			
		||||
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
		goto err;
 | 
			
		||||
    if (do_param) {
 | 
			
		||||
	if (do_param)
 | 
			
		||||
		{
 | 
			
		||||
		if (EVP_PKEY_paramgen_init(ctx) <= 0)
 | 
			
		||||
			goto err;
 | 
			
		||||
    } else {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (EVP_PKEY_keygen_init(ctx) <= 0)
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
@@ -388,14 +427,10 @@ static int genpkey_cb(EVP_PKEY_CTX *ctx)
 | 
			
		||||
	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';
 | 
			
		||||
	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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										143
									
								
								apps/genrsa.c
									
									
									
									
									
								
							
							
						
						
									
										143
									
								
								apps/genrsa.c
									
									
									
									
									
								
							@@ -57,10 +57,8 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
/*
 | 
			
		||||
 * Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code
 | 
			
		||||
 */
 | 
			
		||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code */
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
@@ -95,6 +93,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	int non_fips_allow = 0;
 | 
			
		||||
	int i,num=DEFBITS;
 | 
			
		||||
	long l;
 | 
			
		||||
	const EVP_CIPHER *enc=NULL;
 | 
			
		||||
@@ -109,8 +108,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	BIGNUM *bn = BN_new();
 | 
			
		||||
	RSA *rsa = NULL;
 | 
			
		||||
 | 
			
		||||
    if (!bn)
 | 
			
		||||
        goto err;
 | 
			
		||||
	if(!bn) goto err;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
	BN_GENCB_set(&cb, genrsa_cb, bio_err);
 | 
			
		||||
@@ -121,34 +119,36 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto err;
 | 
			
		||||
    if ((out = BIO_new(BIO_s_file())) == NULL) {
 | 
			
		||||
	if ((out=BIO_new(BIO_s_file())) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to create BIO for output\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	argv++;
 | 
			
		||||
	argc--;
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (argc <= 0)
 | 
			
		||||
            break;
 | 
			
		||||
        if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (argc <= 0) break;
 | 
			
		||||
		if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-3") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-3") == 0)
 | 
			
		||||
			f4=3;
 | 
			
		||||
		else if (strcmp(*argv,"-F4") == 0 || strcmp(*argv,"-f4") == 0)
 | 
			
		||||
			f4=RSA_F4;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
        else if (strcmp(*argv, "-rand") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
@@ -181,55 +181,48 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		else if (strcmp(*argv,"-camellia256") == 0)
 | 
			
		||||
			enc=EVP_camellia_256_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
        else if (strcmp(*argv, "-passout") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
        } else
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-non-fips-allow") == 0)
 | 
			
		||||
			non_fips_allow = 1;
 | 
			
		||||
		else
 | 
			
		||||
			break;
 | 
			
		||||
		argv++;
 | 
			
		||||
		argc--;
 | 
			
		||||
		}
 | 
			
		||||
    if ((argc >= 1) && ((sscanf(*argv, "%d", &num) == 0) || (num < 0))) {
 | 
			
		||||
	if ((argc >= 1) && ((sscanf(*argv,"%d",&num) == 0) || (num < 0)))
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"usage: genrsa [args] [numbits]\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -des            encrypt the generated key with DES in cbc mode\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -des3           encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
 | 
			
		||||
		BIO_printf(bio_err," -des            encrypt the generated key with DES in cbc mode\n");
 | 
			
		||||
		BIO_printf(bio_err," -des3           encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
 | 
			
		||||
#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
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		BIO_printf(bio_err," -seed\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc seed\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc seed\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		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");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
#endif
 | 
			
		||||
		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,
 | 
			
		||||
                   " -f4             use F4 (0x10001) for the E value\n");
 | 
			
		||||
		BIO_printf(bio_err," -passout arg    output file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err," -f4             use F4 (0x10001) for the E value\n");
 | 
			
		||||
		BIO_printf(bio_err," -3              use 3 for the E value\n");
 | 
			
		||||
#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
 | 
			
		||||
        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," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,"                 load the file (or the files in the directory) into\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 the random number generator\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
@@ -240,11 +233,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
@@ -252,17 +247,20 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
 | 
			
		||||
        && !RAND_status()) {
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
		&& !RAND_status())
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
		}
 | 
			
		||||
	if (inrand != NULL)
 | 
			
		||||
		BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
@@ -278,17 +276,19 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if (!rsa)
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	if (non_fips_allow)
 | 
			
		||||
		rsa->flags |= RSA_FLAG_NON_FIPS_ALLOW;
 | 
			
		||||
 | 
			
		||||
	if(!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, &cb))
 | 
			
		||||
		goto err;
 | 
			
		||||
		
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * We need to do the following for when the base number size is < long,
 | 
			
		||||
     * esp windows 3.1 :-(.
 | 
			
		||||
     */
 | 
			
		||||
	/* We need to do the following for when the base number size is <
 | 
			
		||||
	 * long, esp windows 3.1 :-(. */
 | 
			
		||||
	l=0L;
 | 
			
		||||
    for (i = 0; i < rsa->e->top; i++) {
 | 
			
		||||
	for (i=0; i<rsa->e->top; i++)
 | 
			
		||||
		{
 | 
			
		||||
#ifndef SIXTY_FOUR_BIT
 | 
			
		||||
		l<<=BN_BITS4;
 | 
			
		||||
		l<<=BN_BITS4;
 | 
			
		||||
@@ -301,21 +301,16 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	cb_data.password = passout;
 | 
			
		||||
	cb_data.prompt_info = outfile;
 | 
			
		||||
	if (!PEM_write_bio_RSAPrivateKey(out,rsa,enc,NULL,0,
 | 
			
		||||
                                         (pem_password_cb *)password_callback,
 | 
			
		||||
                                         &cb_data))
 | 
			
		||||
		(pem_password_cb *)password_callback,&cb_data))
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
err:
 | 
			
		||||
    if (bn)
 | 
			
		||||
        BN_free(bn);
 | 
			
		||||
    if (rsa)
 | 
			
		||||
        RSA_free(rsa);
 | 
			
		||||
    if (out)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (passout)
 | 
			
		||||
        OPENSSL_free(passout);
 | 
			
		||||
	if (bn) BN_free(bn);
 | 
			
		||||
	if (rsa) RSA_free(rsa);
 | 
			
		||||
	if (out) BIO_free_all(out);
 | 
			
		||||
	if(passout) OPENSSL_free(passout);
 | 
			
		||||
	if (ret != 0)
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
@@ -326,14 +321,10 @@ static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
 | 
			
		||||
    if (p == 0)
 | 
			
		||||
        c = '.';
 | 
			
		||||
    if (p == 1)
 | 
			
		||||
        c = '+';
 | 
			
		||||
    if (p == 2)
 | 
			
		||||
        c = '*';
 | 
			
		||||
    if (p == 3)
 | 
			
		||||
        c = '\n';
 | 
			
		||||
	if (p == 0) c='.';
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write(cb->arg,&c,1);
 | 
			
		||||
	(void)BIO_flush(cb->arg);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
 
 | 
			
		||||
@@ -184,7 +184,7 @@ $ LIB_OPENSSL = "VERIFY,ASN1PARS,REQ,DGST,DH,DHPARAM,ENC,PASSWD,GENDH,ERRSTR,"+-
 | 
			
		||||
	      	"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"
 | 
			
		||||
	      	"SPKAC,SMIME,CMS,RAND,ENGINE,OCSP,PRIME,TS,SRP"
 | 
			
		||||
$!
 | 
			
		||||
$ LIB_OPENSSL = LIB_OPENSSL+ ",VMS_DECC_INIT"
 | 
			
		||||
$!
 | 
			
		||||
@@ -773,12 +773,9 @@ $ CCDEFS = "MONOLITH"
 | 
			
		||||
$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
 | 
			
		||||
$ CCEXTRAFLAGS = ""
 | 
			
		||||
$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
 | 
			
		||||
$ CCDISABLEWARNINGS = "" !!! "MAYLOSEDATA3" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
 | 
			
		||||
$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. ""
 | 
			
		||||
$ THEN
 | 
			
		||||
$     IF CCDISABLEWARNINGS .NES. "" THEN CCDISABLEWARNINGS = CCDISABLEWARNINGS + ","
 | 
			
		||||
$     CCDISABLEWARNINGS = CCDISABLEWARNINGS + USER_CCDISABLEWARNINGS
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$ CCDISABLEWARNINGS = "" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
 | 
			
		||||
$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
 | 
			
		||||
	CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If We Have A ZLIB Option.
 | 
			
		||||
$!
 | 
			
		||||
@@ -1067,18 +1064,6 @@ $! Finish up the definition of CC.
 | 
			
		||||
$!
 | 
			
		||||
$ IF COMPILER .EQS. "DECC"
 | 
			
		||||
$ THEN
 | 
			
		||||
$!  Not all compiler versions support MAYLOSEDATA3.
 | 
			
		||||
$   OPT_TEST = "MAYLOSEDATA3"
 | 
			
		||||
$   DEFINE /USER_MODE SYS$ERROR NL:
 | 
			
		||||
$   DEFINE /USER_MODE SYS$OUTPUT NL:
 | 
			
		||||
$   'CC' /NOCROSS_REFERENCE /NOLIST /NOOBJECT -
 | 
			
		||||
      /WARNINGS = DISABLE = ('OPT_TEST', EMPTYFILE) NL:
 | 
			
		||||
$   IF ($SEVERITY)
 | 
			
		||||
$   THEN
 | 
			
		||||
$     IF CCDISABLEWARNINGS .NES. "" THEN -
 | 
			
		||||
        CCDISABLEWARNINGS = CCDISABLEWARNINGS+ ","
 | 
			
		||||
$     CCDISABLEWARNINGS = CCDISABLEWARNINGS+ OPT_TEST
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$   IF CCDISABLEWARNINGS .NES. ""
 | 
			
		||||
$   THEN
 | 
			
		||||
$     CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										33
									
								
								apps/nseq.c
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								apps/nseq.c
									
									
									
									
									
								
							@@ -1,7 +1,6 @@
 | 
			
		||||
/* nseq.c */
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 1999.
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 1999.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -77,27 +76,22 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	NETSCAPE_CERT_SEQUENCE *seq = NULL;
 | 
			
		||||
	int i, ret = 1;
 | 
			
		||||
	int badarg = 0;
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
	if (bio_err == NULL) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	args = argv + 1;
 | 
			
		||||
	while (!badarg && *args && *args[0] == '-') {
 | 
			
		||||
        if (!strcmp(*args, "-toseq"))
 | 
			
		||||
            toseq = 1;
 | 
			
		||||
		if (!strcmp (*args, "-toseq")) toseq = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-in")) {
 | 
			
		||||
			if (args[1]) {
 | 
			
		||||
				args++;
 | 
			
		||||
				infile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
			} else badarg = 1;
 | 
			
		||||
		} else if (!strcmp (*args, "-out")) {
 | 
			
		||||
			if (args[1]) {
 | 
			
		||||
				args++;
 | 
			
		||||
				outfile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else
 | 
			
		||||
            badarg = 1;
 | 
			
		||||
			} else badarg = 1;
 | 
			
		||||
		} else badarg = 1;
 | 
			
		||||
		args++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -113,15 +107,16 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	if (infile) {
 | 
			
		||||
		if (!(in = BIO_new_file (infile, "r"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open input file %s\n", infile);
 | 
			
		||||
			BIO_printf (bio_err,
 | 
			
		||||
				 "Can't open input file %s\n", infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
    } else
 | 
			
		||||
        in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
	} 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);
 | 
			
		||||
			BIO_printf (bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
@@ -139,7 +134,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		while((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL))) 
 | 
			
		||||
		    sk_X509_push(seq->certs,x509);
 | 
			
		||||
 | 
			
		||||
        if (!sk_X509_num(seq->certs)) {
 | 
			
		||||
		if(!sk_X509_num(seq->certs))
 | 
			
		||||
		{
 | 
			
		||||
			BIO_printf (bio_err, "Error reading certs file %s\n", infile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -168,3 +164,4 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										945
									
								
								apps/ocsp.c
									
									
									
									
									
								
							
							
						
						
									
										945
									
								
								apps/ocsp.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -145,7 +145,7 @@ localityName			= Locality Name (eg, city)
 | 
			
		||||
organizationalUnitName		= Organizational Unit Name (eg, section)
 | 
			
		||||
#organizationalUnitName_default	=
 | 
			
		||||
 | 
			
		||||
commonName			= Common Name (e.g. server FQDN or YOUR name)
 | 
			
		||||
commonName			= Common Name (eg, YOUR name)
 | 
			
		||||
commonName_max			= 64
 | 
			
		||||
 | 
			
		||||
emailAddress			= Email Address
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										267
									
								
								apps/openssl.c
									
									
									
									
									
								
							
							
						
						
									
										267
									
								
								apps/openssl.c
									
									
									
									
									
								
							@@ -109,11 +109,11 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#define OPENSSL_C               /* tells apps.h to use complete
 | 
			
		||||
                                 * apps_startup() */
 | 
			
		||||
#define OPENSSL_C /* tells apps.h to use complete apps_startup() */
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/crypto.h>
 | 
			
		||||
@@ -125,18 +125,18 @@
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#include <openssl/engine.h>
 | 
			
		||||
#endif
 | 
			
		||||
#define USE_SOCKETS             /* needed for the _O_BINARY defs in the MS
 | 
			
		||||
                                 * world */
 | 
			
		||||
#define USE_SOCKETS /* needed for the _O_BINARY defs in the MS world */
 | 
			
		||||
#include "progs.h"
 | 
			
		||||
#include "s_apps.h"
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#ifdef OPENSSL_FIPS
 | 
			
		||||
#include <openssl/fips.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The LHASH callbacks ("hash" & "cmp") have been replaced by functions with
 | 
			
		||||
 * the base prototypes (we cast each variable inside the function to the
 | 
			
		||||
 * required type of "FUNCTION*"). This removes the necessity for
 | 
			
		||||
 * macro-generated wrapper functions.
 | 
			
		||||
 */
 | 
			
		||||
/* The LHASH callbacks ("hash" & "cmp") have been replaced by functions with the
 | 
			
		||||
 * base prototypes (we cast each variable inside the function to the required
 | 
			
		||||
 * type of "FUNCTION*"). This removes the necessity for macro-generated wrapper
 | 
			
		||||
 * functions. */
 | 
			
		||||
 | 
			
		||||
static LHASH_OF(FUNCTION) *prog_init(void );
 | 
			
		||||
static int do_cmd(LHASH_OF(FUNCTION) *prog,int argc,char *argv[]);
 | 
			
		||||
@@ -151,6 +151,7 @@ CONF *config = NULL;
 | 
			
		||||
BIO *bio_err=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void lock_dbg_cb(int mode, int type, const char *file, int line)
 | 
			
		||||
	{
 | 
			
		||||
	static int modes[CRYPTO_NUM_LOCKS]; /* = {0, 0, ... } */
 | 
			
		||||
@@ -158,49 +159,58 @@ static void lock_dbg_cb(int mode, int type, const char *file, int line)
 | 
			
		||||
	int rw;
 | 
			
		||||
	
 | 
			
		||||
	rw = mode & (CRYPTO_READ|CRYPTO_WRITE);
 | 
			
		||||
    if (!((rw == CRYPTO_READ) || (rw == CRYPTO_WRITE))) {
 | 
			
		||||
	if (!((rw == CRYPTO_READ) || (rw == CRYPTO_WRITE)))
 | 
			
		||||
		{
 | 
			
		||||
		errstr = "invalid mode";
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (type < 0 || type >= CRYPTO_NUM_LOCKS) {
 | 
			
		||||
	if (type < 0 || type >= CRYPTO_NUM_LOCKS)
 | 
			
		||||
		{
 | 
			
		||||
		errstr = "type out of bounds";
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (mode & CRYPTO_LOCK) {
 | 
			
		||||
        if (modes[type]) {
 | 
			
		||||
	if (mode & CRYPTO_LOCK)
 | 
			
		||||
		{
 | 
			
		||||
		if (modes[type])
 | 
			
		||||
			{
 | 
			
		||||
			errstr = "already locked";
 | 
			
		||||
            /*
 | 
			
		||||
             * must not happen in a single-threaded program (would deadlock)
 | 
			
		||||
             */
 | 
			
		||||
			/* must not happen in a single-threaded program
 | 
			
		||||
			 * (would deadlock) */
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		modes[type] = rw;
 | 
			
		||||
    } else if (mode & CRYPTO_UNLOCK) {
 | 
			
		||||
        if (!modes[type]) {
 | 
			
		||||
		}
 | 
			
		||||
	else if (mode & CRYPTO_UNLOCK)
 | 
			
		||||
		{
 | 
			
		||||
		if (!modes[type])
 | 
			
		||||
			{
 | 
			
		||||
			errstr = "not locked";
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
		
 | 
			
		||||
        if (modes[type] != rw) {
 | 
			
		||||
		if (modes[type] != rw)
 | 
			
		||||
			{
 | 
			
		||||
			errstr = (rw == CRYPTO_READ) ?
 | 
			
		||||
				"CRYPTO_r_unlock on write lock" :
 | 
			
		||||
				"CRYPTO_w_unlock on read lock";
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		modes[type] = 0;
 | 
			
		||||
    } else {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		errstr = "invalid mode";
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 err:
 | 
			
		||||
    if (errstr) {
 | 
			
		||||
	if (errstr)
 | 
			
		||||
		{
 | 
			
		||||
		/* we cannot use bio_err here */
 | 
			
		||||
        fprintf(stderr,
 | 
			
		||||
                "openssl (lock_dbg_cb): %s (mode=%d, type=%d) at %s:%d\n",
 | 
			
		||||
		fprintf(stderr, "openssl (lock_dbg_cb): %s (mode=%d, type=%d) at %s:%d\n",
 | 
			
		||||
			errstr, mode, type, file, line);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -227,8 +237,7 @@ int main(int Argc, char *ARGV[])
 | 
			
		||||
	long errline;
 | 
			
		||||
 | 
			
		||||
#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64)
 | 
			
		||||
    /*-
 | 
			
		||||
     * 2011-03-22 SMS.
 | 
			
		||||
	/* 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.)
 | 
			
		||||
@@ -255,27 +264,25 @@ int main(int Argc, char *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;
 | 
			
		||||
        }
 | 
			
		||||
		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.
 | 
			
		||||
         */
 | 
			
		||||
		}
 | 
			
		||||
	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) */
 | 
			
		||||
#endif /* defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64) */
 | 
			
		||||
 | 
			
		||||
	arg.data=NULL;
 | 
			
		||||
	arg.count=0;
 | 
			
		||||
@@ -284,13 +291,15 @@ int main(int Argc, char *ARGV[])
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
    if (getenv("OPENSSL_DEBUG_MEMORY") != NULL) { /* if not defined, use
 | 
			
		||||
                                                   * compiled-in library
 | 
			
		||||
                                                   * defaults */
 | 
			
		||||
        if (!(0 == strcmp(getenv("OPENSSL_DEBUG_MEMORY"), "off"))) {
 | 
			
		||||
	if (getenv("OPENSSL_DEBUG_MEMORY") != NULL) /* if not defined, use compiled-in library defaults */
 | 
			
		||||
		{
 | 
			
		||||
		if (!(0 == strcmp(getenv("OPENSSL_DEBUG_MEMORY"), "off")))
 | 
			
		||||
			{
 | 
			
		||||
			CRYPTO_malloc_debug_init();
 | 
			
		||||
			CRYPTO_set_mem_debug_options(V_CRYPTO_MDEBUG_ALL);
 | 
			
		||||
        } else {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			/* OPENSSL_DEBUG_MEMORY=off */
 | 
			
		||||
			CRYPTO_set_mem_debug_functions(0, 0, 0, 0, 0);
 | 
			
		||||
			}
 | 
			
		||||
@@ -304,6 +313,19 @@ int main(int Argc, char *ARGV[])
 | 
			
		||||
		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();
 | 
			
		||||
 | 
			
		||||
	/* Lets load up our environment a little */
 | 
			
		||||
@@ -317,14 +339,19 @@ int main(int Argc, char *ARGV[])
 | 
			
		||||
 | 
			
		||||
	config=NCONF_new(NULL);
 | 
			
		||||
	i=NCONF_load(config,p,&errline);
 | 
			
		||||
    if (i == 0) {
 | 
			
		||||
	if (i == 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (ERR_GET_REASON(ERR_peek_last_error())
 | 
			
		||||
            == CONF_R_NO_SUCH_FILE) {
 | 
			
		||||
            BIO_printf(bio_err, "WARNING: can't open config file: %s\n", p);
 | 
			
		||||
		    == CONF_R_NO_SUCH_FILE)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				   "WARNING: can't open config file: %s\n",p);
 | 
			
		||||
			ERR_clear_error();
 | 
			
		||||
			NCONF_free(config);
 | 
			
		||||
			config = NULL;
 | 
			
		||||
        } else {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			NCONF_free(config);
 | 
			
		||||
			exit(1);
 | 
			
		||||
@@ -338,58 +365,55 @@ int main(int Argc, char *ARGV[])
 | 
			
		||||
 | 
			
		||||
	f.name=pname;
 | 
			
		||||
	fp=lh_FUNCTION_retrieve(prog,&f);
 | 
			
		||||
    if (fp != NULL) {
 | 
			
		||||
	if (fp != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		Argv[0]=pname;
 | 
			
		||||
		ret=fp->func(Argc,Argv);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * ok, now check that there are not arguments, if there are, run with
 | 
			
		||||
     * them, shifting the ssleay off the front
 | 
			
		||||
     */
 | 
			
		||||
    if (Argc != 1) {
 | 
			
		||||
	/* ok, now check that there are not arguments, if there are,
 | 
			
		||||
	 * run with them, shifting the ssleay off the front */
 | 
			
		||||
	if (Argc != 1)
 | 
			
		||||
		{
 | 
			
		||||
		Argc--;
 | 
			
		||||
		Argv++;
 | 
			
		||||
		ret=do_cmd(prog,Argc,Argv);
 | 
			
		||||
        if (ret < 0)
 | 
			
		||||
            ret = 0;
 | 
			
		||||
		if (ret < 0) ret=0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	/* ok, lets enter the old 'OpenSSL>' mode */
 | 
			
		||||
	
 | 
			
		||||
    for (;;) {
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		ret=0;
 | 
			
		||||
		p=buf;
 | 
			
		||||
		n=sizeof buf;
 | 
			
		||||
		i=0;
 | 
			
		||||
        for (;;) {
 | 
			
		||||
		for (;;)
 | 
			
		||||
			{
 | 
			
		||||
			p[0]='\0';
 | 
			
		||||
			if (i++)
 | 
			
		||||
				prompt=">";
 | 
			
		||||
            else
 | 
			
		||||
                prompt = "OpenSSL> ";
 | 
			
		||||
			else	prompt="OpenSSL> ";
 | 
			
		||||
			fputs(prompt,stdout);
 | 
			
		||||
			fflush(stdout);
 | 
			
		||||
			if (!fgets(p,n,stdin))
 | 
			
		||||
				goto end;
 | 
			
		||||
            if (p[0] == '\0')
 | 
			
		||||
                goto end;
 | 
			
		||||
			if (p[0] == '\0') goto end;
 | 
			
		||||
			i=strlen(p);
 | 
			
		||||
            if (i <= 1)
 | 
			
		||||
                break;
 | 
			
		||||
            if (p[i - 2] != '\\')
 | 
			
		||||
                break;
 | 
			
		||||
			if (i <= 1) break;
 | 
			
		||||
			if (p[i-2] != '\\') break;
 | 
			
		||||
			i-=2;
 | 
			
		||||
			p+=i;
 | 
			
		||||
			n-=i;
 | 
			
		||||
			}
 | 
			
		||||
        if (!chopup_args(&arg, buf, &argc, &argv))
 | 
			
		||||
            break;
 | 
			
		||||
		if (!chopup_args(&arg,buf,&argc,&argv)) break;
 | 
			
		||||
 | 
			
		||||
		ret=do_cmd(prog,argc,argv);
 | 
			
		||||
        if (ret < 0) {
 | 
			
		||||
		if (ret < 0)
 | 
			
		||||
			{
 | 
			
		||||
			ret=0;
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -402,25 +426,26 @@ int main(int Argc, char *ARGV[])
 | 
			
		||||
end:
 | 
			
		||||
	if (to_free)
 | 
			
		||||
		OPENSSL_free(to_free);
 | 
			
		||||
    if (config != NULL) {
 | 
			
		||||
	if (config != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		NCONF_free(config);
 | 
			
		||||
		config=NULL;
 | 
			
		||||
		}
 | 
			
		||||
    if (prog != NULL)
 | 
			
		||||
        lh_FUNCTION_free(prog);
 | 
			
		||||
    if (arg.data != NULL)
 | 
			
		||||
        OPENSSL_free(arg.data);
 | 
			
		||||
	if (prog != NULL) lh_FUNCTION_free(prog);
 | 
			
		||||
	if (arg.data != NULL) OPENSSL_free(arg.data);
 | 
			
		||||
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
 | 
			
		||||
	CRYPTO_mem_leaks(bio_err);
 | 
			
		||||
    if (bio_err != NULL) {
 | 
			
		||||
	if (bio_err != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_free(bio_err);
 | 
			
		||||
		bio_err=NULL;
 | 
			
		||||
		}
 | 
			
		||||
#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64)
 | 
			
		||||
	/* Free any duplicate Argv[] storage. */
 | 
			
		||||
    if (free_Argv) {
 | 
			
		||||
	if (free_Argv)
 | 
			
		||||
		{
 | 
			
		||||
		OPENSSL_free(Argv);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -434,31 +459,37 @@ int main(int Argc, char *ARGV[])
 | 
			
		||||
#define LIST_CIPHER_ALGORITHMS "list-cipher-algorithms"
 | 
			
		||||
#define LIST_PUBLIC_KEY_ALGORITHMS "list-public-key-algorithms"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[])
 | 
			
		||||
	{
 | 
			
		||||
	FUNCTION f,*fp;
 | 
			
		||||
	int i,ret=1,tp,nl;
 | 
			
		||||
 | 
			
		||||
    if ((argc <= 0) || (argv[0] == NULL)) {
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
	if ((argc <= 0) || (argv[0] == NULL))
 | 
			
		||||
		{ ret=0; goto end; }
 | 
			
		||||
	f.name=argv[0];
 | 
			
		||||
	fp=lh_FUNCTION_retrieve(prog,&f);
 | 
			
		||||
    if (fp == NULL) {
 | 
			
		||||
        if (EVP_get_digestbyname(argv[0])) {
 | 
			
		||||
	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])) {
 | 
			
		||||
			}
 | 
			
		||||
		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);
 | 
			
		||||
    } else if ((strncmp(argv[0], "no-", 3)) == 0) {
 | 
			
		||||
		}
 | 
			
		||||
	else if ((strncmp(argv[0],"no-",3)) == 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO *bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
@@ -474,18 +505,22 @@ static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[])
 | 
			
		||||
			BIO_printf(bio_stdout, "%s\n", argv[0]+3);
 | 
			
		||||
		BIO_free_all(bio_stdout);
 | 
			
		||||
		goto end;
 | 
			
		||||
    } else if ((strcmp(argv[0], "quit") == 0) ||
 | 
			
		||||
		}
 | 
			
		||||
	else if ((strcmp(argv[0],"quit") == 0) ||
 | 
			
		||||
		(strcmp(argv[0],"q") == 0) ||
 | 
			
		||||
		(strcmp(argv[0],"exit") == 0) ||
 | 
			
		||||
               (strcmp(argv[0], "bye") == 0)) {
 | 
			
		||||
		(strcmp(argv[0],"bye") == 0))
 | 
			
		||||
		{
 | 
			
		||||
		ret= -1;
 | 
			
		||||
		goto end;
 | 
			
		||||
    } 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_ALGORITHMS) == 0) ||
 | 
			
		||||
		(strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0) ||
 | 
			
		||||
		(strcmp(argv[0],LIST_CIPHER_ALGORITHMS) == 0) ||
 | 
			
		||||
               (strcmp(argv[0], LIST_PUBLIC_KEY_ALGORITHMS) == 0)) {
 | 
			
		||||
		(strcmp(argv[0],LIST_PUBLIC_KEY_ALGORITHMS) == 0))
 | 
			
		||||
		{
 | 
			
		||||
		int list_type;
 | 
			
		||||
		BIO *bio_stdout;
 | 
			
		||||
 | 
			
		||||
@@ -518,21 +553,26 @@ static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[])
 | 
			
		||||
			list_md(bio_stdout);	
 | 
			
		||||
		if (list_type == FUNC_TYPE_CIPHER_ALG)
 | 
			
		||||
			list_cipher(bio_stdout);	
 | 
			
		||||
        else {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			for (fp=functions; fp->name != NULL; fp++)
 | 
			
		||||
				if (fp->type == list_type)
 | 
			
		||||
                    BIO_printf(bio_stdout, "%s\n", fp->name);
 | 
			
		||||
					BIO_printf(bio_stdout, "%s\n",
 | 
			
		||||
								fp->name);
 | 
			
		||||
			}
 | 
			
		||||
		BIO_free_all(bio_stdout);
 | 
			
		||||
		ret=0;
 | 
			
		||||
		goto end;
 | 
			
		||||
    } else {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"openssl:Error: '%s' is an invalid command.\n",
 | 
			
		||||
			argv[0]);
 | 
			
		||||
		BIO_printf(bio_err, "\nStandard commands");
 | 
			
		||||
		i=0;
 | 
			
		||||
		tp=0;
 | 
			
		||||
        for (fp = functions; fp->name != NULL; fp++) {
 | 
			
		||||
		for (fp=functions; fp->name != NULL; fp++)
 | 
			
		||||
			{
 | 
			
		||||
			nl=0;
 | 
			
		||||
#ifdef OPENSSL_NO_CAMELLIA
 | 
			
		||||
			if (((i++) % 5) == 0)
 | 
			
		||||
@@ -543,18 +583,20 @@ static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[])
 | 
			
		||||
				BIO_printf(bio_err,"\n");
 | 
			
		||||
				nl=1;
 | 
			
		||||
				}
 | 
			
		||||
            if (fp->type != tp) {
 | 
			
		||||
			if (fp->type != tp)
 | 
			
		||||
				{
 | 
			
		||||
				tp=fp->type;
 | 
			
		||||
                if (!nl)
 | 
			
		||||
                    BIO_printf(bio_err, "\n");
 | 
			
		||||
                if (tp == FUNC_TYPE_MD) {
 | 
			
		||||
				if (!nl) BIO_printf(bio_err,"\n");
 | 
			
		||||
				if (tp == FUNC_TYPE_MD)
 | 
			
		||||
					{
 | 
			
		||||
					i=1;
 | 
			
		||||
					BIO_printf(bio_err,
 | 
			
		||||
						"\nMessage Digest commands (see the `dgst' command for more details)\n");
 | 
			
		||||
                } else if (tp == FUNC_TYPE_CIPHER) {
 | 
			
		||||
					}
 | 
			
		||||
				else if (tp == FUNC_TYPE_CIPHER)
 | 
			
		||||
					{
 | 
			
		||||
					i=1;
 | 
			
		||||
                    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
 | 
			
		||||
@@ -583,18 +625,23 @@ static int SortFnByName(const void *_f1, const void *_f2)
 | 
			
		||||
static void list_pkey(BIO *out)
 | 
			
		||||
	{
 | 
			
		||||
	int i;
 | 
			
		||||
    for (i = 0; i < EVP_PKEY_asn1_get_count(); 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));
 | 
			
		||||
		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 {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(out, "Name: %s\n", pinfo);
 | 
			
		||||
			BIO_printf(out, "\tType: %s Algorithm\n", 
 | 
			
		||||
				pkey_flags & ASN1_PKEY_DYNAMIC ?
 | 
			
		||||
@@ -613,7 +660,8 @@ static void list_cipher_fn(const EVP_CIPHER *c,
 | 
			
		||||
	{
 | 
			
		||||
	if (c)
 | 
			
		||||
		BIO_printf(arg, "%s\n", EVP_CIPHER_name(c));
 | 
			
		||||
    else {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (!from)
 | 
			
		||||
			from = "<undefined>";
 | 
			
		||||
		if (!to)
 | 
			
		||||
@@ -632,7 +680,8 @@ static void list_md_fn(const EVP_MD *m,
 | 
			
		||||
	{
 | 
			
		||||
	if (m)
 | 
			
		||||
		BIO_printf(arg, "%s\n", EVP_MD_name(m));
 | 
			
		||||
    else {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (!from)
 | 
			
		||||
			from = "<undefined>";
 | 
			
		||||
		if (!to)
 | 
			
		||||
@@ -650,14 +699,12 @@ 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)
 | 
			
		||||
@@ -667,7 +714,8 @@ static LHASH_OF(FUNCTION) *prog_init(void)
 | 
			
		||||
	size_t i;
 | 
			
		||||
 | 
			
		||||
	/* 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);
 | 
			
		||||
 | 
			
		||||
	if ((ret=lh_FUNCTION_new()) == NULL)
 | 
			
		||||
@@ -677,3 +725,4 @@ static LHASH_OF(FUNCTION) *prog_init(void)
 | 
			
		||||
		(void)lh_FUNCTION_insert(ret,f);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -145,7 +145,7 @@ localityName			= Locality Name (eg, city)
 | 
			
		||||
organizationalUnitName		= Organizational Unit Name (eg, section)
 | 
			
		||||
#organizationalUnitName_default	=
 | 
			
		||||
 | 
			
		||||
commonName			= Common Name (e.g. server FQDN or YOUR name)
 | 
			
		||||
commonName			= Common Name (eg, YOUR name)
 | 
			
		||||
commonName_max			= 64
 | 
			
		||||
 | 
			
		||||
emailAddress			= Email Address
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										192
									
								
								apps/passwd.c
									
									
									
									
									
								
							
							
						
						
									
										192
									
								
								apps/passwd.c
									
									
									
									
									
								
							@@ -22,9 +22,11 @@
 | 
			
		||||
# include <openssl/md5.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG passwd_main
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static unsigned const char cov_2char[64]={
 | 
			
		||||
	/* from crypto/des/fcrypt.c */
 | 
			
		||||
	0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35,
 | 
			
		||||
@@ -38,12 +40,10 @@ static unsigned const char cov_2char[64] = {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
 | 
			
		||||
                     char *passwd, BIO *out, int quiet, int table,
 | 
			
		||||
                     int reverse, size_t pw_maxlen, int usecrypt, int use1,
 | 
			
		||||
                     int useapr1);
 | 
			
		||||
	char *passwd, BIO *out, int quiet, int table, int reverse,
 | 
			
		||||
	size_t pw_maxlen, int usecrypt, int use1, int useapr1);
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * -crypt        - standard Unix password algorithm (default)
 | 
			
		||||
/* -crypt        - standard Unix password algorithm (default)
 | 
			
		||||
 * -1            - MD5-based password algorithm
 | 
			
		||||
 * -apr1         - MD5-based password algorithm, Apache variant
 | 
			
		||||
 * -salt string  - salt
 | 
			
		||||
@@ -94,32 +94,45 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	badopt = 0, opt_done = 0;
 | 
			
		||||
	i = 0;
 | 
			
		||||
    while (!badopt && !opt_done && argv[++i] != NULL) {
 | 
			
		||||
	while (!badopt && !opt_done && argv[++i] != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		if (strcmp(argv[i], "-crypt") == 0)
 | 
			
		||||
			usecrypt = 1;
 | 
			
		||||
		else if (strcmp(argv[i], "-1") == 0)
 | 
			
		||||
			use1 = 1;
 | 
			
		||||
		else if (strcmp(argv[i], "-apr1") == 0)
 | 
			
		||||
			useapr1 = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-salt") == 0) {
 | 
			
		||||
            if ((argv[i + 1] != NULL) && (salt == NULL)) {
 | 
			
		||||
		else if (strcmp(argv[i], "-salt") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if ((argv[i+1] != NULL) && (salt == NULL))
 | 
			
		||||
				{
 | 
			
		||||
				passed_salt = 1;
 | 
			
		||||
				salt = argv[++i];
 | 
			
		||||
            } else
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
        } else if (strcmp(argv[i], "-in") == 0) {
 | 
			
		||||
            if ((argv[i + 1] != NULL) && !pw_source_defined) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(argv[i], "-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if ((argv[i+1] != NULL) && !pw_source_defined)
 | 
			
		||||
				{
 | 
			
		||||
				pw_source_defined = 1;
 | 
			
		||||
				infile = argv[++i];
 | 
			
		||||
            } else
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
        } else if (strcmp(argv[i], "-stdin") == 0) {
 | 
			
		||||
            if (!pw_source_defined) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(argv[i], "-stdin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!pw_source_defined)
 | 
			
		||||
				{
 | 
			
		||||
				pw_source_defined = 1;
 | 
			
		||||
				in_stdin = 1;
 | 
			
		||||
            } else
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
        } else if (strcmp(argv[i], "-noverify") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(argv[i], "-noverify") == 0)
 | 
			
		||||
			in_noverify = 1;
 | 
			
		||||
		else if (strcmp(argv[i], "-quiet") == 0)
 | 
			
		||||
			quiet = 1;
 | 
			
		||||
@@ -135,7 +148,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			pw_source_defined = 1;
 | 
			
		||||
			passwds = &argv[i];
 | 
			
		||||
			opt_done = 1;
 | 
			
		||||
        } else
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			badopt = 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -146,32 +160,27 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	/* reject unsupported algorithms */
 | 
			
		||||
#ifdef OPENSSL_NO_DES
 | 
			
		||||
    if (usecrypt)
 | 
			
		||||
        badopt = 1;
 | 
			
		||||
	if (usecrypt) badopt = 1;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef NO_MD5CRYPT_1
 | 
			
		||||
    if (use1 || useapr1)
 | 
			
		||||
        badopt = 1;
 | 
			
		||||
	if (use1 || useapr1) badopt = 1;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (badopt) {
 | 
			
		||||
	if (badopt) 
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Usage: passwd [options] [passwords]\n");
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-crypt             standard Unix password algorithm (default)\n");
 | 
			
		||||
		BIO_printf(bio_err, "-crypt             standard Unix password algorithm (default)\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef NO_MD5CRYPT_1
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-1                 MD5-based password algorithm\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-apr1              MD5-based password algorithm, Apache variant\n");
 | 
			
		||||
		BIO_printf(bio_err, "-1                 MD5-based password algorithm\n");
 | 
			
		||||
		BIO_printf(bio_err, "-apr1              MD5-based password algorithm, Apache variant\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err, "-salt string       use provided salt\n");
 | 
			
		||||
		BIO_printf(bio_err, "-in file           read passwords from file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-stdin             read passwords from stdin\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-noverify          never verify when reading password from terminal\n");
 | 
			
		||||
		BIO_printf(bio_err, "-noverify          never verify when reading password from terminal\n");
 | 
			
		||||
		BIO_printf(bio_err, "-quiet             no warnings\n");
 | 
			
		||||
		BIO_printf(bio_err, "-table             format output as table\n");
 | 
			
		||||
		BIO_printf(bio_err, "-reverse           switch table columns\n");
 | 
			
		||||
@@ -179,15 +188,19 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if ((infile != NULL) || in_stdin) {
 | 
			
		||||
	if ((infile != NULL) || in_stdin)
 | 
			
		||||
		{
 | 
			
		||||
		in = BIO_new(BIO_s_file());
 | 
			
		||||
		if (in == NULL)
 | 
			
		||||
			goto err;
 | 
			
		||||
        if (infile != NULL) {
 | 
			
		||||
		if (infile != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			assert(in_stdin == 0);
 | 
			
		||||
			if (BIO_read_filename(in, infile) <= 0)
 | 
			
		||||
				goto err;
 | 
			
		||||
        } else {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			assert(in_stdin);
 | 
			
		||||
			BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
			}
 | 
			
		||||
@@ -196,59 +209,61 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if (usecrypt)
 | 
			
		||||
		pw_maxlen = 8;
 | 
			
		||||
	else if (use1 || useapr1)
 | 
			
		||||
        pw_maxlen = 256;        /* arbitrary limit, should be enough for most
 | 
			
		||||
                                 * passwords */
 | 
			
		||||
		pw_maxlen = 256; /* arbitrary limit, should be enough for most passwords */
 | 
			
		||||
 | 
			
		||||
    if (passwds == NULL) {
 | 
			
		||||
	if (passwds == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		/* no passwords on the command line */
 | 
			
		||||
 | 
			
		||||
		passwd_malloc_size = pw_maxlen + 2;
 | 
			
		||||
        /*
 | 
			
		||||
         * longer than necessary so that we can warn about truncation
 | 
			
		||||
         */
 | 
			
		||||
		/* longer than necessary so that we can warn about truncation */
 | 
			
		||||
		passwd = passwd_malloc = OPENSSL_malloc(passwd_malloc_size);
 | 
			
		||||
		if (passwd_malloc == NULL)
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if ((in == NULL) && (passwds == NULL)) {
 | 
			
		||||
	if ((in == NULL) && (passwds == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		/* build a null-terminated list */
 | 
			
		||||
		static char *passwds_static[2] = {NULL, NULL};
 | 
			
		||||
		
 | 
			
		||||
		passwds = passwds_static;
 | 
			
		||||
		if (in == NULL)
 | 
			
		||||
            if (EVP_read_pw_string
 | 
			
		||||
                (passwd_malloc, passwd_malloc_size, "Password: ",
 | 
			
		||||
                 !(passed_salt || in_noverify)) != 0)
 | 
			
		||||
			if (EVP_read_pw_string(passwd_malloc, passwd_malloc_size, "Password: ", !(passed_salt || in_noverify)) != 0)
 | 
			
		||||
				goto err;
 | 
			
		||||
		passwds[0] = passwd_malloc;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (in == NULL) {
 | 
			
		||||
	if (in == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		assert(passwds != NULL);
 | 
			
		||||
		assert(*passwds != NULL);
 | 
			
		||||
		
 | 
			
		||||
        do {                    /* loop over list of passwords */
 | 
			
		||||
		do /* loop over list of passwords */
 | 
			
		||||
			{
 | 
			
		||||
			passwd = *passwds++;
 | 
			
		||||
			if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out,
 | 
			
		||||
                           quiet, table, reverse, pw_maxlen, usecrypt, use1,
 | 
			
		||||
                           useapr1))
 | 
			
		||||
				quiet, table, reverse, pw_maxlen, usecrypt, use1, useapr1))
 | 
			
		||||
				goto err;
 | 
			
		||||
			}
 | 
			
		||||
		while (*passwds != NULL);
 | 
			
		||||
    } else
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		/* in != NULL */
 | 
			
		||||
		{
 | 
			
		||||
		int done;
 | 
			
		||||
 | 
			
		||||
		assert (passwd != NULL);
 | 
			
		||||
        do {
 | 
			
		||||
		do
 | 
			
		||||
			{
 | 
			
		||||
			int r = BIO_gets(in, passwd, pw_maxlen + 1);
 | 
			
		||||
            if (r > 0) {
 | 
			
		||||
			if (r > 0)
 | 
			
		||||
				{
 | 
			
		||||
				char *c = (strchr(passwd, '\n')) ;
 | 
			
		||||
				if (c != NULL)
 | 
			
		||||
					*c = 0; /* truncate at newline */
 | 
			
		||||
                else {
 | 
			
		||||
				else
 | 
			
		||||
					{
 | 
			
		||||
					/* ignore rest of line */
 | 
			
		||||
					char trash[BUFSIZ];
 | 
			
		||||
					do
 | 
			
		||||
@@ -257,8 +272,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
					}
 | 
			
		||||
				
 | 
			
		||||
				if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out,
 | 
			
		||||
                               quiet, table, reverse, pw_maxlen, usecrypt,
 | 
			
		||||
                               use1, useapr1))
 | 
			
		||||
					quiet, table, reverse, pw_maxlen, usecrypt, use1, useapr1))
 | 
			
		||||
					goto err;
 | 
			
		||||
				}
 | 
			
		||||
			done = (r <= 0);
 | 
			
		||||
@@ -281,20 +295,21 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef NO_MD5CRYPT_1
 | 
			
		||||
/*
 | 
			
		||||
 * MD5-based password algorithm (should probably be available as a library
 | 
			
		||||
 * function; then the static buffer would not be acceptable). For magic
 | 
			
		||||
 * string "1", this should be compatible to the MD5-based BSD password
 | 
			
		||||
 * algorithm. For 'magic' string "apr1", this is compatible to the MD5-based
 | 
			
		||||
 * Apache password algorithm. (Apparently, the Apache password algorithm is
 | 
			
		||||
 * identical except that the 'magic' string was changed -- the laziest
 | 
			
		||||
 * application of the NIH principle I've ever encountered.)
 | 
			
		||||
/* MD5-based password algorithm (should probably be available as a library
 | 
			
		||||
 * function; then the static buffer would not be acceptable).
 | 
			
		||||
 * For magic string "1", this should be compatible to the MD5-based BSD
 | 
			
		||||
 * password algorithm.
 | 
			
		||||
 * For 'magic' string "apr1", this is compatible to the MD5-based Apache
 | 
			
		||||
 * password algorithm.
 | 
			
		||||
 * (Apparently, the Apache password algorithm is identical except that the
 | 
			
		||||
 * 'magic' string was changed -- the laziest application of the NIH principle
 | 
			
		||||
 * I've ever encountered.)
 | 
			
		||||
 */
 | 
			
		||||
static char *md5crypt(const char *passwd, const char *magic, const char *salt)
 | 
			
		||||
	{
 | 
			
		||||
    /* "$apr1$..salt..$.......md5hash..........\0" */
 | 
			
		||||
    static char out_buf[6 + 9 + 24 + 2];
 | 
			
		||||
	static char out_buf[6 + 9 + 24 + 2]; /* "$apr1$..salt..$.......md5hash..........\0" */
 | 
			
		||||
	unsigned char buf[MD5_DIGEST_LENGTH];
 | 
			
		||||
	char *salt_out;
 | 
			
		||||
	int n;
 | 
			
		||||
@@ -334,13 +349,15 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt)
 | 
			
		||||
	EVP_DigestUpdate(&md, buf, i);
 | 
			
		||||
	
 | 
			
		||||
	n = passwd_len;
 | 
			
		||||
    while (n) {
 | 
			
		||||
	while (n)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_DigestUpdate(&md, (n & 1) ? "\0" : passwd, 1);
 | 
			
		||||
		n >>= 1;
 | 
			
		||||
		}
 | 
			
		||||
	EVP_DigestFinal_ex(&md, buf, NULL);
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < 1000; i++) {
 | 
			
		||||
	for (i = 0; i < 1000; i++)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_DigestInit_ex(&md2,EVP_md5(), NULL);
 | 
			
		||||
		EVP_DigestUpdate(&md2, (i & 1) ? (unsigned const char *) passwd : buf,
 | 
			
		||||
		                       (i & 1) ? passwd_len : sizeof buf);
 | 
			
		||||
@@ -362,13 +379,11 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt)
 | 
			
		||||
		char *output;
 | 
			
		||||
 | 
			
		||||
		/* silly output permutation */
 | 
			
		||||
        for (dest = 0, source = 0; dest < 14;
 | 
			
		||||
             dest++, source = (source + 6) % 17)
 | 
			
		||||
		for (dest = 0, source = 0; dest < 14; dest++, source = (source + 6) % 17)
 | 
			
		||||
			buf_perm[dest] = buf[source];
 | 
			
		||||
		buf_perm[14] = buf[5];
 | 
			
		||||
		buf_perm[15] = buf[11];
 | 
			
		||||
#  ifndef PEDANTIC              /* Unfortunately, this generates a "no
 | 
			
		||||
                                 * effect" warning */
 | 
			
		||||
#ifndef PEDANTIC /* Unfortunately, this generates a "no effect" warning */
 | 
			
		||||
		assert(16 == sizeof buf_perm);
 | 
			
		||||
#endif
 | 
			
		||||
		
 | 
			
		||||
@@ -377,7 +392,8 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt)
 | 
			
		||||
		
 | 
			
		||||
		*output++ = '$';
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < 15; i += 3) {
 | 
			
		||||
		for (i = 0; i < 15; i += 3)
 | 
			
		||||
			{
 | 
			
		||||
			*output++ = cov_2char[buf_perm[i+2] & 0x3f];
 | 
			
		||||
			*output++ = cov_2char[((buf_perm[i+1] & 0xf) << 2) |
 | 
			
		||||
				                  (buf_perm[i+2] >> 6)];
 | 
			
		||||
@@ -397,10 +413,10 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt)
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
 | 
			
		||||
                     char *passwd, BIO *out, int quiet, int table,
 | 
			
		||||
                     int reverse, size_t pw_maxlen, int usecrypt, int use1,
 | 
			
		||||
                     int useapr1)
 | 
			
		||||
	char *passwd, BIO *out,	int quiet, int table, int reverse,
 | 
			
		||||
	size_t pw_maxlen, int usecrypt, int use1, int useapr1)
 | 
			
		||||
	{
 | 
			
		||||
	char *hash = NULL;
 | 
			
		||||
 | 
			
		||||
@@ -408,10 +424,13 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
 | 
			
		||||
	assert(salt_malloc_p != NULL);
 | 
			
		||||
 | 
			
		||||
	/* first make sure we have a salt */
 | 
			
		||||
    if (!passed_salt) {
 | 
			
		||||
	if (!passed_salt)
 | 
			
		||||
		{
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
        if (usecrypt) {
 | 
			
		||||
            if (*salt_malloc_p == NULL) {
 | 
			
		||||
		if (usecrypt)
 | 
			
		||||
			{
 | 
			
		||||
			if (*salt_malloc_p == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				*salt_p = *salt_malloc_p = OPENSSL_malloc(3);
 | 
			
		||||
				if (*salt_malloc_p == NULL)
 | 
			
		||||
					goto err;
 | 
			
		||||
@@ -422,17 +441,19 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
 | 
			
		||||
			(*salt_p)[1] = cov_2char[(*salt_p)[1] & 0x3f]; /* 6 bits */
 | 
			
		||||
			(*salt_p)[2] = 0;
 | 
			
		||||
#ifdef CHARSET_EBCDIC
 | 
			
		||||
            ascii2ebcdic(*salt_p, *salt_p, 2); /* des_crypt will convert back
 | 
			
		||||
                                                * to ASCII */
 | 
			
		||||
			ascii2ebcdic(*salt_p, *salt_p, 2); /* des_crypt will convert
 | 
			
		||||
			                                    * back to ASCII */
 | 
			
		||||
#endif
 | 
			
		||||
			}
 | 
			
		||||
#endif /* !OPENSSL_NO_DES */
 | 
			
		||||
 | 
			
		||||
#ifndef NO_MD5CRYPT_1
 | 
			
		||||
        if (use1 || useapr1) {
 | 
			
		||||
		if (use1 || useapr1)
 | 
			
		||||
			{
 | 
			
		||||
			int i;
 | 
			
		||||
			
 | 
			
		||||
            if (*salt_malloc_p == NULL) {
 | 
			
		||||
			if (*salt_malloc_p == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				*salt_p = *salt_malloc_p = OPENSSL_malloc(9);
 | 
			
		||||
				if (*salt_malloc_p == NULL)
 | 
			
		||||
					goto err;
 | 
			
		||||
@@ -450,14 +471,11 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
 | 
			
		||||
	assert(*salt_p != NULL);
 | 
			
		||||
	
 | 
			
		||||
	/* truncate password if necessary */
 | 
			
		||||
    if ((strlen(passwd) > pw_maxlen)) {
 | 
			
		||||
	if ((strlen(passwd) > pw_maxlen))
 | 
			
		||||
		{
 | 
			
		||||
		if (!quiet)
 | 
			
		||||
            /*
 | 
			
		||||
             * XXX: really we should know how to print a size_t, not cast it
 | 
			
		||||
             */
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "Warning: truncating password to %u characters\n",
 | 
			
		||||
                       (unsigned)pw_maxlen);
 | 
			
		||||
			/* XXX: really we should know how to print a size_t, not cast it */
 | 
			
		||||
			BIO_printf(bio_err, "Warning: truncating password to %u characters\n", (unsigned)pw_maxlen);
 | 
			
		||||
		passwd[pw_maxlen] = 0;
 | 
			
		||||
		}
 | 
			
		||||
	assert(strlen(passwd) <= pw_maxlen);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										408
									
								
								apps/pkcs12.c
									
									
									
									
									
								
							
							
						
						
									
										408
									
								
								apps/pkcs12.c
									
									
									
									
									
								
							@@ -1,6 +1,5 @@
 | 
			
		||||
/* pkcs12.c */
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
@@ -73,6 +72,7 @@
 | 
			
		||||
 | 
			
		||||
const EVP_CIPHER *enc;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define NOKEYS		0x1
 | 
			
		||||
#define NOCERTS 	0x2
 | 
			
		||||
#define INFO		0x4
 | 
			
		||||
@@ -80,15 +80,11 @@ const EVP_CIPHER *enc;
 | 
			
		||||
#define CACERTS		0x10
 | 
			
		||||
 | 
			
		||||
int get_cert_chain (X509 *cert, X509_STORE *store, STACK_OF(X509) **chain);
 | 
			
		||||
int dump_certs_keys_p12(BIO *out, PKCS12 *p12, char *pass, int passlen,
 | 
			
		||||
                        int options, char *pempass);
 | 
			
		||||
int dump_certs_pkeys_bags(BIO *out, STACK_OF(PKCS12_SAFEBAG) *bags,
 | 
			
		||||
                          char *pass, int passlen, int options,
 | 
			
		||||
                          char *pempass);
 | 
			
		||||
int dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bags, char *pass,
 | 
			
		||||
int dump_certs_keys_p12(BIO *out, PKCS12 *p12, char *pass, int passlen, int options, char *pempass);
 | 
			
		||||
int dump_certs_pkeys_bags(BIO *out, STACK_OF(PKCS12_SAFEBAG) *bags, char *pass,
 | 
			
		||||
			  int passlen, int options, char *pempass);
 | 
			
		||||
int print_attribs(BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst,
 | 
			
		||||
                  const char *name);
 | 
			
		||||
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,const char *name);
 | 
			
		||||
void hex_prin(BIO *out, unsigned char *buf, int len);
 | 
			
		||||
int alg_print(BIO *x, X509_ALGOR *alg);
 | 
			
		||||
int cert_load(BIO *in, STACK_OF(X509) *sk);
 | 
			
		||||
@@ -135,72 +131,49 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
    args = argv + 1;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    while (*args) {
 | 
			
		||||
	if (*args[0] == '-') {
 | 
			
		||||
            if (!strcmp(*args, "-nokeys"))
 | 
			
		||||
                options |= NOKEYS;
 | 
			
		||||
            else if (!strcmp(*args, "-keyex"))
 | 
			
		||||
                keytype = KEY_EX;
 | 
			
		||||
            else if (!strcmp(*args, "-keysig"))
 | 
			
		||||
                keytype = KEY_SIG;
 | 
			
		||||
            else if (!strcmp(*args, "-nocerts"))
 | 
			
		||||
                options |= NOCERTS;
 | 
			
		||||
            else if (!strcmp(*args, "-clcerts"))
 | 
			
		||||
                options |= CLCERTS;
 | 
			
		||||
            else if (!strcmp(*args, "-cacerts"))
 | 
			
		||||
                options |= CACERTS;
 | 
			
		||||
            else if (!strcmp(*args, "-noout"))
 | 
			
		||||
                options |= (NOKEYS | NOCERTS);
 | 
			
		||||
            else if (!strcmp(*args, "-info"))
 | 
			
		||||
                options |= INFO;
 | 
			
		||||
            else if (!strcmp(*args, "-chain"))
 | 
			
		||||
                chain = 1;
 | 
			
		||||
            else if (!strcmp(*args, "-twopass"))
 | 
			
		||||
                twopass = 1;
 | 
			
		||||
            else if (!strcmp(*args, "-nomacver"))
 | 
			
		||||
                macver = 0;
 | 
			
		||||
		if (!strcmp (*args, "-nokeys")) options |= NOKEYS;
 | 
			
		||||
		else if (!strcmp (*args, "-keyex")) keytype = KEY_EX;
 | 
			
		||||
		else if (!strcmp (*args, "-keysig")) keytype = KEY_SIG;
 | 
			
		||||
		else if (!strcmp (*args, "-nocerts")) options |= NOCERTS;
 | 
			
		||||
		else if (!strcmp (*args, "-clcerts")) options |= CLCERTS;
 | 
			
		||||
		else if (!strcmp (*args, "-cacerts")) options |= CACERTS;
 | 
			
		||||
		else if (!strcmp (*args, "-noout")) options |= (NOKEYS|NOCERTS);
 | 
			
		||||
		else if (!strcmp (*args, "-info")) options |= INFO;
 | 
			
		||||
		else if (!strcmp (*args, "-chain")) chain = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-twopass")) twopass = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-nomacver")) macver = 0;
 | 
			
		||||
		else if (!strcmp (*args, "-descert"))
 | 
			
		||||
    			cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
 | 
			
		||||
            else if (!strcmp(*args, "-export"))
 | 
			
		||||
                export_cert = 1;
 | 
			
		||||
            else if (!strcmp(*args, "-des"))
 | 
			
		||||
                enc = EVP_des_cbc();
 | 
			
		||||
            else if (!strcmp(*args, "-des3"))
 | 
			
		||||
                enc = EVP_des_ede3_cbc();
 | 
			
		||||
		else if (!strcmp (*args, "-export")) export_cert = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-des")) enc=EVP_des_cbc();
 | 
			
		||||
		else if (!strcmp (*args, "-des3")) enc = EVP_des_ede3_cbc();
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
            else if (!strcmp(*args, "-idea"))
 | 
			
		||||
                enc = EVP_idea_cbc();
 | 
			
		||||
		else if (!strcmp (*args, "-idea")) enc=EVP_idea_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
            else if (!strcmp(*args, "-seed"))
 | 
			
		||||
                enc = EVP_seed_cbc();
 | 
			
		||||
		else if (!strcmp(*args, "-seed")) enc=EVP_seed_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
            else if (!strcmp(*args, "-aes128"))
 | 
			
		||||
                enc = EVP_aes_128_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,"-aes128")) enc=EVP_aes_128_cbc();
 | 
			
		||||
		else if (!strcmp(*args,"-aes192")) enc=EVP_aes_192_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();
 | 
			
		||||
		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
 | 
			
		||||
            else if (!strcmp(*args, "-noiter"))
 | 
			
		||||
                iter = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-noiter")) iter = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-maciter"))
 | 
			
		||||
					 maciter = PKCS12_DEFAULT_ITER;
 | 
			
		||||
		else if (!strcmp (*args, "-nomaciter"))
 | 
			
		||||
@@ -211,10 +184,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		    if (args[1]) {
 | 
			
		||||
			args++;	
 | 
			
		||||
			macalg = *args;
 | 
			
		||||
                } else
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
            else if (!strcmp(*args, "-nodes"))
 | 
			
		||||
                enc = NULL;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-nodes")) enc=NULL;
 | 
			
		||||
		else if (!strcmp (*args, "-certpbe")) {
 | 
			
		||||
			if (!set_pbe(bio_err, &cert_pbe, *++args))
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
@@ -225,98 +196,81 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		    if (args[1]) {
 | 
			
		||||
			args++;	
 | 
			
		||||
			inrand = *args;
 | 
			
		||||
                } else
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
		} else if (!strcmp (*args, "-inkey")) {
 | 
			
		||||
		    if (args[1]) {
 | 
			
		||||
			args++;	
 | 
			
		||||
			keyname = *args;
 | 
			
		||||
                } else
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
		} else if (!strcmp (*args, "-certfile")) {
 | 
			
		||||
		    if (args[1]) {
 | 
			
		||||
			args++;	
 | 
			
		||||
			certfile = *args;
 | 
			
		||||
                } else
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
		} else if (!strcmp (*args, "-name")) {
 | 
			
		||||
		    if (args[1]) {
 | 
			
		||||
			args++;	
 | 
			
		||||
			name = *args;
 | 
			
		||||
                } else
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
		} else if (!strcmp (*args, "-LMK"))
 | 
			
		||||
			add_lmk = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-CSP")) {
 | 
			
		||||
		    if (args[1]) {
 | 
			
		||||
			args++;	
 | 
			
		||||
			csp_name = *args;
 | 
			
		||||
                } else
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
		} else if (!strcmp (*args, "-caname")) {
 | 
			
		||||
		    if (args[1]) {
 | 
			
		||||
			args++;	
 | 
			
		||||
                    if (!canames)
 | 
			
		||||
                        canames = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
			if (!canames) canames = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
			sk_OPENSSL_STRING_push(canames, *args);
 | 
			
		||||
                } else
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
		} else if (!strcmp (*args, "-in")) {
 | 
			
		||||
		    if (args[1]) {
 | 
			
		||||
			args++;	
 | 
			
		||||
			infile = *args;
 | 
			
		||||
                } else
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
		} else if (!strcmp (*args, "-out")) {
 | 
			
		||||
		    if (args[1]) {
 | 
			
		||||
			args++;	
 | 
			
		||||
			outfile = *args;
 | 
			
		||||
                } else
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
		} else if (!strcmp(*args,"-passin")) {
 | 
			
		||||
		    if (args[1]) {
 | 
			
		||||
			args++;	
 | 
			
		||||
			passargin = *args;
 | 
			
		||||
                } else
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
		} else if (!strcmp(*args,"-passout")) {
 | 
			
		||||
		    if (args[1]) {
 | 
			
		||||
			args++;	
 | 
			
		||||
			passargout = *args;
 | 
			
		||||
                } else
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
		} else if (!strcmp (*args, "-password")) {
 | 
			
		||||
		    if (args[1]) {
 | 
			
		||||
			args++;	
 | 
			
		||||
			passarg = *args;
 | 
			
		||||
		    	noprompt = 1;
 | 
			
		||||
                } else
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
		} else if (!strcmp(*args,"-CApath")) {
 | 
			
		||||
		    if (args[1]) {
 | 
			
		||||
			args++;	
 | 
			
		||||
			CApath = *args;
 | 
			
		||||
                } else
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
		} else if (!strcmp(*args,"-CAfile")) {
 | 
			
		||||
		    if (args[1]) {
 | 
			
		||||
			args++;	
 | 
			
		||||
			CAfile = *args;
 | 
			
		||||
                } else
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		} else if (!strcmp(*args,"-engine")) {
 | 
			
		||||
		    if (args[1]) {
 | 
			
		||||
			args++;	
 | 
			
		||||
			engine = *args;
 | 
			
		||||
                } else
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
#endif
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
		} else badarg = 1;
 | 
			
		||||
 | 
			
		||||
        } else
 | 
			
		||||
            badarg = 1;
 | 
			
		||||
	} else badarg = 1;
 | 
			
		||||
	args++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -330,23 +284,18 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	BIO_printf (bio_err, "-CApath arg   - PEM format directory of CA's\n");
 | 
			
		||||
	BIO_printf (bio_err, "-CAfile arg   - PEM format file of CA's\n");
 | 
			
		||||
	BIO_printf (bio_err, "-name \"name\"  use name as friendly name\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-caname \"nm\"  use nm as CA friendly name (can be used more than once).\n");
 | 
			
		||||
	BIO_printf (bio_err, "-caname \"nm\"  use nm as CA friendly name (can be used more than once).\n");
 | 
			
		||||
	BIO_printf (bio_err, "-in  infile   input filename\n");
 | 
			
		||||
	BIO_printf (bio_err, "-out outfile  output filename\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-noout        don't output anything, just verify.\n");
 | 
			
		||||
	BIO_printf (bio_err, "-noout        don't output anything, just verify.\n");
 | 
			
		||||
	BIO_printf (bio_err, "-nomacver     don't verify MAC.\n");
 | 
			
		||||
	BIO_printf (bio_err, "-nocerts      don't output certificates.\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-clcerts      only output client certificates.\n");
 | 
			
		||||
	BIO_printf (bio_err, "-clcerts      only output client certificates.\n");
 | 
			
		||||
	BIO_printf (bio_err, "-cacerts      only output CA certificates.\n");
 | 
			
		||||
	BIO_printf (bio_err, "-nokeys       don't output private keys.\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-info         give info about PKCS#12 structure.\n");
 | 
			
		||||
	BIO_printf (bio_err, "-info         give info about PKCS#12 structure.\n");
 | 
			
		||||
	BIO_printf (bio_err, "-des          encrypt private keys with DES\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-des3         encrypt private keys with triple DES (default)\n");
 | 
			
		||||
	BIO_printf (bio_err, "-des3         encrypt private keys with triple DES (default)\n");
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
	BIO_printf (bio_err, "-idea         encrypt private keys with idea\n");
 | 
			
		||||
#endif
 | 
			
		||||
@@ -355,58 +304,45 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
	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");
 | 
			
		||||
	BIO_printf (bio_err, "              encrypt PEM output with cbc camellia\n");
 | 
			
		||||
#endif
 | 
			
		||||
	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, "-nomaciter    don't 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,
 | 
			
		||||
                   "-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,
 | 
			
		||||
                   "-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, "-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, "-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, "-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, "-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");
 | 
			
		||||
	BIO_printf (bio_err, "-passin p     input file pass phrase source\n");
 | 
			
		||||
	BIO_printf (bio_err, "-passout p    output file pass phrase source\n");
 | 
			
		||||
#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
 | 
			
		||||
        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,  "-rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
	BIO_printf(bio_err,  "              load the file (or the files in the directory) into\n");
 | 
			
		||||
	BIO_printf(bio_err,  "              the random number generator\n");
 | 
			
		||||
	BIO_printf(bio_err,  "-CSP name     Microsoft CSP name\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-LMK          Add local machine keyset attribute to private key\n");
 | 
			
		||||
	BIO_printf(bio_err,  "-LMK          Add local machine keyset attribute to private key\n");
 | 
			
		||||
    	goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if(passarg) {
 | 
			
		||||
        if (export_cert)
 | 
			
		||||
            passargout = passarg;
 | 
			
		||||
        else
 | 
			
		||||
            passargin = passarg;
 | 
			
		||||
	if(export_cert) passargout = passarg;
 | 
			
		||||
	else passargin = passarg;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
@@ -415,10 +351,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(!cpass) {
 | 
			
		||||
        if (export_cert)
 | 
			
		||||
            cpass = passout;
 | 
			
		||||
        else
 | 
			
		||||
            cpass = passin;
 | 
			
		||||
    	if(export_cert) cpass = passout;
 | 
			
		||||
    	else cpass = passin;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(cpass) {
 | 
			
		||||
@@ -441,16 +375,15 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    CRYPTO_push_info("read files");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (!infile)
 | 
			
		||||
        in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
    else
 | 
			
		||||
        in = BIO_new_file(infile, "rb");
 | 
			
		||||
    if (!infile) in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
    else in = BIO_new_file(infile, "rb");
 | 
			
		||||
    if (!in) {
 | 
			
		||||
	    BIO_printf(bio_err, "Error opening input file %s\n",
 | 
			
		||||
						infile ? infile : "<stdin>");
 | 
			
		||||
	    perror (infile);
 | 
			
		||||
	    goto end;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
    CRYPTO_pop_info();
 | 
			
		||||
    CRYPTO_push_info("write files");
 | 
			
		||||
@@ -464,8 +397,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	    out = BIO_push(tmpbio, out);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
    } else
 | 
			
		||||
        out = BIO_new_file(outfile, "wb");
 | 
			
		||||
    } else out = BIO_new_file(outfile, "wb");
 | 
			
		||||
    if (!out) {
 | 
			
		||||
	BIO_printf(bio_err, "Error opening output file %s\n",
 | 
			
		||||
						outfile ? outfile : "<stdout>");
 | 
			
		||||
@@ -476,8 +408,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
    CRYPTO_push_info("read MAC password");
 | 
			
		||||
#endif
 | 
			
		||||
        if (EVP_read_pw_string
 | 
			
		||||
            (macpass, sizeof macpass, "Enter MAC Password:", export_cert)) {
 | 
			
		||||
	if(EVP_read_pw_string (macpass, sizeof macpass, "Enter MAC Password:", export_cert))
 | 
			
		||||
	{
 | 
			
		||||
    	    BIO_printf (bio_err, "Can't read Password\n");
 | 
			
		||||
    	    goto end;
 | 
			
		||||
       	}
 | 
			
		||||
@@ -494,7 +426,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	unsigned char *catmp = NULL;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
        if ((options & (NOCERTS | NOKEYS)) == (NOCERTS | NOKEYS)) {
 | 
			
		||||
	if ((options & (NOCERTS|NOKEYS)) == (NOCERTS|NOKEYS))
 | 
			
		||||
		{	
 | 
			
		||||
		BIO_printf(bio_err, "Nothing to do!\n");
 | 
			
		||||
		goto export_end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -506,29 +439,35 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	CRYPTO_push_info("process -export_cert");
 | 
			
		||||
	CRYPTO_push_info("reading private key");
 | 
			
		||||
#endif
 | 
			
		||||
        if (!(options & NOKEYS)) {
 | 
			
		||||
	if (!(options & NOKEYS))
 | 
			
		||||
		{
 | 
			
		||||
		key = load_key(bio_err, keyname ? keyname : infile,
 | 
			
		||||
				FORMAT_PEM, 1, passin, e, "private key");
 | 
			
		||||
		if (!key)
 | 
			
		||||
			goto export_end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
	CRYPTO_pop_info();
 | 
			
		||||
	CRYPTO_push_info("reading certs from input");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	/* Load in all certs in input file */
 | 
			
		||||
        if (!(options & NOCERTS)) {
 | 
			
		||||
	if(!(options & NOCERTS))
 | 
			
		||||
		{
 | 
			
		||||
		certs = load_certs(bio_err, infile, FORMAT_PEM, NULL, e,
 | 
			
		||||
							"certificates");
 | 
			
		||||
		if (!certs)
 | 
			
		||||
			goto export_end;
 | 
			
		||||
 | 
			
		||||
            if (key) {
 | 
			
		||||
		if (key)
 | 
			
		||||
			{
 | 
			
		||||
			/* Look for matching private key */
 | 
			
		||||
                for (i = 0; i < sk_X509_num(certs); i++) {
 | 
			
		||||
			for(i = 0; i < sk_X509_num(certs); i++)
 | 
			
		||||
				{
 | 
			
		||||
				x = sk_X509_value(certs, i);
 | 
			
		||||
                    if (X509_check_private_key(x, key)) {
 | 
			
		||||
				if(X509_check_private_key(x, key))
 | 
			
		||||
					{
 | 
			
		||||
					ucert = x;
 | 
			
		||||
					/* Zero keyid and alias */
 | 
			
		||||
					X509_keyid_set1(ucert, NULL, 0);
 | 
			
		||||
@@ -538,21 +477,23 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
					break;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
                if (!ucert) {
 | 
			
		||||
                    BIO_printf(bio_err,
 | 
			
		||||
                               "No certificate matches private key\n");
 | 
			
		||||
			if (!ucert)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "No certificate matches private key\n");
 | 
			
		||||
				goto export_end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
	CRYPTO_pop_info();
 | 
			
		||||
	CRYPTO_push_info("reading certs from input 2");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	/* Add any more certificates asked for */
 | 
			
		||||
        if (certfile) {
 | 
			
		||||
	if(certfile)
 | 
			
		||||
		{
 | 
			
		||||
		STACK_OF(X509) *morecerts=NULL;
 | 
			
		||||
		if(!(morecerts = load_certs(bio_err, certfile, FORMAT_PEM,
 | 
			
		||||
					    NULL, e,
 | 
			
		||||
@@ -562,6 +503,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			sk_X509_push(certs, sk_X509_shift(morecerts));
 | 
			
		||||
		sk_X509_free(morecerts);
 | 
			
		||||
 		}
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
	CRYPTO_pop_info();
 | 
			
		||||
	CRYPTO_push_info("reading certs from certfile");
 | 
			
		||||
@@ -577,7 +519,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        	int vret;
 | 
			
		||||
		STACK_OF(X509) *chain2;
 | 
			
		||||
		X509_STORE *store = X509_STORE_new();
 | 
			
		||||
            if (!store) {
 | 
			
		||||
		if (!store)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf (bio_err, "Memory allocation error\n");
 | 
			
		||||
			goto export_end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -606,15 +549,15 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	/* Add any CA names */
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < sk_OPENSSL_STRING_num(canames); i++) {
 | 
			
		||||
	for (i = 0; i < sk_OPENSSL_STRING_num(canames); i++)
 | 
			
		||||
		{
 | 
			
		||||
		catmp = (unsigned char *)sk_OPENSSL_STRING_value(canames, i);
 | 
			
		||||
		X509_alias_set1(sk_X509_value(certs, i), catmp, -1);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (csp_name && key)
 | 
			
		||||
		EVP_PKEY_add1_attr_by_NID(key, NID_ms_csp_name,
 | 
			
		||||
                                      MBSTRING_ASC, (unsigned char *)csp_name,
 | 
			
		||||
                                      -1);
 | 
			
		||||
				MBSTRING_ASC, (unsigned char *)csp_name, -1);
 | 
			
		||||
 | 
			
		||||
	if (add_lmk && key)
 | 
			
		||||
		EVP_PKEY_add1_attr_by_NID(key, NID_LocalKeySet, 0, NULL, -1);
 | 
			
		||||
@@ -625,13 +568,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	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;
 | 
			
		||||
        	}
 | 
			
		||||
        if (!twopass)
 | 
			
		||||
            BUF_strlcpy(macpass, pass, sizeof macpass);
 | 
			
		||||
	if (!twopass) BUF_strlcpy(macpass, pass, sizeof macpass);
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
	CRYPTO_pop_info();
 | 
			
		||||
@@ -641,15 +583,19 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	p12 = PKCS12_create(cpass, name, key, ucert, certs,
 | 
			
		||||
				key_pbe, cert_pbe, iter, -1, keytype);
 | 
			
		||||
 | 
			
		||||
        if (!p12) {
 | 
			
		||||
	if (!p12)
 | 
			
		||||
		{
 | 
			
		||||
	    	ERR_print_errors (bio_err);
 | 
			
		||||
		goto export_end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        if (macalg) {
 | 
			
		||||
	if (macalg)
 | 
			
		||||
		{
 | 
			
		||||
		macmd = EVP_get_digestbyname(macalg);
 | 
			
		||||
            if (!macmd) {
 | 
			
		||||
                BIO_printf(bio_err, "Unknown digest algorithm %s\n", macalg);
 | 
			
		||||
		if (!macmd)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Unknown digest algorithm %s\n", 
 | 
			
		||||
						macalg);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -672,12 +618,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	CRYPTO_push_info("process -export_cert: freeing");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
        if (key)
 | 
			
		||||
            EVP_PKEY_free(key);
 | 
			
		||||
        if (certs)
 | 
			
		||||
            sk_X509_pop_free(certs, X509_free);
 | 
			
		||||
        if (ucert)
 | 
			
		||||
            X509_free(ucert);
 | 
			
		||||
	if (key) EVP_PKEY_free(key);
 | 
			
		||||
	if (certs) sk_X509_pop_free(certs, X509_free);
 | 
			
		||||
	if (ucert) X509_free(ucert);
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
	CRYPTO_pop_info();
 | 
			
		||||
@@ -690,12 +633,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	ERR_print_errors(bio_err);
 | 
			
		||||
	goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
    CRYPTO_push_info("read import password");
 | 
			
		||||
#endif
 | 
			
		||||
    if (!noprompt
 | 
			
		||||
        && EVP_read_pw_string(pass, sizeof pass, "Enter Import Password:",
 | 
			
		||||
                              0)) {
 | 
			
		||||
    if(!noprompt && EVP_read_pw_string(pass, sizeof pass, "Enter Import Password:", 0)) {
 | 
			
		||||
	BIO_printf (bio_err, "Can't read Password\n");
 | 
			
		||||
	goto end;
 | 
			
		||||
    }
 | 
			
		||||
@@ -703,12 +645,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    CRYPTO_pop_info();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (!twopass)
 | 
			
		||||
        BUF_strlcpy(macpass, pass, sizeof macpass);
 | 
			
		||||
    if (!twopass) BUF_strlcpy(macpass, pass, sizeof macpass);
 | 
			
		||||
 | 
			
		||||
    if ((options & INFO) && p12->mac)
 | 
			
		||||
        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) {
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
    CRYPTO_push_info("verify MAC");
 | 
			
		||||
@@ -716,8 +655,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	/* If we enter empty password try no password first */
 | 
			
		||||
	if(!mpass[0] && PKCS12_verify_mac(p12, NULL, 0)) {
 | 
			
		||||
		/* 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)) {
 | 
			
		||||
	    BIO_printf (bio_err, "Mac verify error: invalid password?\n");
 | 
			
		||||
	    ERR_print_errors (bio_err);
 | 
			
		||||
@@ -728,6 +666,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    CRYPTO_pop_info();
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
    CRYPTO_push_info("output keys and certificates");
 | 
			
		||||
#endif
 | 
			
		||||
@@ -741,21 +680,16 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#endif
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (p12)
 | 
			
		||||
        PKCS12_free(p12);
 | 
			
		||||
    if (export_cert || inrand)
 | 
			
		||||
        app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
    if (p12) PKCS12_free(p12);
 | 
			
		||||
    if(export_cert || inrand) app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
    CRYPTO_remove_all_info();
 | 
			
		||||
#endif
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    if (canames)
 | 
			
		||||
        sk_OPENSSL_STRING_free(canames);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
    if (passout)
 | 
			
		||||
        OPENSSL_free(passout);
 | 
			
		||||
    if (canames) sk_OPENSSL_STRING_free(canames);
 | 
			
		||||
    if(passin) OPENSSL_free(passin);
 | 
			
		||||
    if(passout) OPENSSL_free(passout);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
@@ -769,25 +703,22 @@ int dump_certs_keys_p12(BIO *out, PKCS12 *p12, char *pass,
 | 
			
		||||
	int ret = 0;
 | 
			
		||||
	PKCS7 *p7;
 | 
			
		||||
 | 
			
		||||
    if (!(asafes = PKCS12_unpack_authsafes(p12)))
 | 
			
		||||
        return 0;
 | 
			
		||||
	if (!( asafes = PKCS12_unpack_authsafes(p12))) return 0;
 | 
			
		||||
	for (i = 0; i < sk_PKCS7_num (asafes); i++) {
 | 
			
		||||
		p7 = sk_PKCS7_value (asafes, i);
 | 
			
		||||
		bagnid = OBJ_obj2nid (p7->type);
 | 
			
		||||
		if (bagnid == NID_pkcs7_data) {
 | 
			
		||||
			bags = PKCS12_unpack_p7data(p7);
 | 
			
		||||
            if (options & INFO)
 | 
			
		||||
                BIO_printf(bio_err, "PKCS7 Data\n");
 | 
			
		||||
			if (options & INFO) BIO_printf (bio_err, "PKCS7 Data\n");
 | 
			
		||||
		} else if (bagnid == NID_pkcs7_encrypted) {
 | 
			
		||||
			if (options & INFO) {
 | 
			
		||||
				BIO_printf(bio_err, "PKCS7 Encrypted data: ");
 | 
			
		||||
                alg_print(bio_err, p7->d.encrypted->enc_data->algorithm);
 | 
			
		||||
				alg_print(bio_err, 
 | 
			
		||||
					p7->d.encrypted->enc_data->algorithm);
 | 
			
		||||
			}
 | 
			
		||||
			bags = PKCS12_unpack_p7encdata(p7, pass, passlen);
 | 
			
		||||
        } else
 | 
			
		||||
            continue;
 | 
			
		||||
        if (!bags)
 | 
			
		||||
            goto err;
 | 
			
		||||
		} else continue;
 | 
			
		||||
		if (!bags) goto err;
 | 
			
		||||
	    	if (!dump_certs_pkeys_bags (out, bags, pass, passlen, 
 | 
			
		||||
						 options, pempass)) {
 | 
			
		||||
			sk_PKCS12_SAFEBAG_pop_free (bags, PKCS12_SAFEBAG_free);
 | 
			
		||||
@@ -812,7 +743,8 @@ int dump_certs_pkeys_bags(BIO *out, STACK_OF(PKCS12_SAFEBAG) *bags,
 | 
			
		||||
	for (i = 0; i < sk_PKCS12_SAFEBAG_num (bags); i++) {
 | 
			
		||||
		if (!dump_certs_pkeys_bag (out,
 | 
			
		||||
					   sk_PKCS12_SAFEBAG_value (bags, i),
 | 
			
		||||
                                  pass, passlen, options, pempass))
 | 
			
		||||
					   pass, passlen,
 | 
			
		||||
					   options, pempass))
 | 
			
		||||
		    return 0;
 | 
			
		||||
	}
 | 
			
		||||
	return 1;
 | 
			
		||||
@@ -825,16 +757,14 @@ int dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bag, char *pass,
 | 
			
		||||
	PKCS8_PRIV_KEY_INFO *p8;
 | 
			
		||||
	X509 *x509;
 | 
			
		||||
	
 | 
			
		||||
    switch (M_PKCS12_bag_type(bag)) {
 | 
			
		||||
	switch (M_PKCS12_bag_type(bag))
 | 
			
		||||
	{
 | 
			
		||||
	case NID_keyBag:
 | 
			
		||||
        if (options & INFO)
 | 
			
		||||
            BIO_printf(bio_err, "Key bag\n");
 | 
			
		||||
        if (options & NOKEYS)
 | 
			
		||||
            return 1;
 | 
			
		||||
		if (options & INFO) BIO_printf (bio_err, "Key bag\n");
 | 
			
		||||
		if (options & NOKEYS) return 1;
 | 
			
		||||
		print_attribs (out, bag->attrib, "Bag Attributes");
 | 
			
		||||
		p8 = bag->value.keybag;
 | 
			
		||||
        if (!(pkey = EVP_PKCS82PKEY(p8)))
 | 
			
		||||
            return 0;
 | 
			
		||||
		if (!(pkey = EVP_PKCS82PKEY (p8))) return 0;
 | 
			
		||||
		print_attribs (out, p8->attributes, "Key Attributes");
 | 
			
		||||
		PEM_write_bio_PrivateKey (out, pkey, enc, NULL, 0, NULL, pempass);
 | 
			
		||||
		EVP_PKEY_free(pkey);
 | 
			
		||||
@@ -845,8 +775,7 @@ int dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bag, char *pass,
 | 
			
		||||
			BIO_printf (bio_err, "Shrouded Keybag: ");
 | 
			
		||||
			alg_print (bio_err, bag->value.shkeybag->algor);
 | 
			
		||||
		}
 | 
			
		||||
        if (options & NOKEYS)
 | 
			
		||||
            return 1;
 | 
			
		||||
		if (options & NOKEYS) return 1;
 | 
			
		||||
		print_attribs (out, bag->attrib, "Bag Attributes");
 | 
			
		||||
		if (!(p8 = PKCS12_decrypt_skey(bag, pass, passlen)))
 | 
			
		||||
				return 0;
 | 
			
		||||
@@ -861,28 +790,22 @@ int dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bag, char *pass,
 | 
			
		||||
	break;
 | 
			
		||||
 | 
			
		||||
	case NID_certBag:
 | 
			
		||||
        if (options & INFO)
 | 
			
		||||
            BIO_printf(bio_err, "Certificate bag\n");
 | 
			
		||||
        if (options & NOCERTS)
 | 
			
		||||
            return 1;
 | 
			
		||||
		if (options & INFO) BIO_printf (bio_err, "Certificate bag\n");
 | 
			
		||||
		if (options & NOCERTS) return 1;
 | 
			
		||||
                if (PKCS12_get_attr(bag, NID_localKeyID)) {
 | 
			
		||||
            if (options & CACERTS)
 | 
			
		||||
                return 1;
 | 
			
		||||
        } else if (options & CLCERTS)
 | 
			
		||||
            return 1;
 | 
			
		||||
			if (options & CACERTS) return 1;
 | 
			
		||||
		} else if (options & CLCERTS) return 1;
 | 
			
		||||
		print_attribs (out, bag->attrib, "Bag Attributes");
 | 
			
		||||
		if (M_PKCS12_cert_bag_type(bag) != NID_x509Certificate )
 | 
			
		||||
								 return 1;
 | 
			
		||||
        if (!(x509 = PKCS12_certbag2x509(bag)))
 | 
			
		||||
            return 0;
 | 
			
		||||
		if (!(x509 = PKCS12_certbag2x509(bag))) return 0;
 | 
			
		||||
		dump_cert_text (out, x509);
 | 
			
		||||
		PEM_write_bio_X509 (out, x509);
 | 
			
		||||
		X509_free(x509);
 | 
			
		||||
	break;
 | 
			
		||||
 | 
			
		||||
	case NID_safeContentsBag:
 | 
			
		||||
        if (options & INFO)
 | 
			
		||||
            BIO_printf(bio_err, "Safe Contents bag\n");
 | 
			
		||||
		if (options & INFO) BIO_printf (bio_err, "Safe Contents bag\n");
 | 
			
		||||
		print_attribs (out, bag->attrib, "Bag Attributes");
 | 
			
		||||
		return dump_certs_pkeys_bags (out, bag->value.safes, pass,
 | 
			
		||||
							    passlen, options, pempass);
 | 
			
		||||
@@ -907,19 +830,15 @@ int get_cert_chain(X509 *cert, X509_STORE *store, STACK_OF(X509) **chain)
 | 
			
		||||
	STACK_OF(X509) *chn;
 | 
			
		||||
	int i = 0;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * 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 function
 | 
			
		||||
     * is less obvious.
 | 
			
		||||
     */
 | 
			
		||||
	/* 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
 | 
			
		||||
	 * function is less obvious. */
 | 
			
		||||
	X509_STORE_CTX_init(&store_ctx, store, cert, NULL);
 | 
			
		||||
	if (X509_verify_cert(&store_ctx) <= 0) {
 | 
			
		||||
		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
 | 
			
		||||
             */
 | 
			
		||||
			/* avoid returning 0 if X509_verify_cert() did not
 | 
			
		||||
			 * set an appropriate error value in the context */
 | 
			
		||||
			i = -1;
 | 
			
		||||
		chn = NULL;
 | 
			
		||||
		goto err;
 | 
			
		||||
@@ -970,15 +889,13 @@ int cert_load(BIO *in, STACK_OF(X509) *sk)
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
	CRYPTO_pop_info();
 | 
			
		||||
#endif
 | 
			
		||||
    if (ret)
 | 
			
		||||
        ERR_clear_error();
 | 
			
		||||
	if(ret) ERR_clear_error();
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Generalised attribute print: handle PKCS#8 and bag attributes */
 | 
			
		||||
 | 
			
		||||
int print_attribs(BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst,
 | 
			
		||||
                  const char *name)
 | 
			
		||||
int print_attribs (BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst,const char *name)
 | 
			
		||||
{
 | 
			
		||||
	X509_ATTRIBUTE *attr;
 | 
			
		||||
	ASN1_TYPE *av;
 | 
			
		||||
@@ -1000,8 +917,7 @@ int print_attribs(BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst,
 | 
			
		||||
		if(attr_nid == NID_undef) {
 | 
			
		||||
			i2a_ASN1_OBJECT (out, attr->object);
 | 
			
		||||
			BIO_printf(out, ": ");
 | 
			
		||||
        } else
 | 
			
		||||
            BIO_printf(out, "%s: ", OBJ_nid2ln(attr_nid));
 | 
			
		||||
		} else BIO_printf(out, "%s: ", OBJ_nid2ln(attr_nid));
 | 
			
		||||
 | 
			
		||||
		if(sk_ASN1_TYPE_num(attr->value.set)) {
 | 
			
		||||
			av = sk_ASN1_TYPE_value(attr->value.set, 0);
 | 
			
		||||
@@ -1029,8 +945,7 @@ int print_attribs(BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst,
 | 
			
		||||
					BIO_printf(out, "<Unsupported tag %d>\n", av->type);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
        } else
 | 
			
		||||
            BIO_printf(out, "<No Values>\n");
 | 
			
		||||
		} else BIO_printf(out, "<No Values>\n");
 | 
			
		||||
	}
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
@@ -1038,20 +953,21 @@ int print_attribs(BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst,
 | 
			
		||||
void hex_prin(BIO *out, unsigned char *buf, int len)
 | 
			
		||||
{
 | 
			
		||||
	int i;
 | 
			
		||||
    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")) {
 | 
			
		||||
	if (!strcmp(str, "NONE"))
 | 
			
		||||
		{
 | 
			
		||||
		*ppbe = -1;
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
	*ppbe=OBJ_txt2nid(str);
 | 
			
		||||
    if (*ppbe == NID_undef) {
 | 
			
		||||
	if (*ppbe == NID_undef)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Unknown PBE algorithm %s\n", str);
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										124
									
								
								apps/pkcs7.c
									
									
									
									
									
								
							
							
						
						
									
										124
									
								
								apps/pkcs7.c
									
									
									
									
									
								
							@@ -71,8 +71,7 @@
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	pkcs7_main
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
@@ -111,24 +110,29 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	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;
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
@@ -137,13 +141,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		else if (strcmp(*argv,"-print_certs") == 0)
 | 
			
		||||
			print_certs=1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
        else {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
@@ -152,7 +157,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badops) {
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
@@ -160,14 +166,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		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," -out arg      output file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -print_certs  print any certs or crl in the input\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -text         print full details of certificates\n");
 | 
			
		||||
		BIO_printf(bio_err," -print_certs  print any certs or crl in the input\n");
 | 
			
		||||
		BIO_printf(bio_err," -text         print full details of certificates\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout        don't output encoded data\n");
 | 
			
		||||
#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
 | 
			
		||||
		ret = 1;
 | 
			
		||||
		goto end;
 | 
			
		||||
@@ -181,16 +184,19 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
            if (in == NULL) {
 | 
			
		||||
		if (in == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -200,17 +206,20 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		p7=d2i_PKCS7_bio(in,NULL);
 | 
			
		||||
	else if (informat == FORMAT_PEM)
 | 
			
		||||
		p7=PEM_read_bio_PKCS7(in,NULL,NULL,NULL);
 | 
			
		||||
    else {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified for pkcs7 object\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (p7 == NULL) {
 | 
			
		||||
	if (p7 == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load PKCS7 object\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
@@ -218,8 +227,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -228,12 +240,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if (p7_print)
 | 
			
		||||
		PKCS7_print_ctx(out, p7, 0, NULL);
 | 
			
		||||
 | 
			
		||||
    if (print_certs) {
 | 
			
		||||
	if (print_certs)
 | 
			
		||||
		{
 | 
			
		||||
		STACK_OF(X509) *certs=NULL;
 | 
			
		||||
		STACK_OF(X509_CRL) *crls=NULL;
 | 
			
		||||
 | 
			
		||||
		i=OBJ_obj2nid(p7->type);
 | 
			
		||||
        switch (i) {
 | 
			
		||||
		switch (i)
 | 
			
		||||
			{
 | 
			
		||||
		case NID_pkcs7_signed:
 | 
			
		||||
			certs=p7->d.sign->cert;
 | 
			
		||||
			crls=p7->d.sign->crl;
 | 
			
		||||
@@ -246,31 +260,31 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
        if (certs != NULL) {
 | 
			
		||||
		if (certs != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			X509 *x;
 | 
			
		||||
 | 
			
		||||
            for (i = 0; i < sk_X509_num(certs); i++) {
 | 
			
		||||
			for (i=0; i<sk_X509_num(certs); i++)
 | 
			
		||||
				{
 | 
			
		||||
				x=sk_X509_value(certs,i);
 | 
			
		||||
                if (text)
 | 
			
		||||
                    X509_print(out, x);
 | 
			
		||||
                else
 | 
			
		||||
                    dump_cert_text(out, x);
 | 
			
		||||
				if(text) X509_print(out, x);
 | 
			
		||||
				else dump_cert_text(out, x);
 | 
			
		||||
 | 
			
		||||
                if (!noout)
 | 
			
		||||
                    PEM_write_bio_X509(out, x);
 | 
			
		||||
				if(!noout) PEM_write_bio_X509(out,x);
 | 
			
		||||
				BIO_puts(out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
        if (crls != NULL) {
 | 
			
		||||
		if (crls != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			X509_CRL *crl;
 | 
			
		||||
 | 
			
		||||
            for (i = 0; i < sk_X509_CRL_num(crls); i++) {
 | 
			
		||||
			for (i=0; i<sk_X509_CRL_num(crls); i++)
 | 
			
		||||
				{
 | 
			
		||||
				crl=sk_X509_CRL_value(crls,i);
 | 
			
		||||
 | 
			
		||||
				X509_CRL_print(out, crl);
 | 
			
		||||
 | 
			
		||||
                if (!noout)
 | 
			
		||||
                    PEM_write_bio_X509_CRL(out, crl);
 | 
			
		||||
				if(!noout)PEM_write_bio_X509_CRL(out,crl);
 | 
			
		||||
				BIO_puts(out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
@@ -289,7 +303,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
        if (!i) {
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to write pkcs7 object\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -297,12 +312,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
    if (p7 != NULL)
 | 
			
		||||
        PKCS7_free(p7);
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
	if (p7 != NULL) PKCS7_free(p7);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										235
									
								
								apps/pkcs8.c
									
									
									
									
									
								
							
							
						
						
									
										235
									
								
								apps/pkcs8.c
									
									
									
									
									
								
							@@ -1,7 +1,6 @@
 | 
			
		||||
/* pkcs8.c */
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 1999-2004.
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 1999-2004.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -91,8 +90,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
	if (bio_err == NULL) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
@@ -103,40 +101,59 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	OpenSSL_add_all_algorithms();
 | 
			
		||||
	args = argv + 1;
 | 
			
		||||
    while (!badarg && *args && *args[0] == '-') {
 | 
			
		||||
        if (!strcmp(*args, "-v2")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
	while (!badarg && *args && *args[0] == '-')
 | 
			
		||||
		{
 | 
			
		||||
		if (!strcmp(*args,"-v2"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				cipher=EVP_get_cipherbyname(*args);
 | 
			
		||||
                if (!cipher) {
 | 
			
		||||
                    BIO_printf(bio_err, "Unknown cipher %s\n", *args);
 | 
			
		||||
				if (!cipher)
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,
 | 
			
		||||
						 "Unknown cipher %s\n", *args);
 | 
			
		||||
					badarg = 1;
 | 
			
		||||
					}
 | 
			
		||||
            } else
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-v1")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-v1"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				pbe_nid=OBJ_txt2nid(*args);
 | 
			
		||||
                if (pbe_nid == NID_undef) {
 | 
			
		||||
                    BIO_printf(bio_err, "Unknown PBE algorithm %s\n", *args);
 | 
			
		||||
				if (pbe_nid == NID_undef)
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,
 | 
			
		||||
						 "Unknown PBE algorithm %s\n", *args);
 | 
			
		||||
					badarg = 1;
 | 
			
		||||
					}
 | 
			
		||||
            } else
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-inform")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-inform"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				informat=str2fmt(*args);
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-outform")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-outform"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outformat=str2fmt(*args);
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-topk8"))
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-topk8"))
 | 
			
		||||
			topk8 = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-noiter"))
 | 
			
		||||
			iter = 1;
 | 
			
		||||
@@ -148,76 +165,76 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			p8_broken = PKCS8_NS_DB;
 | 
			
		||||
		else if (!strcmp (*args, "-embed"))
 | 
			
		||||
			p8_broken = PKCS8_EMBEDDED_PARAM;
 | 
			
		||||
        else if (!strcmp(*args, "-passin")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (!strcmp(*args,"-passin"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			passargin= *(++args);
 | 
			
		||||
        } else if (!strcmp(*args, "-passout")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
		else if (strcmp(*args,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			engine= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
        else if (!strcmp(*args, "-in")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
		else if (!strcmp (*args, "-in"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				infile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-out")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-out"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outfile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else
 | 
			
		||||
            badarg = 1;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else badarg = 1;
 | 
			
		||||
		args++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badarg) {
 | 
			
		||||
	if (badarg)
 | 
			
		||||
		{
 | 
			
		||||
		bad:
 | 
			
		||||
		BIO_printf(bio_err, "Usage pkcs8 [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, "-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");
 | 
			
		||||
		BIO_printf(bio_err, "-passout arg    output file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err, "-topk8          output PKCS8 file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-nooct          use (nonstandard) no octet format\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-embed          use (nonstandard) embedded DSA parameters format\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-nsdb           use (nonstandard) DSA Netscape DB format\n");
 | 
			
		||||
		BIO_printf(bio_err, "-nooct          use (nonstandard) no octet format\n");
 | 
			
		||||
		BIO_printf(bio_err, "-embed          use (nonstandard) embedded DSA parameters format\n");
 | 
			
		||||
		BIO_printf(bio_err, "-nsdb           use (nonstandard) DSA Netscape DB format\n");
 | 
			
		||||
		BIO_printf(bio_err, "-noiter         use 1 as iteration count\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-nocrypt        use or expect unencrypted private key\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-v2 alg         use PKCS#5 v2.0 and cipher \"alg\"\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-v1 obj         use PKCS#5 v1.5 and cipher \"alg\"\n");
 | 
			
		||||
		BIO_printf(bio_err, "-nocrypt        use or expect unencrypted private key\n");
 | 
			
		||||
		BIO_printf(bio_err, "-v2 alg         use PKCS#5 v2.0 and cipher \"alg\"\n");
 | 
			
		||||
		BIO_printf(bio_err, "-v1 obj         use PKCS#5 v1.5 and cipher \"alg\"\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        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
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#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");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -225,20 +242,29 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if ((pbe_nid == -1) && !cipher)
 | 
			
		||||
		pbe_nid = NID_pbeWithMD5AndDES_CBC;
 | 
			
		||||
 | 
			
		||||
    if (infile) {
 | 
			
		||||
        if (!(in = BIO_new_file(infile, "rb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open input file %s\n", infile);
 | 
			
		||||
	if (infile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(in = BIO_new_file(infile, "rb")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open input file %s\n", infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    } else
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		in = BIO_new_fp (stdin, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "wb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open output file %s\n", outfile);
 | 
			
		||||
	if (outfile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(out = BIO_new_file (outfile, "wb")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    } else {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		out = BIO_new_fp (stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
@@ -247,37 +273,45 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
    if (topk8) {
 | 
			
		||||
        pkey = load_key(bio_err, infile, informat, 1, passin, e, "key");
 | 
			
		||||
	if (topk8)
 | 
			
		||||
		{
 | 
			
		||||
		pkey = load_key(bio_err, infile, informat, 1,
 | 
			
		||||
			passin, e, "key");
 | 
			
		||||
		if (!pkey)
 | 
			
		||||
			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");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
        if (nocrypt) {
 | 
			
		||||
		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 {
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
        } else {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (passout)
 | 
			
		||||
				p8pass = passout;
 | 
			
		||||
            else {
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				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))
 | 
			
		||||
					goto end;
 | 
			
		||||
				}
 | 
			
		||||
			app_RAND_load_file(NULL, bio_err, 0);
 | 
			
		||||
			if (!(p8 = PKCS8_encrypt(pbe_nid, cipher,
 | 
			
		||||
					p8pass, strlen(p8pass),
 | 
			
		||||
                                     NULL, 0, iter, p8inf))) {
 | 
			
		||||
					NULL, 0, iter, p8inf)))
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Error encrypting key\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
@@ -287,7 +321,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				PEM_write_bio_PKCS8(out, p8);
 | 
			
		||||
			else if (outformat == FORMAT_ASN1)
 | 
			
		||||
				i2d_PKCS8_bio(out, p8);
 | 
			
		||||
            else {
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
@@ -297,54 +332,65 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (nocrypt) {
 | 
			
		||||
	if (nocrypt)
 | 
			
		||||
		{
 | 
			
		||||
		if (informat == FORMAT_PEM) 
 | 
			
		||||
			p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in,NULL,NULL, NULL);
 | 
			
		||||
		else if (informat == FORMAT_ASN1)
 | 
			
		||||
			p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL);
 | 
			
		||||
        else {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    } else {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (informat == FORMAT_PEM) 
 | 
			
		||||
			p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL);
 | 
			
		||||
		else if (informat == FORMAT_ASN1)
 | 
			
		||||
			p8 = d2i_PKCS8_bio(in, NULL);
 | 
			
		||||
        else {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
        if (!p8) {
 | 
			
		||||
		if (!p8)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf (bio_err, "Error reading key\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (passin)
 | 
			
		||||
			p8pass = passin;
 | 
			
		||||
        else {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			p8pass = pass;
 | 
			
		||||
			EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0);
 | 
			
		||||
			}
 | 
			
		||||
		p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (!p8inf) {
 | 
			
		||||
	if (!p8inf)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error decrypting key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (!(pkey = EVP_PKCS82PKEY(p8inf))) {
 | 
			
		||||
	if (!(pkey = EVP_PKCS82PKEY(p8inf)))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error converting key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
    if (p8inf->broken) {
 | 
			
		||||
	if (p8inf->broken)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Warning: broken key encoding: ");
 | 
			
		||||
        switch (p8inf->broken) {
 | 
			
		||||
		switch (p8inf->broken)
 | 
			
		||||
			{
 | 
			
		||||
			case PKCS8_NO_OCTET:
 | 
			
		||||
			BIO_printf(bio_err, "No Octet String in PrivateKey\n");
 | 
			
		||||
			break;
 | 
			
		||||
@@ -371,7 +417,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout);
 | 
			
		||||
	else if (outformat == FORMAT_ASN1)
 | 
			
		||||
		i2d_PrivateKey_bio(out, pkey);
 | 
			
		||||
    else {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										141
									
								
								apps/pkey.c
									
									
									
									
									
								
							
							
						
						
									
										141
									
								
								apps/pkey.c
									
									
									
									
									
								
							@@ -1,7 +1,6 @@
 | 
			
		||||
/* apps/pkey.c */
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 2006
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 2006
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2006 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -96,103 +95,129 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	OpenSSL_add_all_algorithms();
 | 
			
		||||
	args = argv + 1;
 | 
			
		||||
    while (!badarg && *args && *args[0] == '-') {
 | 
			
		||||
        if (!strcmp(*args, "-inform")) {
 | 
			
		||||
            if (args[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]) {
 | 
			
		||||
				}
 | 
			
		||||
			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;
 | 
			
		||||
				}
 | 
			
		||||
			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;
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
		else if (strcmp(*args,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			engine= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
        else if (!strcmp(*args, "-in")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
		else if (!strcmp (*args, "-in"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				infile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-out")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-out"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outfile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (strcmp(*args, "-pubin") == 0) {
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-pubin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			pubin=1;
 | 
			
		||||
			pubout=1;
 | 
			
		||||
			pubtext=1;
 | 
			
		||||
        } else if (strcmp(*args, "-pubout") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-pubout") == 0)
 | 
			
		||||
			pubout=1;
 | 
			
		||||
        else if (strcmp(*args, "-text_pub") == 0) {
 | 
			
		||||
		else if (strcmp(*args,"-text_pub") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			pubtext=1;
 | 
			
		||||
			text=1;
 | 
			
		||||
        } else if (strcmp(*args, "-text") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*args,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
        else {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			cipher = EVP_get_cipherbyname(*args + 1);
 | 
			
		||||
            if (!cipher) {
 | 
			
		||||
                BIO_printf(bio_err, "Unknown cipher %s\n", *args + 1);
 | 
			
		||||
			if (!cipher)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Unknown cipher %s\n",
 | 
			
		||||
								*args + 1);
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		args++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badarg) {
 | 
			
		||||
	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, "-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");
 | 
			
		||||
		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");
 | 
			
		||||
		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)) {
 | 
			
		||||
	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);
 | 
			
		||||
	if (outfile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(out = BIO_new_file (outfile, "wb")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    } else {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		out = BIO_new_fp (stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
@@ -206,30 +231,38 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		pkey = load_pubkey(bio_err, infile, informat, 1,
 | 
			
		||||
			passin, e, "Public Key");
 | 
			
		||||
	else
 | 
			
		||||
        pkey = load_key(bio_err, infile, informat, 1, passin, e, "key");
 | 
			
		||||
		pkey = load_key(bio_err, infile, informat, 1,
 | 
			
		||||
			passin, e, "key");
 | 
			
		||||
	if (!pkey)
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
    if (!noout) {
 | 
			
		||||
        if (outformat == FORMAT_PEM) {
 | 
			
		||||
	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) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (outformat == FORMAT_ASN1)
 | 
			
		||||
			{
 | 
			
		||||
			if (pubout)
 | 
			
		||||
				i2d_PUBKEY_bio(out, pkey);
 | 
			
		||||
			else
 | 
			
		||||
				i2d_PrivateKey_bio(out, pkey);
 | 
			
		||||
        } else {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (text) {
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		if (pubtext)
 | 
			
		||||
			EVP_PKEY_print_public(out, pkey, 0, NULL);
 | 
			
		||||
		else
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
/* apps/pkeyparam.c */
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 2006
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 2006
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2006 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -88,24 +87,30 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	OpenSSL_add_all_algorithms();
 | 
			
		||||
	args = argv + 1;
 | 
			
		||||
    while (!badarg && *args && *args[0] == '-') {
 | 
			
		||||
        if (!strcmp(*args, "-in")) {
 | 
			
		||||
            if (args[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]) {
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-out"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outfile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*args, "-engine") == 0) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*args,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			engine= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -117,7 +122,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		args++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badarg) {
 | 
			
		||||
	if (badarg)
 | 
			
		||||
		{
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		bad:
 | 
			
		||||
#endif
 | 
			
		||||
@@ -126,32 +132,40 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		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");
 | 
			
		||||
		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");
 | 
			
		||||
		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);
 | 
			
		||||
	if (infile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(in = BIO_new_file (infile, "r")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open input file %s\n", infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    } else
 | 
			
		||||
		}
 | 
			
		||||
	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);
 | 
			
		||||
	if (outfile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(out = BIO_new_file (outfile, "w")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    } else {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		out = BIO_new_fp (stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
@@ -162,7 +176,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	pkey = PEM_read_bio_Parameters(in, NULL);
 | 
			
		||||
    if (!pkey) {
 | 
			
		||||
	if (!pkey)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error reading parameters\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										229
									
								
								apps/pkeyutl.c
									
									
									
									
									
								
							
							
						
						
									
										229
									
								
								apps/pkeyutl.c
									
									
									
									
									
								
							@@ -1,6 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 2006.
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 2006.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2006 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -56,6 +55,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
@@ -107,66 +107,73 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
 | 
			
		||||
    if (!bio_err)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
	if(!bio_err) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	OpenSSL_add_all_algorithms();
 | 
			
		||||
	
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (!strcmp(*argv, "-in")) {
 | 
			
		||||
	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
 | 
			
		||||
                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");
 | 
			
		||||
				if (!ctx)
 | 
			
		||||
					{
 | 
			
		||||
					BIO_puts(bio_err,
 | 
			
		||||
						"Error initializing context\n");
 | 
			
		||||
					ERR_print_errors(bio_err);
 | 
			
		||||
					badarg = 1;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
        } else if (!strcmp(*argv, "-peerkey")) {
 | 
			
		||||
			}
 | 
			
		||||
		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));
 | 
			
		||||
			}
 | 
			
		||||
		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")) {
 | 
			
		||||
		else if(!strcmp(*argv, "-engine"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
@@ -195,20 +202,26 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			pkey_op = EVP_PKEY_OP_DECRYPT;
 | 
			
		||||
		else if(!strcmp(*argv, "-derive"))
 | 
			
		||||
			pkey_op = EVP_PKEY_OP_DERIVE;
 | 
			
		||||
        else if (strcmp(*argv, "-pkeyopt") == 0) {
 | 
			
		||||
		else if (strcmp(*argv,"-pkeyopt") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
            else if (!ctx) {
 | 
			
		||||
                BIO_puts(bio_err, "-pkeyopt command before -inkey\n");
 | 
			
		||||
			else if (!ctx)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_puts(bio_err,
 | 
			
		||||
					"-pkeyopt command before -inkey\n");
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
            } else if (pkey_ctrl_string(ctx, *(++argv)) <= 0) {
 | 
			
		||||
				}
 | 
			
		||||
			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) {
 | 
			
		||||
			}
 | 
			
		||||
		else badarg = 1;
 | 
			
		||||
		if(badarg)
 | 
			
		||||
			{
 | 
			
		||||
			usage();
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -216,17 +229,20 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (!ctx) {
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
		{
 | 
			
		||||
		usage();
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (sigfile && (pkey_op != EVP_PKEY_OP_VERIFY)) {
 | 
			
		||||
	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)) {
 | 
			
		||||
	if (!sigfile && (pkey_op == EVP_PKEY_OP_VERIFY))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(bio_err, "No signature file specified for verify\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -234,24 +250,33 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
/* 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");
 | 
			
		||||
	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
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "wb"))) {
 | 
			
		||||
	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 {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
@@ -261,32 +286,40 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    if (sigfile) {
 | 
			
		||||
	if (sigfile)
 | 
			
		||||
		{
 | 
			
		||||
		BIO *sigbio = BIO_new_file(sigfile, "rb");
 | 
			
		||||
        if (!sigbio) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open signature file %s\n", sigfile);
 | 
			
		||||
		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) {
 | 
			
		||||
		if (siglen <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error reading signature data\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
    if (in) {
 | 
			
		||||
	if (in)
 | 
			
		||||
		{
 | 
			
		||||
		/* Read the input data */
 | 
			
		||||
		buf_inlen = bio_to_mem(&buf_in, keysize * 10, in);
 | 
			
		||||
        if (buf_inlen <= 0) {
 | 
			
		||||
		if(buf_inlen <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error reading input Data\n");
 | 
			
		||||
			exit(1);
 | 
			
		||||
			}
 | 
			
		||||
        if (rev) {
 | 
			
		||||
		if(rev)
 | 
			
		||||
			{
 | 
			
		||||
			size_t i;
 | 
			
		||||
			unsigned char ctmp;
 | 
			
		||||
			size_t l = (size_t)buf_inlen;
 | 
			
		||||
            for (i = 0; i < l / 2; i++) {
 | 
			
		||||
			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;
 | 
			
		||||
@@ -294,7 +327,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (pkey_op == EVP_PKEY_OP_VERIFY) {
 | 
			
		||||
	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)
 | 
			
		||||
@@ -303,10 +337,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			BIO_puts(out, "Signature Verified Successfully\n");
 | 
			
		||||
		if (rv >= 0)
 | 
			
		||||
			goto end;
 | 
			
		||||
    } else {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{	
 | 
			
		||||
		rv = do_keyop(ctx, pkey_op, NULL, (size_t *)&buf_outlen,
 | 
			
		||||
			      buf_in, (size_t)buf_inlen);
 | 
			
		||||
        if (rv > 0) {
 | 
			
		||||
		if (rv > 0)
 | 
			
		||||
			{
 | 
			
		||||
			buf_out = OPENSSL_malloc(buf_outlen);
 | 
			
		||||
			if (!buf_out)
 | 
			
		||||
				rv = -1;
 | 
			
		||||
@@ -317,16 +354,19 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (rv <= 0) {
 | 
			
		||||
	if(rv <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Public Key operation error\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	ret = 0;
 | 
			
		||||
    if (asn1parse) {
 | 
			
		||||
	if(asn1parse)
 | 
			
		||||
		{
 | 
			
		||||
		if(!ASN1_parse_dump(out, buf_out, buf_outlen, 1, -1))
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
    } else if (hexdump)
 | 
			
		||||
		}
 | 
			
		||||
	else if(hexdump)
 | 
			
		||||
		BIO_dump(out, (char *)buf_out, buf_outlen);
 | 
			
		||||
	else
 | 
			
		||||
		BIO_write(out, buf_out, buf_outlen);
 | 
			
		||||
@@ -350,25 +390,21 @@ 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, "-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, "-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, "-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");
 | 
			
		||||
	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");
 | 
			
		||||
 | 
			
		||||
@@ -385,15 +421,18 @@ static EVP_PKEY_CTX *init_ctx(int *pkeysize,
 | 
			
		||||
	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)) {
 | 
			
		||||
		&& (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)) {
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, NULL, &passin, NULL))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    switch (key_type) {
 | 
			
		||||
	switch(key_type)
 | 
			
		||||
		{
 | 
			
		||||
		case KEY_PRIVKEY:
 | 
			
		||||
		pkey = load_key(bio_err, keyfile, keyform, 0,
 | 
			
		||||
			passin, e, "Private Key");
 | 
			
		||||
@@ -405,8 +444,10 @@ static EVP_PKEY_CTX *init_ctx(int *pkeysize,
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
		case KEY_CERT:
 | 
			
		||||
        x = load_cert(bio_err, keyfile, keyform, NULL, e, "Certificate");
 | 
			
		||||
        if (x) {
 | 
			
		||||
		x = load_cert(bio_err, keyfile, keyform,
 | 
			
		||||
			NULL, e, "Certificate");
 | 
			
		||||
		if(x)
 | 
			
		||||
			{
 | 
			
		||||
			pkey = X509_get_pubkey(x);
 | 
			
		||||
			X509_free(x);
 | 
			
		||||
			}
 | 
			
		||||
@@ -426,7 +467,8 @@ static EVP_PKEY_CTX *init_ctx(int *pkeysize,
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
    switch (pkey_op) {
 | 
			
		||||
	switch(pkey_op)
 | 
			
		||||
		{
 | 
			
		||||
		case EVP_PKEY_OP_SIGN:
 | 
			
		||||
		rv = EVP_PKEY_sign_init(ctx);
 | 
			
		||||
		break;
 | 
			
		||||
@@ -452,7 +494,8 @@ static EVP_PKEY_CTX *init_ctx(int *pkeysize,
 | 
			
		||||
		break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (rv <= 0) {
 | 
			
		||||
	if (rv <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
		ctx = NULL;
 | 
			
		||||
		}
 | 
			
		||||
@@ -464,6 +507,7 @@ static EVP_PKEY_CTX *init_ctx(int *pkeysize,
 | 
			
		||||
 | 
			
		||||
	return ctx;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
 | 
			
		||||
@@ -471,14 +515,16 @@ static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
 | 
			
		||||
	{
 | 
			
		||||
	EVP_PKEY *peer = NULL;
 | 
			
		||||
	int ret;
 | 
			
		||||
    if (!ctx) {
 | 
			
		||||
	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) {
 | 
			
		||||
	if (!peer)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error reading peer key %s\n", file);
 | 
			
		||||
		ERR_print_errors(err);
 | 
			
		||||
		return 0;
 | 
			
		||||
@@ -497,7 +543,8 @@ static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
 | 
			
		||||
		unsigned char *in, size_t inlen)
 | 
			
		||||
	{
 | 
			
		||||
	int rv = 0;
 | 
			
		||||
    switch (pkey_op) {
 | 
			
		||||
	switch(pkey_op)
 | 
			
		||||
		{
 | 
			
		||||
		case EVP_PKEY_OP_VERIFYRECOVER:
 | 
			
		||||
		rv  = EVP_PKEY_verify_recover(ctx, out, poutlen, in, inlen);
 | 
			
		||||
		break;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										23
									
								
								apps/prime.c
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								apps/prime.c
									
									
									
									
									
								
							@@ -52,6 +52,7 @@
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG prime_main
 | 
			
		||||
 | 
			
		||||
@@ -75,7 +76,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
    --argc;
 | 
			
		||||
    ++argv;
 | 
			
		||||
    while (argc >= 1 && **argv == '-') {
 | 
			
		||||
    while (argc >= 1 && **argv == '-')
 | 
			
		||||
	{
 | 
			
		||||
	if(!strcmp(*argv,"-hex"))
 | 
			
		||||
	    hex=1;
 | 
			
		||||
	else if(!strcmp(*argv,"-generate"))
 | 
			
		||||
@@ -92,7 +94,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		goto bad;
 | 
			
		||||
	    else
 | 
			
		||||
		checks=atoi(*++argv);
 | 
			
		||||
        else {
 | 
			
		||||
	else
 | 
			
		||||
	    {
 | 
			
		||||
	    BIO_printf(bio_err,"Unknown option '%s'\n",*argv);
 | 
			
		||||
	    goto bad;
 | 
			
		||||
	    }
 | 
			
		||||
@@ -100,12 +103,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	++argv;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    if (argv[0] == NULL && !generate) {
 | 
			
		||||
    if (argv[0] == NULL && !generate)
 | 
			
		||||
	{
 | 
			
		||||
	BIO_printf(bio_err,"No prime specified\n");
 | 
			
		||||
	goto bad;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    if ((bio_out = BIO_new(BIO_s_file())) != NULL) {
 | 
			
		||||
    if ((bio_out=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
	{
 | 
			
		||||
	BIO_set_fp(bio_out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
	    {
 | 
			
		||||
@@ -115,10 +120,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    if (generate) {
 | 
			
		||||
    if(generate)
 | 
			
		||||
	{
 | 
			
		||||
	char *s;
 | 
			
		||||
 | 
			
		||||
        if (!bits) {
 | 
			
		||||
	if(!bits)
 | 
			
		||||
	    {
 | 
			
		||||
	    BIO_printf(bio_err,"Specifiy the number of bits.\n");
 | 
			
		||||
	    return 1;
 | 
			
		||||
	    }
 | 
			
		||||
@@ -127,7 +134,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	s=hex ? BN_bn2hex(bn) : BN_bn2dec(bn);
 | 
			
		||||
	BIO_printf(bio_out,"%s\n",s);
 | 
			
		||||
	OPENSSL_free(s);
 | 
			
		||||
    } else {
 | 
			
		||||
	}
 | 
			
		||||
    else
 | 
			
		||||
	{
 | 
			
		||||
	if(hex)
 | 
			
		||||
	    BN_hex2bn(&bn,argv[0]);
 | 
			
		||||
	else
 | 
			
		||||
 
 | 
			
		||||
@@ -1,18 +1,16 @@
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
Proc-Type: 4,ENCRYPTED
 | 
			
		||||
DEK-Info: DES-EDE3-CBC,BA26229A1653B7FF
 | 
			
		||||
 | 
			
		||||
6nhWG8PKhTPO/s3ZvjUa6226NlKdvPDZFsNXOOoSUs9ejxpb/aj5huhs6qRYzsz9
 | 
			
		||||
Year47uaAZYhGD0vAagnNiBnYmjWEpN9G/wQxG7pgZThK1ZxDi63qn8aQ8UjuGHo
 | 
			
		||||
F6RpnnBQIAnWTWqr/Qsybtc5EoNkrj/Cpx0OfbSr6gZsFBCxwX1R1hT3/mhJ45f3
 | 
			
		||||
XMofY32Vdfx9/vtw1O7HmlHXQnXaqnbd9/nn1EpvFJG9+UjPoW7gV4jCOLuR4deE
 | 
			
		||||
jS8hm+cpkwXmFtk3VGjT9tQXPpMv3JpYfBqgGQoMAJ5Toq0DWcHi6Wg08PsD8lgy
 | 
			
		||||
vmTioPsRg+JGkJkJ8GnusgLpQdlQJbjzd7wGE6ElUFLfOxLo8bLlRHoriHNdWYhh
 | 
			
		||||
JjY0LyeTkovcmWxVjImc6ZyBz5Ly4t0BYf1gq3OkjsV91Q1taBxnhiavfizqMCAf
 | 
			
		||||
PPB3sLQnlXG77TOXkNxpqbZfEYrVZW2Nsqqdn8s07Uj4IMONZyq2odYKWFPMJBiM
 | 
			
		||||
POYwXjMAOcmFMTHYsVlhcUJuV6LOuipw/FEbTtPH/MYMxLe4zx65dYo1rb4iLKLS
 | 
			
		||||
gMtB0o/Wl4Xno3ZXh1ucicYnV2J7NpVcjVq+3SFiCRu2SrSkZHZ23EPS13Ec6fcz
 | 
			
		||||
8X/YGA2vTJ8MAOozAzQUwHQYvLk7bIoQVekqDq4p0AZQbhdspHpArCk0Ifqqzg/v
 | 
			
		||||
Uyky/zZiQYanzDenTSRVI/8wac3olxpU8QvbySxYqmbkgq6bTpXJfYFQfnAttEsC
 | 
			
		||||
dA4S5UFgyOPZluxCAM4yaJF3Ft6neutNwftuJQMbgCUi9vYg2tGdSw==
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
-----BEGIN PRIVATE KEY-----
 | 
			
		||||
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMo7DFNMqywUA1O/
 | 
			
		||||
qvWqCOm6rGrUAcR+dKsSXw6y2qiKO7APDDyotc0b4Mxwqjga98npex2RBIwUoCGJ
 | 
			
		||||
iEmMXo/a8RbXVUZ+ZwcAX7PC+XeXVC5qoajaBBkd2MvYmib/2PqnNrgvhHsUL5dO
 | 
			
		||||
xhC7cRqxLM/g45k3Yyw+nGa+WkTdAgMBAAECgYBMBT5w4dVG0I8foGFnz+9hzWab
 | 
			
		||||
Ee9IKjE5TcKmB93ilXQyjrWO5+zPmbc7ou6aAKk9IaPCTY1kCyzW7pho7Xdt+RFq
 | 
			
		||||
TgVXGZZfqtixO7f2/5oqZAkd00eOn9ZrhBpVMu4yXbbDvhDyFe4/oy0HGDjRUhxa
 | 
			
		||||
Lf6ZlBuTherxm4eFkQJBAPBQwRs9UtqaMAQlagA9pV5UsQjV1WT4IxDURMPfXgCd
 | 
			
		||||
ETNkB6pP0SmxQm5xhv9N2HY1UtoWpug9s0OU5IJB15sCQQDXbfbjiujNbuOxCFNw
 | 
			
		||||
68JZaCFVdNovyOWORkpenQLNEjVkmTCS9OayK09ADEYtsdpUGKeF+2EYBNkFr5px
 | 
			
		||||
CajnAkBMYI4PNz1HBuwt1SpMa0tMoMQnV7bbwVV7usskKbC5pzHZUHhzM6z5gEHp
 | 
			
		||||
0iEisT4Ty7zKXZqsgzefSgoaMAzzAkEAoCIaUhtwXzwdPfvNYnOs3J6doJMimECB
 | 
			
		||||
+lbfcyLM8TimvadtRt+KGEg/OYGmLNM2UiqdY+duzdbUpvhYGcwvYwJAQvaoi9z2
 | 
			
		||||
CkiwSs/PFrLaNlfLJmXRsUBzmiWYoh6+IQJJorEXz7ewI72ee9RBO4s746cgUFwH
 | 
			
		||||
Ri+qO+HhZFUBqQ==
 | 
			
		||||
-----END PRIVATE KEY-----
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								apps/progs.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								apps/progs.h
									
									
									
									
									
								
							@@ -44,6 +44,7 @@ extern int smime_main(int argc, char *argv[]);
 | 
			
		||||
extern int rand_main(int argc,char *argv[]);
 | 
			
		||||
extern int engine_main(int argc,char *argv[]);
 | 
			
		||||
extern int ocsp_main(int argc,char *argv[]);
 | 
			
		||||
extern int srp_main(int argc,char *argv[]);
 | 
			
		||||
extern int prime_main(int argc,char *argv[]);
 | 
			
		||||
extern int ts_main(int argc,char *argv[]);
 | 
			
		||||
 | 
			
		||||
@@ -106,16 +107,16 @@ FUNCTION functions[] = {
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"gendsa",gendsa_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"genpkey",genpkey_main},
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK)
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"s_server",s_server_main},
 | 
			
		||||
#endif
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK)
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"s_client",s_client_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SPEED
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"speed",speed_main},
 | 
			
		||||
#endif
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK)
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"s_time",s_time_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"version",version_main},
 | 
			
		||||
@@ -125,7 +126,7 @@ FUNCTION functions[] = {
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"crl2pkcs7",crl2pkcs7_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"sess_id",sess_id_main},
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK)
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ciphers",ciphers_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"nseq",nseq_main},
 | 
			
		||||
@@ -144,6 +145,9 @@ FUNCTION functions[] = {
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_OCSP
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ocsp",ocsp_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SRP
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"srp",srp_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"prime",prime_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ts",ts_main},
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ foreach (@ARGV)
 | 
			
		||||
	push(@files,$_);
 | 
			
		||||
	$str="\t{FUNC_TYPE_GENERAL,\"$_\",${_}_main},\n";
 | 
			
		||||
	if (($_ =~ /^s_/) || ($_ =~ /^ciphers$/))
 | 
			
		||||
		{ print "#if !defined(OPENSSL_NO_SOCK)\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$/))
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										58
									
								
								apps/rand.c
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								apps/rand.c
									
									
									
									
									
								
							@@ -66,8 +66,7 @@
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG rand_main
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * -out file         - write to file
 | 
			
		||||
/* -out file         - write to file
 | 
			
		||||
 * -rand file:file   - PRNG seed files
 | 
			
		||||
 * -base64           - base64 encode output
 | 
			
		||||
 * -hex              - hex encode output
 | 
			
		||||
@@ -101,44 +100,57 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	badopt = 0;
 | 
			
		||||
	i = 0;
 | 
			
		||||
    while (!badopt && argv[++i] != NULL) {
 | 
			
		||||
        if (strcmp(argv[i], "-out") == 0) {
 | 
			
		||||
	while (!badopt && argv[++i] != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		if (strcmp(argv[i], "-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if ((argv[i+1] != NULL) && (outfile == NULL))
 | 
			
		||||
				outfile = argv[++i];
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(argv[i], "-engine") == 0) {
 | 
			
		||||
		else if (strcmp(argv[i], "-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if ((argv[i+1] != NULL) && (engine == NULL))
 | 
			
		||||
				engine = argv[++i];
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
        else if (strcmp(argv[i], "-rand") == 0) {
 | 
			
		||||
		else if (strcmp(argv[i], "-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if ((argv[i+1] != NULL) && (inrand == NULL))
 | 
			
		||||
				inrand = argv[++i];
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
        } else if (strcmp(argv[i], "-base64") == 0) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(argv[i], "-base64") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!base64)
 | 
			
		||||
				base64 = 1;
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
        } else if (strcmp(argv[i], "-hex") == 0) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(argv[i], "-hex") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!hex)
 | 
			
		||||
				hex = 1;
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
        } else if (isdigit((unsigned char)argv[i][0])) {
 | 
			
		||||
            if (num < 0) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (isdigit((unsigned char)argv[i][0]))
 | 
			
		||||
			{
 | 
			
		||||
			if (num < 0)
 | 
			
		||||
				{
 | 
			
		||||
				r = sscanf(argv[i], "%d", &num);
 | 
			
		||||
				if (r == 0 || num < 0)
 | 
			
		||||
					badopt = 1;
 | 
			
		||||
            } else
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
        } else
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			badopt = 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -148,20 +160,20 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if (num < 0)
 | 
			
		||||
		badopt = 1;
 | 
			
		||||
	
 | 
			
		||||
    if (badopt) {
 | 
			
		||||
	if (badopt) 
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Usage: rand [options] num\n");
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
		BIO_printf(bio_err, "-out file             - write to file\n");
 | 
			
		||||
#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
 | 
			
		||||
        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               - base64 encode output\n");
 | 
			
		||||
		BIO_printf(bio_err, "-hex                  - hex encode output\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
@@ -176,7 +188,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		goto err;
 | 
			
		||||
	if (outfile != NULL)
 | 
			
		||||
		r = BIO_write_filename(out, outfile);
 | 
			
		||||
    else {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
@@ -188,14 +201,16 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if (r <= 0)
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
    if (base64) {
 | 
			
		||||
	if (base64)
 | 
			
		||||
		{
 | 
			
		||||
		BIO *b64 = BIO_new(BIO_f_base64());
 | 
			
		||||
		if (b64 == NULL)
 | 
			
		||||
			goto err;
 | 
			
		||||
		out = BIO_push(b64, out);
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
    while (num > 0) {
 | 
			
		||||
	while (num > 0) 
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char buf[4096];
 | 
			
		||||
		int chunk;
 | 
			
		||||
 | 
			
		||||
@@ -207,7 +222,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			goto err;
 | 
			
		||||
		if (!hex) 
 | 
			
		||||
			BIO_write(out, buf, chunk);
 | 
			
		||||
        else {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			for (i = 0; i < chunk; i++)
 | 
			
		||||
				BIO_printf(out, "%02x", buf[i]);
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1125
									
								
								apps/req.c
									
									
									
									
									
								
							
							
						
						
									
										1125
									
								
								apps/req.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										183
									
								
								apps/rsa.c
									
									
									
									
									
								
							
							
						
						
									
										183
									
								
								apps/rsa.c
									
									
									
									
									
								
							@@ -74,8 +74,7 @@
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	rsa_main
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (one of DER, NET or PEM)
 | 
			
		||||
/* -inform arg	- input format - default PEM (one of DER, NET or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
@@ -135,36 +134,42 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	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;
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passin") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passout") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -192,7 +197,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			modulus=1;
 | 
			
		||||
		else if (strcmp(*argv,"-check") == 0)
 | 
			
		||||
			check=1;
 | 
			
		||||
        else if ((enc = EVP_get_cipherbyname(&(argv[0][1]))) == NULL) {
 | 
			
		||||
		else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
@@ -201,53 +207,42 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badops) {
 | 
			
		||||
	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 - one of DER NET PEM\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -outform arg    output format - one of DER NET PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg     input format - one of DER NET PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg    output format - one of DER NET PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg         input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -sgckey         Use IIS SGC key format\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -passin arg     input file pass phrase source\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,
 | 
			
		||||
                   " -des            encrypt PEM output with cbc des\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -des3           encrypt PEM output with ede cbc des using 168 bit key\n");
 | 
			
		||||
		BIO_printf(bio_err," -passout arg    output file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err," -des            encrypt PEM output with cbc des\n");
 | 
			
		||||
		BIO_printf(bio_err," -des3           encrypt PEM output with ede cbc des using 168 bit key\n");
 | 
			
		||||
#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
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -seed           encrypt PEM output with cbc seed\n");
 | 
			
		||||
		BIO_printf(bio_err," -seed           encrypt PEM output with cbc seed\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		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");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -text           print the key in text\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout          don't print key out\n");
 | 
			
		||||
		BIO_printf(bio_err," -modulus        print the RSA key modulus\n");
 | 
			
		||||
		BIO_printf(bio_err," -check          verify key consistency\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -pubin          expect a public key in input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -pubin          expect a public key in input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -pubout         output a public key\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
		BIO_printf(bio_err," -engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -273,21 +268,25 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
		EVP_PKEY	*pkey;
 | 
			
		||||
 | 
			
		||||
        if (pubin) {
 | 
			
		||||
		if (pubin)
 | 
			
		||||
			{
 | 
			
		||||
			int tmpformat=-1;
 | 
			
		||||
            if (pubin == 2) {
 | 
			
		||||
			if (pubin == 2)
 | 
			
		||||
				{
 | 
			
		||||
				if (informat == FORMAT_PEM)
 | 
			
		||||
					tmpformat = FORMAT_PEMRSA;
 | 
			
		||||
				else if (informat == FORMAT_ASN1)
 | 
			
		||||
					tmpformat = FORMAT_ASN1RSA;
 | 
			
		||||
            } else if (informat == FORMAT_NETSCAPE && sgckey)
 | 
			
		||||
				}
 | 
			
		||||
			else if (informat == FORMAT_NETSCAPE && sgckey)
 | 
			
		||||
				tmpformat = FORMAT_IISSGC;
 | 
			
		||||
			else
 | 
			
		||||
				tmpformat = informat;
 | 
			
		||||
					
 | 
			
		||||
			pkey = load_pubkey(bio_err, infile, tmpformat, 1,
 | 
			
		||||
				passin, e, "Public Key");
 | 
			
		||||
        } else
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			pkey = load_key(bio_err, infile,
 | 
			
		||||
				(informat == FORMAT_NETSCAPE && sgckey ?
 | 
			
		||||
					FORMAT_IISSGC : informat), 1,
 | 
			
		||||
@@ -298,12 +297,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		EVP_PKEY_free(pkey);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    if (rsa == NULL) {
 | 
			
		||||
	if (rsa == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
@@ -311,73 +312,84 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (text) 
 | 
			
		||||
        if (!RSA_print(out, rsa, 0)) {
 | 
			
		||||
		if (!RSA_print(out,rsa,0))
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
    if (modulus) {
 | 
			
		||||
	if (modulus)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(out,"Modulus=");
 | 
			
		||||
		BN_print(out,rsa->n);
 | 
			
		||||
		BIO_printf(out,"\n");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (check) {
 | 
			
		||||
	if (check)
 | 
			
		||||
		{
 | 
			
		||||
		int r = RSA_check_key(rsa);
 | 
			
		||||
 | 
			
		||||
		if (r == 1)
 | 
			
		||||
			BIO_printf(out,"RSA key ok\n");
 | 
			
		||||
        else if (r == 0) {
 | 
			
		||||
		else if (r == 0)
 | 
			
		||||
			{
 | 
			
		||||
			unsigned long err;
 | 
			
		||||
 | 
			
		||||
			while ((err = ERR_peek_error()) != 0 &&
 | 
			
		||||
				ERR_GET_LIB(err) == ERR_LIB_RSA &&
 | 
			
		||||
				ERR_GET_FUNC(err) == RSA_F_RSA_CHECK_KEY &&
 | 
			
		||||
                   ERR_GET_REASON(err) != ERR_R_MALLOC_FAILURE) {
 | 
			
		||||
                BIO_printf(out, "RSA key error: %s\n",
 | 
			
		||||
                           ERR_reason_error_string(err));
 | 
			
		||||
				ERR_GET_REASON(err) != ERR_R_MALLOC_FAILURE)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(out, "RSA key error: %s\n", ERR_reason_error_string(err));
 | 
			
		||||
				ERR_get_error(); /* remove e from error stack */
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		
 | 
			
		||||
        if (r == -1 || ERR_peek_error() != 0) { /* should happen only if r ==
 | 
			
		||||
                                                 * -1 */
 | 
			
		||||
		if (r == -1 || ERR_peek_error() != 0) /* should happen only if r == -1 */
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
    if (noout) {
 | 
			
		||||
	if (noout)
 | 
			
		||||
		{
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	BIO_printf(bio_err,"writing RSA key\n");
 | 
			
		||||
	if 	(outformat == FORMAT_ASN1) {
 | 
			
		||||
        if (pubout || pubin) {
 | 
			
		||||
		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
 | 
			
		||||
    else if (outformat == FORMAT_NETSCAPE) {
 | 
			
		||||
	else if (outformat == FORMAT_NETSCAPE)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char *p,*pp;
 | 
			
		||||
		int size;
 | 
			
		||||
 | 
			
		||||
		i=1;
 | 
			
		||||
		size=i2d_RSA_NET(rsa,NULL,NULL, sgckey);
 | 
			
		||||
        if ((p = (unsigned char *)OPENSSL_malloc(size)) == NULL) {
 | 
			
		||||
		if ((p=(unsigned char *)OPENSSL_malloc(size)) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"Memory allocation failure\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -388,13 +400,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	else if (outformat == FORMAT_PEM) {
 | 
			
		||||
        if (pubout || pubin) {
 | 
			
		||||
		if(pubout || pubin)
 | 
			
		||||
			{
 | 
			
		||||
			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);
 | 
			
		||||
#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_RC4)
 | 
			
		||||
	} else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
 | 
			
		||||
@@ -413,20 +426,18 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (i <= 0) {
 | 
			
		||||
	if (i <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to write key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
    } else
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		ret=0;
 | 
			
		||||
end:
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (rsa != NULL)
 | 
			
		||||
        RSA_free(rsa);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
    if (passout)
 | 
			
		||||
        OPENSSL_free(passout);
 | 
			
		||||
	if(out != NULL) BIO_free_all(out);
 | 
			
		||||
	if(rsa != NULL) RSA_free(rsa);
 | 
			
		||||
	if(passin) OPENSSL_free(passin);
 | 
			
		||||
	if(passout) OPENSSL_free(passout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
/* rsautl.c */
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 2000.
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 2000.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2000 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -109,8 +108,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
 | 
			
		||||
    if (!bio_err)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
	if(!bio_err) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
@@ -118,7 +116,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	OpenSSL_add_all_algorithms();
 | 
			
		||||
	pad = RSA_PKCS1_PADDING;
 | 
			
		||||
	
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
	while(argc >= 1)
 | 
			
		||||
	{
 | 
			
		||||
		if (!strcmp(*argv,"-in")) {
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
@@ -155,34 +154,24 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			key_type = KEY_PUBKEY;
 | 
			
		||||
		} else if(!strcmp(*argv, "-certin")) {
 | 
			
		||||
			key_type = KEY_CERT;
 | 
			
		||||
        } else if (!strcmp(*argv, "-asn1parse"))
 | 
			
		||||
            asn1parse = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-hexdump"))
 | 
			
		||||
            hexdump = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-raw"))
 | 
			
		||||
            pad = RSA_NO_PADDING;
 | 
			
		||||
        else if (!strcmp(*argv, "-oaep"))
 | 
			
		||||
            pad = RSA_PKCS1_OAEP_PADDING;
 | 
			
		||||
        else if (!strcmp(*argv, "-ssl"))
 | 
			
		||||
            pad = RSA_SSLV23_PADDING;
 | 
			
		||||
        else if (!strcmp(*argv, "-pkcs"))
 | 
			
		||||
            pad = RSA_PKCS1_PADDING;
 | 
			
		||||
        else if (!strcmp(*argv, "-x931"))
 | 
			
		||||
            pad = RSA_X931_PADDING;
 | 
			
		||||
		} 
 | 
			
		||||
		else if(!strcmp(*argv, "-asn1parse")) asn1parse = 1;
 | 
			
		||||
		else if(!strcmp(*argv, "-hexdump")) hexdump = 1;
 | 
			
		||||
		else if(!strcmp(*argv, "-raw")) pad = RSA_NO_PADDING;
 | 
			
		||||
		else if(!strcmp(*argv, "-oaep")) pad = RSA_PKCS1_OAEP_PADDING;
 | 
			
		||||
		else if(!strcmp(*argv, "-ssl")) pad = RSA_SSLV23_PADDING;
 | 
			
		||||
		else if(!strcmp(*argv, "-pkcs")) pad = RSA_PKCS1_PADDING;
 | 
			
		||||
		else if(!strcmp(*argv, "-x931")) pad = RSA_X931_PADDING;
 | 
			
		||||
		else if(!strcmp(*argv, "-sign")) {
 | 
			
		||||
			rsa_mode = RSA_SIGN;
 | 
			
		||||
			need_priv = 1;
 | 
			
		||||
        } else if (!strcmp(*argv, "-verify"))
 | 
			
		||||
            rsa_mode = RSA_VERIFY;
 | 
			
		||||
        else if (!strcmp(*argv, "-rev"))
 | 
			
		||||
            rev = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-encrypt"))
 | 
			
		||||
            rsa_mode = RSA_ENCRYPT;
 | 
			
		||||
		} else if(!strcmp(*argv, "-verify")) rsa_mode = RSA_VERIFY;
 | 
			
		||||
		else if(!strcmp(*argv, "-rev")) rev = 1;
 | 
			
		||||
		else if(!strcmp(*argv, "-encrypt")) rsa_mode = RSA_ENCRYPT;
 | 
			
		||||
		else if(!strcmp(*argv, "-decrypt")) {
 | 
			
		||||
			rsa_mode = RSA_DECRYPT;
 | 
			
		||||
			need_priv = 1;
 | 
			
		||||
        } else
 | 
			
		||||
            badarg = 1;
 | 
			
		||||
		} else badarg = 1;
 | 
			
		||||
		if(badarg) {
 | 
			
		||||
			usage();
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -195,6 +184,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf(bio_err, "A private key is needed for this operation\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
@@ -218,7 +208,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
		case KEY_CERT:
 | 
			
		||||
        x = load_cert(bio_err, keyfile, keyform, NULL, e, "Certificate");
 | 
			
		||||
		x = load_cert(bio_err, keyfile, keyform,
 | 
			
		||||
			NULL, e, "Certificate");
 | 
			
		||||
		if(x) {
 | 
			
		||||
			pkey = X509_get_pubkey(x);
 | 
			
		||||
			X509_free(x);
 | 
			
		||||
@@ -239,14 +230,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if(infile) {
 | 
			
		||||
		if(!(in = BIO_new_file(infile, "rb"))) {
 | 
			
		||||
			BIO_printf(bio_err, "Error Reading Input File\n");
 | 
			
		||||
			ERR_print_errors(bio_err);	
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
    } else
 | 
			
		||||
        in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
	} else in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if(outfile) {
 | 
			
		||||
		if(!(out = BIO_new_file(outfile, "wb"))) {
 | 
			
		||||
@@ -291,8 +282,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
		case RSA_SIGN:
 | 
			
		||||
        rsa_outlen =
 | 
			
		||||
            RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
			rsa_outlen  = RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
		case RSA_ENCRYPT:
 | 
			
		||||
@@ -300,8 +290,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
		case RSA_DECRYPT:
 | 
			
		||||
        rsa_outlen =
 | 
			
		||||
            RSA_private_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
			rsa_outlen  = RSA_private_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
@@ -316,20 +305,15 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		if(!ASN1_parse_dump(out, rsa_out, rsa_outlen, 1, -1)) {
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
    } else if (hexdump)
 | 
			
		||||
        BIO_dump(out, (char *)rsa_out, rsa_outlen);
 | 
			
		||||
    else
 | 
			
		||||
        BIO_write(out, rsa_out, rsa_outlen);
 | 
			
		||||
	} else if(hexdump) BIO_dump(out, (char *)rsa_out, rsa_outlen);
 | 
			
		||||
	else BIO_write(out, rsa_out, rsa_outlen);
 | 
			
		||||
	end:
 | 
			
		||||
	RSA_free(rsa);
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
    if (rsa_in)
 | 
			
		||||
        OPENSSL_free(rsa_in);
 | 
			
		||||
    if (rsa_out)
 | 
			
		||||
        OPENSSL_free(rsa_out);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
	if(rsa_in) OPENSSL_free(rsa_in);
 | 
			
		||||
	if(rsa_out) OPENSSL_free(rsa_out);
 | 
			
		||||
	if(passin) OPENSSL_free(passin);
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -341,12 +325,10 @@ static void usage()
 | 
			
		||||
	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 an RSA public\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               "-certin         input is a certificate carrying an RSA public key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-certin         input is a certificate carrying an RSA public key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-ssl            use SSL v2 padding\n");
 | 
			
		||||
	BIO_printf(bio_err, "-raw            use no padding\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               "-pkcs           use PKCS#1 v1.5 padding (default)\n");
 | 
			
		||||
	BIO_printf(bio_err, "-pkcs           use PKCS#1 v1.5 padding (default)\n");
 | 
			
		||||
	BIO_printf(bio_err, "-oaep           use PKCS#1 OAEP\n");
 | 
			
		||||
	BIO_printf(bio_err, "-sign           sign with private key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-verify         verify with public key\n");
 | 
			
		||||
@@ -354,8 +336,7 @@ static void usage()
 | 
			
		||||
	BIO_printf(bio_err, "-decrypt        decrypt with private key\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");
 | 
			
		||||
	BIO_printf(bio_err, "-engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
	BIO_printf (bio_err, "-passin arg    pass phrase source\n");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -108,8 +108,7 @@
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
/* conflicts with winsock2 stuff on netware */
 | 
			
		||||
#if !defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
#if !defined(OPENSSL_SYS_NETWARE)  /* conflicts with winsock2 stuff on netware */
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
@@ -123,9 +122,7 @@
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(OPENSSL_SYS_VMS) && !defined(FD_SET)
 | 
			
		||||
/*
 | 
			
		||||
 * VAX C does not defined fd_set and friends, but it's actually quite simple
 | 
			
		||||
 */
 | 
			
		||||
/* VAX C does not defined fd_set and friends, but it's actually quite simple */
 | 
			
		||||
/* These definitions are borrowed from SOCKETSHR.	/Richard Levitte */
 | 
			
		||||
#define MAX_NOFILE	32
 | 
			
		||||
#define	NBBY		 8		/* number of bits in a byte	*/
 | 
			
		||||
@@ -151,9 +148,7 @@ typedef fd_mask fd_set;
 | 
			
		||||
#define PORT_STR        "4433"
 | 
			
		||||
#define PROTOCOL        "tcp"
 | 
			
		||||
 | 
			
		||||
int do_server(int port, int type, int *ret,
 | 
			
		||||
              int (*cb) (char *hostname, int s, unsigned char *context),
 | 
			
		||||
              unsigned char *context);
 | 
			
		||||
int do_server(int port, int type, int *ret, int (*cb) (char *hostname, int s, unsigned char *context), unsigned char *context);
 | 
			
		||||
#ifdef HEADER_X509_H
 | 
			
		||||
int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx);
 | 
			
		||||
#endif
 | 
			
		||||
@@ -164,21 +159,18 @@ int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key);
 | 
			
		||||
int init_client(int *sock, char *server, int port, int type);
 | 
			
		||||
int should_retry(int i);
 | 
			
		||||
int extract_port(char *str, short *port_ptr);
 | 
			
		||||
int extract_host_port(char *str, char **host_ptr, unsigned char *ip,
 | 
			
		||||
                      short *p);
 | 
			
		||||
int extract_host_port(char *str,char **host_ptr,unsigned char *ip,short *p);
 | 
			
		||||
 | 
			
		||||
long MS_CALLBACK bio_dump_callback(BIO *bio, int cmd, const char *argp,
 | 
			
		||||
				   int argi, long argl, long ret);
 | 
			
		||||
 | 
			
		||||
#ifdef HEADER_SSL_H
 | 
			
		||||
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);
 | 
			
		||||
					unsigned char *data, int len,
 | 
			
		||||
					void *arg);
 | 
			
		||||
#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);
 | 
			
		||||
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);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										256
									
								
								apps/s_cb.c
									
									
									
									
									
								
							
							
						
						
									
										256
									
								
								apps/s_cb.c
									
									
									
									
									
								
							@@ -140,25 +140,32 @@ int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
	depth=	X509_STORE_CTX_get_error_depth(ctx);
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err,"depth=%d ",depth);
 | 
			
		||||
    if (err_cert) {
 | 
			
		||||
	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
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		BIO_puts(bio_err, "<no cert>\n");
 | 
			
		||||
    if (!ok) {
 | 
			
		||||
	if (!ok)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"verify error:num=%d:%s\n",err,
 | 
			
		||||
			X509_verify_cert_error_string(err));
 | 
			
		||||
        if (verify_depth >= depth) {
 | 
			
		||||
		if (verify_depth >= depth)
 | 
			
		||||
			{
 | 
			
		||||
			if (!verify_return_error)
 | 
			
		||||
				ok=1;
 | 
			
		||||
			verify_error=X509_V_OK;
 | 
			
		||||
        } else {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			ok=0;
 | 
			
		||||
			verify_error=X509_V_ERR_CERT_CHAIN_TOO_LONG;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    switch (err) {
 | 
			
		||||
	switch (err)
 | 
			
		||||
		{
 | 
			
		||||
	case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
 | 
			
		||||
		BIO_puts(bio_err,"issuer= ");
 | 
			
		||||
		X509_NAME_print_ex(bio_err, X509_get_issuer_name(err_cert),
 | 
			
		||||
@@ -190,29 +197,30 @@ int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
 | 
			
		||||
int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file)
 | 
			
		||||
	{
 | 
			
		||||
    if (cert_file != NULL) {
 | 
			
		||||
        /*-
 | 
			
		||||
	if (cert_file != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		/*
 | 
			
		||||
		SSL *ssl;
 | 
			
		||||
		X509 *x509;
 | 
			
		||||
		*/
 | 
			
		||||
 | 
			
		||||
		if (SSL_CTX_use_certificate_file(ctx,cert_file,
 | 
			
		||||
                                         SSL_FILETYPE_PEM) <= 0) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to get certificate from '%s'\n",
 | 
			
		||||
                       cert_file);
 | 
			
		||||
			SSL_FILETYPE_PEM) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to get certificate from '%s'\n",cert_file);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			return(0);
 | 
			
		||||
			}
 | 
			
		||||
        if (key_file == NULL)
 | 
			
		||||
            key_file = cert_file;
 | 
			
		||||
        if (SSL_CTX_use_PrivateKey_file(ctx, key_file, SSL_FILETYPE_PEM) <= 0) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to get private key from '%s'\n",
 | 
			
		||||
                       key_file);
 | 
			
		||||
		if (key_file == NULL) key_file=cert_file;
 | 
			
		||||
		if (SSL_CTX_use_PrivateKey_file(ctx,key_file,
 | 
			
		||||
			SSL_FILETYPE_PEM) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to get private key from '%s'\n",key_file);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			return(0);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
        /*-
 | 
			
		||||
		/*
 | 
			
		||||
		In theory this is no longer needed 
 | 
			
		||||
		ssl=SSL_new(ctx);
 | 
			
		||||
		x509=SSL_get_certificate(ssl);
 | 
			
		||||
@@ -227,18 +235,15 @@ int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file)
 | 
			
		||||
		SSL_free(ssl);
 | 
			
		||||
		*/
 | 
			
		||||
 | 
			
		||||
        /*
 | 
			
		||||
         * If we are using DSA, we can copy the parameters from the private
 | 
			
		||||
         * key
 | 
			
		||||
         */
 | 
			
		||||
		/* If we are using DSA, we can copy the parameters from
 | 
			
		||||
		 * the private key */
 | 
			
		||||
		
 | 
			
		||||
        /*
 | 
			
		||||
         * 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");
 | 
			
		||||
		
 | 
			
		||||
		/* 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);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@@ -249,23 +254,25 @@ int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key)
 | 
			
		||||
	{
 | 
			
		||||
	if (cert ==  NULL)
 | 
			
		||||
		return 1;
 | 
			
		||||
    if (SSL_CTX_use_certificate(ctx, cert) <= 0) {
 | 
			
		||||
	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) {
 | 
			
		||||
	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");
 | 
			
		||||
		
 | 
			
		||||
		/* 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;
 | 
			
		||||
@@ -277,15 +284,17 @@ long MS_CALLBACK bio_dump_callback(BIO *bio, int cmd, const char *argp,
 | 
			
		||||
	BIO *out;
 | 
			
		||||
 | 
			
		||||
	out=(BIO *)BIO_get_callback_arg(bio);
 | 
			
		||||
    if (out == NULL)
 | 
			
		||||
        return (ret);
 | 
			
		||||
	if (out == NULL) return(ret);
 | 
			
		||||
 | 
			
		||||
    if (cmd == (BIO_CB_READ | BIO_CB_RETURN)) {
 | 
			
		||||
	if (cmd == (BIO_CB_READ|BIO_CB_RETURN))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(out,"read from %p [%p] (%lu bytes => %ld (0x%lX))\n",
 | 
			
		||||
 			(void *)bio,argp,(unsigned long)argi,ret,ret);
 | 
			
		||||
		BIO_dump(out,argp,(int)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 %p [%p] (%lu bytes => %ld (0x%lX))\n",
 | 
			
		||||
			(void *)bio,argp,(unsigned long)argi,ret,ret);
 | 
			
		||||
		BIO_dump(out,argp,(int)ret);
 | 
			
		||||
@@ -300,42 +309,45 @@ void MS_CALLBACK apps_ssl_info_callback(const SSL *s, int where, int ret)
 | 
			
		||||
 | 
			
		||||
	w=where& ~SSL_ST_MASK;
 | 
			
		||||
 | 
			
		||||
    if (w & SSL_ST_CONNECT)
 | 
			
		||||
        str = "SSL_connect";
 | 
			
		||||
    else if (w & SSL_ST_ACCEPT)
 | 
			
		||||
        str = "SSL_accept";
 | 
			
		||||
    else
 | 
			
		||||
        str = "undefined";
 | 
			
		||||
	if (w & SSL_ST_CONNECT) str="SSL_connect";
 | 
			
		||||
	else if (w & SSL_ST_ACCEPT) str="SSL_accept";
 | 
			
		||||
	else str="undefined";
 | 
			
		||||
 | 
			
		||||
    if (where & SSL_CB_LOOP) {
 | 
			
		||||
	if (where & SSL_CB_LOOP)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"%s:%s\n",str,SSL_state_string_long(s));
 | 
			
		||||
    } else if (where & SSL_CB_ALERT) {
 | 
			
		||||
		}
 | 
			
		||||
	else if (where & SSL_CB_ALERT)
 | 
			
		||||
		{
 | 
			
		||||
		str=(where & SSL_CB_READ)?"read":"write";
 | 
			
		||||
		BIO_printf(bio_err,"SSL3 alert %s:%s:%s\n",
 | 
			
		||||
			str,
 | 
			
		||||
			SSL_alert_type_string_long(ret),
 | 
			
		||||
			SSL_alert_desc_string_long(ret));
 | 
			
		||||
    } else if (where & SSL_CB_EXIT) {
 | 
			
		||||
		}
 | 
			
		||||
	else if (where & SSL_CB_EXIT)
 | 
			
		||||
		{
 | 
			
		||||
		if (ret == 0)
 | 
			
		||||
			BIO_printf(bio_err,"%s:failed in %s\n",
 | 
			
		||||
				str,SSL_state_string_long(s));
 | 
			
		||||
        else if (ret < 0) {
 | 
			
		||||
		else if (ret < 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"%s:error in %s\n",
 | 
			
		||||
				str,SSL_state_string_long(s));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
	{
 | 
			
		||||
	BIO *bio = arg;
 | 
			
		||||
    const char *str_write_p, *str_version, *str_content_type =
 | 
			
		||||
        "", *str_details1 = "", *str_details2 = "";
 | 
			
		||||
	const char *str_write_p, *str_version, *str_content_type = "", *str_details1 = "", *str_details2= "";
 | 
			
		||||
	
 | 
			
		||||
	str_write_p = write_p ? ">>>" : "<<<";
 | 
			
		||||
 | 
			
		||||
    switch (version) {
 | 
			
		||||
	switch (version)
 | 
			
		||||
		{
 | 
			
		||||
	case SSL2_VERSION:
 | 
			
		||||
		str_version = "SSL 2.0";
 | 
			
		||||
		break;
 | 
			
		||||
@@ -345,6 +357,9 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type,
 | 
			
		||||
	case TLS1_VERSION:
 | 
			
		||||
		str_version = "TLS 1.0 ";
 | 
			
		||||
		break;
 | 
			
		||||
	case TLS1_1_VERSION:
 | 
			
		||||
		str_version = "TLS 1.1 ";
 | 
			
		||||
		break;
 | 
			
		||||
	case DTLS1_VERSION:
 | 
			
		||||
		str_version = "DTLS 1.0 ";
 | 
			
		||||
		break;
 | 
			
		||||
@@ -355,20 +370,23 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type,
 | 
			
		||||
		str_version = "???";
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (version == SSL2_VERSION) {
 | 
			
		||||
	if (version == SSL2_VERSION)
 | 
			
		||||
		{
 | 
			
		||||
		str_details1 = "???";
 | 
			
		||||
 | 
			
		||||
        if (len > 0) {
 | 
			
		||||
            switch (((const unsigned char *)buf)[0]) {
 | 
			
		||||
		if (len > 0)
 | 
			
		||||
			{
 | 
			
		||||
			switch (((const unsigned char*)buf)[0])
 | 
			
		||||
				{
 | 
			
		||||
				case 0:
 | 
			
		||||
					str_details1 = ", ERROR:";
 | 
			
		||||
					str_details2 = " ???";
 | 
			
		||||
                if (len >= 3) {
 | 
			
		||||
                    unsigned err =
 | 
			
		||||
                        (((const unsigned char *)buf)[1] << 8) +
 | 
			
		||||
                        ((const unsigned char *)buf)[2];
 | 
			
		||||
					if (len >= 3)
 | 
			
		||||
						{
 | 
			
		||||
						unsigned err = (((const unsigned char*)buf)[1]<<8) + ((const unsigned char*)buf)[2];
 | 
			
		||||
						
 | 
			
		||||
                    switch (err) {
 | 
			
		||||
						switch (err)
 | 
			
		||||
							{
 | 
			
		||||
						case 0x0001:
 | 
			
		||||
							str_details2 = " NO-CIPHER-ERROR";
 | 
			
		||||
							break;
 | 
			
		||||
@@ -415,8 +433,11 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type,
 | 
			
		||||
 | 
			
		||||
	if (version == SSL3_VERSION ||
 | 
			
		||||
	    version == TLS1_VERSION ||
 | 
			
		||||
        version == DTLS1_VERSION || version == DTLS1_BAD_VER) {
 | 
			
		||||
        switch (content_type) {
 | 
			
		||||
	    version == DTLS1_VERSION ||
 | 
			
		||||
	    version == DTLS1_BAD_VER)
 | 
			
		||||
		{
 | 
			
		||||
		switch (content_type)
 | 
			
		||||
			{
 | 
			
		||||
		case 20:
 | 
			
		||||
			str_content_type = "ChangeCipherSpec";
 | 
			
		||||
			break;
 | 
			
		||||
@@ -428,11 +449,14 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type,
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
        if (content_type == 21) { /* Alert */
 | 
			
		||||
		if (content_type == 21) /* Alert */
 | 
			
		||||
			{
 | 
			
		||||
			str_details1 = ", ???";
 | 
			
		||||
			
 | 
			
		||||
            if (len == 2) {
 | 
			
		||||
                switch (((const unsigned char *)buf)[0]) {
 | 
			
		||||
			if (len == 2)
 | 
			
		||||
				{
 | 
			
		||||
				switch (((const unsigned char*)buf)[0])
 | 
			
		||||
					{
 | 
			
		||||
				case 1:
 | 
			
		||||
					str_details1 = ", warning";
 | 
			
		||||
					break;
 | 
			
		||||
@@ -442,7 +466,8 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type,
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
				str_details2 = " ???";
 | 
			
		||||
                switch (((const unsigned char *)buf)[1]) {
 | 
			
		||||
				switch (((const unsigned char*)buf)[1])
 | 
			
		||||
					{
 | 
			
		||||
				case 0:
 | 
			
		||||
					str_details2 = " close_notify";
 | 
			
		||||
					break;
 | 
			
		||||
@@ -531,11 +556,14 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type,
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		
 | 
			
		||||
        if (content_type == 22) { /* Handshake */
 | 
			
		||||
		if (content_type == 22) /* Handshake */
 | 
			
		||||
			{
 | 
			
		||||
			str_details1 = "???";
 | 
			
		||||
 | 
			
		||||
            if (len > 0) {
 | 
			
		||||
                switch (((const unsigned char *)buf)[0]) {
 | 
			
		||||
			if (len > 0)
 | 
			
		||||
				{
 | 
			
		||||
				switch (((const unsigned char*)buf)[0])
 | 
			
		||||
					{
 | 
			
		||||
				case 0:
 | 
			
		||||
					str_details1 = ", HelloRequest";
 | 
			
		||||
					break;
 | 
			
		||||
@@ -574,11 +602,10 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type,
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
 | 
			
		||||
    if (len > 0) {
 | 
			
		||||
	if (len > 0)
 | 
			
		||||
		{
 | 
			
		||||
		size_t num, i;
 | 
			
		||||
		
 | 
			
		||||
		BIO_printf(bio, "   ");
 | 
			
		||||
@@ -587,7 +614,8 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type,
 | 
			
		||||
		if (num > 16)
 | 
			
		||||
			num = 16;
 | 
			
		||||
#endif
 | 
			
		||||
        for (i = 0; i < num; i++) {
 | 
			
		||||
		for (i = 0; i < num; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if (i % 16 == 0 && i > 0)
 | 
			
		||||
				BIO_printf(bio, "\n   ");
 | 
			
		||||
			BIO_printf(bio, " %02x", ((const unsigned char*)buf)[i]);
 | 
			
		||||
@@ -600,12 +628,14 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void MS_CALLBACK tlsext_cb(SSL *s, int client_server, int type,
 | 
			
		||||
                           unsigned char *data, int len, void *arg)
 | 
			
		||||
					unsigned char *data, int len,
 | 
			
		||||
					void *arg)
 | 
			
		||||
	{
 | 
			
		||||
	BIO *bio = arg;
 | 
			
		||||
	char *extname;
 | 
			
		||||
 | 
			
		||||
    switch (type) {
 | 
			
		||||
	switch(type)
 | 
			
		||||
		{
 | 
			
		||||
		case TLSEXT_TYPE_server_name:
 | 
			
		||||
		extname = "server name";
 | 
			
		||||
		break;
 | 
			
		||||
@@ -646,6 +676,10 @@ void MS_CALLBACK tlsext_cb(SSL *s, int client_server, int type,
 | 
			
		||||
		extname = "renegotiate";
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
		case TLSEXT_TYPE_signature_algorithms:
 | 
			
		||||
		extname = "signature algorithms";
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
#ifdef TLSEXT_TYPE_opaque_prf_input
 | 
			
		||||
		case TLSEXT_TYPE_opaque_prf_input:
 | 
			
		||||
		extname = "opaque PRF input";
 | 
			
		||||
@@ -659,13 +693,13 @@ void MS_CALLBACK tlsext_cb(SSL *s, int client_server, int type,
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	BIO_printf(bio, "TLS %s extension \"%s\" (id=%d), len=%d\n",
 | 
			
		||||
               client_server ? "server" : "client", extname, type, len);
 | 
			
		||||
			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)
 | 
			
		||||
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;
 | 
			
		||||
@@ -678,8 +712,10 @@ int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie,
 | 
			
		||||
	} peer;
 | 
			
		||||
 | 
			
		||||
	/* Initialize a random secret */
 | 
			
		||||
    if (!cookie_initialized) {
 | 
			
		||||
        if (!RAND_bytes(cookie_secret, COOKIE_SECRET_LENGTH)) {
 | 
			
		||||
	if (!cookie_initialized)
 | 
			
		||||
		{
 | 
			
		||||
		if (!RAND_bytes(cookie_secret, COOKIE_SECRET_LENGTH))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"error setting random cookie secret\n");
 | 
			
		||||
			return 0;
 | 
			
		||||
			}
 | 
			
		||||
@@ -691,7 +727,8 @@ int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie,
 | 
			
		||||
 | 
			
		||||
	/* Create buffer with peer's address and port */
 | 
			
		||||
	length = 0;
 | 
			
		||||
    switch (peer.sa.sa_family) {
 | 
			
		||||
	switch (peer.sa.sa_family)
 | 
			
		||||
		{
 | 
			
		||||
	case AF_INET:
 | 
			
		||||
		length += sizeof(struct in_addr);
 | 
			
		||||
		length += sizeof(peer.s4.sin_port);
 | 
			
		||||
@@ -708,22 +745,30 @@ int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie,
 | 
			
		||||
		}
 | 
			
		||||
	buffer = OPENSSL_malloc(length);
 | 
			
		||||
 | 
			
		||||
    if (buffer == NULL) {
 | 
			
		||||
	if (buffer == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"out of memory\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    switch (peer.sa.sa_family) {
 | 
			
		||||
	switch (peer.sa.sa_family)
 | 
			
		||||
		{
 | 
			
		||||
	case AF_INET:
 | 
			
		||||
        memcpy(buffer, &peer.s4.sin_port, sizeof(peer.s4.sin_port));
 | 
			
		||||
		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));
 | 
			
		||||
		       &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,
 | 
			
		||||
		       &peer.s6.sin6_port,
 | 
			
		||||
		       sizeof(peer.s6.sin6_port));
 | 
			
		||||
		memcpy(buffer + sizeof(peer.s6.sin6_port),
 | 
			
		||||
               &peer.s6.sin6_addr, sizeof(struct in6_addr));
 | 
			
		||||
		       &peer.s6.sin6_addr,
 | 
			
		||||
		       sizeof(struct in6_addr));
 | 
			
		||||
		break;
 | 
			
		||||
#endif
 | 
			
		||||
	default:
 | 
			
		||||
@@ -742,8 +787,7 @@ int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie,
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int MS_CALLBACK verify_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)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned char *buffer, result[EVP_MAX_MD_SIZE];
 | 
			
		||||
	unsigned int length, resultlength;
 | 
			
		||||
@@ -764,7 +808,8 @@ int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie,
 | 
			
		||||
 | 
			
		||||
	/* Create buffer with peer's address and port */
 | 
			
		||||
	length = 0;
 | 
			
		||||
    switch (peer.sa.sa_family) {
 | 
			
		||||
	switch (peer.sa.sa_family)
 | 
			
		||||
		{
 | 
			
		||||
	case AF_INET:
 | 
			
		||||
		length += sizeof(struct in_addr);
 | 
			
		||||
		length += sizeof(peer.s4.sin_port);
 | 
			
		||||
@@ -781,22 +826,30 @@ int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie,
 | 
			
		||||
		}
 | 
			
		||||
	buffer = OPENSSL_malloc(length);
 | 
			
		||||
	
 | 
			
		||||
    if (buffer == NULL) {
 | 
			
		||||
	if (buffer == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"out of memory\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    switch (peer.sa.sa_family) {
 | 
			
		||||
	switch (peer.sa.sa_family)
 | 
			
		||||
		{
 | 
			
		||||
	case AF_INET:
 | 
			
		||||
        memcpy(buffer, &peer.s4.sin_port, sizeof(peer.s4.sin_port));
 | 
			
		||||
		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));
 | 
			
		||||
		       &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,
 | 
			
		||||
		       &peer.s6.sin6_port,
 | 
			
		||||
		       sizeof(peer.s6.sin6_port));
 | 
			
		||||
		memcpy(buffer + sizeof(peer.s6.sin6_port),
 | 
			
		||||
               &peer.s6.sin6_addr, sizeof(struct in6_addr));
 | 
			
		||||
		       &peer.s6.sin6_addr,
 | 
			
		||||
		       sizeof(struct in6_addr));
 | 
			
		||||
		break;
 | 
			
		||||
#endif
 | 
			
		||||
	default:
 | 
			
		||||
@@ -809,8 +862,7 @@ int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie,
 | 
			
		||||
	     buffer, length, result, &resultlength);
 | 
			
		||||
	OPENSSL_free(buffer);
 | 
			
		||||
 | 
			
		||||
    if (cookie_len == resultlength
 | 
			
		||||
        && memcmp(result, cookie, resultlength) == 0)
 | 
			
		||||
	if (cookie_len == resultlength && memcmp(result, cookie, resultlength) == 0)
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1214
									
								
								apps/s_client.c
									
									
									
									
									
								
							
							
						
						
									
										1214
									
								
								apps/s_client.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1734
									
								
								apps/s_server.c
									
									
									
									
									
								
							
							
						
						
									
										1734
									
								
								apps/s_server.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										241
									
								
								apps/s_socket.c
									
									
									
									
									
								
							
							
						
						
									
										241
									
								
								apps/s_socket.c
									
									
									
									
									
								
							@@ -1,6 +1,4 @@
 | 
			
		||||
/*
 | 
			
		||||
 * apps/s_socket.c - socket-related functions used by s_client and s_server
 | 
			
		||||
 */
 | 
			
		||||
/* apps/s_socket.c -  socket-related functions used by s_client and s_server */
 | 
			
		||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -64,18 +62,10 @@
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <signal.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
 | 
			
		||||
 * recursive header file inclusion, resulting in the compiler complaining
 | 
			
		||||
 * that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which is
 | 
			
		||||
 * needed to have fileno() declared correctly...  So let's define u_int
 | 
			
		||||
 */
 | 
			
		||||
/* With IPv6, it looks like Digital has mixed up the proper order of
 | 
			
		||||
   recursive header file inclusion, resulting in the compiler complaining
 | 
			
		||||
   that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which
 | 
			
		||||
   is needed to have fileno() declared correctly...  So let's define u_int */
 | 
			
		||||
#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__U_INT)
 | 
			
		||||
#define __U_INT
 | 
			
		||||
typedef unsigned int u_int;
 | 
			
		||||
@@ -106,7 +96,8 @@ static struct hostent *GetHostByName(char *name);
 | 
			
		||||
static void ssl_sock_cleanup(void);
 | 
			
		||||
#endif
 | 
			
		||||
static int ssl_sock_init(void);
 | 
			
		||||
static int init_client_ip(int *sock, unsigned char ip[4], int port, int type);
 | 
			
		||||
static int init_client_ip(int *sock, const unsigned char ip[4], int port,
 | 
			
		||||
			  int type);
 | 
			
		||||
static int init_server(int *sock, int port, int type);
 | 
			
		||||
static int init_server_long(int *sock, int port,char *ip, int type);
 | 
			
		||||
static int do_accept(int acc_sock, int *sock, char **host);
 | 
			
		||||
@@ -135,8 +126,10 @@ extern HINSTANCE _hInstance;    /* nice global CRT provides */
 | 
			
		||||
static LONG FAR PASCAL topHookProc(HWND hwnd, UINT message, WPARAM wParam,
 | 
			
		||||
	     LPARAM lParam)
 | 
			
		||||
	{
 | 
			
		||||
    if (hwnd == topWnd) {
 | 
			
		||||
        switch (message) {
 | 
			
		||||
	if (hwnd == topWnd)
 | 
			
		||||
		{
 | 
			
		||||
		switch(message)
 | 
			
		||||
			{
 | 
			
		||||
		case WM_DESTROY:
 | 
			
		||||
		case WM_CLOSE:
 | 
			
		||||
			SetWindowLong(topWnd,GWL_WNDPROC,(LONG)lpTopWndProc);
 | 
			
		||||
@@ -159,7 +152,8 @@ static BOOL CALLBACK enumproc(HWND hwnd, LPARAM lParam)
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
static void ssl_sock_cleanup(void)
 | 
			
		||||
	{
 | 
			
		||||
    if (wsa_init_done) {
 | 
			
		||||
	if (wsa_init_done)
 | 
			
		||||
		{
 | 
			
		||||
		wsa_init_done=0;
 | 
			
		||||
#ifndef OPENSSL_SYS_WINCE
 | 
			
		||||
		WSACancelBlockingCall();
 | 
			
		||||
@@ -170,7 +164,8 @@ static void ssl_sock_cleanup(void)
 | 
			
		||||
#elif defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK)
 | 
			
		||||
static void sock_cleanup(void)
 | 
			
		||||
    {
 | 
			
		||||
    if (wsa_init_done) {
 | 
			
		||||
    if (wsa_init_done)
 | 
			
		||||
        {
 | 
			
		||||
        wsa_init_done=0;
 | 
			
		||||
		WSACleanup();
 | 
			
		||||
		}
 | 
			
		||||
@@ -185,7 +180,8 @@ static int ssl_sock_init(void)
 | 
			
		||||
	if (sock_init())
 | 
			
		||||
		return (0);
 | 
			
		||||
#elif defined(OPENSSL_SYS_WINDOWS)
 | 
			
		||||
    if (!wsa_init_done) {
 | 
			
		||||
	if (!wsa_init_done)
 | 
			
		||||
		{
 | 
			
		||||
		int err;
 | 
			
		||||
	  
 | 
			
		||||
#ifdef SIGINT
 | 
			
		||||
@@ -193,12 +189,13 @@ static int ssl_sock_init(void)
 | 
			
		||||
#endif
 | 
			
		||||
		wsa_init_done=1;
 | 
			
		||||
		memset(&wsa_state,0,sizeof(wsa_state));
 | 
			
		||||
        if (WSAStartup(0x0101, &wsa_state) != 0) {
 | 
			
		||||
		if (WSAStartup(0x0101,&wsa_state)!=0)
 | 
			
		||||
			{
 | 
			
		||||
			err=WSAGetLastError();
 | 
			
		||||
            BIO_printf(bio_err, "unable to start WINSOCK, error code=%d\n",
 | 
			
		||||
                       err);
 | 
			
		||||
			BIO_printf(bio_err,"unable to start WINSOCK, error code=%d\n",err);
 | 
			
		||||
			return(0);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_SYS_WIN16
 | 
			
		||||
		EnumTaskWindows(GetCurrentTask(),enumproc,0L);
 | 
			
		||||
		lpTopWndProc=(FARPROC)GetWindowLong(topWnd,GWL_WNDPROC);
 | 
			
		||||
@@ -212,7 +209,8 @@ static int ssl_sock_init(void)
 | 
			
		||||
   WSADATA wsaData;
 | 
			
		||||
   int err;
 | 
			
		||||
 | 
			
		||||
    if (!wsa_init_done) {
 | 
			
		||||
   if (!wsa_init_done)
 | 
			
		||||
      {
 | 
			
		||||
   
 | 
			
		||||
# ifdef SIGINT
 | 
			
		||||
      signal(SIGINT,(void (*)(int))sock_cleanup);
 | 
			
		||||
@@ -221,9 +219,9 @@ static int ssl_sock_init(void)
 | 
			
		||||
      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);
 | 
			
		||||
      if (err != 0)
 | 
			
		||||
         {
 | 
			
		||||
         BIO_printf(bio_err,"unable to start WINSOCK2, error code=%d\n",err);
 | 
			
		||||
         return(0);
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
@@ -235,20 +233,22 @@ int init_client(int *sock, char *host, int port, int type)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned char ip[4];
 | 
			
		||||
 | 
			
		||||
    if (!host_ip(host, &(ip[0]))) {
 | 
			
		||||
	ip[0] = ip[1] = ip[2] = ip[3] = 0;
 | 
			
		||||
	if (!host_ip(host,&(ip[0])))
 | 
			
		||||
		{
 | 
			
		||||
		return(0);
 | 
			
		||||
		}
 | 
			
		||||
	return(init_client_ip(sock,ip,port,type));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int init_client_ip(int *sock, unsigned char ip[4], int port, int type)
 | 
			
		||||
static int init_client_ip(int *sock, const unsigned char ip[4], int port,
 | 
			
		||||
			  int type)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned long addr;
 | 
			
		||||
	struct sockaddr_in them;
 | 
			
		||||
	int s,i;
 | 
			
		||||
 | 
			
		||||
    if (!ssl_sock_init())
 | 
			
		||||
        return (0);
 | 
			
		||||
	if (!ssl_sock_init()) return(0);
 | 
			
		||||
 | 
			
		||||
	memset((char *)&them,0,sizeof(them));
 | 
			
		||||
	them.sin_family=AF_INET;
 | 
			
		||||
@@ -256,7 +256,8 @@ static int init_client_ip(int *sock, unsigned char ip[4], int port, int type)
 | 
			
		||||
	addr=(unsigned long)
 | 
			
		||||
		((unsigned long)ip[0]<<24L)|
 | 
			
		||||
		((unsigned long)ip[1]<<16L)|
 | 
			
		||||
        ((unsigned long)ip[2] << 8L) | ((unsigned long)ip[3]);
 | 
			
		||||
		((unsigned long)ip[2]<< 8L)|
 | 
			
		||||
		((unsigned long)ip[3]);
 | 
			
		||||
	them.sin_addr.s_addr=htonl(addr);
 | 
			
		||||
 | 
			
		||||
	if (type == SOCK_STREAM)
 | 
			
		||||
@@ -264,61 +265,55 @@ static int init_client_ip(int *sock, unsigned char ip[4], int port, int type)
 | 
			
		||||
	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); }
 | 
			
		||||
 | 
			
		||||
#if defined(SO_KEEPALIVE) && !defined(OPENSSL_SYS_MPE)
 | 
			
		||||
    if (type == SOCK_STREAM) {
 | 
			
		||||
	if (type == SOCK_STREAM)
 | 
			
		||||
		{
 | 
			
		||||
		i=0;
 | 
			
		||||
		i=setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(char *)&i,sizeof(i));
 | 
			
		||||
        if (i < 0) {
 | 
			
		||||
            closesocket(s);
 | 
			
		||||
            perror("keepalive");
 | 
			
		||||
            return (0);
 | 
			
		||||
        }
 | 
			
		||||
		if (i < 0) { perror("keepalive"); return(0); }
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (connect(s, (struct sockaddr *)&them, sizeof(them)) == -1) {
 | 
			
		||||
        closesocket(s);
 | 
			
		||||
        perror("connect");
 | 
			
		||||
        return (0);
 | 
			
		||||
    }
 | 
			
		||||
	if (connect(s,(struct sockaddr *)&them,sizeof(them)) == -1)
 | 
			
		||||
		{ closesocket(s); perror("connect"); return(0); }
 | 
			
		||||
	*sock=s;
 | 
			
		||||
	return(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int do_server(int port, int type, int *ret,
 | 
			
		||||
              int (*cb) (char *hostname, int s, unsigned char *context),
 | 
			
		||||
              unsigned char *context)
 | 
			
		||||
int do_server(int port, int type, int *ret, int (*cb)(char *hostname, int s, unsigned char *context), unsigned char *context)
 | 
			
		||||
	{
 | 
			
		||||
	int sock;
 | 
			
		||||
	char *name = NULL;
 | 
			
		||||
	int accept_socket = 0;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
    if (!init_server(&accept_socket, port, type))
 | 
			
		||||
        return (0);
 | 
			
		||||
	if (!init_server(&accept_socket,port,type)) return(0);
 | 
			
		||||
 | 
			
		||||
    if (ret != NULL) {
 | 
			
		||||
	if (ret != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		*ret=accept_socket;
 | 
			
		||||
		/* return(1);*/
 | 
			
		||||
		}
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (type == SOCK_STREAM) {
 | 
			
		||||
            if (do_accept(accept_socket, &sock, &name) == 0) {
 | 
			
		||||
  	for (;;)
 | 
			
		||||
  		{
 | 
			
		||||
		if (type==SOCK_STREAM)
 | 
			
		||||
			{
 | 
			
		||||
			if (do_accept(accept_socket,&sock,&name) == 0)
 | 
			
		||||
				{
 | 
			
		||||
				SHUTDOWN(accept_socket);
 | 
			
		||||
				return(0);
 | 
			
		||||
				}
 | 
			
		||||
        } else
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			sock = accept_socket;
 | 
			
		||||
		i=(*cb)(name,sock, context);
 | 
			
		||||
        if (name != NULL)
 | 
			
		||||
            OPENSSL_free(name);
 | 
			
		||||
		if (name != NULL) OPENSSL_free(name);
 | 
			
		||||
		if (type==SOCK_STREAM)
 | 
			
		||||
			SHUTDOWN2(sock);
 | 
			
		||||
        if (i < 0) {
 | 
			
		||||
		if (i < 0)
 | 
			
		||||
			{
 | 
			
		||||
			SHUTDOWN2(accept_socket);
 | 
			
		||||
			return(i);
 | 
			
		||||
			}
 | 
			
		||||
@@ -331,8 +326,7 @@ static int init_server_long(int *sock, int port, char *ip, int type)
 | 
			
		||||
	struct sockaddr_in server;
 | 
			
		||||
	int s= -1;
 | 
			
		||||
 | 
			
		||||
    if (!ssl_sock_init())
 | 
			
		||||
        return (0);
 | 
			
		||||
	if (!ssl_sock_init()) return(0);
 | 
			
		||||
 | 
			
		||||
	memset((char *)&server,0,sizeof(server));
 | 
			
		||||
	server.sin_family=AF_INET;
 | 
			
		||||
@@ -352,27 +346,28 @@ static int init_server_long(int *sock, int port, char *ip, int type)
 | 
			
		||||
		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
 | 
			
		||||
		{
 | 
			
		||||
		int j = 1;
 | 
			
		||||
        setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void *)&j, sizeof j);
 | 
			
		||||
		setsockopt(s, SOL_SOCKET, SO_REUSEADDR,
 | 
			
		||||
			   (void *) &j, sizeof j);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
    if (bind(s, (struct sockaddr *)&server, sizeof(server)) == -1) {
 | 
			
		||||
	if (bind(s,(struct sockaddr *)&server,sizeof(server)) == -1)
 | 
			
		||||
		{
 | 
			
		||||
#ifndef OPENSSL_SYS_WINDOWS
 | 
			
		||||
		perror("bind");
 | 
			
		||||
#endif
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
	/* Make it 128 for linux */
 | 
			
		||||
    if (type == SOCK_STREAM && listen(s, 128) == -1)
 | 
			
		||||
        goto err;
 | 
			
		||||
	if (type==SOCK_STREAM && listen(s,128) == -1) goto err;
 | 
			
		||||
	*sock=s;
 | 
			
		||||
	ret=1;
 | 
			
		||||
err:
 | 
			
		||||
    if ((ret == 0) && (s != -1)) {
 | 
			
		||||
	if ((ret == 0) && (s != -1))
 | 
			
		||||
		{
 | 
			
		||||
		SHUTDOWN(s);
 | 
			
		||||
		}
 | 
			
		||||
	return(ret);
 | 
			
		||||
@@ -391,8 +386,7 @@ static int do_accept(int acc_sock, int *sock, char **host)
 | 
			
		||||
	int len;
 | 
			
		||||
/*	struct linger ling; */
 | 
			
		||||
 | 
			
		||||
    if (!ssl_sock_init())
 | 
			
		||||
        return (0);
 | 
			
		||||
	if (!ssl_sock_init()) return(0);
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_SYS_WINDOWS
 | 
			
		||||
redoit:
 | 
			
		||||
@@ -400,23 +394,22 @@ static int do_accept(int acc_sock, int *sock, char **host)
 | 
			
		||||
 | 
			
		||||
	memset((char *)&from,0,sizeof(from));
 | 
			
		||||
	len=sizeof(from);
 | 
			
		||||
    /*
 | 
			
		||||
     * Note: under VMS with SOCKETSHR the fourth parameter is currently of
 | 
			
		||||
     * type (int *) whereas under other systems it is (void *) if you don't
 | 
			
		||||
     * have a cast it will choke the compiler: if you do have a cast then you
 | 
			
		||||
     * can either go for (int *) or (void *).
 | 
			
		||||
	/* Note: under VMS with SOCKETSHR the fourth parameter is currently
 | 
			
		||||
	 * of type (int *) whereas under other systems it is (void *) if
 | 
			
		||||
	 * you don't have a cast it will choke the compiler: if you do
 | 
			
		||||
	 * have a cast then you can either go for (int *) or (void *).
 | 
			
		||||
	 */
 | 
			
		||||
	ret=accept(acc_sock,(struct sockaddr *)&from,(void *)&len);
 | 
			
		||||
    if (ret == INVALID_SOCKET) {
 | 
			
		||||
	if (ret == INVALID_SOCKET)
 | 
			
		||||
		{
 | 
			
		||||
#if defined(OPENSSL_SYS_WINDOWS) || (defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK))
 | 
			
		||||
		int i;
 | 
			
		||||
		i=WSAGetLastError();
 | 
			
		||||
		BIO_printf(bio_err,"accept error %d\n",i);
 | 
			
		||||
#else
 | 
			
		||||
        if (errno == EINTR) {
 | 
			
		||||
            /*
 | 
			
		||||
             * check_timeout();
 | 
			
		||||
             */
 | 
			
		||||
		if (errno == EINTR)
 | 
			
		||||
			{
 | 
			
		||||
			/*check_timeout(); */
 | 
			
		||||
			goto redoit;
 | 
			
		||||
			}
 | 
			
		||||
		fprintf(stderr,"errno=%d ",errno);
 | 
			
		||||
@@ -425,7 +418,7 @@ static int do_accept(int acc_sock, int *sock, char **host)
 | 
			
		||||
		return(0);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
/*
 | 
			
		||||
	ling.l_onoff=1;
 | 
			
		||||
	ling.l_linger=0;
 | 
			
		||||
	i=setsockopt(ret,SOL_SOCKET,SO_LINGER,(char *)&ling,sizeof(ling));
 | 
			
		||||
@@ -435,8 +428,7 @@ static int do_accept(int acc_sock, int *sock, char **host)
 | 
			
		||||
	if (i < 0) { perror("keepalive"); return(0); }
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
    if (host == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
	if (host == NULL) goto end;
 | 
			
		||||
#ifndef BIT_FIELD_LIMITS
 | 
			
		||||
	/* I should use WSAAsyncGetHostByName() under windows */
 | 
			
		||||
	h1=gethostbyaddr((char *)&from.sin_addr.s_addr,
 | 
			
		||||
@@ -445,27 +437,30 @@ static int do_accept(int acc_sock, int *sock, char **host)
 | 
			
		||||
	h1=gethostbyaddr((char *)&from.sin_addr,
 | 
			
		||||
		sizeof(struct in_addr),AF_INET);
 | 
			
		||||
#endif
 | 
			
		||||
    if (h1 == NULL) {
 | 
			
		||||
	if (h1 == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad gethostbyaddr\n");
 | 
			
		||||
		*host=NULL;
 | 
			
		||||
		/* return(0); */
 | 
			
		||||
    } else {
 | 
			
		||||
        if ((*host = (char *)OPENSSL_malloc(strlen(h1->h_name) + 1)) == NULL) {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if ((*host=(char *)OPENSSL_malloc(strlen(h1->h_name)+1)) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
            closesocket(ret);
 | 
			
		||||
			return(0);
 | 
			
		||||
			}
 | 
			
		||||
		BUF_strlcpy(*host,h1->h_name,strlen(h1->h_name)+1);
 | 
			
		||||
 | 
			
		||||
		h2=GetHostByName(*host);
 | 
			
		||||
        if (h2 == NULL) {
 | 
			
		||||
		if (h2 == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"gethostbyname failure\n");
 | 
			
		||||
            closesocket(ret);
 | 
			
		||||
			return(0);
 | 
			
		||||
			}
 | 
			
		||||
        if (h2->h_addrtype != AF_INET) {
 | 
			
		||||
		if (h2->h_addrtype != AF_INET)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"gethostbyname addr is not AF_INET\n");
 | 
			
		||||
            closesocket(ret);
 | 
			
		||||
			return(0);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@@ -481,7 +476,8 @@ int extract_host_port(char *str, char **host_ptr, unsigned char *ip,
 | 
			
		||||
 | 
			
		||||
	h=str;
 | 
			
		||||
	p=strchr(str,':');
 | 
			
		||||
    if (p == NULL) {
 | 
			
		||||
	if (p == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"no port defined\n");
 | 
			
		||||
		return(0);
 | 
			
		||||
		}
 | 
			
		||||
@@ -489,8 +485,7 @@ int extract_host_port(char *str, char **host_ptr, unsigned char *ip,
 | 
			
		||||
 | 
			
		||||
	if ((ip != NULL) && !host_ip(str,ip))
 | 
			
		||||
		goto err;
 | 
			
		||||
    if (host_ptr != NULL)
 | 
			
		||||
        *host_ptr = h;
 | 
			
		||||
	if (host_ptr != NULL) *host_ptr=h;
 | 
			
		||||
 | 
			
		||||
	if (!extract_port(p,port_ptr))
 | 
			
		||||
		goto err;
 | 
			
		||||
@@ -504,10 +499,11 @@ static int host_ip(char *str, unsigned char ip[4])
 | 
			
		||||
	unsigned int in[4]; 
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
    if (sscanf(str, "%u.%u.%u.%u", &(in[0]), &(in[1]), &(in[2]), &(in[3])) ==
 | 
			
		||||
        4) {
 | 
			
		||||
	if (sscanf(str,"%u.%u.%u.%u",&(in[0]),&(in[1]),&(in[2]),&(in[3])) == 4)
 | 
			
		||||
		{
 | 
			
		||||
		for (i=0; i<4; i++)
 | 
			
		||||
            if (in[i] > 255) {
 | 
			
		||||
			if (in[i] > 255)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"invalid IP address\n");
 | 
			
		||||
				goto err;
 | 
			
		||||
				}
 | 
			
		||||
@@ -515,19 +511,22 @@ static int host_ip(char *str, unsigned char ip[4])
 | 
			
		||||
		ip[1]=in[1];
 | 
			
		||||
		ip[2]=in[2];
 | 
			
		||||
		ip[3]=in[3];
 | 
			
		||||
    } else {                    /* do a gethostbyname */
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{ /* do a gethostbyname */
 | 
			
		||||
		struct hostent *he;
 | 
			
		||||
 | 
			
		||||
        if (!ssl_sock_init())
 | 
			
		||||
            return (0);
 | 
			
		||||
		if (!ssl_sock_init()) return(0);
 | 
			
		||||
 | 
			
		||||
		he=GetHostByName(str);
 | 
			
		||||
        if (he == NULL) {
 | 
			
		||||
		if (he == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"gethostbyname failure\n");
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
		/* cast to short because of win16 winsock definition */
 | 
			
		||||
        if ((short)he->h_addrtype != AF_INET) {
 | 
			
		||||
		if ((short)he->h_addrtype != AF_INET)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"gethostbyname addr is not AF_INET\n");
 | 
			
		||||
			return(0);
 | 
			
		||||
			}
 | 
			
		||||
@@ -549,9 +548,11 @@ int extract_port(char *str, short *port_ptr)
 | 
			
		||||
	i=atoi(str);
 | 
			
		||||
	if (i != 0)
 | 
			
		||||
		*port_ptr=(unsigned short)i;
 | 
			
		||||
    else {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		s=getservbyname(str,"tcp");
 | 
			
		||||
        if (s == NULL) {
 | 
			
		||||
		if (s == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"getservbyname failure for %s\n",str);
 | 
			
		||||
			return(0);
 | 
			
		||||
			}
 | 
			
		||||
@@ -561,7 +562,8 @@ int extract_port(char *str, short *port_ptr)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#define GHBN_NUM	4
 | 
			
		||||
static struct ghbn_cache_st {
 | 
			
		||||
static struct ghbn_cache_st
 | 
			
		||||
	{
 | 
			
		||||
	char name[128];
 | 
			
		||||
	struct hostent ent;
 | 
			
		||||
	unsigned long order;
 | 
			
		||||
@@ -576,30 +578,35 @@ static struct hostent *GetHostByName(char *name)
 | 
			
		||||
	int i,lowi=0;
 | 
			
		||||
	unsigned long low= (unsigned long)-1;
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < GHBN_NUM; i++) {
 | 
			
		||||
        if (low > ghbn_cache[i].order) {
 | 
			
		||||
	for (i=0; i<GHBN_NUM; i++)
 | 
			
		||||
		{
 | 
			
		||||
		if (low > ghbn_cache[i].order)
 | 
			
		||||
			{
 | 
			
		||||
			low=ghbn_cache[i].order;
 | 
			
		||||
			lowi=i;
 | 
			
		||||
			}
 | 
			
		||||
        if (ghbn_cache[i].order > 0) {
 | 
			
		||||
		if (ghbn_cache[i].order > 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (strncmp(name,ghbn_cache[i].name,128) == 0)
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (i == GHBN_NUM) {        /* no hit */
 | 
			
		||||
	if (i == GHBN_NUM) /* no hit*/
 | 
			
		||||
		{
 | 
			
		||||
		ghbn_miss++;
 | 
			
		||||
		ret=gethostbyname(name);
 | 
			
		||||
        if (ret == NULL)
 | 
			
		||||
            return (NULL);
 | 
			
		||||
		if (ret == NULL) return(NULL);
 | 
			
		||||
		/* else add to cache */
 | 
			
		||||
        if (strlen(name) < sizeof ghbn_cache[0].name) {
 | 
			
		||||
		if(strlen(name) < sizeof ghbn_cache[0].name)
 | 
			
		||||
			{
 | 
			
		||||
			strcpy(ghbn_cache[lowi].name,name);
 | 
			
		||||
            memcpy((char *)&(ghbn_cache[lowi].ent), ret,
 | 
			
		||||
                   sizeof(struct hostent));
 | 
			
		||||
			memcpy((char *)&(ghbn_cache[lowi].ent),ret,sizeof(struct hostent));
 | 
			
		||||
			ghbn_cache[lowi].order=ghbn_miss+ghbn_hits;
 | 
			
		||||
			}
 | 
			
		||||
		return(ret);
 | 
			
		||||
    } else {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		ghbn_hits++;
 | 
			
		||||
		ret= &(ghbn_cache[i].ent);
 | 
			
		||||
		ghbn_cache[i].order=ghbn_miss+ghbn_hits;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										178
									
								
								apps/s_time.c
									
									
									
									
									
								
							
							
						
						
									
										178
									
								
								apps/s_time.c
									
									
									
									
									
								
							@@ -58,7 +58,7 @@
 | 
			
		||||
 | 
			
		||||
#define NO_SHUTDOWN
 | 
			
		||||
 | 
			
		||||
/* ----------------------------------------
 | 
			
		||||
/*-----------------------------------------
 | 
			
		||||
   s_time - SSL client connection timer program
 | 
			
		||||
   Written and donated by Larry Streepy <streepy@healthcare.com>
 | 
			
		||||
  -----------------------------------------*/
 | 
			
		||||
@@ -93,10 +93,7 @@
 | 
			
		||||
 | 
			
		||||
#define SSL_CONNECT_NAME	"localhost:4433"
 | 
			
		||||
 | 
			
		||||
/* no default cert. */
 | 
			
		||||
/*
 | 
			
		||||
 * #define TEST_CERT "client.pem"
 | 
			
		||||
 */
 | 
			
		||||
/*#define TEST_CERT "client.pem" */ /* no default cert. */
 | 
			
		||||
 | 
			
		||||
#undef BUFSIZZ
 | 
			
		||||
#define BUFSIZZ 1024*10
 | 
			
		||||
@@ -186,8 +183,7 @@ static void s_time_usage(void)
 | 
			
		||||
 | 
			
		||||
	printf( "usage: s_time <args>\n\n" );
 | 
			
		||||
 | 
			
		||||
    printf("-connect host:port - host:port to connect to (default is %s)\n",
 | 
			
		||||
           SSL_CONNECT_NAME);
 | 
			
		||||
	printf("-connect host:port - host:port to connect to (default is %s)\n",SSL_CONNECT_NAME);
 | 
			
		||||
#ifdef FIONBIO
 | 
			
		||||
	printf("-nbio         - Run with non-blocking IO\n");
 | 
			
		||||
	printf("-ssl2         - Just use SSLv2\n");
 | 
			
		||||
@@ -216,19 +212,20 @@ static int parseArgs(int argc, char **argv)
 | 
			
		||||
    argv++;
 | 
			
		||||
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-connect") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	if (strcmp(*argv,"-connect") == 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (--argc < 1) goto bad;
 | 
			
		||||
		host= *(++argv);
 | 
			
		||||
		}
 | 
			
		||||
#if 0
 | 
			
		||||
        else if (strcmp(*argv, "-host") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	else if( strcmp(*argv,"-host") == 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (--argc < 1) goto bad;
 | 
			
		||||
		host= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-port") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		}
 | 
			
		||||
	else if( strcmp(*argv,"-port") == 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (--argc < 1) goto bad;
 | 
			
		||||
		port= *(++argv);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -239,39 +236,33 @@ static int parseArgs(int argc, char **argv)
 | 
			
		||||
	else if( strcmp(*argv,"-verify") == 0) {
 | 
			
		||||
 | 
			
		||||
	    tm_verify=SSL_VERIFY_PEER|SSL_VERIFY_CLIENT_ONCE;
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    verify_depth=atoi(*(++argv));
 | 
			
		||||
	    BIO_printf(bio_err,"verify depth is %d\n",verify_depth);
 | 
			
		||||
 | 
			
		||||
	} else if( strcmp(*argv,"-cert") == 0) {
 | 
			
		||||
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    t_cert_file= *(++argv);
 | 
			
		||||
 | 
			
		||||
	} else if( strcmp(*argv,"-key") == 0) {
 | 
			
		||||
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    t_key_file= *(++argv);
 | 
			
		||||
 | 
			
		||||
	} else if( strcmp(*argv,"-CApath") == 0) {
 | 
			
		||||
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    CApath= *(++argv);
 | 
			
		||||
 | 
			
		||||
	} else if( strcmp(*argv,"-CAfile") == 0) {
 | 
			
		||||
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    CAfile= *(++argv);
 | 
			
		||||
 | 
			
		||||
	} else if( strcmp(*argv,"-cipher") == 0) {
 | 
			
		||||
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    tm_cipher= *(++argv);
 | 
			
		||||
	}
 | 
			
		||||
#ifdef FIONBIO
 | 
			
		||||
@@ -279,15 +270,17 @@ static int parseArgs(int argc, char **argv)
 | 
			
		||||
	    t_nbio=1;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
        else if (strcmp(*argv, "-www") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	else if(strcmp(*argv,"-www") == 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (--argc < 1) goto bad;
 | 
			
		||||
		s_www_path= *(++argv);
 | 
			
		||||
            if (strlen(s_www_path) > MYBUFSIZ - 100) {
 | 
			
		||||
		if(strlen(s_www_path) > MYBUFSIZ-100)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"-www option too long\n");
 | 
			
		||||
			badop=1;
 | 
			
		||||
			}
 | 
			
		||||
        } else if (strcmp(*argv, "-bugs") == 0)
 | 
			
		||||
		}
 | 
			
		||||
	else if(strcmp(*argv,"-bugs") == 0)
 | 
			
		||||
	    st_bugs=1;
 | 
			
		||||
#ifndef OPENSSL_NO_SSL2
 | 
			
		||||
	else if(strcmp(*argv,"-ssl2") == 0)
 | 
			
		||||
@@ -299,10 +292,10 @@ static int parseArgs(int argc, char **argv)
 | 
			
		||||
#endif
 | 
			
		||||
	else if( strcmp(*argv,"-time") == 0) {
 | 
			
		||||
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    maxTime= atoi(*(++argv));
 | 
			
		||||
        } else {
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
	    BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
	    badop=1;
 | 
			
		||||
	    break;
 | 
			
		||||
@@ -312,8 +305,7 @@ static int parseArgs(int argc, char **argv)
 | 
			
		||||
	argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (perform == 0)
 | 
			
		||||
        perform = 3;
 | 
			
		||||
    if (perform == 0) perform=3;
 | 
			
		||||
 | 
			
		||||
    if(badop) {
 | 
			
		||||
bad:
 | 
			
		||||
@@ -370,13 +362,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	OpenSSL_add_ssl_algorithms();
 | 
			
		||||
    if ((tm_ctx = SSL_CTX_new(s_time_meth)) == NULL)
 | 
			
		||||
        return (1);
 | 
			
		||||
	if ((tm_ctx=SSL_CTX_new(s_time_meth)) == NULL) return(1);
 | 
			
		||||
 | 
			
		||||
	SSL_CTX_set_quiet_shutdown(tm_ctx,1);
 | 
			
		||||
 | 
			
		||||
    if (st_bugs)
 | 
			
		||||
        SSL_CTX_set_options(tm_ctx, SSL_OP_ALL);
 | 
			
		||||
	if (st_bugs) SSL_CTX_set_options(tm_ctx,SSL_OP_ALL);
 | 
			
		||||
	SSL_CTX_set_cipher_list(tm_ctx,tm_cipher);
 | 
			
		||||
	if(!set_cert_stuff(tm_ctx,t_cert_file,t_key_file)) 
 | 
			
		||||
		goto end;
 | 
			
		||||
@@ -384,10 +374,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	SSL_load_error_strings();
 | 
			
		||||
 | 
			
		||||
	if ((!SSL_CTX_load_verify_locations(tm_ctx,CAfile,CApath)) ||
 | 
			
		||||
        (!SSL_CTX_set_default_verify_paths(tm_ctx))) {
 | 
			
		||||
        /*
 | 
			
		||||
         * BIO_printf(bio_err,"error setting default verify locations\n");
 | 
			
		||||
         */
 | 
			
		||||
		(!SSL_CTX_set_default_verify_paths(tm_ctx)))
 | 
			
		||||
		{
 | 
			
		||||
		/* BIO_printf(bio_err,"error setting default verify locations\n"); */
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		/* goto end; */
 | 
			
		||||
		}
 | 
			
		||||
@@ -399,8 +388,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		fprintf( stderr, "No CIPHER specified\n" );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    if (!(perform & 1))
 | 
			
		||||
        goto next;
 | 
			
		||||
	if (!(perform & 1)) goto next;
 | 
			
		||||
	printf( "Collecting connection statistics for %d seconds\n", maxTime );
 | 
			
		||||
 | 
			
		||||
	/* Loop and time how long it takes to make connections */
 | 
			
		||||
@@ -408,9 +396,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	bytes_read=0;
 | 
			
		||||
	finishtime=(long)time(NULL)+maxTime;
 | 
			
		||||
	tm_Time_F(START);
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (finishtime < (long)time(NULL))
 | 
			
		||||
            break;
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (finishtime < (long)time(NULL)) break;
 | 
			
		||||
#ifdef WIN32_STUFF
 | 
			
		||||
 | 
			
		||||
		if( flushWinMsgs(0) == -1 )
 | 
			
		||||
@@ -423,13 +411,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		if( (scon = doConnection( NULL )) == NULL )
 | 
			
		||||
			goto end;
 | 
			
		||||
 | 
			
		||||
        if (s_www_path != NULL) {
 | 
			
		||||
            BIO_snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n",
 | 
			
		||||
                         s_www_path);
 | 
			
		||||
		if (s_www_path != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
			
		||||
			SSL_write(scon,buf,strlen(buf));
 | 
			
		||||
			while ((i=SSL_read(scon,buf,sizeof(buf))) > 0)
 | 
			
		||||
				bytes_read+=i;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
#ifdef NO_SHUTDOWN
 | 
			
		||||
		SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
 | 
			
		||||
#else
 | 
			
		||||
@@ -440,7 +429,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		nConn += 1;
 | 
			
		||||
		if (SSL_session_reused(scon))
 | 
			
		||||
			ver='r';
 | 
			
		||||
        else {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			ver=SSL_version(scon);
 | 
			
		||||
			if (ver == TLS1_VERSION)
 | 
			
		||||
				ver='t';
 | 
			
		||||
@@ -460,32 +450,28 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	totalTime += tm_Time_F(STOP); /* Add the time for this iteration */
 | 
			
		||||
 | 
			
		||||
	i=(int)((long)time(NULL)-finishtime+maxTime);
 | 
			
		||||
    printf
 | 
			
		||||
        ("\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n",
 | 
			
		||||
         nConn, totalTime, ((double)nConn / totalTime), bytes_read);
 | 
			
		||||
    printf
 | 
			
		||||
        ("%d connections in %ld real seconds, %ld bytes read per connection\n",
 | 
			
		||||
         nConn, (long)time(NULL) - finishtime + maxTime, bytes_read / nConn);
 | 
			
		||||
	printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read);
 | 
			
		||||
	printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * Now loop and time connections using the same session id over and over
 | 
			
		||||
     */
 | 
			
		||||
	/* Now loop and time connections using the same session id over and over */
 | 
			
		||||
 | 
			
		||||
next:
 | 
			
		||||
    if (!(perform & 2))
 | 
			
		||||
        goto end;
 | 
			
		||||
	if (!(perform & 2)) goto end;
 | 
			
		||||
	printf( "\n\nNow timing with session id reuse.\n" );
 | 
			
		||||
 | 
			
		||||
	/* Get an SSL object so we can reuse the session id */
 | 
			
		||||
    if ((scon = doConnection(NULL)) == NULL) {
 | 
			
		||||
	if( (scon = doConnection( NULL )) == NULL )
 | 
			
		||||
		{
 | 
			
		||||
		fprintf( stderr, "Unable to get connection\n" );
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (s_www_path != NULL) {
 | 
			
		||||
	if (s_www_path != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
			
		||||
		SSL_write(scon,buf,strlen(buf));
 | 
			
		||||
        while (SSL_read(scon, buf, sizeof(buf)) > 0) ;
 | 
			
		||||
		while (SSL_read(scon,buf,sizeof(buf)) > 0)
 | 
			
		||||
			;
 | 
			
		||||
		}
 | 
			
		||||
#ifdef NO_SHUTDOWN
 | 
			
		||||
	SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
 | 
			
		||||
@@ -503,9 +489,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	bytes_read=0;
 | 
			
		||||
	tm_Time_F(START);
 | 
			
		||||
		
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (finishtime < (long)time(NULL))
 | 
			
		||||
            break;
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (finishtime < (long)time(NULL)) break;
 | 
			
		||||
 | 
			
		||||
#ifdef WIN32_STUFF
 | 
			
		||||
		if( flushWinMsgs(0) == -1 )
 | 
			
		||||
@@ -518,13 +504,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	 	if( (doConnection( scon )) == NULL )
 | 
			
		||||
			goto end;
 | 
			
		||||
 | 
			
		||||
        if (s_www_path) {
 | 
			
		||||
            BIO_snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n",
 | 
			
		||||
                         s_www_path);
 | 
			
		||||
		if (s_www_path)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
			
		||||
			SSL_write(scon,buf,strlen(buf));
 | 
			
		||||
			while ((i=SSL_read(scon,buf,sizeof(buf))) > 0)
 | 
			
		||||
				bytes_read+=i;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
#ifdef NO_SHUTDOWN
 | 
			
		||||
		SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
 | 
			
		||||
#else
 | 
			
		||||
@@ -535,7 +522,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		nConn += 1;
 | 
			
		||||
		if (SSL_session_reused(scon))
 | 
			
		||||
			ver='r';
 | 
			
		||||
        else {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			ver=SSL_version(scon);
 | 
			
		||||
			if (ver == TLS1_VERSION)
 | 
			
		||||
				ver='t';
 | 
			
		||||
@@ -551,19 +539,16 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
	totalTime += tm_Time_F(STOP); /* Add the time for this iteration*/
 | 
			
		||||
 | 
			
		||||
    printf
 | 
			
		||||
        ("\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n",
 | 
			
		||||
         nConn, totalTime, ((double)nConn / totalTime), bytes_read);
 | 
			
		||||
    printf
 | 
			
		||||
        ("%d connections in %ld real seconds, %ld bytes read per connection\n",
 | 
			
		||||
         nConn, (long)time(NULL) - finishtime + maxTime, bytes_read / nConn);
 | 
			
		||||
 | 
			
		||||
	printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read);
 | 
			
		||||
	printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn);
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
    if (scon != NULL)
 | 
			
		||||
        SSL_free(scon);
 | 
			
		||||
	if (scon != NULL) SSL_free(scon);
 | 
			
		||||
 | 
			
		||||
    if (tm_ctx != NULL) {
 | 
			
		||||
	if (tm_ctx != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		SSL_CTX_free(tm_ctx);
 | 
			
		||||
		tm_ctx=NULL;
 | 
			
		||||
		}
 | 
			
		||||
@@ -571,7 +556,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
 * doConnection - make a connection
 | 
			
		||||
 * Args:
 | 
			
		||||
 *		scon	= earlier ssl connection for session id, or NULL
 | 
			
		||||
@@ -593,7 +578,8 @@ static SSL *doConnection(SSL *scon)
 | 
			
		||||
 | 
			
		||||
	if (scon == NULL)
 | 
			
		||||
		serverCon=SSL_new(tm_ctx);
 | 
			
		||||
    else {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		serverCon=scon;
 | 
			
		||||
		SSL_set_connect_state(serverCon);
 | 
			
		||||
		}
 | 
			
		||||
@@ -608,25 +594,27 @@ static SSL *doConnection(SSL *scon)
 | 
			
		||||
	/* ok, lets connect */
 | 
			
		||||
	for(;;) {
 | 
			
		||||
		i=SSL_connect(serverCon);
 | 
			
		||||
        if (BIO_sock_should_retry(i)) {
 | 
			
		||||
		if (BIO_sock_should_retry(i))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"DELAY\n");
 | 
			
		||||
 | 
			
		||||
			i=SSL_get_fd(serverCon);
 | 
			
		||||
			width=i+1;
 | 
			
		||||
			FD_ZERO(&readfds);
 | 
			
		||||
			openssl_fdset(i,&readfds);
 | 
			
		||||
            /*
 | 
			
		||||
             * Note: under VMS with SOCKETSHR the 2nd parameter is currently
 | 
			
		||||
             * of type (int *) whereas under other systems it is (void *) if
 | 
			
		||||
             * you don't have a cast it will choke the compiler: if you do
 | 
			
		||||
             * have a cast then you can either go for (int *) or (void *).
 | 
			
		||||
			/* Note: under VMS with SOCKETSHR the 2nd parameter
 | 
			
		||||
			 * is currently of type (int *) whereas under other
 | 
			
		||||
			 * systems it is (void *) if you don't have a cast it
 | 
			
		||||
			 * will choke the compiler: if you do have a cast then
 | 
			
		||||
			 * you can either go for (int *) or (void *).
 | 
			
		||||
			 */
 | 
			
		||||
			select(width,(void *)&readfds,NULL,NULL,NULL);
 | 
			
		||||
			continue;
 | 
			
		||||
			}
 | 
			
		||||
		break;
 | 
			
		||||
		}
 | 
			
		||||
    if (i <= 0) {
 | 
			
		||||
	if(i <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"ERROR\n");
 | 
			
		||||
		if (verify_error != X509_V_OK)
 | 
			
		||||
			BIO_printf(bio_err,"verify error:%s\n",
 | 
			
		||||
@@ -640,3 +628,5 @@ static SSL *doConnection(SSL *scon)
 | 
			
		||||
 | 
			
		||||
	return serverCon;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										122
									
								
								apps/sess_id.c
									
									
									
									
									
								
							
							
						
						
									
										122
									
								
								apps/sess_id.c
									
									
									
									
									
								
							@@ -90,6 +90,7 @@ int MAIN(int, char **);
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	SSL_SESSION *x=NULL;
 | 
			
		||||
	X509 *peer = NULL;
 | 
			
		||||
	int ret=1,i,num,badops=0;
 | 
			
		||||
	BIO *out=NULL;
 | 
			
		||||
	int informat,outformat;
 | 
			
		||||
@@ -109,34 +110,41 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	num=0;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	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;
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-cert") == 0)
 | 
			
		||||
			cert= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout= ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-context") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-context") == 0)
 | 
			
		||||
		    {
 | 
			
		||||
		    if(--argc < 1) goto bad;
 | 
			
		||||
		    context=*++argv;
 | 
			
		||||
        } else {
 | 
			
		||||
		    }
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
@@ -145,7 +153,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badops) {
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		for (pp=sess_id_usage; (*pp != NULL); pp++)
 | 
			
		||||
			BIO_printf(bio_err,"%s",*pp);
 | 
			
		||||
@@ -154,18 +163,20 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	x=load_sess_id(infile,informat);
 | 
			
		||||
    if (x == NULL) {
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
	if (x == NULL) { goto end; }
 | 
			
		||||
	peer = SSL_SESSION_get0_peer(x);
 | 
			
		||||
 | 
			
		||||
    if (context) {
 | 
			
		||||
        x->sid_ctx_length = strlen(context);
 | 
			
		||||
        if (x->sid_ctx_length > SSL_MAX_SID_CTX_LENGTH) {
 | 
			
		||||
	if(context)
 | 
			
		||||
	    {
 | 
			
		||||
	    size_t ctx_len = strlen(context);
 | 
			
		||||
	    if(ctx_len > SSL_MAX_SID_CTX_LENGTH)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"Context too long\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
        memcpy(x->sid_ctx, context, x->sid_ctx_length);
 | 
			
		||||
	    SSL_SESSION_set1_id_context(x, (unsigned char *)context, ctx_len);
 | 
			
		||||
	    }
 | 
			
		||||
 | 
			
		||||
#ifdef undef
 | 
			
		||||
	/* just testing for memory leaks :-) */
 | 
			
		||||
	{
 | 
			
		||||
@@ -187,14 +198,17 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (!noout || text) {
 | 
			
		||||
	if (!noout || text)
 | 
			
		||||
		{
 | 
			
		||||
		out=BIO_new(BIO_s_file());
 | 
			
		||||
        if (out == NULL) {
 | 
			
		||||
		if (out == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
        if (outfile == NULL) {
 | 
			
		||||
		if (outfile == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
@@ -202,26 +216,32 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
        } else {
 | 
			
		||||
            if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				perror(outfile);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (text) {
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		SSL_SESSION_print(out,x);
 | 
			
		||||
 | 
			
		||||
        if (cert) {
 | 
			
		||||
            if (x->peer == NULL)
 | 
			
		||||
		if (cert)
 | 
			
		||||
			{
 | 
			
		||||
			if (peer == NULL)
 | 
			
		||||
				BIO_puts(out,"No certificate present\n");
 | 
			
		||||
			else
 | 
			
		||||
                X509_print(out, x->peer);
 | 
			
		||||
				X509_print(out,peer);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (!noout && !cert) {
 | 
			
		||||
	if (!noout && !cert)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_SSL_SESSION_bio(out,x);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
@@ -234,11 +254,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			BIO_printf(bio_err,"unable to write SSL_SESSION\n");
 | 
			
		||||
			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)
 | 
			
		||||
            i = (int)i2d_X509_bio(out, x->peer);
 | 
			
		||||
			i=(int)i2d_X509_bio(out,peer);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
            i = PEM_write_bio_X509(out, x->peer);
 | 
			
		||||
			i=PEM_write_bio_X509(out,peer);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -250,10 +272,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (x != NULL)
 | 
			
		||||
        SSL_SESSION_free(x);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (x != NULL) SSL_SESSION_free(x);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
@@ -264,15 +284,18 @@ static SSL_SESSION *load_sess_id(char *infile, int format)
 | 
			
		||||
	BIO *in=NULL;
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
    if (in == NULL) {
 | 
			
		||||
	if (in == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -285,14 +308,15 @@ static SSL_SESSION *load_sess_id(char *infile, int format)
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified for input crl\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (x == NULL) {
 | 
			
		||||
	if (x == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load SSL_SESSION\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
end:
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	return(x);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										395
									
								
								apps/smime.c
									
									
									
									
									
								
							
							
						
						
									
										395
									
								
								apps/smime.c
									
									
									
									
									
								
							@@ -1,6 +1,5 @@
 | 
			
		||||
/* smime.c */
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
@@ -125,7 +124,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
    if (bio_err == NULL) {
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
		}
 | 
			
		||||
@@ -133,7 +133,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
    while (!badarg && *args && *args[0] == '-') {
 | 
			
		||||
	while (!badarg && *args && *args[0] == '-')
 | 
			
		||||
		{
 | 
			
		||||
		if (!strcmp (*args, "-encrypt"))
 | 
			
		||||
			operation = SMIME_ENCRYPT;
 | 
			
		||||
		else if (!strcmp (*args, "-decrypt"))
 | 
			
		||||
@@ -210,7 +211,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				flags |= PKCS7_NOOLDMIMETYPE;
 | 
			
		||||
		else if (!strcmp (*args, "-crlfeol"))
 | 
			
		||||
				flags |= PKCS7_CRLFEOL;
 | 
			
		||||
        else if (!strcmp(*args, "-rand")) {
 | 
			
		||||
		else if (!strcmp(*args,"-rand"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			args++;
 | 
			
		||||
@@ -218,34 +220,45 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			need_rand = 1;
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (!strcmp(*args, "-engine")) {
 | 
			
		||||
		else if (!strcmp(*args,"-engine"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			engine = *++args;
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
        else if (!strcmp(*args, "-passin")) {
 | 
			
		||||
		else if (!strcmp(*args,"-passin"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			passargin = *++args;
 | 
			
		||||
        } else if (!strcmp(*args, "-to")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-to"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			to = *++args;
 | 
			
		||||
        } else if (!strcmp(*args, "-from")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-from"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			from = *++args;
 | 
			
		||||
        } else if (!strcmp(*args, "-subject")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-subject"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			subject = *++args;
 | 
			
		||||
        } else if (!strcmp(*args, "-signer")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-signer"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			/* If previous -signer argument add signer to list */
 | 
			
		||||
 | 
			
		||||
            if (signerfile) {
 | 
			
		||||
			if (signerfile)
 | 
			
		||||
				{
 | 
			
		||||
				if (!sksigners)
 | 
			
		||||
					sksigners = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
				sk_OPENSSL_STRING_push(sksigners, signerfile);
 | 
			
		||||
@@ -257,24 +270,34 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				keyfile = NULL;
 | 
			
		||||
				}
 | 
			
		||||
			signerfile = *++args;
 | 
			
		||||
        } else if (!strcmp(*args, "-recip")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-recip"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			recipfile = *++args;
 | 
			
		||||
        } else if (!strcmp(*args, "-md")) {
 | 
			
		||||
			}
 | 
			
		||||
		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);
 | 
			
		||||
			if (sign_md == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Unknown digest %s\n",
 | 
			
		||||
							*args);
 | 
			
		||||
				goto argerr;
 | 
			
		||||
				}
 | 
			
		||||
        } else if (!strcmp(*args, "-inkey")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-inkey"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])	
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			/* If previous -inkey arument add signer to list */
 | 
			
		||||
            if (keyfile) {
 | 
			
		||||
                if (!signerfile) {
 | 
			
		||||
			if (keyfile)
 | 
			
		||||
				{
 | 
			
		||||
				if (!signerfile)
 | 
			
		||||
					{
 | 
			
		||||
					BIO_puts(bio_err, "Illegal -inkey without -signer\n");
 | 
			
		||||
					goto argerr;
 | 
			
		||||
					}
 | 
			
		||||
@@ -287,61 +310,84 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				sk_OPENSSL_STRING_push(skkeys, keyfile);
 | 
			
		||||
				}
 | 
			
		||||
			keyfile = *++args;
 | 
			
		||||
        } else if (!strcmp(*args, "-keyform")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-keyform"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			keyform = str2fmt(*++args);
 | 
			
		||||
        } else if (!strcmp(*args, "-certfile")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-certfile"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			certfile = *++args;
 | 
			
		||||
        } else if (!strcmp(*args, "-CAfile")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-CAfile"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			CAfile = *++args;
 | 
			
		||||
        } else if (!strcmp(*args, "-CApath")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-CApath"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			CApath = *++args;
 | 
			
		||||
        } else if (!strcmp(*args, "-in")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-in"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			infile = *++args;
 | 
			
		||||
        } else if (!strcmp(*args, "-inform")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-inform"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			informat = str2fmt(*++args);
 | 
			
		||||
        } else if (!strcmp(*args, "-outform")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-outform"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			outformat = str2fmt(*++args);
 | 
			
		||||
        } else if (!strcmp(*args, "-out")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-out"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			outfile = *++args;
 | 
			
		||||
        } else if (!strcmp(*args, "-content")) {
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-content"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto argerr;
 | 
			
		||||
			contfile = *++args;
 | 
			
		||||
        } else if (args_verify(&args, NULL, &badarg, bio_err, &vpm))
 | 
			
		||||
			}
 | 
			
		||||
		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)) {
 | 
			
		||||
	if (!(operation & SMIME_SIGNERS) && (skkeys || sksigners))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(bio_err, "Multiple signers or keys not allowed\n");
 | 
			
		||||
		goto argerr;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (operation & SMIME_SIGNERS) {
 | 
			
		||||
	if (operation & SMIME_SIGNERS)
 | 
			
		||||
		{
 | 
			
		||||
		/* Check to see if any final signer needs to be appended */
 | 
			
		||||
        if (keyfile && !signerfile) {
 | 
			
		||||
		if (keyfile && !signerfile)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_puts(bio_err, "Illegal -inkey without -signer\n");
 | 
			
		||||
			goto argerr;
 | 
			
		||||
			}
 | 
			
		||||
        if (signerfile) {
 | 
			
		||||
		if (signerfile)
 | 
			
		||||
			{
 | 
			
		||||
			if (!sksigners)
 | 
			
		||||
				sksigners = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
			sk_OPENSSL_STRING_push(sksigners, signerfile);
 | 
			
		||||
@@ -351,29 +397,37 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				keyfile = signerfile;
 | 
			
		||||
			sk_OPENSSL_STRING_push(skkeys, keyfile);
 | 
			
		||||
			}
 | 
			
		||||
        if (!sksigners) {
 | 
			
		||||
		if (!sksigners)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "No signer certificate specified\n");
 | 
			
		||||
			badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		signerfile = NULL;
 | 
			
		||||
		keyfile = NULL;
 | 
			
		||||
		need_rand = 1;
 | 
			
		||||
    } else if (operation == SMIME_DECRYPT) {
 | 
			
		||||
        if (!recipfile && !keyfile) {
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "No recipient certificate or key specified\n");
 | 
			
		||||
		}
 | 
			
		||||
	else if (operation == SMIME_DECRYPT)
 | 
			
		||||
		{
 | 
			
		||||
		if (!recipfile && !keyfile)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "No recipient certificate or key specified\n");
 | 
			
		||||
			badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
    } else if (operation == SMIME_ENCRYPT) {
 | 
			
		||||
        if (!*args) {
 | 
			
		||||
		}
 | 
			
		||||
	else if (operation == SMIME_ENCRYPT)
 | 
			
		||||
		{
 | 
			
		||||
		if (!*args)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "No recipient(s) certificate(s) specified\n");
 | 
			
		||||
			badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		need_rand = 1;
 | 
			
		||||
    } else if (!operation)
 | 
			
		||||
		}
 | 
			
		||||
	else if (!operation)
 | 
			
		||||
		badarg = 1;
 | 
			
		||||
 | 
			
		||||
    if (badarg) {
 | 
			
		||||
	if (badarg)
 | 
			
		||||
		{
 | 
			
		||||
		argerr:
 | 
			
		||||
		BIO_printf (bio_err, "Usage smime [options] cert.pem ...\n");
 | 
			
		||||
		BIO_printf (bio_err, "where options are\n");
 | 
			
		||||
@@ -396,79 +450,60 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		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");
 | 
			
		||||
		BIO_printf (bio_err, "               encrypt PEM output with cbc camellia\n");
 | 
			
		||||
#endif
 | 
			
		||||
        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,
 | 
			
		||||
                   "-noverify      don't verify signers certificate\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-nocerts       don't include signers certificate when signing\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, "-noverify      don't verify signers certificate\n");
 | 
			
		||||
		BIO_printf (bio_err, "-nocerts       don't include signers certificate when signing\n");
 | 
			
		||||
		BIO_printf (bio_err, "-nodetach      use opaque signing\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-noattr        don't include any signed attributes\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-binary        don't translate message to text\n");
 | 
			
		||||
		BIO_printf (bio_err, "-noattr        don't include any signed attributes\n");
 | 
			
		||||
		BIO_printf (bio_err, "-binary        don't translate message to text\n");
 | 
			
		||||
		BIO_printf (bio_err, "-certfile file other certificates file\n");
 | 
			
		||||
		BIO_printf (bio_err, "-signer file   signer certificate file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-recip  file   recipient certificate file for decryption\n");
 | 
			
		||||
		BIO_printf (bio_err, "-recip  file   recipient certificate file for decryption\n");
 | 
			
		||||
		BIO_printf (bio_err, "-in file       input file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-inform arg    input format SMIME (default), PEM or DER\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-inkey file    input private key (if not signer or recipient)\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-keyform arg   input private key format (PEM or ENGINE)\n");
 | 
			
		||||
		BIO_printf (bio_err, "-inform arg    input format SMIME (default), PEM or DER\n");
 | 
			
		||||
		BIO_printf (bio_err, "-inkey file    input private key (if not signer or recipient)\n");
 | 
			
		||||
		BIO_printf (bio_err, "-keyform arg   input private key format (PEM or ENGINE)\n");
 | 
			
		||||
		BIO_printf (bio_err, "-out file      output file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-outform arg   output format SMIME (default), PEM or DER\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-content file  supply or override content for detached signature\n");
 | 
			
		||||
		BIO_printf (bio_err, "-outform arg   output format SMIME (default), PEM or DER\n");
 | 
			
		||||
		BIO_printf (bio_err, "-content file  supply or override content for detached signature\n");
 | 
			
		||||
		BIO_printf (bio_err, "-to addr       to address\n");
 | 
			
		||||
		BIO_printf (bio_err, "-from ad       from address\n");
 | 
			
		||||
		BIO_printf (bio_err, "-subject s     subject\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-text          include or delete text MIME headers\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-CApath dir    trusted certificates directory\n");
 | 
			
		||||
		BIO_printf (bio_err, "-text          include or delete text MIME headers\n");
 | 
			
		||||
		BIO_printf (bio_err, "-CApath dir    trusted certificates directory\n");
 | 
			
		||||
		BIO_printf (bio_err, "-CAfile file   trusted certificates file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-crl_check     check revocation status of signer's certificate using CRLs\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-crl_check_all check revocation status of signer's certificate chain using CRLs\n");
 | 
			
		||||
		BIO_printf (bio_err, "-crl_check     check revocation status of signer's certificate using CRLs\n");
 | 
			
		||||
		BIO_printf (bio_err, "-crl_check_all check revocation status of signer's certificate chain using CRLs\n");
 | 
			
		||||
#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
 | 
			
		||||
		BIO_printf (bio_err, "-passin arg    input file pass phrase source\n");
 | 
			
		||||
        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,  "-rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,  "               load the file (or the files in the directory) into\n");
 | 
			
		||||
		BIO_printf(bio_err,  "               the random number generator\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "cert.pem       recipient certificate(s) for encryption\n");
 | 
			
		||||
		BIO_printf (bio_err, "cert.pem       recipient certificate(s) for encryption\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#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");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (need_rand) {
 | 
			
		||||
	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",
 | 
			
		||||
@@ -480,39 +515,47 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if (!(operation & SMIME_SIGNERS))
 | 
			
		||||
		flags &= ~PKCS7_DETACHED;
 | 
			
		||||
 | 
			
		||||
    if (operation & SMIME_OP) {
 | 
			
		||||
	if (operation & SMIME_OP)
 | 
			
		||||
		{
 | 
			
		||||
		if (outformat == FORMAT_ASN1)
 | 
			
		||||
			outmode = "wb";
 | 
			
		||||
    } else {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (flags & PKCS7_BINARY)
 | 
			
		||||
			outmode = "wb";
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (operation & SMIME_IP) {
 | 
			
		||||
	if (operation & SMIME_IP)
 | 
			
		||||
		{
 | 
			
		||||
		if (informat == FORMAT_ASN1)
 | 
			
		||||
			inmode = "rb";
 | 
			
		||||
    } else {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (flags & PKCS7_BINARY)
 | 
			
		||||
			inmode = "rb";
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (operation == SMIME_ENCRYPT) {
 | 
			
		||||
        if (!cipher) {
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
            cipher = EVP_des_ede3_cbc();
 | 
			
		||||
	if (operation == SMIME_ENCRYPT)
 | 
			
		||||
		{
 | 
			
		||||
		if (!cipher)
 | 
			
		||||
			{
 | 
			
		||||
#ifndef OPENSSL_NO_RC2			
 | 
			
		||||
			cipher = EVP_rc2_40_cbc();
 | 
			
		||||
#else
 | 
			
		||||
			BIO_printf(bio_err, "No cipher selected\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
#endif
 | 
			
		||||
			}
 | 
			
		||||
		encerts = sk_X509_new_null();
 | 
			
		||||
        while (*args) {
 | 
			
		||||
		while (*args)
 | 
			
		||||
			{
 | 
			
		||||
			if (!(cert = load_cert(bio_err,*args,FORMAT_PEM,
 | 
			
		||||
                                   NULL, e, "recipient certificate file"))) {
 | 
			
		||||
				NULL, e, "recipient certificate file")))
 | 
			
		||||
				{
 | 
			
		||||
#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
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
@@ -522,77 +565,99 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (certfile) {
 | 
			
		||||
	if (certfile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(other = load_certs(bio_err,certfile,FORMAT_PEM, NULL,
 | 
			
		||||
                                 e, "certificate file"))) {
 | 
			
		||||
			e, "certificate file")))
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			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"))) {
 | 
			
		||||
			e, "recipient certificate file")))
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (operation == SMIME_DECRYPT) {
 | 
			
		||||
	if (operation == SMIME_DECRYPT)
 | 
			
		||||
		{
 | 
			
		||||
		if (!keyfile)
 | 
			
		||||
			keyfile = recipfile;
 | 
			
		||||
    } else if (operation == SMIME_SIGN) {
 | 
			
		||||
		}
 | 
			
		||||
	else if (operation == SMIME_SIGN)
 | 
			
		||||
		{
 | 
			
		||||
		if (!keyfile)
 | 
			
		||||
			keyfile = signerfile;
 | 
			
		||||
    } else
 | 
			
		||||
        keyfile = NULL;
 | 
			
		||||
		}
 | 
			
		||||
	else keyfile = NULL;
 | 
			
		||||
 | 
			
		||||
    if (keyfile) {
 | 
			
		||||
	if (keyfile)
 | 
			
		||||
		{
 | 
			
		||||
		key = load_key(bio_err, keyfile, keyform, 0, passin, e,
 | 
			
		||||
			       "signing key file");
 | 
			
		||||
		if (!key)
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (infile) {
 | 
			
		||||
        if (!(in = BIO_new_file(infile, inmode))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open input file %s\n", infile);
 | 
			
		||||
	if (infile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(in = BIO_new_file(infile, inmode)))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf (bio_err,
 | 
			
		||||
				 "Can't open input file %s\n", infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    } else
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
    if (operation & SMIME_IP) {
 | 
			
		||||
	if (operation & SMIME_IP)
 | 
			
		||||
		{
 | 
			
		||||
		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 {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Bad input format for PKCS#7 file\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
        if (!p7) {
 | 
			
		||||
		if (!p7)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error reading S/MIME message\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
        if (contfile) {
 | 
			
		||||
		if (contfile)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_free(indata);
 | 
			
		||||
            if (!(indata = BIO_new_file(contfile, "rb"))) {
 | 
			
		||||
			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, "Can't open output file %s\n", outfile);
 | 
			
		||||
	if (outfile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(out = BIO_new_file(outfile, outmode)))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf (bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    } else {
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
@@ -602,7 +667,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (operation == SMIME_VERIFY) {
 | 
			
		||||
	if (operation == SMIME_VERIFY)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(store = setup_verify(bio_err, CAfile, CApath)))
 | 
			
		||||
			goto end;
 | 
			
		||||
		X509_STORE_set_verify_cb(store, smime_cb);
 | 
			
		||||
@@ -610,31 +676,39 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			X509_STORE_set1_param(store, vpm);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	ret = 3;
 | 
			
		||||
 | 
			
		||||
    if (operation == SMIME_ENCRYPT) {
 | 
			
		||||
	if (operation == SMIME_ENCRYPT)
 | 
			
		||||
		{
 | 
			
		||||
		if (indef)
 | 
			
		||||
			flags |= PKCS7_STREAM;
 | 
			
		||||
		p7 = PKCS7_encrypt(encerts, in, cipher, flags);
 | 
			
		||||
    } else if (operation & SMIME_SIGNERS) {
 | 
			
		||||
		}
 | 
			
		||||
	else if (operation & SMIME_SIGNERS)
 | 
			
		||||
		{
 | 
			
		||||
		int i;
 | 
			
		||||
        /*
 | 
			
		||||
         * If detached data content we only enable streaming if S/MIME output
 | 
			
		||||
         * format.
 | 
			
		||||
		/* If detached data content we only enable streaming if
 | 
			
		||||
		 * S/MIME output format.
 | 
			
		||||
		 */
 | 
			
		||||
        if (operation == SMIME_SIGN) {
 | 
			
		||||
            if (flags & PKCS7_DETACHED) {
 | 
			
		||||
		if (operation == SMIME_SIGN)
 | 
			
		||||
			{
 | 
			
		||||
			if (flags & PKCS7_DETACHED)
 | 
			
		||||
				{
 | 
			
		||||
				if (outformat == FORMAT_SMIME)
 | 
			
		||||
					flags |= PKCS7_STREAM;
 | 
			
		||||
            } else if (indef)
 | 
			
		||||
				}
 | 
			
		||||
			else if (indef)
 | 
			
		||||
				flags |= PKCS7_STREAM;
 | 
			
		||||
			flags |= PKCS7_PARTIAL;
 | 
			
		||||
			p7 = PKCS7_sign(NULL, NULL, other, in, flags);
 | 
			
		||||
			if (!p7)
 | 
			
		||||
				goto end;
 | 
			
		||||
        } else
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			flags |= PKCS7_REUSE_DIGEST;
 | 
			
		||||
        for (i = 0; i < sk_OPENSSL_STRING_num(sksigners); i++) {
 | 
			
		||||
		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,
 | 
			
		||||
@@ -645,7 +719,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			       "signing key file");
 | 
			
		||||
			if (!key)
 | 
			
		||||
				goto end;
 | 
			
		||||
            if (!PKCS7_sign_add_signer(p7, signer, key, sign_md, flags))
 | 
			
		||||
			if (!PKCS7_sign_add_signer(p7, signer, key,
 | 
			
		||||
						sign_md, flags))
 | 
			
		||||
				goto end;
 | 
			
		||||
			X509_free(signer);
 | 
			
		||||
			signer = NULL;
 | 
			
		||||
@@ -653,57 +728,71 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			key = NULL;
 | 
			
		||||
			}
 | 
			
		||||
		/* If not streaming or resigning finalize structure */
 | 
			
		||||
        if ((operation == SMIME_SIGN) && !(flags & PKCS7_STREAM)) {
 | 
			
		||||
		if ((operation == SMIME_SIGN) && !(flags & PKCS7_STREAM))
 | 
			
		||||
			{
 | 
			
		||||
			if (!PKCS7_final(p7, in, flags))
 | 
			
		||||
				goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (!p7) {
 | 
			
		||||
	if (!p7)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error creating PKCS#7 structure\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ret = 4;
 | 
			
		||||
    if (operation == SMIME_DECRYPT) {
 | 
			
		||||
        if (!PKCS7_decrypt(p7, key, recip, out, flags)) {
 | 
			
		||||
	if (operation == SMIME_DECRYPT)
 | 
			
		||||
		{
 | 
			
		||||
		if (!PKCS7_decrypt(p7, key, recip, out, flags))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error decrypting PKCS#7 structure\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    } else if (operation == SMIME_VERIFY) {
 | 
			
		||||
		}
 | 
			
		||||
	else if (operation == SMIME_VERIFY)
 | 
			
		||||
		{
 | 
			
		||||
		STACK_OF(X509) *signers;
 | 
			
		||||
		if (PKCS7_verify(p7, other, store, indata, out, flags))
 | 
			
		||||
			BIO_printf(bio_err, "Verification successful\n");
 | 
			
		||||
        else {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Verification failure\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		signers = PKCS7_get0_signers(p7, other, flags);
 | 
			
		||||
        if (!save_certs(signerfile, signers)) {
 | 
			
		||||
            BIO_printf(bio_err, "Error writing signers to %s\n", signerfile);
 | 
			
		||||
		if (!save_certs(signerfile, signers))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error writing signers to %s\n",
 | 
			
		||||
								signerfile);
 | 
			
		||||
			ret = 5;
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		sk_X509_free(signers);
 | 
			
		||||
    } else if (operation == SMIME_PK7OUT)
 | 
			
		||||
		}
 | 
			
		||||
	else if (operation == SMIME_PK7OUT)
 | 
			
		||||
		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 (subject)
 | 
			
		||||
			BIO_printf(out, "Subject: %s\n", subject);
 | 
			
		||||
        if (outformat == FORMAT_SMIME) {
 | 
			
		||||
		if (outformat == FORMAT_SMIME) 
 | 
			
		||||
			{
 | 
			
		||||
			if (operation == SMIME_RESIGN)
 | 
			
		||||
				SMIME_write_PKCS7(out, p7, indata, flags);
 | 
			
		||||
			else
 | 
			
		||||
				SMIME_write_PKCS7(out, p7, in, flags);
 | 
			
		||||
        } else if (outformat == FORMAT_PEM)
 | 
			
		||||
			}
 | 
			
		||||
		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 {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Bad output format for PKCS#7 file\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -712,8 +801,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
end:
 | 
			
		||||
	if (need_rand)
 | 
			
		||||
		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(other, X509_free);
 | 
			
		||||
	if (vpm)
 | 
			
		||||
@@ -731,8 +819,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	BIO_free(indata);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
	if (passin) OPENSSL_free(passin);
 | 
			
		||||
	return (ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -743,14 +830,14 @@ static int save_certs(char *signerfile, STACK_OF(X509) *signers)
 | 
			
		||||
	if (!signerfile)
 | 
			
		||||
		return 1;
 | 
			
		||||
	tmp = BIO_new_file(signerfile, "w");
 | 
			
		||||
    if (!tmp)
 | 
			
		||||
        return 0;
 | 
			
		||||
	if (!tmp) return 0;
 | 
			
		||||
	for(i = 0; i < sk_X509_num(signers); i++)
 | 
			
		||||
		PEM_write_bio_X509(tmp, sk_X509_value(signers, i));
 | 
			
		||||
	BIO_free(tmp);
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
/* Minimal callback just to output policy info (if any) */
 | 
			
		||||
 | 
			
		||||
static int smime_cb(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1398
									
								
								apps/speed.c
									
									
									
									
									
								
							
							
						
						
									
										1398
									
								
								apps/speed.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										114
									
								
								apps/spkac.c
									
									
									
									
									
								
							
							
						
						
									
										114
									
								
								apps/spkac.c
									
									
									
									
									
								
							@@ -1,8 +1,8 @@
 | 
			
		||||
/* apps/spkac.c */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 1999. Based on an original idea by Massimiliano Pala (madwolf@openca.org).
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 1999. Based on an original idea by Massimiliano Pala
 | 
			
		||||
 * (madwolf@openca.org).
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -73,8 +73,7 @@
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	spkac_main
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
/* -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@@ -100,8 +99,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
    if (!bio_err)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
	if (!bio_err) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
@@ -109,40 +107,47 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passin") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-key") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-key") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			keyfile= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-challenge") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-challenge") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			challenge= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-spkac") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-spkac") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			spkac= *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-spksect") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-spksect") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			spksect= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -152,30 +157,27 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			pubkey=1;
 | 
			
		||||
		else if (strcmp(*argv,"-verify") == 0)
 | 
			
		||||
			verify=1;
 | 
			
		||||
        else
 | 
			
		||||
            badops = 1;
 | 
			
		||||
		else badops = 1;
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (badops) {
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options]\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg        input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg       output file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -key arg       create SPKAC using private key\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -passin arg    input file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err," -key arg       create SPKAC using private key\n");
 | 
			
		||||
		BIO_printf(bio_err," -passin arg    input file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err," -challenge arg challenge string\n");
 | 
			
		||||
		BIO_printf(bio_err," -spkac arg     alternative SPKAC name\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout         don't print SPKAC\n");
 | 
			
		||||
		BIO_printf(bio_err," -pubkey        output public key\n");
 | 
			
		||||
		BIO_printf(bio_err," -verify        verify SPKAC signature\n");
 | 
			
		||||
#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
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -185,6 +187,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
@@ -197,15 +200,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		spki = NETSCAPE_SPKI_new();
 | 
			
		||||
        if (challenge)
 | 
			
		||||
            ASN1_STRING_set(spki->spkac->challenge,
 | 
			
		||||
		if(challenge) ASN1_STRING_set(spki->spkac->challenge,
 | 
			
		||||
						 challenge, (int)strlen(challenge));
 | 
			
		||||
		NETSCAPE_SPKI_set_pubkey(spki, pkey);
 | 
			
		||||
		NETSCAPE_SPKI_sign(spki, pkey, EVP_md5());
 | 
			
		||||
		spkstr = NETSCAPE_SPKI_b64_encode(spki);
 | 
			
		||||
 | 
			
		||||
        if (outfile)
 | 
			
		||||
            out = BIO_new_file(outfile, "w");
 | 
			
		||||
		if (outfile) out = BIO_new_file(outfile, "w");
 | 
			
		||||
		else {
 | 
			
		||||
			out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
@@ -227,10 +228,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    if (infile)
 | 
			
		||||
        in = BIO_new_file(infile, "r");
 | 
			
		||||
    else
 | 
			
		||||
        in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	if (infile) in = BIO_new_file(infile, "r");
 | 
			
		||||
	else in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if(!in) {
 | 
			
		||||
		BIO_printf(bio_err, "Error opening input file\n");
 | 
			
		||||
@@ -263,8 +264,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    if (outfile)
 | 
			
		||||
        out = BIO_new_file(outfile, "w");
 | 
			
		||||
	if (outfile) out = BIO_new_file(outfile, "w");
 | 
			
		||||
	else {
 | 
			
		||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
@@ -281,21 +281,18 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    if (!noout)
 | 
			
		||||
        NETSCAPE_SPKI_print(out, spki);
 | 
			
		||||
	if(!noout) NETSCAPE_SPKI_print(out, spki);
 | 
			
		||||
	pkey = NETSCAPE_SPKI_get_pubkey(spki);
 | 
			
		||||
	if(verify) {
 | 
			
		||||
		i = NETSCAPE_SPKI_verify(spki, pkey);
 | 
			
		||||
        if (i > 0)
 | 
			
		||||
            BIO_printf(bio_err, "Signature OK\n");
 | 
			
		||||
		if (i > 0) BIO_printf(bio_err, "Signature OK\n");
 | 
			
		||||
		else {
 | 
			
		||||
			BIO_printf(bio_err, "Signature Failure\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
    if (pubkey)
 | 
			
		||||
        PEM_write_bio_PUBKEY(out, pkey);
 | 
			
		||||
	if(pubkey) PEM_write_bio_PUBKEY(out, pkey);
 | 
			
		||||
 | 
			
		||||
	ret = 0;
 | 
			
		||||
 | 
			
		||||
@@ -305,8 +302,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	EVP_PKEY_free(pkey);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
	if(passin) OPENSSL_free(passin);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										763
									
								
								apps/srp.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										763
									
								
								apps/srp.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,763 @@
 | 
			
		||||
/* apps/srp.c */
 | 
			
		||||
/* Written by Peter Sylvester (peter.sylvester@edelweb.fr)  
 | 
			
		||||
 * for the EdelKey project and contributed to the OpenSSL project 2004.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2004 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 <openssl/opensslconf.h>
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_SRP
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <openssl/conf.h>
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/txt_db.h>
 | 
			
		||||
#include <openssl/buffer.h>
 | 
			
		||||
#include <openssl/srp.h>
 | 
			
		||||
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG srp_main
 | 
			
		||||
 | 
			
		||||
#define BASE_SECTION	"srp"
 | 
			
		||||
#define CONFIG_FILE "openssl.cnf"
 | 
			
		||||
 | 
			
		||||
#define ENV_RANDFILE		"RANDFILE"
 | 
			
		||||
 | 
			
		||||
#define ENV_DATABASE		"srpvfile"
 | 
			
		||||
#define ENV_DEFAULT_SRP		"default_srp"
 | 
			
		||||
 | 
			
		||||
static char *srp_usage[]={
 | 
			
		||||
"usage: srp [args] [user] \n",
 | 
			
		||||
"\n",
 | 
			
		||||
" -verbose        Talk alot while doing things\n",
 | 
			
		||||
" -config file    A config file\n",
 | 
			
		||||
" -name arg       The particular srp definition to use\n",
 | 
			
		||||
" -srpvfile arg   The srp verifier file name\n",
 | 
			
		||||
" -add            add an user and srp verifier\n",
 | 
			
		||||
" -modify         modify the srp verifier of an existing user\n",
 | 
			
		||||
" -delete         delete user from verifier file\n",
 | 
			
		||||
" -list           list user\n",
 | 
			
		||||
" -gn arg         g and N values to be used for new verifier\n",
 | 
			
		||||
" -userinfo arg   additional info to be set for user\n",
 | 
			
		||||
" -passin arg     input file pass phrase source\n",
 | 
			
		||||
" -passout arg    output file pass phrase source\n",
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
" -engine e         - use engine e, possibly a hardware device.\n",
 | 
			
		||||
#endif
 | 
			
		||||
NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifdef EFENCE
 | 
			
		||||
extern int EF_PROTECT_FREE;
 | 
			
		||||
extern int EF_PROTECT_BELOW;
 | 
			
		||||
extern int EF_ALIGNMENT;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static CONF *conf=NULL;
 | 
			
		||||
static char *section=NULL;
 | 
			
		||||
 | 
			
		||||
#define VERBOSE if (verbose) 
 | 
			
		||||
#define VVERBOSE if (verbose>1) 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
static int get_index(CA_DB *db, char* id, char type)
 | 
			
		||||
	{
 | 
			
		||||
	char ** pp;
 | 
			
		||||
	int i;
 | 
			
		||||
	if (id == NULL) return -1;
 | 
			
		||||
	if (type == DB_SRP_INDEX) 
 | 
			
		||||
	for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++)
 | 
			
		||||
		{
 | 
			
		||||
		pp=sk_OPENSSL_PSTRING_value(db->db->data,i);
 | 
			
		||||
		if (pp[DB_srptype][0] == DB_SRP_INDEX  && !strcmp(id,pp[DB_srpid])) 
 | 
			
		||||
			return i;
 | 
			
		||||
		}
 | 
			
		||||
	else for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++)
 | 
			
		||||
		{
 | 
			
		||||
		pp=sk_OPENSSL_PSTRING_value(db->db->data,i);
 | 
			
		||||
 | 
			
		||||
		if (pp[DB_srptype][0] != DB_SRP_INDEX && !strcmp(id,pp[DB_srpid])) 
 | 
			
		||||
			return i;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	return -1 ; 
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void print_entry(CA_DB *db, BIO * bio, int indx, int verbose, char * s)
 | 
			
		||||
	{
 | 
			
		||||
	if (indx >= 0 && verbose)
 | 
			
		||||
		{
 | 
			
		||||
		int j;
 | 
			
		||||
		char **pp=sk_OPENSSL_PSTRING_value(db->db->data,indx);
 | 
			
		||||
		BIO_printf(bio,"%s \"%s\"\n",s,pp[DB_srpid]);
 | 
			
		||||
		for (j = 0; j < DB_NUMBER; j++)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"  %d = \"%s\"\n",j,pp[j]);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void print_index(CA_DB *db, BIO * bio, int indexindex, int verbose)
 | 
			
		||||
	{
 | 
			
		||||
	print_entry(db,bio,indexindex, verbose, "g N entry") ;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void print_user(CA_DB *db, BIO * bio, int userindex, int verbose)
 | 
			
		||||
	{
 | 
			
		||||
	if (verbose > 0)
 | 
			
		||||
		{
 | 
			
		||||
		char **pp= sk_OPENSSL_PSTRING_value(db->db->data,userindex);
 | 
			
		||||
 | 
			
		||||
		if (pp[DB_srptype][0] != 'I')
 | 
			
		||||
			{
 | 
			
		||||
			print_entry(db,bio,userindex, verbose, "User entry");
 | 
			
		||||
			print_entry(db,bio,get_index(db, pp[DB_srpgN],'I'),verbose,"g N entry") ;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int update_index(CA_DB *db, BIO * bio, char ** row)
 | 
			
		||||
	{
 | 
			
		||||
	char ** irow;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	if ((irow=(char **)OPENSSL_malloc(sizeof(char *)*(DB_NUMBER+1))) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"Memory allocation failure\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	for (i=0; i<DB_NUMBER; i++)
 | 
			
		||||
		{
 | 
			
		||||
		irow[i]=row[i];
 | 
			
		||||
		row[i]=NULL;
 | 
			
		||||
		}
 | 
			
		||||
	irow[DB_NUMBER]=NULL;
 | 
			
		||||
 | 
			
		||||
	if (!TXT_DB_insert(db->db,irow))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio,"failed to update srpvfile\n");
 | 
			
		||||
		BIO_printf(bio,"TXT_DB error number %ld\n",db->db->error);
 | 
			
		||||
		OPENSSL_free(irow);
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void lookup_fail(const char *name, const char *tag)
 | 
			
		||||
	{
 | 
			
		||||
	BIO_printf(bio_err,"variable lookup failed for %s::%s\n",name,tag);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static char *srp_verify_user(const char *user, const char *srp_verifier,
 | 
			
		||||
							 char *srp_usersalt, const char *g,
 | 
			
		||||
							 const char * N, const char *passin, BIO *bio,
 | 
			
		||||
							 int verbose)
 | 
			
		||||
	{
 | 
			
		||||
 	char password[1024];
 | 
			
		||||
	PW_CB_DATA cb_tmp;
 | 
			
		||||
	char *verifier = NULL;
 | 
			
		||||
	char *gNid = NULL;
 | 
			
		||||
 | 
			
		||||
	cb_tmp.prompt_info = user;
 | 
			
		||||
	cb_tmp.password = passin;
 | 
			
		||||
 | 
			
		||||
 	if (password_callback(password, 1024, 0, &cb_tmp) >0)
 | 
			
		||||
		{
 | 
			
		||||
		VERBOSE BIO_printf(bio,"Validating\n   user=\"%s\"\n srp_verifier=\"%s\"\n srp_usersalt=\"%s\"\n g=\"%s\"\n N=\"%s\"\n",user,srp_verifier,srp_usersalt,g,N);
 | 
			
		||||
		BIO_printf(bio,"Pass %s\n",password);
 | 
			
		||||
 | 
			
		||||
		OPENSSL_assert(srp_usersalt != NULL);
 | 
			
		||||
		if (!(gNid=SRP_create_verifier(user, password, &srp_usersalt, &verifier,
 | 
			
		||||
									   N, g)))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio,"Internal error validating SRP verifier\n");
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (strcmp(verifier, srp_verifier))
 | 
			
		||||
				gNid = NULL;
 | 
			
		||||
			OPENSSL_free(verifier);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	return gNid;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static char *srp_create_user(char * user, char **srp_verifier,
 | 
			
		||||
							 char **srp_usersalt,char *g, char *N,
 | 
			
		||||
							 char *passout, BIO *bio, int verbose)
 | 
			
		||||
	{
 | 
			
		||||
 	char password[1024];
 | 
			
		||||
        PW_CB_DATA cb_tmp;
 | 
			
		||||
	char *gNid = NULL;
 | 
			
		||||
	char *salt = NULL;
 | 
			
		||||
        cb_tmp.prompt_info = user;
 | 
			
		||||
        cb_tmp.password = passout;
 | 
			
		||||
 | 
			
		||||
	if (password_callback(password,1024,1,&cb_tmp) >0)
 | 
			
		||||
		{
 | 
			
		||||
		VERBOSE BIO_printf(bio,"Creating\n user=\"%s\"\n g=\"%s\"\n N=\"%s\"\n",user,g,N);
 | 
			
		||||
		if (!(gNid =SRP_create_verifier(user, password, &salt, srp_verifier, N, g)))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio,"Internal error creating SRP verifier\n");
 | 
			
		||||
			}
 | 
			
		||||
		else 
 | 
			
		||||
			*srp_usersalt = salt;
 | 
			
		||||
		VVERBOSE BIO_printf(bio,"gNid=%s salt =\"%s\"\n verifier =\"%s\"\n", gNid,salt, *srp_verifier);
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	return gNid;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int add_user = 0;
 | 
			
		||||
	int list_user= 0;
 | 
			
		||||
	int delete_user= 0;
 | 
			
		||||
	int modify_user= 0;
 | 
			
		||||
	char * user = NULL;
 | 
			
		||||
 | 
			
		||||
	char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
	char *passin = NULL, *passout = NULL;
 | 
			
		||||
        char * gN = NULL;
 | 
			
		||||
	int gNindex = -1;
 | 
			
		||||
	char ** gNrow = NULL;
 | 
			
		||||
	int maxgN = -1;
 | 
			
		||||
 | 
			
		||||
	char * userinfo = NULL;
 | 
			
		||||
 | 
			
		||||
	int badops=0;
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	int errors=0;
 | 
			
		||||
	int verbose=0;
 | 
			
		||||
	int doupdatedb=0;
 | 
			
		||||
	char *configfile=NULL;
 | 
			
		||||
	char *dbfile=NULL;
 | 
			
		||||
	CA_DB *db=NULL;
 | 
			
		||||
	char **pp ;
 | 
			
		||||
	int i;
 | 
			
		||||
	long errorline = -1;
 | 
			
		||||
	char *randfile=NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	char *tofree=NULL;
 | 
			
		||||
	DB_ATTR db_attr;
 | 
			
		||||
 | 
			
		||||
#ifdef EFENCE
 | 
			
		||||
EF_PROTECT_FREE=1;
 | 
			
		||||
EF_PROTECT_BELOW=1;
 | 
			
		||||
EF_ALIGNMENT=0;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
	conf = NULL;
 | 
			
		||||
	section = NULL;
 | 
			
		||||
 | 
			
		||||
	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 && badops == 0)
 | 
			
		||||
		{
 | 
			
		||||
		if	(strcmp(*argv,"-verbose") == 0)
 | 
			
		||||
			verbose++;
 | 
			
		||||
		else if	(strcmp(*argv,"-config") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			configfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-name") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			section= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if	(strcmp(*argv,"-srpvfile") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			dbfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-add") == 0)
 | 
			
		||||
			add_user=1;
 | 
			
		||||
		else if (strcmp(*argv,"-delete") == 0)
 | 
			
		||||
			delete_user=1;
 | 
			
		||||
		else if (strcmp(*argv,"-modify") == 0)
 | 
			
		||||
			modify_user=1;
 | 
			
		||||
		else if (strcmp(*argv,"-list") == 0)
 | 
			
		||||
			list_user=1;
 | 
			
		||||
		else if (strcmp(*argv,"-gn") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			gN= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-userinfo") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			userinfo= *(++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);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		else if (**argv == '-')
 | 
			
		||||
			{
 | 
			
		||||
bad:
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		else 
 | 
			
		||||
			break;
 | 
			
		||||
	
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (dbfile && configfile)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"-dbfile and -configfile cannot be specified together.\n");
 | 
			
		||||
		badops = 1;
 | 
			
		||||
		}
 | 
			
		||||
	if (add_user+delete_user+modify_user+list_user != 1)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"Exactly one of the options -add, -delete, -modify -list must be specified.\n");
 | 
			
		||||
		badops = 1;
 | 
			
		||||
		}
 | 
			
		||||
	if (delete_user+modify_user+delete_user== 1 && argc <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"Need at least one user for options -add, -delete, -modify. \n");
 | 
			
		||||
		badops = 1;
 | 
			
		||||
		}
 | 
			
		||||
	if ((passin || passout) && argc != 1 )
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"-passin, -passout arguments only valid with one user.\n");
 | 
			
		||||
		badops = 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
		for (pp=srp_usage; (*pp != NULL); pp++)
 | 
			
		||||
			BIO_printf(bio_err,"%s",*pp);
 | 
			
		||||
 | 
			
		||||
		BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,"                 load the file (or the files in the directory) into\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 the random number generator\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	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 err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        if (!dbfile)
 | 
			
		||||
		{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/*****************************************************************/
 | 
			
		||||
		tofree=NULL;
 | 
			
		||||
		if (configfile == NULL) configfile = getenv("OPENSSL_CONF");
 | 
			
		||||
		if (configfile == NULL) configfile = getenv("SSLEAY_CONF");
 | 
			
		||||
		if (configfile == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			const char *s=X509_get_default_cert_area();
 | 
			
		||||
			size_t len;
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			len = strlen(s)+sizeof(CONFIG_FILE);
 | 
			
		||||
			tofree=OPENSSL_malloc(len);
 | 
			
		||||
			strcpy(tofree,s);
 | 
			
		||||
#else
 | 
			
		||||
			len = strlen(s)+sizeof(CONFIG_FILE)+1;
 | 
			
		||||
			tofree=OPENSSL_malloc(len);
 | 
			
		||||
			BUF_strlcpy(tofree,s,len);
 | 
			
		||||
			BUF_strlcat(tofree,"/",len);
 | 
			
		||||
#endif
 | 
			
		||||
			BUF_strlcat(tofree,CONFIG_FILE,len);
 | 
			
		||||
			configfile=tofree;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		VERBOSE BIO_printf(bio_err,"Using configuration from %s\n",configfile);
 | 
			
		||||
		conf = NCONF_new(NULL);
 | 
			
		||||
		if (NCONF_load(conf,configfile,&errorline) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (errorline <= 0)
 | 
			
		||||
				BIO_printf(bio_err,"error loading the config file '%s'\n",
 | 
			
		||||
					configfile);
 | 
			
		||||
			else
 | 
			
		||||
				BIO_printf(bio_err,"error on line %ld of config file '%s'\n"
 | 
			
		||||
					,errorline,configfile);
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
		if(tofree)
 | 
			
		||||
			{
 | 
			
		||||
			OPENSSL_free(tofree);
 | 
			
		||||
			tofree = NULL;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if (!load_config(bio_err, conf))
 | 
			
		||||
			goto err;
 | 
			
		||||
 | 
			
		||||
	/* Lets get the config section we are using */
 | 
			
		||||
		if (section == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			VERBOSE BIO_printf(bio_err,"trying to read " ENV_DEFAULT_SRP " in \" BASE_SECTION \"\n");
 | 
			
		||||
 | 
			
		||||
			section=NCONF_get_string(conf,BASE_SECTION,ENV_DEFAULT_SRP);
 | 
			
		||||
			if (section == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				lookup_fail(BASE_SECTION,ENV_DEFAULT_SRP);
 | 
			
		||||
				goto err;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
         
 | 
			
		||||
		if (randfile == NULL && conf)
 | 
			
		||||
	        	randfile = NCONF_get_string(conf, BASE_SECTION, "RANDFILE");
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
		VERBOSE BIO_printf(bio_err,"trying to read " ENV_DATABASE " in section \"%s\"\n",section);
 | 
			
		||||
 | 
			
		||||
		if ((dbfile=NCONF_get_string(conf,section,ENV_DATABASE)) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			lookup_fail(section,ENV_DATABASE);
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
        	}
 | 
			
		||||
	if (randfile == NULL)
 | 
			
		||||
		ERR_clear_error();
 | 
			
		||||
       	else 
 | 
			
		||||
		app_RAND_load_file(randfile, bio_err, 0);
 | 
			
		||||
 | 
			
		||||
	VERBOSE BIO_printf(bio_err,"Trying to read SRP verifier file \"%s\"\n",dbfile);
 | 
			
		||||
 | 
			
		||||
	db = load_index(dbfile, &db_attr);
 | 
			
		||||
	if (db == NULL) goto err;
 | 
			
		||||
 | 
			
		||||
	/* Lets check some fields */
 | 
			
		||||
	for (i=0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++)
 | 
			
		||||
		{
 | 
			
		||||
		pp=sk_OPENSSL_PSTRING_value(db->db->data, i);
 | 
			
		||||
	
 | 
			
		||||
		if (pp[DB_srptype][0] == DB_SRP_INDEX)
 | 
			
		||||
			{
 | 
			
		||||
			maxgN = i;
 | 
			
		||||
			if (gNindex < 0 && gN != NULL && !strcmp(gN, pp[DB_srpid]))
 | 
			
		||||
				gNindex = i;
 | 
			
		||||
 | 
			
		||||
			print_index(db, bio_err, i, verbose > 1) ;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	VERBOSE BIO_printf(bio_err,"Database initialised\n");
 | 
			
		||||
 | 
			
		||||
	if (gNindex >= 0)
 | 
			
		||||
		{
 | 
			
		||||
		gNrow=sk_OPENSSL_PSTRING_value(db->db->data,gNindex);
 | 
			
		||||
		print_entry(db,bio_err,gNindex,verbose>1,"Default g and N") ;
 | 
			
		||||
		}
 | 
			
		||||
	else if (maxgN > 0 && !SRP_get_default_gN(gN))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"No g and N value for index \"%s\"\n",gN);
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		VERBOSE BIO_printf(bio_err,"Database has no g N information.\n");
 | 
			
		||||
		gNrow = NULL;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	VVERBOSE BIO_printf(bio_err,"Starting user processing\n");
 | 
			
		||||
 | 
			
		||||
	if (argc > 0)
 | 
			
		||||
		user = *(argv++) ;
 | 
			
		||||
 | 
			
		||||
	while (list_user || user)
 | 
			
		||||
		{
 | 
			
		||||
		int userindex = -1;
 | 
			
		||||
		if (user) 
 | 
			
		||||
			VVERBOSE BIO_printf(bio_err, "Processing user \"%s\"\n",user);
 | 
			
		||||
		if ((userindex = get_index(db, user, 'U')) >= 0)
 | 
			
		||||
			{
 | 
			
		||||
			print_user(db,bio_err,userindex,(verbose > 0) || list_user) ;
 | 
			
		||||
			}
 | 
			
		||||
		
 | 
			
		||||
		if (list_user)
 | 
			
		||||
			{
 | 
			
		||||
			if (user == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"List all users\n");
 | 
			
		||||
 | 
			
		||||
				for (i=0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++)
 | 
			
		||||
					{
 | 
			
		||||
					print_user(db,bio_err,i,1) ;
 | 
			
		||||
					}
 | 
			
		||||
				list_user = 0;
 | 
			
		||||
				}
 | 
			
		||||
			else if (userindex < 0)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "user \"%s\" does not exist, ignored. t\n",
 | 
			
		||||
						   user);
 | 
			
		||||
				errors++;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else if (add_user)
 | 
			
		||||
			{
 | 
			
		||||
			if (userindex >= 0)
 | 
			
		||||
				{
 | 
			
		||||
				/* reactivation of a new user */
 | 
			
		||||
				char **row = sk_OPENSSL_PSTRING_value(db->db->data, userindex);
 | 
			
		||||
				BIO_printf(bio_err,"user \"%s\" reactivated.\n", user);
 | 
			
		||||
				row[DB_srptype][0] = 'V' ;
 | 
			
		||||
 | 
			
		||||
				doupdatedb = 1;
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				char *row[DB_NUMBER] ; char * gNid;
 | 
			
		||||
				row[DB_srpverifier] = NULL;
 | 
			
		||||
				row[DB_srpsalt] = NULL;
 | 
			
		||||
				row[DB_srpinfo] = NULL;
 | 
			
		||||
				if (!(gNid = srp_create_user(user,&(row[DB_srpverifier]), &(row[DB_srpsalt]),gNrow?gNrow[DB_srpsalt]:gN,gNrow?gNrow[DB_srpverifier]:NULL, passout, bio_err,verbose)))
 | 
			
		||||
					{
 | 
			
		||||
						BIO_printf(bio_err,"Cannot create srp verifier for user \"%s\", operation abandoned .\n",user);
 | 
			
		||||
						errors++ ;
 | 
			
		||||
						goto err;
 | 
			
		||||
					}
 | 
			
		||||
				row[DB_srpid] = BUF_strdup(user);
 | 
			
		||||
				row[DB_srptype] = BUF_strdup("v");
 | 
			
		||||
				row[DB_srpgN] = BUF_strdup(gNid);
 | 
			
		||||
 | 
			
		||||
				if (!row[DB_srpid] || !row[DB_srpgN] || !row[DB_srptype] || !row[DB_srpverifier] || !row[DB_srpsalt] ||
 | 
			
		||||
					(userinfo && (!(row[DB_srpinfo] = BUF_strdup(userinfo)))) || 
 | 
			
		||||
					!update_index(db, bio_err, row))
 | 
			
		||||
					{
 | 
			
		||||
					if (row[DB_srpid]) OPENSSL_free(row[DB_srpid]);
 | 
			
		||||
					if (row[DB_srpgN]) OPENSSL_free(row[DB_srpgN]);
 | 
			
		||||
					if (row[DB_srpinfo]) OPENSSL_free(row[DB_srpinfo]);
 | 
			
		||||
					if (row[DB_srptype]) OPENSSL_free(row[DB_srptype]);
 | 
			
		||||
					if (row[DB_srpverifier]) OPENSSL_free(row[DB_srpverifier]);
 | 
			
		||||
					if (row[DB_srpsalt]) OPENSSL_free(row[DB_srpsalt]);
 | 
			
		||||
					goto err;
 | 
			
		||||
					}
 | 
			
		||||
				doupdatedb = 1;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else if (modify_user)
 | 
			
		||||
			{
 | 
			
		||||
			if (userindex<0)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"user \"%s\" does not exist, operation ignored.\n",user);
 | 
			
		||||
				errors++ ;
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
 | 
			
		||||
				char **row=sk_OPENSSL_PSTRING_value(db->db->data, userindex);
 | 
			
		||||
				char type = row[DB_srptype][0] ;
 | 
			
		||||
				if (type == 'v')
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,"user \"%s\" already updated, operation ignored.\n",user);
 | 
			
		||||
					errors++ ;
 | 
			
		||||
					}
 | 
			
		||||
				else
 | 
			
		||||
					{
 | 
			
		||||
					char * gNid ;
 | 
			
		||||
 | 
			
		||||
					if (row[DB_srptype][0] == 'V')
 | 
			
		||||
						{
 | 
			
		||||
						int user_gN ;
 | 
			
		||||
						char ** irow = NULL;
 | 
			
		||||
						VERBOSE BIO_printf(bio_err,"Verifying password for user \"%s\"\n",user);
 | 
			
		||||
						if ( (user_gN = get_index(db, row[DB_srpgN],DB_SRP_INDEX)) >= 0)
 | 
			
		||||
							irow = sk_OPENSSL_PSTRING_value(db->db->data,
 | 
			
		||||
															userindex);
 | 
			
		||||
 | 
			
		||||
 						if (!srp_verify_user(user,row[DB_srpverifier], row[DB_srpsalt],irow?irow[DB_srpsalt]:row[DB_srpgN], irow?irow[DB_srpverifier]:NULL, passin, bio_err,verbose))
 | 
			
		||||
							{
 | 
			
		||||
							BIO_printf(bio_err,"Invalid password for user \"%s\", operation abandoned.\n",user);
 | 
			
		||||
							errors++ ;
 | 
			
		||||
							goto err;
 | 
			
		||||
							}
 | 
			
		||||
						} 
 | 
			
		||||
					VERBOSE BIO_printf(bio_err,"Password for user \"%s\" ok.\n",user);
 | 
			
		||||
 | 
			
		||||
					if (!(gNid=srp_create_user(user,&(row[DB_srpverifier]), &(row[DB_srpsalt]),gNrow?gNrow[DB_srpsalt]:NULL, gNrow?gNrow[DB_srpverifier]:NULL, passout, bio_err,verbose)))
 | 
			
		||||
						{
 | 
			
		||||
							BIO_printf(bio_err,
 | 
			
		||||
									   "Cannot create srp verifier for user "
 | 
			
		||||
									   "\"%s\", operation abandonned .\n",
 | 
			
		||||
									   user);
 | 
			
		||||
							errors++;
 | 
			
		||||
							goto err;
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
					row[DB_srptype][0] = 'v';
 | 
			
		||||
					row[DB_srpgN] = BUF_strdup(gNid);
 | 
			
		||||
 
 | 
			
		||||
					if (!row[DB_srpid] || !row[DB_srpgN] || !row[DB_srptype] || !row[DB_srpverifier] || !row[DB_srpsalt] ||
 | 
			
		||||
						(userinfo && (!(row[DB_srpinfo] = BUF_strdup(userinfo)))))  
 | 
			
		||||
						goto err;
 | 
			
		||||
 | 
			
		||||
					doupdatedb = 1;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else if (delete_user)
 | 
			
		||||
			{
 | 
			
		||||
			if (userindex < 0)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "user \"%s\" does not exist, operation ignored. t\n", user);
 | 
			
		||||
				errors++;
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				char ** xpp = sk_OPENSSL_PSTRING_value(db->db->data,userindex);
 | 
			
		||||
				BIO_printf(bio_err,"user \"%s\" revoked. t\n",user);
 | 
			
		||||
 | 
			
		||||
				xpp[DB_srptype][0] = 'R' ;
 | 
			
		||||
				
 | 
			
		||||
				doupdatedb = 1;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		if (--argc > 0)
 | 
			
		||||
			user = *(argv++) ;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			user = NULL;
 | 
			
		||||
			list_user = 0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	VERBOSE BIO_printf(bio_err,"User procession done.\n");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if (doupdatedb)
 | 
			
		||||
		{
 | 
			
		||||
		/* Lets check some fields */
 | 
			
		||||
		for (i=0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++)
 | 
			
		||||
			{
 | 
			
		||||
			pp=sk_OPENSSL_PSTRING_value(db->db->data,i);
 | 
			
		||||
	
 | 
			
		||||
			if (pp[DB_srptype][0] == 'v')
 | 
			
		||||
				{
 | 
			
		||||
				pp[DB_srptype][0] = 'V';
 | 
			
		||||
				print_user(db,bio_err,i,verbose) ;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		VERBOSE BIO_printf(bio_err,"Trying to update srpvfile.\n");
 | 
			
		||||
		if (!save_index(dbfile,"new",db)) goto err;
 | 
			
		||||
				
 | 
			
		||||
		VERBOSE BIO_printf(bio_err,"Temporary srpvfile created.\n");
 | 
			
		||||
		if (!rotate_index(dbfile,"new","old")) goto err;
 | 
			
		||||
 | 
			
		||||
		VERBOSE BIO_printf(bio_err,"srpvfile updated.\n");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ret = (errors != 0);
 | 
			
		||||
err:
 | 
			
		||||
	if (errors != 0)
 | 
			
		||||
	VERBOSE BIO_printf(bio_err,"User errors %d.\n",errors);
 | 
			
		||||
 | 
			
		||||
	VERBOSE BIO_printf(bio_err,"SRP terminating with code %d.\n",ret);
 | 
			
		||||
	if(tofree)
 | 
			
		||||
		OPENSSL_free(tofree);
 | 
			
		||||
	if (ret) ERR_print_errors(bio_err);
 | 
			
		||||
	if (randfile) app_RAND_write_file(randfile, bio_err);
 | 
			
		||||
	if (conf) NCONF_free(conf);
 | 
			
		||||
	if (db) free_index(db);
 | 
			
		||||
 | 
			
		||||
	OBJ_cleanup();
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -7,7 +7,6 @@ static unsigned char dsa512_priv[] = {
 | 
			
		||||
	0x65,0xe5,0xc7,0x38,0x60,0x24,0xb5,0x89,0xd4,0x9c,0xeb,0x4c,
 | 
			
		||||
	0x9c,0x1d,0x7a,0x22,0xbd,0xd1,0xc2,0xd2,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa512_pub[] = {
 | 
			
		||||
	0x00,0x95,0xa7,0x0d,0xec,0x93,0x68,0xba,0x5f,0xf7,0x5f,0x07,
 | 
			
		||||
	0xf2,0x3b,0xad,0x6b,0x01,0xdc,0xbe,0xec,0xde,0x04,0x7a,0x3a,
 | 
			
		||||
@@ -16,7 +15,6 @@ static unsigned char dsa512_pub[] = {
 | 
			
		||||
	0x8c,0x38,0x5d,0x83,0x56,0x7d,0xee,0x53,0x05,0x3e,0x24,0x84,
 | 
			
		||||
	0xbe,0xba,0x0a,0x6b,0xc8,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa512_p[]={
 | 
			
		||||
	0x9D,0x1B,0x69,0x8E,0x26,0xDB,0xF2,0x2B,0x11,0x70,0x19,0x86,
 | 
			
		||||
	0xF6,0x19,0xC8,0xF8,0x19,0xF2,0x18,0x53,0x94,0x46,0x06,0xD0,
 | 
			
		||||
@@ -25,12 +23,10 @@ static unsigned char dsa512_p[] = {
 | 
			
		||||
	0x96,0xE4,0x37,0x33,0xBB,0x2D,0x5A,0xD7,0x5A,0x11,0x40,0x66,
 | 
			
		||||
	0xA2,0x76,0x7D,0x31,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa512_q[]={
 | 
			
		||||
	0xFB,0x53,0xEF,0x50,0xB4,0x40,0x92,0x31,0x56,0x86,0x53,0x7A,
 | 
			
		||||
	0xE8,0x8B,0x22,0x9A,0x49,0xFB,0x71,0x8F,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa512_g[]={
 | 
			
		||||
	0x83,0x3E,0x88,0xE5,0xC5,0x89,0x73,0xCE,0x3B,0x6C,0x01,0x49,
 | 
			
		||||
	0xBF,0xB3,0xC7,0x9F,0x0A,0xEA,0x44,0x91,0xE5,0x30,0xAA,0xD9,
 | 
			
		||||
@@ -44,15 +40,14 @@ DSA *get_dsa512()
 | 
			
		||||
	{
 | 
			
		||||
	DSA *dsa;
 | 
			
		||||
 | 
			
		||||
    if ((dsa = DSA_new()) == NULL)
 | 
			
		||||
        return (NULL);
 | 
			
		||||
	if ((dsa=DSA_new()) == NULL) return(NULL);
 | 
			
		||||
	dsa->priv_key=BN_bin2bn(dsa512_priv,sizeof(dsa512_priv),NULL);
 | 
			
		||||
	dsa->pub_key=BN_bin2bn(dsa512_pub,sizeof(dsa512_pub),NULL);
 | 
			
		||||
	dsa->p=BN_bin2bn(dsa512_p,sizeof(dsa512_p),NULL);
 | 
			
		||||
	dsa->q=BN_bin2bn(dsa512_q,sizeof(dsa512_q),NULL);
 | 
			
		||||
	dsa->g=BN_bin2bn(dsa512_g,sizeof(dsa512_g),NULL);
 | 
			
		||||
    if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL)
 | 
			
		||||
        || (dsa->q == NULL) || (dsa->g == NULL))
 | 
			
		||||
	if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL) ||
 | 
			
		||||
				(dsa->q == NULL) || (dsa->g == NULL))
 | 
			
		||||
		return(NULL);
 | 
			
		||||
	return(dsa);
 | 
			
		||||
	}
 | 
			
		||||
@@ -61,7 +56,6 @@ static unsigned char dsa1024_priv[] = {
 | 
			
		||||
	0x7d,0x21,0xda,0xbb,0x62,0x15,0x47,0x36,0x07,0x67,0x12,0xe8,
 | 
			
		||||
	0x8c,0xaa,0x1c,0xcd,0x38,0x12,0x61,0x18,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa1024_pub[]={
 | 
			
		||||
	0x3c,0x4e,0x9c,0x2a,0x7f,0x16,0xc1,0x25,0xeb,0xac,0x78,0x63,
 | 
			
		||||
	0x90,0x14,0x8c,0x8b,0xf4,0x68,0x43,0x3c,0x2d,0xee,0x65,0x50,
 | 
			
		||||
@@ -75,7 +69,6 @@ static unsigned char dsa1024_pub[] = {
 | 
			
		||||
	0x2c,0x0b,0xc3,0x13,0x50,0x61,0xe5,0xad,0xbd,0x36,0xb8,0x97,
 | 
			
		||||
	0x4e,0x40,0x7d,0xe8,0x83,0x0d,0xbc,0x4b
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa1024_p[]={
 | 
			
		||||
	0xA7,0x3F,0x6E,0x85,0xBF,0x41,0x6A,0x29,0x7D,0xF0,0x9F,0x47,
 | 
			
		||||
	0x19,0x30,0x90,0x9A,0x09,0x1D,0xDA,0x6A,0x33,0x1E,0xC5,0x3D,
 | 
			
		||||
@@ -89,12 +82,10 @@ static unsigned char dsa1024_p[] = {
 | 
			
		||||
	0x39,0x4F,0xFD,0xB7,0x43,0x1F,0xB5,0xA4,0x65,0x6F,0xCD,0x80,
 | 
			
		||||
	0x11,0xE4,0x70,0x95,0x5B,0x50,0xCD,0x49,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa1024_q[]={
 | 
			
		||||
	0xF7,0x07,0x31,0xED,0xFA,0x6C,0x06,0x03,0xD5,0x85,0x8A,0x1C,
 | 
			
		||||
	0xAC,0x9C,0x65,0xE7,0x50,0x66,0x65,0x6F,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa1024_g[]={
 | 
			
		||||
	0x4D,0xDF,0x4C,0x03,0xA6,0x91,0x8A,0xF5,0x19,0x6F,0x50,0x46,
 | 
			
		||||
	0x25,0x99,0xE5,0x68,0x6F,0x30,0xE3,0x69,0xE1,0xE5,0xB3,0x5D,
 | 
			
		||||
@@ -113,15 +104,14 @@ DSA *get_dsa1024()
 | 
			
		||||
	{
 | 
			
		||||
	DSA *dsa;
 | 
			
		||||
 | 
			
		||||
    if ((dsa = DSA_new()) == NULL)
 | 
			
		||||
        return (NULL);
 | 
			
		||||
	if ((dsa=DSA_new()) == NULL) return(NULL);
 | 
			
		||||
	dsa->priv_key=BN_bin2bn(dsa1024_priv,sizeof(dsa1024_priv),NULL);
 | 
			
		||||
	dsa->pub_key=BN_bin2bn(dsa1024_pub,sizeof(dsa1024_pub),NULL);
 | 
			
		||||
	dsa->p=BN_bin2bn(dsa1024_p,sizeof(dsa1024_p),NULL);
 | 
			
		||||
	dsa->q=BN_bin2bn(dsa1024_q,sizeof(dsa1024_q),NULL);
 | 
			
		||||
	dsa->g=BN_bin2bn(dsa1024_g,sizeof(dsa1024_g),NULL);
 | 
			
		||||
    if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL)
 | 
			
		||||
        || (dsa->q == NULL) || (dsa->g == NULL))
 | 
			
		||||
	if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL) ||
 | 
			
		||||
				(dsa->q == NULL) || (dsa->g == NULL))
 | 
			
		||||
		return(NULL);
 | 
			
		||||
	return(dsa);
 | 
			
		||||
	}
 | 
			
		||||
@@ -130,7 +120,6 @@ static unsigned char dsa2048_priv[] = {
 | 
			
		||||
	0x32,0x67,0x92,0xf6,0xc4,0xe2,0xe2,0xe8,0xa0,0x8b,0x6b,0x45,
 | 
			
		||||
	0x0c,0x8a,0x76,0xb0,0xee,0xcf,0x91,0xa7,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa2048_pub[]={
 | 
			
		||||
	0x17,0x8f,0xa8,0x11,0x84,0x92,0xec,0x83,0x47,0xc7,0x6a,0xb0,
 | 
			
		||||
	0x92,0xaf,0x5a,0x20,0x37,0xa3,0x64,0x79,0xd2,0xd0,0x3d,0xcd,
 | 
			
		||||
@@ -155,7 +144,6 @@ static unsigned char dsa2048_pub[] = {
 | 
			
		||||
	0x72,0xf4,0x10,0xe6,0x8d,0x52,0x16,0x7f,0xf2,0xc9,0xf8,0x33,
 | 
			
		||||
	0x8b,0x33,0xb7,0xce,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa2048_p[]={
 | 
			
		||||
	0xA0,0x25,0xFA,0xAD,0xF4,0x8E,0xB9,0xE5,0x99,0xF3,0x5D,0x6F,
 | 
			
		||||
	0x4F,0x83,0x34,0xE2,0x7E,0xCF,0x6F,0xBF,0x30,0xAF,0x6F,0x81,
 | 
			
		||||
@@ -180,12 +168,10 @@ static unsigned char dsa2048_p[] = {
 | 
			
		||||
	0x5D,0xA7,0xD8,0x54,0xC3,0x65,0x7D,0xC3,0xB0,0x1D,0xBF,0xAE,
 | 
			
		||||
	0xF8,0x68,0xCF,0x9B,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa2048_q[]={
 | 
			
		||||
	0x97,0xE7,0x33,0x4D,0xD3,0x94,0x3E,0x0B,0xDB,0x62,0x74,0xC6,
 | 
			
		||||
	0xA1,0x08,0xDD,0x19,0xA3,0x75,0x17,0x1B,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa2048_g[]={
 | 
			
		||||
	0x2C,0x78,0x16,0x59,0x34,0x63,0xF4,0xF3,0x92,0xFC,0xB5,0xA5,
 | 
			
		||||
	0x4F,0x13,0xDE,0x2F,0x1C,0xA4,0x3C,0xAE,0xAD,0x38,0x3F,0x7E,
 | 
			
		||||
@@ -215,19 +201,17 @@ DSA *get_dsa2048()
 | 
			
		||||
	{
 | 
			
		||||
	DSA *dsa;
 | 
			
		||||
 
 | 
			
		||||
    if ((dsa = DSA_new()) == NULL)
 | 
			
		||||
        return (NULL);
 | 
			
		||||
	if ((dsa=DSA_new()) == NULL) return(NULL);
 | 
			
		||||
	dsa->priv_key=BN_bin2bn(dsa2048_priv,sizeof(dsa2048_priv),NULL);
 | 
			
		||||
	dsa->pub_key=BN_bin2bn(dsa2048_pub,sizeof(dsa2048_pub),NULL);
 | 
			
		||||
	dsa->p=BN_bin2bn(dsa2048_p,sizeof(dsa2048_p),NULL);
 | 
			
		||||
	dsa->q=BN_bin2bn(dsa2048_q,sizeof(dsa2048_q),NULL);
 | 
			
		||||
	dsa->g=BN_bin2bn(dsa2048_g,sizeof(dsa2048_g),NULL);
 | 
			
		||||
    if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL)
 | 
			
		||||
        || (dsa->q == NULL) || (dsa->g == NULL))
 | 
			
		||||
	if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL) ||
 | 
			
		||||
				(dsa->q == NULL) || (dsa->g == NULL))
 | 
			
		||||
		return(NULL);
 | 
			
		||||
	return(dsa);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static const char rnd_seed[] =
 | 
			
		||||
    "string to make the random number generator think it has entropy";
 | 
			
		||||
static const char rnd_seed[] = "string to make the random number generator think it has entropy";
 | 
			
		||||
static int rnd_fake = 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
#!/usr/bin/perl -w
 | 
			
		||||
# Written by Zoltan Glozik <zglozik@stones.com>.
 | 
			
		||||
# Copyright (c) 2002 The OpenTSA Project.  All rights reserved.
 | 
			
		||||
$::version = '$Id: tsget,v 1.1.2.2 2009/09/07 17:57:02 steve Exp $';
 | 
			
		||||
$::version = '$Id: tsget,v 1.3 2009/09/07 17:57:18 steve Exp $';
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use IO::Handle;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										140
									
								
								apps/verify.c
									
									
									
									
									
								
							
							
						
						
									
										140
									
								
								apps/verify.c
									
									
									
									
									
								
							@@ -93,8 +93,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	cert_ctx=X509_STORE_new();
 | 
			
		||||
    if (cert_ctx == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
	if (cert_ctx == NULL) goto end;
 | 
			
		||||
	X509_STORE_set_verify_cb(cert_ctx,cb);
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
@@ -110,37 +109,46 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (argc >= 1) {
 | 
			
		||||
            if (strcmp(*argv, "-CApath") == 0) {
 | 
			
		||||
                if (argc-- < 1)
 | 
			
		||||
                    goto end;
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (argc >= 1)
 | 
			
		||||
			{
 | 
			
		||||
			if (strcmp(*argv,"-CApath") == 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (argc-- < 1) goto end;
 | 
			
		||||
				CApath= *(++argv);
 | 
			
		||||
            } else if (strcmp(*argv, "-CAfile") == 0) {
 | 
			
		||||
                if (argc-- < 1)
 | 
			
		||||
                    goto end;
 | 
			
		||||
				}
 | 
			
		||||
			else if (strcmp(*argv,"-CAfile") == 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (argc-- < 1) goto end;
 | 
			
		||||
				CAfile= *(++argv);
 | 
			
		||||
            } else if (args_verify(&argv, &argc, &badarg, bio_err, &vpm)) {
 | 
			
		||||
				}
 | 
			
		||||
			else if (args_verify(&argv, &argc, &badarg, bio_err,
 | 
			
		||||
									&vpm))
 | 
			
		||||
				{
 | 
			
		||||
				if (badarg)
 | 
			
		||||
					goto end;
 | 
			
		||||
				continue;
 | 
			
		||||
            } else if (strcmp(*argv, "-untrusted") == 0) {
 | 
			
		||||
                if (argc-- < 1)
 | 
			
		||||
                    goto end;
 | 
			
		||||
				}
 | 
			
		||||
			else if (strcmp(*argv,"-untrusted") == 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (argc-- < 1) goto end;
 | 
			
		||||
				untfile= *(++argv);
 | 
			
		||||
            } else if (strcmp(*argv, "-trusted") == 0) {
 | 
			
		||||
                if (argc-- < 1)
 | 
			
		||||
                    goto end;
 | 
			
		||||
				}
 | 
			
		||||
			else if (strcmp(*argv,"-trusted") == 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (argc-- < 1) goto end;
 | 
			
		||||
				trustfile= *(++argv);
 | 
			
		||||
            } else if (strcmp(*argv, "-CRLfile") == 0) {
 | 
			
		||||
                if (argc-- < 1)
 | 
			
		||||
                    goto end;
 | 
			
		||||
				}
 | 
			
		||||
			else if (strcmp(*argv,"-CRLfile") == 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (argc-- < 1) goto end;
 | 
			
		||||
				crlfile= *(++argv);
 | 
			
		||||
				}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
            else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
                if (--argc < 1)
 | 
			
		||||
                    goto end;
 | 
			
		||||
			else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (--argc < 1) goto end;
 | 
			
		||||
				engine= *(++argv);
 | 
			
		||||
				}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -154,7 +162,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				break;
 | 
			
		||||
			argc--;
 | 
			
		||||
			argv++;
 | 
			
		||||
        } else
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -166,8 +175,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		X509_STORE_set1_param(cert_ctx, vpm);
 | 
			
		||||
 | 
			
		||||
	lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_file());
 | 
			
		||||
    if (lookup == NULL)
 | 
			
		||||
        abort();
 | 
			
		||||
	if (lookup == NULL) abort();
 | 
			
		||||
	if (CAfile) {
 | 
			
		||||
		i=X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM);
 | 
			
		||||
		if(!i) {
 | 
			
		||||
@@ -175,12 +183,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
    } else
 | 
			
		||||
        X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT);
 | 
			
		||||
	} else X509_LOOKUP_load_file(lookup,NULL,X509_FILETYPE_DEFAULT);
 | 
			
		||||
		
 | 
			
		||||
	lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_hash_dir());
 | 
			
		||||
    if (lookup == NULL)
 | 
			
		||||
        abort();
 | 
			
		||||
	if (lookup == NULL) abort();
 | 
			
		||||
	if (CApath) {
 | 
			
		||||
		i=X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM);
 | 
			
		||||
		if(!i) {
 | 
			
		||||
@@ -188,58 +194,69 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
    } else
 | 
			
		||||
        X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT);
 | 
			
		||||
	} else X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
 | 
			
		||||
 | 
			
		||||
	ERR_clear_error();
 | 
			
		||||
 | 
			
		||||
    if (untfile) {
 | 
			
		||||
	if(untfile)
 | 
			
		||||
		{
 | 
			
		||||
		untrusted = load_certs(bio_err, untfile, FORMAT_PEM,
 | 
			
		||||
					NULL, e, "untrusted certificates");
 | 
			
		||||
		if(!untrusted)
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (trustfile) {
 | 
			
		||||
	if(trustfile)
 | 
			
		||||
		{
 | 
			
		||||
		trusted = load_certs(bio_err, trustfile, FORMAT_PEM,
 | 
			
		||||
					NULL, e, "trusted certificates");
 | 
			
		||||
		if(!trusted)
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (crlfile) {
 | 
			
		||||
        crls = load_crls(bio_err, crlfile, FORMAT_PEM, NULL, e, "other CRLs");
 | 
			
		||||
	if(crlfile)
 | 
			
		||||
		{
 | 
			
		||||
		crls = load_crls(bio_err, crlfile, FORMAT_PEM,
 | 
			
		||||
					NULL, e, "other CRLs");
 | 
			
		||||
		if(!crls)
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (argc < 1)
 | 
			
		||||
        check(cert_ctx, NULL, untrusted, trusted, crls, e);
 | 
			
		||||
	if (argc < 1) check(cert_ctx, NULL, untrusted, trusted, crls, e);
 | 
			
		||||
	else
 | 
			
		||||
		for (i=0; i<argc; i++)
 | 
			
		||||
			check(cert_ctx,argv[i], untrusted, trusted, crls, e);
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (ret == 1) {
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check]");
 | 
			
		||||
		BIO_printf(bio_err,"usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check]");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," [-engine e]");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," cert1 cert2 ...\n");
 | 
			
		||||
 | 
			
		||||
		BIO_printf(bio_err,"recognized usages:\n");
 | 
			
		||||
        for (i = 0; i < X509_PURPOSE_get_count(); i++) {
 | 
			
		||||
		for(i = 0; i < X509_PURPOSE_get_count(); i++)
 | 
			
		||||
			{
 | 
			
		||||
			X509_PURPOSE *ptmp;
 | 
			
		||||
			ptmp = X509_PURPOSE_get0(i);
 | 
			
		||||
			BIO_printf(bio_err, "\t%-10s\t%s\n",
 | 
			
		||||
					X509_PURPOSE_get0_sname(ptmp),
 | 
			
		||||
					X509_PURPOSE_get0_name(ptmp));
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		BIO_printf(bio_err,"recognized verify names:\n");
 | 
			
		||||
		for(i = 0; i < X509_VERIFY_PARAM_get_count(); i++)
 | 
			
		||||
			{
 | 
			
		||||
			const X509_VERIFY_PARAM *vptmp;
 | 
			
		||||
			vptmp = X509_VERIFY_PARAM_get0(i);
 | 
			
		||||
			BIO_printf(bio_err, "\t%-10s\n",
 | 
			
		||||
					X509_VERIFY_PARAM_get0_name(vptmp));
 | 
			
		||||
			}
 | 
			
		||||
    if (vpm)
 | 
			
		||||
        X509_VERIFY_PARAM_free(vpm);
 | 
			
		||||
    if (cert_ctx != NULL)
 | 
			
		||||
        X509_STORE_free(cert_ctx);
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	if (vpm) X509_VERIFY_PARAM_free(vpm);
 | 
			
		||||
	if (cert_ctx != NULL) X509_STORE_free(cert_ctx);
 | 
			
		||||
	sk_X509_pop_free(untrusted, X509_free);
 | 
			
		||||
	sk_X509_pop_free(trusted, X509_free);
 | 
			
		||||
	sk_X509_CRL_pop_free(crls, X509_CRL_free);
 | 
			
		||||
@@ -261,17 +278,18 @@ static int check(X509_STORE *ctx, char *file,
 | 
			
		||||
	fprintf(stdout,"%s: ",(file == NULL)?"stdin":file);
 | 
			
		||||
 | 
			
		||||
	csc = X509_STORE_CTX_new();
 | 
			
		||||
    if (csc == NULL) {
 | 
			
		||||
	if (csc == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	X509_STORE_set_flags(ctx, vflags);
 | 
			
		||||
    if (!X509_STORE_CTX_init(csc, ctx, x, uchain)) {
 | 
			
		||||
	if(!X509_STORE_CTX_init(csc,ctx,x,uchain))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (tchain)
 | 
			
		||||
        X509_STORE_CTX_trusted_stack(csc, tchain);
 | 
			
		||||
	if(tchain) X509_STORE_CTX_trusted_stack(csc, tchain);
 | 
			
		||||
	if (crls)
 | 
			
		||||
		X509_STORE_CTX_set0_crls(csc, crls);
 | 
			
		||||
	i=X509_verify_cert(csc);
 | 
			
		||||
@@ -279,13 +297,14 @@ static int check(X509_STORE *ctx, char *file,
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
    if (i > 0) {
 | 
			
		||||
	if (i > 0)
 | 
			
		||||
		{
 | 
			
		||||
		fprintf(stdout,"OK\n");
 | 
			
		||||
		ret=1;
 | 
			
		||||
    } else
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
    if (x != NULL)
 | 
			
		||||
        X509_free(x);
 | 
			
		||||
	if (x != NULL) X509_free(x);
 | 
			
		||||
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
@@ -295,8 +314,10 @@ static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
	int cert_error = X509_STORE_CTX_get_error(ctx);
 | 
			
		||||
	X509 *current_cert = X509_STORE_CTX_get_current_cert(ctx);
 | 
			
		||||
 | 
			
		||||
    if (!ok) {
 | 
			
		||||
        if (current_cert) {
 | 
			
		||||
	if (!ok)
 | 
			
		||||
		{
 | 
			
		||||
		if (current_cert)
 | 
			
		||||
			{
 | 
			
		||||
			X509_NAME_print_ex_fp(stdout,
 | 
			
		||||
				X509_get_subject_name(current_cert),
 | 
			
		||||
				0, XN_FLAG_ONELINE);
 | 
			
		||||
@@ -307,14 +328,15 @@ static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
			cert_error,
 | 
			
		||||
			X509_STORE_CTX_get_error_depth(ctx),
 | 
			
		||||
			X509_verify_cert_error_string(cert_error));
 | 
			
		||||
        switch (cert_error) {
 | 
			
		||||
		switch(cert_error)
 | 
			
		||||
			{
 | 
			
		||||
			case X509_V_ERR_NO_EXPLICIT_POLICY:
 | 
			
		||||
				policies_print(NULL, ctx);
 | 
			
		||||
			case X509_V_ERR_CERT_HAS_EXPIRED:
 | 
			
		||||
 | 
			
		||||
            /*
 | 
			
		||||
             * since we are just checking the certificates, it is ok if they
 | 
			
		||||
             * are self signed. But we should still warn the user.
 | 
			
		||||
			/* since we are just checking the certificates, it is
 | 
			
		||||
			 * ok if they are self signed. But we should still warn
 | 
			
		||||
			 * the user.
 | 
			
		||||
			 */
 | 
			
		||||
 | 
			
		||||
			case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
 | 
			
		||||
 
 | 
			
		||||
@@ -148,9 +148,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
    if (argc == 1)
 | 
			
		||||
        version = 1;
 | 
			
		||||
    for (i = 1; i < argc; i++) {
 | 
			
		||||
	if (argc == 1) version=1;
 | 
			
		||||
	for (i=1; i<argc; i++)
 | 
			
		||||
		{
 | 
			
		||||
		if (strcmp(argv[i],"-v") == 0)
 | 
			
		||||
			version=1;	
 | 
			
		||||
		else if (strcmp(argv[i],"-b") == 0)
 | 
			
		||||
@@ -165,26 +165,31 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			dir=1;
 | 
			
		||||
		else if (strcmp(argv[i],"-a") == 0)
 | 
			
		||||
			date=version=cflags=options=platform=dir=1;
 | 
			
		||||
        else {
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"usage:version -[avbofpd]\n");
 | 
			
		||||
			ret=1;
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
    if (version) {
 | 
			
		||||
        if (SSLeay() == SSLEAY_VERSION_NUMBER) {
 | 
			
		||||
	if (version)
 | 
			
		||||
		{
 | 
			
		||||
		if (SSLeay() == SSLEAY_VERSION_NUMBER)
 | 
			
		||||
			{
 | 
			
		||||
			printf("%s\n",SSLeay_version(SSLEAY_VERSION));
 | 
			
		||||
        } else {
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			printf("%s (Library: %s)\n",
 | 
			
		||||
                   OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION));
 | 
			
		||||
				OPENSSL_VERSION_TEXT,
 | 
			
		||||
				SSLeay_version(SSLEAY_VERSION));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (date)
 | 
			
		||||
        printf("%s\n", SSLeay_version(SSLEAY_BUILT_ON));
 | 
			
		||||
    if (platform)
 | 
			
		||||
        printf("%s\n", SSLeay_version(SSLEAY_PLATFORM));
 | 
			
		||||
    if (options) {
 | 
			
		||||
	if (date)    printf("%s\n",SSLeay_version(SSLEAY_BUILT_ON));
 | 
			
		||||
	if (platform) printf("%s\n",SSLeay_version(SSLEAY_PLATFORM));
 | 
			
		||||
	if (options) 
 | 
			
		||||
		{
 | 
			
		||||
		printf("options:  ");
 | 
			
		||||
		printf("%s ",BN_options());
 | 
			
		||||
#ifndef OPENSSL_NO_MD2
 | 
			
		||||
@@ -204,10 +209,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#endif
 | 
			
		||||
		printf("\n");
 | 
			
		||||
		}
 | 
			
		||||
    if (cflags)
 | 
			
		||||
        printf("%s\n", SSLeay_version(SSLEAY_CFLAGS));
 | 
			
		||||
    if (dir)
 | 
			
		||||
        printf("%s\n", SSLeay_version(SSLEAY_DIR));
 | 
			
		||||
	if (cflags)  printf("%s\n",SSLeay_version(SSLEAY_CFLAGS));
 | 
			
		||||
	if (dir)  printf("%s\n",SSLeay_version(SSLEAY_DIR));
 | 
			
		||||
end:
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										68
									
								
								apps/vms_decc_init.c
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										68
									
								
								apps/vms_decc_init.c
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -5,7 +5,7 @@
 | 
			
		||||
 | 
			
		||||
#ifdef USE_DECC_INIT
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
/*
 | 
			
		||||
 * 2010-04-26 SMS.
 | 
			
		||||
 *
 | 
			
		||||
 *----------------------------------------------------------------------
 | 
			
		||||
@@ -22,34 +22,37 @@
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <unixlib.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Global storage. */
 | 
			
		||||
 | 
			
		||||
/* Flag to sense if decc_init() was called. */
 | 
			
		||||
 | 
			
		||||
int decc_init_done = -1;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Structure to hold a DECC$* feature name and its desired value. */
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
    char *name;
 | 
			
		||||
    int value;
 | 
			
		||||
} decc_feat_t;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Array of DECC$* feature names and their desired values. Note:
 | 
			
		||||
 * DECC$ARGV_PARSE_STYLE is the urgent one.
 | 
			
		||||
 | 
			
		||||
/* Array of DECC$* feature names and their desired values.
 | 
			
		||||
 * Note: DECC$ARGV_PARSE_STYLE is the urgent one.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
decc_feat_t decc_feat_array[] = {
 | 
			
		||||
decc_feat_t decc_feat_array[] =
 | 
			
		||||
{
 | 
			
		||||
 /* Preserve command-line case with SET PROCESS/PARSE_STYLE=EXTENDED */
 | 
			
		||||
 { "DECC$ARGV_PARSE_STYLE", 1 },
 | 
			
		||||
 | 
			
		||||
 /* Preserve case for file names on ODS5 disks. */
 | 
			
		||||
 { "DECC$EFS_CASE_PRESERVE", 1 },
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * Enable multiple dots (and most characters) in ODS5 file names, while
 | 
			
		||||
     * preserving VMS-ness of ";version".
 | 
			
		||||
 /* Enable multiple dots (and most characters) in ODS5 file names,
 | 
			
		||||
  * while preserving VMS-ness of ";version".
 | 
			
		||||
  */
 | 
			
		||||
 { "DECC$EFS_CHARSET", 1 },
 | 
			
		||||
 | 
			
		||||
@@ -57,6 +60,7 @@ decc_feat_t decc_feat_array[] = {
 | 
			
		||||
 { (char *)NULL, 0 }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* LIB$INITIALIZE initialization function. */
 | 
			
		||||
 | 
			
		||||
static void decc_init( void)
 | 
			
		||||
@@ -72,9 +76,11 @@ static void decc_init(void)
 | 
			
		||||
 | 
			
		||||
    /* Get debug option. */
 | 
			
		||||
    openssl_debug_decc_init = getenv( "OPENSSL_DEBUG_DECC_INIT");
 | 
			
		||||
    if (openssl_debug_decc_init != NULL) {
 | 
			
		||||
    if (openssl_debug_decc_init != NULL)
 | 
			
		||||
    {
 | 
			
		||||
        verbose = strtol( openssl_debug_decc_init, NULL, 10);
 | 
			
		||||
        if (verbose <= 0) {
 | 
			
		||||
        if (verbose <= 0)
 | 
			
		||||
        {
 | 
			
		||||
            verbose = 1;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -84,10 +90,12 @@ static void decc_init(void)
 | 
			
		||||
 | 
			
		||||
    /* Loop through all items in the decc_feat_array[]. */
 | 
			
		||||
 | 
			
		||||
    for (i = 0; decc_feat_array[i].name != NULL; i++) {
 | 
			
		||||
    for (i = 0; decc_feat_array[ i].name != NULL; i++)
 | 
			
		||||
    {
 | 
			
		||||
        /* Get the feature index. */
 | 
			
		||||
        feat_index = decc$feature_get_index( decc_feat_array[ i].name);
 | 
			
		||||
        if (feat_index >= 0) {
 | 
			
		||||
        if (feat_index >= 0)
 | 
			
		||||
        {
 | 
			
		||||
            /* Valid item.  Collect its properties. */
 | 
			
		||||
            feat_value = decc$feature_get_value( feat_index, 1);
 | 
			
		||||
            feat_value_min = decc$feature_get_value( feat_index, 2);
 | 
			
		||||
@@ -95,34 +103,43 @@ static void decc_init(void)
 | 
			
		||||
 | 
			
		||||
            /* Check the validity of our desired value. */
 | 
			
		||||
            if ((decc_feat_array[ i].value >= feat_value_min) &&
 | 
			
		||||
                (decc_feat_array[i].value <= feat_value_max)) {
 | 
			
		||||
             (decc_feat_array[ i].value <= feat_value_max))
 | 
			
		||||
            {
 | 
			
		||||
                /* Valid value.  Set it if necessary. */
 | 
			
		||||
                if (feat_value != decc_feat_array[i].value) {
 | 
			
		||||
                if (feat_value != decc_feat_array[ i].value)
 | 
			
		||||
                {
 | 
			
		||||
                    sts = decc$feature_set_value( feat_index,
 | 
			
		||||
                                                 1, decc_feat_array[i].value);
 | 
			
		||||
                     1,
 | 
			
		||||
                     decc_feat_array[ i].value);
 | 
			
		||||
 | 
			
		||||
                    if (verbose > 1) {
 | 
			
		||||
                     if (verbose > 1)
 | 
			
		||||
                     {
 | 
			
		||||
                         fprintf( stderr, " %s = %d, sts = %d.\n",
 | 
			
		||||
                          decc_feat_array[ i].name,
 | 
			
		||||
                                decc_feat_array[i].value, sts);
 | 
			
		||||
                          decc_feat_array[ i].value,
 | 
			
		||||
                          sts);
 | 
			
		||||
                     }
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                /* Invalid DECC feature value. */
 | 
			
		||||
                fprintf( stderr,
 | 
			
		||||
                 " INVALID DECC$FEATURE VALUE, %d: %d <= %s <= %d.\n",
 | 
			
		||||
                 feat_value,
 | 
			
		||||
                        feat_value_min, decc_feat_array[i].name,
 | 
			
		||||
                        feat_value_max);
 | 
			
		||||
                 feat_value_min, decc_feat_array[ i].name, feat_value_max);
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            /* Invalid DECC feature name. */
 | 
			
		||||
            fprintf( stderr,
 | 
			
		||||
             " UNKNOWN DECC$FEATURE: %s.\n", decc_feat_array[ i].name);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (verbose > 0) {
 | 
			
		||||
    if (verbose > 0)
 | 
			
		||||
    {
 | 
			
		||||
        fprintf( stderr, " DECC_INIT complete.\n");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -131,9 +148,8 @@ static void decc_init(void)
 | 
			
		||||
 | 
			
		||||
#pragma nostandard
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Establish the LIB$INITIALIZE PSECTs, with proper alignment and other
 | 
			
		||||
 * attributes.  Note that "nopic" is significant only on VAX.
 | 
			
		||||
/* Establish the LIB$INITIALIZE PSECTs, with proper alignment and
 | 
			
		||||
 * other attributes.  Note that "nopic" is significant only on VAX.
 | 
			
		||||
 */
 | 
			
		||||
#pragma extern_model save
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -53,8 +53,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * Usage: winrand [filename]
 | 
			
		||||
/* Usage: winrand [filename]
 | 
			
		||||
 *
 | 
			
		||||
 * Collects entropy from mouse movements and other events and writes
 | 
			
		||||
 * random data to filename or .rnd
 | 
			
		||||
@@ -99,13 +98,14 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
 | 
			
		||||
 | 
			
		||||
        hwnd = CreateWindow(appname, OPENSSL_VERSION_TEXT,
 | 
			
		||||
		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
 | 
			
		||||
                        CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance,
 | 
			
		||||
                        NULL);
 | 
			
		||||
		CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
 | 
			
		||||
 | 
			
		||||
	ShowWindow(hwnd, iCmdShow);
 | 
			
		||||
	UpdateWindow(hwnd);
 | 
			
		||||
 | 
			
		||||
    while (GetMessage(&msg, NULL, 0, 0)) {
 | 
			
		||||
 | 
			
		||||
	while (GetMessage(&msg, NULL, 0, 0))
 | 
			
		||||
		{
 | 
			
		||||
		TranslateMessage(&msg);
 | 
			
		||||
		DispatchMessage(&msg);
 | 
			
		||||
		}
 | 
			
		||||
@@ -120,7 +120,8 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
 | 
			
		||||
        RECT rect;
 | 
			
		||||
        static int seeded = 0;
 | 
			
		||||
 | 
			
		||||
    switch (iMsg) {
 | 
			
		||||
	switch (iMsg)
 | 
			
		||||
		{
 | 
			
		||||
	case WM_PAINT:
 | 
			
		||||
		hdc = BeginPaint(hwnd, &ps);
 | 
			
		||||
		GetClientRect(hwnd, &rect);
 | 
			
		||||
@@ -134,7 +135,8 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
 | 
			
		||||
                return 0;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
    if (RAND_event(iMsg, wParam, lParam) == 1 && seeded == 0) {
 | 
			
		||||
        if (RAND_event(iMsg, wParam, lParam) == 1 && seeded == 0)
 | 
			
		||||
                {
 | 
			
		||||
                seeded = 1;
 | 
			
		||||
                if (RAND_write_file(filename) <= 0)
 | 
			
		||||
                        MessageBox(hwnd, "Couldn't write random file!",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										797
									
								
								apps/x509.c
									
									
									
									
									
								
							
							
						
						
									
										797
									
								
								apps/x509.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