Compare commits
	
		
			2243 Commits
		
	
	
		
			OpenSSL_1_
			...
			OpenSSL_1_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					3df69d3aef | ||
| 
						 | 
					921095d4d3 | ||
| 
						 | 
					5cc6509dae | ||
| 
						 | 
					18029a3d07 | ||
| 
						 | 
					7b22e8d01f | ||
| 
						 | 
					da947c9758 | ||
| 
						 | 
					128b271c8d | ||
| 
						 | 
					a8b1e52ff4 | ||
| 
						 | 
					d6e903d188 | ||
| 
						 | 
					86f8fb0e34 | ||
| 
						 | 
					c0334c2c92 | ||
| 
						 | 
					c3c7fb07dc | ||
| 
						 | 
					b19d814321 | ||
| 
						 | 
					76343947ad | ||
| 
						 | 
					4b22cce381 | ||
| 
						 | 
					b717b08307 | ||
| 
						 | 
					819418110b | ||
| 
						 | 
					77c77f0a1b | ||
| 
						 | 
					8b84495380 | ||
| 
						 | 
					c1559f5046 | ||
| 
						 | 
					d8d2e50359 | ||
| 
						 | 
					6c4ce00753 | ||
| 
						 | 
					fcb61b6c92 | ||
| 
						 | 
					b2b8163964 | ||
| 
						 | 
					56490fc26f | ||
| 
						 | 
					f2e95a02b1 | ||
| 
						 | 
					912c8c92b5 | ||
| 
						 | 
					94be83127b | ||
| 
						 | 
					be109b9eec | ||
| 
						 | 
					c0d69ddb33 | ||
| 
						 | 
					8cd6714084 | ||
| 
						 | 
					327de270d5 | ||
| 
						 | 
					8e91b3d991 | ||
| 
						 | 
					20223855e4 | ||
| 
						 | 
					563fc239d2 | ||
| 
						 | 
					15919ecadc | ||
| 
						 | 
					289c06823e | ||
| 
						 | 
					ff2459b918 | ||
| 
						 | 
					8944d10e2d | ||
| 
						 | 
					df57e42baa | ||
| 
						 | 
					9c5c18500b | ||
| 
						 | 
					35fafc4dbc | ||
| 
						 | 
					0c14565c5b | ||
| 
						 | 
					5a9e9669d8 | ||
| 
						 | 
					2b31fcc0b5 | ||
| 
						 | 
					b65b4c3481 | ||
| 
						 | 
					ef116b0003 | ||
| 
						 | 
					0d691e0e27 | ||
| 
						 | 
					ae3fcdf1e5 | ||
| 
						 | 
					d6ca1cee8b | ||
| 
						 | 
					bfa34f551c | ||
| 
						 | 
					f9aa27dc78 | ||
| 
						 | 
					f417997a32 | ||
| 
						 | 
					6ee3997134 | ||
| 
						 | 
					f9a21ed069 | ||
| 
						 | 
					d6b4a41d10 | ||
| 
						 | 
					9fdbaf3a32 | ||
| 
						 | 
					6fff54b0ce | ||
| 
						 | 
					6e20f55646 | ||
| 
						 | 
					87cd297d14 | ||
| 
						 | 
					195f6302bb | ||
| 
						 | 
					8f51c206b3 | ||
| 
						 | 
					f2aff60f6f | ||
| 
						 | 
					fbabc6c06e | ||
| 
						 | 
					bfb14d724b | ||
| 
						 | 
					4d2207f097 | ||
| 
						 | 
					b42e4a9f6b | ||
| 
						 | 
					78a6b77976 | ||
| 
						 | 
					ba5d0113e8 | ||
| 
						 | 
					f747572547 | ||
| 
						 | 
					36b619a06e | ||
| 
						 | 
					13c1807041 | ||
| 
						 | 
					f243def213 | ||
| 
						 | 
					1f956f9cda | ||
| 
						 | 
					98e6f07901 | ||
| 
						 | 
					f95519538a | ||
| 
						 | 
					79e2e927e6 | ||
| 
						 | 
					7f3563b576 | ||
| 
						 | 
					458a55af16 | ||
| 
						 | 
					681da86ebb | ||
| 
						 | 
					872f91c403 | ||
| 
						 | 
					ee1ccd0a41 | ||
| 
						 | 
					62bfff2d99 | ||
| 
						 | 
					95929797a0 | ||
| 
						 | 
					bcfaa4eeee | ||
| 
						 | 
					cb43fd0467 | ||
| 
						 | 
					ba25221226 | ||
| 
						 | 
					506805e708 | ||
| 
						 | 
					04222b630e | ||
| 
						 | 
					16064539ad | ||
| 
						 | 
					75c77a71fa | ||
| 
						 | 
					3b740cebd5 | ||
| 
						 | 
					f17a4ad7d7 | ||
| 
						 | 
					79e0285755 | ||
| 
						 | 
					8d5d455988 | ||
| 
						 | 
					1d5668c258 | ||
| 
						 | 
					bc1544d8c5 | ||
| 
						 | 
					6ca1dc9737 | ||
| 
						 | 
					0ed9ca21ae | ||
| 
						 | 
					11b32d6e29 | ||
| 
						 | 
					63ac16ccac | ||
| 
						 | 
					db7cb7ab9a | ||
| 
						 | 
					6d09851694 | ||
| 
						 | 
					63c1d16bb8 | ||
| 
						 | 
					6fa805f516 | ||
| 
						 | 
					06aab26874 | ||
| 
						 | 
					4ac0329582 | ||
| 
						 | 
					51e647f6e5 | ||
| 
						 | 
					ba7e998d5b | ||
| 
						 | 
					25fc5ac48a | ||
| 
						 | 
					d3b7cac41b | ||
| 
						 | 
					fdc3ced983 | ||
| 
						 | 
					65d6fdaa21 | ||
| 
						 | 
					f11818c88d | ||
| 
						 | 
					3577e01438 | ||
| 
						 | 
					2fc2649173 | ||
| 
						 | 
					2ad75afc3e | ||
| 
						 | 
					83975c80bb | ||
| 
						 | 
					323d39e87f | ||
| 
						 | 
					ae5c8664e5 | ||
| 
						 | 
					aae3233e1e | ||
| 
						 | 
					04f7cbea11 | ||
| 
						 | 
					45bd3616bb | ||
| 
						 | 
					335d4d06a7 | ||
| 
						 | 
					f3b6ee30f4 | ||
| 
						 | 
					a1b20ff654 | ||
| 
						 | 
					628afe685e | ||
| 
						 | 
					defc825e9e | ||
| 
						 | 
					319d5c7a58 | ||
| 
						 | 
					3807db9d91 | ||
| 
						 | 
					0f344da8f7 | ||
| 
						 | 
					23690f94d9 | ||
| 
						 | 
					9a11440ec0 | ||
| 
						 | 
					ea09c04e7e | ||
| 
						 | 
					e1e7dc5085 | ||
| 
						 | 
					cc4cd8213e | ||
| 
						 | 
					d18d367d90 | ||
| 
						 | 
					065e6718bb | ||
| 
						 | 
					3bca047362 | ||
| 
						 | 
					78e74b59c1 | ||
| 
						 | 
					c0edd77487 | ||
| 
						 | 
					e4e5457c29 | ||
| 
						 | 
					9b214383c1 | ||
| 
						 | 
					cc6e2a5936 | ||
| 
						 | 
					85b120f361 | ||
| 
						 | 
					65a6a1ff45 | ||
| 
						 | 
					fbdbb28ac6 | ||
| 
						 | 
					80e1750976 | ||
| 
						 | 
					11552ddc13 | ||
| 
						 | 
					4ce632fb45 | ||
| 
						 | 
					7b1ac23412 | ||
| 
						 | 
					bdc21a1571 | ||
| 
						 | 
					39108d595e | ||
| 
						 | 
					d565023ae8 | ||
| 
						 | 
					96a66a973b | ||
| 
						 | 
					20c554ce8f | ||
| 
						 | 
					d72781b4c9 | ||
| 
						 | 
					ff397a8ff0 | ||
| 
						 | 
					abef2b4c53 | ||
| 
						 | 
					d2f8517ad0 | ||
| 
						 | 
					27df27d4b9 | ||
| 
						 | 
					4a81e0f0d6 | ||
| 
						 | 
					24e6a032bf | ||
| 
						 | 
					9d63b5e375 | ||
| 
						 | 
					a45030fc9b | ||
| 
						 | 
					45b575a031 | ||
| 
						 | 
					bc2d623c0e | ||
| 
						 | 
					c695ebe2a0 | ||
| 
						 | 
					e19d4a99b8 | ||
| 
						 | 
					6977c7e2ba | ||
| 
						 | 
					43257b9f51 | ||
| 
						 | 
					10771e3421 | ||
| 
						 | 
					36f694e09a | ||
| 
						 | 
					635ca4446f | ||
| 
						 | 
					bd00b8dc65 | ||
| 
						 | 
					2194b36979 | ||
| 
						 | 
					e81a83657c | ||
| 
						 | 
					cbbb952f3a | ||
| 
						 | 
					04f670cf3d | ||
| 
						 | 
					5cee72382c | ||
| 
						 | 
					7c6a3cf237 | ||
| 
						 | 
					be3fb8d15d | ||
| 
						 | 
					fb73f12a9c | ||
| 
						 | 
					25d738c3a4 | ||
| 
						 | 
					49446ea62f | ||
| 
						 | 
					f33ab61b5f | ||
| 
						 | 
					2d63d0c84a | ||
| 
						 | 
					cfb5d6c10a | ||
| 
						 | 
					a936ba1148 | ||
| 
						 | 
					ed736ddd74 | ||
| 
						 | 
					c7c2a56a1b | ||
| 
						 | 
					129344a8fb | ||
| 
						 | 
					be6e766953 | ||
| 
						 | 
					8dc461eccf | ||
| 
						 | 
					4b4c1fcc88 | ||
| 
						 | 
					1cfd7cf3cc | ||
| 
						 | 
					2996157127 | ||
| 
						 | 
					caeed719fe | ||
| 
						 | 
					f4868c9921 | ||
| 
						 | 
					4aaf1e493c | ||
| 
						 | 
					d96c24926d | ||
| 
						 | 
					d9b277e085 | ||
| 
						 | 
					aace6dbcb3 | ||
| 
						 | 
					85cfc188c0 | ||
| 
						 | 
					6ee7de1eb3 | ||
| 
						 | 
					7b0194db42 | ||
| 
						 | 
					bfaf796241 | ||
| 
						 | 
					c02e2d6a71 | ||
| 
						 | 
					9f49067c9e | ||
| 
						 | 
					5396c1190f | ||
| 
						 | 
					cf95b2d66a | ||
| 
						 | 
					47606dda67 | ||
| 
						 | 
					c30c876176 | ||
| 
						 | 
					73bda31b4c | ||
| 
						 | 
					dc00fb9d51 | ||
| 
						 | 
					06c3e65deb | ||
| 
						 | 
					5984c7e3d5 | ||
| 
						 | 
					beef278bd7 | ||
| 
						 | 
					58191465ef | ||
| 
						 | 
					5760c8b82f | ||
| 
						 | 
					b651407268 | ||
| 
						 | 
					a760dde681 | ||
| 
						 | 
					f5e4b6b5b5 | ||
| 
						 | 
					9ca2cc78a9 | ||
| 
						 | 
					0cf552230e | ||
| 
						 | 
					0e1c318ece | ||
| 
						 | 
					8bc8450a26 | ||
| 
						 | 
					bf68456f53 | ||
| 
						 | 
					53332a75d1 | ||
| 
						 | 
					cd387d21da | ||
| 
						 | 
					0c403e80a9 | ||
| 
						 | 
					553affbef7 | ||
| 
						 | 
					1ecfb67335 | ||
| 
						 | 
					bb565cd29e | ||
| 
						 | 
					a43bcd9e96 | ||
| 
						 | 
					c8667a2e46 | ||
| 
						 | 
					5ee441162e | ||
| 
						 | 
					63ef0db60f | ||
| 
						 | 
					f74f5c8586 | ||
| 
						 | 
					a38ae11c48 | ||
| 
						 | 
					4ca0e95b92 | ||
| 
						 | 
					f9398b92de | ||
| 
						 | 
					6af16ec5ee | ||
| 
						 | 
					d04a1e0b5b | ||
| 
						 | 
					bb1ddd3d9a | ||
| 
						 | 
					6806b69084 | ||
| 
						 | 
					9809ab965b | ||
| 
						 | 
					bd34823e55 | ||
| 
						 | 
					533814c6b5 | ||
| 
						 | 
					b32474a40b | ||
| 
						 | 
					f6e725e868 | ||
| 
						 | 
					7005eda3b6 | ||
| 
						 | 
					9a6e994240 | ||
| 
						 | 
					0b3c13092c | ||
| 
						 | 
					dfa2762bba | ||
| 
						 | 
					c0b90b3237 | ||
| 
						 | 
					788a5bad17 | ||
| 
						 | 
					1872083ca1 | ||
| 
						 | 
					05e769f269 | ||
| 
						 | 
					ccecdb130c | ||
| 
						 | 
					80d09058af | ||
| 
						 | 
					3cc0c0d21c | ||
| 
						 | 
					5e47008b61 | ||
| 
						 | 
					e9f47de1f0 | ||
| 
						 | 
					6a7a4a4e19 | ||
| 
						 | 
					67a0ea702b | ||
| 
						 | 
					89e1e5c84d | ||
| 
						 | 
					7cae6eeed0 | ||
| 
						 | 
					4b12a17fe3 | ||
| 
						 | 
					2e524475cd | ||
| 
						 | 
					ac3dc3ee87 | ||
| 
						 | 
					63039a177a | ||
| 
						 | 
					ca88bd4112 | ||
| 
						 | 
					1e7b4891cb | ||
| 
						 | 
					3623e24b45 | ||
| 
						 | 
					e164582690 | ||
| 
						 | 
					4d3df37bc7 | ||
| 
						 | 
					261e64b85e | ||
| 
						 | 
					23cf88440c | ||
| 
						 | 
					bd8192604a | ||
| 
						 | 
					8f8e7cec83 | ||
| 
						 | 
					14332e4331 | ||
| 
						 | 
					60de554e4f | ||
| 
						 | 
					c57400e86c | ||
| 
						 | 
					f90fd2b017 | ||
| 
						 | 
					8d325d1d36 | ||
| 
						 | 
					03d14f5887 | ||
| 
						 | 
					6f71d7da64 | ||
| 
						 | 
					0b9e82763f | ||
| 
						 | 
					e5f261df73 | ||
| 
						 | 
					9baee0216f | ||
| 
						 | 
					5d23e1303c | ||
| 
						 | 
					f7c7aa69f7 | ||
| 
						 | 
					ce5f32cfa7 | ||
| 
						 | 
					5891c226d8 | ||
| 
						 | 
					017a15cbd2 | ||
| 
						 | 
					786370b1b0 | ||
| 
						 | 
					56e8dc542b | ||
| 
						 | 
					9ef1d283fe | ||
| 
						 | 
					5a4a949904 | ||
| 
						 | 
					ffa69c1ced | ||
| 
						 | 
					305e2b4111 | ||
| 
						 | 
					ba7aaa5622 | ||
| 
						 | 
					2ad842b86a | ||
| 
						 | 
					297a8fd4ac | ||
| 
						 | 
					5b3a5e3e90 | ||
| 
						 | 
					40e214a23b | ||
| 
						 | 
					39679d858a | ||
| 
						 | 
					0ec6898c67 | ||
| 
						 | 
					1e10aee2a7 | ||
| 
						 | 
					34a136d90f | ||
| 
						 | 
					42af669ff2 | ||
| 
						 | 
					4c75f4e5ca | ||
| 
						 | 
					1380317483 | ||
| 
						 | 
					a35f7adf5c | ||
| 
						 | 
					1ce95f1960 | ||
| 
						 | 
					51695b98f1 | ||
| 
						 | 
					82182413a4 | ||
| 
						 | 
					0ce2dbfb5b | ||
| 
						 | 
					981545e1e7 | ||
| 
						 | 
					d60de314f4 | ||
| 
						 | 
					b6ece4c1fc | ||
| 
						 | 
					bb086221dd | ||
| 
						 | 
					b4b8969df8 | ||
| 
						 | 
					010d37621d | ||
| 
						 | 
					84d4f99d31 | ||
| 
						 | 
					82180dcc0a | ||
| 
						 | 
					c2b90b398d | ||
| 
						 | 
					c2a2ff3f0a | ||
| 
						 | 
					d64b6c980c | ||
| 
						 | 
					05df9b9ae5 | ||
| 
						 | 
					3e3cc471c2 | ||
| 
						 | 
					80fb4820cb | ||
| 
						 | 
					2229fe5b94 | ||
| 
						 | 
					a46c705214 | ||
| 
						 | 
					dc7bca8bcc | ||
| 
						 | 
					f58cfe0422 | ||
| 
						 | 
					20d1c8111f | ||
| 
						 | 
					c578fe37d9 | ||
| 
						 | 
					a4ee5bbc77 | ||
| 
						 | 
					8ad9050318 | ||
| 
						 | 
					5df07a7210 | ||
| 
						 | 
					0853b2c5e4 | ||
| 
						 | 
					2c5db8dac3 | ||
| 
						 | 
					bffd5a7f35 | ||
| 
						 | 
					5e60396fe7 | ||
| 
						 | 
					0d6a11a91f | ||
| 
						 | 
					f9fac6163e | ||
| 
						 | 
					ef8055cbb7 | ||
| 
						 | 
					3b7ab6f4b8 | ||
| 
						 | 
					3b4a761853 | ||
| 
						 | 
					255401756d | ||
| 
						 | 
					ec65b83d65 | ||
| 
						 | 
					d169bf9cab | ||
| 
						 | 
					738911cde6 | ||
| 
						 | 
					e1080ea3c7 | ||
| 
						 | 
					941af48fec | ||
| 
						 | 
					9bed73adaa | ||
| 
						 | 
					e9128d9401 | ||
| 
						 | 
					972868b23d | ||
| 
						 | 
					e774a3055b | ||
| 
						 | 
					d9f99d4ef3 | ||
| 
						 | 
					6ce2a64191 | ||
| 
						 | 
					d2a1226b81 | ||
| 
						 | 
					9fa9370b6f | ||
| 
						 | 
					12f14b1d8f | ||
| 
						 | 
					27918b7c25 | ||
| 
						 | 
					2e31c47adb | ||
| 
						 | 
					3842a64d36 | ||
| 
						 | 
					8aed2a7548 | ||
| 
						 | 
					f7835e1c20 | ||
| 
						 | 
					11d8abb331 | ||
| 
						 | 
					320d949781 | ||
| 
						 | 
					dfb5de6fc0 | ||
| 
						 | 
					5015a93ded | ||
| 
						 | 
					478b3470ff | ||
| 
						 | 
					3258429883 | ||
| 
						 | 
					a9d928a8b6 | ||
| 
						 | 
					3aa2d2d08f | ||
| 
						 | 
					f33ce36aff | ||
| 
						 | 
					e61c648fd6 | ||
| 
						 | 
					8c0d19d857 | ||
| 
						 | 
					283a8fd1aa | ||
| 
						 | 
					b8d687bb56 | ||
| 
						 | 
					57c932dafd | ||
| 
						 | 
					ef720a67ab | ||
| 
						 | 
					f28c48d07e | ||
| 
						 | 
					ff89be854e | ||
| 
						 | 
					61a44b76a0 | ||
| 
						 | 
					45236ed6a4 | ||
| 
						 | 
					240635c0b2 | ||
| 
						 | 
					610ac0525d | ||
| 
						 | 
					9c096d0bbf | ||
| 
						 | 
					1915744a64 | ||
| 
						 | 
					c387f7d0ea | ||
| 
						 | 
					eee95fc64f | ||
| 
						 | 
					dd3c21b2d2 | ||
| 
						 | 
					dd13aadf9e | ||
| 
						 | 
					2a49fef28e | ||
| 
						 | 
					c56be26d9f | ||
| 
						 | 
					2102c53caa | ||
| 
						 | 
					e12e875759 | ||
| 
						 | 
					0600a5cd49 | ||
| 
						 | 
					a91b73fd29 | ||
| 
						 | 
					02c38e37a6 | ||
| 
						 | 
					fa2ae04c40 | ||
| 
						 | 
					27739e9265 | ||
| 
						 | 
					157c345175 | ||
| 
						 | 
					770b98d02e | ||
| 
						 | 
					8475416fe7 | ||
| 
						 | 
					30b7d5e1d8 | ||
| 
						 | 
					9dd6240201 | ||
| 
						 | 
					63eacabb61 | ||
| 
						 | 
					0996ccc077 | ||
| 
						 | 
					6aa9dbab0f | ||
| 
						 | 
					c1071ab4f1 | ||
| 
						 | 
					5decce4db0 | ||
| 
						 | 
					12dabfc560 | ||
| 
						 | 
					39d64e9351 | ||
| 
						 | 
					f9784baf0e | ||
| 
						 | 
					8fb57b29d6 | ||
| 
						 | 
					cf8d6c1000 | ||
| 
						 | 
					4164d631bb | ||
| 
						 | 
					46a1b9ef4f | ||
| 
						 | 
					6db2239c60 | ||
| 
						 | 
					423ceb8319 | ||
| 
						 | 
					cd2e17020e | ||
| 
						 | 
					9346c75cb8 | ||
| 
						 | 
					0a4fe37fc6 | ||
| 
						 | 
					da67a0ae34 | ||
| 
						 | 
					9a9b0c0401 | ||
| 
						 | 
					b85d461cdf | ||
| 
						 | 
					089f10e69e | ||
| 
						 | 
					7f7c05ca63 | ||
| 
						 | 
					2083f7c465 | ||
| 
						 | 
					1f2b943254 | ||
| 
						 | 
					dc5c3d7370 | ||
| 
						 | 
					383f0e349f | ||
| 
						 | 
					0a64a864b4 | ||
| 
						 | 
					dec128313b | ||
| 
						 | 
					1d4f214eaf | ||
| 
						 | 
					3aac17a82f | ||
| 
						 | 
					e19c93811f | ||
| 
						 | 
					108e907645 | ||
| 
						 | 
					8958be3946 | ||
| 
						 | 
					ebf221ee25 | ||
| 
						 | 
					ef90877721 | ||
| 
						 | 
					a89adc148e | ||
| 
						 | 
					b698c427de | ||
| 
						 | 
					e99ac8b868 | ||
| 
						 | 
					43312c624d | ||
| 
						 | 
					beeb0fa7be | ||
| 
						 | 
					267e6f3cc0 | ||
| 
						 | 
					5ed0b6ac0c | ||
| 
						 | 
					90a549ddfb | ||
| 
						 | 
					bc792813f0 | ||
| 
						 | 
					bb4c9ffd02 | ||
| 
						 | 
					53348780e9 | ||
| 
						 | 
					f338c2e0c2 | ||
| 
						 | 
					92aa73bcbf | ||
| 
						 | 
					c01618dd82 | ||
| 
						 | 
					1d7d0ed9c2 | ||
| 
						 | 
					40a2200d89 | ||
| 
						 | 
					d345a24569 | ||
| 
						 | 
					3d5dceac43 | ||
| 
						 | 
					aad61c0a57 | ||
| 
						 | 
					8ca4c4b25e | ||
| 
						 | 
					0598468fc0 | ||
| 
						 | 
					ea7cb53974 | ||
| 
						 | 
					4985007555 | ||
| 
						 | 
					89d2f8f1a9 | ||
| 
						 | 
					2c3673cd3f | ||
| 
						 | 
					ba5f75d53e | ||
| 
						 | 
					be804523cf | ||
| 
						 | 
					d5213519c0 | ||
| 
						 | 
					a3efe1b6e9 | ||
| 
						 | 
					789b12599d | ||
| 
						 | 
					371d9a627b | ||
| 
						 | 
					2f63ad1c6d | ||
| 
						 | 
					0e32035292 | ||
| 
						 | 
					f5ce8d6a61 | ||
| 
						 | 
					0ae6ba18ab | ||
| 
						 | 
					4ccc2c19e2 | ||
| 
						 | 
					b5e611a973 | ||
| 
						 | 
					a2f34441ab | ||
| 
						 | 
					2be9425514 | ||
| 
						 | 
					f284fc7cc3 | ||
| 
						 | 
					c991d8ae8b | ||
| 
						 | 
					be12cb3e24 | ||
| 
						 | 
					4c05b1f8d6 | ||
| 
						 | 
					6e1e5996df | ||
| 
						 | 
					6ccd120f5f | ||
| 
						 | 
					ca818b322d | ||
| 
						 | 
					b11c24110c | ||
| 
						 | 
					beac6cb5aa | ||
| 
						 | 
					666a597ffb | ||
| 
						 | 
					d4dbabb814 | ||
| 
						 | 
					c71e37aa6c | ||
| 
						 | 
					cdae9a58e6 | ||
| 
						 | 
					fa2b54c83a | ||
| 
						 | 
					14b5d0d029 | ||
| 
						 | 
					2fbd94252a | ||
| 
						 | 
					5b9188454b | ||
| 
						 | 
					5e189b4b8d | ||
| 
						 | 
					23bd628735 | ||
| 
						 | 
					371feee876 | ||
| 
						 | 
					f50f0c6aa3 | ||
| 
						 | 
					2064e2db08 | ||
| 
						 | 
					de222838fe | ||
| 
						 | 
					0ad2a0a303 | ||
| 
						 | 
					2cb761c1f4 | ||
| 
						 | 
					3ebcecf5c4 | ||
| 
						 | 
					e83c913723 | ||
| 
						 | 
					55fe56837a | ||
| 
						 | 
					1eb57ae2b7 | ||
| 
						 | 
					41e3ebd5ab | ||
| 
						 | 
					9624b50d51 | ||
| 
						 | 
					449d864515 | ||
| 
						 | 
					7f7e11ee5c | ||
| 
						 | 
					43f534b986 | ||
| 
						 | 
					fbe8ea3abe | ||
| 
						 | 
					affc941ea6 | ||
| 
						 | 
					012f7474f7 | ||
| 
						 | 
					5c1b373be6 | ||
| 
						 | 
					648a9f7c2f | ||
| 
						 | 
					623acb90cc | ||
| 
						 | 
					6ce295a301 | ||
| 
						 | 
					0359ccfd8b | ||
| 
						 | 
					9c1cf94f34 | ||
| 
						 | 
					ff5b11f547 | ||
| 
						 | 
					8358302d47 | ||
| 
						 | 
					534656a997 | ||
| 
						 | 
					2cfbec1cae | ||
| 
						 | 
					22db480daf | ||
| 
						 | 
					d107382214 | ||
| 
						 | 
					03ae3ca621 | ||
| 
						 | 
					61df34e924 | ||
| 
						 | 
					47b9e06cfd | ||
| 
						 | 
					88822622a1 | ||
| 
						 | 
					8f243ab6c1 | ||
| 
						 | 
					9223a31eb7 | ||
| 
						 | 
					654ae3d6ad | ||
| 
						 | 
					70c739b8db | ||
| 
						 | 
					daa96141d3 | ||
| 
						 | 
					802fdcda1e | ||
| 
						 | 
					6006e352ad | ||
| 
						 | 
					2af68ef774 | ||
| 
						 | 
					df401f4796 | ||
| 
						 | 
					3875ee59ba | ||
| 
						 | 
					14183e50e7 | ||
| 
						 | 
					15de0f609c | ||
| 
						 | 
					4824e7d6e9 | ||
| 
						 | 
					a3b8cd242a | ||
| 
						 | 
					d1cc95f781 | ||
| 
						 | 
					6d02baf6ab | ||
| 
						 | 
					377551b9c4 | ||
| 
						 | 
					361fd136e9 | ||
| 
						 | 
					4950a528ce | ||
| 
						 | 
					00ab230a3f | ||
| 
						 | 
					e99980e8fd | ||
| 
						 | 
					ec77f276e1 | ||
| 
						 | 
					d0ba994483 | ||
| 
						 | 
					52f856526c | ||
| 
						 | 
					912f08dd5e | ||
| 
						 | 
					1067663d85 | ||
| 
						 | 
					22228d2d40 | ||
| 
						 | 
					c57745596c | ||
| 
						 | 
					65e4dca40c | ||
| 
						 | 
					ff4cfc4c58 | ||
| 
						 | 
					f4623ab996 | ||
| 
						 | 
					6ef350952c | ||
| 
						 | 
					e42c208235 | ||
| 
						 | 
					e86951ca2a | ||
| 
						 | 
					b7a4f98b15 | ||
| 
						 | 
					82a9dafe32 | ||
| 
						 | 
					1536bcfd56 | ||
| 
						 | 
					3fc0b1edad | ||
| 
						 | 
					3d15d58e55 | ||
| 
						 | 
					d93edc0aab | ||
| 
						 | 
					609daababb | ||
| 
						 | 
					a073ceeff4 | ||
| 
						 | 
					5cd8ce42ec | ||
| 
						 | 
					d15f2d98ef | ||
| 
						 | 
					00f5ee445b | ||
| 
						 | 
					e7911530a9 | ||
| 
						 | 
					6ff73426c3 | ||
| 
						 | 
					a61e509e9b | ||
| 
						 | 
					1b823494de | ||
| 
						 | 
					6657e68bf2 | ||
| 
						 | 
					23351c607b | ||
| 
						 | 
					9a6112d16a | ||
| 
						 | 
					b9c0dae28e | ||
| 
						 | 
					d940b3b9c7 | ||
| 
						 | 
					cfbc10fb32 | ||
| 
						 | 
					90d94ce39e | ||
| 
						 | 
					79b960c046 | ||
| 
						 | 
					66a6e2b2b6 | ||
| 
						 | 
					1be1d05184 | ||
| 
						 | 
					9f8c183283 | ||
| 
						 | 
					8301245a5e | ||
| 
						 | 
					1f6d207625 | ||
| 
						 | 
					561ba12463 | ||
| 
						 | 
					7f133c357b | ||
| 
						 | 
					3cc8a3f234 | ||
| 
						 | 
					3d86077427 | ||
| 
						 | 
					56ba280ccd | ||
| 
						 | 
					955bfbc268 | ||
| 
						 | 
					2eab488c02 | ||
| 
						 | 
					fa7a0efbac | ||
| 
						 | 
					3fe8f005b0 | ||
| 
						 | 
					5af09776ce | ||
| 
						 | 
					995d08d104 | ||
| 
						 | 
					ca422f3563 | ||
| 
						 | 
					68a1e0bc35 | ||
| 
						 | 
					ed6c278f60 | ||
| 
						 | 
					d85a772ec3 | ||
| 
						 | 
					fb2f9f266c | ||
| 
						 | 
					66aeaec067 | ||
| 
						 | 
					70fddbe32a | ||
| 
						 | 
					5fc3d333c7 | ||
| 
						 | 
					728bd41a15 | ||
| 
						 | 
					77fb5a303b | ||
| 
						 | 
					7344089dc3 | ||
| 
						 | 
					7e03acf2be | ||
| 
						 | 
					9af4cb3d3b | ||
| 
						 | 
					a00caa0257 | ||
| 
						 | 
					4672acfa7d | ||
| 
						 | 
					ea61b32719 | ||
| 
						 | 
					dabfbea7d9 | ||
| 
						 | 
					56d973709c | ||
| 
						 | 
					3a97ebb16b | ||
| 
						 | 
					16f4d2e32f | ||
| 
						 | 
					1f72a76f98 | ||
| 
						 | 
					f5247cea39 | ||
| 
						 | 
					3da2c3df78 | ||
| 
						 | 
					4ceddeea6c | ||
| 
						 | 
					2fddc5fc09 | ||
| 
						 | 
					e3beef1e1b | ||
| 
						 | 
					cea5a1d5f2 | ||
| 
						 | 
					f472ada006 | ||
| 
						 | 
					05b2210476 | ||
| 
						 | 
					33e1a1d652 | ||
| 
						 | 
					38956b071a | ||
| 
						 | 
					a21f350a76 | ||
| 
						 | 
					74360af359 | ||
| 
						 | 
					5400882ca3 | ||
| 
						 | 
					eb6508d50c | ||
| 
						 | 
					77719aefb8 | ||
| 
						 | 
					9d2c9dd1e1 | ||
| 
						 | 
					8942b92c7c | ||
| 
						 | 
					e5f706590c | ||
| 
						 | 
					a5d03c54ab | ||
| 
						 | 
					56b94a38b9 | ||
| 
						 | 
					d52eb82781 | ||
| 
						 | 
					4967a832ab | ||
| 
						 | 
					6468866823 | ||
| 
						 | 
					de8a5b523f | ||
| 
						 | 
					8de85b0048 | ||
| 
						 | 
					8d71574142 | ||
| 
						 | 
					623a01df49 | ||
| 
						 | 
					08b172b975 | ||
| 
						 | 
					856a4585d6 | ||
| 
						 | 
					3329765bba | ||
| 
						 | 
					87a0cbdf2e | ||
| 
						 | 
					b5bdde9e0e | ||
| 
						 | 
					1788072b9e | ||
| 
						 | 
					5f2b5e3823 | ||
| 
						 | 
					42d73874ed | ||
| 
						 | 
					88d3d6c9ae | ||
| 
						 | 
					3435ef467f | ||
| 
						 | 
					c90c694bc4 | ||
| 
						 | 
					8db2ba4b84 | ||
| 
						 | 
					d77501d8fd | ||
| 
						 | 
					15e4565984 | ||
| 
						 | 
					5757766550 | ||
| 
						 | 
					4f7236edc7 | ||
| 
						 | 
					ed693e4332 | ||
| 
						 | 
					a2219f6be3 | ||
| 
						 | 
					03b5b78c09 | ||
| 
						 | 
					cd302feb5d | ||
| 
						 | 
					5cd1a6fc3e | ||
| 
						 | 
					4ceb430a46 | ||
| 
						 | 
					81ce94f8dc | ||
| 
						 | 
					feaa3b380b | ||
| 
						 | 
					5d8e9f2ae0 | ||
| 
						 | 
					6c1d36a649 | ||
| 
						 | 
					2312a84ca1 | ||
| 
						 | 
					a99d2a22e1 | ||
| 
						 | 
					2fa65aa7d8 | ||
| 
						 | 
					4907cf0845 | ||
| 
						 | 
					28b4820f70 | ||
| 
						 | 
					72967d5be9 | ||
| 
						 | 
					4aebb2c8b8 | ||
| 
						 | 
					1f5bce2dce | ||
| 
						 | 
					b953b02849 | ||
| 
						 | 
					d6e55b4001 | ||
| 
						 | 
					f710c3f198 | ||
| 
						 | 
					99a3d167d9 | ||
| 
						 | 
					c622649513 | ||
| 
						 | 
					8571902e23 | ||
| 
						 | 
					711bb9bc88 | ||
| 
						 | 
					f2ebe2a60e | ||
| 
						 | 
					011ee91105 | ||
| 
						 | 
					2c4144638a | ||
| 
						 | 
					2fc04cb872 | ||
| 
						 | 
					62cc5ff623 | ||
| 
						 | 
					afe343c3a7 | ||
| 
						 | 
					e0d2139045 | ||
| 
						 | 
					d60f019321 | ||
| 
						 | 
					65402586c0 | ||
| 
						 | 
					bf43446835 | ||
| 
						 | 
					7169e56d6b | ||
| 
						 | 
					1047b8c84d | ||
| 
						 | 
					9740a03695 | ||
| 
						 | 
					e34af3ec2b | ||
| 
						 | 
					d576146ebf | ||
| 
						 | 
					7441e7dbe9 | ||
| 
						 | 
					1d3f432b53 | ||
| 
						 | 
					15a4add72d | ||
| 
						 | 
					3cc546a3bb | ||
| 
						 | 
					c434f7f80f | ||
| 
						 | 
					e6a01b47e4 | ||
| 
						 | 
					3f1b3d9675 | ||
| 
						 | 
					3e124d66c8 | ||
| 
						 | 
					0fb3d5b4fd | ||
| 
						 | 
					ffdff9f12f | ||
| 
						 | 
					a0fe2e72c4 | ||
| 
						 | 
					3b21abfd6c | ||
| 
						 | 
					5aeb43393b | ||
| 
						 | 
					6e85eba11b | ||
| 
						 | 
					5cd5e0219d | ||
| 
						 | 
					9c1d63540f | ||
| 
						 | 
					db34be4224 | ||
| 
						 | 
					b9ce05acc4 | ||
| 
						 | 
					6ef9d9bacf | ||
| 
						 | 
					40a44a7c3d | ||
| 
						 | 
					13738d5fa1 | ||
| 
						 | 
					363dede7a5 | ||
| 
						 | 
					43866bd6fc | ||
| 
						 | 
					cd29ced6de | ||
| 
						 | 
					7e840163c0 | ||
| 
						 | 
					a4896327e3 | ||
| 
						 | 
					f396e9f4fc | ||
| 
						 | 
					dacb698ada | ||
| 
						 | 
					6411b83e52 | ||
| 
						 | 
					bb98beade9 | ||
| 
						 | 
					b8d208c549 | ||
| 
						 | 
					04f35a8909 | ||
| 
						 | 
					68bd06eb6e | ||
| 
						 | 
					686b616ea9 | ||
| 
						 | 
					0bb37c5e23 | ||
| 
						 | 
					e9b4b8afbd | ||
| 
						 | 
					bc5ec653ba | ||
| 
						 | 
					1f44dac24d | ||
| 
						 | 
					2dd6976f6d | ||
| 
						 | 
					662239183d | ||
| 
						 | 
					66243398bb | ||
| 
						 | 
					aa10982c49 | ||
| 
						 | 
					8b0336c810 | ||
| 
						 | 
					0a9f7780e5 | ||
| 
						 | 
					44f7e399d3 | ||
| 
						 | 
					8419df95e1 | ||
| 
						 | 
					59314f304e | ||
| 
						 | 
					cc6dc9b229 | ||
| 
						 | 
					fe69e6be6e | ||
| 
						 | 
					430c5ca02e | ||
| 
						 | 
					25ebd9e3ce | ||
| 
						 | 
					bdfc0e284c | ||
| 
						 | 
					12c56e4888 | ||
| 
						 | 
					1bd4ee1da1 | ||
| 
						 | 
					3956bfce60 | ||
| 
						 | 
					8394109c89 | ||
| 
						 | 
					813cfd9c0a | ||
| 
						 | 
					976c58302b | ||
| 
						 | 
					b60272b01f | ||
| 
						 | 
					124d218889 | ||
| 
						 | 
					cd077dab08 | ||
| 
						 | 
					d1201e3195 | ||
| 
						 | 
					5f2329b82a | ||
| 
						 | 
					01fb5e133f | ||
| 
						 | 
					fd2c85f6ae | ||
| 
						 | 
					41977c2e04 | ||
| 
						 | 
					ca88a1d439 | ||
| 
						 | 
					5615196f7b | ||
| 
						 | 
					1f59eb5f11 | ||
| 
						 | 
					4bf6d66e67 | ||
| 
						 | 
					2f34088e5e | ||
| 
						 | 
					559e69f9b4 | ||
| 
						 | 
					f3b7e522d8 | ||
| 
						 | 
					73be56a21d | ||
| 
						 | 
					d00ae7cf70 | ||
| 
						 | 
					f92926e331 | ||
| 
						 | 
					241c8004ce | ||
| 
						 | 
					8d08627c94 | ||
| 
						 | 
					aa1bb606f3 | ||
| 
						 | 
					dabd4f1986 | ||
| 
						 | 
					251c47001b | ||
| 
						 | 
					3678161d71 | ||
| 
						 | 
					6634416732 | ||
| 
						 | 
					7101fd705c | ||
| 
						 | 
					0f9bcf3319 | ||
| 
						 | 
					a948732e1c | ||
| 
						 | 
					c3006e0f5a | ||
| 
						 | 
					efe835eb5a | ||
| 
						 | 
					ab03ead035 | ||
| 
						 | 
					6a6e08960e | ||
| 
						 | 
					aedabeee3a | ||
| 
						 | 
					83fe7b9c83 | ||
| 
						 | 
					97654d7e28 | ||
| 
						 | 
					94f4166017 | ||
| 
						 | 
					a74c9c9e10 | ||
| 
						 | 
					d2a3c4497f | ||
| 
						 | 
					a129850922 | ||
| 
						 | 
					c3f5d3d93a | ||
| 
						 | 
					c5ea65b157 | ||
| 
						 | 
					58b86e4235 | ||
| 
						 | 
					a466be6243 | ||
| 
						 | 
					60327ce41a | ||
| 
						 | 
					2d4d9623da | ||
| 
						 | 
					6b3b6beaa1 | ||
| 
						 | 
					7743be3aac | ||
| 
						 | 
					b709f8ef54 | ||
| 
						 | 
					c74ce24cd2 | ||
| 
						 | 
					612566e752 | ||
| 
						 | 
					3ecce3dbeb | ||
| 
						 | 
					71eca86c30 | ||
| 
						 | 
					dd1e3bd8d4 | ||
| 
						 | 
					c55fef76f7 | ||
| 
						 | 
					eb70d4407f | ||
| 
						 | 
					b335b5440a | ||
| 
						 | 
					a8eeedb603 | ||
| 
						 | 
					b3d8de7903 | ||
| 
						 | 
					0413ea5801 | ||
| 
						 | 
					2f6fba6772 | ||
| 
						 | 
					d69acceca9 | ||
| 
						 | 
					aff78bb39a | ||
| 
						 | 
					104c032b7b | ||
| 
						 | 
					b347341c75 | ||
| 
						 | 
					c00f8d697a | ||
| 
						 | 
					b07e4f2f46 | ||
| 
						 | 
					ced6dc5cef | ||
| 
						 | 
					bf2d129194 | ||
| 
						 | 
					d59d0b7c21 | ||
| 
						 | 
					dbd512e1b7 | ||
| 
						 | 
					fcc6f699e3 | ||
| 
						 | 
					7078d93307 | ||
| 
						 | 
					a2317c3ffd | ||
| 
						 | 
					75917fac8e | ||
| 
						 | 
					295fd057ce | ||
| 
						 | 
					8c4e09f74f | ||
| 
						 | 
					e32cbae224 | ||
| 
						 | 
					f6fd8db2a4 | ||
| 
						 | 
					d65db21976 | ||
| 
						 | 
					8acf1ff4b4 | ||
| 
						 | 
					8b41df41c2 | ||
| 
						 | 
					c32ebefaa8 | ||
| 
						 | 
					ed0dc93d89 | ||
| 
						 | 
					5a32dd8930 | ||
| 
						 | 
					130ebe34c8 | ||
| 
						 | 
					7612511b3b | ||
| 
						 | 
					19a28a8aa3 | ||
| 
						 | 
					fc213217e8 | ||
| 
						 | 
					7198c5af1f | ||
| 
						 | 
					40632f6b77 | ||
| 
						 | 
					038bec784e | ||
| 
						 | 
					f407eec799 | ||
| 
						 | 
					bd618bebbe | ||
| 
						 | 
					e2884b3e9a | ||
| 
						 | 
					c41e242e5c | ||
| 
						 | 
					9578319394 | ||
| 
						 | 
					16eaca2c79 | ||
| 
						 | 
					3bff195dca | ||
| 
						 | 
					41cf2d2518 | ||
| 
						 | 
					e0d4272a58 | ||
| 
						 | 
					41c373fa3e | ||
| 
						 | 
					7f6e09b531 | ||
| 
						 | 
					e2f06800bc | ||
| 
						 | 
					1180833643 | ||
| 
						 | 
					130eed01cc | ||
| 
						 | 
					2ded87355f | ||
| 
						 | 
					b1ae02e2ff | ||
| 
						 | 
					381417089a | ||
| 
						 | 
					984a30423d | ||
| 
						 | 
					2ad673c611 | ||
| 
						 | 
					0693dd954e | ||
| 
						 | 
					9071b36d9a | ||
| 
						 | 
					eb6af20d2e | ||
| 
						 | 
					8087969c5b | ||
| 
						 | 
					cb437c66d1 | ||
| 
						 | 
					40b0d0765e | ||
| 
						 | 
					41235f30fb | ||
| 
						 | 
					130c15ef5a | ||
| 
						 | 
					2cc5142fb1 | ||
| 
						 | 
					d451ece4e7 | ||
| 
						 | 
					1121ba1b74 | ||
| 
						 | 
					1fb039fde2 | ||
| 
						 | 
					3073927e42 | ||
| 
						 | 
					b6c2029931 | ||
| 
						 | 
					45d010255f | ||
| 
						 | 
					7e569022c5 | ||
| 
						 | 
					50f1b47c7f | ||
| 
						 | 
					5572bc4e2f | ||
| 
						 | 
					729d334106 | ||
| 
						 | 
					cacdfcb247 | ||
| 
						 | 
					519ad9b384 | ||
| 
						 | 
					7b2d785d20 | ||
| 
						 | 
					f2d678e6e8 | ||
| 
						 | 
					448e9b7cf1 | ||
| 
						 | 
					2c4c9867e7 | ||
| 
						 | 
					a99540a6de | ||
| 
						 | 
					9614ed695d | ||
| 
						 | 
					aabfee601e | ||
| 
						 | 
					cee1d9e02f | ||
| 
						 | 
					285f7fb0f9 | ||
| 
						 | 
					ede90b1121 | ||
| 
						 | 
					5e7329d156 | ||
| 
						 | 
					9f1979b94a | ||
| 
						 | 
					3fcf327e26 | ||
| 
						 | 
					3f4742b48c | ||
| 
						 | 
					c4f01c533b | ||
| 
						 | 
					b7a8550988 | ||
| 
						 | 
					e775891708 | ||
| 
						 | 
					ae6fbb5df0 | ||
| 
						 | 
					f9c1f03754 | ||
| 
						 | 
					50701af9d5 | ||
| 
						 | 
					1d6af3d430 | ||
| 
						 | 
					392fd8f89c | ||
| 
						 | 
					802db0fab2 | ||
| 
						 | 
					2f972419a3 | ||
| 
						 | 
					a05a2c67ef | ||
| 
						 | 
					e34140620e | ||
| 
						 | 
					acd9121085 | ||
| 
						 | 
					b17d6b8d1d | ||
| 
						 | 
					b9fa413a08 | ||
| 
						 | 
					4abe148444 | ||
| 
						 | 
					04d6940436 | ||
| 
						 | 
					8511b5f594 | ||
| 
						 | 
					546d6760b9 | ||
| 
						 | 
					ccbb8d5e95 | ||
| 
						 | 
					d7d7e7b038 | ||
| 
						 | 
					80b6d97585 | ||
| 
						 | 
					ff64ab32ae | ||
| 
						 | 
					fc9c9e47f7 | ||
| 
						 | 
					68e6ac4379 | ||
| 
						 | 
					e34b7e99fd | ||
| 
						 | 
					a32ba49352 | ||
| 
						 | 
					3a0c71541b | ||
| 
						 | 
					adc6bd73e3 | ||
| 
						 | 
					8c6d8c2a49 | ||
| 
						 | 
					53a8f8c26d | ||
| 
						 | 
					bf4863b3f5 | ||
| 
						 | 
					8f68678989 | ||
| 
						 | 
					57c4e42d75 | ||
| 
						 | 
					ff672cf8dd | ||
| 
						 | 
					d43b040773 | ||
| 
						 | 
					422c8c36e5 | ||
| 
						 | 
					b76310ba74 | ||
| 
						 | 
					c012f6e576 | ||
| 
						 | 
					cf6d55961c | ||
| 
						 | 
					3aa1b1ccbb | ||
| 
						 | 
					3dcae82fa9 | ||
| 
						 | 
					86b81ecb73 | ||
| 
						 | 
					c43dc3dd77 | ||
| 
						 | 
					e5eab8a199 | ||
| 
						 | 
					7bab6eb6f0 | ||
| 
						 | 
					87d9526d0c | ||
| 
						 | 
					36982f056a | ||
| 
						 | 
					c97ec5631b | ||
| 
						 | 
					fdb0d5dd8f | ||
| 
						 | 
					81b6dfe40d | ||
| 
						 | 
					bc35b8e435 | ||
| 
						 | 
					6859f3fc12 | ||
| 
						 | 
					8b2d5cc4a7 | ||
| 
						 | 
					74184b6f21 | ||
| 
						 | 
					6416aed586 | ||
| 
						 | 
					2a1b7bd380 | ||
| 
						 | 
					4bba0bda61 | ||
| 
						 | 
					27baa8317a | ||
| 
						 | 
					1abfa78a8b | ||
| 
						 | 
					edc687ba0f | ||
| 
						 | 
					ff0bdbed85 | ||
| 
						 | 
					dc4bdf592f | ||
| 
						 | 
					b03d0513d0 | ||
| 
						 | 
					0de70011ad | ||
| 
						 | 
					220d1e5353 | ||
| 
						 | 
					ca44f72938 | ||
| 
						 | 
					18f49508a5 | ||
| 
						 | 
					5c50462e1e | ||
| 
						 | 
					a257865303 | ||
| 
						 | 
					60adefa610 | ||
| 
						 | 
					b5dde6bcc6 | ||
| 
						 | 
					024dbfd44c | ||
| 
						 | 
					233069f8db | ||
| 
						 | 
					c76d6922b1 | ||
| 
						 | 
					3241496144 | ||
| 
						 | 
					63fe69c12e | ||
| 
						 | 
					a4947e4e06 | ||
| 
						 | 
					262f1c524e | ||
| 
						 | 
					bd80d0229c | ||
| 
						 | 
					163d794845 | ||
| 
						 | 
					0b33466b3f | ||
| 
						 | 
					bed27f4db3 | ||
| 
						 | 
					738a224bd0 | ||
| 
						 | 
					044f8ca87d | ||
| 
						 | 
					45ee08d99b | ||
| 
						 | 
					5ff68e8f6d | ||
| 
						 | 
					f14a4a861d | ||
| 
						 | 
					f596e3c491 | ||
| 
						 | 
					9fb523adce | ||
| 
						 | 
					cecf4d98d0 | ||
| 
						 | 
					070e40e2f5 | ||
| 
						 | 
					d757097bbc | ||
| 
						 | 
					7b112c2766 | ||
| 
						 | 
					03ee8c2ed7 | ||
| 
						 | 
					3495842bb0 | ||
| 
						 | 
					face65dab8 | ||
| 
						 | 
					e41a49c625 | ||
| 
						 | 
					3a55a42bff | ||
| 
						 | 
					72550c52ed | ||
| 
						 | 
					a9d0c56de1 | ||
| 
						 | 
					469bcb0c24 | ||
| 
						 | 
					43ce9cdde9 | ||
| 
						 | 
					011f89893c | ||
| 
						 | 
					958608ca1c | ||
| 
						 | 
					1aecb23f5b | ||
| 
						 | 
					9ed6fba2b4 | ||
| 
						 | 
					df5c435c0b | ||
| 
						 | 
					1ebaf97c44 | ||
| 
						 | 
					c8c6914aac | ||
| 
						 | 
					c99028f252 | ||
| 
						 | 
					90d8c5862b | ||
| 
						 | 
					2d5dd00f9e | ||
| 
						 | 
					cb52183836 | ||
| 
						 | 
					ab3b624b0c | ||
| 
						 | 
					7c81de9a91 | ||
| 
						 | 
					4dfac659ff | ||
| 
						 | 
					66e0f9db08 | ||
| 
						 | 
					a2eef41993 | ||
| 
						 | 
					9a8646510b | ||
| 
						 | 
					fa03d0117a | ||
| 
						 | 
					03614034e9 | ||
| 
						 | 
					444b1d416b | ||
| 
						 | 
					4055ca1f9e | ||
| 
						 | 
					7a216dfee5 | ||
| 
						 | 
					a78b21fc67 | ||
| 
						 | 
					a808002bc3 | ||
| 
						 | 
					2fc368c111 | ||
| 
						 | 
					6ed3af7d50 | ||
| 
						 | 
					d037e0d30c | ||
| 
						 | 
					51cb950904 | ||
| 
						 | 
					4bfa88bb4c | ||
| 
						 | 
					9d1e475db6 | ||
| 
						 | 
					3e792793f6 | ||
| 
						 | 
					ac5cb33356 | ||
| 
						 | 
					aaf74259ec | ||
| 
						 | 
					ecf9ceb90d | ||
| 
						 | 
					5c4ff8ad37 | ||
| 
						 | 
					dc427fc8e2 | ||
| 
						 | 
					e1e6c4dae7 | ||
| 
						 | 
					1747fd1cc6 | ||
| 
						 | 
					a119822b90 | ||
| 
						 | 
					8c798690ce | ||
| 
						 | 
					ea6bf26657 | ||
| 
						 | 
					4a26fd6e3b | ||
| 
						 | 
					dddb38834e | ||
| 
						 | 
					af7d6b936b | ||
| 
						 | 
					a64b8786b5 | ||
| 
						 | 
					25f93585a7 | ||
| 
						 | 
					0d5a49e150 | ||
| 
						 | 
					5c49a98c5e | ||
| 
						 | 
					869772ff08 | ||
| 
						 | 
					f2edf3181e | ||
| 
						 | 
					d6dc5c506a | ||
| 
						 | 
					eebd5e5dd7 | ||
| 
						 | 
					868b266451 | ||
| 
						 | 
					3fa23ff0f1 | ||
| 
						 | 
					c275fb091e | ||
| 
						 | 
					90c341c601 | ||
| 
						 | 
					52d0e1ca4e | ||
| 
						 | 
					c6f3386577 | ||
| 
						 | 
					cf65a07256 | ||
| 
						 | 
					051dc9db2b | ||
| 
						 | 
					93a886b45a | ||
| 
						 | 
					ec19082ecc | ||
| 
						 | 
					0eff7c7c88 | ||
| 
						 | 
					6c4b3514d7 | ||
| 
						 | 
					d84cca7447 | ||
| 
						 | 
					3a8b23bfd9 | ||
| 
						 | 
					63fe322160 | ||
| 
						 | 
					c808798013 | ||
| 
						 | 
					379f21ce5c | ||
| 
						 | 
					4f3b1b3eb9 | ||
| 
						 | 
					b49df9502e | ||
| 
						 | 
					4f8a706dc7 | ||
| 
						 | 
					7560f63909 | ||
| 
						 | 
					1dfb1b103c | ||
| 
						 | 
					6e1987ca1d | ||
| 
						 | 
					d307176931 | ||
| 
						 | 
					c391a74266 | ||
| 
						 | 
					65a87d3cc3 | ||
| 
						 | 
					b60b9e7afe | ||
| 
						 | 
					919834dc84 | ||
| 
						 | 
					efc17286f8 | ||
| 
						 | 
					acec5a6244 | ||
| 
						 | 
					68039af3e7 | ||
| 
						 | 
					da1247d653 | ||
| 
						 | 
					052d0358f2 | ||
| 
						 | 
					1b6ab411d3 | ||
| 
						 | 
					d88d98edd3 | ||
| 
						 | 
					741c9959f6 | ||
| 
						 | 
					7c23127fde | ||
| 
						 | 
					8b9722a3c0 | ||
| 
						 | 
					8c149cfd83 | ||
| 
						 | 
					6da498991c | ||
| 
						 | 
					86a66deb7e | ||
| 
						 | 
					9409e18179 | ||
| 
						 | 
					6a0b803fc0 | ||
| 
						 | 
					5fa3b54788 | ||
| 
						 | 
					07df5018be | ||
| 
						 | 
					1b9a59c36a | ||
| 
						 | 
					8f89c33451 | ||
| 
						 | 
					485d7d5904 | ||
| 
						 | 
					e3720888c7 | ||
| 
						 | 
					d75e384ff8 | ||
| 
						 | 
					c340c7a88c | ||
| 
						 | 
					9ecf6e93af | ||
| 
						 | 
					a41735288c | ||
| 
						 | 
					8ae78c6bd9 | ||
| 
						 | 
					cb3cec4adf | ||
| 
						 | 
					b0d6f3c58f | ||
| 
						 | 
					0338648426 | ||
| 
						 | 
					c7dc404188 | ||
| 
						 | 
					08853158b6 | ||
| 
						 | 
					74e0187663 | ||
| 
						 | 
					bb4aa95c81 | ||
| 
						 | 
					5117d50b7e | ||
| 
						 | 
					593605d3ec | ||
| 
						 | 
					c9ea4df8f9 | ||
| 
						 | 
					89ff56faf1 | ||
| 
						 | 
					9855026c43 | ||
| 
						 | 
					904348a492 | ||
| 
						 | 
					aaaa18392d | ||
| 
						 | 
					8c33e40d2e | ||
| 
						 | 
					0d04af1e72 | ||
| 
						 | 
					8f17495800 | ||
| 
						 | 
					95c1a24853 | ||
| 
						 | 
					08374de10f | ||
| 
						 | 
					506e70a216 | ||
| 
						 | 
					0cca92cdd3 | ||
| 
						 | 
					5b430cfc44 | ||
| 
						 | 
					171c4da568 | ||
| 
						 | 
					04611fb0f1 | ||
| 
						 | 
					df430489cf | ||
| 
						 | 
					5085e57fb5 | ||
| 
						 | 
					75b81247a0 | ||
| 
						 | 
					2c1a5c1039 | ||
| 
						 | 
					71c34b7f2d | ||
| 
						 | 
					b0cfaf58ad | ||
| 
						 | 
					9dc07f04c3 | ||
| 
						 | 
					f15c16200b | ||
| 
						 | 
					4e09add6f8 | ||
| 
						 | 
					355a6236be | ||
| 
						 | 
					6d7fa9c25c | ||
| 
						 | 
					82ae22ef4d | ||
| 
						 | 
					b56bae5126 | ||
| 
						 | 
					2d3f31e0a1 | ||
| 
						 | 
					ae74191e38 | ||
| 
						 | 
					ab8233ab81 | ||
| 
						 | 
					d5572bdc64 | ||
| 
						 | 
					e3990db59c | ||
| 
						 | 
					87d90528ac | ||
| 
						 | 
					e27711cfdd | ||
| 
						 | 
					28c08222c0 | ||
| 
						 | 
					8508a80998 | ||
| 
						 | 
					7850a8bc04 | ||
| 
						 | 
					fccec89084 | ||
| 
						 | 
					6c7fa27404 | ||
| 
						 | 
					e7f9c08ab8 | ||
| 
						 | 
					03c8441b14 | ||
| 
						 | 
					e887c4187e | ||
| 
						 | 
					933aee6199 | ||
| 
						 | 
					90e7f983b5 | ||
| 
						 | 
					f00962aaf3 | ||
| 
						 | 
					3eccd2e53a | ||
| 
						 | 
					fcd0e61c24 | ||
| 
						 | 
					e7a02b24c1 | ||
| 
						 | 
					cbe6bb54e6 | ||
| 
						 | 
					23966faca4 | ||
| 
						 | 
					514f1a7835 | ||
| 
						 | 
					af908bc48b | ||
| 
						 | 
					233ebcb543 | ||
| 
						 | 
					da0c007254 | ||
| 
						 | 
					01bc7dcafc | ||
| 
						 | 
					83e2ff8c51 | ||
| 
						 | 
					e3120586fb | ||
| 
						 | 
					3941aa12f1 | ||
| 
						 | 
					0c10cf0ad6 | ||
| 
						 | 
					62874a5a69 | ||
| 
						 | 
					8c1f9c56fd | ||
| 
						 | 
					75063c1527 | ||
| 
						 | 
					5de583aa91 | ||
| 
						 | 
					a0675d8149 | ||
| 
						 | 
					a7e9ed95ec | ||
| 
						 | 
					615d0edf1f | ||
| 
						 | 
					e775755dec | ||
| 
						 | 
					a1bf7de5a7 | ||
| 
						 | 
					047c02e8db | ||
| 
						 | 
					c92989d2b7 | ||
| 
						 | 
					039e7875ff | ||
| 
						 | 
					48b7b96bd0 | ||
| 
						 | 
					747b7a636a | ||
| 
						 | 
					635f56fabd | ||
| 
						 | 
					c617bc0054 | ||
| 
						 | 
					d215724753 | ||
| 
						 | 
					9c1ee1bed5 | ||
| 
						 | 
					14ef63c15e | ||
| 
						 | 
					5a456140c1 | ||
| 
						 | 
					1ff546737b | ||
| 
						 | 
					56f0b25754 | ||
| 
						 | 
					b0f78dc018 | ||
| 
						 | 
					1f2d194acf | ||
| 
						 | 
					aacfb2a2c6 | ||
| 
						 | 
					0ba304dd31 | ||
| 
						 | 
					8eb2da5fbb | ||
| 
						 | 
					d1896e8ccd | ||
| 
						 | 
					0edcb7a556 | ||
| 
						 | 
					ecc2c5d81a | ||
| 
						 | 
					441dec8e9f | ||
| 
						 | 
					4f566c360b | ||
| 
						 | 
					e10cd58090 | ||
| 
						 | 
					5c8ae6d93e | ||
| 
						 | 
					e72f7677bf | ||
| 
						 | 
					e815d72b1f | ||
| 
						 | 
					ddf918673d | ||
| 
						 | 
					8517d0c00d | ||
| 
						 | 
					8659dc73f4 | ||
| 
						 | 
					07464787a8 | ||
| 
						 | 
					e9a3aa9721 | ||
| 
						 | 
					a8cc9f1873 | ||
| 
						 | 
					f25c3c0542 | ||
| 
						 | 
					4e5b9645e8 | ||
| 
						 | 
					04347839ea | ||
| 
						 | 
					e14b8410ca | ||
| 
						 | 
					2a1ab7b438 | ||
| 
						 | 
					dd1e4fbcc0 | ||
| 
						 | 
					3f84d34c37 | ||
| 
						 | 
					d7e429b91d | ||
| 
						 | 
					155ef13c67 | ||
| 
						 | 
					c3466040ec | ||
| 
						 | 
					2d9be79407 | ||
| 
						 | 
					2e4b7eede3 | ||
| 
						 | 
					e1dee801b9 | ||
| 
						 | 
					3c53fd892c | ||
| 
						 | 
					c46990b13b | ||
| 
						 | 
					1510b1f4c2 | ||
| 
						 | 
					f8a69166ed | ||
| 
						 | 
					b9eef98883 | ||
| 
						 | 
					ae5c1ca377 | ||
| 
						 | 
					188ab7df98 | ||
| 
						 | 
					2e3d02fe1a | ||
| 
						 | 
					3a3a1af1da | ||
| 
						 | 
					0ced72c608 | ||
| 
						 | 
					5584a95490 | ||
| 
						 | 
					a3e66779d3 | ||
| 
						 | 
					919eab8a8b | ||
| 
						 | 
					e9baceab5a | ||
| 
						 | 
					b05561c4b7 | ||
| 
						 | 
					b7355af421 | ||
| 
						 | 
					0462eedf5e | ||
| 
						 | 
					82425f2c28 | ||
| 
						 | 
					af010edd55 | ||
| 
						 | 
					5966f4d973 | ||
| 
						 | 
					eeb486a5f4 | ||
| 
						 | 
					d7f55e76f2 | ||
| 
						 | 
					7d9e781a1d | ||
| 
						 | 
					e0c21a0b6b | ||
| 
						 | 
					1dfb4b9400 | ||
| 
						 | 
					e5cb774323 | ||
| 
						 | 
					73390e6ba5 | ||
| 
						 | 
					d91d9acc58 | ||
| 
						 | 
					820988a0c0 | ||
| 
						 | 
					1326a64a33 | ||
| 
						 | 
					e0da2c2ed2 | ||
| 
						 | 
					fb0a59cc58 | ||
| 
						 | 
					f5cd3561ba | ||
| 
						 | 
					115f7fa562 | ||
| 
						 | 
					c867d87180 | ||
| 
						 | 
					2a713eadc3 | ||
| 
						 | 
					2e7900b624 | ||
| 
						 | 
					f8435919a1 | ||
| 
						 | 
					1db4354b53 | ||
| 
						 | 
					3f233a1e77 | ||
| 
						 | 
					25917e972d | ||
| 
						 | 
					8812a81bdd | ||
| 
						 | 
					b17ffba915 | ||
| 
						 | 
					3619e34f50 | ||
| 
						 | 
					6924686b78 | ||
| 
						 | 
					92745f8116 | ||
| 
						 | 
					17cf9864e0 | ||
| 
						 | 
					5cfefd3ce3 | ||
| 
						 | 
					9ccc6f4382 | ||
| 
						 | 
					3c92471723 | ||
| 
						 | 
					1a932ae094 | ||
| 
						 | 
					57912ed329 | ||
| 
						 | 
					e998f8aeb8 | ||
| 
						 | 
					e318431e54 | ||
| 
						 | 
					6a10f38daa | ||
| 
						 | 
					c095078890 | ||
| 
						 | 
					c644b83227 | ||
| 
						 | 
					75f535315a | ||
| 
						 | 
					7c283d9e97 | ||
| 
						 | 
					2aa3ef78b6 | ||
| 
						 | 
					1c0964e87f | ||
| 
						 | 
					5c8d41be85 | ||
| 
						 | 
					b286640360 | ||
| 
						 | 
					75a8ff9263 | ||
| 
						 | 
					50b5966e57 | ||
| 
						 | 
					8eb4456f93 | ||
| 
						 | 
					24c45faba0 | ||
| 
						 | 
					010ac38a98 | ||
| 
						 | 
					1c25ed5dbb | ||
| 
						 | 
					bf1d32e52a | ||
| 
						 | 
					6c86b69729 | ||
| 
						 | 
					72dfff2d5e | ||
| 
						 | 
					3341b820cc | ||
| 
						 | 
					ede5f6cf74 | ||
| 
						 | 
					321a9fea75 | ||
| 
						 | 
					2e00f46b51 | ||
| 
						 | 
					8c3f868983 | ||
| 
						 | 
					d03cc94f47 | ||
| 
						 | 
					5477ff9ba2 | ||
| 
						 | 
					46b11600b0 | ||
| 
						 | 
					15387e4ce0 | ||
| 
						 | 
					49ef33fa34 | ||
| 
						 | 
					1166323530 | ||
| 
						 | 
					29113688a1 | ||
| 
						 | 
					44c970746f | ||
| 
						 | 
					bc200e691c | ||
| 
						 | 
					a08f8d73cc | ||
| 
						 | 
					b52f12b3ba | ||
| 
						 | 
					78b5d89ddf | ||
| 
						 | 
					b79df62eff | ||
| 
						 | 
					e3c76874ad | ||
| 
						 | 
					4347394a27 | ||
| 
						 | 
					53bb723834 | ||
| 
						 | 
					684a2264c5 | ||
| 
						 | 
					fde8dc1798 | ||
| 
						 | 
					3c87a2bdfa | ||
| 
						 | 
					1520e6c084 | ||
| 
						 | 
					2001129f09 | ||
| 
						 | 
					a50ecaee56 | ||
| 
						 | 
					67d9dcf003 | ||
| 
						 | 
					79dcae32ef | ||
| 
						 | 
					ccf6a19e2d | ||
| 
						 | 
					28fbbe3b1b | ||
| 
						 | 
					8d2dbe6ac0 | ||
| 
						 | 
					ba8bdea771 | ||
| 
						 | 
					3d9916298a | ||
| 
						 | 
					87054c4f0e | ||
| 
						 | 
					6660baee66 | ||
| 
						 | 
					25d4c9254c | ||
| 
						 | 
					44adfeb6c0 | ||
| 
						 | 
					5ff2ef79e6 | ||
| 
						 | 
					b762acadeb | ||
| 
						 | 
					7d779eefb4 | ||
| 
						 | 
					35b7757f9b | ||
| 
						 | 
					23195e4dcc | ||
| 
						 | 
					b28fbdfa7d | ||
| 
						 | 
					a897502cd9 | ||
| 
						 | 
					8546add692 | ||
| 
						 | 
					aa5c5eb4c1 | ||
| 
						 | 
					731abd3bd7 | ||
| 
						 | 
					7531dd18dc | ||
| 
						 | 
					04c32cddaa | ||
| 
						 | 
					623a5e24cb | ||
| 
						 | 
					bd9fc1d667 | ||
| 
						 | 
					c550f2e37b | ||
| 
						 | 
					484f876235 | ||
| 
						 | 
					c70a1fee71 | ||
| 
						 | 
					0b362de5f5 | ||
| 
						 | 
					d312f7be37 | ||
| 
						 | 
					2b5e5c3d08 | ||
| 
						 | 
					708454f010 | ||
| 
						 | 
					f1aec4dec3 | ||
| 
						 | 
					1c53a72f17 | ||
| 
						 | 
					9b157602e0 | ||
| 
						 | 
					67e217c84c | ||
| 
						 | 
					e6b650df0a | ||
| 
						 | 
					7b7b667ddc | ||
| 
						 | 
					70cd3c6b95 | ||
| 
						 | 
					db05bc512d | ||
| 
						 | 
					45da1efcdb | ||
| 
						 | 
					54a0076e94 | ||
| 
						 | 
					f8cab37bc1 | ||
| 
						 | 
					2e65277695 | ||
| 
						 | 
					9a1f59cd31 | ||
| 
						 | 
					4e72220fd6 | ||
| 
						 | 
					d65b8b2162 | ||
| 
						 | 
					5dca1e338c | ||
| 
						 | 
					5f4cf08864 | ||
| 
						 | 
					2a2e537983 | ||
| 
						 | 
					d79fc8da02 | ||
| 
						 | 
					e04ccbc5cc | ||
| 
						 | 
					bc946bfb97 | ||
| 
						 | 
					38680fa466 | ||
| 
						 | 
					a902b6bd98 | ||
| 
						 | 
					c5e91a9ae9 | ||
| 
						 | 
					b5f57f455a | ||
| 
						 | 
					ad00a52f2d | ||
| 
						 | 
					e08c7f15b4 | ||
| 
						 | 
					7469af4484 | ||
| 
						 | 
					ec76d850af | ||
| 
						 | 
					cedf19f356 | ||
| 
						 | 
					1d5f3f4640 | ||
| 
						 | 
					a060fc3b8e | ||
| 
						 | 
					bda5153703 | ||
| 
						 | 
					6f539399ef | ||
| 
						 | 
					d90bf2ab21 | ||
| 
						 | 
					02620cfcd5 | ||
| 
						 | 
					74daafaa94 | ||
| 
						 | 
					aa963813ed | ||
| 
						 | 
					9a6aff50ff | ||
| 
						 | 
					c7d16ac8da | ||
| 
						 | 
					b626f0396c | ||
| 
						 | 
					9d2006d8ed | ||
| 
						 | 
					abf1e32f2f | ||
| 
						 | 
					fc1e09bf81 | ||
| 
						 | 
					451cec33df | ||
| 
						 | 
					16c92916c7 | ||
| 
						 | 
					988037fe18 | ||
| 
						 | 
					9a7f80c869 | ||
| 
						 | 
					507e5c3a61 | ||
| 
						 | 
					f8b90b5a5d | ||
| 
						 | 
					dc14441757 | ||
| 
						 | 
					da8512aaff | ||
| 
						 | 
					d46a1a6178 | ||
| 
						 | 
					957c7c0e88 | ||
| 
						 | 
					3ebe87473c | ||
| 
						 | 
					0e05b51fe5 | ||
| 
						 | 
					c759e453bc | ||
| 
						 | 
					40ce8fca73 | ||
| 
						 | 
					8e1c33e160 | ||
| 
						 | 
					13b0cae256 | ||
| 
						 | 
					6d78a93b5b | ||
| 
						 | 
					ae92994645 | ||
| 
						 | 
					c4aa6b041b | ||
| 
						 | 
					80158304f0 | ||
| 
						 | 
					f0a069c1a2 | ||
| 
						 | 
					5b4b9ce976 | ||
| 
						 | 
					7fbcc2f24a | ||
| 
						 | 
					e4be79a383 | ||
| 
						 | 
					658604473f | ||
| 
						 | 
					86bea6455c | ||
| 
						 | 
					1e4a6e7b7f | ||
| 
						 | 
					fd6a72fa1c | ||
| 
						 | 
					ccffdb3fdc | ||
| 
						 | 
					74d89b0d93 | ||
| 
						 | 
					f142a71c3d | ||
| 
						 | 
					5b7af6de43 | ||
| 
						 | 
					ae414a0e42 | ||
| 
						 | 
					a240ea8ab8 | ||
| 
						 | 
					8b654459be | ||
| 
						 | 
					93cf058334 | ||
| 
						 | 
					3e8b4b5055 | ||
| 
						 | 
					3c56d65a41 | ||
| 
						 | 
					e51ec51af9 | ||
| 
						 | 
					ff1c55e983 | ||
| 
						 | 
					835d104f46 | ||
| 
						 | 
					aeba1ef352 | ||
| 
						 | 
					49e9f751a4 | ||
| 
						 | 
					ff46820da6 | ||
| 
						 | 
					6fba65e20d | ||
| 
						 | 
					68d2cf51bc | ||
| 
						 | 
					19eedffcaf | ||
| 
						 | 
					4e14996e8a | ||
| 
						 | 
					8a02a46a5c | ||
| 
						 | 
					0de5a0feee | ||
| 
						 | 
					4d321e0767 | ||
| 
						 | 
					67fda0c12e | ||
| 
						 | 
					1dded7f7e8 | ||
| 
						 | 
					482f238069 | ||
| 
						 | 
					5e145e54cc | ||
| 
						 | 
					df73e68a43 | ||
| 
						 | 
					e7c8483891 | ||
| 
						 | 
					712d523484 | ||
| 
						 | 
					24547c23ca | ||
| 
						 | 
					8baf604a39 | ||
| 
						 | 
					95416ce5b3 | ||
| 
						 | 
					a56f9a612b | ||
| 
						 | 
					0ae89cf32e | ||
| 
						 | 
					7e0c9630a3 | ||
| 
						 | 
					a6df6702c6 | ||
| 
						 | 
					f69abd5321 | ||
| 
						 | 
					fe9ce2b7d6 | ||
| 
						 | 
					8e7ccf6ff7 | ||
| 
						 | 
					51b77c0337 | ||
| 
						 | 
					85d179d4eb | ||
| 
						 | 
					890f5ada82 | ||
| 
						 | 
					1cc8410e36 | ||
| 
						 | 
					6ca7af9ec0 | ||
| 
						 | 
					bc2c8efc80 | ||
| 
						 | 
					00bb875240 | ||
| 
						 | 
					c3cb563d87 | ||
| 
						 | 
					d6ef8165bb | ||
| 
						 | 
					564a503b1b | ||
| 
						 | 
					56eeb1b28c | ||
| 
						 | 
					068fc255ac | ||
| 
						 | 
					cc8f2fb917 | ||
| 
						 | 
					b583ebb7dd | ||
| 
						 | 
					f897fe4146 | ||
| 
						 | 
					bb3add20f3 | ||
| 
						 | 
					48e0f6667b | ||
| 
						 | 
					32213fb25a | ||
| 
						 | 
					f6a1939f0f | ||
| 
						 | 
					94c666479d | ||
| 
						 | 
					09f17419a6 | ||
| 
						 | 
					eb8a65db16 | ||
| 
						 | 
					e6255a7d1e | ||
| 
						 | 
					65a0f68484 | ||
| 
						 | 
					e1a7db8fdd | ||
| 
						 | 
					65331f225a | ||
| 
						 | 
					64e8dc7981 | ||
| 
						 | 
					737fe7ea29 | ||
| 
						 | 
					b344a826ad | ||
| 
						 | 
					bc0f56d6d7 | ||
| 
						 | 
					3a89e9f106 | ||
| 
						 | 
					79e75e04ea | ||
| 
						 | 
					c3cb069108 | ||
| 
						 | 
					cdb41713a4 | ||
| 
						 | 
					491734eb21 | ||
| 
						 | 
					4e891a191d | ||
| 
						 | 
					b73a69a9c2 | ||
| 
						 | 
					e811eff5a9 | ||
| 
						 | 
					1d0c47fd55 | ||
| 
						 | 
					e46c807e4f | ||
| 
						 | 
					c132ca95c0 | ||
| 
						 | 
					6b870763ac | ||
| 
						 | 
					5505818199 | ||
| 
						 | 
					7493bcc659 | ||
| 
						 | 
					a068a1d0e3 | ||
| 
						 | 
					37b16c84bb | ||
| 
						 | 
					0ac89e8f54 | ||
| 
						 | 
					7e65b21a24 | ||
| 
						 | 
					736d69750d | ||
| 
						 | 
					0cb9dbed4e | ||
| 
						 | 
					6cfccfec33 | ||
| 
						 | 
					c523eb98d1 | ||
| 
						 | 
					0ffa49970b | ||
| 
						 | 
					8cd2ea552e | ||
| 
						 | 
					3f0becbf75 | ||
| 
						 | 
					1b0ae81f4a | ||
| 
						 | 
					54543b954c | ||
| 
						 | 
					5e2187f7ee | ||
| 
						 | 
					7b087bf4a9 | ||
| 
						 | 
					9df9c9d102 | ||
| 
						 | 
					7e8b5493a4 | ||
| 
						 | 
					265863c6a4 | ||
| 
						 | 
					2fee1e0666 | ||
| 
						 | 
					b4ff166cbc | ||
| 
						 | 
					861a0722c2 | ||
| 
						 | 
					b1cef8d984 | ||
| 
						 | 
					b911523977 | ||
| 
						 | 
					247c3f6049 | ||
| 
						 | 
					78c5d2a9bb | ||
| 
						 | 
					3bf4e14cc3 | ||
| 
						 | 
					d68d160cb7 | ||
| 
						 | 
					202cb42fbb | ||
| 
						 | 
					49f6cb968f | ||
| 
						 | 
					07e120b7da | ||
| 
						 | 
					f3dcae15ac | ||
| 
						 | 
					25ec498dc7 | ||
| 
						 | 
					9cc42cb091 | ||
| 
						 | 
					bcf9cf89e7 | ||
| 
						 | 
					f0729fc3e0 | ||
| 
						 | 
					8186c00ef3 | ||
| 
						 | 
					c0b31ccb87 | ||
| 
						 | 
					267c950c5f | ||
| 
						 | 
					ce1605b508 | ||
| 
						 | 
					66fdb1c0d4 | ||
| 
						 | 
					25bfdca16a | ||
| 
						 | 
					9c284f9651 | ||
| 
						 | 
					6d78c381f6 | ||
| 
						 | 
					784e2080df | ||
| 
						 | 
					70505bc334 | ||
| 
						 | 
					8e8b247341 | ||
| 
						 | 
					a8595879ec | ||
| 
						 | 
					33a688e806 | ||
| 
						 | 
					5c2bfad9b4 | ||
| 
						 | 
					250f979237 | ||
| 
						 | 
					b527b6e8ff | ||
| 
						 | 
					a54ce007e6 | ||
| 
						 | 
					4ed1f3490e | ||
| 
						 | 
					0a082e9b37 | ||
| 
						 | 
					236a99a409 | ||
| 
						 | 
					04b4363ec8 | ||
| 
						 | 
					37ebc20093 | ||
| 
						 | 
					cef781cc87 | ||
| 
						 | 
					08e4c7a967 | ||
| 
						 | 
					697e4edcad | ||
| 
						 | 
					b26297ca51 | ||
| 
						 | 
					6ca7dba0cf | ||
| 
						 | 
					f1fa05b407 | ||
| 
						 | 
					02e22c35fe | ||
| 
						 | 
					b935714237 | ||
| 
						 | 
					a8314df902 | ||
| 
						 | 
					0cd7a0325f | ||
| 
						 | 
					16b7c81d55 | ||
| 
						 | 
					424ba8b588 | ||
| 
						 | 
					bf493e8d62 | ||
| 
						 | 
					c714e43c8d | ||
| 
						 | 
					cdf9d6f6ed | ||
| 
						 | 
					cc4b48c27c | ||
| 
						 | 
					cac9c92cc0 | ||
| 
						 | 
					d40abf1689 | ||
| 
						 | 
					69e9c69e70 | ||
| 
						 | 
					c489ea7d01 | ||
| 
						 | 
					26c6857a59 | ||
| 
						 | 
					508bd3d1aa | ||
| 
						 | 
					8705846710 | ||
| 
						 | 
					c944a9696e | ||
| 
						 | 
					943cc09d8a | ||
| 
						 | 
					fc6800d19f | ||
| 
						 | 
					d06f047b04 | ||
| 
						 | 
					ddc899bada | ||
| 
						 | 
					bd479e25c7 | ||
| 
						 | 
					eaf5bd168e | ||
| 
						 | 
					d7ecc206ba | ||
| 
						 | 
					11ea212e8c | ||
| 
						 | 
					cb29d8c11f | ||
| 
						 | 
					adcea5a043 | ||
| 
						 | 
					f02f7c2c4a | ||
| 
						 | 
					a1e44cc14f | ||
| 
						 | 
					d2d09bf68c | ||
| 
						 | 
					e2dfb655f7 | ||
| 
						 | 
					463e76b63c | ||
| 
						 | 
					2dc4b0dbe8 | ||
| 
						 | 
					7b23c126e6 | ||
| 
						 | 
					25e3d2225a | ||
| 
						 | 
					c8e0b5d7b6 | ||
| 
						 | 
					4fb7e2b445 | ||
| 
						 | 
					9138e3c061 | ||
| 
						 | 
					9b2a29660b | ||
| 
						 | 
					b7b4a9fa57 | ||
| 
						 | 
					1fb07a7de8 | ||
| 
						 | 
					b9cbcaad58 | ||
| 
						 | 
					c6706a6f6c | ||
| 
						 | 
					958e6a75a1 | ||
| 
						 | 
					397977726c | ||
| 
						 | 
					285d9189c7 | ||
| 
						 | 
					767d3e0054 | ||
| 
						 | 
					409d2a1b71 | ||
| 
						 | 
					e0b9678d7f | ||
| 
						 | 
					166dea6ac8 | ||
| 
						 | 
					52bef4d677 | ||
| 
						 | 
					801e5ef840 | ||
| 
						 | 
					0044739ae5 | ||
| 
						 | 
					4e44bd3650 | ||
| 
						 | 
					0cffb0cd3e | ||
| 
						 | 
					aaa3850ccd | ||
| 
						 | 
					a17b5d5a4f | ||
| 
						 | 
					2f97765bc3 | ||
| 
						 | 
					3205ca8deb | ||
| 
						 | 
					1cb4d65b87 | ||
| 
						 | 
					7b2dd292bc | ||
| 
						 | 
					ab585551c0 | ||
| 
						 | 
					6cf0d7b999 | ||
| 
						 | 
					9d972207f0 | ||
| 
						 | 
					d9834ff24b | ||
| 
						 | 
					d9c3ba05e7 | ||
| 
						 | 
					03467ce6bd | ||
| 
						 | 
					6e750fcb1e | ||
| 
						 | 
					bd6941cfaa | ||
| 
						 | 
					578519edd0 | ||
| 
						 | 
					5c05f69450 | ||
| 
						 | 
					f529dca488 | ||
| 
						 | 
					296aca9dcf | ||
| 
						 | 
					b170703128 | ||
| 
						 | 
					b300fb7734 | ||
| 
						 | 
					f89af47438 | ||
| 
						 | 
					7bb4f8ff12 | ||
| 
						 | 
					7dd6407a4c | ||
| 
						 | 
					53de315b78 | ||
| 
						 | 
					e065e6cda2 | ||
| 
						 | 
					60553cc209 | ||
| 
						 | 
					2d4c9ab518 | ||
| 
						 | 
					50771f7ce3 | ||
| 
						 | 
					242f8d644c | ||
| 
						 | 
					f5575cd167 | ||
| 
						 | 
					dd0ddc3e78 | ||
| 
						 | 
					62308f3f4a | ||
| 
						 | 
					cecafcce94 | ||
| 
						 | 
					ca0efb7594 | ||
| 
						 | 
					1d05ff2779 | ||
| 
						 | 
					941811ccb9 | ||
| 
						 | 
					700384be8e | ||
| 
						 | 
					b8a22c40e0 | ||
| 
						 | 
					3918de9ad1 | ||
| 
						 | 
					96fe35e7d4 | ||
| 
						 | 
					e87afb1518 | ||
| 
						 | 
					7b467c6b81 | ||
| 
						 | 
					eb8ebafe87 | ||
| 
						 | 
					e559febaf1 | ||
| 
						 | 
					6bcc6d38c7 | ||
| 
						 | 
					8173960305 | ||
| 
						 | 
					f2e590942e | ||
| 
						 | 
					6a4b87eb9d | ||
| 
						 | 
					edcba19c23 | ||
| 
						 | 
					b140ae9137 | ||
| 
						 | 
					8ee0591f28 | ||
| 
						 | 
					97d0c596a1 | ||
| 
						 | 
					7454cba4fa | ||
| 
						 | 
					5713411893 | ||
| 
						 | 
					a0cf79e841 | ||
| 
						 | 
					825e1a7c56 | ||
| 
						 | 
					9f2b453338 | ||
| 
						 | 
					a0dce9be76 | ||
| 
						 | 
					cf2b938529 | ||
| 
						 | 
					62f685a9cd | ||
| 
						 | 
					2c7d978c2d | ||
| 
						 | 
					8cd897a42c | ||
| 
						 | 
					1dc44d3130 | ||
| 
						 | 
					2a6e3ef37e | ||
| 
						 | 
					115d528c23 | ||
| 
						 | 
					a310428527 | ||
| 
						 | 
					7e0fd45ce3 | ||
| 
						 | 
					b138ea54ee | ||
| 
						 | 
					d7125d8d85 | ||
| 
						 | 
					9c115a4acc | ||
| 
						 | 
					43716567f5 | ||
| 
						 | 
					0a8f00af34 | ||
| 
						 | 
					b1d7429186 | ||
| 
						 | 
					060a38a2c0 | ||
| 
						 | 
					58402976b4 | ||
| 
						 | 
					cd7b854bbb | ||
| 
						 | 
					aecc0756e8 | ||
| 
						 | 
					e6ccc6ed70 | ||
| 
						 | 
					e959a01fac | ||
| 
						 | 
					17674bfdf7 | ||
| 
						 | 
					d807d4c21f | ||
| 
						 | 
					b4690d2eab | ||
| 
						 | 
					886657a641 | ||
| 
						 | 
					db896db5a7 | ||
| 
						 | 
					2357ae17e7 | ||
| 
						 | 
					9f1c5491d2 | ||
| 
						 | 
					70b52222f5 | ||
| 
						 | 
					88cb59727c | ||
| 
						 | 
					781bfdc314 | ||
| 
						 | 
					b66723b23e | ||
| 
						 | 
					cf96d71c22 | ||
| 
						 | 
					1a111921da | ||
| 
						 | 
					5d9bb428bb | ||
| 
						 | 
					9833757b5d | ||
| 
						 | 
					4195343c0d | ||
| 
						 | 
					042bee4e5c | ||
| 
						 | 
					4afba1f3d9 | ||
| 
						 | 
					5999d45a5d | ||
| 
						 | 
					f69e5d6a19 | ||
| 
						 | 
					3517637702 | ||
| 
						 | 
					e2809bfb42 | ||
| 
						 | 
					68b33cc5c7 | ||
| 
						 | 
					4c02cf8ecc | ||
| 
						 | 
					271daaf768 | ||
| 
						 | 
					efbb7ee432 | ||
| 
						 | 
					6471ec71aa | ||
| 
						 | 
					cb45708061 | ||
| 
						 | 
					02597f2885 | ||
| 
						 | 
					8c6a514edf | ||
| 
						 | 
					7f3fdab793 | ||
| 
						 | 
					5372f5f989 | ||
| 
						 | 
					6d24c09a69 | ||
| 
						 | 
					a8d72c79db | ||
| 
						 | 
					1f713e0106 | ||
| 
						 | 
					03f84c8260 | ||
| 
						 | 
					6d5eb464c9 | ||
| 
						 | 
					67f8de9ab8 | ||
| 
						 | 
					2d95ceedc5 | ||
| 
						 | 
					6526d765fc | ||
| 
						 | 
					3d520f7c2d | ||
| 
						 | 
					9c37519b55 | ||
| 
						 | 
					7e9cfcd0dc | ||
| 
						 | 
					a99ce1f5b1 | ||
| 
						 | 
					42660b3cf1 | ||
| 
						 | 
					f30258c439 | ||
| 
						 | 
					93ff4c69f7 | ||
| 
						 | 
					79571bb1ca | ||
| 
						 | 
					f72c1a58cb | ||
| 
						 | 
					2461396f69 | ||
| 
						 | 
					81a071df2f | ||
| 
						 | 
					6841abe842 | ||
| 
						 | 
					cb70355d87 | ||
| 
						 | 
					b17442bb04 | ||
| 
						 | 
					4874e235fb | ||
| 
						 | 
					06afa6eb94 | ||
| 
						 | 
					58e4205d6c | ||
| 
						 | 
					733394d6dd | ||
| 
						 | 
					2de9558dea | ||
| 
						 | 
					6bd173fced | ||
| 
						 | 
					6b00cd746a | ||
| 
						 | 
					9309ea6617 | ||
| 
						 | 
					05c9e3aea5 | ||
| 
						 | 
					88bac3e664 | ||
| 
						 | 
					5473b6bc2f | ||
| 
						 | 
					38e408076e | ||
| 
						 | 
					dc100d87b5 | ||
| 
						 | 
					6f6b31dadc | ||
| 
						 | 
					b08b158b44 | ||
| 
						 | 
					177f27d71e | ||
| 
						 | 
					928bd9a149 | ||
| 
						 | 
					e53113b8ac | ||
| 
						 | 
					1fe83b4afe | ||
| 
						 | 
					e8f31f80d1 | ||
| 
						 | 
					56f5ab43c2 | ||
| 
						 | 
					370385571c | ||
| 
						 | 
					e34a303ce1 | ||
| 
						 | 
					36f120cd20 | ||
| 
						 | 
					0ae7c43fa5 | ||
| 
						 | 
					c0d2943952 | ||
| 
						 | 
					7d453a3b49 | ||
| 
						 | 
					cd447875e6 | ||
| 
						 | 
					692a94293c | ||
| 
						 | 
					efebb10829 | ||
| 
						 | 
					3c3f025923 | ||
| 
						 | 
					5ff6e2dfbb | ||
| 
						 | 
					61ac68f9f6 | ||
| 
						 | 
					7f1022a8b1 | ||
| 
						 | 
					edf6b025b1 | ||
| 
						 | 
					d799df36b3 | ||
| 
						 | 
					9e96812934 | ||
| 
						 | 
					91e97cbe4c | ||
| 
						 | 
					63ee3b32fe | ||
| 
						 | 
					4ff1a2da10 | ||
| 
						 | 
					4c3c975066 | ||
| 
						 | 
					ec5d74f868 | ||
| 
						 | 
					be0853358c | ||
| 
						 | 
					fea15b553d | ||
| 
						 | 
					88ef78745e | ||
| 
						 | 
					be79342515 | ||
| 
						 | 
					064a6176ac | ||
| 
						 | 
					84e7485bfb | ||
| 
						 | 
					f56f72f219 | ||
| 
						 | 
					2bfb23f102 | ||
| 
						 | 
					cf199fec52 | ||
| 
						 | 
					165c20c2c4 | ||
| 
						 | 
					625c6ba4c7 | ||
| 
						 | 
					a32bede701 | ||
| 
						 | 
					8ff5c8874f | ||
| 
						 | 
					c5d38fc262 | ||
| 
						 | 
					6b71970520 | ||
| 
						 | 
					0209e111f6 | ||
| 
						 | 
					dc01af7723 | ||
| 
						 | 
					5435d0412f | ||
| 
						 | 
					922ac25f64 | ||
| 
						 | 
					aed53d6c5a | ||
| 
						 | 
					61cdb9f36a | ||
| 
						 | 
					1acd042c85 | ||
| 
						 | 
					572712d82a | ||
| 
						 | 
					d1697a7556 | ||
| 
						 | 
					c8c6e9ecd9 | ||
| 
						 | 
					90f3e4cf05 | ||
| 
						 | 
					7bd8bf58bb | ||
| 
						 | 
					1190d3f442 | ||
| 
						 | 
					0e4f5cfbab | ||
| 
						 | 
					f1c8db9f8c | ||
| 
						 | 
					2c9abbd554 | ||
| 
						 | 
					2305ae5d8c | ||
| 
						 | 
					dec54bd0ba | ||
| 
						 | 
					aade369737 | ||
| 
						 | 
					2a5e042c70 | ||
| 
						 | 
					1dc4c8c727 | ||
| 
						 | 
					7ca035db88 | ||
| 
						 | 
					a460c42f94 | ||
| 
						 | 
					d16743e728 | ||
| 
						 | 
					4a29fa8caf | ||
| 
						 | 
					250bb54dba | ||
| 
						 | 
					847d05d0b4 | ||
| 
						 | 
					8315aa03fc | ||
| 
						 | 
					b7a4c480d6 | ||
| 
						 | 
					9a35faaa29 | ||
| 
						 | 
					fbe2e28911 | ||
| 
						 | 
					84968e25f3 | ||
| 
						 | 
					10fd0b7b55 | ||
| 
						 | 
					4a46dc6e5c | ||
| 
						 | 
					0ec55604c0 | ||
| 
						 | 
					500007c9ed | ||
| 
						 | 
					f75abba013 | ||
| 
						 | 
					dea113b428 | ||
| 
						 | 
					6abc406a69 | ||
| 
						 | 
					dcbe723bc5 | ||
| 
						 | 
					33c98a28ac | ||
| 
						 | 
					b2ddddfb20 | ||
| 
						 | 
					c24367ebb9 | ||
| 
						 | 
					7397b35379 | ||
| 
						 | 
					baee44c3de | ||
| 
						 | 
					1f2e4ecc30 | ||
| 
						 | 
					955e28006d | ||
| 
						 | 
					bf0736eb1f | ||
| 
						 | 
					3a5b97b7f1 | ||
| 
						 | 
					45bf825066 | ||
| 
						 | 
					4a18d5c89b | ||
| 
						 | 
					174b26c497 | ||
| 
						 | 
					5cacc82f61 | ||
| 
						 | 
					29a90816ff | ||
| 
						 | 
					4bea454021 | ||
| 
						 | 
					8bfd0ae4c4 | ||
| 
						 | 
					378943ce67 | ||
| 
						 | 
					c65d409afd | ||
| 
						 | 
					ed1bbe2cad | ||
| 
						 | 
					b0b3d09063 | ||
| 
						 | 
					0ede2af7a0 | ||
| 
						 | 
					e8d23f7811 | ||
| 
						 | 
					907cd7217e | ||
| 
						 | 
					7c402e5af3 | ||
| 
						 | 
					b8d78a5520 | ||
| 
						 | 
					dfa5862960 | ||
| 
						 | 
					4276908f51 | ||
| 
						 | 
					be23b71e87 | ||
| 
						 | 
					f851acbfff | ||
| 
						 | 
					78ef9b0205 | ||
| 
						 | 
					ed9b0e5cba | ||
| 
						 | 
					752c1a0ce9 | ||
| 
						 | 
					cc30415d0c | ||
| 
						 | 
					03e16611a3 | ||
| 
						 | 
					8e2f3c1c83 | ||
| 
						 | 
					b6d63b2516 | ||
| 
						 | 
					e6b88d02bd | ||
| 
						 | 
					125060ca63 | ||
| 
						 | 
					b4baca9261 | ||
| 
						 | 
					6342b6e332 | ||
| 
						 | 
					a6dc77822b | ||
| 
						 | 
					59bc67052b | ||
| 
						 | 
					c090562828 | ||
| 
						 | 
					69e2ec63c5 | ||
| 
						 | 
					f610a516a0 | ||
| 
						 | 
					2e51a4caa3 | ||
| 
						 | 
					c6fa97a6d6 | ||
| 
						 | 
					24d7159abd | ||
| 
						 | 
					7978dc989d | ||
| 
						 | 
					d99e6b5014 | ||
| 
						 | 
					2cf40fc2b8 | ||
| 
						 | 
					260d08b814 | ||
| 
						 | 
					53dd05d8f6 | ||
| 
						 | 
					fbe7055370 | ||
| 
						 | 
					a5b386205f | ||
| 
						 | 
					916bcab28e | ||
| 
						 | 
					c7373c3dee | ||
| 
						 | 
					9f2c8eb2a1 | ||
| 
						 | 
					65300dcfb0 | ||
| 
						 | 
					9ddc574f9a | ||
| 
						 | 
					2dd9e67874 | ||
| 
						 | 
					f93b03a5e6 | ||
| 
						 | 
					55a47cd30f | ||
| 
						 | 
					5792219d1d | ||
| 
						 | 
					293c58c1e7 | ||
| 
						 | 
					9f375a752e | ||
| 
						 | 
					04dc5a9ca6 | ||
| 
						 | 
					ae6cb5483e | ||
| 
						 | 
					a168ec1d27 | ||
| 
						 | 
					2a35144327 | ||
| 
						 | 
					7207eca1ee | ||
| 
						 | 
					9c34782478 | ||
| 
						 | 
					20e6d22709 | ||
| 
						 | 
					24dd0c61ef | ||
| 
						 | 
					565c15363c | ||
| 
						 | 
					ed67f7b7a7 | ||
| 
						 | 
					6ea8d138d3 | ||
| 
						 | 
					4159ac43aa | ||
| 
						 | 
					419b09b053 | ||
| 
						 | 
					88530f6b76 | ||
| 
						 | 
					a8cb8177f6 | ||
| 
						 | 
					277f8a34f4 | ||
| 
						 | 
					4dde470865 | ||
| 
						 | 
					ab08405984 | ||
| 
						 | 
					b81fde02aa | ||
| 
						 | 
					57dd2ea808 | ||
| 
						 | 
					7043fa702f | ||
| 
						 | 
					f98d2e5cc1 | ||
| 
						 | 
					1a5538251f | ||
| 
						 | 
					f4ddbb5ad1 | ||
| 
						 | 
					74bf705ea8 | ||
| 
						 | 
					676cd3a283 | ||
| 
						 | 
					c6ead3cdd3 | ||
| 
						 | 
					2d53648ce7 | ||
| 
						 | 
					64ca6ac26b | ||
| 
						 | 
					4fe4c00eca | ||
| 
						 | 
					376838a606 | ||
| 
						 | 
					d768a816aa | ||
| 
						 | 
					766e0cb7d1 | ||
| 
						 | 
					6a6b0c8b51 | ||
| 
						 | 
					e24b01cc6f | ||
| 
						 | 
					7f9ef5621a | ||
| 
						 | 
					d7fc9ffc51 | ||
| 
						 | 
					39348038df | ||
| 
						 | 
					9472baae0d | ||
| 
						 | 
					ae17b9ecd5 | ||
| 
						 | 
					74096890ba | ||
| 
						 | 
					889c2282a5 | ||
| 
						 | 
					dca30c44f5 | ||
| 
						 | 
					f2c358c6ce | ||
| 
						 | 
					2ab42de1ec | ||
| 
						 | 
					ac2024ccbf | ||
| 
						 | 
					93164a7d64 | ||
| 
						 | 
					ecff2e5ce1 | ||
| 
						 | 
					c9d630dab6 | ||
| 
						 | 
					d135906dbc | ||
| 
						 | 
					9f427a52cb | ||
| 
						 | 
					5a39d3a838 | ||
| 
						 | 
					013f3d999f | ||
| 
						 | 
					64d30d7adc | ||
| 
						 | 
					7062cb56a9 | ||
| 
						 | 
					9d57828d66 | ||
| 
						 | 
					9ed8dee71b | ||
| 
						 | 
					4692b3345d | ||
| 
						 | 
					e59fb00735 | ||
| 
						 | 
					9275853084 | ||
| 
						 | 
					0c81aa29f9 | ||
| 
						 | 
					01d2e27a2b | ||
| 
						 | 
					dd7aadf7b2 | ||
| 
						 | 
					b2fdf501c5 | ||
| 
						 | 
					345e515735 | ||
| 
						 | 
					945982b0b2 | ||
| 
						 | 
					18ad9cbd10 | ||
| 
						 | 
					f433a75569 | ||
| 
						 | 
					b05389c825 | ||
| 
						 | 
					68875fdf32 | ||
| 
						 | 
					3393e0c02c | ||
| 
						 | 
					a149b2466e | ||
| 
						 | 
					13e230d505 | ||
| 
						 | 
					80b3d7a3c9 | ||
| 
						 | 
					4bd48de60c | ||
| 
						 | 
					2eab92f8e3 | ||
| 
						 | 
					2bbd82cf24 | ||
| 
						 | 
					1bfd3d7f58 | ||
| 
						 | 
					cd77b3e88b | ||
| 
						 | 
					8c93c4dd42 | ||
| 
						 | 
					45d63a5408 | ||
| 
						 | 
					decef971f4 | ||
| 
						 | 
					a288aaefc4 | ||
| 
						 | 
					eed56c77b4 | ||
| 
						 | 
					346601bc32 | ||
| 
						 | 
					5080fbbef0 | ||
| 
						 | 
					b5b724348d | ||
| 
						 | 
					c3ee90d8ca | ||
| 
						 | 
					e1435034ae | ||
| 
						 | 
					bf35c5dc7f | ||
| 
						 | 
					c42d223ac2 | ||
| 
						 | 
					d5654d2b20 | ||
| 
						 | 
					a7508fec1a | ||
| 
						 | 
					c31945e682 | ||
| 
						 | 
					d3203b931e | ||
| 
						 | 
					947f4e90c3 | ||
| 
						 | 
					d184c7b271 | ||
| 
						 | 
					913488c066 | ||
| 
						 | 
					7fa27d9ac6 | ||
| 
						 | 
					c341b9cce5 | ||
| 
						 | 
					bbbf0d45ba | ||
| 
						 | 
					114c402d9e | ||
| 
						 | 
					d51519eba4 | ||
| 
						 | 
					e650f9988b | ||
| 
						 | 
					8ed8454115 | ||
| 
						 | 
					6e101bebb1 | ||
| 
						 | 
					4577b38d22 | ||
| 
						 | 
					a8515e2d28 | ||
| 
						 | 
					964e91052e | ||
| 
						 | 
					4e55e69bff | ||
| 
						 | 
					e501dbb658 | ||
| 
						 | 
					20e505e4b7 | ||
| 
						 | 
					291a26e6e3 | ||
| 
						 | 
					0383911887 | ||
| 
						 | 
					a5c5eb77b5 | ||
| 
						 | 
					90d02be7c5 | ||
| 
						 | 
					04221983ac | ||
| 
						 | 
					dfda027ae8 | ||
| 
						 | 
					21b5a79121 | ||
| 
						 | 
					411a388c62 | ||
| 
						 | 
					61c10d42f6 | ||
| 
						 | 
					68ecfb69a5 | ||
| 
						 | 
					e62fee8eb3 | ||
| 
						 | 
					5566d49103 | ||
| 
						 | 
					48337a4a35 | ||
| 
						 | 
					2c5c4fca14 | ||
| 
						 | 
					4fab95ed20 | ||
| 
						 | 
					6c36ca4628 | ||
| 
						 | 
					9c61c57896 | ||
| 
						 | 
					a618011ca1 | ||
| 
						 | 
					95eef4df79 | ||
| 
						 | 
					ec1e714ac1 | ||
| 
						 | 
					736d658080 | ||
| 
						 | 
					aa2920584e | ||
| 
						 | 
					9d13bfc258 | ||
| 
						 | 
					e43633011c | ||
| 
						 | 
					97027f7fb3 | ||
| 
						 | 
					bf5adc9be4 | ||
| 
						 | 
					7665b436f0 | ||
| 
						 | 
					ffca7b85c2 | ||
| 
						 | 
					eef2fa00d9 | ||
| 
						 | 
					c55551ad7c | ||
| 
						 | 
					c91b521111 | ||
| 
						 | 
					deb35e3e2c | ||
| 
						 | 
					5e2d3c9ec1 | ||
| 
						 | 
					dda454434b | ||
| 
						 | 
					b97d371ce0 | ||
| 
						 | 
					a25c98ac73 | ||
| 
						 | 
					fd47013111 | ||
| 
						 | 
					b3aa469c21 | ||
| 
						 | 
					981c0de27a | ||
| 
						 | 
					1bfe9acbbf | ||
| 
						 | 
					2d1e9ce753 | ||
| 
						 | 
					19043426b9 | ||
| 
						 | 
					6e21ce592e | ||
| 
						 | 
					975c6efbe4 | ||
| 
						 | 
					972491aece | ||
| 
						 | 
					1a8ecda3ee | ||
| 
						 | 
					d36c7b618d | ||
| 
						 | 
					251431ff4f | ||
| 
						 | 
					1a3052793e | ||
| 
						 | 
					84fbc56fd0 | ||
| 
						 | 
					4444ff7632 | ||
| 
						 | 
					7770da4b41 | ||
| 
						 | 
					7202a4d42b | ||
| 
						 | 
					3fa29765fd | ||
| 
						 | 
					b9e468c163 | ||
| 
						 | 
					0172ad2902 | ||
| 
						 | 
					d9aa352ff0 | ||
| 
						 | 
					945ba0300d | ||
| 
						 | 
					9e15cc606e | ||
| 
						 | 
					e011160f3c | ||
| 
						 | 
					9447da5065 | ||
| 
						 | 
					387ed39f6d | ||
| 
						 | 
					e50e5f9336 | ||
| 
						 | 
					6f0d9950f3 | ||
| 
						 | 
					4705ff7d6d | ||
| 
						 | 
					36778eb231 | ||
| 
						 | 
					c6dd154b3e | ||
| 
						 | 
					74b5feea7b | ||
| 
						 | 
					35cae95032 | ||
| 
						 | 
					11a36aa96f | ||
| 
						 | 
					9b0e97ae10 | ||
| 
						 | 
					02ba02604c | ||
| 
						 | 
					42ecf418f5 | ||
| 
						 | 
					48ce525d16 | ||
| 
						 | 
					3081e2ca73 | ||
| 
						 | 
					48ae85b6ff | ||
| 
						 | 
					82281ce47d | ||
| 
						 | 
					4ecd2bafbb | ||
| 
						 | 
					308b9ad8f0 | ||
| 
						 | 
					73b408c242 | ||
| 
						 | 
					51c9eb321a | ||
| 
						 | 
					1657fca2f4 | ||
| 
						 | 
					0d25aad90d | ||
| 
						 | 
					b8c1cb1c2c | ||
| 
						 | 
					6e1d44fd56 | ||
| 
						 | 
					528ff4b451 | ||
| 
						 | 
					f6c29ba3dc | ||
| 
						 | 
					160f9b5bf6 | ||
| 
						 | 
					53e7985c8d | ||
| 
						 | 
					9102342795 | ||
| 
						 | 
					c4488936b2 | ||
| 
						 | 
					4e2b990734 | ||
| 
						 | 
					6ca1418587 | ||
| 
						 | 
					30dd06812e | ||
| 
						 | 
					b29b89ef21 | ||
| 
						 | 
					81ae27d56a | ||
| 
						 | 
					f90bf72280 | ||
| 
						 | 
					abcf7aa591 | ||
| 
						 | 
					40b6d49387 | ||
| 
						 | 
					497b4f92d2 | ||
| 
						 | 
					28566b4966 | ||
| 
						 | 
					b4b15f68c0 | ||
| 
						 | 
					1eb1cf452b | ||
| 
						 | 
					c549810def | ||
| 
						 | 
					0d0ed9187a | ||
| 
						 | 
					dfa81d9efb | ||
| 
						 | 
					1dba06e7b0 | ||
| 
						 | 
					daac87be95 | ||
| 
						 | 
					e97359435e | ||
| 
						 | 
					afce9bcca1 | ||
| 
						 | 
					9c7baca820 | ||
| 
						 | 
					618265e645 | ||
| 
						 | 
					9728978b75 | ||
| 
						 | 
					938c0bbae1 | ||
| 
						 | 
					a0cd818831 | ||
| 
						 | 
					31c4ab5401 | ||
| 
						 | 
					1f65529824 | ||
| 
						 | 
					5b3a6eedd1 | ||
| 
						 | 
					6938440d68 | ||
| 
						 | 
					57ec6c9bad | ||
| 
						 | 
					7a09bc4068 | ||
| 
						 | 
					deb15645a8 | ||
| 
						 | 
					f0b358e8b9 | ||
| 
						 | 
					dce2b5a8fc | ||
| 
						 | 
					59d100d959 | ||
| 
						 | 
					d497b5362b | ||
| 
						 | 
					369b0abdc2 | ||
| 
						 | 
					72240ab31a | ||
| 
						 | 
					dc4e1ddc9f | ||
| 
						 | 
					ff656346fa | ||
| 
						 | 
					ca91057d50 | ||
| 
						 | 
					8c1e7de6cb | ||
| 
						 | 
					207886cd3a | ||
| 
						 | 
					336d1ee733 | ||
| 
						 | 
					bed2b769f5 | ||
| 
						 | 
					26029d9c4c | ||
| 
						 | 
					c64c888929 | ||
| 
						 | 
					8d9db41880 | ||
| 
						 | 
					4fae54a8e0 | ||
| 
						 | 
					9f35928719 | ||
| 
						 | 
					c5af032df5 | ||
| 
						 | 
					8a898a6fcc | ||
| 
						 | 
					9f827ded1c | ||
| 
						 | 
					5daa9411a0 | ||
| 
						 | 
					094d4019b8 | ||
| 
						 | 
					1507f3abba | ||
| 
						 | 
					30e8defe52 | ||
| 
						 | 
					9f4dd3e3e3 | ||
| 
						 | 
					8c00014d7e | ||
| 
						 | 
					1cf12a6350 | ||
| 
						 | 
					dc9461e23f | ||
| 
						 | 
					72d57050df | ||
| 
						 | 
					49d1f665a4 | ||
| 
						 | 
					2c25edc4c1 | ||
| 
						 | 
					d2f098b33d | ||
| 
						 | 
					6f4f7f35f3 | ||
| 
						 | 
					0a4fe6c8db | ||
| 
						 | 
					7bba401d5d | ||
| 
						 | 
					c73cff12f1 | ||
| 
						 | 
					b32d93840e | ||
| 
						 | 
					cb457849fd | ||
| 
						 | 
					cb3c30059a | ||
| 
						 | 
					20dc93e49e | ||
| 
						 | 
					b620447dcc | ||
| 
						 | 
					4ffd2ad1d3 | ||
| 
						 | 
					acc9938ba5 | ||
| 
						 | 
					f6d13ac8cf | ||
| 
						 | 
					24cb653c6b | ||
| 
						 | 
					6dfd3cf68e | ||
| 
						 | 
					073775cbbb | ||
| 
						 | 
					e995d5044e | ||
| 
						 | 
					5b0a79a27a | ||
| 
						 | 
					6747de655e | ||
| 
						 | 
					2840dcd2a6 | ||
| 
						 | 
					bd5770c6b1 | ||
| 
						 | 
					a9c5de8654 | ||
| 
						 | 
					837685c522 | 
							
								
								
									
										114
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,114 @@
 | 
			
		||||
# Object files
 | 
			
		||||
*.o
 | 
			
		||||
*.obj
 | 
			
		||||
 | 
			
		||||
# editor artefacts
 | 
			
		||||
*.swp
 | 
			
		||||
.#*
 | 
			
		||||
#*#
 | 
			
		||||
*~
 | 
			
		||||
 | 
			
		||||
# Top level excludes
 | 
			
		||||
/Makefile.bak
 | 
			
		||||
/Makefile
 | 
			
		||||
/MINFO
 | 
			
		||||
/*.a
 | 
			
		||||
/include
 | 
			
		||||
/*.pc
 | 
			
		||||
/rehash.time
 | 
			
		||||
/inc.*
 | 
			
		||||
/makefile.*
 | 
			
		||||
/out.*
 | 
			
		||||
/tmp.*
 | 
			
		||||
 | 
			
		||||
# Most *.c files under test/ are symlinks
 | 
			
		||||
/test/*.c
 | 
			
		||||
# Apart from these
 | 
			
		||||
!/test/asn1test.c
 | 
			
		||||
!/test/methtest.c
 | 
			
		||||
!/test/dummytest.c
 | 
			
		||||
!/test/igetest.c
 | 
			
		||||
!/test/r160test.c
 | 
			
		||||
!/test/fips_algvs.c
 | 
			
		||||
 | 
			
		||||
/test/*.ss
 | 
			
		||||
/test/*.srl
 | 
			
		||||
/test/.rnd
 | 
			
		||||
/test/test*.pem
 | 
			
		||||
/test/newkey.pem
 | 
			
		||||
 | 
			
		||||
# Certificate symbolic links
 | 
			
		||||
*.0
 | 
			
		||||
 | 
			
		||||
# Links under apps
 | 
			
		||||
/apps/CA.pl
 | 
			
		||||
/apps/md4.c
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Auto generated headers
 | 
			
		||||
/crypto/buildinf.h
 | 
			
		||||
/crypto/opensslconf.h
 | 
			
		||||
 | 
			
		||||
# Auto generated assembly language source files
 | 
			
		||||
*.s
 | 
			
		||||
!/crypto/bn/asm/pa-risc2.s
 | 
			
		||||
!/crypto/bn/asm/pa-risc2W.s
 | 
			
		||||
crypto/aes/asm/a_win32.asm
 | 
			
		||||
crypto/bf/asm/b_win32.asm
 | 
			
		||||
crypto/bn/asm/bn_win32.asm
 | 
			
		||||
crypto/bn/asm/co_win32.asm
 | 
			
		||||
crypto/bn/asm/mt_win32.asm
 | 
			
		||||
crypto/cast/asm/c_win32.asm
 | 
			
		||||
crypto/cpu_win32.asm
 | 
			
		||||
crypto/des/asm/d_win32.asm
 | 
			
		||||
crypto/des/asm/y_win32.asm
 | 
			
		||||
crypto/md5/asm/m5_win32.asm
 | 
			
		||||
crypto/rc4/asm/r4_win32.asm
 | 
			
		||||
crypto/rc5/asm/r5_win32.asm
 | 
			
		||||
crypto/ripemd/asm/rm_win32.asm
 | 
			
		||||
crypto/sha/asm/s1_win32.asm
 | 
			
		||||
crypto/sha/asm/sha512-sse2.asm
 | 
			
		||||
 | 
			
		||||
# Executables
 | 
			
		||||
/apps/openssl
 | 
			
		||||
/test/sha256t
 | 
			
		||||
/test/sha512t
 | 
			
		||||
/test/*test
 | 
			
		||||
/test/fips_aesavs
 | 
			
		||||
/test/fips_desmovs
 | 
			
		||||
/test/fips_dhvs
 | 
			
		||||
/test/fips_drbgvs
 | 
			
		||||
/test/fips_dssvs
 | 
			
		||||
/test/fips_ecdhvs
 | 
			
		||||
/test/fips_ecdsavs
 | 
			
		||||
/test/fips_rngvs
 | 
			
		||||
/test/fips_test_suite
 | 
			
		||||
*.so*
 | 
			
		||||
*.dylib*
 | 
			
		||||
*.dll*
 | 
			
		||||
# Exceptions
 | 
			
		||||
!/test/bctest
 | 
			
		||||
!/crypto/des/times/486-50.sol
 | 
			
		||||
 | 
			
		||||
# Misc auto generated files
 | 
			
		||||
/tools/c_rehash
 | 
			
		||||
/test/evptests.txt
 | 
			
		||||
lib
 | 
			
		||||
Makefile.save
 | 
			
		||||
*.bak
 | 
			
		||||
tags
 | 
			
		||||
TAGS
 | 
			
		||||
 | 
			
		||||
# Windows
 | 
			
		||||
/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
 | 
			
		||||
							
								
								
									
										30
									
								
								ACKNOWLEDGMENTS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								ACKNOWLEDGMENTS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
The OpenSSL project depends on volunteer efforts and financial support from
 | 
			
		||||
the end user community. That support comes in the form of donations and paid
 | 
			
		||||
sponsorships, software support contracts, paid consulting services
 | 
			
		||||
and commissioned software development.
 | 
			
		||||
 | 
			
		||||
Since all these activities support the continued development and improvement
 | 
			
		||||
of OpenSSL we consider all these clients and customers as sponsors of the
 | 
			
		||||
OpenSSL project.
 | 
			
		||||
 | 
			
		||||
We would like to identify and thank the following such sponsors for their past
 | 
			
		||||
or current significant support of the OpenSSL project:
 | 
			
		||||
 | 
			
		||||
Major support:
 | 
			
		||||
 | 
			
		||||
	Qualys		http://www.qualys.com/
 | 
			
		||||
 | 
			
		||||
Very significant support:
 | 
			
		||||
 | 
			
		||||
	OpenGear:	http://www.opengear.com/
 | 
			
		||||
 | 
			
		||||
Significant support:
 | 
			
		||||
 | 
			
		||||
	PSW Group:	http://www.psw.net/
 | 
			
		||||
	Acano Ltd.	http://acano.com/
 | 
			
		||||
 | 
			
		||||
Please note that we ask permission to identify sponsors and that some sponsors
 | 
			
		||||
we consider eligible for inclusion here have requested to remain anonymous.
 | 
			
		||||
 | 
			
		||||
Additional sponsorship or financial support is always welcome: for more
 | 
			
		||||
information please contact the OpenSSL Software Foundation.
 | 
			
		||||
							
								
								
									
										493
									
								
								Configure
									
									
									
									
									
								
							
							
						
						
									
										493
									
								
								Configure
									
									
									
									
									
								
							@@ -10,7 +10,7 @@ use strict;
 | 
			
		||||
 | 
			
		||||
# see INSTALL for instructions.
 | 
			
		||||
 | 
			
		||||
my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimental-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-dso] [no-krb5] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] os/compiler[:flags]\n";
 | 
			
		||||
my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimental-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-dso] [no-krb5] [sctp] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] os/compiler[:flags]\n";
 | 
			
		||||
 | 
			
		||||
# Options:
 | 
			
		||||
#
 | 
			
		||||
@@ -56,6 +56,7 @@ my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimenta
 | 
			
		||||
# [no-]zlib     [don't] compile support for zlib compression.
 | 
			
		||||
# zlib-dynamic	Like "zlib", but the zlib library is expected to be a shared
 | 
			
		||||
#		library and will be loaded in run-time by the OpenSSL library.
 | 
			
		||||
# sctp          include SCTP support
 | 
			
		||||
# 386           generate 80386 code
 | 
			
		||||
# no-sse2	disables IA-32 SSE2 code, above option implies no-sse2
 | 
			
		||||
# no-<cipher>   build without specified algorithm (rsa, idea, rc5, ...)
 | 
			
		||||
@@ -104,6 +105,8 @@ my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimenta
 | 
			
		||||
 | 
			
		||||
my $gcc_devteam_warn = "-Wall -pedantic -DPEDANTIC -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wshadow -Wformat -Werror -DCRYPTO_MDEBUG_ALL -DCRYPTO_MDEBUG_ABORT -DREF_CHECK -DOPENSSL_NO_DEPRECATED";
 | 
			
		||||
 | 
			
		||||
my $clang_disabled_warnings = "-Wno-language-extension-token -Wno-extended-offsetof -Wno-padded -Wno-shorten-64-to-32 -Wno-format-nonliteral -Wno-missing-noreturn -Wno-unused-parameter -Wno-sign-conversion -Wno-unreachable-code -Wno-conversion -Wno-documentation -Wno-missing-variable-declarations -Wno-cast-align -Wno-incompatible-pointer-types-discards-qualifiers -Wno-missing-variable-declarations -Wno-missing-field-initializers -Wno-unused-macros -Wno-disabled-macro-expansion -Wno-conditional-uninitialized -Wno-switch-enum";
 | 
			
		||||
 | 
			
		||||
my $strict_warnings = 0;
 | 
			
		||||
 | 
			
		||||
my $x86_gcc_des="DES_PTR DES_RISC1 DES_UNROLL";
 | 
			
		||||
@@ -123,21 +126,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:";
 | 
			
		||||
 | 
			
		||||
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 rsaz_exp.o rsaz-x86_64.o rsaz-avx2.o:ecp_nistz256.o ecp_nistz256-x86_64.o::aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o aesni-sha256-x86_64.o aesni-mb-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o sha1-mb-x86_64.o sha256-mb-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 aesni-gcm-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 vis3-mont.o sparct4-mont.o sparcv9-gf2m.o::des_enc-sparc.o fcrypt_b.o dest4-sparcv9.o:aes_core.o aes_cbc.o aes-sparcv9.o aest4-sparcv9.o::md5-sparcv9.o:sha1-sparcv9.o sha256-sparcv9.o sha512-sparcv9.o::::::camellia.o cmll_misc.o cmll_cbc.o cmllt4-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 $mips64_asm=":bn-mips.o mips-mont.o:::aes_cbc.o aes-mips.o:::sha1-mips.o sha256-mips.o sha512-mips.o::::::::";
 | 
			
		||||
my $mips32_asm=$mips64_asm; $mips32_asm =~ s/\s*sha512\-mips\.o//;
 | 
			
		||||
my $s390x_asm="s390xcap.o s390xcpuid.o:bn-s390x.o s390x-mont.o s390x-gf2m.o:::aes-s390x.o aes-ctr.o aes-xts.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 bsaes-armv7.o aesv8-armx.o:::sha1-armv4-large.o sha256-armv4.o sha512-armv4.o:::::::ghash-armv4.o ghashv8-armx.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 $ppc64_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o:::aes_core.o aes_cbc.o aes-ppc.o vpaes-ppc.o aesp8-ppc.o:::sha1-ppc.o sha256-ppc.o sha512-ppc.o sha256p8-ppc.o sha512p8-ppc.o:::::::ghashp8-ppc.o:";
 | 
			
		||||
my $ppc32_asm=$ppc64_asm;
 | 
			
		||||
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 +155,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 : $ec_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,32 +170,36 @@ 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 -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-macos",	"cc:$gcc_devteam_warn -arch i386 -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -O3 -DL_ENDIAN -g3 -pipe::(unknown)::-Wl,-search_paths_first::::",
 | 
			
		||||
"debug-ben-macos-gcc46",	"gcc-mp-4.6:$gcc_devteam_warn -Wconversion -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -O3 -DL_ENDIAN -g3 -pipe::(unknown)::::::",
 | 
			
		||||
"debug-ben-darwin64","cc:$gcc_devteam_warn -g -Wno-language-extension-token -Wno-extended-offsetof -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:".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",
 | 
			
		||||
"debug-ben-debug-64-clang",	"clang:$gcc_devteam_warn -Wno-error=overlength-strings -Wno-error=extended-offsetof -Qunused-arguments -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-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:-DL_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBIO_PAIR_DEBUG -DPEDANTIC -g -march=i486 -pedantic -Wshadow -Wall -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion::-D_REENTRANT:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
 | 
			
		||||
"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-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 -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 -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-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-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-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-steve64", "gcc:$gcc_devteam_warn -m64 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -Wno-overlength-strings -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 -Wno-overlength-strings -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::-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 -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 -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 -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 -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 -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 -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 -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 -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::elf:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-generic32","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -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 -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
 | 
			
		||||
@@ -196,8 +207,8 @@ my %table=(
 | 
			
		||||
"cc",		"cc:-O::(unknown)::::::",
 | 
			
		||||
 | 
			
		||||
####VOS Configurations
 | 
			
		||||
"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:",
 | 
			
		||||
"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:",
 | 
			
		||||
 | 
			
		||||
#### Solaris x86 with GNU C setups
 | 
			
		||||
# -DOPENSSL_NO_INLINE_ASM switches off inline assembler. We have to do it
 | 
			
		||||
@@ -214,10 +225,10 @@ 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)",
 | 
			
		||||
"solaris-x86-cc","cc:-fast -xarch=generic -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)",
 | 
			
		||||
"solaris64-x86_64-cc","cc:-fast -xarch=amd64 -xstrconst -Xa -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:solaris-shared:-KPIC:-xarch=amd64 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
 | 
			
		||||
 | 
			
		||||
#### SPARC Solaris with GNU C setups
 | 
			
		||||
@@ -237,7 +248,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):/usr/ccs/bin/ar rs::/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):::/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)", 
 | 
			
		||||
@@ -248,16 +259,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 -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 -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 -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 -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 -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 -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:
 | 
			
		||||
@@ -290,17 +301,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):::/pa1.1",
 | 
			
		||||
"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:".eval{my $asm=$parisc20_asm;$asm=~s/2W\./2\./;$asm=~s/:64/:32/;$asm}.":dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_32",
 | 
			
		||||
"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:".eval{my $asm=$parisc20_asm;$asm=~s/2W\./2\./;$asm=~s/:64/:32/;$asm}.":dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_32",
 | 
			
		||||
"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",
 | 
			
		||||
@@ -336,32 +348,83 @@ my %table=(
 | 
			
		||||
####
 | 
			
		||||
# *-generic* is endian-neutral target, but ./config is free to
 | 
			
		||||
# throw in -D[BL]_ENDIAN, whichever appropriate...
 | 
			
		||||
"linux-generic32","gcc:-DTERMIO -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)",
 | 
			
		||||
"linux-ppc",	"gcc:-DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc32_asm}:linux32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# It's believed that majority of ARM toolchains predefine appropriate -march.
 | 
			
		||||
# If you compiler does not, do complement config command line with one!
 | 
			
		||||
"linux-armv4",	"gcc:-DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-generic32","gcc:-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)",
 | 
			
		||||
"linux-ppc",	"gcc:-DB_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc32_asm}:linux32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#######################################################################
 | 
			
		||||
# Note that -march is not among compiler options in below linux-armv4
 | 
			
		||||
# target line. Not specifying one is intentional to give you choice to:
 | 
			
		||||
#
 | 
			
		||||
# a) rely on your compiler default by not specifying one;
 | 
			
		||||
# b) specify your target platform explicitly for optimal performance,
 | 
			
		||||
#    e.g. -march=armv6 or -march=armv7-a;
 | 
			
		||||
# c) build "universal" binary that targets *range* of platforms by
 | 
			
		||||
#    specifying minimum and maximum supported architecture;
 | 
			
		||||
#
 | 
			
		||||
# As for c) option. It actually makes no sense to specify maximum to be
 | 
			
		||||
# less than ARMv7, because it's the least requirement for run-time
 | 
			
		||||
# switch between platform-specific code paths. And without run-time
 | 
			
		||||
# switch performance would be equivalent to one for minimum. Secondly,
 | 
			
		||||
# there are some natural limitations that you'd have to accept and
 | 
			
		||||
# respect. Most notably you can *not* build "universal" binary for
 | 
			
		||||
# big-endian platform. This is because ARMv7 processor always picks
 | 
			
		||||
# instructions in little-endian order. Another similar limitation is
 | 
			
		||||
# that -mthumb can't "cross" -march=armv6t2 boundary, because that's
 | 
			
		||||
# where it became Thumb-2. Well, this limitation is a bit artificial,
 | 
			
		||||
# because it's not really impossible, but it's deemed too tricky to
 | 
			
		||||
# support. And of course you have to be sure that your binutils are
 | 
			
		||||
# actually up to the task of handling maximum target platform. With all
 | 
			
		||||
# this in mind here is an example of how to configure "universal" build:
 | 
			
		||||
#
 | 
			
		||||
#       ./Configure linux-armv4 -march=armv6 -D__ARM_MAX_ARCH__=8
 | 
			
		||||
#
 | 
			
		||||
"linux-armv4",	"gcc: -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-aarch64","gcc: -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${aarch64_asm}:linux64:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# Configure script adds minimally required -march for assembly support,
 | 
			
		||||
# if no -march was specified at command line. mips32 and mips64 below
 | 
			
		||||
# refer to contemporary MIPS Architecture specifications, MIPS32 and
 | 
			
		||||
# MIPS64, rather than to kernel bitness.
 | 
			
		||||
"linux-mips32",	"gcc:-mabi=32 -O3 -Wall -DBN_DIV3W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-mips64",   "gcc:-mabi=n32 -O3 -Wall -DBN_DIV3W::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips64_asm}:n32:dlfcn:linux-shared:-fPIC:-mabi=n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::32",
 | 
			
		||||
"linux64-mips64",   "gcc:-mabi=64 -O3 -Wall -DBN_DIV3W::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips64_asm}:64:dlfcn:linux-shared:-fPIC:-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
#### IA-32 targets...
 | 
			
		||||
"linux-ia32-icc",	"icc:-DL_ENDIAN -DTERMIO -O2 -no_cpprt::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-elf",	"gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-aout",	"gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -march=i486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out",
 | 
			
		||||
"linux-ia32-icc",	"icc:-DL_ENDIAN -O2::-D_REENTRANT::-ldl -no_cpprt:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-elf",	"gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-aout",	"gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -march=i486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out",
 | 
			
		||||
####
 | 
			
		||||
"linux-generic64","gcc:-DTERMIO -O3 -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)",
 | 
			
		||||
"linux-ppc64",	"gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc64_asm}:linux64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux-generic64","gcc:-O3 -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)",
 | 
			
		||||
"linux-ppc64",	"gcc:-m64 -DB_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc64_asm}:linux64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux-ppc64le","gcc:-m64 -DL_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:$ppc64_asm:linux64le:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::",
 | 
			
		||||
"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-ia64-icc","icc:-DL_ENDIAN -O2 -Wall::-D_REENTRANT::-ldl -no_cpprt: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 -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-clang",	"clang: -m64 -DL_ENDIAN -O3 -Weverything $clang_disabled_warnings -Qunused-arguments::-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-icc", "icc:-DL_ENDIAN -O2::-D_REENTRANT::-ldl -no_cpprt:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux-x32",	"gcc:-mx32 -DL_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-mx32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::x32",
 | 
			
		||||
"linux64-s390x",	"gcc:-m64 -DB_ENDIAN -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 -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.
 | 
			
		||||
"linux-sparcv8","gcc:-mv8 -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-sparcv8","gcc:-mv8 -DB_ENDIAN -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# it's a real mess with -mcpu=ultrasparc option under Linux, but
 | 
			
		||||
# -Wa,-Av8plus should do the trick no matter what.
 | 
			
		||||
"linux-sparcv9","gcc:-m32 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -Wa,-Av8plus -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-sparcv9","gcc:-m32 -mcpu=ultrasparc -DB_ENDIAN -O3 -fomit-frame-pointer -Wall -Wa,-Av8plus -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# GCC 3.1 is a requirement
 | 
			
		||||
"linux64-sparcv9","gcc:-m64 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux64-sparcv9","gcc:-m64 -mcpu=ultrasparc -DB_ENDIAN -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
#### Alpha Linux with GNU C and Compaq C setups
 | 
			
		||||
# Special notes:
 | 
			
		||||
# - linux-alpha+bwx-gcc is ment to be used from ./config only. If you
 | 
			
		||||
@@ -375,25 +438,31 @@ my %table=(
 | 
			
		||||
#
 | 
			
		||||
#					<appro@fy.chalmers.se>
 | 
			
		||||
#
 | 
			
		||||
"linux-alpha-gcc","gcc:-O3 -DL_ENDIAN -DTERMIO::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_UNROLL:${alpha_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"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}",
 | 
			
		||||
"linux-alpha-gcc","gcc:-O3 -DL_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_UNROLL:${alpha_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-alpha+bwx-gcc","gcc:-O3 -DL_ENDIAN::-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::-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::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
 | 
			
		||||
 | 
			
		||||
# Android: linux-* but without 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::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"android-mips","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.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)",
 | 
			
		||||
"BSD-x86",	"gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out:dlfcn:bsd-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"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-generic32","gcc:-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)",
 | 
			
		||||
"BSD-x86",	"gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out:dlfcn:bsd-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-x86-elf",	"gcc:-DL_ENDIAN -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 -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 -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-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)",
 | 
			
		||||
"BSD-generic64","gcc:-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
 | 
			
		||||
# simply *happens* to work around a compiler bug in gcc 3.3.3,
 | 
			
		||||
# 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-sparc64",	"gcc:-DB_ENDIAN -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 -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 -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)",
 | 
			
		||||
 | 
			
		||||
@@ -405,8 +474,8 @@ 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-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)",
 | 
			
		||||
"QNX6",       "gcc:::::-lsocket::${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"QNX6-i386",  "gcc:-DL_ENDIAN -O2 -Wall::::-lsocket:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
# BeOS
 | 
			
		||||
"beos-x86-r5",   "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall::-D_REENTRANT:BEOS:-lbe -lnet:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:beos:beos-shared:-fPIC -DPIC:-shared:.so",
 | 
			
		||||
@@ -426,11 +495,11 @@ my %table=(
 | 
			
		||||
# UnixWare 2.0x fails destest with -O.
 | 
			
		||||
"unixware-2.0","cc:-DFILIO_H -DNO_STRINGS_H::-Kthread::-lsocket -lnsl -lresolv -lx:${x86_gcc_des} ${x86_gcc_opts}:::",
 | 
			
		||||
"unixware-2.1","cc:-O -DFILIO_H::-Kthread::-lsocket -lnsl -lresolv -lx:${x86_gcc_des} ${x86_gcc_opts}:::",
 | 
			
		||||
"unixware-7","cc:-O -DFILIO_H -Kalloca::-Kthread::-lsocket -lnsl:BN_LLONG MD2_CHAR RC4_INDEX ${x86_gcc_des}:${x86_elf_asm}:dlfcn:svr5-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"unixware-7-gcc","gcc:-DL_ENDIAN -DFILIO_H -O3 -fomit-frame-pointer -march=pentium -Wall::-D_REENTRANT::-lsocket -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:gnu-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"unixware-7","cc:-O -DFILIO_H -Kalloca::-Kthread::-lsocket -lnsl:BN_LLONG MD2_CHAR RC4_INDEX ${x86_gcc_des}:${x86_elf_asm}-1:dlfcn:svr5-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"unixware-7-gcc","gcc:-DL_ENDIAN -DFILIO_H -O3 -fomit-frame-pointer -march=pentium -Wall::-D_REENTRANT::-lsocket -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}-1:dlfcn:gnu-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# SCO 5 - Ben Laurie <ben@algroup.co.uk> says the -O breaks the SCO cc.
 | 
			
		||||
"sco5-cc",  "cc:-belf::(unknown)::-lsocket -lnsl:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:svr3-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"sco5-gcc",  "gcc:-O3 -fomit-frame-pointer::(unknown)::-lsocket -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:svr3-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"sco5-cc",  "cc:-belf::(unknown)::-lsocket -lnsl:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}-1:dlfcn:svr3-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"sco5-gcc",  "gcc:-O3 -fomit-frame-pointer::(unknown)::-lsocket -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}-1:dlfcn:svr3-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#### IBM's AIX.
 | 
			
		||||
"aix3-cc",  "cc:-O -DB_ENDIAN -qmaxmem=16384::(unknown):AIX::BN_LLONG RC4_CHAR:::",
 | 
			
		||||
@@ -438,8 +507,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: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",
 | 
			
		||||
"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",
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Cray T90 and similar (SDSC)
 | 
			
		||||
@@ -479,7 +548,7 @@ my %table=(
 | 
			
		||||
"SINIX-N","/usr/ucb/cc:-O2 -misaligned::(unknown)::-lucb:RC4_INDEX RC4_CHAR:::",
 | 
			
		||||
 | 
			
		||||
# SIEMENS BS2000/OSD: an EBCDIC-based mainframe
 | 
			
		||||
"BS2000-OSD","c89:-O -XLLML -XLLMK -XL -DB_ENDIAN -DTERMIOS -DCHARSET_EBCDIC::(unknown)::-lsocket -lnsl:THIRTY_TWO_BIT DES_PTR DES_UNROLL MD2_CHAR RC4_INDEX RC4_CHAR BF_PTR:::",
 | 
			
		||||
"BS2000-OSD","c89:-O -XLLML -XLLMK -XL -DB_ENDIAN -DCHARSET_EBCDIC::(unknown)::-lsocket -lnsl:THIRTY_TWO_BIT DES_PTR DES_UNROLL MD2_CHAR RC4_INDEX RC4_CHAR BF_PTR:::",
 | 
			
		||||
 | 
			
		||||
# OS/390 Unix an EBCDIC-based Unix system on IBM mainframe
 | 
			
		||||
# You need to compile using the c89.sh wrapper in the tools directory, because the
 | 
			
		||||
@@ -490,20 +559,22 @@ 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",
 | 
			
		||||
"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",
 | 
			
		||||
"debug-VC-WIN32","cl:-W3 -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",
 | 
			
		||||
 | 
			
		||||
# Borland C++ 4.5
 | 
			
		||||
"BC-32","bcc32::::WIN32::BN_LLONG DES_PTR RC4_INDEX EXPORT_VAR_AS_FN:${no_asm}:win32",
 | 
			
		||||
 | 
			
		||||
# MinGW
 | 
			
		||||
"mingw", "gcc:-mno-cygwin -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -fomit-frame-pointer -O3 -march=i486 -Wall:::MINGW32:-lws2_32 -lgdi32 -lcrypt32:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts} EXPORT_VAR_AS_FN:${x86_asm}:coff:win32:cygwin-shared:-D_WINDLL -DOPENSSL_USE_APPLINK:-mno-cygwin:.dll.a",
 | 
			
		||||
"mingw", "gcc:-mno-cygwin -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -fomit-frame-pointer -O3 -march=i486 -Wall::-D_MT:MINGW32:-lws2_32 -lgdi32 -lcrypt32:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts} EXPORT_VAR_AS_FN:${x86_asm}:coff:win32:cygwin-shared:-D_WINDLL -DOPENSSL_USE_APPLINK:-mno-cygwin:.dll.a",
 | 
			
		||||
# As for OPENSSL_USE_APPLINK. Applink makes it possible to use .dll
 | 
			
		||||
# compiled with one compiler with application compiled with another
 | 
			
		||||
# compiler. It's possible to engage Applink support in mingw64 build,
 | 
			
		||||
@@ -511,15 +582,14 @@ my %table=(
 | 
			
		||||
# handling, one can't seriously consider its binaries for using with
 | 
			
		||||
# non-mingw64 run-time environment. And as mingw64 is always consistent
 | 
			
		||||
# with itself, Applink is never engaged and can as well be omitted.
 | 
			
		||||
"mingw64", "gcc:-mno-cygwin -DL_ENDIAN -O3 -Wall -DWIN32_LEAN_AND_MEAN -DUNICODE -D_UNICODE:::MINGW64:-lws2_32 -lgdi32 -lcrypt32:SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:${x86_64_asm}:mingw64:win32:cygwin-shared:-D_WINDLL:-mno-cygwin:.dll.a",
 | 
			
		||||
"mingw64", "gcc:-mno-cygwin -DL_ENDIAN -O3 -Wall -DWIN32_LEAN_AND_MEAN -DUNICODE -D_UNICODE::-D_MT:MINGW64:-lws2_32 -lgdi32 -lcrypt32:SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:${x86_64_asm}:mingw64:win32:cygwin-shared:-D_WINDLL:-mno-cygwin:.dll.a",
 | 
			
		||||
 | 
			
		||||
# UWIN 
 | 
			
		||||
"UWIN", "cc:-DTERMIOS -DL_ENDIAN -O -Wall:::UWIN::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:win32",
 | 
			
		||||
 | 
			
		||||
# Cygwin
 | 
			
		||||
"Cygwin-pre1.3", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown):CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:win32",
 | 
			
		||||
"Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall:::CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:coff:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
 | 
			
		||||
"debug-Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror:::CYGWIN32:::${no_asm}:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
 | 
			
		||||
"Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall:::CYGWIN::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:coff:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
 | 
			
		||||
"Cygwin-x86_64", "gcc:-DTERMIOS -DL_ENDIAN -O3 -Wall:::CYGWIN::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:mingw64:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
 | 
			
		||||
 | 
			
		||||
# NetWare from David Ward (dsward@novell.com)
 | 
			
		||||
# requires either MetroWerks NLM development tools, or gcc / nlmconv
 | 
			
		||||
@@ -537,7 +607,7 @@ my %table=(
 | 
			
		||||
"netware-libc-bsdsock-gcc", "i586-netware-gcc:-nostdinc -I/ndk/libc/include -DNETWARE_BSDSOCK -DL_ENDIAN -DNETWARE_LIBC -DOPENSSL_SYSNAME_NETWARE -DTERMIO -O2 -Wall:::::BN_LLONG ${x86_gcc_opts}::",
 | 
			
		||||
 | 
			
		||||
# DJGPP
 | 
			
		||||
"DJGPP", "gcc:-I/dev/env/WATT_ROOT/inc -DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O2 -Wall:::MSDOS:-L/dev/env/WATT_ROOT/lib -lwatt:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out:",
 | 
			
		||||
"DJGPP", "gcc:-I/dev/env/WATT_ROOT/inc -DTERMIO -DL_ENDIAN -fomit-frame-pointer -O2 -Wall:::MSDOS:-L/dev/env/WATT_ROOT/lib -lwatt:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out:",
 | 
			
		||||
 | 
			
		||||
# Ultrix from Bernhard Simon <simon@zid.tuwien.ac.at>
 | 
			
		||||
"ultrix-cc","cc:-std1 -O -Olimit 2500 -DL_ENDIAN::(unknown):::::::",
 | 
			
		||||
@@ -547,12 +617,15 @@ my %table=(
 | 
			
		||||
 | 
			
		||||
##### MacOS X (a.k.a. Rhapsody or Darwin) setup
 | 
			
		||||
"rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown):MACOSX_RHAPSODY::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}::",
 | 
			
		||||
"darwin-ppc-cc","cc:-arch ppc -O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin-ppc-cc","cc:-arch ppc -O3 -DB_ENDIAN -Wa,-force_cpusubtype_ALL::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"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",
 | 
			
		||||
"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:".eval{my $asm=$x86_asm;$asm=~s/cast\-586\.o//;$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:${x86_64_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_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",
 | 
			
		||||
"debug-darwin64-x86_64-cc","cc:-arch x86_64 -ggdb -g2 -O0 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG 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",
 | 
			
		||||
"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",
 | 
			
		||||
 | 
			
		||||
##### A/UX
 | 
			
		||||
"aux3-gcc","gcc:-O2 -DTERMIO::(unknown):AUX:-lbsd:RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
 | 
			
		||||
@@ -561,28 +634,32 @@ my %table=(
 | 
			
		||||
"newsos4-gcc","gcc:-O -DB_ENDIAN::(unknown):NEWS4:-lmld -liberty:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::",
 | 
			
		||||
 | 
			
		||||
##### GNU Hurd
 | 
			
		||||
"hurd-x86",  "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -march=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC",
 | 
			
		||||
"hurd-x86",  "gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -march=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC",
 | 
			
		||||
 | 
			
		||||
##### OS/2 EMX
 | 
			
		||||
"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-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'}::",
 | 
			
		||||
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
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 
 | 
			
		||||
		    netware-clib netware-clib-bsdsock
 | 
			
		||||
@@ -598,6 +675,7 @@ my $idx_lflags = $idx++;
 | 
			
		||||
my $idx_bn_ops = $idx++;
 | 
			
		||||
my $idx_cpuid_obj = $idx++;
 | 
			
		||||
my $idx_bn_obj = $idx++;
 | 
			
		||||
my $idx_ec_obj = $idx++;
 | 
			
		||||
my $idx_des_obj = $idx++;
 | 
			
		||||
my $idx_aes_obj = $idx++;
 | 
			
		||||
my $idx_bf_obj = $idx++;
 | 
			
		||||
@@ -609,6 +687,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++;
 | 
			
		||||
@@ -625,6 +705,9 @@ my $openssldir="";
 | 
			
		||||
my $exe_ext="";
 | 
			
		||||
my $install_prefix= "$ENV{'INSTALL_PREFIX'}";
 | 
			
		||||
my $cross_compile_prefix="";
 | 
			
		||||
my $fipsdir="/usr/local/ssl/fips-2.0";
 | 
			
		||||
my $fipslibdir="";
 | 
			
		||||
my $baseaddr="0xFB00000";
 | 
			
		||||
my $no_threads=0;
 | 
			
		||||
my $threads=0;
 | 
			
		||||
my $no_shared=0; # but "no-shared" is default
 | 
			
		||||
@@ -659,26 +742,37 @@ my $cmll_enc="camellia.o cmll_misc.o cmll_cbc.o";
 | 
			
		||||
my $processor="";
 | 
			
		||||
my $default_ranlib;
 | 
			
		||||
my $perl;
 | 
			
		||||
my $fips=0;
 | 
			
		||||
 | 
			
		||||
if (exists $ENV{FIPSDIR})
 | 
			
		||||
	{
 | 
			
		||||
	$fipsdir = $ENV{FIPSDIR};
 | 
			
		||||
	$fipsdir =~ s/\/$//;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# 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",
 | 
			
		||||
                 "rc5"            => "default",
 | 
			
		||||
		 "jpake"          => "experimental",
 | 
			
		||||
		 "libunbound"     => "experimental",
 | 
			
		||||
		 "md2"            => "default",
 | 
			
		||||
		 "rc5"            => "default",
 | 
			
		||||
		 "rfc3779"	  => "default",
 | 
			
		||||
                 "shared"         => "default",
 | 
			
		||||
		 "sctp"       => "default",
 | 
			
		||||
		 "shared"         => "default",
 | 
			
		||||
		 "ssl-trace"	  => "default",
 | 
			
		||||
		 "store"	  => "experimental",
 | 
			
		||||
                 "zlib"           => "default",
 | 
			
		||||
                 "zlib-dynamic"   => "default"
 | 
			
		||||
               );
 | 
			
		||||
		 "unit-test"	  => "default",
 | 
			
		||||
		 "zlib"           => "default",
 | 
			
		||||
		 "zlib-dynamic"   => "default"
 | 
			
		||||
	       );
 | 
			
		||||
my @experimental = ();
 | 
			
		||||
 | 
			
		||||
# 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_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST";
 | 
			
		||||
 | 
			
		||||
# Explicit "no-..." options will be collected in %disabled along with the defaults.
 | 
			
		||||
# To remove something from %disabled, use "enable-foo" (unless it's experimental).
 | 
			
		||||
@@ -736,6 +830,7 @@ PROCESS_ARGS:
 | 
			
		||||
 | 
			
		||||
		# rewrite some options in "enable-..." form
 | 
			
		||||
		s /^-?-?shared$/enable-shared/;
 | 
			
		||||
		s /^sctp$/enable-sctp/;
 | 
			
		||||
		s /^threads$/enable-threads/;
 | 
			
		||||
		s /^zlib$/enable-zlib/;
 | 
			
		||||
		s /^zlib-dynamic$/enable-zlib-dynamic/;
 | 
			
		||||
@@ -753,6 +848,11 @@ PROCESS_ARGS:
 | 
			
		||||
					{
 | 
			
		||||
					$disabled{"tls1"} = "option(tls)"
 | 
			
		||||
					}
 | 
			
		||||
				elsif ($1 eq "ssl3-method")
 | 
			
		||||
					{
 | 
			
		||||
					$disabled{"ssl3-method"} = "option(ssl)";
 | 
			
		||||
					$disabled{"ssl3"} = "option(ssl)";
 | 
			
		||||
					}
 | 
			
		||||
				else
 | 
			
		||||
					{
 | 
			
		||||
					$disabled{$1} = "option";
 | 
			
		||||
@@ -805,6 +905,10 @@ PROCESS_ARGS:
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^386$/)
 | 
			
		||||
			{ $processor=386; }
 | 
			
		||||
		elsif (/^fips$/)
 | 
			
		||||
			{
 | 
			
		||||
			$fips=1;
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^rsaref$/)
 | 
			
		||||
			{
 | 
			
		||||
			# No RSAref support any more since it's not needed.
 | 
			
		||||
@@ -813,15 +917,7 @@ PROCESS_ARGS:
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^[-+]/)
 | 
			
		||||
			{
 | 
			
		||||
			if (/^-[lL](.*)$/ or /^-Wl,/)
 | 
			
		||||
				{
 | 
			
		||||
				$libs.=$_." ";
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^-[^-]/ or /^\+/)
 | 
			
		||||
				{
 | 
			
		||||
				$flags.=$_." ";
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^--prefix=(.*)$/)
 | 
			
		||||
			if (/^--prefix=(.*)$/)
 | 
			
		||||
				{
 | 
			
		||||
				$prefix=$1;
 | 
			
		||||
				}
 | 
			
		||||
@@ -849,14 +945,30 @@ PROCESS_ARGS:
 | 
			
		||||
				{
 | 
			
		||||
				$withargs{"zlib-include"}="-I$1";
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^--with-fipsdir=(.*)$/)
 | 
			
		||||
				{
 | 
			
		||||
				$fipsdir="$1";
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^--with-fipslibdir=(.*)$/)
 | 
			
		||||
				{
 | 
			
		||||
				$fipslibdir="$1";
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^--with-baseaddr=(.*)$/)
 | 
			
		||||
				{
 | 
			
		||||
				$baseaddr="$1";
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^--cross-compile-prefix=(.*)$/)
 | 
			
		||||
				{
 | 
			
		||||
				$cross_compile_prefix=$1;
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
			elsif (/^-[lL](.*)$/ or /^-Wl,/)
 | 
			
		||||
				{
 | 
			
		||||
				print STDERR $usage;
 | 
			
		||||
				exit(1);
 | 
			
		||||
				$libs.=$_." ";
 | 
			
		||||
				}
 | 
			
		||||
			else	# common if (/^[-+]/), just pass down...
 | 
			
		||||
				{
 | 
			
		||||
				$_ =~ s/%([0-9a-f]{1,2})/chr(hex($1))/gei;
 | 
			
		||||
				$flags.=$_." ";
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		elsif ($_ =~ /^([^:]+):(.+)$/)
 | 
			
		||||
@@ -923,6 +1035,17 @@ if (defined($disabled{"md5"}) || defined($disabled{"rsa"}))
 | 
			
		||||
	$disabled{"ssl2"} = "forced";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if ($fips && $fipslibdir eq "")
 | 
			
		||||
	{
 | 
			
		||||
	$fipslibdir = $fipsdir . "/lib/";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# RSAX ENGINE sets default non-FIPS RSA method.
 | 
			
		||||
if ($fips)
 | 
			
		||||
	{
 | 
			
		||||
	$disabled{"rsax"} = "forced";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# SSL 3.0 and TLS requires MD5 and SHA and either RSA or DSA+DH
 | 
			
		||||
if (defined($disabled{"md5"}) || defined($disabled{"sha"})
 | 
			
		||||
    || (defined($disabled{"rsa"})
 | 
			
		||||
@@ -943,6 +1066,13 @@ if (defined($disabled{"ec"}) || defined($disabled{"dsa"})
 | 
			
		||||
	$disabled{"gost"} = "forced";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# SRP and HEARTBEATS require TLSEXT
 | 
			
		||||
if (defined($disabled{"tlsext"}))
 | 
			
		||||
	{
 | 
			
		||||
	$disabled{"srp"} = "forced";
 | 
			
		||||
	$disabled{"heartbeats"} = "forced";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if ($target eq "TABLE") {
 | 
			
		||||
	foreach $target (sort keys %table) {
 | 
			
		||||
		print_table_entry($target);
 | 
			
		||||
@@ -992,7 +1122,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-/)
 | 
			
		||||
			{
 | 
			
		||||
@@ -1012,6 +1142,8 @@ 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";
 | 
			
		||||
@@ -1071,6 +1203,7 @@ my $lflags = $fields[$idx_lflags];
 | 
			
		||||
my $bn_ops = $fields[$idx_bn_ops];
 | 
			
		||||
my $cpuid_obj = $fields[$idx_cpuid_obj];
 | 
			
		||||
my $bn_obj = $fields[$idx_bn_obj];
 | 
			
		||||
my $ec_obj = $fields[$idx_ec_obj];
 | 
			
		||||
my $des_obj = $fields[$idx_des_obj];
 | 
			
		||||
my $aes_obj = $fields[$idx_aes_obj];
 | 
			
		||||
my $bf_obj = $fields[$idx_bf_obj];
 | 
			
		||||
@@ -1082,6 +1215,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];
 | 
			
		||||
@@ -1093,6 +1228,12 @@ my $ar = $ENV{'AR'} || "ar";
 | 
			
		||||
my $arflags = $fields[$idx_arflags];
 | 
			
		||||
my $multilib = $fields[$idx_multilib];
 | 
			
		||||
 | 
			
		||||
# if $prefix/lib$multilib is not an existing directory, then
 | 
			
		||||
# assume that it's not searched by linker automatically, in
 | 
			
		||||
# which case adding $multilib suffix causes more grief than
 | 
			
		||||
# we're ready to tolerate, so don't...
 | 
			
		||||
$multilib="" if !-d "$prefix/lib$multilib";
 | 
			
		||||
 | 
			
		||||
$libdir="lib$multilib" if $libdir eq "";
 | 
			
		||||
 | 
			
		||||
$cflags = "$cflags$exp_cflags";
 | 
			
		||||
@@ -1102,6 +1243,18 @@ my ($prelflags,$postlflags)=split('%',$lflags);
 | 
			
		||||
if (defined($postlflags))	{ $lflags=$postlflags;	}
 | 
			
		||||
else				{ $lflags=$prelflags; undef $prelflags;	}
 | 
			
		||||
 | 
			
		||||
if ($target =~ /^mingw/ && `$cc --target-help 2>&1` !~ m/\-mno\-cygwin/m)
 | 
			
		||||
	{
 | 
			
		||||
	$cflags =~ s/\-mno\-cygwin\s*//;
 | 
			
		||||
	$shared_ldflag =~ s/\-mno\-cygwin\s*//;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if ($target =~ /linux.*\-mips/ && !$no_asm && $flags !~ /\-m(ips|arch=)/) {
 | 
			
		||||
	# minimally required architecture flags for assembly modules
 | 
			
		||||
	$cflags="-mips2 $cflags" if ($target =~ /mips32/);
 | 
			
		||||
	$cflags="-mips3 $cflags" if ($target =~ /mips64/);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
my $no_shared_warn=0;
 | 
			
		||||
my $no_user_cflags=0;
 | 
			
		||||
 | 
			
		||||
@@ -1228,9 +1381,9 @@ $lflags="$libs$lflags" if ($libs ne "");
 | 
			
		||||
 | 
			
		||||
if ($no_asm)
 | 
			
		||||
	{
 | 
			
		||||
	$cpuid_obj=$bn_obj=
 | 
			
		||||
	$cpuid_obj=$bn_obj=$ec_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="";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if (!$no_shared)
 | 
			
		||||
@@ -1294,7 +1447,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
 | 
			
		||||
@@ -1309,6 +1462,7 @@ if ($target =~ /\-icc$/)	# Intel C compiler
 | 
			
		||||
		}
 | 
			
		||||
	if ($iccver>=8)
 | 
			
		||||
		{
 | 
			
		||||
		$cflags=~s/\-KPIC/-fPIC/;
 | 
			
		||||
		# Eliminate unnecessary dependency from libirc.a. This is
 | 
			
		||||
		# essential for shared library support, as otherwise
 | 
			
		||||
		# apps/openssl can end up in endless loop upon startup...
 | 
			
		||||
@@ -1316,12 +1470,17 @@ if ($target =~ /\-icc$/)	# Intel C compiler
 | 
			
		||||
		}
 | 
			
		||||
	if ($iccver>=9)
 | 
			
		||||
		{
 | 
			
		||||
		$cflags.=" -i-static";
 | 
			
		||||
		$cflags=~s/\-no_cpprt/-no-cpprt/;
 | 
			
		||||
		$lflags.=" -i-static";
 | 
			
		||||
		$lflags=~s/\-no_cpprt/-no-cpprt/;
 | 
			
		||||
		}
 | 
			
		||||
	if ($iccver>=10)
 | 
			
		||||
		{
 | 
			
		||||
		$cflags=~s/\-i\-static/-static-intel/;
 | 
			
		||||
		$lflags=~s/\-i\-static/-static-intel/;
 | 
			
		||||
		}
 | 
			
		||||
	if ($iccver>=11)
 | 
			
		||||
		{
 | 
			
		||||
		$cflags.=" -no-intel-extensions";	# disable Cilk
 | 
			
		||||
		$lflags=~s/\-no\-cpprt/-no-cxxlib/;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1362,6 +1521,14 @@ $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";
 | 
			
		||||
	$cflags .= " -I\$(FIPSDIR)/include";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
$cpuid_obj="mem_clr.o"	unless ($cpuid_obj =~ /\.o$/);
 | 
			
		||||
$des_obj=$des_enc	unless ($des_obj =~ /\.o$/);
 | 
			
		||||
@@ -1394,13 +1561,21 @@ 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-xts.o indicates presense of AES_xts_[en|de]crypt...
 | 
			
		||||
	$cflags.=" -DAES_XTS_ASM" if ($aes_obj =~ s/\s*aes\-xts\.o//);
 | 
			
		||||
	$aes_obj =~ s/\s*(vpaes|aesni)\-x86\.o//g if ($no_sse2);
 | 
			
		||||
	$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$/)
 | 
			
		||||
if ($wp_obj =~ /\.o$/ && !$disabled{"whirlpool"})
 | 
			
		||||
	{
 | 
			
		||||
	$cflags.=" -DWHIRLPOOL_ASM";
 | 
			
		||||
	}
 | 
			
		||||
@@ -1408,6 +1583,14 @@ else	{
 | 
			
		||||
	$wp_obj="wp_block.o";
 | 
			
		||||
	}
 | 
			
		||||
$cmll_obj=$cmll_enc	unless ($cmll_obj =~ /.o$/);
 | 
			
		||||
if ($modes_obj =~ /ghash\-/)
 | 
			
		||||
	{
 | 
			
		||||
	$cflags.=" -DGHASH_ASM";
 | 
			
		||||
	}
 | 
			
		||||
if ($ec_obj =~ /ecp_nistz256/)
 | 
			
		||||
	{
 | 
			
		||||
	$cflags.=" -DECP_NISTZ256_ASM";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# "Stringify" the C flags string.  This permits it to be made part of a string
 | 
			
		||||
# and works as well on command lines.
 | 
			
		||||
@@ -1448,7 +1631,7 @@ if ($shlib_version_number =~ /(^[0-9]*)\.([0-9\.]*)/)
 | 
			
		||||
if ($strict_warnings)
 | 
			
		||||
	{
 | 
			
		||||
	my $wopt;
 | 
			
		||||
	die "ERROR --strict-warnings requires gcc" unless ($cc =~ /gcc$/);
 | 
			
		||||
	die "ERROR --strict-warnings requires gcc or clang" unless ($cc =~ /gcc$/ or $cc =~ /clang$/);
 | 
			
		||||
	foreach $wopt (split /\s+/, $gcc_devteam_warn)
 | 
			
		||||
		{
 | 
			
		||||
		$cflags .= " $wopt" unless ($cflags =~ /$wopt/)
 | 
			
		||||
@@ -1511,6 +1694,7 @@ while (<IN>)
 | 
			
		||||
	s/^EXE_EXT=.*$/EXE_EXT= $exe_ext/;
 | 
			
		||||
	s/^CPUID_OBJ=.*$/CPUID_OBJ= $cpuid_obj/;
 | 
			
		||||
	s/^BN_ASM=.*$/BN_ASM= $bn_obj/;
 | 
			
		||||
	s/^EC_ASM=.*$/EC_ASM= $ec_obj/;
 | 
			
		||||
	s/^DES_ENC=.*$/DES_ENC= $des_obj/;
 | 
			
		||||
	s/^AES_ENC=.*$/AES_ENC= $aes_obj/;
 | 
			
		||||
	s/^BF_ENC=.*$/BF_ENC= $bf_obj/;
 | 
			
		||||
@@ -1522,6 +1706,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/;
 | 
			
		||||
@@ -1530,6 +1716,12 @@ while (<IN>)
 | 
			
		||||
	s/^LIBKRB5=.*/LIBKRB5=$withargs{"krb5-lib"}/;
 | 
			
		||||
	s/^LIBZLIB=.*/LIBZLIB=$withargs{"zlib-lib"}/;
 | 
			
		||||
	s/^ZLIB_INCLUDE=.*/ZLIB_INCLUDE=$withargs{"zlib-include"}/;
 | 
			
		||||
 | 
			
		||||
	s/^FIPSDIR=.*/FIPSDIR=$fipsdir/;
 | 
			
		||||
	s/^FIPSLIBDIR=.*/FIPSLIBDIR=$fipslibdir/;
 | 
			
		||||
	s/^FIPSCANLIB=.*/FIPSCANLIB=libcrypto/ if $fips;
 | 
			
		||||
	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);
 | 
			
		||||
@@ -1564,6 +1756,7 @@ print "CFLAG         =$cflags\n";
 | 
			
		||||
print "EX_LIBS       =$lflags\n";
 | 
			
		||||
print "CPUID_OBJ     =$cpuid_obj\n";
 | 
			
		||||
print "BN_ASM        =$bn_obj\n";
 | 
			
		||||
print "EC_ASM        =$ec_obj\n";
 | 
			
		||||
print "DES_ENC       =$des_obj\n";
 | 
			
		||||
print "AES_ENC       =$aes_obj\n";
 | 
			
		||||
print "BF_ENC        =$bf_obj\n";
 | 
			
		||||
@@ -1573,7 +1766,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";
 | 
			
		||||
@@ -1635,6 +1830,9 @@ open(OUT,'>crypto/opensslconf.h.new') || die "unable to create crypto/opensslcon
 | 
			
		||||
print OUT "/* opensslconf.h */\n";
 | 
			
		||||
print OUT "/* WARNING: Generated automatically from opensslconf.h.in by Configure. */\n\n";
 | 
			
		||||
 | 
			
		||||
print OUT "#ifdef  __cplusplus\n";
 | 
			
		||||
print OUT "extern \"C\" {\n";
 | 
			
		||||
print OUT "#endif\n";
 | 
			
		||||
print OUT "/* OpenSSL was configured with the following options: */\n";
 | 
			
		||||
my $openssl_algorithm_defines_trans = $openssl_algorithm_defines;
 | 
			
		||||
$openssl_experimental_defines =~ s/^\s*#\s*define\s+OPENSSL_NO_(.*)/#ifndef OPENSSL_EXPERIMENTAL_$1\n# ifndef OPENSSL_NO_$1\n#  define OPENSSL_NO_$1\n# endif\n#endif/mg;
 | 
			
		||||
@@ -1739,6 +1937,9 @@ while (<IN>)
 | 
			
		||||
		{ print OUT $_; }
 | 
			
		||||
	}
 | 
			
		||||
close(IN);
 | 
			
		||||
print OUT "#ifdef  __cplusplus\n";
 | 
			
		||||
print OUT "}\n";
 | 
			
		||||
print OUT "#endif\n";
 | 
			
		||||
close(OUT);
 | 
			
		||||
rename("crypto/opensslconf.h","crypto/opensslconf.h.bak") || die "unable to rename crypto/opensslconf.h\n" if -e "crypto/opensslconf.h";
 | 
			
		||||
rename("crypto/opensslconf.h.new","crypto/opensslconf.h") || die "unable to rename crypto/opensslconf.h.new\n";
 | 
			
		||||
@@ -1789,11 +1990,11 @@ EOF
 | 
			
		||||
	(system $make_command.$make_targets) == 0 or exit $?
 | 
			
		||||
		if $make_targets ne "";
 | 
			
		||||
	if ( $perl =~ m@^/@) {
 | 
			
		||||
	    &dofile("tools/c_rehash",$perl,'^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";');
 | 
			
		||||
	    &dofile("tools/c_rehash",$perl,'^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";', '^my \$prefix;$', 'my $prefix = "' . $prefix . '";');
 | 
			
		||||
	    &dofile("apps/CA.pl",$perl,'^#!/', '#!%s');
 | 
			
		||||
	} else {
 | 
			
		||||
	    # No path for Perl known ...
 | 
			
		||||
	    &dofile("tools/c_rehash",'/usr/local/bin/perl','^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";');
 | 
			
		||||
	    &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) {
 | 
			
		||||
@@ -1854,7 +2055,7 @@ BEGIN
 | 
			
		||||
	    VALUE "ProductVersion", "$version\\0"
 | 
			
		||||
	    // Optional:
 | 
			
		||||
	    //VALUE "Comments", "\\0"
 | 
			
		||||
	    VALUE "LegalCopyright", "Copyright <20> 1998-2005 The OpenSSL Project. Copyright <20> 1995-1998 Eric A. Young, Tim J. Hudson. All rights reserved.\\0"
 | 
			
		||||
	    VALUE "LegalCopyright", "Copyright  <EFBFBD> 1998-2005 The OpenSSL Project. Copyright <20> 1995-1998 Eric A. Young, Tim J. Hudson. All rights reserved.\\0"
 | 
			
		||||
	    //VALUE "LegalTrademarks", "\\0"
 | 
			
		||||
	    //VALUE "PrivateBuild", "\\0"
 | 
			
		||||
	    //VALUE "SpecialBuild", "\\0"
 | 
			
		||||
@@ -1963,11 +2164,12 @@ sub print_table_entry
 | 
			
		||||
	{
 | 
			
		||||
	my $target = shift;
 | 
			
		||||
 | 
			
		||||
	(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 $shared_ldflag,my $shared_extension,my $ranlib,my $arflags,my $multilib)=
 | 
			
		||||
	my ($cc, $cflags, $unistd, $thread_cflag, $sys_id, $lflags,
 | 
			
		||||
	    $bn_ops, $cpuid_obj, $bn_obj, $ec_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,
 | 
			
		||||
	    $perlasm_scheme, $dso_scheme, $shared_target, $shared_cflag,
 | 
			
		||||
	    $shared_ldflag, $shared_extension, $ranlib, $arflags, $multilib)=
 | 
			
		||||
	split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
 | 
			
		||||
			
 | 
			
		||||
	print <<EOF
 | 
			
		||||
@@ -1982,6 +2184,7 @@ sub print_table_entry
 | 
			
		||||
\$bn_ops       = $bn_ops
 | 
			
		||||
\$cpuid_obj    = $cpuid_obj
 | 
			
		||||
\$bn_obj       = $bn_obj
 | 
			
		||||
\$ec_obj       = $ec_obj
 | 
			
		||||
\$des_obj      = $des_obj
 | 
			
		||||
\$aes_obj      = $aes_obj
 | 
			
		||||
\$bf_obj       = $bf_obj
 | 
			
		||||
@@ -1993,6 +2196,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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										123
									
								
								FAQ
									
									
									
									
									
								
							
							
						
						
									
										123
									
								
								FAQ
									
									
									
									
									
								
							@@ -10,6 +10,7 @@ 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
 | 
			
		||||
 | 
			
		||||
@@ -52,6 +53,9 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* Why does the OpenSSL test suite fail in sha512t on x86 CPU?
 | 
			
		||||
* Why does compiler fail to compile sha512.c?
 | 
			
		||||
* Test suite still fails, what to do?
 | 
			
		||||
* I think I've found a bug, what should I do?
 | 
			
		||||
* I'm SURE I've found a bug, how do I report it?
 | 
			
		||||
* I've found a security issue, how do I report it?
 | 
			
		||||
 | 
			
		||||
[PROG] Questions about programming with OpenSSL
 | 
			
		||||
 | 
			
		||||
@@ -79,11 +83,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.0 was released on Mar 29th, 2010.
 | 
			
		||||
OpenSSL 1.0.1a was released on Apr 19th, 2012.
 | 
			
		||||
 | 
			
		||||
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 CVS access.
 | 
			
		||||
ftp://ftp.openssl.org/snapshot/>, or get it by anonymous Git access.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Where is the documentation?
 | 
			
		||||
@@ -105,12 +109,9 @@ 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.
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
that came with the version of OpenSSL you are using. The pod format
 | 
			
		||||
documentation is included in each OpenSSL distribution under the docs
 | 
			
		||||
directory.
 | 
			
		||||
 | 
			
		||||
There is some documentation about certificate extensions and PKCS#12
 | 
			
		||||
in doc/openssl.txt
 | 
			
		||||
@@ -131,7 +132,7 @@ OpenSSL.  Information on the OpenSSL mailing lists is available from
 | 
			
		||||
* Where can I get a compiled version of OpenSSL?
 | 
			
		||||
 | 
			
		||||
You can finder pointers to binary distributions in
 | 
			
		||||
http://www.openssl.org/related/binaries.html .
 | 
			
		||||
<URL: http://www.openssl.org/related/binaries.html> .
 | 
			
		||||
 | 
			
		||||
Some applications that use OpenSSL are distributed in binary form.
 | 
			
		||||
When using such an application, you don't need to install OpenSSL
 | 
			
		||||
@@ -170,14 +171,31 @@ 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.
 | 
			
		||||
 | 
			
		||||
* What happens when the letter release reaches z?
 | 
			
		||||
 | 
			
		||||
It was decided after the release of OpenSSL 0.9.8y the next version should
 | 
			
		||||
be 0.9.8za then 0.9.8zb and so on.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[LEGAL] =======================================================================
 | 
			
		||||
 | 
			
		||||
* Do I need patent licenses to use OpenSSL?
 | 
			
		||||
 | 
			
		||||
The patents section of the README file lists patents that may apply to
 | 
			
		||||
you if you want to use OpenSSL.  For information on intellectual
 | 
			
		||||
property rights, please consult a lawyer.  The OpenSSL team does not
 | 
			
		||||
offer legal advice.
 | 
			
		||||
For information on intellectual property rights, please consult a lawyer.
 | 
			
		||||
The OpenSSL team does not offer legal advice.
 | 
			
		||||
 | 
			
		||||
You can configure OpenSSL so as not to use IDEA, MDC2 and RC5 by using
 | 
			
		||||
 ./config no-idea no-mdc2 no-rc5
 | 
			
		||||
@@ -281,7 +299,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 (currently in doc/openssl.txt).
 | 
			
		||||
extensions documentation (in ca(1), req(1), x509v3_config(5) )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why can't I create certificate requests?
 | 
			
		||||
@@ -463,7 +481,7 @@ administrators.
 | 
			
		||||
Other projects do have other policies so you can for example extract the CA
 | 
			
		||||
bundle used by Mozilla and/or modssl as described in this article:
 | 
			
		||||
 | 
			
		||||
  http://www.mail-archive.com/modssl-users@modssl.org/msg16980.html
 | 
			
		||||
  <URL: http://www.mail-archive.com/modssl-users@modssl.org/msg16980.html>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[BUILD] =======================================================================
 | 
			
		||||
@@ -505,7 +523,7 @@ when you run the test suite (using "make test").  The message returned is
 | 
			
		||||
"bc: 1 not implemented".
 | 
			
		||||
 | 
			
		||||
The best way to deal with this is to find another implementation of bc
 | 
			
		||||
and compile/install it.  GNU bc (see http://www.gnu.org/software/software.html
 | 
			
		||||
and compile/install it.  GNU bc (see <URL: http://www.gnu.org/software/software.html>
 | 
			
		||||
for download instructions) can be safely used, for example.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -516,7 +534,7 @@ that the OpenSSL bntest throws at it.  This gets triggered when you run the
 | 
			
		||||
test suite (using "make test").  The message returned is "bc: stack empty".
 | 
			
		||||
 | 
			
		||||
The best way to deal with this is to find another implementation of bc
 | 
			
		||||
and compile/install it.  GNU bc (see http://www.gnu.org/software/software.html
 | 
			
		||||
and compile/install it.  GNU bc (see <URL: http://www.gnu.org/software/software.html>
 | 
			
		||||
for download instructions) can be safely used, for example.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -594,8 +612,8 @@ valid for the current DOS session.
 | 
			
		||||
* What is special about OpenSSL on Redhat?
 | 
			
		||||
 | 
			
		||||
Red Hat Linux (release 7.0 and later) include a preinstalled limited
 | 
			
		||||
version of OpenSSL. For patent reasons, support for IDEA, RC5 and MDC2
 | 
			
		||||
is disabled in this version. The same may apply to other Linux distributions.
 | 
			
		||||
version of OpenSSL. Red Hat has chosen to disable support for IDEA, RC5 and
 | 
			
		||||
MDC2 in this version. The same may apply to other Linux distributions.
 | 
			
		||||
Users may therefore wish to install more or all of the features left out.
 | 
			
		||||
 | 
			
		||||
To do this you MUST ensure that you do not overwrite the openssl that is in
 | 
			
		||||
@@ -618,11 +636,6 @@ relevant updates in packages up to and including 0.9.6b.
 | 
			
		||||
A possible way around this is to persuade Red Hat to produce a non-US
 | 
			
		||||
version of Red Hat Linux.
 | 
			
		||||
 | 
			
		||||
FYI: Patent numbers and expiry dates of US patents:
 | 
			
		||||
MDC-2: 4,908,861 13/03/2007
 | 
			
		||||
IDEA:  5,214,703 25/05/2010
 | 
			
		||||
RC5:   5,724,428 03/03/2015
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does the OpenSSL compilation fail on MacOS X?
 | 
			
		||||
 | 
			
		||||
@@ -709,6 +722,49 @@ never make sense, and tend to emerge when you least expect them. In order
 | 
			
		||||
to identify one, drop optimization level, e.g. by editing CFLAG line in
 | 
			
		||||
top-level Makefile, recompile and re-run the test.
 | 
			
		||||
 | 
			
		||||
* I think I've found a bug, what should I do?
 | 
			
		||||
 | 
			
		||||
If you are a new user then it is quite likely you haven't found a bug and
 | 
			
		||||
something is happening you aren't familiar with. Check this FAQ, the associated
 | 
			
		||||
documentation and the mailing lists for similar queries. If you are still
 | 
			
		||||
unsure whether it is a bug or not submit a query to the openssl-users mailing
 | 
			
		||||
list.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* I'm SURE I've found a bug, how do I report it?
 | 
			
		||||
 | 
			
		||||
Bug reports with no security implications should be sent to the request
 | 
			
		||||
tracker. This can be done by mailing the report to <rt@openssl.org> (or its
 | 
			
		||||
alias <openssl-bugs@openssl.org>), please note that messages sent to the
 | 
			
		||||
request tracker also appear in the public openssl-dev mailing list.
 | 
			
		||||
 | 
			
		||||
The report should be in plain text. Any patches should be sent as
 | 
			
		||||
plain text attachments because some mailers corrupt patches sent inline.
 | 
			
		||||
If your issue affects multiple versions of OpenSSL check any patches apply
 | 
			
		||||
cleanly and, if possible include patches to each affected version.
 | 
			
		||||
 | 
			
		||||
The report should be given a meaningful subject line briefly summarising the
 | 
			
		||||
issue. Just "bug in OpenSSL" or "bug in OpenSSL 0.9.8n" is not very helpful.
 | 
			
		||||
 | 
			
		||||
By sending reports to the request tracker the bug can then be given a priority
 | 
			
		||||
and assigned to the appropriate maintainer. The history of discussions can be
 | 
			
		||||
accessed and if the issue has been addressed or a reason why not. If patches
 | 
			
		||||
are only sent to openssl-dev they can be mislaid if a team member has to
 | 
			
		||||
wade through months of old messages to review the discussion.
 | 
			
		||||
 | 
			
		||||
See also <URL: http://www.openssl.org/support/rt.html>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* I've found a security issue, how do I report it?
 | 
			
		||||
 | 
			
		||||
If you think your bug has security implications then please send it to
 | 
			
		||||
openssl-security@openssl.org if you don't get a prompt reply at least 
 | 
			
		||||
acknowledging receipt then resend or mail it directly to one of the
 | 
			
		||||
more active team members (e.g. Steve).
 | 
			
		||||
 | 
			
		||||
Note that bugs only present in the openssl utility are not in general
 | 
			
		||||
considered to be security issues. 
 | 
			
		||||
 | 
			
		||||
[PROG] ========================================================================
 | 
			
		||||
 | 
			
		||||
* Is OpenSSL thread-safe?
 | 
			
		||||
@@ -722,7 +778,7 @@ file.
 | 
			
		||||
Multi-threaded applications must provide two callback functions to
 | 
			
		||||
OpenSSL by calling CRYPTO_set_locking_callback() and
 | 
			
		||||
CRYPTO_set_id_callback(), for all versions of OpenSSL up to and
 | 
			
		||||
including 0.9.8[abc...]. As of version 0.9.9, CRYPTO_set_id_callback()
 | 
			
		||||
including 0.9.8[abc...]. As of version 1.0.0, CRYPTO_set_id_callback()
 | 
			
		||||
and associated APIs are deprecated by CRYPTO_THREADID_set_callback()
 | 
			
		||||
and friends. This is described in the threads(3) manpage.
 | 
			
		||||
 | 
			
		||||
@@ -805,7 +861,7 @@ The opposite assumes we already have len bytes in buf:
 | 
			
		||||
 p = buf;
 | 
			
		||||
 p7 = d2i_PKCS7(NULL, &p, len);
 | 
			
		||||
 | 
			
		||||
At this point p7 contains a valid PKCS7 structure of NULL if an error
 | 
			
		||||
At this point p7 contains a valid PKCS7 structure or NULL if an error
 | 
			
		||||
occurred. If an error occurred ERR_print_errors(bio) should give more
 | 
			
		||||
information.
 | 
			
		||||
 | 
			
		||||
@@ -817,6 +873,21 @@ that has been read or written. This may well be uninitialized data
 | 
			
		||||
and attempts to free the buffer will have unpredictable results
 | 
			
		||||
because it no longer points to the same address.
 | 
			
		||||
 | 
			
		||||
Memory allocation and encoding can also be combined in a single
 | 
			
		||||
operation by the ASN1 routines:
 | 
			
		||||
 | 
			
		||||
 unsigned char *buf = NULL;	/* mandatory */
 | 
			
		||||
 int len;
 | 
			
		||||
 len = i2d_PKCS7(p7, &buf);
 | 
			
		||||
 if (len < 0)
 | 
			
		||||
	/* Error */
 | 
			
		||||
 /* Do some things with 'buf' */
 | 
			
		||||
 /* Finished with buf: free it */
 | 
			
		||||
 OPENSSL_free(buf);
 | 
			
		||||
 | 
			
		||||
In this special case the "buf" parameter is *not* incremented, it points
 | 
			
		||||
to the start of the encoding.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* OpenSSL uses DER but I need BER format: does OpenSSL support BER?
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								GitConfigure
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								GitConfigure
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
BRANCH=`git rev-parse --abbrev-ref HEAD`
 | 
			
		||||
 | 
			
		||||
./Configure $@ no-symlinks
 | 
			
		||||
make files
 | 
			
		||||
util/mk1mf.pl OUT=out.$BRANCH TMP=tmp.$BRANCH INC=inc.$BRANCH copy > makefile.$BRANCH
 | 
			
		||||
make -f makefile.$BRANCH init
 | 
			
		||||
							
								
								
									
										5
									
								
								GitMake
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								GitMake
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
BRANCH=`git rev-parse --abbrev-ref HEAD`
 | 
			
		||||
 | 
			
		||||
make -f makefile.$BRANCH $@
 | 
			
		||||
							
								
								
									
										52
									
								
								INSTALL.VMS
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								INSTALL.VMS
									
									
									
									
									
								
							@@ -71,7 +71,7 @@ the top to understand how to use them.  However, if you want to
 | 
			
		||||
compile all you can get, the simplest is to use MAKEVMS.COM in the top
 | 
			
		||||
directory.  The syntax is the following:
 | 
			
		||||
 | 
			
		||||
  @MAKEVMS <option> <rsaref-p> <debug-p> [<compiler>]
 | 
			
		||||
  @MAKEVMS <option> <bits> <debug-p> [<compiler>]
 | 
			
		||||
 | 
			
		||||
<option> must be one of the following:
 | 
			
		||||
 | 
			
		||||
@@ -87,24 +87,11 @@ directory.  The syntax is the following:
 | 
			
		||||
      TEST      Just build the "[.xxx.EXE.TEST]" test programs for OpenSSL.
 | 
			
		||||
      APPS      Just build the "[.xxx.EXE.APPS]" application programs for OpenSSL.
 | 
			
		||||
 | 
			
		||||
<rsaref-p> must be one of the following:
 | 
			
		||||
<bits> must be one of the following:
 | 
			
		||||
 | 
			
		||||
      RSAREF    compile using the RSAREF Library
 | 
			
		||||
      NORSAREF  compile without using RSAREF
 | 
			
		||||
 | 
			
		||||
Note 0: The RSAREF library IS NO LONGER NEEDED.  The RSA patent
 | 
			
		||||
        expires September 20, 2000, and RSA Security chose to make
 | 
			
		||||
        the algorithm public domain two weeks before that.
 | 
			
		||||
 | 
			
		||||
Note 1: If you still want to use RSAREF, the library is NOT INCLUDED
 | 
			
		||||
        and you have to download it.  RSA Security doesn't carry it
 | 
			
		||||
        any more, but there are a number of places where you can find
 | 
			
		||||
        it.  You have to get the ".tar-Z" file as the ".zip" file
 | 
			
		||||
        doesn't have the directory structure stored.  You have to
 | 
			
		||||
        extract the file into the [.RSAREF] directory as that is where
 | 
			
		||||
        the scripts will look for the files.
 | 
			
		||||
 | 
			
		||||
Note 2: I have never done this, so I've no idea if it works or not.
 | 
			
		||||
      ""        compile using default pointer size
 | 
			
		||||
      32        compile using 32 bit pointer size
 | 
			
		||||
      64        compile using 64 bit pointer size
 | 
			
		||||
 | 
			
		||||
<debug-p> must be one of the following:
 | 
			
		||||
 | 
			
		||||
@@ -117,12 +104,13 @@ Note 2: I have never done this, so I've no idea if it works or not.
 | 
			
		||||
      GNUC      For GNU C.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
You will find the crypto library in [.xxx.EXE.CRYPTO], called LIBCRYPTO.OLB,
 | 
			
		||||
where xxx is VAX or AXP.  You will find the SSL library in [.xxx.EXE.SSL],
 | 
			
		||||
named LIBSSL.OLB, and you will find a bunch of useful programs in
 | 
			
		||||
[.xxx.EXE.APPS].  However, these shouldn't be used right off unless it's
 | 
			
		||||
just to test them.  For production use, make sure you install first, see
 | 
			
		||||
Installation below.
 | 
			
		||||
You will find the crypto library in [.xxx.EXE.CRYPTO] (where xxx is VAX,
 | 
			
		||||
ALPHA or IA64), called SSL_LIBCRYPTO32.OLB or SSL_LIBCRYPTO.OLB depending
 | 
			
		||||
on how it was built.  You will find the SSL library in [.xxx.EXE.SSL],
 | 
			
		||||
named SSL_LIBSSL32.OLB or SSL_LIBSSL.OLB, and you will find a bunch of
 | 
			
		||||
useful programs in [.xxx.EXE.APPS].  However, these shouldn't be used
 | 
			
		||||
right off unless it's just to test them.  For production use, make sure
 | 
			
		||||
you install first, see Installation below.
 | 
			
		||||
 | 
			
		||||
Note 1: Some programs in this package require a TCP/IP library.
 | 
			
		||||
 | 
			
		||||
@@ -170,12 +158,14 @@ Installation:
 | 
			
		||||
 | 
			
		||||
Installation is easy, just do the following:
 | 
			
		||||
 | 
			
		||||
  @INSTALL <root>
 | 
			
		||||
  @INSTALL <root> <bits>
 | 
			
		||||
 | 
			
		||||
<root> is the directory in which everything will be installed,
 | 
			
		||||
subdirectories, libraries, header files, programs and startup command
 | 
			
		||||
procedures.
 | 
			
		||||
 | 
			
		||||
<bits> works the same way as for MAKEVMS.COM
 | 
			
		||||
 | 
			
		||||
N.B.: INSTALL.COM builds a new directory structure, different from
 | 
			
		||||
the directory tree where you have now build OpenSSL.
 | 
			
		||||
 | 
			
		||||
@@ -196,6 +186,10 @@ following command procedures:
 | 
			
		||||
        sets up the symbols to the applications.  Should be called
 | 
			
		||||
        from for example SYS$MANAGER:SYLOGIN.COM 
 | 
			
		||||
 | 
			
		||||
  OPENSSL_UNDO.COM
 | 
			
		||||
 | 
			
		||||
	deassigns the logical names created with OPENSSL_STARTUP.COM.
 | 
			
		||||
 | 
			
		||||
The logical names that are set up are the following:
 | 
			
		||||
 | 
			
		||||
  SSLROOT       a dotted concealed logical name pointing at the
 | 
			
		||||
@@ -203,7 +197,6 @@ The logical names that are set up are the following:
 | 
			
		||||
 | 
			
		||||
  SSLCERTS      Initially an empty directory, this is the default
 | 
			
		||||
		location for certificate files.
 | 
			
		||||
  SSLMISC	Various scripts.
 | 
			
		||||
  SSLPRIVATE	Initially an empty directory, this is the default
 | 
			
		||||
		location for private key files.
 | 
			
		||||
 | 
			
		||||
@@ -211,8 +204,9 @@ The logical names that are set up are the following:
 | 
			
		||||
		programs.
 | 
			
		||||
  SSLINCLUDE    Contains the header files needed if you want to
 | 
			
		||||
		compile programs with libcrypto or libssl.
 | 
			
		||||
  SSLLIB        Contains the OpenSSL library files (LIBCRYPTO.OLB
 | 
			
		||||
		and LIBSSL.OLB) themselves.
 | 
			
		||||
  SSLLIB        Contains the OpenSSL library files themselves:
 | 
			
		||||
  		- SSL_LIBCRYPTO32.OLB and SSL_LIBSSL32.OLB or
 | 
			
		||||
		- SSL_LIBCRYPTO.OLB and SSL_LIBSSL.OLB
 | 
			
		||||
 | 
			
		||||
  OPENSSL	Same as SSLINCLUDE.  This is because the standard
 | 
			
		||||
		way to include OpenSSL header files from version
 | 
			
		||||
@@ -296,4 +290,4 @@ have any ideas.
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
Richard Levitte <richard@levitte.org>
 | 
			
		||||
2000-02-27
 | 
			
		||||
2000-02-27, 2011-03-18
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								INSTALL.W32
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								INSTALL.W32
									
									
									
									
									
								
							@@ -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 CVS snapshot then the Win32 files
 | 
			
		||||
 If you are compiling from a tarball or a Git snapshot then the Win32 files
 | 
			
		||||
 may well be not up to date. This may mean that some "tweaking" is required to
 | 
			
		||||
 get it all to work. See the trouble shooting section later on for if (when?)
 | 
			
		||||
 it goes wrong.
 | 
			
		||||
@@ -185,6 +185,15 @@
 | 
			
		||||
   required. Run the installers and do whatever magic they say it takes
 | 
			
		||||
   to start MSYS bash shell with GNU tools on its PATH.
 | 
			
		||||
 | 
			
		||||
   N.B. Since source tar-ball can contain symbolic links, it's essential
 | 
			
		||||
   that you use accompanying MSYS tar to unpack the source. It will
 | 
			
		||||
   either handle them in one way or another or fail to extract them,
 | 
			
		||||
   which does the trick too. Latter means that you may safely ignore all
 | 
			
		||||
   "cannot create symlink" messages, as they will be "re-created" at
 | 
			
		||||
   configure stage by copying corresponding files. Alternative programs
 | 
			
		||||
   were observed to create empty files instead, which results in build
 | 
			
		||||
   failure.
 | 
			
		||||
 | 
			
		||||
 * Compile OpenSSL:
 | 
			
		||||
 | 
			
		||||
   $ ./config
 | 
			
		||||
@@ -248,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 CVS tree: so anything linked against this version of the
 | 
			
		||||
 assigned in the Git tree: so anything linked against this version of the
 | 
			
		||||
 library may need to be recompiled.
 | 
			
		||||
 | 
			
		||||
 If you get errors about unresolved symbols there are several possible
 | 
			
		||||
@@ -297,7 +306,18 @@
 | 
			
		||||
 desktop, which is not available to service processes. The toolkit is
 | 
			
		||||
 designed to detect in which context it's currently executed, GUI,
 | 
			
		||||
 console app or service, and act accordingly, namely whether or not to
 | 
			
		||||
 actually make GUI calls.
 | 
			
		||||
 actually make GUI calls. Additionally those who wish to
 | 
			
		||||
 /DELAYLOAD:GDI32.DLL and /DELAYLOAD:USER32.DLL and actually keep them
 | 
			
		||||
 off service process should consider implementing and exporting from
 | 
			
		||||
 .exe image in question own _OPENSSL_isservice not relying on USER32.DLL.
 | 
			
		||||
 E.g., on Windows Vista and later you could:
 | 
			
		||||
 | 
			
		||||
	__declspec(dllexport) __cdecl BOOL _OPENSSL_isservice(void)
 | 
			
		||||
	{   DWORD sess;
 | 
			
		||||
	    if (ProcessIdToSessionId(GetCurrentProcessId(),&sess))
 | 
			
		||||
	        return sess==0;
 | 
			
		||||
	    return FALSE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 If you link with OpenSSL .DLLs, then you're expected to include into
 | 
			
		||||
 your application code small "shim" snippet, which provides glue between
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							@@ -12,7 +12,7 @@
 | 
			
		||||
  ---------------
 | 
			
		||||
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1998-2008 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 
 | 
			
		||||
@@ -5,97 +5,98 @@
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
	kMacSocket_TimeoutErr = -2
 | 
			
		||||
enum {
 | 
			
		||||
    kMacSocket_TimeoutErr = -2
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Since MacSocket does busy waiting, I do a callback while waiting
 | 
			
		||||
 | 
			
		||||
//	Since MacSocket does busy waiting, I do a callback while waiting
 | 
			
		||||
typedef OSErr(*MacSocket_IdleWaitCallback) (void *);
 | 
			
		||||
 | 
			
		||||
typedef OSErr (*MacSocket_IdleWaitCallback)(void *);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//	Call this before anything else!
 | 
			
		||||
// Call this before anything else!
 | 
			
		||||
 | 
			
		||||
OSErr MacSocket_Startup(void);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//	Call this to cleanup before quitting
 | 
			
		||||
// 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
 | 
			
		||||
 | 
			
		||||
//	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);
 | 
			
		||||
 | 
			
		||||
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 connect to an IP/DNS address
 | 
			
		||||
//	Note that inTargetAddressAndPort is in "IP:port" format-- e.g. 10.1.1.1:123
 | 
			
		||||
// 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_connect(const int inSocketNum,char *inTargetAddressAndPort);
 | 
			
		||||
OSErr MacSocket_listen(const int inSocketNum, const int inPortNum);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//	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
 | 
			
		||||
// 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
 | 
			
		||||
 | 
			
		||||
//	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);
 | 
			
		||||
 | 
			
		||||
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);
 | 
			
		||||
 | 
			
		||||
//	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
 | 
			
		||||
// 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()
 | 
			
		||||
// 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
 | 
			
		||||
// 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
 | 
			
		||||
 | 
			
		||||
//	You may wish to change the userRefPtr for a socket callback-- use this to do it
 | 
			
		||||
void MacSocket_SetUserRefPtr(const int inSocketNum, void *inNewRefPtr);
 | 
			
		||||
 | 
			
		||||
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 these to get the socket's IP:port descriptor
 | 
			
		||||
// Call this to get error info from a socket
 | 
			
		||||
 | 
			
		||||
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);
 | 
			
		||||
void MacSocket_GetSocketErrorInfo(const int inSocketNum,
 | 
			
		||||
                                  int *outSocketErrCode,
 | 
			
		||||
                                  char *outSocketErrString,
 | 
			
		||||
                                  const int inSocketErrStringMaxLength);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 
 | 
			
		||||
@@ -1,43 +1,42 @@
 | 
			
		||||
 | 
			
		||||
//	Gathers unpredictable system data to be used for generating
 | 
			
		||||
//	random bits
 | 
			
		||||
// Gathers unpredictable system data to be used for generating
 | 
			
		||||
// random bits
 | 
			
		||||
 | 
			
		||||
#include <MacTypes.h>
 | 
			
		||||
 | 
			
		||||
class CRandomizer
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	CRandomizer (void);
 | 
			
		||||
	void PeriodicAction (void);
 | 
			
		||||
	
 | 
			
		||||
private:
 | 
			
		||||
class CRandomizer {
 | 
			
		||||
 public:
 | 
			
		||||
    CRandomizer(void);
 | 
			
		||||
    void PeriodicAction(void);
 | 
			
		||||
 | 
			
		||||
	// Private calls
 | 
			
		||||
 private:
 | 
			
		||||
 | 
			
		||||
	void		AddTimeSinceMachineStartup (void);
 | 
			
		||||
	void		AddAbsoluteSystemStartupTime (void);
 | 
			
		||||
	void		AddAppRunningTime (void);
 | 
			
		||||
	void		AddStartupVolumeInfo (void);
 | 
			
		||||
	void		AddFiller (void);
 | 
			
		||||
    // Private calls
 | 
			
		||||
 | 
			
		||||
	void		AddCurrentMouse (void);
 | 
			
		||||
	void		AddNow (double millisecondUncertainty);
 | 
			
		||||
	void		AddBytes (void *data, long size, double entropy);
 | 
			
		||||
	
 | 
			
		||||
	void		GetTimeBaseResolution (void);
 | 
			
		||||
	unsigned long	SysTimer (void);
 | 
			
		||||
    void AddTimeSinceMachineStartup(void);
 | 
			
		||||
    void AddAbsoluteSystemStartupTime(void);
 | 
			
		||||
    void AddAppRunningTime(void);
 | 
			
		||||
    void AddStartupVolumeInfo(void);
 | 
			
		||||
    void AddFiller(void);
 | 
			
		||||
 | 
			
		||||
	// System Info	
 | 
			
		||||
	bool		mSupportsLargeVolumes;
 | 
			
		||||
	bool		mIsPowerPC;
 | 
			
		||||
	bool		mIs601;
 | 
			
		||||
	
 | 
			
		||||
	// Time info
 | 
			
		||||
	double		mTimebaseTicksPerMillisec;
 | 
			
		||||
	unsigned long	mLastPeriodicTicks;
 | 
			
		||||
	
 | 
			
		||||
	// Mouse info
 | 
			
		||||
	long		mSamplePeriod;
 | 
			
		||||
	Point		mLastMouse;
 | 
			
		||||
	long		mMouseStill;
 | 
			
		||||
    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;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
#include <MacHeaders.h>
 | 
			
		||||
#define B_ENDIAN
 | 
			
		||||
#ifdef __POWERPC__
 | 
			
		||||
#pragma longlong on
 | 
			
		||||
# pragma longlong on
 | 
			
		||||
#endif
 | 
			
		||||
#if 1
 | 
			
		||||
#define MAC_OS_GUSI_SOURCE
 | 
			
		||||
# define MAC_OS_GUSI_SOURCE
 | 
			
		||||
#endif
 | 
			
		||||
#define MONOLITH
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
#include <MacHeaders.h>
 | 
			
		||||
#define B_ENDIAN
 | 
			
		||||
#ifdef __POWERPC__
 | 
			
		||||
#pragma longlong on
 | 
			
		||||
# pragma longlong on
 | 
			
		||||
#endif
 | 
			
		||||
#if 0
 | 
			
		||||
#define MAC_OS_GUSI_SOURCE
 | 
			
		||||
# define MAC_OS_GUSI_SOURCE
 | 
			
		||||
#endif
 | 
			
		||||
#define MONOLITH
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
#ifndef MK1MF_BUILD
 | 
			
		||||
#  define CFLAGS	"-DB_ENDIAN"
 | 
			
		||||
#  define PLATFORM	"macos"
 | 
			
		||||
#  define DATE		"Sun Feb 27 19:44:16 MET 2000"
 | 
			
		||||
# define CFLAGS        "-DB_ENDIAN"
 | 
			
		||||
# define PLATFORM      "macos"
 | 
			
		||||
# define DATE          "Sun Feb 27 19:44:16 MET 2000"
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -1,116 +1,126 @@
 | 
			
		||||
/* MacOS/opensslconf.h */
 | 
			
		||||
 | 
			
		||||
#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
 | 
			
		||||
#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
 | 
			
		||||
#define OPENSSLDIR "/usr/local/ssl"
 | 
			
		||||
#endif
 | 
			
		||||
# 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
 | 
			
		||||
# define IDEA_INT unsigned int
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_MD2_H) && !defined(MD2_INT)
 | 
			
		||||
#define MD2_INT unsigned 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
 | 
			
		||||
# 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. */
 | 
			
		||||
# 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)
 | 
			
		||||
#  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
 | 
			
		||||
#  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
 | 
			
		||||
/*
 | 
			
		||||
 * 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 CONFIG_HEADER_BN_H
 | 
			
		||||
# if __option(longlong)
 | 
			
		||||
#  define BN_LLONG
 | 
			
		||||
#else
 | 
			
		||||
# else
 | 
			
		||||
#  undef BN_LLONG
 | 
			
		||||
#endif
 | 
			
		||||
# 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
 | 
			
		||||
/*
 | 
			
		||||
 * 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
 | 
			
		||||
# 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 */
 | 
			
		||||
# 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
 | 
			
		||||
# 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
 | 
			
		||||
/*
 | 
			
		||||
 * 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
 | 
			
		||||
 * 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 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
 | 
			
		||||
# define MD32_XARRAY
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										98
									
								
								Makefile.org
									
									
									
									
									
								
							
							
						
						
									
										98
									
								
								Makefile.org
									
									
									
									
									
								
							@@ -88,6 +88,7 @@ PROCESSOR=
 | 
			
		||||
# CPUID module collects small commonly used assembler snippets
 | 
			
		||||
CPUID_OBJ= 
 | 
			
		||||
BN_ASM= bn_asm.o
 | 
			
		||||
EC_ASM=
 | 
			
		||||
DES_ENC= des_enc.o fcrypt_b.o
 | 
			
		||||
AES_ENC= aes_core.o aes_cbc.o
 | 
			
		||||
BF_ENC= bf_enc.o
 | 
			
		||||
@@ -99,6 +100,8 @@ SHA1_ASM_OBJ=
 | 
			
		||||
RMD160_ASM_OBJ= 
 | 
			
		||||
WP_ASM_OBJ=
 | 
			
		||||
CMLL_ENC=
 | 
			
		||||
MODES_ASM_OBJ=
 | 
			
		||||
ENGINES_ASM_OBJ=
 | 
			
		||||
PERLASM_SCHEME=
 | 
			
		||||
 | 
			
		||||
# KRB5 stuff
 | 
			
		||||
@@ -109,6 +112,30 @@ LIBKRB5=
 | 
			
		||||
ZLIB_INCLUDE=
 | 
			
		||||
LIBZLIB=
 | 
			
		||||
 | 
			
		||||
# TOP level FIPS install directory.
 | 
			
		||||
FIPSDIR=
 | 
			
		||||
 | 
			
		||||
# 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=
 | 
			
		||||
 | 
			
		||||
# 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 ssl engines apps test tools
 | 
			
		||||
ENGDIRS= ccgost
 | 
			
		||||
SHLIBDIRS= crypto ssl
 | 
			
		||||
@@ -121,7 +148,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,7 +199,7 @@ CLEARENV=	TOP= && unset TOP $${LIB+LIB} $${LIBS+LIBS}	\
 | 
			
		||||
		$${EXHEADER+EXHEADER} $${HEADER+HEADER}		\
 | 
			
		||||
		$${GENERAL+GENERAL} $${CFLAGS+CFLAGS}		\
 | 
			
		||||
		$${ASFLAGS+ASFLAGS} $${AFLAGS+AFLAGS}		\
 | 
			
		||||
		$${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS}		\
 | 
			
		||||
		$${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS} $${SCRIPTS+SCRIPTS}	\
 | 
			
		||||
		$${SHAREDCMD+SHAREDCMD} $${SHAREDFLAGS+SHAREDFLAGS}	\
 | 
			
		||||
		$${SHARED_LIB+SHARED_LIB} $${LIBEXTRAS+LIBEXTRAS}
 | 
			
		||||
 | 
			
		||||
@@ -195,8 +222,8 @@ BUILDENV=	PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
 | 
			
		||||
		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)' 	\
 | 
			
		||||
		CPUID_OBJ='$(CPUID_OBJ)' BN_ASM='$(BN_ASM)'	\
 | 
			
		||||
		EC_ASM='$(EC_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)'	\
 | 
			
		||||
@@ -204,7 +231,12 @@ 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}'			\
 | 
			
		||||
		FIPSDIR='${FIPSDIR}'				\
 | 
			
		||||
		FIPSCANLIB="$${FIPSCANLIB:-$(FIPSCANLIB)}"	\
 | 
			
		||||
		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.
 | 
			
		||||
@@ -258,9 +290,21 @@ all_testapps: build_libs build_testapps
 | 
			
		||||
build_testapps:
 | 
			
		||||
	@dir=crypto; target=testapps; $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
libcrypto$(SHLIB_EXT): libcrypto.a
 | 
			
		||||
fips_premain_dso$(EXE_EXT): libcrypto.a
 | 
			
		||||
	[ -z "$(FIPSCANLIB)" ] || $(CC) $(CFLAG) -Iinclude \
 | 
			
		||||
		-DFINGERPRINT_PREMAIN_DSO_LOAD -o $@  \
 | 
			
		||||
		$(FIPSLIBDIR)fips_premain.c $(FIPSLIBDIR)fipscanister.o \
 | 
			
		||||
		libcrypto.a $(EX_LIBS)
 | 
			
		||||
 | 
			
		||||
libcrypto$(SHLIB_EXT): libcrypto.a fips_premain_dso$(EXE_EXT)
 | 
			
		||||
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
			
		||||
		$(MAKE) SHLIBDIRS=crypto build-shared; \
 | 
			
		||||
		if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
 | 
			
		||||
			FIPSLD_LIBCRYPTO=libcrypto.a ; \
 | 
			
		||||
			FIPSLD_CC="$(CC)"; CC=$(FIPSDIR)/bin/fipsld; \
 | 
			
		||||
			export CC FIPSLD_CC FIPSLD_LIBCRYPTO; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		$(MAKE) -e SHLIBDIRS=crypto  CC="$${CC:-$(CC)}" build-shared && \
 | 
			
		||||
		(touch -c fips_premain_dso$(EXE_EXT) || :); \
 | 
			
		||||
	else \
 | 
			
		||||
		echo "There's no support for shared libraries on this platform" >&2; \
 | 
			
		||||
		exit 1; \
 | 
			
		||||
@@ -283,7 +327,7 @@ clean-shared:
 | 
			
		||||
			done; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
 | 
			
		||||
		if [ "$(PLATFORM)" = "Cygwin" ]; then \
 | 
			
		||||
		if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
 | 
			
		||||
			( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
 | 
			
		||||
		fi; \
 | 
			
		||||
	done
 | 
			
		||||
@@ -322,7 +366,8 @@ libcrypto.pc: Makefile
 | 
			
		||||
	    echo 'Description: OpenSSL cryptography library'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lcrypto $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lcrypto'; \
 | 
			
		||||
	    echo 'Libs.private: $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc
 | 
			
		||||
 | 
			
		||||
libssl.pc: Makefile
 | 
			
		||||
@@ -331,11 +376,12 @@ libssl.pc: Makefile
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
 | 
			
		||||
	    echo 'includedir=$${prefix}/include'; \
 | 
			
		||||
	    echo ''; \
 | 
			
		||||
	    echo 'Name: OpenSSL'; \
 | 
			
		||||
	    echo 'Name: OpenSSL-libssl'; \
 | 
			
		||||
	    echo 'Description: Secure Sockets Layer and cryptography libraries'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Requires.private: libcrypto'; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl'; \
 | 
			
		||||
	    echo 'Libs.private: $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
 | 
			
		||||
 | 
			
		||||
openssl.pc: Makefile
 | 
			
		||||
@@ -347,9 +393,7 @@ openssl.pc: Makefile
 | 
			
		||||
	    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
 | 
			
		||||
	    echo 'Requires: libssl libcrypto' ) > openssl.pc
 | 
			
		||||
 | 
			
		||||
Makefile: Makefile.org Configure config
 | 
			
		||||
	@echo "Makefile is older than Makefile.org, Configure or config."
 | 
			
		||||
@@ -357,7 +401,7 @@ Makefile: Makefile.org Configure config
 | 
			
		||||
	@false
 | 
			
		||||
 | 
			
		||||
libclean:
 | 
			
		||||
	rm -f *.map *.so *.so.* *.dll engines/*.so engines/*.dll *.a engines/*.a */lib */*/lib
 | 
			
		||||
	rm -f *.map *.so *.so.* *.dylib *.dll engines/*.so engines/*.dll engines/*.dylib *.a engines/*.a */lib */*/lib
 | 
			
		||||
 | 
			
		||||
clean:	libclean
 | 
			
		||||
	rm -f shlib/*.o *.o core a.out fluff rehash.time testlog make.log cctest cctest.c
 | 
			
		||||
@@ -399,7 +443,7 @@ rehash.time: certs apps
 | 
			
		||||
		[ -x "apps/openssl.exe" ] && OPENSSL="apps/openssl.exe" || :; \
 | 
			
		||||
		OPENSSL_DEBUG_MEMORY=on; \
 | 
			
		||||
		export OPENSSL OPENSSL_DEBUG_MEMORY; \
 | 
			
		||||
		$(PERL) tools/c_rehash certs) && \
 | 
			
		||||
		$(PERL) tools/c_rehash certs/demo) && \
 | 
			
		||||
		touch rehash.time; \
 | 
			
		||||
	else :; fi
 | 
			
		||||
 | 
			
		||||
@@ -424,9 +468,9 @@ tags:
 | 
			
		||||
	find . -name '[^.]*.[ch]' | xargs etags -a
 | 
			
		||||
 | 
			
		||||
errors:
 | 
			
		||||
	$(PERL) util/ck_errf.pl -strict */*.c */*/*.c
 | 
			
		||||
	$(PERL) util/mkerr.pl -recurse -write
 | 
			
		||||
	(cd engines; $(MAKE) PERL=$(PERL) errors)
 | 
			
		||||
	$(PERL) util/ck_errf.pl */*.c */*/*.c
 | 
			
		||||
 | 
			
		||||
stacks:
 | 
			
		||||
	$(PERL) util/mkstack.pl -write
 | 
			
		||||
@@ -509,7 +553,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; \
 | 
			
		||||
@@ -525,11 +569,7 @@ install_sw:
 | 
			
		||||
		do \
 | 
			
		||||
			if [ -f "$$i" -o -f "$$i.a" ]; then \
 | 
			
		||||
			(       echo installing $$i; \
 | 
			
		||||
				if [ "$(PLATFORM)" != "Cygwin" ]; then \
 | 
			
		||||
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
				else \
 | 
			
		||||
				if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
 | 
			
		||||
					c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \
 | 
			
		||||
					cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
 | 
			
		||||
					chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
 | 
			
		||||
@@ -537,6 +577,10 @@ install_sw:
 | 
			
		||||
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
				else \
 | 
			
		||||
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
				fi ); \
 | 
			
		||||
				if expr $(PLATFORM) : 'mingw' > /dev/null; then \
 | 
			
		||||
				(	case $$i in \
 | 
			
		||||
@@ -569,6 +613,10 @@ install_sw:
 | 
			
		||||
 | 
			
		||||
install_html_docs:
 | 
			
		||||
	here="`pwd`"; \
 | 
			
		||||
	filecase=; \
 | 
			
		||||
	case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*|darwin*-*-cc) \
 | 
			
		||||
		filecase=-i; \
 | 
			
		||||
	esac; \
 | 
			
		||||
	for subdir in apps crypto ssl; do \
 | 
			
		||||
		mkdir -p $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \
 | 
			
		||||
		for i in doc/$$subdir/*.pod; do \
 | 
			
		||||
@@ -597,9 +645,9 @@ install_docs:
 | 
			
		||||
	@pod2man="`cd ./util; ./pod2mantest $(PERL)`"; \
 | 
			
		||||
	here="`pwd`"; \
 | 
			
		||||
	filecase=; \
 | 
			
		||||
	if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" -o "$(PLATFORM)" = "mingw" ]; then \
 | 
			
		||||
	case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*|darwin*-*-cc) \
 | 
			
		||||
		filecase=-i; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	esac; \
 | 
			
		||||
	set -e; for i in doc/apps/*.pod; do \
 | 
			
		||||
		fn=`basename $$i .pod`; \
 | 
			
		||||
		sec=`$(PERL) util/extract-section.pl 1 < $$i`; \
 | 
			
		||||
 
 | 
			
		||||
@@ -135,7 +135,7 @@ LINK_SO_A_VIA_O=	\
 | 
			
		||||
  ALL=$$ALLSYMSFLAGS; ALLSYMSFLAGS=; NOALLSYMSFLAGS=; \
 | 
			
		||||
  ( $(SET_X); \
 | 
			
		||||
    ld $(LDFLAGS) -r -o lib$(LIBNAME).o $$ALL lib$(LIBNAME).a $(LIBEXTRAS) ); \
 | 
			
		||||
  $(LINK_SO) && rm -f $(LIBNAME).o
 | 
			
		||||
  $(LINK_SO) && rm -f lib$(LIBNAME).o
 | 
			
		||||
 | 
			
		||||
LINK_SO_A_UNPACKED=	\
 | 
			
		||||
  UNPACKDIR=link_tmp.$$$$; rm -rf $$UNPACKDIR; mkdir $$UNPACKDIR; \
 | 
			
		||||
@@ -207,17 +207,29 @@ link_app.bsd:
 | 
			
		||||
	fi; $(LINK_APP)
 | 
			
		||||
 | 
			
		||||
# For Darwin AKA Mac OS/X (dyld)
 | 
			
		||||
# link_o.darwin produces .so, because we let it use dso_dlfcn module,
 | 
			
		||||
# which has .so extension hard-coded. One can argue that one should
 | 
			
		||||
# develop special dso module for MacOS X. At least manual encourages
 | 
			
		||||
# to use native NSModule(3) API and refers to dlfcn as termporary hack.
 | 
			
		||||
# Originally link_o.darwin produced .so, because it was hard-coded
 | 
			
		||||
# in dso_dlfcn module. At later point dso_dlfcn switched to .dylib
 | 
			
		||||
# extension in order to allow for run-time linking with vendor-
 | 
			
		||||
# supplied shared libraries such as libz, so that link_o.darwin had
 | 
			
		||||
# to be harmonized with it. This caused minor controversy, because
 | 
			
		||||
# it was believed that dlopen can't be used to dynamically load
 | 
			
		||||
# .dylib-s, only so called bundle modules (ones linked with -bundle
 | 
			
		||||
# flag). The belief seems to be originating from pre-10.4 release,
 | 
			
		||||
# where dlfcn functionality was emulated by dlcompat add-on. In
 | 
			
		||||
# 10.4 dlopen was rewritten as native part of dyld and is documented
 | 
			
		||||
# to be capable of loading both dynamic libraries and bundles. In
 | 
			
		||||
# order to provide compatibility with pre-10.4 dlopen, modules are
 | 
			
		||||
# linked with -bundle flag, which makes .dylib extension misleading.
 | 
			
		||||
# It works, because dlopen is [and always was] extension-agnostic.
 | 
			
		||||
# Alternative to this heuristic approach is to develop specific
 | 
			
		||||
# MacOS X dso module relying on whichever "native" dyld interface.
 | 
			
		||||
link_o.darwin:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME); \
 | 
			
		||||
	SHLIB_SUFFIX=.so; \
 | 
			
		||||
	SHLIB_SUFFIX=.dylib; \
 | 
			
		||||
	ALLSYMSFLAGS='-all_load'; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS)"; \
 | 
			
		||||
	SHAREDFLAGS="$(CFLAGS) `echo $(SHARED_LDFLAGS) | sed s/dynamiclib/bundle/`"; \
 | 
			
		||||
	if [ -n "$(LIBVERSION)" ]; then \
 | 
			
		||||
		SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										268
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										268
									
								
								NEWS
									
									
									
									
									
								
							@@ -5,7 +5,181 @@
 | 
			
		||||
  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 0.9.8n and OpenSSL 1.0:
 | 
			
		||||
  Major changes between OpenSSL 1.0.2 and OpenSSL 1.0.2a [19 Mar 2015]
 | 
			
		||||
 | 
			
		||||
      o OpenSSL 1.0.2 ClientHello sigalgs DoS fix (CVE-2015-0291)
 | 
			
		||||
      o Multiblock corrupted pointer fix (CVE-2015-0290)
 | 
			
		||||
      o Segmentation fault in DTLSv1_listen fix (CVE-2015-0207)
 | 
			
		||||
      o Segmentation fault in ASN1_TYPE_cmp fix (CVE-2015-0286)
 | 
			
		||||
      o Segmentation fault for invalid PSS parameters fix (CVE-2015-0208)
 | 
			
		||||
      o ASN.1 structure reuse memory corruption fix (CVE-2015-0287)
 | 
			
		||||
      o PKCS7 NULL pointer dereferences fix (CVE-2015-0289)
 | 
			
		||||
      o DoS via reachable assert in SSLv2 servers fix (CVE-2015-0293)
 | 
			
		||||
      o Empty CKE with client auth and DHE fix (CVE-2015-1787)
 | 
			
		||||
      o Handshake with unseeded PRNG fix (CVE-2015-0285)
 | 
			
		||||
      o Use After Free following d2i_ECPrivatekey error fix (CVE-2015-0209)
 | 
			
		||||
      o X509_to_X509_REQ NULL pointer deref fix (CVE-2015-0288)
 | 
			
		||||
      o Removed the export ciphers from the DEFAULT ciphers
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1l and OpenSSL 1.0.2 [22 Jan 2015]:
 | 
			
		||||
 | 
			
		||||
      o Suite B support for TLS 1.2 and DTLS 1.2
 | 
			
		||||
      o Support for DTLS 1.2
 | 
			
		||||
      o TLS automatic EC curve selection.
 | 
			
		||||
      o API to set TLS supported signature algorithms and curves
 | 
			
		||||
      o SSL_CONF configuration API.
 | 
			
		||||
      o TLS Brainpool support.
 | 
			
		||||
      o ALPN support.
 | 
			
		||||
      o CMS support for RSA-PSS, RSA-OAEP, ECDH and X9.42 DH.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1k and OpenSSL 1.0.1l [15 Jan 2015]
 | 
			
		||||
 | 
			
		||||
      o Build fixes for the Windows and OpenVMS platforms
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1j and OpenSSL 1.0.1k [8 Jan 2015]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-3571
 | 
			
		||||
      o Fix for CVE-2015-0206
 | 
			
		||||
      o Fix for CVE-2014-3569
 | 
			
		||||
      o Fix for CVE-2014-3572
 | 
			
		||||
      o Fix for CVE-2015-0204
 | 
			
		||||
      o Fix for CVE-2015-0205
 | 
			
		||||
      o Fix for CVE-2014-8275
 | 
			
		||||
      o Fix for CVE-2014-3570
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1i and OpenSSL 1.0.1j [15 Oct 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-3513
 | 
			
		||||
      o Fix for CVE-2014-3567
 | 
			
		||||
      o Mitigation for CVE-2014-3566 (SSL protocol vulnerability)
 | 
			
		||||
      o Fix for CVE-2014-3568
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1h and OpenSSL 1.0.1i [6 Aug 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-3512
 | 
			
		||||
      o Fix for CVE-2014-3511
 | 
			
		||||
      o Fix for CVE-2014-3510
 | 
			
		||||
      o Fix for CVE-2014-3507
 | 
			
		||||
      o Fix for CVE-2014-3506
 | 
			
		||||
      o Fix for CVE-2014-3505
 | 
			
		||||
      o Fix for CVE-2014-3509
 | 
			
		||||
      o Fix for CVE-2014-5139
 | 
			
		||||
      o Fix for CVE-2014-3508
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1g and OpenSSL 1.0.1h [5 Jun 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-0224
 | 
			
		||||
      o Fix for CVE-2014-0221
 | 
			
		||||
      o Fix for CVE-2014-0198
 | 
			
		||||
      o Fix for CVE-2014-0195
 | 
			
		||||
      o Fix for CVE-2014-3470
 | 
			
		||||
      o Fix for CVE-2010-5298
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1f and OpenSSL 1.0.1g [7 Apr 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-0160
 | 
			
		||||
      o Add TLS padding extension workaround for broken servers.
 | 
			
		||||
      o Fix for CVE-2014-0076
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1e and OpenSSL 1.0.1f [6 Jan 2014]
 | 
			
		||||
 | 
			
		||||
      o Don't include gmt_unix_time in TLS server and client random values
 | 
			
		||||
      o Fix for TLS record tampering bug CVE-2013-4353
 | 
			
		||||
      o Fix for TLS version checking bug CVE-2013-6449
 | 
			
		||||
      o Fix for DTLS retransmission bug CVE-2013-6450
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1d and OpenSSL 1.0.1e [11 Feb 2013]:
 | 
			
		||||
 | 
			
		||||
      o Corrected fix for CVE-2013-0169
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1c and OpenSSL 1.0.1d [4 Feb 2013]:
 | 
			
		||||
 | 
			
		||||
      o Fix renegotiation in TLS 1.1, 1.2 by using the correct TLS version.
 | 
			
		||||
      o Include the fips configuration module.
 | 
			
		||||
      o Fix OCSP bad key DoS attack CVE-2013-0166
 | 
			
		||||
      o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
 | 
			
		||||
      o Fix for TLS AESNI record handling flaw CVE-2012-2686
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1b and OpenSSL 1.0.1c [10 May 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix TLS/DTLS record length checking bug CVE-2012-2333
 | 
			
		||||
      o Don't attempt to use non-FIPS composite ciphers in FIPS mode.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1a and OpenSSL 1.0.1b [26 Apr 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix compilation error on non-x86 platforms.
 | 
			
		||||
      o Make FIPS capable OpenSSL ciphers work in non-FIPS mode.
 | 
			
		||||
      o Fix SSL_OP_NO_TLSv1_1 clash with SSL_OP_ALL in OpenSSL 1.0.0
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1 and OpenSSL 1.0.1a [19 Apr 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for ASN1 overflow bug CVE-2012-2110
 | 
			
		||||
      o Workarounds for some servers that hang on long client hellos.
 | 
			
		||||
      o Fix SEGV in AES code.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.1 [14 Mar 2012]:
 | 
			
		||||
 | 
			
		||||
      o TLS/DTLS heartbeat support.
 | 
			
		||||
      o SCTP support.
 | 
			
		||||
      o RFC 5705 TLS key material exporter.
 | 
			
		||||
      o RFC 5764 DTLS-SRTP negotiation.
 | 
			
		||||
      o Next Protocol Negotiation.
 | 
			
		||||
      o PSS signatures in certificates, requests and CRLs.
 | 
			
		||||
      o Support for password based recipient info for CMS.
 | 
			
		||||
      o Support TLS v1.2 and TLS v1.1.
 | 
			
		||||
      o Preliminary FIPS capability for unvalidated 2.0 FIPS module.
 | 
			
		||||
      o SRP support.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0g and OpenSSL 1.0.0h [12 Mar 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for CMS/PKCS#7 MMA CVE-2012-0884
 | 
			
		||||
      o Corrected fix for CVE-2011-4619
 | 
			
		||||
      o Various DTLS fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0f and OpenSSL 1.0.0g [18 Jan 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for DTLS DoS issue CVE-2012-0050
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0e and OpenSSL 1.0.0f [4 Jan 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for DTLS plaintext recovery attack CVE-2011-4108
 | 
			
		||||
      o Clear block padding bytes of SSL 3.0 records CVE-2011-4576
 | 
			
		||||
      o Only allow one SGC handshake restart for SSL/TLS CVE-2011-4619
 | 
			
		||||
      o Check parameters are not NULL in GOST ENGINE CVE-2012-0027
 | 
			
		||||
      o Check for malformed RFC3779 data CVE-2011-4577
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0d and OpenSSL 1.0.0e [6 Sep 2011]:
 | 
			
		||||
 | 
			
		||||
      o Fix for CRL vulnerability issue CVE-2011-3207
 | 
			
		||||
      o Fix for ECDH crashes CVE-2011-3210
 | 
			
		||||
      o Protection against EC timing attacks.
 | 
			
		||||
      o Support ECDH ciphersuites for certificates using SHA2 algorithms.
 | 
			
		||||
      o Various DTLS fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0c and OpenSSL 1.0.0d [8 Feb 2011]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2011-0014
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0b and OpenSSL 1.0.0c [2 Dec 2010]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-4180
 | 
			
		||||
      o Fix for CVE-2010-4252
 | 
			
		||||
      o Fix mishandling of absent EC point format extension.
 | 
			
		||||
      o Fix various platform compilation issues.
 | 
			
		||||
      o Corrected fix for security issue CVE-2010-3864.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0a and OpenSSL 1.0.0b [16 Nov 2010]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-3864.
 | 
			
		||||
      o Fix for CVE-2010-2939
 | 
			
		||||
      o Fix WIN32 build system for GOST ENGINE.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a [1 Jun 2010]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-1633.
 | 
			
		||||
      o GOST MAC and CFB fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8n and OpenSSL 1.0.0 [29 Mar 2010]:
 | 
			
		||||
 | 
			
		||||
      o RFC3280 path validation: sufficient to process PKITS tests.
 | 
			
		||||
      o Integrated support for PVK files and keyblobs.
 | 
			
		||||
@@ -28,12 +202,12 @@
 | 
			
		||||
      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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8m and OpenSSL 0.9.8n [24 Mar 2010]:
 | 
			
		||||
 | 
			
		||||
      o CFB cipher definition fixes.
 | 
			
		||||
      o Fix security issues CVE-2010-0740 and CVE-2010-0433.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8l and OpenSSL 0.9.8m:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8l and OpenSSL 0.9.8m [25 Feb 2010]:
 | 
			
		||||
 | 
			
		||||
      o Cipher definition fixes.
 | 
			
		||||
      o Workaround for slow RAND_poll() on some WIN32 versions.
 | 
			
		||||
@@ -45,33 +219,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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8k and OpenSSL 0.9.8l [5 Nov 2009]:
 | 
			
		||||
 | 
			
		||||
      o Temporary work around for CVE-2009-3555: disable renegotiation.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8j and OpenSSL 0.9.8k:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8j and OpenSSL 0.9.8k [25 Mar 2009]:
 | 
			
		||||
 | 
			
		||||
      o Fix various build issues.
 | 
			
		||||
      o Fix security issues (CVE-2009-0590, CVE-2009-0591, CVE-2009-0789)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8i and OpenSSL 0.9.8j:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8i and OpenSSL 0.9.8j [7 Jan 2009]:
 | 
			
		||||
 | 
			
		||||
      o Fix security issue (CVE-2008-5077)
 | 
			
		||||
      o Merge FIPS 140-2 branch code.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8g and OpenSSL 0.9.8h:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8g and OpenSSL 0.9.8h [28 May 2008]:
 | 
			
		||||
 | 
			
		||||
      o CryptoAPI ENGINE support.
 | 
			
		||||
      o Various precautionary measures.
 | 
			
		||||
      o Fix for bugs affecting certificate request creation.
 | 
			
		||||
      o Support for local machine keyset attribute in PKCS#12 files.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8f and OpenSSL 0.9.8g:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8f and OpenSSL 0.9.8g [19 Oct 2007]:
 | 
			
		||||
 | 
			
		||||
      o Backport of CMS functionality to 0.9.8.
 | 
			
		||||
      o Fixes for bugs introduced with 0.9.8f.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8e and OpenSSL 0.9.8f:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8e and OpenSSL 0.9.8f [11 Oct 2007]:
 | 
			
		||||
 | 
			
		||||
      o Add gcc 4.2 support.
 | 
			
		||||
      o Add support for AES and SSE2 assembly lanugauge optimization
 | 
			
		||||
@@ -82,23 +256,23 @@
 | 
			
		||||
      o RFC4507bis support.
 | 
			
		||||
      o TLS Extensions support.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e [23 Feb 2007]:
 | 
			
		||||
 | 
			
		||||
      o Various ciphersuite selection fixes.
 | 
			
		||||
      o RFC3779 support.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d [28 Sep 2006]:
 | 
			
		||||
 | 
			
		||||
      o Introduce limits to prevent malicious key DoS  (CVE-2006-2940)
 | 
			
		||||
      o 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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8b and OpenSSL 0.9.8c [5 Sep 2006]:
 | 
			
		||||
 | 
			
		||||
      o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339
 | 
			
		||||
      o New cipher Camellia
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b [4 May 2006]:
 | 
			
		||||
 | 
			
		||||
      o Cipher string fixes.
 | 
			
		||||
      o Fixes for VC++ 2005.
 | 
			
		||||
@@ -108,12 +282,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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8 and OpenSSL 0.9.8a [11 Oct 2005]:
 | 
			
		||||
 | 
			
		||||
      o Fix potential SSL 2.0 rollback, CVE-2005-2969
 | 
			
		||||
      o Extended Windows CE support
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.8:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.8 [5 Jul 2005]:
 | 
			
		||||
 | 
			
		||||
      o Major work on the BIGNUM library for higher efficiency and to
 | 
			
		||||
        make operations more streamlined and less contradictory.  This
 | 
			
		||||
@@ -187,36 +361,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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7l and OpenSSL 0.9.7m [23 Feb 2007]:
 | 
			
		||||
 | 
			
		||||
      o FIPS 1.1.1 module linking.
 | 
			
		||||
      o Various ciphersuite selection fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7k and OpenSSL 0.9.7l:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7k and OpenSSL 0.9.7l [28 Sep 2006]:
 | 
			
		||||
 | 
			
		||||
      o Introduce limits to prevent malicious key DoS  (CVE-2006-2940)
 | 
			
		||||
      o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7j and OpenSSL 0.9.7k:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7j and OpenSSL 0.9.7k [5 Sep 2006]:
 | 
			
		||||
 | 
			
		||||
      o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j [4 May 2006]:
 | 
			
		||||
 | 
			
		||||
      o Visual C++ 2005 fixes.
 | 
			
		||||
      o Update Windows build system for FIPS.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7h and OpenSSL 0.9.7i:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7h and OpenSSL 0.9.7i [14 Oct 2005]:
 | 
			
		||||
 | 
			
		||||
      o Give EVP_MAX_MD_SIZE it's old value, except for a FIPS build.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.7h:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.7h [11 Oct 2005]:
 | 
			
		||||
 | 
			
		||||
      o Fix SSL 2.0 Rollback, CVE-2005-2969
 | 
			
		||||
      o Allow use of fixed-length exponent on DSA signing
 | 
			
		||||
      o Default fixed-window RSA, DSA, DH private-key operations
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g [11 Apr 2005]:
 | 
			
		||||
 | 
			
		||||
      o More compilation issues fixed.
 | 
			
		||||
      o Adaptation to more modern Kerberos API.
 | 
			
		||||
@@ -225,7 +399,7 @@
 | 
			
		||||
      o More constification.
 | 
			
		||||
      o Added processing of proxy certificates (RFC 3820).
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f [22 Mar 2005]:
 | 
			
		||||
 | 
			
		||||
      o Several compilation issues fixed.
 | 
			
		||||
      o Many memory allocation failure checks added.
 | 
			
		||||
@@ -233,12 +407,12 @@
 | 
			
		||||
      o Mandatory basic checks on certificates.
 | 
			
		||||
      o Performance improvements.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e [25 Oct 2004]:
 | 
			
		||||
 | 
			
		||||
      o Fix race condition in CRL checking code.
 | 
			
		||||
      o Fixes to PKCS#7 (S/MIME) code.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d [17 Mar 2004]:
 | 
			
		||||
 | 
			
		||||
      o Security: Fix Kerberos ciphersuite SSL/TLS handshaking bug
 | 
			
		||||
      o Security: Fix null-pointer assignment in do_change_cipher_spec()
 | 
			
		||||
@@ -246,14 +420,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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c [30 Sep 2003]:
 | 
			
		||||
 | 
			
		||||
      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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b [10 Apr 2003]:
 | 
			
		||||
 | 
			
		||||
      o Security: counter the Klima-Pokorny-Rosa extension of
 | 
			
		||||
        Bleichbacher's attack 
 | 
			
		||||
@@ -264,7 +438,7 @@
 | 
			
		||||
      o ASN.1: treat domainComponent correctly.
 | 
			
		||||
      o Documentation: fixes and additions.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a [19 Feb 2003]:
 | 
			
		||||
 | 
			
		||||
      o Security: Important security related bugfixes.
 | 
			
		||||
      o Enhanced compatibility with MIT Kerberos.
 | 
			
		||||
@@ -275,7 +449,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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7 [30 Dec 2002]:
 | 
			
		||||
 | 
			
		||||
      o New library section OCSP.
 | 
			
		||||
      o Complete rewrite of ASN1 code.
 | 
			
		||||
@@ -321,23 +495,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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k [30 Sep 2003]:
 | 
			
		||||
 | 
			
		||||
      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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j [10 Apr 2003]:
 | 
			
		||||
 | 
			
		||||
      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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i [19 Feb 2003]:
 | 
			
		||||
 | 
			
		||||
      o Important security related bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h [5 Dec 2002]:
 | 
			
		||||
 | 
			
		||||
      o New configuration targets for Tandem OSS and A/UX.
 | 
			
		||||
      o New OIDs for Microsoft attributes.
 | 
			
		||||
@@ -351,25 +525,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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g [9 Aug 2002]:
 | 
			
		||||
 | 
			
		||||
      o Important building fixes on Unix.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f [8 Aug 2002]:
 | 
			
		||||
 | 
			
		||||
      o Various important bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e [30 Jul 2002]:
 | 
			
		||||
 | 
			
		||||
      o Important security related bugfixes.
 | 
			
		||||
      o Various SSL/TLS library bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d [9 May 2002]:
 | 
			
		||||
 | 
			
		||||
      o Various SSL/TLS library bugfixes.
 | 
			
		||||
      o Fix DH parameter generation for 'non-standard' generators.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c [21 Dec 2001]:
 | 
			
		||||
 | 
			
		||||
      o Various SSL/TLS library bugfixes.
 | 
			
		||||
      o BIGNUM library fixes.
 | 
			
		||||
@@ -382,7 +556,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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b [9 Jul 2001]:
 | 
			
		||||
 | 
			
		||||
      o Security fix: PRNG improvements.
 | 
			
		||||
      o Security fix: RSA OAEP check.
 | 
			
		||||
@@ -399,7 +573,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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.6a [5 Apr 2001]:
 | 
			
		||||
 | 
			
		||||
      o Security fix: change behavior of OpenSSL to avoid using
 | 
			
		||||
        environment variables when running as root.
 | 
			
		||||
@@ -424,7 +598,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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6 [10 Oct 2000]:
 | 
			
		||||
 | 
			
		||||
      o Some documentation for BIO and SSL libraries.
 | 
			
		||||
      o Enhanced chain verification using key identifiers.
 | 
			
		||||
@@ -439,7 +613,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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a [1 Apr 2000]:
 | 
			
		||||
 | 
			
		||||
      o Bug fixes for Win32, SuSE Linux, NeXTSTEP and FreeBSD 2.2.8 
 | 
			
		||||
      o Shared library support for HPUX and Solaris-gcc
 | 
			
		||||
@@ -448,7 +622,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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5 [25 May 2000]:
 | 
			
		||||
 | 
			
		||||
      o S/MIME support in new 'smime' command
 | 
			
		||||
      o Documentation for the OpenSSL command line application
 | 
			
		||||
@@ -484,7 +658,7 @@
 | 
			
		||||
      o Enhanced support for Alpha Linux
 | 
			
		||||
      o Experimental MacOS support
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4:
 | 
			
		||||
  Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4 [9 Aug 1999]:
 | 
			
		||||
 | 
			
		||||
      o Transparent support for PKCS#8 format private keys: these are used
 | 
			
		||||
        by several software packages and are more secure than the standard
 | 
			
		||||
@@ -495,7 +669,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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.2b and OpenSSL 0.9.3 [24 May 1999]:
 | 
			
		||||
      o Lots of enhancements and cleanups to the Configuration mechanism
 | 
			
		||||
      o RSA OEAP related fixes
 | 
			
		||||
      o Added `openssl ca -revoke' option for revoking a certificate
 | 
			
		||||
@@ -509,7 +683,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:
 | 
			
		||||
  Major changes between OpenSSL 0.9.1c and OpenSSL 0.9.2b [22 Mar 1999]:
 | 
			
		||||
      o Fixed a security hole related to session resumption
 | 
			
		||||
      o Fixed RSA encryption routines for the p < q case
 | 
			
		||||
      o "ALL" in cipher lists now means "everything except NULL ciphers"
 | 
			
		||||
@@ -531,7 +705,7 @@
 | 
			
		||||
      o Lots of memory leak fixes.
 | 
			
		||||
      o Lots of bug fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c:
 | 
			
		||||
  Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c [23 Dec 1998]:
 | 
			
		||||
      o Integration of the popular NO_RSA/NO_DSA patches
 | 
			
		||||
      o Initial support for compression inside the SSL record layer
 | 
			
		||||
      o Added BIO proxy and filtering functionality
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								PROBLEMS
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								PROBLEMS
									
									
									
									
									
								
							@@ -36,7 +36,9 @@ may differ on your machine.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
As long as Apple doesn't fix the problem with ld, this problem building
 | 
			
		||||
OpenSSL will remain as is.
 | 
			
		||||
OpenSSL will remain as is. Well, the problem was addressed in 0.9.8f by
 | 
			
		||||
passing -Wl,-search_paths_first, but it's unknown if the flag was
 | 
			
		||||
supported from the initial MacOS X release.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Parallell make leads to errors
 | 
			
		||||
@@ -195,3 +197,17 @@ reconfigure with additional no-sse2 [or 386] option passed to ./config.
 | 
			
		||||
We don't have framework to associate -ldl with no-dso, therefore the only
 | 
			
		||||
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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								README
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
 | 
			
		||||
 OpenSSL 1.0.0 29 Mar 2010
 | 
			
		||||
 OpenSSL 1.0.2a 19 Mar 2015
 | 
			
		||||
 | 
			
		||||
 Copyright (c) 1998-2009 The OpenSSL Project
 | 
			
		||||
 Copyright (c) 1998-2011 The OpenSSL Project
 | 
			
		||||
 Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
 | 
			
		||||
 All rights reserved.
 | 
			
		||||
 | 
			
		||||
@@ -90,32 +90,6 @@
 | 
			
		||||
        SSL/TLS Client and Server Tests
 | 
			
		||||
        Handling of S/MIME signed or encrypted mail
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 PATENTS
 | 
			
		||||
 -------
 | 
			
		||||
 | 
			
		||||
 Various companies hold various patents for various algorithms in various
 | 
			
		||||
 locations around the world. _YOU_ are responsible for ensuring that your use
 | 
			
		||||
 of any algorithms is legal by checking if there are any patents in your
 | 
			
		||||
 country.  The file contains some of the patents that we know about or are
 | 
			
		||||
 rumored to exist. This is not a definitive list.
 | 
			
		||||
 | 
			
		||||
 RSA Security holds software patents on the RC5 algorithm.  If you
 | 
			
		||||
 intend to use this cipher, you must contact RSA Security for
 | 
			
		||||
 licensing conditions. Their web page is http://www.rsasecurity.com/.
 | 
			
		||||
 | 
			
		||||
 RC4 is a trademark of RSA Security, so use of this label should perhaps
 | 
			
		||||
 only be used with RSA Security's permission.
 | 
			
		||||
 | 
			
		||||
 The IDEA algorithm is patented by Ascom in Austria, France, Germany, Italy,
 | 
			
		||||
 Japan, the Netherlands, Spain, Sweden, Switzerland, UK and the USA.  They
 | 
			
		||||
 should be contacted if that algorithm is to be used; their web page is
 | 
			
		||||
 http://www.ascom.ch/.
 | 
			
		||||
 | 
			
		||||
 NTT and Mitsubishi have patents and pending patents on the Camellia
 | 
			
		||||
 algorithm, but allow use at no charge without requiring an explicit
 | 
			
		||||
 licensing agreement: http://info.isl.ntt.co.jp/crypt/eng/info/chiteki.html
 | 
			
		||||
 | 
			
		||||
 INSTALLATION
 | 
			
		||||
 ------------
 | 
			
		||||
 | 
			
		||||
@@ -161,8 +135,7 @@
 | 
			
		||||
    - Problem Description (steps that will reproduce the problem, if known)
 | 
			
		||||
    - Stack Traceback (if the application dumps core)
 | 
			
		||||
 | 
			
		||||
 Report the bug to the OpenSSL project via the Request Tracker
 | 
			
		||||
 (http://www.openssl.org/support/rt.html) by mail to:
 | 
			
		||||
 Email the report to:
 | 
			
		||||
 | 
			
		||||
    openssl-bugs@openssl.org
 | 
			
		||||
 | 
			
		||||
@@ -170,10 +143,11 @@
 | 
			
		||||
 or support queries. Just because something doesn't work the way you expect
 | 
			
		||||
 does not mean it is necessarily a bug in OpenSSL.
 | 
			
		||||
 | 
			
		||||
 Note that mail to openssl-bugs@openssl.org is recorded in the publicly
 | 
			
		||||
 readable request tracker database and is forwarded to a public
 | 
			
		||||
 mailing list. Confidential mail may be sent to openssl-security@openssl.org
 | 
			
		||||
 (PGP key available from the key servers).
 | 
			
		||||
 Note that mail to openssl-bugs@openssl.org is recorded in the public
 | 
			
		||||
 request tracker database (see https://www.openssl.org/support/rt.html
 | 
			
		||||
 for details) and also forwarded to a public mailing list. Confidential
 | 
			
		||||
 mail may be sent to openssl-security@openssl.org (PGP key available from
 | 
			
		||||
 the key servers).
 | 
			
		||||
 | 
			
		||||
 HOW TO CONTRIBUTE TO OpenSSL
 | 
			
		||||
 ----------------------------
 | 
			
		||||
@@ -190,7 +164,7 @@
 | 
			
		||||
 reason as to why that feature isn't implemented.
 | 
			
		||||
 | 
			
		||||
 Patches should be as up to date as possible, preferably relative to the
 | 
			
		||||
 current CVS or the last snapshot. They should follow the coding style of
 | 
			
		||||
 current Git or the last snapshot. They should follow the coding style of
 | 
			
		||||
 OpenSSL and compile without warnings. Some of the core team developer targets
 | 
			
		||||
 can be used for testing purposes, (debug-steve64, debug-geoff etc). OpenSSL
 | 
			
		||||
 compiles on many varied platforms: try to ensure you only use portable
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										138
									
								
								STATUS
									
									
									
									
									
								
							
							
						
						
									
										138
									
								
								STATUS
									
									
									
									
									
								
							@@ -1,138 +0,0 @@
 | 
			
		||||
 | 
			
		||||
  OpenSSL STATUS                           Last modified at
 | 
			
		||||
  ______________                           $Date: 2010/03/29 13:11:53 $
 | 
			
		||||
 | 
			
		||||
  DEVELOPMENT STATE
 | 
			
		||||
 | 
			
		||||
    o  OpenSSL 1.0.0:  Released on March     29th, 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.
 | 
			
		||||
							
								
								
									
										67
									
								
								VMS/install-vms.com
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										67
									
								
								VMS/install-vms.com
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
$! install-vms.com -- Installs the files in a given directory tree
 | 
			
		||||
$!
 | 
			
		||||
$! Author: Richard Levitte <richard@levitte.org>
 | 
			
		||||
$! Time of creation: 23-MAY-1998 19:22
 | 
			
		||||
$!
 | 
			
		||||
$! P1	root of the directory tree
 | 
			
		||||
$!
 | 
			
		||||
$!
 | 
			
		||||
$! Announce/identify.
 | 
			
		||||
$!
 | 
			
		||||
$ proc = f$environment( "procedure")
 | 
			
		||||
$ write sys$output "@@@ "+ -
 | 
			
		||||
   f$parse( proc, , , "name")+ f$parse( proc, , , "type")
 | 
			
		||||
$!
 | 
			
		||||
$ on error then goto tidy
 | 
			
		||||
$ on control_c then goto tidy
 | 
			
		||||
$!
 | 
			
		||||
$ if p1 .eqs. ""
 | 
			
		||||
$ then
 | 
			
		||||
$   write sys$output "First argument missing."
 | 
			
		||||
$   write sys$output -
 | 
			
		||||
     "Should be the directory where you want things installed."
 | 
			
		||||
$   exit
 | 
			
		||||
$ endif
 | 
			
		||||
$
 | 
			
		||||
$ if (f$getsyi( "cpu") .lt. 128)
 | 
			
		||||
$ then
 | 
			
		||||
$   arch = "VAX"
 | 
			
		||||
$ else
 | 
			
		||||
$   arch = f$edit( f$getsyi( "arch_name"), "upcase")
 | 
			
		||||
$   if (arch .eqs. "") then arch = "UNK"
 | 
			
		||||
$ endif
 | 
			
		||||
$
 | 
			
		||||
$ root = f$parse( P1, "[]A.;0", , , "SYNTAX_ONLY, NO_CONCEAL")- "A.;0"
 | 
			
		||||
$ root_dev = f$parse( root, , , "device", "syntax_only")
 | 
			
		||||
$ root_dir = f$parse( root, , , "directory", "syntax_only") - -
 | 
			
		||||
   "[000000." - "][" - "[" - "]"
 | 
			
		||||
$ root = root_dev + "[" + root_dir
 | 
			
		||||
$
 | 
			
		||||
$ define /nolog wrk_sslroot 'root'.] /translation_attributes = concealed
 | 
			
		||||
$ define /nolog wrk_sslinclude wrk_sslroot:[include]
 | 
			
		||||
$
 | 
			
		||||
$ if f$parse( "wrk_sslroot:[000000]") .eqs. "" then -
 | 
			
		||||
   create /directory /log wrk_sslroot:[000000]
 | 
			
		||||
$ if f$parse( "wrk_sslinclude:") .eqs. "" then -
 | 
			
		||||
   create /directory /log wrk_sslinclude:
 | 
			
		||||
$ if f$parse( "wrk_sslroot:[vms]") .eqs. "" then -
 | 
			
		||||
   create /directory /log wrk_sslroot:[vms]
 | 
			
		||||
$!
 | 
			
		||||
$ copy /log /protection = world:re openssl_startup.com wrk_sslroot:[vms]
 | 
			
		||||
$ copy /log /protection = world:re openssl_undo.com wrk_sslroot:[vms]
 | 
			
		||||
$ copy /log /protection = world:re openssl_utils.com wrk_sslroot:[vms]
 | 
			
		||||
$!
 | 
			
		||||
$ tidy:
 | 
			
		||||
$!
 | 
			
		||||
$ call deass wrk_sslroot
 | 
			
		||||
$ call deass wrk_sslinclude
 | 
			
		||||
$!
 | 
			
		||||
$ exit
 | 
			
		||||
$!
 | 
			
		||||
$ deass: subroutine
 | 
			
		||||
$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
 | 
			
		||||
$ then
 | 
			
		||||
$   deassign /process 'p1'
 | 
			
		||||
$ endif
 | 
			
		||||
$ endsubroutine
 | 
			
		||||
$!
 | 
			
		||||
@@ -1,79 +0,0 @@
 | 
			
		||||
$! INSTALL.COM -- Installs the files in a given directory tree
 | 
			
		||||
$!
 | 
			
		||||
$! Author: Richard Levitte <richard@levitte.org>
 | 
			
		||||
$! Time of creation: 23-MAY-1998 19:22
 | 
			
		||||
$!
 | 
			
		||||
$! P1	root of the directory tree
 | 
			
		||||
$!
 | 
			
		||||
$	IF P1 .EQS. ""
 | 
			
		||||
$	THEN
 | 
			
		||||
$	    WRITE SYS$OUTPUT "First argument missing."
 | 
			
		||||
$	    WRITE SYS$OUTPUT "Should be the directory where you want things installed."
 | 
			
		||||
$	    EXIT
 | 
			
		||||
$	ENDIF
 | 
			
		||||
$
 | 
			
		||||
$	IF (F$GETSYI("CPU").LT.128)
 | 
			
		||||
$	THEN
 | 
			
		||||
$	    ARCH := VAX
 | 
			
		||||
$	ELSE
 | 
			
		||||
$	    ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
 | 
			
		||||
$	    IF (ARCH .EQS. "") THEN ARCH = "UNK"
 | 
			
		||||
$	ENDIF
 | 
			
		||||
$
 | 
			
		||||
$	ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
 | 
			
		||||
$	ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
 | 
			
		||||
$	ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
 | 
			
		||||
		   - "[000000." - "][" - "[" - "]"
 | 
			
		||||
$	ROOT = ROOT_DEV + "[" + ROOT_DIR
 | 
			
		||||
$
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLINCLUDE WRK_SSLROOT:[INCLUDE]
 | 
			
		||||
$
 | 
			
		||||
$	IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLROOT:[000000]
 | 
			
		||||
$	IF F$PARSE("WRK_SSLINCLUDE:") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLINCLUDE:
 | 
			
		||||
$	IF F$PARSE("WRK_SSLROOT:[VMS]") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLROOT:[VMS]
 | 
			
		||||
$
 | 
			
		||||
$	IF F$SEARCH("WRK_SSLINCLUDE:vms_idhacks.h") .NES. "" THEN -
 | 
			
		||||
	   DELETE WRK_SSLINCLUDE:vms_idhacks.h;*
 | 
			
		||||
$
 | 
			
		||||
$	OPEN/WRITE SF WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM
 | 
			
		||||
$	WRITE SYS$OUTPUT "%OPEN-I-CREATED,  ",F$SEARCH("WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM")," created."
 | 
			
		||||
$	WRITE SF "$! Startup file for Openssl"
 | 
			
		||||
$	WRITE SF "$!"
 | 
			
		||||
$	WRITE SF "$! Do not edit this file, as it will be regenerated during next installation."
 | 
			
		||||
$	WRITE SF "$! Instead, add or change SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"
 | 
			
		||||
$	WRITE SF "$!"
 | 
			
		||||
$	WRITE SF "$! P1	a qualifier to DEFINE.  For example ""/SYSTEM"" to get the logical names"
 | 
			
		||||
$	WRITE SF "$!	defined in the system logical name table."
 | 
			
		||||
$	WRITE SF "$!"
 | 
			
		||||
$	WRITE SF "$	IF (F$GETSYI(""CPU"").LT.128)"
 | 
			
		||||
$	WRITE SF "$	THEN"
 | 
			
		||||
$	WRITE SF "$	    ARCH := VAX"
 | 
			
		||||
$	WRITE SF "$	ELSE"
 | 
			
		||||
$	WRITE SF "$	    ARCH = F$EDIT( F$GETSYI( ""ARCH_NAME""), ""UPCASE"")"
 | 
			
		||||
$	WRITE SF "$	    IF (ARCH .EQS. """") THEN ARCH = ""UNK"""
 | 
			
		||||
$	WRITE SF "$	ENDIF"
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	SSLROOT		",ROOT,".] /TRANS=CONC"
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	SSLLIB		SSLROOT:['ARCH'_LIB]"
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	SSLINCLUDE	SSLROOT:[INCLUDE]"
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	SSLEXE		SSLROOT:['ARCH'_EXE]"
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	SSLCERTS	SSLROOT:[CERTS]"
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	SSLPRIVATE	SSLROOT:[PRIVATE]"
 | 
			
		||||
$	WRITE SF "$"
 | 
			
		||||
$	WRITE SF "$!	This is program can include <openssl/{foo}.h>"
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	OPENSSL		SSLINCLUDE:"
 | 
			
		||||
$	WRITE SF "$"
 | 
			
		||||
$	WRITE SF "$	IF F$SEARCH(""SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"") .NES."""" THEN -"
 | 
			
		||||
$	WRITE SF "	   @SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"
 | 
			
		||||
$	WRITE SF "$"
 | 
			
		||||
$	WRITE SF "$	EXIT"
 | 
			
		||||
$	CLOSE SF
 | 
			
		||||
$	SET FILE/PROT=WORLD:RE WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM
 | 
			
		||||
$
 | 
			
		||||
$	COPY OPENSSL_UTILS.COM WRK_SSLROOT:[VMS]/LOG
 | 
			
		||||
$	SET FILE/PROT=WORLD:RE WRK_SSLROOT:[VMS]OPENSSL_UTILS.COM
 | 
			
		||||
$
 | 
			
		||||
$	EXIT
 | 
			
		||||
							
								
								
									
										261
									
								
								VMS/mkshared.com
									
									
									
									
									
								
							
							
						
						
									
										261
									
								
								VMS/mkshared.com
									
									
									
									
									
								
							@@ -1,85 +1,166 @@
 | 
			
		||||
$! MKSHARED.COM -- script to created shareable images on VMS
 | 
			
		||||
$! MKSHARED.COM -- Create shareable images.
 | 
			
		||||
$!
 | 
			
		||||
$! No command line parameters.  This should be run at the start of the source
 | 
			
		||||
$! tree (the same directory where one finds INSTALL.VMS).
 | 
			
		||||
$! P1: "64" for 64-bit pointers.
 | 
			
		||||
$!
 | 
			
		||||
$! Input:	[.UTIL]LIBEAY.NUM,[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB
 | 
			
		||||
$!		[.UTIL]SSLEAY.NUM,[.xxx.EXE.SSL]LIBSSL.OLB
 | 
			
		||||
$! Output:	[.xxx.EXE.CRYPTO]LIBCRYPTO.OPT,.MAP,.EXE
 | 
			
		||||
$!		[.xxx.EXE.SSL]LIBSSL.OPT,.MAP,.EXE
 | 
			
		||||
$! 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
 | 
			
		||||
$!
 | 
			
		||||
$! So far, tests have only been made on VMS for Alpha.  VAX will come in time.
 | 
			
		||||
$! ===========================================================================
 | 
			
		||||
$
 | 
			
		||||
$!
 | 
			
		||||
$! Announce/identify.
 | 
			
		||||
$!
 | 
			
		||||
$ proc = f$environment( "procedure")
 | 
			
		||||
$ write sys$output "@@@ "+ -
 | 
			
		||||
   f$parse( proc, , , "name")+ f$parse( proc, , , "type")
 | 
			
		||||
$!
 | 
			
		||||
$! Save the original default device:[directory].
 | 
			
		||||
$!
 | 
			
		||||
$ def_orig = f$environment( "default")
 | 
			
		||||
$ on error then goto tidy
 | 
			
		||||
$ on control_c then goto tidy
 | 
			
		||||
$!
 | 
			
		||||
$! SET DEFAULT to the main kit directory.
 | 
			
		||||
$!
 | 
			
		||||
$ proc = f$environment("procedure")
 | 
			
		||||
$ proc = f$parse( "A.;", proc)- "A.;"
 | 
			
		||||
$ set default 'proc'
 | 
			
		||||
$ set default [-]
 | 
			
		||||
$!
 | 
			
		||||
$! ----- Prepare info for processing: version number and file info
 | 
			
		||||
$ gosub read_version_info
 | 
			
		||||
$ if libver .eqs. ""
 | 
			
		||||
$ then
 | 
			
		||||
$   write sys$error "ERROR: Couldn't find any library version info..."
 | 
			
		||||
$   exit
 | 
			
		||||
$   go to tidy:
 | 
			
		||||
$ endif
 | 
			
		||||
$
 | 
			
		||||
$ if (f$getsyi("cpu").lt.128)
 | 
			
		||||
$ if (f$getsyi("cpu") .lt. 128)
 | 
			
		||||
$ then
 | 
			
		||||
$     arch := VAX
 | 
			
		||||
$ else
 | 
			
		||||
$     arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
 | 
			
		||||
$     if (arch .eqs. "") then arch = "UNK"
 | 
			
		||||
$ endif
 | 
			
		||||
$
 | 
			
		||||
$ if arch .nes. "VAX"
 | 
			
		||||
$ then
 | 
			
		||||
$   arch_vax = 0
 | 
			
		||||
$   libid  = "Crypto"
 | 
			
		||||
$   libnum = "[.UTIL]LIBEAY.NUM"
 | 
			
		||||
$   libdir = "[.''ARCH'.EXE.CRYPTO]"
 | 
			
		||||
$   libolb = "''libdir'LIBCRYPTO.OLB"
 | 
			
		||||
$   libopt = "''libdir'LIBCRYPTO.OPT"
 | 
			
		||||
$   libmap = "''libdir'LIBCRYPTO.MAP"
 | 
			
		||||
$   libgoal= "''libdir'LIBCRYPTO.EXE"
 | 
			
		||||
$   libref = ""
 | 
			
		||||
$   gosub create_nonvax_shr
 | 
			
		||||
$   libid  = "SSL"
 | 
			
		||||
$   libnum = "[.UTIL]SSLEAY.NUM"
 | 
			
		||||
$   libdir = "[.''ARCH'.EXE.SSL]"
 | 
			
		||||
$   libolb = "''libdir'LIBSSL.OLB"
 | 
			
		||||
$   libopt = "''libdir'LIBSSL.OPT"
 | 
			
		||||
$   libmap = "''libdir'LIBSSL.MAP"
 | 
			
		||||
$   libgoal= "''libdir'LIBSSL.EXE"
 | 
			
		||||
$   libref = "[.''ARCH'.EXE.CRYPTO]LIBCRYPTO.EXE"
 | 
			
		||||
$   gosub create_nonvax_shr
 | 
			
		||||
$ else
 | 
			
		||||
$   arch_vax = 1
 | 
			
		||||
$   arch = "VAX"
 | 
			
		||||
$ else
 | 
			
		||||
$   arch_vax = 0
 | 
			
		||||
$   arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
 | 
			
		||||
$   if (arch .eqs. "") then arch = "UNK"
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$ archd = arch
 | 
			
		||||
$ lib32 = "32"
 | 
			
		||||
$ shr = "SHR32"
 | 
			
		||||
$!
 | 
			
		||||
$ if (p1 .nes. "")
 | 
			
		||||
$ then
 | 
			
		||||
$   if (p1 .eqs. "64")
 | 
			
		||||
$   then
 | 
			
		||||
$     archd = arch+ "_64"
 | 
			
		||||
$     lib32 = ""
 | 
			
		||||
$     shr = "SHR"
 | 
			
		||||
$   else
 | 
			
		||||
$     if (p1 .nes. "32")
 | 
			
		||||
$     then
 | 
			
		||||
$       write sys$output "Second argument invalid."
 | 
			
		||||
$       write sys$output "It should be "32", "64", or nothing."
 | 
			
		||||
$       exit
 | 
			
		||||
$     endif
 | 
			
		||||
$   endif
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$! ----- Prepare info for processing: disabled algorithms info
 | 
			
		||||
$ gosub read_disabled_algorithms_info
 | 
			
		||||
$!
 | 
			
		||||
$ ZLIB = p2
 | 
			
		||||
$ zlib_lib = ""
 | 
			
		||||
$ if (ZLIB .nes. "")
 | 
			
		||||
$ then
 | 
			
		||||
$   file2 = f$parse( ZLIB, "libz.olb", , , "syntax_only")
 | 
			
		||||
$   if (f$search( file2) .eqs. "")
 | 
			
		||||
$   then
 | 
			
		||||
$     write sys$output ""
 | 
			
		||||
$     write sys$output "The Option ", ZLIB, " Is Invalid."
 | 
			
		||||
$     write sys$output "    Can't find library: ''file2'"
 | 
			
		||||
$     write sys$output ""
 | 
			
		||||
$     goto tidy
 | 
			
		||||
$   endif
 | 
			
		||||
$   zlib_lib = ", ''file2' /library"
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$ if (arch_vax)
 | 
			
		||||
$ then
 | 
			
		||||
$   libtit = "CRYPTO_TRANSFER_VECTOR"
 | 
			
		||||
$   libid  = "Crypto"
 | 
			
		||||
$   libnum = "[.UTIL]LIBEAY.NUM"
 | 
			
		||||
$   libdir = "[.''ARCH'.EXE.CRYPTO]"
 | 
			
		||||
$   libmar = "''libdir'LIBCRYPTO.MAR"
 | 
			
		||||
$   libolb = "''libdir'LIBCRYPTO.OLB"
 | 
			
		||||
$   libopt = "''libdir'LIBCRYPTO.OPT"
 | 
			
		||||
$   libobj = "''libdir'LIBCRYPTO.OBJ"
 | 
			
		||||
$   libmap = "''libdir'LIBCRYPTO.MAP"
 | 
			
		||||
$   libgoal= "''libdir'LIBCRYPTO.EXE"
 | 
			
		||||
$   libdir = "[.''ARCHD'.EXE.CRYPTO]"
 | 
			
		||||
$   libmar = "''libdir'SSL_LIBCRYPTO_''shr'.MAR"
 | 
			
		||||
$   libolb = "''libdir'SSL_LIBCRYPTO''lib32'.OLB"
 | 
			
		||||
$   libopt = "''libdir'SSL_LIBCRYPTO_''shr'.OPT"
 | 
			
		||||
$   libobj = "''libdir'SSL_LIBCRYPTO_''shr'.OBJ"
 | 
			
		||||
$   libmap = "''libdir'SSL_LIBCRYPTO_''shr'.MAP"
 | 
			
		||||
$   libgoal= "''libdir'SSL_LIBCRYPTO_''shr'.EXE"
 | 
			
		||||
$   libref = ""
 | 
			
		||||
$   libvec = "LIBCRYPTO"
 | 
			
		||||
$   gosub create_vax_shr
 | 
			
		||||
$   if f$search( libolb) .nes. "" then gosub create_vax_shr
 | 
			
		||||
$   libtit = "SSL_TRANSFER_VECTOR"
 | 
			
		||||
$   libid  = "SSL"
 | 
			
		||||
$   libnum = "[.UTIL]SSLEAY.NUM"
 | 
			
		||||
$   libdir = "[.''ARCH'.EXE.SSL]"
 | 
			
		||||
$   libmar = "''libdir'LIBSSL.MAR"
 | 
			
		||||
$   libolb = "''libdir'LIBSSL.OLB"
 | 
			
		||||
$   libopt = "''libdir'LIBSSL.OPT"
 | 
			
		||||
$   libobj = "''libdir'LIBSSL.OBJ"
 | 
			
		||||
$   libmap = "''libdir'LIBSSL.MAP"
 | 
			
		||||
$   libgoal= "''libdir'LIBSSL.EXE"
 | 
			
		||||
$   libref = "[.''ARCH'.EXE.CRYPTO]LIBCRYPTO.EXE"
 | 
			
		||||
$   libdir = "[.''ARCHD'.EXE.SSL]"
 | 
			
		||||
$   libmar = "''libdir'SSL_LIBSSL_''shr'.MAR"
 | 
			
		||||
$   libolb = "''libdir'SSL_LIBSSL''lib32'.OLB"
 | 
			
		||||
$   libopt = "''libdir'SSL_LIBSSL_''shr'.OPT"
 | 
			
		||||
$   libobj = "''libdir'SSL_LIBSSL_''shr'.OBJ"
 | 
			
		||||
$   libmap = "''libdir'SSL_LIBSSL_''shr'.MAP"
 | 
			
		||||
$   libgoal= "''libdir'SSL_LIBSSL_''shr'.EXE"
 | 
			
		||||
$   libref = "[.''ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO_''shr'.EXE"
 | 
			
		||||
$   libvec = "LIBSSL"
 | 
			
		||||
$   gosub create_vax_shr
 | 
			
		||||
$   if f$search( libolb) .nes. "" then gosub create_vax_shr
 | 
			
		||||
$ else
 | 
			
		||||
$   libid  = "Crypto"
 | 
			
		||||
$   libnum = "[.UTIL]LIBEAY.NUM"
 | 
			
		||||
$   libdir = "[.''ARCHD'.EXE.CRYPTO]"
 | 
			
		||||
$   libolb = "''libdir'SSL_LIBCRYPTO''lib32'.OLB"
 | 
			
		||||
$   libopt = "''libdir'SSL_LIBCRYPTO_''shr'.OPT"
 | 
			
		||||
$   libmap = "''libdir'SSL_LIBCRYPTO_''shr'.MAP"
 | 
			
		||||
$   libgoal= "''libdir'SSL_LIBCRYPTO_''shr'.EXE"
 | 
			
		||||
$   libref = ""
 | 
			
		||||
$   if f$search( libolb) .nes. "" then gosub create_nonvax_shr
 | 
			
		||||
$   libid  = "SSL"
 | 
			
		||||
$   libnum = "[.UTIL]SSLEAY.NUM"
 | 
			
		||||
$   libdir = "[.''ARCHD'.EXE.SSL]"
 | 
			
		||||
$   libolb = "''libdir'SSL_LIBSSL''lib32'.OLB"
 | 
			
		||||
$   libopt = "''libdir'SSL_LIBSSL_''shr'.OPT"
 | 
			
		||||
$   libmap = "''libdir'SSL_LIBSSL_''shr'.MAP"
 | 
			
		||||
$   libgoal= "''libdir'SSL_LIBSSL_''shr'.EXE"
 | 
			
		||||
$   libref = "[.''ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO_''shr'.EXE"
 | 
			
		||||
$   if f$search( libolb) .nes. "" then gosub create_nonvax_shr
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$ tidy:
 | 
			
		||||
$!
 | 
			
		||||
$! Close any open files.
 | 
			
		||||
$!
 | 
			
		||||
$ if (f$trnlnm( "libnum", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
 | 
			
		||||
   close libnum
 | 
			
		||||
$!
 | 
			
		||||
$ if (f$trnlnm( "mar", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
 | 
			
		||||
   close mar
 | 
			
		||||
$!
 | 
			
		||||
$ if (f$trnlnm( "opt", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
 | 
			
		||||
   close opt
 | 
			
		||||
$!
 | 
			
		||||
$ if (f$trnlnm( "vf", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
 | 
			
		||||
   close vf
 | 
			
		||||
$!
 | 
			
		||||
$! Restore the original default device:[directory].
 | 
			
		||||
$!
 | 
			
		||||
$ set default 'def_orig'
 | 
			
		||||
$ exit
 | 
			
		||||
$
 | 
			
		||||
$! ----- Soubroutines to build the shareable libraries
 | 
			
		||||
$! ----- Subroutines to build the shareable libraries
 | 
			
		||||
$! For each supported architecture, there's a main shareable library
 | 
			
		||||
$! creator, which is called from the main code above.
 | 
			
		||||
$! The creator will define a number of variables to tell the next levels of
 | 
			
		||||
@@ -111,9 +192,9 @@ $! ----- Subroutines for non-VAX
 | 
			
		||||
$! -----
 | 
			
		||||
$! The creator routine
 | 
			
		||||
$ create_nonvax_shr:
 | 
			
		||||
$   open/write opt 'libopt'
 | 
			
		||||
$   open /write opt 'libopt'
 | 
			
		||||
$   write opt "identification=""",libid," ",libverstr,""""
 | 
			
		||||
$   write opt libolb,"/lib"
 | 
			
		||||
$   write opt libolb, " /library"
 | 
			
		||||
$   if libref .nes. "" then write opt libref,"/SHARE"
 | 
			
		||||
$   write opt "SYMBOL_VECTOR=(-"
 | 
			
		||||
$   libfirstentry := true
 | 
			
		||||
@@ -124,7 +205,8 @@ $   gosub read_func_num
 | 
			
		||||
$   write opt ")"
 | 
			
		||||
$   write opt "GSMATCH=",libvmatch,",",libver
 | 
			
		||||
$   close opt
 | 
			
		||||
$   link/map='libmap'/full/share='libgoal' 'libopt'/option
 | 
			
		||||
$   link /map = 'libmap' /full /share = 'libgoal' 'libopt' /options -
 | 
			
		||||
     'zlib_lib'
 | 
			
		||||
$   return
 | 
			
		||||
$
 | 
			
		||||
$! The record writer routine
 | 
			
		||||
@@ -158,7 +240,7 @@ $! ----- Subroutines for VAX
 | 
			
		||||
$! -----
 | 
			
		||||
$! The creator routine
 | 
			
		||||
$ create_vax_shr:
 | 
			
		||||
$   open/write mar 'libmar'
 | 
			
		||||
$   open /write mar 'libmar'
 | 
			
		||||
$   type sys$input:/out=mar:
 | 
			
		||||
;
 | 
			
		||||
; Transfer vector for VAX shareable image
 | 
			
		||||
@@ -193,10 +275,10 @@ $!   libwriter := write_vax_vtransfer_entry
 | 
			
		||||
$!   gosub read_func_num
 | 
			
		||||
$   write mar "	.END"
 | 
			
		||||
$   close mar
 | 
			
		||||
$   open/write opt 'libopt'
 | 
			
		||||
$   open /write opt 'libopt'
 | 
			
		||||
$   write opt "identification=""",libid," ",libverstr,""""
 | 
			
		||||
$   write opt libobj
 | 
			
		||||
$   write opt libolb,"/lib"
 | 
			
		||||
$   write opt libolb, " /library"
 | 
			
		||||
$   if libref .nes. "" then write opt libref,"/SHARE"
 | 
			
		||||
$   type sys$input:/out=opt:
 | 
			
		||||
!
 | 
			
		||||
@@ -215,7 +297,8 @@ $   libwriter := write_vax_psect_attr
 | 
			
		||||
$   gosub read_func_num
 | 
			
		||||
$   close opt
 | 
			
		||||
$   macro/obj='libobj' 'libmar'
 | 
			
		||||
$   link/map='libmap'/full/share='libgoal' 'libopt'/option
 | 
			
		||||
$   link /map = 'libmap' /full /share = 'libgoal' 'libopt' /options -
 | 
			
		||||
     'zlib_lib'
 | 
			
		||||
$   return
 | 
			
		||||
$
 | 
			
		||||
$! The record writer routine for VAX functions
 | 
			
		||||
@@ -237,9 +320,9 @@ $   return
 | 
			
		||||
$
 | 
			
		||||
$! ----- Common subroutines
 | 
			
		||||
$! -----
 | 
			
		||||
$! The .num file reader.  This one has great responsability.
 | 
			
		||||
$! The .num file reader.  This one has great responsibility.
 | 
			
		||||
$ read_func_num:
 | 
			
		||||
$   open libnum 'libnum'
 | 
			
		||||
$   open /read libnum 'libnum'
 | 
			
		||||
$   goto read_nums
 | 
			
		||||
$
 | 
			
		||||
$ read_nums:
 | 
			
		||||
@@ -247,27 +330,30 @@ $   libentrynum=0
 | 
			
		||||
$   liblastentry:=false
 | 
			
		||||
$   entrycount=0
 | 
			
		||||
$   loop:
 | 
			
		||||
$     read/end=loop_end/err=loop_end libnum line
 | 
			
		||||
$     entrynum=f$int(f$element(1," ",f$edit(line,"COMPRESS,TRIM")))
 | 
			
		||||
$     entryinfo=f$element(2," ",f$edit(line,"COMPRESS,TRIM"))
 | 
			
		||||
$     curentry=f$element(0," ",f$edit(line,"COMPRESS,TRIM"))
 | 
			
		||||
$     info_exist=f$element(0,":",entryinfo)
 | 
			
		||||
$     info_platforms=","+f$element(1,":",entryinfo)+","
 | 
			
		||||
$     info_kind=f$element(2,":",entryinfo)
 | 
			
		||||
$     info_algorithms=","+f$element(3,":",entryinfo)+","
 | 
			
		||||
$     read /end=loop_end /err=loop_end libnum line
 | 
			
		||||
$     lin = f$edit( line, "COMPRESS,TRIM")
 | 
			
		||||
$!    Skip a "#" comment line.
 | 
			
		||||
$     if (f$extract( 0, 1, lin) .eqs. "#") then goto loop
 | 
			
		||||
$     entrynum = f$int(f$element( 1, " ", lin))
 | 
			
		||||
$     entryinfo = f$element( 2, " ", lin)
 | 
			
		||||
$     curentry = f$element( 0, " ", lin)
 | 
			
		||||
$     info_exist = f$element( 0, ":", entryinfo)
 | 
			
		||||
$     info_platforms = ","+ f$element(1, ":", entryinfo)+ ","
 | 
			
		||||
$     info_kind = f$element( 2, ":", entryinfo)
 | 
			
		||||
$     info_algorithms = ","+ f$element( 3, ":", entryinfo)+ ","
 | 
			
		||||
$     if info_exist .eqs. "NOEXIST" then goto loop
 | 
			
		||||
$     truesum = 0
 | 
			
		||||
$     falsesum = 0
 | 
			
		||||
$     negatives = 1
 | 
			
		||||
$     plat_i = 0
 | 
			
		||||
$     loop1:
 | 
			
		||||
$       plat_entry = f$element(plat_i,",",info_platforms)
 | 
			
		||||
$       plat_entry = f$element( plat_i, ",", info_platforms)
 | 
			
		||||
$       plat_i = plat_i + 1
 | 
			
		||||
$       if plat_entry .eqs. "" then goto loop1
 | 
			
		||||
$       if plat_entry .nes. ","
 | 
			
		||||
$       then
 | 
			
		||||
$         if f$extract(0,1,plat_entry) .nes. "!" then negatives = 0
 | 
			
		||||
$         if f$getsyi("CPU") .lt. 128
 | 
			
		||||
$         if (arch_vax)
 | 
			
		||||
$         then
 | 
			
		||||
$           if plat_entry .eqs. "EXPORT_VAR_AS_FUNCTION" then -
 | 
			
		||||
$             truesum = truesum + 1
 | 
			
		||||
@@ -276,6 +362,7 @@ $             falsesum = falsesum + 1
 | 
			
		||||
$         endif
 | 
			
		||||
$!
 | 
			
		||||
$         if ((plat_entry .eqs. "VMS") .or. -
 | 
			
		||||
            ((plat_entry .eqs. "ZLIB") .and. (ZLIB .nes. "")) .or. -
 | 
			
		||||
            (arch_vax .and. (plat_entry .eqs. "VMSVAX"))) then -
 | 
			
		||||
            truesum = truesum + 1
 | 
			
		||||
$!
 | 
			
		||||
@@ -301,8 +388,7 @@ $	alg_i = alg_i + 1
 | 
			
		||||
$       if alg_entry .eqs. "" then goto loop2
 | 
			
		||||
$       if alg_entry .nes. ","
 | 
			
		||||
$       then
 | 
			
		||||
$         if alg_entry .eqs. "KRB5" then goto loop ! Special for now
 | 
			
		||||
$	  if alg_entry .eqs. "STATIC_ENGINE" then goto loop ! Special for now
 | 
			
		||||
$	  if disabled_algorithms - ("," + alg_entry + ",") .nes disabled_algorithms then goto loop
 | 
			
		||||
$         if f$trnlnm("OPENSSL_NO_"+alg_entry) .nes. "" then goto loop
 | 
			
		||||
$	  goto loop2
 | 
			
		||||
$       endif
 | 
			
		||||
@@ -345,7 +431,7 @@ $
 | 
			
		||||
$! The version number reader
 | 
			
		||||
$ read_version_info:
 | 
			
		||||
$   libver = ""
 | 
			
		||||
$   open/read vf [.CRYPTO]OPENSSLV.H
 | 
			
		||||
$   open /read vf [.CRYPTO]OPENSSLV.H
 | 
			
		||||
$   loop_rvi:
 | 
			
		||||
$     read/err=endloop_rvi/end=endloop_rvi vf rvi_line
 | 
			
		||||
$     if rvi_line - "SHLIB_VERSION_NUMBER """ .eqs. rvi_line then -
 | 
			
		||||
@@ -369,3 +455,22 @@ $     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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										108
									
								
								VMS/openssl_startup.com
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										108
									
								
								VMS/openssl_startup.com
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,108 @@
 | 
			
		||||
$!
 | 
			
		||||
$! Startup file for OpenSSL 1.x.
 | 
			
		||||
$!
 | 
			
		||||
$! 2011-03-05 SMS.
 | 
			
		||||
$!
 | 
			
		||||
$! This procedure must reside in the OpenSSL installation directory.
 | 
			
		||||
$! It will fail if it is copied to a different location.
 | 
			
		||||
$!
 | 
			
		||||
$! P1  qualifier(s) for DEFINE.  For example, "/SYSTEM" to get the
 | 
			
		||||
$!     logical names defined in the system logical name table.
 | 
			
		||||
$!
 | 
			
		||||
$! P2  "64", to use executables which were built with 64-bit pointers.
 | 
			
		||||
$!
 | 
			
		||||
$! Good (default) and bad status values.
 | 
			
		||||
$!
 | 
			
		||||
$ status =    %x00010001 ! RMS$_NORMAL, normal successful completion.
 | 
			
		||||
$ rms_e_fnf = %x00018292 ! RMS$_FNF, file not found.
 | 
			
		||||
$!
 | 
			
		||||
$! Prepare for problems.
 | 
			
		||||
$!
 | 
			
		||||
$ orig_dev_dir = f$environment( "DEFAULT")
 | 
			
		||||
$ on control_y then goto clean_up
 | 
			
		||||
$ on error then goto clean_up
 | 
			
		||||
$!
 | 
			
		||||
$! Determine hardware architecture.
 | 
			
		||||
$!
 | 
			
		||||
$ if (f$getsyi( "cpu") .lt. 128)
 | 
			
		||||
$ then
 | 
			
		||||
$   arch_name = "VAX"
 | 
			
		||||
$ else
 | 
			
		||||
$   arch_name = f$edit( f$getsyi( "arch_name"), "upcase")
 | 
			
		||||
$   if (arch_name .eqs. "") then arch_name = "UNK"
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$ if (p2 .eqs. "64")
 | 
			
		||||
$ then
 | 
			
		||||
$   arch_name_exe = arch_name+ "_64"
 | 
			
		||||
$ else
 | 
			
		||||
$   arch_name_exe = arch_name
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$! Derive the OpenSSL installation device:[directory] from the location
 | 
			
		||||
$! of this command procedure.
 | 
			
		||||
$!
 | 
			
		||||
$ proc = f$environment( "procedure")
 | 
			
		||||
$ proc_dev_dir = f$parse( "A.;", proc, , , "no_conceal") - "A.;"
 | 
			
		||||
$ proc_dev = f$parse( proc_dev_dir, , , "device", "syntax_only")
 | 
			
		||||
$ proc_dir = f$parse( proc_dev_dir, , , "directory", "syntax_only") - -
 | 
			
		||||
   ".][000000"- "[000000."- "]["- "["- "]"
 | 
			
		||||
$ proc_dev_dir = proc_dev+ "["+ proc_dir+ "]"
 | 
			
		||||
$ set default 'proc_dev_dir'
 | 
			
		||||
$ set default [-]
 | 
			
		||||
$ ossl_dev_dir = f$environment( "default")
 | 
			
		||||
$!
 | 
			
		||||
$! Check existence of expected directories (to see if this procedure has
 | 
			
		||||
$! been moved away from its proper place).
 | 
			
		||||
$!
 | 
			
		||||
$ if ((f$search( "certs.dir;1") .eqs. "") .or. -
 | 
			
		||||
   (f$search( "include.dir;1") .eqs. "") .or. -
 | 
			
		||||
   (f$search( "private.dir;1") .eqs. "") .or. -
 | 
			
		||||
   (f$search( "vms.dir;1") .eqs. ""))
 | 
			
		||||
$ then
 | 
			
		||||
$    write sys$output -
 | 
			
		||||
      "   Can't find expected common OpenSSL directories in:"
 | 
			
		||||
$    write sys$output "   ''ossl_dev_dir'"
 | 
			
		||||
$    status = rms_e_fnf
 | 
			
		||||
$    goto clean_up
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$ if ((f$search( "''arch_name_exe'_exe.dir;1") .eqs. "") .or. -
 | 
			
		||||
   (f$search( "''arch_name'_lib.dir;1") .eqs. ""))
 | 
			
		||||
$ then
 | 
			
		||||
$    write sys$output -
 | 
			
		||||
      "   Can't find expected architecture-specific OpenSSL directories in:"
 | 
			
		||||
$    write sys$output "   ''ossl_dev_dir'"
 | 
			
		||||
$    status = rms_e_fnf
 | 
			
		||||
$    goto clean_up
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$! All seems well (enough).  Define the OpenSSL logical names.
 | 
			
		||||
$!
 | 
			
		||||
$ ossl_root = ossl_dev_dir- "]"+ ".]"
 | 
			
		||||
$ define /translation_attributes = concealed /nolog'p1 SSLROOT 'ossl_root'
 | 
			
		||||
$ define /nolog 'p1' SSLCERTS     sslroot:[certs]
 | 
			
		||||
$ define /nolog 'p1' SSLINCLUDE   sslroot:[include]
 | 
			
		||||
$ define /nolog 'p1' SSLPRIVATE   sslroot:[private]
 | 
			
		||||
$ define /nolog 'p1' SSLEXE       sslroot:['arch_name_exe'_exe]
 | 
			
		||||
$ define /nolog 'p1' SSLLIB       sslroot:['arch_name'_lib]
 | 
			
		||||
$!
 | 
			
		||||
$! Defining OPENSSL lets a C program use "#include <openssl/{foo}.h>":
 | 
			
		||||
$ define /nolog 'p1' OPENSSL      SSLINCLUDE:
 | 
			
		||||
$!
 | 
			
		||||
$! Run a site-specific procedure, if it exists.
 | 
			
		||||
$!
 | 
			
		||||
$ if f$search( "sslroot:[vms]openssl_systartup.com") .nes."" then -
 | 
			
		||||
   @ sslroot:[vms]openssl_systartup.com
 | 
			
		||||
$!
 | 
			
		||||
$! Restore the original default dev:[dir] (if known).
 | 
			
		||||
$!
 | 
			
		||||
$ clean_up:
 | 
			
		||||
$!
 | 
			
		||||
$ if (f$type( orig_dev_dir) .nes. "")
 | 
			
		||||
$ then
 | 
			
		||||
$    set default 'orig_dev_dir'
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$ EXIT 'status'
 | 
			
		||||
$!
 | 
			
		||||
							
								
								
									
										20
									
								
								VMS/openssl_undo.com
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								VMS/openssl_undo.com
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
$!
 | 
			
		||||
$! Deassign OpenSSL logical names.
 | 
			
		||||
$!
 | 
			
		||||
$ call deass "OPENSSL" "''p1'"
 | 
			
		||||
$ call deass "SSLCERTS" "''p1'"
 | 
			
		||||
$ call deass "SSLEXE" "''p1'"
 | 
			
		||||
$ call deass "SSLINCLUDE" "''p1'"
 | 
			
		||||
$ call deass "SSLLIB" "''p1'"
 | 
			
		||||
$ call deass "SSLPRIVATE" "''p1'"
 | 
			
		||||
$ call deass "SSLROOT" "''p1'"
 | 
			
		||||
$!
 | 
			
		||||
$ exit
 | 
			
		||||
$!
 | 
			
		||||
$deass: subroutine
 | 
			
		||||
$ if (f$trnlnm( p1) .nes. "")
 | 
			
		||||
$ then
 | 
			
		||||
$    deassign 'p2' 'p1'
 | 
			
		||||
$ endif
 | 
			
		||||
$ endsubroutine
 | 
			
		||||
$!
 | 
			
		||||
							
								
								
									
										100
									
								
								apps/CA.com
									
									
									
									
									
								
							
							
						
						
									
										100
									
								
								apps/CA.com
									
									
									
									
									
								
							@@ -37,14 +37,25 @@ $ VERIFY = openssl + " verify"
 | 
			
		||||
$ X509   = openssl + " x509"
 | 
			
		||||
$ PKCS12 = openssl + " pkcs12"
 | 
			
		||||
$ echo   = "write sys$Output"
 | 
			
		||||
$ RET = 1
 | 
			
		||||
$!
 | 
			
		||||
$ s = F$PARSE(F$ENVIRONMENT("DEFAULT"),"[]") - "].;"
 | 
			
		||||
$ CATOP  := 's'.demoCA
 | 
			
		||||
$ CAKEY  := ]cakey.pem
 | 
			
		||||
$ CACERT := ]cacert.pem
 | 
			
		||||
$! 2010-12-20 SMS.
 | 
			
		||||
$! Use a concealed logical name to reduce command line lengths, to
 | 
			
		||||
$! avoid DCL errors on VAX:
 | 
			
		||||
$!     %DCL-W-TKNOVF, command element is too long - shorten
 | 
			
		||||
$! (Path segments like "openssl-1_0_1-stable-SNAP-20101217" accumulate
 | 
			
		||||
$! quickly.)
 | 
			
		||||
$!
 | 
			
		||||
$ CATOP = F$PARSE( F$ENVIRONMENT( "DEFAULT"), "[]")- "].;"+ ".demoCA.]"
 | 
			
		||||
$ define /translation_attributes = concealed CATOP 'CATOP'
 | 
			
		||||
$!
 | 
			
		||||
$ on error then goto clean_up
 | 
			
		||||
$ on control_y then goto clean_up
 | 
			
		||||
$!
 | 
			
		||||
$ CAKEY  = "CATOP:[private]cakey.pem"
 | 
			
		||||
$ CACERT = "CATOP:[000000]cacert.pem"
 | 
			
		||||
$
 | 
			
		||||
$ __INPUT := SYS$COMMAND
 | 
			
		||||
$ RET = 1
 | 
			
		||||
$!
 | 
			
		||||
$ i = 1
 | 
			
		||||
$opt_loop:
 | 
			
		||||
@@ -55,7 +66,7 @@ $
 | 
			
		||||
$ IF (prog_opt .EQS. "?" .OR. prog_opt .EQS. "-h" .OR. prog_opt .EQS. "-help") 
 | 
			
		||||
$ THEN
 | 
			
		||||
$   echo "usage: CA -newcert|-newreq|-newca|-sign|-verify" 
 | 
			
		||||
$   exit
 | 
			
		||||
$   goto clean_up
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$ IF (prog_opt .EQS. "-input")
 | 
			
		||||
@@ -69,7 +80,7 @@ $!
 | 
			
		||||
$ IF (prog_opt .EQS. "-newcert")
 | 
			
		||||
$ THEN
 | 
			
		||||
$   ! Create a certificate.
 | 
			
		||||
$   DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$   DEFINE /USER_MODE SYS$INPUT '__INPUT'
 | 
			
		||||
$   REQ -new -x509 -keyout newreq.pem -out newreq.pem 'DAYS'
 | 
			
		||||
$   RET=$STATUS
 | 
			
		||||
$   echo "Certificate (and private key) is in newreq.pem"
 | 
			
		||||
@@ -79,7 +90,7 @@ $!
 | 
			
		||||
$ IF (prog_opt .EQS. "-newreq")
 | 
			
		||||
$ THEN
 | 
			
		||||
$   ! Create a certificate request
 | 
			
		||||
$   DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$   DEFINE /USER_MODE SYS$INPUT '__INPUT'
 | 
			
		||||
$   REQ -new -keyout newreq.pem -out newreq.pem 'DAYS'
 | 
			
		||||
$   RET=$STATUS
 | 
			
		||||
$   echo "Request (and private key) is in newreq.pem"
 | 
			
		||||
@@ -90,41 +101,40 @@ $ IF (prog_opt .EQS. "-newca")
 | 
			
		||||
$ THEN
 | 
			
		||||
$   ! If explicitly asked for or it doesn't exist then setup the directory
 | 
			
		||||
$   ! structure that Eric likes to manage things.
 | 
			
		||||
$   IF F$SEARCH(CATOP+"]serial.") .EQS. ""
 | 
			
		||||
$   IF F$SEARCH( "CATOP:[000000]serial.") .EQS. ""
 | 
			
		||||
$   THEN
 | 
			
		||||
$     CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP']
 | 
			
		||||
$     CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.certs]
 | 
			
		||||
$     CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.crl]
 | 
			
		||||
$     CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.newcerts]
 | 
			
		||||
$     CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.private]
 | 
			
		||||
$     CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[000000]
 | 
			
		||||
$     CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[certs]
 | 
			
		||||
$     CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[crl]
 | 
			
		||||
$     CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[newcerts]
 | 
			
		||||
$     CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[private]
 | 
			
		||||
$
 | 
			
		||||
$     OPEN   /WRITE ser_file 'CATOP']serial. 
 | 
			
		||||
$     OPEN /WRITE ser_file CATOP:[000000]serial. 
 | 
			
		||||
$     WRITE ser_file "01"
 | 
			
		||||
$     CLOSE ser_file
 | 
			
		||||
$     APPEND/NEW NL: 'CATOP']index.txt
 | 
			
		||||
$     APPEND /NEW_VERSION NL: CATOP:[000000]index.txt
 | 
			
		||||
$
 | 
			
		||||
$     ! The following is to make sure access() doesn't get confused.  It
 | 
			
		||||
$     ! really needs one file in the directory to give correct answers...
 | 
			
		||||
$     COPY NLA0: 'CATOP'.certs].;
 | 
			
		||||
$     COPY NLA0: 'CATOP'.crl].;
 | 
			
		||||
$     COPY NLA0: 'CATOP'.newcerts].;
 | 
			
		||||
$     COPY NLA0: 'CATOP'.private].;
 | 
			
		||||
$     COPY NLA0: CATOP:[certs].;
 | 
			
		||||
$     COPY NLA0: CATOP:[crl].;
 | 
			
		||||
$     COPY NLA0: CATOP:[newcerts].;
 | 
			
		||||
$     COPY NLA0: CATOP:[private].;
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$   IF F$SEARCH(CATOP+".private"+CAKEY) .EQS. ""
 | 
			
		||||
$   IF F$SEARCH( CAKEY) .EQS. ""
 | 
			
		||||
$   THEN
 | 
			
		||||
$     READ '__INPUT' FILE -
 | 
			
		||||
	   /PROMT="CA certificate filename (or enter to create)"
 | 
			
		||||
$     IF F$SEARCH(FILE) .NES. ""
 | 
			
		||||
       /PROMPT="CA certificate filename (or enter to create): "
 | 
			
		||||
$     IF (FILE .NES. "") .AND. (F$SEARCH(FILE) .NES. "")
 | 
			
		||||
$     THEN
 | 
			
		||||
$       COPY 'FILE' 'CATOP'.private'CAKEY'
 | 
			
		||||
$	RET=$STATUS
 | 
			
		||||
$       COPY 'FILE' 'CAKEY'
 | 
			
		||||
$       RET=$STATUS
 | 
			
		||||
$     ELSE
 | 
			
		||||
$       echo "Making CA certificate ..."
 | 
			
		||||
$       DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$       REQ -new -x509 -keyout 'CATOP'.private'CAKEY' -
 | 
			
		||||
		       -out 'CATOP''CACERT' 'DAYS'
 | 
			
		||||
$	RET=$STATUS
 | 
			
		||||
$       DEFINE /USER_MODE SYS$INPUT '__INPUT'
 | 
			
		||||
$       REQ -new -x509 -keyout 'CAKEY' -out 'CACERT' 'DAYS'
 | 
			
		||||
$       RET=$STATUS
 | 
			
		||||
$     ENDIF
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$   GOTO opt_loop_continue
 | 
			
		||||
@@ -135,16 +145,16 @@ $ THEN
 | 
			
		||||
$   i = i + 1
 | 
			
		||||
$   cname = P'i'
 | 
			
		||||
$   IF cname .EQS. "" THEN cname = "My certificate"
 | 
			
		||||
$   PKCS12 -in newcert.pem -inkey newreq.pem -certfile 'CATOP''CACERT -
 | 
			
		||||
	   -out newcert.p12 -export -name "''cname'"
 | 
			
		||||
$   PKCS12 -in newcert.pem -inkey newreq.pem -certfile 'CACERT' -
 | 
			
		||||
     -out newcert.p12 -export -name "''cname'"
 | 
			
		||||
$   RET=$STATUS
 | 
			
		||||
$   exit RET
 | 
			
		||||
$   goto clean_up
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$ IF (prog_opt .EQS. "-xsign")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$   DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$   DEFINE /USER_MODE SYS$INPUT '__INPUT'
 | 
			
		||||
$   CA -policy policy_anything -infiles newreq.pem
 | 
			
		||||
$   RET=$STATUS
 | 
			
		||||
$   GOTO opt_loop_continue
 | 
			
		||||
@@ -153,7 +163,7 @@ $!
 | 
			
		||||
$ IF ((prog_opt .EQS. "-sign") .OR. (prog_opt .EQS. "-signreq"))
 | 
			
		||||
$ THEN
 | 
			
		||||
$!   
 | 
			
		||||
$   DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$   DEFINE /USER_MODE SYS$INPUT '__INPUT'
 | 
			
		||||
$   CA -policy policy_anything -out newcert.pem -infiles newreq.pem
 | 
			
		||||
$   RET=$STATUS
 | 
			
		||||
$   type newcert.pem
 | 
			
		||||
@@ -165,9 +175,9 @@ $ IF (prog_opt .EQS. "-signcert")
 | 
			
		||||
$  THEN
 | 
			
		||||
$!   
 | 
			
		||||
$   echo "Cert passphrase will be requested twice - bug?"
 | 
			
		||||
$   DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$   DEFINE /USER_MODE SYS$INPUT '__INPUT'
 | 
			
		||||
$   X509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem
 | 
			
		||||
$   DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$   DEFINE /USER_MODE SYS$INPUT '__INPUT'
 | 
			
		||||
$   CA -policy policy_anything -out newcert.pem -infiles tmp.pem
 | 
			
		||||
y
 | 
			
		||||
y
 | 
			
		||||
@@ -182,17 +192,17 @@ $!
 | 
			
		||||
$   i = i + 1
 | 
			
		||||
$   IF (p'i' .EQS. "")
 | 
			
		||||
$   THEN
 | 
			
		||||
$     DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$     VERIFY "-CAfile" 'CATOP''CACERT' newcert.pem
 | 
			
		||||
$     DEFINE /USER_MODE SYS$INPUT '__INPUT'
 | 
			
		||||
$     VERIFY "-CAfile" 'CACERT' newcert.pem
 | 
			
		||||
$   ELSE
 | 
			
		||||
$     j = i
 | 
			
		||||
$    verify_opt_loop:
 | 
			
		||||
$     IF j .GT. 8 THEN GOTO verify_opt_loop_end
 | 
			
		||||
$     IF p'j' .NES. ""
 | 
			
		||||
$     THEN 
 | 
			
		||||
$       DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$       DEFINE /USER_MODE SYS$INPUT '__INPUT'
 | 
			
		||||
$       __tmp = p'j'
 | 
			
		||||
$       VERIFY "-CAfile" 'CATOP''CACERT' '__tmp'
 | 
			
		||||
$       VERIFY "-CAfile" 'CACERT' '__tmp'
 | 
			
		||||
$       tmp=$STATUS
 | 
			
		||||
$       IF tmp .NE. 0 THEN RET=tmp
 | 
			
		||||
$     ENDIF
 | 
			
		||||
@@ -208,8 +218,8 @@ $ IF (prog_opt .NES. "")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!   
 | 
			
		||||
$   echo "Unknown argument ''prog_opt'"
 | 
			
		||||
$   
 | 
			
		||||
$   EXIT 3
 | 
			
		||||
$   RET = 3
 | 
			
		||||
$   goto clean_up
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$
 | 
			
		||||
$opt_loop_continue:
 | 
			
		||||
@@ -217,4 +227,10 @@ $ i = i + 1
 | 
			
		||||
$ GOTO opt_loop
 | 
			
		||||
$
 | 
			
		||||
$opt_loop_end:
 | 
			
		||||
$!
 | 
			
		||||
$clean_up:
 | 
			
		||||
$!
 | 
			
		||||
$ if f$trnlnm( "CATOP", "LNM$PROCESS") .nes. "" then -
 | 
			
		||||
   deassign /process CATOP
 | 
			
		||||
$!
 | 
			
		||||
$ EXIT 'RET'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										167
									
								
								apps/Makefile
									
									
									
									
									
								
							
							
						
						
									
										167
									
								
								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)
 | 
			
		||||
 | 
			
		||||
@@ -153,6 +153,8 @@ $(EXE): progs.h $(E_OBJ) $(PROGRAM).o $(DLIBCRYPTO) $(DLIBSSL)
 | 
			
		||||
	$(RM) $(EXE)
 | 
			
		||||
	shlib_target=; if [ -n "$(SHARED_LIBS)" ]; then \
 | 
			
		||||
		shlib_target="$(SHLIB_TARGET)"; \
 | 
			
		||||
	elif [ -n "$(FIPSCANLIB)" ]; then \
 | 
			
		||||
	  FIPSLD_CC="$(CC)"; CC=$(FIPSDIR)/bin/fipsld; export CC FIPSLD_CC; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	LIBRARIES="$(LIBSSL) $(LIBKRB5) $(LIBCRYPTO)" ; \
 | 
			
		||||
	$(MAKE) -f $(TOP)/Makefile.shared -e \
 | 
			
		||||
@@ -245,13 +247,13 @@ ciphers.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
ciphers.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
ciphers.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
ciphers.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
ciphers.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
ciphers.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
ciphers.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
ciphers.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
ciphers.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
ciphers.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
ciphers.o: ciphers.c
 | 
			
		||||
ciphers.o: ../include/openssl/sha.h ../include/openssl/srtp.h
 | 
			
		||||
ciphers.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
ciphers.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
ciphers.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
ciphers.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
ciphers.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
ciphers.o: ../include/openssl/x509v3.h apps.h ciphers.c
 | 
			
		||||
cms.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
cms.o: ../include/openssl/buffer.h ../include/openssl/cms.h
 | 
			
		||||
cms.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -427,13 +429,13 @@ engine.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
engine.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
engine.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
engine.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
engine.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
engine.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
engine.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
engine.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
engine.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
engine.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
engine.o: engine.c
 | 
			
		||||
engine.o: ../include/openssl/sha.h ../include/openssl/srtp.h
 | 
			
		||||
engine.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
engine.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
engine.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
engine.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
engine.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
engine.o: ../include/openssl/x509v3.h apps.h engine.c
 | 
			
		||||
errstr.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
errstr.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
errstr.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -448,13 +450,13 @@ errstr.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
errstr.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
errstr.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
errstr.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
errstr.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
errstr.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
errstr.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
errstr.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
errstr.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
errstr.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
errstr.o: errstr.c
 | 
			
		||||
errstr.o: ../include/openssl/sha.h ../include/openssl/srtp.h
 | 
			
		||||
errstr.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
errstr.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
errstr.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
errstr.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
errstr.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
errstr.o: ../include/openssl/x509v3.h apps.h errstr.c
 | 
			
		||||
gendh.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
gendh.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
gendh.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -556,12 +558,12 @@ ocsp.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
ocsp.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
ocsp.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
 | 
			
		||||
ocsp.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
ocsp.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
ocsp.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
ocsp.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
ocsp.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
ocsp.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
ocsp.o: ../include/openssl/x509v3.h apps.h ocsp.c
 | 
			
		||||
ocsp.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
 | 
			
		||||
ocsp.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
ocsp.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
ocsp.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
ocsp.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
ocsp.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h ocsp.c
 | 
			
		||||
openssl.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
openssl.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
openssl.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -575,8 +577,9 @@ openssl.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
 | 
			
		||||
openssl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
openssl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
openssl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
openssl.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
openssl.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
openssl.o: ../include/openssl/pqueue.h ../include/openssl/rand.h
 | 
			
		||||
openssl.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
openssl.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
 | 
			
		||||
openssl.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
openssl.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
openssl.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
@@ -791,12 +794,13 @@ s_cb.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
s_cb.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
s_cb.o: ../include/openssl/pqueue.h ../include/openssl/rand.h
 | 
			
		||||
s_cb.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
s_cb.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
s_cb.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
s_cb.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
s_cb.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
s_cb.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
s_cb.o: ../include/openssl/x509v3.h apps.h s_apps.h s_cb.c
 | 
			
		||||
s_cb.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
 | 
			
		||||
s_cb.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_cb.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_cb.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
s_cb.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
s_cb.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
s_cb.o: s_apps.h s_cb.c
 | 
			
		||||
s_client.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
s_client.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
s_client.o: ../include/openssl/comp.h ../include/openssl/conf.h
 | 
			
		||||
@@ -812,7 +816,8 @@ 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/sha.h ../include/openssl/srp.h
 | 
			
		||||
s_client.o: ../include/openssl/srtp.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
 | 
			
		||||
@@ -836,6 +841,7 @@ 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/srp.h ../include/openssl/srtp.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
 | 
			
		||||
@@ -857,13 +863,13 @@ 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_socket.o: ../include/openssl/sha.h ../include/openssl/srtp.h
 | 
			
		||||
s_socket.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
s_socket.o: ../include/openssl/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
 | 
			
		||||
@@ -878,13 +884,13 @@ s_time.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
s_time.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
s_time.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
s_time.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
s_time.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
s_time.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_time.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_time.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
s_time.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
s_time.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
s_time.o: s_apps.h s_time.c
 | 
			
		||||
s_time.o: ../include/openssl/sha.h ../include/openssl/srtp.h
 | 
			
		||||
s_time.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
s_time.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
s_time.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
s_time.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
s_time.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
s_time.o: ../include/openssl/x509v3.h apps.h s_apps.h s_time.c
 | 
			
		||||
sess_id.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
sess_id.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
sess_id.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -899,13 +905,13 @@ sess_id.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
sess_id.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
sess_id.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
sess_id.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
sess_id.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
sess_id.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
sess_id.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
sess_id.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
sess_id.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
sess_id.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
sess_id.o: sess_id.c
 | 
			
		||||
sess_id.o: ../include/openssl/sha.h ../include/openssl/srtp.h
 | 
			
		||||
sess_id.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
sess_id.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
sess_id.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
sess_id.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
sess_id.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
sess_id.o: ../include/openssl/x509v3.h apps.h sess_id.c
 | 
			
		||||
smime.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
smime.o: ../include/openssl/buffer.h ../include/openssl/conf.h
 | 
			
		||||
smime.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
@@ -935,19 +941,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
 | 
			
		||||
@@ -964,6 +970,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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										188
									
								
								apps/app_rand.c
									
									
									
									
									
								
							
							
						
						
									
										188
									
								
								apps/app_rand.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -63,7 +63,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -115,104 +115,106 @@
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int seeded = 0;
 | 
			
		||||
static int egdsocket = 0;
 | 
			
		||||
 | 
			
		||||
int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn)
 | 
			
		||||
	{
 | 
			
		||||
	int consider_randfile = (file == NULL);
 | 
			
		||||
	char buffer[200];
 | 
			
		||||
	
 | 
			
		||||
{
 | 
			
		||||
    int consider_randfile = (file == NULL);
 | 
			
		||||
    char buffer[200];
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
	BIO_printf(bio_e,"Loading 'screen' into random state -");
 | 
			
		||||
	BIO_flush(bio_e);
 | 
			
		||||
	RAND_screen();
 | 
			
		||||
	BIO_printf(bio_e," done\n");
 | 
			
		||||
    BIO_printf(bio_e, "Loading 'screen' into random state -");
 | 
			
		||||
    BIO_flush(bio_e);
 | 
			
		||||
    RAND_screen();
 | 
			
		||||
    BIO_printf(bio_e, " done\n");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	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. */
 | 
			
		||||
		egdsocket = 1;
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
	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,"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");
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			return 0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	seeded = 1;
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
    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.
 | 
			
		||||
         */
 | 
			
		||||
        egdsocket = 1;
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
    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, "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");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    seeded = 1;
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
long app_RAND_load_files(char *name)
 | 
			
		||||
	{
 | 
			
		||||
	char *p,*n;
 | 
			
		||||
	int last;
 | 
			
		||||
	long tot=0;
 | 
			
		||||
	int egd;
 | 
			
		||||
	
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		last=0;
 | 
			
		||||
		for (p=name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++);
 | 
			
		||||
		if (*p == '\0') last=1;
 | 
			
		||||
		*p='\0';
 | 
			
		||||
		n=name;
 | 
			
		||||
		name=p+1;
 | 
			
		||||
		if (*n == '\0') break;
 | 
			
		||||
{
 | 
			
		||||
    char *p, *n;
 | 
			
		||||
    int last;
 | 
			
		||||
    long tot = 0;
 | 
			
		||||
    int egd;
 | 
			
		||||
 | 
			
		||||
		egd=RAND_egd(n);
 | 
			
		||||
		if (egd > 0)
 | 
			
		||||
			tot+=egd;
 | 
			
		||||
		else
 | 
			
		||||
			tot+=RAND_load_file(n,-1);
 | 
			
		||||
		if (last) break;
 | 
			
		||||
		}
 | 
			
		||||
	if (tot > 512)
 | 
			
		||||
		app_RAND_allow_write_file();
 | 
			
		||||
	return(tot);
 | 
			
		||||
	}
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        last = 0;
 | 
			
		||||
        for (p = name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++) ;
 | 
			
		||||
        if (*p == '\0')
 | 
			
		||||
            last = 1;
 | 
			
		||||
        *p = '\0';
 | 
			
		||||
        n = name;
 | 
			
		||||
        name = p + 1;
 | 
			
		||||
        if (*n == '\0')
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        egd = RAND_egd(n);
 | 
			
		||||
        if (egd > 0)
 | 
			
		||||
            tot += egd;
 | 
			
		||||
        else
 | 
			
		||||
            tot += RAND_load_file(n, -1);
 | 
			
		||||
        if (last)
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
    if (tot > 512)
 | 
			
		||||
        app_RAND_allow_write_file();
 | 
			
		||||
    return (tot);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int app_RAND_write_file(const char *file, BIO *bio_e)
 | 
			
		||||
	{
 | 
			
		||||
	char buffer[200];
 | 
			
		||||
	
 | 
			
		||||
	if (egdsocket || !seeded)
 | 
			
		||||
		/* If we did not manage to read the seed file,
 | 
			
		||||
		 * we should not write a low-entropy seed file back --
 | 
			
		||||
		 * it would suppress a crucial warning the next time
 | 
			
		||||
		 * we want to use it. */
 | 
			
		||||
		return 0;
 | 
			
		||||
{
 | 
			
		||||
    char buffer[200];
 | 
			
		||||
 | 
			
		||||
	if (file == NULL)
 | 
			
		||||
		file = RAND_file_name(buffer, sizeof buffer);
 | 
			
		||||
	if (file == NULL || !RAND_write_file(file))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_e,"unable to write 'random state'\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
    if (egdsocket || !seeded)
 | 
			
		||||
        /*
 | 
			
		||||
         * If we did not manage to read the seed file, we should not write a
 | 
			
		||||
         * low-entropy seed file back -- it would suppress a crucial warning
 | 
			
		||||
         * the next time we want to use it.
 | 
			
		||||
         */
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
    if (file == NULL)
 | 
			
		||||
        file = RAND_file_name(buffer, sizeof buffer);
 | 
			
		||||
    if (file == NULL || !RAND_write_file(file)) {
 | 
			
		||||
        BIO_printf(bio_e, "unable to write 'random state'\n");
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void app_RAND_allow_write_file(void)
 | 
			
		||||
	{
 | 
			
		||||
	seeded = 1;
 | 
			
		||||
	}
 | 
			
		||||
{
 | 
			
		||||
    seeded = 1;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4938
									
								
								apps/apps.c
									
									
									
									
									
								
							
							
						
						
									
										4938
									
								
								apps/apps.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										343
									
								
								apps/apps.h
									
									
									
									
									
								
							
							
						
						
									
										343
									
								
								apps/apps.h
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -63,7 +63,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -110,120 +110,119 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef HEADER_APPS_H
 | 
			
		||||
#define HEADER_APPS_H
 | 
			
		||||
# define HEADER_APPS_H
 | 
			
		||||
 | 
			
		||||
#include "e_os.h"
 | 
			
		||||
# include "e_os.h"
 | 
			
		||||
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/lhash.h>
 | 
			
		||||
#include <openssl/conf.h>
 | 
			
		||||
#include <openssl/txt_db.h>
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#include <openssl/engine.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_OCSP
 | 
			
		||||
#include <openssl/ocsp.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <openssl/ossl_typ.h>
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/lhash.h>
 | 
			
		||||
# include <openssl/conf.h>
 | 
			
		||||
# include <openssl/txt_db.h>
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#  include <openssl/engine.h>
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_OCSP
 | 
			
		||||
#  include <openssl/ocsp.h>
 | 
			
		||||
# endif
 | 
			
		||||
# include <openssl/ossl_typ.h>
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
                                       * (see e_os.h).  The string is
 | 
			
		||||
                                       * destroyed! */
 | 
			
		||||
 | 
			
		||||
#ifndef MONOLITH
 | 
			
		||||
# ifndef MONOLITH
 | 
			
		||||
 | 
			
		||||
#define MAIN(a,v)	main(a,v)
 | 
			
		||||
#  define MAIN(a,v)       main(a,v)
 | 
			
		||||
 | 
			
		||||
#ifndef NON_MAIN
 | 
			
		||||
CONF *config=NULL;
 | 
			
		||||
BIO *bio_err=NULL;
 | 
			
		||||
#else
 | 
			
		||||
#  ifndef NON_MAIN
 | 
			
		||||
CONF *config = NULL;
 | 
			
		||||
BIO *bio_err = NULL;
 | 
			
		||||
#  else
 | 
			
		||||
extern CONF *config;
 | 
			
		||||
extern BIO *bio_err;
 | 
			
		||||
#endif
 | 
			
		||||
#  endif
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
# else
 | 
			
		||||
 | 
			
		||||
#define MAIN(a,v)	PROG(a,v)
 | 
			
		||||
#  define MAIN(a,v)       PROG(a,v)
 | 
			
		||||
extern CONF *config;
 | 
			
		||||
extern char *default_config_file;
 | 
			
		||||
extern BIO *bio_err;
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_SYS_NETWARE
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
#endif
 | 
			
		||||
# ifndef OPENSSL_SYS_NETWARE
 | 
			
		||||
#  include <signal.h>
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#ifdef SIGPIPE
 | 
			
		||||
#define do_pipe_sig()	signal(SIGPIPE,SIG_IGN)
 | 
			
		||||
#else
 | 
			
		||||
#define do_pipe_sig()
 | 
			
		||||
#endif
 | 
			
		||||
# ifdef SIGPIPE
 | 
			
		||||
#  define do_pipe_sig()   signal(SIGPIPE,SIG_IGN)
 | 
			
		||||
# else
 | 
			
		||||
#  define do_pipe_sig()
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_NO_COMP
 | 
			
		||||
#define zlib_cleanup() 
 | 
			
		||||
#else
 | 
			
		||||
#define zlib_cleanup() COMP_zlib_cleanup()
 | 
			
		||||
#endif
 | 
			
		||||
# ifdef OPENSSL_NO_COMP
 | 
			
		||||
#  define zlib_cleanup()
 | 
			
		||||
# else
 | 
			
		||||
#  define zlib_cleanup() COMP_zlib_cleanup()
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#if defined(MONOLITH) && !defined(OPENSSL_C)
 | 
			
		||||
# if defined(MONOLITH) && !defined(OPENSSL_C)
 | 
			
		||||
#  define apps_startup() \
 | 
			
		||||
		do_pipe_sig()
 | 
			
		||||
                do_pipe_sig()
 | 
			
		||||
#  define apps_shutdown()
 | 
			
		||||
#else
 | 
			
		||||
# else
 | 
			
		||||
#  ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#    define apps_startup() \
 | 
			
		||||
			do { do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
			
		||||
			ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
 | 
			
		||||
			ENGINE_load_builtin_engines(); setup_ui_method(); } while(0)
 | 
			
		||||
#    define apps_shutdown() \
 | 
			
		||||
			do { CONF_modules_unload(1); destroy_ui_method(); \
 | 
			
		||||
			OBJ_cleanup(); EVP_cleanup(); ENGINE_cleanup(); \
 | 
			
		||||
			CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
 | 
			
		||||
			ERR_free_strings(); zlib_cleanup();} while(0)
 | 
			
		||||
#   define apps_startup() \
 | 
			
		||||
                        do { do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
			
		||||
                        ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
 | 
			
		||||
                        ENGINE_load_builtin_engines(); setup_ui_method(); } while(0)
 | 
			
		||||
#   define apps_shutdown() \
 | 
			
		||||
                        do { CONF_modules_unload(1); destroy_ui_method(); \
 | 
			
		||||
                        OBJ_cleanup(); EVP_cleanup(); ENGINE_cleanup(); \
 | 
			
		||||
                        CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
 | 
			
		||||
                        RAND_cleanup(); \
 | 
			
		||||
                        ERR_free_strings(); zlib_cleanup();} while(0)
 | 
			
		||||
#  else
 | 
			
		||||
#    define apps_startup() \
 | 
			
		||||
			do { do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
			
		||||
			ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
 | 
			
		||||
			setup_ui_method(); } while(0)
 | 
			
		||||
#    define apps_shutdown() \
 | 
			
		||||
			do { CONF_modules_unload(1); destroy_ui_method(); \
 | 
			
		||||
			OBJ_cleanup(); EVP_cleanup(); \
 | 
			
		||||
			CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
 | 
			
		||||
			ERR_free_strings(); zlib_cleanup(); } while(0)
 | 
			
		||||
#   define apps_startup() \
 | 
			
		||||
                        do { do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
			
		||||
                        ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
 | 
			
		||||
                        setup_ui_method(); } while(0)
 | 
			
		||||
#   define apps_shutdown() \
 | 
			
		||||
                        do { CONF_modules_unload(1); destroy_ui_method(); \
 | 
			
		||||
                        OBJ_cleanup(); EVP_cleanup(); \
 | 
			
		||||
                        CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
 | 
			
		||||
                        RAND_cleanup(); \
 | 
			
		||||
                        ERR_free_strings(); zlib_cleanup(); } while(0)
 | 
			
		||||
#  endif
 | 
			
		||||
#endif
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_SYSNAME_WIN32
 | 
			
		||||
# if defined(OPENSSL_SYSNAME_WIN32) || defined(OPENSSL_SYSNAME_WINCE)
 | 
			
		||||
#  define openssl_fdset(a,b) FD_SET((unsigned int)a, b)
 | 
			
		||||
#else
 | 
			
		||||
# else
 | 
			
		||||
#  define openssl_fdset(a,b) FD_SET(a, b)
 | 
			
		||||
#endif
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
typedef struct args_st {
 | 
			
		||||
    char **data;
 | 
			
		||||
    int count;
 | 
			
		||||
} ARGS;
 | 
			
		||||
 | 
			
		||||
typedef struct args_st
 | 
			
		||||
	{
 | 
			
		||||
	char **data;
 | 
			
		||||
	int count;
 | 
			
		||||
	} ARGS;
 | 
			
		||||
# define PW_MIN_LENGTH 4
 | 
			
		||||
typedef struct pw_cb_data {
 | 
			
		||||
    const void *password;
 | 
			
		||||
    const char *prompt_info;
 | 
			
		||||
} PW_CB_DATA;
 | 
			
		||||
 | 
			
		||||
#define PW_MIN_LENGTH 4
 | 
			
		||||
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);
 | 
			
		||||
@@ -231,12 +230,13 @@ void destroy_ui_method(void);
 | 
			
		||||
int should_retry(int i);
 | 
			
		||||
int args_from_file(char *file, int *argc, char **argv[]);
 | 
			
		||||
int str2fmt(char *s);
 | 
			
		||||
void program_name(char *in,char *out,int size);
 | 
			
		||||
int chopup_args(ARGS *arg,char *buf, int *argc, char **argv[]);
 | 
			
		||||
#ifdef HEADER_X509_H
 | 
			
		||||
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);
 | 
			
		||||
#endif
 | 
			
		||||
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);
 | 
			
		||||
int set_ext_copy(int *copy_type, const char *arg);
 | 
			
		||||
@@ -244,117 +244,144 @@ int copy_extensions(X509 *x, X509_REQ *req, int copy_type);
 | 
			
		||||
int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2);
 | 
			
		||||
int add_oid_section(BIO *err, CONF *conf);
 | 
			
		||||
X509 *load_cert(BIO *err, const char *file, int format,
 | 
			
		||||
	const char *pass, ENGINE *e, const char *cert_descrip);
 | 
			
		||||
                const char *pass, ENGINE *e, const char *cert_descrip);
 | 
			
		||||
X509_CRL *load_crl(const char *infile, int format);
 | 
			
		||||
int load_cert_crl_http(const char *url, BIO *err,
 | 
			
		||||
                       X509 **pcert, X509_CRL **pcrl);
 | 
			
		||||
EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
 | 
			
		||||
	const char *pass, ENGINE *e, const char *key_descrip);
 | 
			
		||||
                   const char *pass, ENGINE *e, const char *key_descrip);
 | 
			
		||||
EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin,
 | 
			
		||||
	const char *pass, ENGINE *e, const char *key_descrip);
 | 
			
		||||
                      const char *pass, ENGINE *e, const char *key_descrip);
 | 
			
		||||
STACK_OF(X509) *load_certs(BIO *err, const char *file, int format,
 | 
			
		||||
	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
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
ENGINE *setup_engine(BIO *err, const char *engine, int debug);
 | 
			
		||||
#endif
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_OCSP
 | 
			
		||||
# ifndef OPENSSL_NO_OCSP
 | 
			
		||||
OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req,
 | 
			
		||||
			char *host, char *path, char *port, int use_ssl,
 | 
			
		||||
			STACK_OF(CONF_VALUE) *headers,
 | 
			
		||||
			int req_timeout);
 | 
			
		||||
#endif
 | 
			
		||||
                                 const char *host, const char *path,
 | 
			
		||||
                                 const char *port, int use_ssl,
 | 
			
		||||
                                 const STACK_OF(CONF_VALUE) *headers,
 | 
			
		||||
                                 int req_timeout);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
int load_config(BIO *err, CONF *cnf);
 | 
			
		||||
char *make_config_name(void);
 | 
			
		||||
 | 
			
		||||
/* Functions defined in ca.c and also used in ocsp.c */
 | 
			
		||||
int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
 | 
			
		||||
			ASN1_GENERALIZEDTIME **pinvtm, const char *str);
 | 
			
		||||
                   ASN1_GENERALIZEDTIME **pinvtm, const char *str);
 | 
			
		||||
 | 
			
		||||
#define DB_type         0
 | 
			
		||||
#define DB_exp_date     1
 | 
			
		||||
#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_NUMBER       6
 | 
			
		||||
# define DB_type         0
 | 
			
		||||
# define DB_exp_date     1
 | 
			
		||||
# 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_NUMBER       6
 | 
			
		||||
 | 
			
		||||
#define DB_TYPE_REV	'R'
 | 
			
		||||
#define DB_TYPE_EXP	'E'
 | 
			
		||||
#define DB_TYPE_VAL	'V'
 | 
			
		||||
# define DB_TYPE_REV     'R'
 | 
			
		||||
# define DB_TYPE_EXP     'E'
 | 
			
		||||
# define DB_TYPE_VAL     'V'
 | 
			
		||||
 | 
			
		||||
typedef struct db_attr_st
 | 
			
		||||
	{
 | 
			
		||||
	int unique_subject;
 | 
			
		||||
	} DB_ATTR;
 | 
			
		||||
typedef struct ca_db_st
 | 
			
		||||
	{
 | 
			
		||||
	DB_ATTR attributes;
 | 
			
		||||
	TXT_DB *db;
 | 
			
		||||
	} CA_DB;
 | 
			
		||||
typedef struct db_attr_st {
 | 
			
		||||
    int unique_subject;
 | 
			
		||||
} DB_ATTR;
 | 
			
		||||
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), \
 | 
			
		||||
	(const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, b))
 | 
			
		||||
# define index_name_cmp_noconst(a, b) \
 | 
			
		||||
        index_name_cmp((const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, a), \
 | 
			
		||||
        (const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, b))
 | 
			
		||||
int index_name_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b);
 | 
			
		||||
int parse_yesno(const char *str, int def);
 | 
			
		||||
 | 
			
		||||
X509_NAME *parse_name(char *str, long chtype, int multirdn);
 | 
			
		||||
int args_verify(char ***pargs, int *pargc,
 | 
			
		||||
			int *badarg, BIO *err, X509_VERIFY_PARAM **pm);
 | 
			
		||||
                int *badarg, BIO *err, X509_VERIFY_PARAM **pm);
 | 
			
		||||
void policies_print(BIO *out, X509_STORE_CTX *ctx);
 | 
			
		||||
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);
 | 
			
		||||
#ifndef OPENSSL_NO_PSK
 | 
			
		||||
                 const char *algname, ENGINE *e, int do_param);
 | 
			
		||||
int do_X509_sign(BIO *err, X509 *x, EVP_PKEY *pkey, const EVP_MD *md,
 | 
			
		||||
                 STACK_OF(OPENSSL_STRING) *sigopts);
 | 
			
		||||
int do_X509_REQ_sign(BIO *err, X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md,
 | 
			
		||||
                     STACK_OF(OPENSSL_STRING) *sigopts);
 | 
			
		||||
int do_X509_CRL_sign(BIO *err, X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md,
 | 
			
		||||
                     STACK_OF(OPENSSL_STRING) *sigopts);
 | 
			
		||||
# ifndef OPENSSL_NO_PSK
 | 
			
		||||
extern char *psk_key;
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_JPAKE
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_JPAKE
 | 
			
		||||
void jpake_client_auth(BIO *out, BIO *conn, const char *secret);
 | 
			
		||||
void jpake_server_auth(BIO *out, BIO *conn, const char *secret);
 | 
			
		||||
#endif
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#define FORMAT_UNDEF    0
 | 
			
		||||
#define FORMAT_ASN1     1
 | 
			
		||||
#define FORMAT_TEXT     2
 | 
			
		||||
#define FORMAT_PEM      3
 | 
			
		||||
#define FORMAT_NETSCAPE 4
 | 
			
		||||
#define FORMAT_PKCS12   5
 | 
			
		||||
#define FORMAT_SMIME    6
 | 
			
		||||
#define FORMAT_ENGINE   7
 | 
			
		||||
#define FORMAT_IISSGC	8	/* XXX this stupid macro helps us to avoid
 | 
			
		||||
				 * adding yet another param to load_*key() */
 | 
			
		||||
#define FORMAT_PEMRSA	9	/* PEM RSAPubicKey format */
 | 
			
		||||
#define FORMAT_ASN1RSA	10	/* DER RSAPubicKey format */
 | 
			
		||||
#define FORMAT_MSBLOB	11	/* MS Key blob format */
 | 
			
		||||
#define FORMAT_PVK	12	/* MS PVK file format */
 | 
			
		||||
# ifndef OPENSSL_NO_TLSEXT
 | 
			
		||||
unsigned char *next_protos_parse(unsigned short *outlen, const char *in);
 | 
			
		||||
# endif                         /* ndef OPENSSL_NO_TLSEXT */
 | 
			
		||||
 | 
			
		||||
#define EXT_COPY_NONE	0
 | 
			
		||||
#define EXT_COPY_ADD	1
 | 
			
		||||
#define EXT_COPY_ALL	2
 | 
			
		||||
void print_cert_checks(BIO *bio, X509 *x,
 | 
			
		||||
                       const char *checkhost,
 | 
			
		||||
                       const char *checkemail, const char *checkip);
 | 
			
		||||
 | 
			
		||||
#define NETSCAPE_CERT_HDR	"certificate"
 | 
			
		||||
void store_setup_crl_download(X509_STORE *st);
 | 
			
		||||
 | 
			
		||||
#define APP_PASS_LEN	1024
 | 
			
		||||
# define FORMAT_UNDEF    0
 | 
			
		||||
# define FORMAT_ASN1     1
 | 
			
		||||
# define FORMAT_TEXT     2
 | 
			
		||||
# define FORMAT_PEM      3
 | 
			
		||||
# define FORMAT_NETSCAPE 4
 | 
			
		||||
# define FORMAT_PKCS12   5
 | 
			
		||||
# define FORMAT_SMIME    6
 | 
			
		||||
# define FORMAT_ENGINE   7
 | 
			
		||||
# define FORMAT_IISSGC   8      /* XXX this stupid macro helps us to avoid
 | 
			
		||||
                                 * adding yet another param to load_*key() */
 | 
			
		||||
# define FORMAT_PEMRSA   9      /* PEM RSAPubicKey format */
 | 
			
		||||
# define FORMAT_ASN1RSA  10     /* DER RSAPubicKey format */
 | 
			
		||||
# define FORMAT_MSBLOB   11     /* MS Key blob format */
 | 
			
		||||
# define FORMAT_PVK      12     /* MS PVK file format */
 | 
			
		||||
# define FORMAT_HTTP     13     /* Download using HTTP */
 | 
			
		||||
 | 
			
		||||
#define SERIAL_RAND_BITS	64
 | 
			
		||||
# define EXT_COPY_NONE   0
 | 
			
		||||
# define EXT_COPY_ADD    1
 | 
			
		||||
# define EXT_COPY_ALL    2
 | 
			
		||||
 | 
			
		||||
# define NETSCAPE_CERT_HDR       "certificate"
 | 
			
		||||
 | 
			
		||||
# define APP_PASS_LEN    1024
 | 
			
		||||
 | 
			
		||||
# define SERIAL_RAND_BITS        64
 | 
			
		||||
 | 
			
		||||
int app_isdir(const char *);
 | 
			
		||||
int raw_read_stdin(void *,int);
 | 
			
		||||
int raw_write_stdout(const void *,int);
 | 
			
		||||
int raw_read_stdin(void *, int);
 | 
			
		||||
int raw_write_stdout(const void *, int);
 | 
			
		||||
 | 
			
		||||
# define TM_START        0
 | 
			
		||||
# define TM_STOP         1
 | 
			
		||||
double app_tminterval(int stop, int usertime);
 | 
			
		||||
 | 
			
		||||
# define OPENSSL_NO_SSL_INTERN
 | 
			
		||||
 | 
			
		||||
#define TM_START	0
 | 
			
		||||
#define TM_STOP		1
 | 
			
		||||
double app_tminterval (int stop,int usertime);
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										650
									
								
								apps/asn1pars.c
									
									
									
									
									
								
							
							
						
						
									
										650
									
								
								apps/asn1pars.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,15 +49,16 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* A nice addition from Dr Stephen Henson <steve@openssl.org> to 
 | 
			
		||||
 * add the -strparse option which parses nested binary structures
 | 
			
		||||
/*
 | 
			
		||||
 * A nice addition from Dr Stephen Henson <steve@openssl.org> to add the
 | 
			
		||||
 * -strparse option which parses nested binary structures
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
@@ -69,376 +70,361 @@
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
/* -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
 | 
			
		||||
 * -length	- how many bytes to use
 | 
			
		||||
 * -oid file	- extra oid description file
 | 
			
		||||
/*-
 | 
			
		||||
 * -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
 | 
			
		||||
 * -length      - how many bytes to use
 | 
			
		||||
 * -oid file    - extra oid description file
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	asn1parse_main
 | 
			
		||||
#define PROG    asn1parse_main
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int i,badops=0,offset=0,ret=1,j;
 | 
			
		||||
	unsigned int length=0;
 | 
			
		||||
	long num,tmplen;
 | 
			
		||||
	BIO *in=NULL,*out=NULL,*b64=NULL, *derout = NULL;
 | 
			
		||||
	int informat,indent=0, noout = 0, dump = 0;
 | 
			
		||||
	char *infile=NULL,*str=NULL,*prog,*oidfile=NULL, *derfile=NULL;
 | 
			
		||||
	char *genstr=NULL, *genconf=NULL;
 | 
			
		||||
	unsigned char *tmpbuf;
 | 
			
		||||
	const unsigned char *ctmpbuf;
 | 
			
		||||
	BUF_MEM *buf=NULL;
 | 
			
		||||
	STACK_OF(OPENSSL_STRING) *osk=NULL;
 | 
			
		||||
	ASN1_TYPE *at=NULL;
 | 
			
		||||
{
 | 
			
		||||
    int i, badops = 0, offset = 0, ret = 1, j;
 | 
			
		||||
    unsigned int length = 0;
 | 
			
		||||
    long num, tmplen;
 | 
			
		||||
    BIO *in = NULL, *out = NULL, *b64 = NULL, *derout = NULL;
 | 
			
		||||
    int informat, indent = 0, noout = 0, dump = 0;
 | 
			
		||||
    char *infile = NULL, *str = NULL, *prog, *oidfile = NULL, *derfile = NULL;
 | 
			
		||||
    char *genstr = NULL, *genconf = NULL;
 | 
			
		||||
    unsigned char *tmpbuf;
 | 
			
		||||
    const unsigned char *ctmpbuf;
 | 
			
		||||
    BUF_MEM *buf = NULL;
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *osk = NULL;
 | 
			
		||||
    ASN1_TYPE *at = NULL;
 | 
			
		||||
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	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;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			derfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
			oidfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
			length= atoi(*(++argv));
 | 
			
		||||
			if (length == 0) goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-dump") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			dump= -1;
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
			sk_OPENSSL_STRING_push(osk,*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-genstr") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			genstr= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-genconf") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			genconf= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    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;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            derfile = *(++argv);
 | 
			
		||||
        } 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;
 | 
			
		||||
            oidfile = *(++argv);
 | 
			
		||||
        } 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;
 | 
			
		||||
            length = atoi(*(++argv));
 | 
			
		||||
            if (length == 0)
 | 
			
		||||
                goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-dump") == 0) {
 | 
			
		||||
            dump = -1;
 | 
			
		||||
        } 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;
 | 
			
		||||
            sk_OPENSSL_STRING_push(osk, *(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-genstr") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            genstr = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-genconf") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            genconf = *(++argv);
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	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," -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," -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,"               ASN1 blob wrappings\n");
 | 
			
		||||
		BIO_printf(bio_err," -genstr str   string to generate ASN1 structure from\n");
 | 
			
		||||
		BIO_printf(bio_err," -genconf file file to generate ASN1 structure from\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    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, " -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, " -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, "               ASN1 blob wrappings\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -genstr str   string to generate ASN1 structure from\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -genconf file file to generate ASN1 structure from\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	BIO_set_fp(out,stdout,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
	{
 | 
			
		||||
	BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
	out = BIO_push(tmpbio, out);
 | 
			
		||||
	}
 | 
			
		||||
    {
 | 
			
		||||
        BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
        out = BIO_push(tmpbio, out);
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	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;
 | 
			
		||||
			}
 | 
			
		||||
		OBJ_create_objects(in);
 | 
			
		||||
		}
 | 
			
		||||
    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;
 | 
			
		||||
        }
 | 
			
		||||
        OBJ_create_objects(in);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
            perror(infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (derfile) {
 | 
			
		||||
		if(!(derout = BIO_new_file(derfile, "wb"))) {
 | 
			
		||||
			BIO_printf(bio_err,"problems opening %s\n",derfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
    if (derfile) {
 | 
			
		||||
        if (!(derout = BIO_new_file(derfile, "wb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "problems opening %s\n", derfile);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	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)
 | 
			
		||||
		{
 | 
			
		||||
		num = do_generate(bio_err, genstr, genconf, buf);
 | 
			
		||||
		if (num < 0)
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (genstr || genconf) {
 | 
			
		||||
        num = do_generate(bio_err, genstr, genconf, buf);
 | 
			
		||||
        if (num < 0) {
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
    else {
 | 
			
		||||
 | 
			
		||||
		if (informat == FORMAT_PEM)
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmp;
 | 
			
		||||
        if (informat == FORMAT_PEM) {
 | 
			
		||||
            BIO *tmp;
 | 
			
		||||
 | 
			
		||||
			if ((b64=BIO_new(BIO_f_base64())) == NULL)
 | 
			
		||||
				goto end;
 | 
			
		||||
			BIO_push(b64,in);
 | 
			
		||||
			tmp=in;
 | 
			
		||||
			in=b64;
 | 
			
		||||
			b64=tmp;
 | 
			
		||||
			}
 | 
			
		||||
            if ((b64 = BIO_new(BIO_f_base64())) == NULL)
 | 
			
		||||
                goto end;
 | 
			
		||||
            BIO_push(b64, in);
 | 
			
		||||
            tmp = in;
 | 
			
		||||
            in = b64;
 | 
			
		||||
            b64 = tmp;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		num=0;
 | 
			
		||||
		for (;;)
 | 
			
		||||
			{
 | 
			
		||||
			if (!BUF_MEM_grow(buf,(int)num+BUFSIZ)) goto end;
 | 
			
		||||
			i=BIO_read(in,&(buf->data[num]),BUFSIZ);
 | 
			
		||||
			if (i <= 0) break;
 | 
			
		||||
			num+=i;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	str=buf->data;
 | 
			
		||||
        num = 0;
 | 
			
		||||
        for (;;) {
 | 
			
		||||
            if (!BUF_MEM_grow(buf, (int)num + BUFSIZ))
 | 
			
		||||
                goto end;
 | 
			
		||||
            i = BIO_read(in, &(buf->data[num]), BUFSIZ);
 | 
			
		||||
            if (i <= 0)
 | 
			
		||||
                break;
 | 
			
		||||
            num += i;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    str = buf->data;
 | 
			
		||||
 | 
			
		||||
	/* If any structs to parse go through in sequence */
 | 
			
		||||
    /* If any structs to parse go through in sequence */
 | 
			
		||||
 | 
			
		||||
	if (sk_OPENSSL_STRING_num(osk))
 | 
			
		||||
		{
 | 
			
		||||
		tmpbuf=(unsigned char *)str;
 | 
			
		||||
		tmplen=num;
 | 
			
		||||
		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));
 | 
			
		||||
				continue;
 | 
			
		||||
				}
 | 
			
		||||
			tmpbuf+=j;
 | 
			
		||||
			tmplen-=j;
 | 
			
		||||
			atmp = at;
 | 
			
		||||
			ctmpbuf = tmpbuf;
 | 
			
		||||
			at = d2i_ASN1_TYPE(NULL,&ctmpbuf,tmplen);
 | 
			
		||||
			ASN1_TYPE_free(atmp);
 | 
			
		||||
			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))
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Can't parse %s type\n",
 | 
			
		||||
					typ == V_ASN1_NULL ? "NULL" : "OBJECT");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			/* hmm... this is a little evil but it works */
 | 
			
		||||
			tmpbuf=at->value.asn1_string->data;
 | 
			
		||||
			tmplen=at->value.asn1_string->length;
 | 
			
		||||
			}
 | 
			
		||||
		str=(char *)tmpbuf;
 | 
			
		||||
		num=tmplen;
 | 
			
		||||
		}
 | 
			
		||||
    if (sk_OPENSSL_STRING_num(osk)) {
 | 
			
		||||
        tmpbuf = (unsigned char *)str;
 | 
			
		||||
        tmplen = num;
 | 
			
		||||
        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));
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            tmpbuf += j;
 | 
			
		||||
            tmplen -= j;
 | 
			
		||||
            atmp = at;
 | 
			
		||||
            ctmpbuf = tmpbuf;
 | 
			
		||||
            at = d2i_ASN1_TYPE(NULL, &ctmpbuf, tmplen);
 | 
			
		||||
            ASN1_TYPE_free(atmp);
 | 
			
		||||
            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)) {
 | 
			
		||||
                BIO_printf(bio_err, "Can't parse %s type\n",
 | 
			
		||||
                           typ == V_ASN1_NULL ? "NULL" : "OBJECT");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
            /* hmm... this is a little evil but it works */
 | 
			
		||||
            tmpbuf = at->value.asn1_string->data;
 | 
			
		||||
            tmplen = at->value.asn1_string->length;
 | 
			
		||||
        }
 | 
			
		||||
        str = (char *)tmpbuf;
 | 
			
		||||
        num = tmplen;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (offset >= num)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error: offset too large\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (offset >= num) {
 | 
			
		||||
        BIO_printf(bio_err, "Error: offset too large\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	num -= offset;
 | 
			
		||||
    num -= offset;
 | 
			
		||||
 | 
			
		||||
	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");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (!noout &&
 | 
			
		||||
	    !ASN1_parse_dump(out,(unsigned char *)&(str[offset]),length,
 | 
			
		||||
		    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 (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);
 | 
			
		||||
	OBJ_cleanup();
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    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");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (!noout &&
 | 
			
		||||
        !ASN1_parse_dump(out, (unsigned char *)&(str[offset]), length,
 | 
			
		||||
                         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 (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);
 | 
			
		||||
    OBJ_cleanup();
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf)
 | 
			
		||||
	{
 | 
			
		||||
	CONF *cnf = NULL;
 | 
			
		||||
	int len;
 | 
			
		||||
	long errline;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	ASN1_TYPE *atyp = NULL;
 | 
			
		||||
{
 | 
			
		||||
    CONF *cnf = NULL;
 | 
			
		||||
    int len;
 | 
			
		||||
    long errline;
 | 
			
		||||
    unsigned char *p;
 | 
			
		||||
    ASN1_TYPE *atyp = NULL;
 | 
			
		||||
 | 
			
		||||
	if (genconf)
 | 
			
		||||
		{
 | 
			
		||||
		cnf = NCONF_new(NULL);
 | 
			
		||||
		if (!NCONF_load(cnf, genconf, &errline))
 | 
			
		||||
			goto conferr;
 | 
			
		||||
		if (!genstr)
 | 
			
		||||
			genstr = NCONF_get_string(cnf, "default", "asn1");
 | 
			
		||||
		if (!genstr)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio, "Can't find 'asn1' in '%s'\n", genconf);
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (genconf) {
 | 
			
		||||
        cnf = NCONF_new(NULL);
 | 
			
		||||
        if (!NCONF_load(cnf, genconf, &errline))
 | 
			
		||||
            goto conferr;
 | 
			
		||||
        if (!genstr)
 | 
			
		||||
            genstr = NCONF_get_string(cnf, "default", "asn1");
 | 
			
		||||
        if (!genstr) {
 | 
			
		||||
            BIO_printf(bio, "Can't find 'asn1' in '%s'\n", genconf);
 | 
			
		||||
            goto err;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	atyp = ASN1_generate_nconf(genstr, cnf);
 | 
			
		||||
	NCONF_free(cnf);
 | 
			
		||||
    atyp = ASN1_generate_nconf(genstr, cnf);
 | 
			
		||||
    NCONF_free(cnf);
 | 
			
		||||
    cnf = NULL;
 | 
			
		||||
 | 
			
		||||
	if (!atyp)
 | 
			
		||||
		return -1;
 | 
			
		||||
    if (!atyp)
 | 
			
		||||
        return -1;
 | 
			
		||||
 | 
			
		||||
	len = i2d_ASN1_TYPE(atyp, NULL);
 | 
			
		||||
    len = i2d_ASN1_TYPE(atyp, NULL);
 | 
			
		||||
 | 
			
		||||
	if (len <= 0)
 | 
			
		||||
		goto err;
 | 
			
		||||
    if (len <= 0)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
	if (!BUF_MEM_grow(buf,len))
 | 
			
		||||
		goto err;
 | 
			
		||||
    if (!BUF_MEM_grow(buf, len))
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
	p=(unsigned char *)buf->data;
 | 
			
		||||
    p = (unsigned char *)buf->data;
 | 
			
		||||
 | 
			
		||||
	i2d_ASN1_TYPE(atyp, &p);
 | 
			
		||||
    i2d_ASN1_TYPE(atyp, &p);
 | 
			
		||||
 | 
			
		||||
	ASN1_TYPE_free(atyp);
 | 
			
		||||
	return len;
 | 
			
		||||
    ASN1_TYPE_free(atyp);
 | 
			
		||||
    return len;
 | 
			
		||||
 | 
			
		||||
	conferr:
 | 
			
		||||
 conferr:
 | 
			
		||||
 | 
			
		||||
	if (errline > 0)
 | 
			
		||||
		BIO_printf(bio, "Error on line %ld of config file '%s'\n",
 | 
			
		||||
							errline, genconf);
 | 
			
		||||
	else
 | 
			
		||||
		BIO_printf(bio, "Error loading config file '%s'\n", genconf);
 | 
			
		||||
    if (errline > 0)
 | 
			
		||||
        BIO_printf(bio, "Error on line %ld of config file '%s'\n",
 | 
			
		||||
                   errline, genconf);
 | 
			
		||||
    else
 | 
			
		||||
        BIO_printf(bio, "Error loading config file '%s'\n", genconf);
 | 
			
		||||
 | 
			
		||||
	err:
 | 
			
		||||
	NCONF_free(cnf);
 | 
			
		||||
	ASN1_TYPE_free(atyp);
 | 
			
		||||
 err:
 | 
			
		||||
    NCONF_free(cnf);
 | 
			
		||||
    ASN1_TYPE_free(atyp);
 | 
			
		||||
 | 
			
		||||
	return -1;
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										290
									
								
								apps/ciphers.c
									
									
									
									
									
								
							
							
						
						
									
										290
									
								
								apps/ciphers.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -60,172 +60,180 @@
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#ifdef OPENSSL_NO_STDIO
 | 
			
		||||
#define APPS_WIN16
 | 
			
		||||
# define APPS_WIN16
 | 
			
		||||
#endif
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	ciphers_main
 | 
			
		||||
#define PROG    ciphers_main
 | 
			
		||||
 | 
			
		||||
static const char *ciphers_usage[]={
 | 
			
		||||
"usage: ciphers args\n",
 | 
			
		||||
" -v          - verbose mode, a textual listing of the SSL/TLS ciphers in OpenSSL\n",
 | 
			
		||||
" -V          - even more verbose\n",
 | 
			
		||||
" -ssl2       - SSL2 mode\n",
 | 
			
		||||
" -ssl3       - SSL3 mode\n",
 | 
			
		||||
" -tls1       - TLS1 mode\n",
 | 
			
		||||
NULL
 | 
			
		||||
static const char *ciphers_usage[] = {
 | 
			
		||||
    "usage: ciphers args\n",
 | 
			
		||||
    " -v          - verbose mode, a textual listing of the SSL/TLS ciphers in OpenSSL\n",
 | 
			
		||||
    " -V          - even more verbose\n",
 | 
			
		||||
    " -ssl2       - SSL2 mode\n",
 | 
			
		||||
    " -ssl3       - SSL3 mode\n",
 | 
			
		||||
    " -tls1       - TLS1 mode\n",
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int ret=1,i;
 | 
			
		||||
	int verbose=0,Verbose=0;
 | 
			
		||||
	const char **pp;
 | 
			
		||||
	const char *p;
 | 
			
		||||
	int badops=0;
 | 
			
		||||
	SSL_CTX *ctx=NULL;
 | 
			
		||||
	SSL *ssl=NULL;
 | 
			
		||||
	char *ciphers=NULL;
 | 
			
		||||
	const SSL_METHOD *meth=NULL;
 | 
			
		||||
	STACK_OF(SSL_CIPHER) *sk;
 | 
			
		||||
	char buf[512];
 | 
			
		||||
	BIO *STDout=NULL;
 | 
			
		||||
 | 
			
		||||
#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();
 | 
			
		||||
{
 | 
			
		||||
    int ret = 1, i;
 | 
			
		||||
    int verbose = 0, Verbose = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_SSL_TRACE
 | 
			
		||||
    int stdname = 0;
 | 
			
		||||
#endif
 | 
			
		||||
    const char **pp;
 | 
			
		||||
    const char *p;
 | 
			
		||||
    int badops = 0;
 | 
			
		||||
    SSL_CTX *ctx = NULL;
 | 
			
		||||
    SSL *ssl = NULL;
 | 
			
		||||
    char *ciphers = NULL;
 | 
			
		||||
    const SSL_METHOD *meth = NULL;
 | 
			
		||||
    STACK_OF(SSL_CIPHER) *sk;
 | 
			
		||||
    char buf[512];
 | 
			
		||||
    BIO *STDout = NULL;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    meth = SSLv23_server_method();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
			
		||||
	STDout=BIO_new_fp(stdout,BIO_NOCLOSE);
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
    STDout = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
	{
 | 
			
		||||
	BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
	STDout = BIO_push(tmpbio, STDout);
 | 
			
		||||
	}
 | 
			
		||||
    {
 | 
			
		||||
        BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
        STDout = BIO_push(tmpbio, STDout);
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if (strcmp(*argv,"-v") == 0)
 | 
			
		||||
			verbose=1;
 | 
			
		||||
		else if (strcmp(*argv,"-V") == 0)
 | 
			
		||||
			verbose=Verbose=1;
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-v") == 0)
 | 
			
		||||
            verbose = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-V") == 0)
 | 
			
		||||
            verbose = Verbose = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_SSL_TRACE
 | 
			
		||||
        else if (strcmp(*argv, "-stdname") == 0)
 | 
			
		||||
            stdname = verbose = 1;
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SSL2
 | 
			
		||||
		else if (strcmp(*argv,"-ssl2") == 0)
 | 
			
		||||
			meth=SSLv2_client_method();
 | 
			
		||||
        else if (strcmp(*argv, "-ssl2") == 0)
 | 
			
		||||
            meth = SSLv2_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SSL3
 | 
			
		||||
		else if (strcmp(*argv,"-ssl3") == 0)
 | 
			
		||||
			meth=SSLv3_client_method();
 | 
			
		||||
        else if (strcmp(*argv, "-ssl3") == 0)
 | 
			
		||||
            meth = SSLv3_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_TLS1
 | 
			
		||||
		else if (strcmp(*argv,"-tls1") == 0)
 | 
			
		||||
			meth=TLSv1_client_method();
 | 
			
		||||
        else if (strcmp(*argv, "-tls1") == 0)
 | 
			
		||||
            meth = TLSv1_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
		else if ((strncmp(*argv,"-h",2) == 0) ||
 | 
			
		||||
			 (strcmp(*argv,"-?") == 0))
 | 
			
		||||
			{
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			ciphers= *argv;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
        else if ((strncmp(*argv, "-h", 2) == 0) || (strcmp(*argv, "-?") == 0)) {
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        } else {
 | 
			
		||||
            ciphers = *argv;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
		for (pp=ciphers_usage; (*pp != NULL); pp++)
 | 
			
		||||
			BIO_printf(bio_err,"%s",*pp);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
        for (pp = ciphers_usage; (*pp != NULL); pp++)
 | 
			
		||||
            BIO_printf(bio_err, "%s", *pp);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	OpenSSL_add_ssl_algorithms();
 | 
			
		||||
    OpenSSL_add_ssl_algorithms();
 | 
			
		||||
 | 
			
		||||
	ctx=SSL_CTX_new(meth);
 | 
			
		||||
	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");
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	ssl=SSL_new(ctx);
 | 
			
		||||
	if (ssl == NULL) goto err;
 | 
			
		||||
    ctx = SSL_CTX_new(meth);
 | 
			
		||||
    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");
 | 
			
		||||
            goto err;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    ssl = SSL_new(ctx);
 | 
			
		||||
    if (ssl == NULL)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    if (!verbose) {
 | 
			
		||||
        for (i = 0;; i++) {
 | 
			
		||||
            p = SSL_get_cipher_list(ssl, i);
 | 
			
		||||
            if (p == NULL)
 | 
			
		||||
                break;
 | 
			
		||||
            if (i != 0)
 | 
			
		||||
                BIO_printf(STDout, ":");
 | 
			
		||||
            BIO_printf(STDout, "%s", p);
 | 
			
		||||
        }
 | 
			
		||||
        BIO_printf(STDout, "\n");
 | 
			
		||||
    } else {                    /* verbose */
 | 
			
		||||
 | 
			
		||||
	if (!verbose)
 | 
			
		||||
		{
 | 
			
		||||
		for (i=0; ; i++)
 | 
			
		||||
			{
 | 
			
		||||
			p=SSL_get_cipher_list(ssl,i);
 | 
			
		||||
			if (p == NULL) break;
 | 
			
		||||
			if (i != 0) BIO_printf(STDout,":");
 | 
			
		||||
			BIO_printf(STDout,"%s",p);
 | 
			
		||||
			}
 | 
			
		||||
		BIO_printf(STDout,"\n");
 | 
			
		||||
		}
 | 
			
		||||
	else /* verbose */
 | 
			
		||||
		{
 | 
			
		||||
		sk=SSL_get_ciphers(ssl);
 | 
			
		||||
        sk = SSL_get_ciphers(ssl);
 | 
			
		||||
 | 
			
		||||
		for (i=0; i<sk_SSL_CIPHER_num(sk); i++)
 | 
			
		||||
			{
 | 
			
		||||
			SSL_CIPHER *c;
 | 
			
		||||
        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;
 | 
			
		||||
				int id0 = (int)(id >> 24);
 | 
			
		||||
				int id1 = (int)((id >> 16) & 0xffL);
 | 
			
		||||
				int id2 = (int)((id >> 8) & 0xffL);
 | 
			
		||||
				int id3 = (int)(id & 0xffL);
 | 
			
		||||
				
 | 
			
		||||
				if ((id & 0xff000000L) == 0x02000000L)
 | 
			
		||||
					BIO_printf(STDout, "     0x%02X,0x%02X,0x%02X - ", id1, id2, id3); /* SSL2 cipher */
 | 
			
		||||
				else if ((id & 0xff000000L) == 0x03000000L)
 | 
			
		||||
					BIO_printf(STDout, "          0x%02X,0x%02X - ", id2, id3); /* SSL3 cipher */
 | 
			
		||||
				else
 | 
			
		||||
					BIO_printf(STDout, "0x%02X,0x%02X,0x%02X,0x%02X - ", id0, id1, id2, id3); /* whatever */
 | 
			
		||||
				}
 | 
			
		||||
            c = sk_SSL_CIPHER_value(sk, i);
 | 
			
		||||
 | 
			
		||||
			BIO_puts(STDout,SSL_CIPHER_description(c,buf,sizeof buf));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
            if (Verbose) {
 | 
			
		||||
                unsigned long id = SSL_CIPHER_get_id(c);
 | 
			
		||||
                int id0 = (int)(id >> 24);
 | 
			
		||||
                int id1 = (int)((id >> 16) & 0xffL);
 | 
			
		||||
                int id2 = (int)((id >> 8) & 0xffL);
 | 
			
		||||
                int id3 = (int)(id & 0xffL);
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
	if (0)
 | 
			
		||||
		{
 | 
			
		||||
err:
 | 
			
		||||
		SSL_load_error_strings();
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
end:
 | 
			
		||||
	if (ctx != NULL) SSL_CTX_free(ctx);
 | 
			
		||||
	if (ssl != NULL) SSL_free(ssl);
 | 
			
		||||
	if (STDout != NULL) BIO_free_all(STDout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
                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);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
#ifndef OPENSSL_NO_SSL_TRACE
 | 
			
		||||
            if (stdname) {
 | 
			
		||||
                const char *nm = SSL_CIPHER_standard_name(c);
 | 
			
		||||
                if (nm == NULL)
 | 
			
		||||
                    nm = "UNKNOWN";
 | 
			
		||||
                BIO_printf(STDout, "%s - ", nm);
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
            BIO_puts(STDout, SSL_CIPHER_description(c, buf, sizeof buf));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ret = 0;
 | 
			
		||||
    if (0) {
 | 
			
		||||
 err:
 | 
			
		||||
        SSL_load_error_strings();
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    }
 | 
			
		||||
 end:
 | 
			
		||||
    if (ctx != NULL)
 | 
			
		||||
        SSL_CTX_free(ctx);
 | 
			
		||||
    if (ssl != NULL)
 | 
			
		||||
        SSL_free(ssl);
 | 
			
		||||
    if (STDout != NULL)
 | 
			
		||||
        BIO_free_all(STDout);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,24 +1,52 @@
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Client test cert (512 bit)
 | 
			
		||||
subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = Test Client Cert
 | 
			
		||||
issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB6TCCAVICAQIwDQYJKoZIhvcNAQEEBQAwWzELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYD
 | 
			
		||||
VQQDExJUZXN0IENBICgxMDI0IGJpdCkwHhcNOTcwNjA5MTM1NzU2WhcNOTgwNjA5
 | 
			
		||||
MTM1NzU2WjBjMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
 | 
			
		||||
A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxIzAhBgNVBAMTGkNsaWVudCB0ZXN0IGNl
 | 
			
		||||
cnQgKDUxMiBiaXQpMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALtv55QyzG6i2Plw
 | 
			
		||||
Z1pah7++Gv8L5j6Hnyr/uTZE1NLG0ABDDexmq/R4KedLjFEIYjocDui+IXs62NNt
 | 
			
		||||
XrT8odkCAwEAATANBgkqhkiG9w0BAQQFAAOBgQBwtMmI7oGUG8nKmftQssATViH5
 | 
			
		||||
NRRtoEw07DxJp/LfatHdrhqQB73eGdL5WILZJXk46Xz2e9WMSUjVCSYhdKxtflU3
 | 
			
		||||
UR2Ajv1Oo0sTNdfz0wDqJNirLNtzyhhsaq8qMTrLwXrCP31VxBiigFSQSUFnZyTE
 | 
			
		||||
9TKwhS4GlwbtCfxSKQ==
 | 
			
		||||
MIID5zCCAs+gAwIBAgIJALnu1NlVpZ6yMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV
 | 
			
		||||
BAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMSIwIAYDVQQLDBlGT1IgVEVT
 | 
			
		||||
VElORyBQVVJQT1NFUyBPTkxZMSUwIwYDVQQDDBxPcGVuU1NMIFRlc3QgSW50ZXJt
 | 
			
		||||
ZWRpYXRlIENBMB4XDTExMTIwODE0MDE0OFoXDTIxMTAxNjE0MDE0OFowZDELMAkG
 | 
			
		||||
A1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBU
 | 
			
		||||
RVNUSU5HIFBVUlBPU0VTIE9OTFkxGTAXBgNVBAMMEFRlc3QgQ2xpZW50IENlcnQw
 | 
			
		||||
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0ranbHRLcLVqN+0BzcZpY
 | 
			
		||||
+yOLqxzDWT1LD9eW1stC4NzXX9/DCtSIVyN7YIHdGLrIPr64IDdXXaMRzgZ2rOKs
 | 
			
		||||
lmHCAiFpO/ja99gGCJRxH0xwQatqAULfJVHeUhs7OEGOZc2nWifjqKvGfNTilP7D
 | 
			
		||||
nwi69ipQFq9oS19FmhwVHk2wg7KZGHI1qDyG04UrfCZMRitvS9+UVhPpIPjuiBi2
 | 
			
		||||
x3/FZIpL5gXJvvFK6xHY63oq2asyzBATntBgnP4qJFWWcvRx24wF1PnZabxuVoL2
 | 
			
		||||
bPnQ/KvONDrw3IdqkKhYNTul7jEcu3OlcZIMw+7DiaKJLAzKb/bBF5gm/pwW6As9
 | 
			
		||||
AgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBeAwLAYJYIZI
 | 
			
		||||
AYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQW
 | 
			
		||||
BBSZHKyLoTh7Mb409Zn/mK1ceSDAjDAfBgNVHSMEGDAWgBQ2w2yI55X+sL3szj49
 | 
			
		||||
hqshgYfa2jANBgkqhkiG9w0BAQUFAAOCAQEAD0mL7PtPYgCEuDyOQSbLpeND5hVS
 | 
			
		||||
curxQdGnrJ6Acrhodb7E9ccATokeb0PLx6HBLQUicxhTZIQ9FbO43YkQcOU6C3BB
 | 
			
		||||
IlwskqmtN6+VmrQzNolHCDzvxNZs9lYL2VbGPGqVRyjZeHpoAlf9cQr8PgDb4d4b
 | 
			
		||||
vUx2KAhHQvV2nkmYvKyXcgnRuHggumF87mkxidriGAEFwH4qfOqetUg64WyxP7P2
 | 
			
		||||
QLipm04SyQa7ONtIApfVXgHcE42Py4/f4arzCzMjKe3VyhGkS7nsT55X/fWgTaRm
 | 
			
		||||
CQPkO+H94P958WTvQDt77bQ+D3IvYaVvfil8n6HJMOJfFT0LJuSUbpSXJg==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIIBOwIBAAJBALtv55QyzG6i2PlwZ1pah7++Gv8L5j6Hnyr/uTZE1NLG0ABDDexm
 | 
			
		||||
q/R4KedLjFEIYjocDui+IXs62NNtXrT8odkCAwEAAQJAbwXq0vJ/+uyEvsNgxLko
 | 
			
		||||
/V86mGXQ/KrSkeKlL0r4ENxjcyeMAGoKu6J9yMY7+X9+Zm4nxShNfTsf/+Freoe1
 | 
			
		||||
HQIhAPOSm5Q1YI+KIsII2GeVJx1U69+wnd71OasIPakS1L1XAiEAxQAW+J3/JWE0
 | 
			
		||||
ftEYakbhUOKL8tD1OaFZS71/5GdG7E8CIQCefUMmySSvwd6kC0VlATSWbW+d+jp/
 | 
			
		||||
nWmM1KvqnAo5uQIhALqEADu5U1Wvt8UN8UDGBRPQulHWNycuNV45d3nnskWPAiAw
 | 
			
		||||
ueTyr6WsZ5+SD8g/Hy3xuvF3nPmJRH+rwvVihlcFOg==
 | 
			
		||||
MIIEpQIBAAKCAQEAtK2p2x0S3C1ajftAc3GaWPsji6scw1k9Sw/XltbLQuDc11/f
 | 
			
		||||
wwrUiFcje2CB3Ri6yD6+uCA3V12jEc4GdqzirJZhwgIhaTv42vfYBgiUcR9McEGr
 | 
			
		||||
agFC3yVR3lIbOzhBjmXNp1on46irxnzU4pT+w58IuvYqUBavaEtfRZocFR5NsIOy
 | 
			
		||||
mRhyNag8htOFK3wmTEYrb0vflFYT6SD47ogYtsd/xWSKS+YFyb7xSusR2Ot6Ktmr
 | 
			
		||||
MswQE57QYJz+KiRVlnL0cduMBdT52Wm8blaC9mz50PyrzjQ68NyHapCoWDU7pe4x
 | 
			
		||||
HLtzpXGSDMPuw4miiSwMym/2wReYJv6cFugLPQIDAQABAoIBAAZOyc9MhIwLSU4L
 | 
			
		||||
p4RgQvM4UVVe8/Id+3XTZ8NsXExJbWxXfIhiqGjaIfL8u4vsgRjcl+v1s/jo2/iT
 | 
			
		||||
KMab4o4D8gXD7UavQVDjtjb/ta79WL3SjRl2Uc9YjjMkyq6WmDNQeo2NKDdafCTB
 | 
			
		||||
1uzSJtLNipB8Z53ELPuHJhxX9QMHrMnuha49riQgXZ7buP9iQrHJFhImBjSzbxJx
 | 
			
		||||
L+TI6rkyLSf9Wi0Pd3L27Ob3QWNfNRYNSeTE+08eSRChkur5W0RuXAcuAICdQlCl
 | 
			
		||||
LBvWO/LmmvbzCqiDcgy/TliSb6CGGwgiNG7LJZmlkYNj8laGwalNlYZs3UrVv6NO
 | 
			
		||||
Br2loAECgYEA2kvCvPGj0Dg/6g7WhXDvAkEbcaL1tSeCxBbNH+6HS2UWMWvyTtCn
 | 
			
		||||
/bbD519QIdkvayy1QjEf32GV/UjUVmlULMLBcDy0DGjtL3+XpIhLKWDNxN1v1/ai
 | 
			
		||||
1oz23ZJCOgnk6K4qtFtlRS1XtynjA+rBetvYvLP9SKeFrnpzCgaA2r0CgYEA0+KX
 | 
			
		||||
1ACXDTNH5ySX3kMjSS9xdINf+OOw4CvPHFwbtc9aqk2HePlEsBTz5I/W3rKwXva3
 | 
			
		||||
NqZ/bRqVVeZB/hHKFywgdUQk2Uc5z/S7Lw70/w1HubNTXGU06Ngb6zOFAo/o/TwZ
 | 
			
		||||
zTP1BMIKSOB6PAZPS3l+aLO4FRIRotfFhgRHOoECgYEAmiZbqt8cJaJDB/5YYDzC
 | 
			
		||||
mp3tSk6gIb936Q6M5VqkMYp9pIKsxhk0N8aDCnTU+kIK6SzWBpr3/d9Ecmqmfyq7
 | 
			
		||||
5SvWO3KyVf0WWK9KH0abhOm2BKm2HBQvI0DB5u8sUx2/hsvOnjPYDISbZ11t0MtK
 | 
			
		||||
u35Zy89yMYcSsIYJjG/ROCUCgYEAgI2P9G5PNxEP5OtMwOsW84Y3Xat/hPAQFlI+
 | 
			
		||||
HES+AzbFGWJkeT8zL2nm95tVkFP1sggZ7Kxjz3w7cpx7GX0NkbWSE9O+T51pNASV
 | 
			
		||||
tN1sQ3p5M+/a+cnlqgfEGJVvc7iAcXQPa3LEi5h2yPR49QYXAgG6cifn3dDSpmwn
 | 
			
		||||
SUI7PQECgYEApGCIIpSRPLAEHTGmP87RBL1smurhwmy2s/pghkvUkWehtxg0sGHh
 | 
			
		||||
kuaqDWcskogv+QC0sVdytiLSz8G0DwcEcsHK1Fkyb8A+ayiw6jWJDo2m9+IF4Fww
 | 
			
		||||
1Te6jFPYDESnbhq7+TLGgHGhtwcu5cnb4vSuYXGXKupZGzoLOBbv1Zw=
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2437
									
								
								apps/cms.c
									
									
									
									
									
								
							
							
						
						
									
										2437
									
								
								apps/cms.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										704
									
								
								apps/crl.c
									
									
									
									
									
								
							
							
						
						
									
										704
									
								
								apps/crl.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -67,380 +67,376 @@
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	crl_main
 | 
			
		||||
#define PROG    crl_main
 | 
			
		||||
 | 
			
		||||
#undef POSTFIX
 | 
			
		||||
#define	POSTFIX	".rvk"
 | 
			
		||||
#define POSTFIX ".rvk"
 | 
			
		||||
 | 
			
		||||
static const char *crl_usage[]={
 | 
			
		||||
"usage: crl args\n",
 | 
			
		||||
"\n",
 | 
			
		||||
" -inform arg     - input format - default PEM (DER or PEM)\n",
 | 
			
		||||
" -outform arg    - output format - default PEM\n",
 | 
			
		||||
" -text           - print out a text format version\n",
 | 
			
		||||
" -in arg         - input file - default stdin\n",
 | 
			
		||||
" -out arg        - output file - default stdout\n",
 | 
			
		||||
" -hash           - print hash value\n",
 | 
			
		||||
" -fingerprint    - print the crl fingerprint\n",
 | 
			
		||||
" -issuer         - print issuer DN\n",
 | 
			
		||||
" -lastupdate     - lastUpdate field\n",
 | 
			
		||||
" -nextupdate     - nextUpdate field\n",
 | 
			
		||||
" -crlnumber      - print CRL number\n",
 | 
			
		||||
" -noout          - no CRL output\n",
 | 
			
		||||
" -CAfile  name   - verify CRL using certificates in file \"name\"\n",
 | 
			
		||||
" -CApath  dir    - verify CRL using certificates in \"dir\"\n",
 | 
			
		||||
" -nameopt arg    - various certificate name options\n",
 | 
			
		||||
NULL
 | 
			
		||||
static const char *crl_usage[] = {
 | 
			
		||||
    "usage: crl args\n",
 | 
			
		||||
    "\n",
 | 
			
		||||
    " -inform arg     - input format - default PEM (DER or PEM)\n",
 | 
			
		||||
    " -outform arg    - output format - default PEM\n",
 | 
			
		||||
    " -text           - print out a text format version\n",
 | 
			
		||||
    " -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",
 | 
			
		||||
    " -nextupdate     - nextUpdate field\n",
 | 
			
		||||
    " -crlnumber      - print CRL number\n",
 | 
			
		||||
    " -noout          - no CRL output\n",
 | 
			
		||||
    " -CAfile  name   - verify CRL using certificates in file \"name\"\n",
 | 
			
		||||
    " -CApath  dir    - verify CRL using certificates in \"dir\"\n",
 | 
			
		||||
    " -nameopt arg    - various certificate name options\n",
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static X509_CRL *load_crl(char *file, int format);
 | 
			
		||||
static BIO *bio_out=NULL;
 | 
			
		||||
static BIO *bio_out = NULL;
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned long nmflag = 0;
 | 
			
		||||
	X509_CRL *x=NULL;
 | 
			
		||||
	char *CAfile = NULL, *CApath = NULL;
 | 
			
		||||
	int ret=1,i,num,badops=0;
 | 
			
		||||
	BIO *out=NULL;
 | 
			
		||||
	int informat,outformat;
 | 
			
		||||
	char *infile=NULL,*outfile=NULL;
 | 
			
		||||
	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;
 | 
			
		||||
	X509_STORE_CTX ctx;
 | 
			
		||||
	X509_LOOKUP *lookup = NULL;
 | 
			
		||||
	X509_OBJECT xobj;
 | 
			
		||||
	EVP_PKEY *pkey;
 | 
			
		||||
	int do_ver = 0;
 | 
			
		||||
	const EVP_MD *md_alg,*digest=EVP_sha1();
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	if (bio_out == NULL)
 | 
			
		||||
		if ((bio_out=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_set_fp(bio_out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			bio_out = BIO_push(tmpbio, bio_out);
 | 
			
		||||
			}
 | 
			
		||||
{
 | 
			
		||||
    unsigned long nmflag = 0;
 | 
			
		||||
    X509_CRL *x = NULL;
 | 
			
		||||
    char *CAfile = NULL, *CApath = NULL;
 | 
			
		||||
    int ret = 1, i, num, badops = 0, badsig = 0;
 | 
			
		||||
    BIO *out = NULL;
 | 
			
		||||
    int informat, outformat, keyformat;
 | 
			
		||||
    char *infile = NULL, *outfile = NULL, *crldiff = NULL, *keyfile = NULL;
 | 
			
		||||
    int hash = 0, issuer = 0, lastupdate = 0, nextupdate = 0, noout =
 | 
			
		||||
        0, text = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_MD5
 | 
			
		||||
    int hash_old = 0;
 | 
			
		||||
#endif
 | 
			
		||||
			}
 | 
			
		||||
    int fingerprint = 0, crlnumber = 0;
 | 
			
		||||
    const char **pp;
 | 
			
		||||
    X509_STORE *store = NULL;
 | 
			
		||||
    X509_STORE_CTX ctx;
 | 
			
		||||
    X509_LOOKUP *lookup = NULL;
 | 
			
		||||
    X509_OBJECT xobj;
 | 
			
		||||
    EVP_PKEY *pkey;
 | 
			
		||||
    int do_ver = 0;
 | 
			
		||||
    const EVP_MD *md_alg, *digest = EVP_sha1();
 | 
			
		||||
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	num=0;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
    if (bio_out == NULL)
 | 
			
		||||
        if ((bio_out = BIO_new(BIO_s_file())) != NULL) {
 | 
			
		||||
            BIO_set_fp(bio_out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
            {
 | 
			
		||||
                BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
                bio_out = BIO_push(tmpbio, bio_out);
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
    keyformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    num = 0;
 | 
			
		||||
    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;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-CApath") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			CApath = *(++argv);
 | 
			
		||||
			do_ver = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-CAfile") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			CAfile = *(++argv);
 | 
			
		||||
			do_ver = 1;
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
		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;
 | 
			
		||||
		else if (strcmp(*argv,"-nextupdate") == 0)
 | 
			
		||||
			nextupdate= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-fingerprint") == 0)
 | 
			
		||||
			fingerprint= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-crlnumber") == 0)
 | 
			
		||||
			crlnumber= ++num;
 | 
			
		||||
		else if ((md_alg=EVP_get_digestbyname(*argv + 1)))
 | 
			
		||||
			{
 | 
			
		||||
			/* ok */
 | 
			
		||||
			digest=md_alg;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
        if (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, "-gendelta") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            crldiff = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-key") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            keyfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-keyform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            keyformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } 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;
 | 
			
		||||
            CAfile = *(++argv);
 | 
			
		||||
            do_ver = 1;
 | 
			
		||||
        } 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)
 | 
			
		||||
            issuer = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-lastupdate") == 0)
 | 
			
		||||
            lastupdate = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-nextupdate") == 0)
 | 
			
		||||
            nextupdate = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-fingerprint") == 0)
 | 
			
		||||
            fingerprint = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-crlnumber") == 0)
 | 
			
		||||
            crlnumber = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-badsig") == 0)
 | 
			
		||||
            badsig = 1;
 | 
			
		||||
        else if ((md_alg = EVP_get_digestbyname(*argv + 1))) {
 | 
			
		||||
            /* ok */
 | 
			
		||||
            digest = md_alg;
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		for (pp=crl_usage; (*pp != NULL); pp++)
 | 
			
		||||
			BIO_printf(bio_err,"%s",*pp);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        for (pp = crl_usage; (*pp != NULL); pp++)
 | 
			
		||||
            BIO_printf(bio_err, "%s", *pp);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	x=load_crl(infile,informat);
 | 
			
		||||
	if (x == NULL) { goto end; }
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    x = load_crl(infile, informat);
 | 
			
		||||
    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 (!X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM))
 | 
			
		||||
			X509_LOOKUP_load_file(lookup,NULL,X509_FILETYPE_DEFAULT);
 | 
			
		||||
			
 | 
			
		||||
		lookup=X509_STORE_add_lookup(store,X509_LOOKUP_hash_dir());
 | 
			
		||||
		if (lookup == NULL) goto end;
 | 
			
		||||
		if (!X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM))
 | 
			
		||||
			X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
 | 
			
		||||
		ERR_clear_error();
 | 
			
		||||
    if (do_ver) {
 | 
			
		||||
        store = X509_STORE_new();
 | 
			
		||||
        lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());
 | 
			
		||||
        if (lookup == NULL)
 | 
			
		||||
            goto end;
 | 
			
		||||
        if (!X509_LOOKUP_load_file(lookup, CAfile, X509_FILETYPE_PEM))
 | 
			
		||||
            X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT);
 | 
			
		||||
 | 
			
		||||
		if(!X509_STORE_CTX_init(&ctx, store, NULL, NULL)) {
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				"Error initialising X509 store\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
        lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir());
 | 
			
		||||
        if (lookup == NULL)
 | 
			
		||||
            goto end;
 | 
			
		||||
        if (!X509_LOOKUP_add_dir(lookup, CApath, X509_FILETYPE_PEM))
 | 
			
		||||
            X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT);
 | 
			
		||||
        ERR_clear_error();
 | 
			
		||||
 | 
			
		||||
		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");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		pkey = X509_get_pubkey(xobj.data.x509);
 | 
			
		||||
		X509_OBJECT_free_contents(&xobj);
 | 
			
		||||
		if(!pkey) {
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				"Error getting CRL issuer public key\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		i = X509_CRL_verify(x, pkey);
 | 
			
		||||
		EVP_PKEY_free(pkey);
 | 
			
		||||
		if(i < 0) goto end;
 | 
			
		||||
		if(i == 0) BIO_printf(bio_err, "verify failure\n");
 | 
			
		||||
		else BIO_printf(bio_err, "verify OK\n");
 | 
			
		||||
	}
 | 
			
		||||
        if (!X509_STORE_CTX_init(&ctx, store, NULL, NULL)) {
 | 
			
		||||
            BIO_printf(bio_err, "Error initialising X509 store\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	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)
 | 
			
		||||
				{
 | 
			
		||||
				ASN1_INTEGER *crlnum;
 | 
			
		||||
				crlnum = X509_CRL_get_ext_d2i(x, NID_crl_number,
 | 
			
		||||
							      NULL, NULL);
 | 
			
		||||
				BIO_printf(bio_out,"crlNumber=");
 | 
			
		||||
				if (crlnum)
 | 
			
		||||
					{
 | 
			
		||||
					i2a_ASN1_INTEGER(bio_out, crlnum);
 | 
			
		||||
					ASN1_INTEGER_free(crlnum);
 | 
			
		||||
					}
 | 
			
		||||
				else
 | 
			
		||||
					BIO_puts(bio_out, "<NONE>");
 | 
			
		||||
				BIO_printf(bio_out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
			if (hash == i)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out,"%08lx\n",
 | 
			
		||||
					X509_NAME_hash(X509_CRL_get_issuer(x)));
 | 
			
		||||
				}
 | 
			
		||||
			if (lastupdate == i)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out,"lastUpdate=");
 | 
			
		||||
				ASN1_TIME_print(bio_out,
 | 
			
		||||
						X509_CRL_get_lastUpdate(x));
 | 
			
		||||
				BIO_printf(bio_out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
			if (nextupdate == i)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out,"nextUpdate=");
 | 
			
		||||
				if (X509_CRL_get_nextUpdate(x)) 
 | 
			
		||||
					ASN1_TIME_print(bio_out,
 | 
			
		||||
						X509_CRL_get_nextUpdate(x));
 | 
			
		||||
				else
 | 
			
		||||
					BIO_printf(bio_out,"NONE");
 | 
			
		||||
				BIO_printf(bio_out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
			if (fingerprint == i)
 | 
			
		||||
				{
 | 
			
		||||
				int j;
 | 
			
		||||
				unsigned int n;
 | 
			
		||||
				unsigned char md[EVP_MAX_MD_SIZE];
 | 
			
		||||
        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");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        pkey = X509_get_pubkey(xobj.data.x509);
 | 
			
		||||
        X509_OBJECT_free_contents(&xobj);
 | 
			
		||||
        if (!pkey) {
 | 
			
		||||
            BIO_printf(bio_err, "Error getting CRL issuer public key\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        i = X509_CRL_verify(x, pkey);
 | 
			
		||||
        EVP_PKEY_free(pkey);
 | 
			
		||||
        if (i < 0)
 | 
			
		||||
            goto end;
 | 
			
		||||
        if (i == 0)
 | 
			
		||||
            BIO_printf(bio_err, "verify failure\n");
 | 
			
		||||
        else
 | 
			
		||||
            BIO_printf(bio_err, "verify OK\n");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
				if (!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)
 | 
			
		||||
						?'\n':':');
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (crldiff) {
 | 
			
		||||
        X509_CRL *newcrl, *delta;
 | 
			
		||||
        if (!keyfile) {
 | 
			
		||||
            BIO_puts(bio_err, "Missing CRL signing key\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        newcrl = load_crl(crldiff, informat);
 | 
			
		||||
        if (!newcrl)
 | 
			
		||||
            goto end;
 | 
			
		||||
        pkey = load_key(bio_err, keyfile, keyformat, 0, NULL, NULL,
 | 
			
		||||
                        "CRL signing key");
 | 
			
		||||
        if (!pkey) {
 | 
			
		||||
            X509_CRL_free(newcrl);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        delta = X509_CRL_diff(x, newcrl, pkey, digest, 0);
 | 
			
		||||
        X509_CRL_free(newcrl);
 | 
			
		||||
        EVP_PKEY_free(pkey);
 | 
			
		||||
        if (delta) {
 | 
			
		||||
            X509_CRL_free(x);
 | 
			
		||||
            x = delta;
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_puts(bio_err, "Error creating delta CRL\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    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) {
 | 
			
		||||
                ASN1_INTEGER *crlnum;
 | 
			
		||||
                crlnum = X509_CRL_get_ext_d2i(x, NID_crl_number, NULL, NULL);
 | 
			
		||||
                BIO_printf(bio_out, "crlNumber=");
 | 
			
		||||
                if (crlnum) {
 | 
			
		||||
                    i2a_ASN1_INTEGER(bio_out, crlnum);
 | 
			
		||||
                    ASN1_INTEGER_free(crlnum);
 | 
			
		||||
                } else
 | 
			
		||||
                    BIO_puts(bio_out, "<NONE>");
 | 
			
		||||
                BIO_printf(bio_out, "\n");
 | 
			
		||||
            }
 | 
			
		||||
            if (hash == i) {
 | 
			
		||||
                BIO_printf(bio_out, "%08lx\n",
 | 
			
		||||
                           X509_NAME_hash(X509_CRL_get_issuer(x)));
 | 
			
		||||
            }
 | 
			
		||||
#ifndef OPENSSL_NO_MD5
 | 
			
		||||
            if (hash_old == i) {
 | 
			
		||||
                BIO_printf(bio_out, "%08lx\n",
 | 
			
		||||
                           X509_NAME_hash_old(X509_CRL_get_issuer(x)));
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
            if (lastupdate == i) {
 | 
			
		||||
                BIO_printf(bio_out, "lastUpdate=");
 | 
			
		||||
                ASN1_TIME_print(bio_out, X509_CRL_get_lastUpdate(x));
 | 
			
		||||
                BIO_printf(bio_out, "\n");
 | 
			
		||||
            }
 | 
			
		||||
            if (nextupdate == i) {
 | 
			
		||||
                BIO_printf(bio_out, "nextUpdate=");
 | 
			
		||||
                if (X509_CRL_get_nextUpdate(x))
 | 
			
		||||
                    ASN1_TIME_print(bio_out, X509_CRL_get_nextUpdate(x));
 | 
			
		||||
                else
 | 
			
		||||
                    BIO_printf(bio_out, "NONE");
 | 
			
		||||
                BIO_printf(bio_out, "\n");
 | 
			
		||||
            }
 | 
			
		||||
            if (fingerprint == i) {
 | 
			
		||||
                int j;
 | 
			
		||||
                unsigned int n;
 | 
			
		||||
                unsigned char md[EVP_MAX_MD_SIZE];
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
                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)
 | 
			
		||||
                               ? '\n' : ':');
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if (out == NULL) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    } 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) 
 | 
			
		||||
		{
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (noout) {
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
		i=(int)i2d_X509_CRL_bio(out,x);
 | 
			
		||||
	else if (outformat == FORMAT_PEM)
 | 
			
		||||
		i=PEM_write_bio_X509_CRL(out,x);
 | 
			
		||||
	else	
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (!i) { BIO_printf(bio_err,"unable to write CRL\n"); goto end; }
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	BIO_free_all(bio_out);
 | 
			
		||||
	bio_out=NULL;
 | 
			
		||||
	X509_CRL_free(x);
 | 
			
		||||
	if(store) {
 | 
			
		||||
		X509_STORE_CTX_cleanup(&ctx);
 | 
			
		||||
		X509_STORE_free(store);
 | 
			
		||||
	}
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static X509_CRL *load_crl(char *infile, int format)
 | 
			
		||||
	{
 | 
			
		||||
	X509_CRL *x=NULL;
 | 
			
		||||
	BIO *in=NULL;
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	if (in == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if 	(format == FORMAT_ASN1)
 | 
			
		||||
		x=d2i_X509_CRL_bio(in,NULL);
 | 
			
		||||
	else if (format == FORMAT_PEM)
 | 
			
		||||
		x=PEM_read_bio_X509_CRL(in,NULL,NULL,NULL);
 | 
			
		||||
	else	{
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified for input crl\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (x == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load CRL\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
end:
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	return(x);
 | 
			
		||||
	}
 | 
			
		||||
    if (badsig)
 | 
			
		||||
        x->signature->data[x->signature->length - 1] ^= 0x1;
 | 
			
		||||
 | 
			
		||||
    if (outformat == FORMAT_ASN1)
 | 
			
		||||
        i = (int)i2d_X509_CRL_bio(out, x);
 | 
			
		||||
    else if (outformat == FORMAT_PEM)
 | 
			
		||||
        i = PEM_write_bio_X509_CRL(out, x);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (!i) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to write CRL\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (ret != 0)
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    BIO_free_all(bio_out);
 | 
			
		||||
    bio_out = NULL;
 | 
			
		||||
    X509_CRL_free(x);
 | 
			
		||||
    if (store) {
 | 
			
		||||
        X509_STORE_CTX_cleanup(&ctx);
 | 
			
		||||
        X509_STORE_free(store);
 | 
			
		||||
    }
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										463
									
								
								apps/crl2p7.c
									
									
									
									
									
								
							
							
						
						
									
										463
									
								
								apps/crl2p7.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,16 +49,18 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* This was written by Gordon Chaffee <chaffee@plateau.cs.berkeley.edu>
 | 
			
		||||
 * and donated 'to the cause' along with lots and lots of other fixes to
 | 
			
		||||
 * 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>
 | 
			
		||||
@@ -73,265 +75,260 @@
 | 
			
		||||
 | 
			
		||||
static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile);
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	crl2pkcs7_main
 | 
			
		||||
#define PROG    crl2pkcs7_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -out arg     - output file - default stdout
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int i,badops=0;
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat;
 | 
			
		||||
	char *infile,*outfile,*prog,*certfile;
 | 
			
		||||
	PKCS7 *p7 = NULL;
 | 
			
		||||
	PKCS7_SIGNED *p7s = NULL;
 | 
			
		||||
	X509_CRL *crl=NULL;
 | 
			
		||||
	STACK_OF(OPENSSL_STRING) *certflst=NULL;
 | 
			
		||||
	STACK_OF(X509_CRL) *crl_stack=NULL;
 | 
			
		||||
	STACK_OF(X509) *cert_stack=NULL;
 | 
			
		||||
	int ret=1,nocrl=0;
 | 
			
		||||
{
 | 
			
		||||
    int i, badops = 0;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int informat, outformat;
 | 
			
		||||
    char *infile, *outfile, *prog, *certfile;
 | 
			
		||||
    PKCS7 *p7 = NULL;
 | 
			
		||||
    PKCS7_SIGNED *p7s = NULL;
 | 
			
		||||
    X509_CRL *crl = NULL;
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *certflst = NULL;
 | 
			
		||||
    STACK_OF(X509_CRL) *crl_stack = NULL;
 | 
			
		||||
    STACK_OF(X509) *cert_stack = NULL;
 | 
			
		||||
    int ret = 1, nocrl = 0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    infile = NULL;
 | 
			
		||||
    outfile = NULL;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-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;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-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 {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg    input format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg   output format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg        input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg       output file\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");
 | 
			
		||||
		ret = 1;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    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, " -out arg       output file\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");
 | 
			
		||||
        ret = 1;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!nocrl)
 | 
			
		||||
		{
 | 
			
		||||
		if (infile == NULL)
 | 
			
		||||
			BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				perror(infile);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
    if (!nocrl) {
 | 
			
		||||
        if (infile == NULL)
 | 
			
		||||
            BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
        else {
 | 
			
		||||
            if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
                perror(infile);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if 	(informat == FORMAT_ASN1)
 | 
			
		||||
			crl=d2i_X509_CRL_bio(in,NULL);
 | 
			
		||||
		else if (informat == FORMAT_PEM)
 | 
			
		||||
			crl=PEM_read_bio_X509_CRL(in,NULL,NULL,NULL);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad input format specified for input crl\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (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;
 | 
			
		||||
	p7->type=OBJ_nid2obj(NID_pkcs7_signed);
 | 
			
		||||
	p7->d.sign=p7s;
 | 
			
		||||
	p7s->contents->type=OBJ_nid2obj(NID_pkcs7_data);
 | 
			
		||||
        if (informat == FORMAT_ASN1)
 | 
			
		||||
            crl = d2i_X509_CRL_bio(in, NULL);
 | 
			
		||||
        else if (informat == FORMAT_PEM)
 | 
			
		||||
            crl = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad input format specified for input crl\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (crl == NULL) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to load CRL\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            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)
 | 
			
		||||
		{
 | 
			
		||||
		sk_X509_CRL_push(crl_stack,crl);
 | 
			
		||||
		crl=NULL; /* now part of p7 for OPENSSL_freeing */
 | 
			
		||||
		}
 | 
			
		||||
    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 ((cert_stack=sk_X509_new_null()) == NULL) goto end;
 | 
			
		||||
	p7s->cert=cert_stack;
 | 
			
		||||
    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) {
 | 
			
		||||
        sk_X509_CRL_push(crl_stack, crl);
 | 
			
		||||
        crl = NULL;             /* now part of p7 for OPENSSL_freeing */
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(certflst) for(i = 0; i < sk_OPENSSL_STRING_num(certflst); i++) {
 | 
			
		||||
		certfile = sk_OPENSSL_STRING_value(certflst, i);
 | 
			
		||||
		if (add_certs_from_file(cert_stack,certfile) < 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "error loading certificates\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
	}
 | 
			
		||||
    if ((cert_stack = sk_X509_new_null()) == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
    p7s->cert = cert_stack;
 | 
			
		||||
 | 
			
		||||
	sk_OPENSSL_STRING_free(certflst);
 | 
			
		||||
    if (certflst)
 | 
			
		||||
        for (i = 0; i < sk_OPENSSL_STRING_num(certflst); i++) {
 | 
			
		||||
            certfile = sk_OPENSSL_STRING_value(certflst, i);
 | 
			
		||||
            if (add_certs_from_file(cert_stack, certfile) < 0) {
 | 
			
		||||
                BIO_printf(bio_err, "error loading certificates\n");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
    sk_OPENSSL_STRING_free(certflst);
 | 
			
		||||
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
		i=i2d_PKCS7_bio(out,p7);
 | 
			
		||||
	else if (outformat == FORMAT_PEM)
 | 
			
		||||
		i=PEM_write_bio_PKCS7(out,p7);
 | 
			
		||||
	else	{
 | 
			
		||||
		BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	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 (outformat == FORMAT_ASN1)
 | 
			
		||||
        i = i2d_PKCS7_bio(out, p7);
 | 
			
		||||
    else if (outformat == FORMAT_PEM)
 | 
			
		||||
        i = PEM_write_bio_PKCS7(out, p7);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    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);
 | 
			
		||||
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
/*-
 | 
			
		||||
 *----------------------------------------------------------------------
 | 
			
		||||
 * int add_certs_from_file
 | 
			
		||||
 *
 | 
			
		||||
 *	Read a list of certificates to be checked from a file.
 | 
			
		||||
 *      Read a list of certificates to be checked from a file.
 | 
			
		||||
 *
 | 
			
		||||
 * Results:
 | 
			
		||||
 *	number of certs added if successful, -1 if not.
 | 
			
		||||
 *      number of certs added if successful, -1 if not.
 | 
			
		||||
 *----------------------------------------------------------------------
 | 
			
		||||
 */
 | 
			
		||||
static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile)
 | 
			
		||||
	{
 | 
			
		||||
	BIO *in=NULL;
 | 
			
		||||
	int count=0;
 | 
			
		||||
	int ret= -1;
 | 
			
		||||
	STACK_OF(X509_INFO) *sk=NULL;
 | 
			
		||||
	X509_INFO *xi;
 | 
			
		||||
{
 | 
			
		||||
    BIO *in = NULL;
 | 
			
		||||
    int count = 0;
 | 
			
		||||
    int ret = -1;
 | 
			
		||||
    STACK_OF(X509_INFO) *sk = NULL;
 | 
			
		||||
    X509_INFO *xi;
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (BIO_read_filename(in,certfile) <= 0))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"error opening the file, %s\n",certfile);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (BIO_read_filename(in, certfile) <= 0)) {
 | 
			
		||||
        BIO_printf(bio_err, "error opening the file, %s\n", certfile);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	/* This loads from a file, a stack of x509/crl/pkey sets */
 | 
			
		||||
	sk=PEM_X509_INFO_read_bio(in,NULL,NULL,NULL);
 | 
			
		||||
	if (sk == NULL) {
 | 
			
		||||
		BIO_printf(bio_err,"error reading the file, %s\n",certfile);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    /* This loads from a file, a stack of x509/crl/pkey sets */
 | 
			
		||||
    sk = PEM_X509_INFO_read_bio(in, NULL, NULL, NULL);
 | 
			
		||||
    if (sk == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "error reading the file, %s\n", certfile);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	/* scan over it and pull out the CRL's */
 | 
			
		||||
	while (sk_X509_INFO_num(sk))
 | 
			
		||||
		{
 | 
			
		||||
		xi=sk_X509_INFO_shift(sk);
 | 
			
		||||
		if (xi->x509 != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			sk_X509_push(stack,xi->x509);
 | 
			
		||||
			xi->x509=NULL;
 | 
			
		||||
			count++;
 | 
			
		||||
			}
 | 
			
		||||
		X509_INFO_free(xi);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ret=count;
 | 
			
		||||
end:
 | 
			
		||||
 	/* never need to OPENSSL_free x */
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (sk != NULL) sk_X509_INFO_free(sk);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
    /* scan over it and pull out the CRL's */
 | 
			
		||||
    while (sk_X509_INFO_num(sk)) {
 | 
			
		||||
        xi = sk_X509_INFO_shift(sk);
 | 
			
		||||
        if (xi->x509 != NULL) {
 | 
			
		||||
            sk_X509_push(stack, xi->x509);
 | 
			
		||||
            xi->x509 = NULL;
 | 
			
		||||
            count++;
 | 
			
		||||
        }
 | 
			
		||||
        X509_INFO_free(xi);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ret = count;
 | 
			
		||||
 end:
 | 
			
		||||
    /* never need to OPENSSL_free x */
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (sk != NULL)
 | 
			
		||||
        sk_X509_INFO_free(sk);
 | 
			
		||||
    return (ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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
 | 
			
		||||
							
								
								
									
										1024
									
								
								apps/dgst.c
									
									
									
									
									
								
							
							
						
						
									
										1024
									
								
								apps/dgst.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										521
									
								
								apps/dh.c
									
									
									
									
									
								
							
							
						
						
									
										521
									
								
								apps/dh.c
									
									
									
									
									
								
							@@ -6,21 +6,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -35,10 +35,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -50,35 +50,36 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>	/* for OPENSSL_NO_DH */
 | 
			
		||||
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dh.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <stdlib.h>
 | 
			
		||||
# include <time.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
# include <openssl/dh.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dh_main
 | 
			
		||||
# 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
 | 
			
		||||
 * -check	- check the parameters are ok
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -out arg     - output file - default stdout
 | 
			
		||||
 * -check       - check the parameters are ok
 | 
			
		||||
 * -noout
 | 
			
		||||
 * -text
 | 
			
		||||
 * -C
 | 
			
		||||
@@ -87,272 +88,250 @@
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	DH *dh=NULL;
 | 
			
		||||
	int i,badops=0,text=0;
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat,check=0,noout=0,C=0,ret=1;
 | 
			
		||||
	char *infile,*outfile,*prog;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine;
 | 
			
		||||
#endif
 | 
			
		||||
{
 | 
			
		||||
    DH *dh = NULL;
 | 
			
		||||
    int i, badops = 0, text = 0;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int informat, outformat, check = 0, noout = 0, C = 0, ret = 1;
 | 
			
		||||
    char *infile, *outfile, *prog;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    infile = NULL;
 | 
			
		||||
    outfile = NULL;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-check") == 0)
 | 
			
		||||
			check=1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*argv,"-C") == 0)
 | 
			
		||||
			C=1;
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-check") == 0)
 | 
			
		||||
            check = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-C") == 0)
 | 
			
		||||
            C = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - 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," -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");
 | 
			
		||||
#endif
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    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, " -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, " -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");
 | 
			
		||||
# endif
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
            perror(infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if	(informat == FORMAT_ASN1)
 | 
			
		||||
		dh=d2i_DHparams_bio(in,NULL);
 | 
			
		||||
	else if (informat == FORMAT_PEM)
 | 
			
		||||
		dh=PEM_read_bio_DHparams(in,NULL,NULL,NULL);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (dh == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load DH parameters\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (informat == FORMAT_ASN1)
 | 
			
		||||
        dh = d2i_DHparams_bio(in, NULL);
 | 
			
		||||
    else if (informat == FORMAT_PEM)
 | 
			
		||||
        dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "bad input format specified\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (dh == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to load DH parameters\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
    if (text) {
 | 
			
		||||
        DHparams_print(out, dh);
 | 
			
		||||
# ifdef undef
 | 
			
		||||
        printf("p=");
 | 
			
		||||
        BN_print(stdout, dh->p);
 | 
			
		||||
        printf("\ng=");
 | 
			
		||||
        BN_print(stdout, dh->g);
 | 
			
		||||
        printf("\n");
 | 
			
		||||
        if (dh->length != 0)
 | 
			
		||||
            printf("recommended private length=%ld\n", dh->length);
 | 
			
		||||
# endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		DHparams_print(out,dh);
 | 
			
		||||
#ifdef undef
 | 
			
		||||
		printf("p=");
 | 
			
		||||
		BN_print(stdout,dh->p);
 | 
			
		||||
		printf("\ng=");
 | 
			
		||||
		BN_print(stdout,dh->g);
 | 
			
		||||
		printf("\n");
 | 
			
		||||
		if (dh->length != 0)
 | 
			
		||||
			printf("recommended private length=%ld\n",dh->length);
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if (check)
 | 
			
		||||
		{
 | 
			
		||||
		if (!DH_check(dh,&i))
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (i & DH_CHECK_P_NOT_PRIME)
 | 
			
		||||
			printf("p value is not prime\n");
 | 
			
		||||
		if (i & DH_CHECK_P_NOT_SAFE_PRIME)
 | 
			
		||||
			printf("p value is not a safe prime\n");
 | 
			
		||||
		if (i & DH_UNABLE_TO_CHECK_GENERATOR)
 | 
			
		||||
			printf("unable to check the generator value\n");
 | 
			
		||||
		if (i & DH_NOT_SUITABLE_GENERATOR)
 | 
			
		||||
			printf("the g value is not a generator\n");
 | 
			
		||||
		if (i == 0)
 | 
			
		||||
			printf("DH parameters appear to be ok.\n");
 | 
			
		||||
		}
 | 
			
		||||
	if (C)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char *data;
 | 
			
		||||
		int len,l,bits;
 | 
			
		||||
    if (check) {
 | 
			
		||||
        if (!DH_check(dh, &i)) {
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (i & DH_CHECK_P_NOT_PRIME)
 | 
			
		||||
            printf("p value is not prime\n");
 | 
			
		||||
        if (i & DH_CHECK_P_NOT_SAFE_PRIME)
 | 
			
		||||
            printf("p value is not a safe prime\n");
 | 
			
		||||
        if (i & DH_UNABLE_TO_CHECK_GENERATOR)
 | 
			
		||||
            printf("unable to check the generator value\n");
 | 
			
		||||
        if (i & DH_NOT_SUITABLE_GENERATOR)
 | 
			
		||||
            printf("the g value is not a generator\n");
 | 
			
		||||
        if (i == 0)
 | 
			
		||||
            printf("DH parameters appear to be ok.\n");
 | 
			
		||||
    }
 | 
			
		||||
    if (C) {
 | 
			
		||||
        unsigned char *data;
 | 
			
		||||
        int len, l, bits;
 | 
			
		||||
 | 
			
		||||
		len=BN_num_bytes(dh->p);
 | 
			
		||||
		bits=BN_num_bits(dh->p);
 | 
			
		||||
		data=(unsigned char *)OPENSSL_malloc(len);
 | 
			
		||||
		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");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t};\n");
 | 
			
		||||
        len = BN_num_bytes(dh->p);
 | 
			
		||||
        bits = BN_num_bits(dh->p);
 | 
			
		||||
        data = (unsigned char *)OPENSSL_malloc(len);
 | 
			
		||||
        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");
 | 
			
		||||
            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");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t};\n\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");
 | 
			
		||||
            printf("0x%02X,", data[i]);
 | 
			
		||||
        }
 | 
			
		||||
        printf("\n\t};\n\n");
 | 
			
		||||
 | 
			
		||||
		printf("DH *get_dh%d()\n\t{\n",bits);
 | 
			
		||||
		printf("\tDH *dh;\n\n");
 | 
			
		||||
		printf("\tif ((dh=DH_new()) == NULL) return(NULL);\n");
 | 
			
		||||
		printf("\tdh->p=BN_bin2bn(dh%d_p,sizeof(dh%d_p),NULL);\n",
 | 
			
		||||
			bits,bits);
 | 
			
		||||
		printf("\tdh->g=BN_bin2bn(dh%d_g,sizeof(dh%d_g),NULL);\n",
 | 
			
		||||
			bits,bits);
 | 
			
		||||
		printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
 | 
			
		||||
		printf("\t\treturn(NULL);\n");
 | 
			
		||||
		printf("\treturn(dh);\n\t}\n");
 | 
			
		||||
		OPENSSL_free(data);
 | 
			
		||||
		}
 | 
			
		||||
        printf("DH *get_dh%d()\n\t{\n", bits);
 | 
			
		||||
        printf("\tDH *dh;\n\n");
 | 
			
		||||
        printf("\tif ((dh=DH_new()) == NULL) return(NULL);\n");
 | 
			
		||||
        printf("\tdh->p=BN_bin2bn(dh%d_p,sizeof(dh%d_p),NULL);\n",
 | 
			
		||||
               bits, bits);
 | 
			
		||||
        printf("\tdh->g=BN_bin2bn(dh%d_g,sizeof(dh%d_g),NULL);\n",
 | 
			
		||||
               bits, bits);
 | 
			
		||||
        printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
 | 
			
		||||
        printf("\t\treturn(NULL);\n");
 | 
			
		||||
        printf("\treturn(dh);\n\t}\n");
 | 
			
		||||
        OPENSSL_free(data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if (!noout)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_DHparams_bio(out,dh);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i=PEM_write_bio_DHparams(out,dh);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to write DH parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dh != NULL) DH_free(dh);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_DH */
 | 
			
		||||
    if (!noout) {
 | 
			
		||||
        if (outformat == FORMAT_ASN1)
 | 
			
		||||
            i = i2d_DHparams_bio(out, dh);
 | 
			
		||||
        else if (outformat == FORMAT_PEM)
 | 
			
		||||
            i = PEM_write_bio_DHparams(out, dh);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (!i) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to write DH parameters\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (dh != NULL)
 | 
			
		||||
        DH_free(dh);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
#else                           /* !OPENSSL_NO_DH */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										795
									
								
								apps/dhparam.c
									
									
									
									
									
								
							
							
						
						
									
										795
									
								
								apps/dhparam.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -63,7 +63,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -109,35 +109,36 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>	/* for OPENSSL_NO_DH */
 | 
			
		||||
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dh.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <stdlib.h>
 | 
			
		||||
# include <time.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
# include <openssl/dh.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
#include <openssl/dsa.h>
 | 
			
		||||
#endif
 | 
			
		||||
# ifndef OPENSSL_NO_DSA
 | 
			
		||||
#  include <openssl/dsa.h>
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dhparam_main
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG    dhparam_main
 | 
			
		||||
 | 
			
		||||
#define DEFBITS	512
 | 
			
		||||
# define DEFBITS 2048
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -out arg     - output file - default stdout
 | 
			
		||||
 * -dsaparam  - read or generate DSA parameters, convert to DH
 | 
			
		||||
 * -check	- check the parameters are ok
 | 
			
		||||
 * -check       - check the parameters are ok
 | 
			
		||||
 * -noout
 | 
			
		||||
 * -text
 | 
			
		||||
 * -C
 | 
			
		||||
@@ -148,416 +149,398 @@ static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	DH *dh=NULL;
 | 
			
		||||
	int i,badops=0,text=0;
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
	int dsaparam=0;
 | 
			
		||||
#endif
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat,check=0,noout=0,C=0,ret=1;
 | 
			
		||||
	char *infile,*outfile,*prog;
 | 
			
		||||
	char *inrand=NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int num = 0, g = 0;
 | 
			
		||||
{
 | 
			
		||||
    DH *dh = NULL;
 | 
			
		||||
    int i, badops = 0, text = 0;
 | 
			
		||||
# ifndef OPENSSL_NO_DSA
 | 
			
		||||
    int dsaparam = 0;
 | 
			
		||||
# endif
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int informat, outformat, check = 0, noout = 0, C = 0, ret = 1;
 | 
			
		||||
    char *infile, *outfile, *prog;
 | 
			
		||||
    char *inrand = NULL;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    int num = 0, g = 0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    infile = NULL;
 | 
			
		||||
    outfile = NULL;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-check") == 0)
 | 
			
		||||
			check=1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
		else if (strcmp(*argv,"-dsaparam") == 0)
 | 
			
		||||
			dsaparam=1;
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-C") == 0)
 | 
			
		||||
			C=1;
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-2") == 0)
 | 
			
		||||
			g=2;
 | 
			
		||||
		else if (strcmp(*argv,"-5") == 0)
 | 
			
		||||
			g=5;
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (((sscanf(*argv,"%d",&num) == 0) || (num <= 0)))
 | 
			
		||||
			goto bad;
 | 
			
		||||
		argv++;
 | 
			
		||||
		argc--;
 | 
			
		||||
		}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-check") == 0)
 | 
			
		||||
            check = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
# ifndef OPENSSL_NO_DSA
 | 
			
		||||
        else if (strcmp(*argv, "-dsaparam") == 0)
 | 
			
		||||
            dsaparam = 1;
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-C") == 0)
 | 
			
		||||
            C = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-2") == 0)
 | 
			
		||||
            g = 2;
 | 
			
		||||
        else if (strcmp(*argv, "-5") == 0)
 | 
			
		||||
            g = 5;
 | 
			
		||||
        else if (strcmp(*argv, "-rand") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            inrand = *(++argv);
 | 
			
		||||
        } else if (((sscanf(*argv, "%d", &num) == 0) || (num <= 0)))
 | 
			
		||||
            goto bad;
 | 
			
		||||
        argv++;
 | 
			
		||||
        argc--;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	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," -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");
 | 
			
		||||
#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," -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");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		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,"               the random number generator\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout        no output\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    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, " -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");
 | 
			
		||||
# 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, " -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 2048)\n");
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        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, "               the random number generator\n");
 | 
			
		||||
        BIO_printf(bio_err, " -noout        no output\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	if (g && !num)
 | 
			
		||||
		num = DEFBITS;
 | 
			
		||||
    if (g && !num)
 | 
			
		||||
        num = DEFBITS;
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
	if (dsaparam)
 | 
			
		||||
		{
 | 
			
		||||
		if (g)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "generator may not be chosen for DSA parameters\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
#endif
 | 
			
		||||
		{
 | 
			
		||||
		/* DH parameters */
 | 
			
		||||
		if (num && !g)
 | 
			
		||||
			g = 2;
 | 
			
		||||
		}
 | 
			
		||||
# ifndef OPENSSL_NO_DSA
 | 
			
		||||
    if (dsaparam) {
 | 
			
		||||
        if (g) {
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "generator may not be chosen for DSA parameters\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else
 | 
			
		||||
# endif
 | 
			
		||||
    {
 | 
			
		||||
        /* DH parameters */
 | 
			
		||||
        if (num && !g)
 | 
			
		||||
            g = 2;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(num) {
 | 
			
		||||
    if (num) {
 | 
			
		||||
 | 
			
		||||
		BN_GENCB cb;
 | 
			
		||||
		BN_GENCB_set(&cb, dh_cb, bio_err);
 | 
			
		||||
		if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			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));
 | 
			
		||||
        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 (inrand != NULL)
 | 
			
		||||
            BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
 | 
			
		||||
                       app_RAND_load_files(inrand));
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
		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);
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
# ifndef OPENSSL_NO_DSA
 | 
			
		||||
        if (dsaparam) {
 | 
			
		||||
            DSA *dsa = DSA_new();
 | 
			
		||||
 | 
			
		||||
			dh = DSA_dup_DH(dsa);
 | 
			
		||||
			DSA_free(dsa);
 | 
			
		||||
			if (dh == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
#endif
 | 
			
		||||
			{
 | 
			
		||||
			dh = DH_new();
 | 
			
		||||
			BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g);
 | 
			
		||||
			BIO_printf(bio_err,"This is going to take a long time\n");
 | 
			
		||||
			if(!dh || !DH_generate_parameters_ex(dh, num, g, &cb))
 | 
			
		||||
				{
 | 
			
		||||
				if(dh) DH_free(dh);
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
            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;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
		app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
	} else {
 | 
			
		||||
            dh = DSA_dup_DH(dsa);
 | 
			
		||||
            DSA_free(dsa);
 | 
			
		||||
            if (dh == NULL) {
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        } else
 | 
			
		||||
# endif
 | 
			
		||||
        {
 | 
			
		||||
            dh = DH_new();
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "Generating DH parameters, %d bit long safe prime, generator %d\n",
 | 
			
		||||
                       num, g);
 | 
			
		||||
            BIO_printf(bio_err, "This is going to take a long time\n");
 | 
			
		||||
            if (!dh || !DH_generate_parameters_ex(dh, num, g, &cb)) {
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		in=BIO_new(BIO_s_file());
 | 
			
		||||
		if (in == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (infile == NULL)
 | 
			
		||||
			BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				perror(infile);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
        app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
    } else {
 | 
			
		||||
 | 
			
		||||
		if	(informat != FORMAT_ASN1 && informat != FORMAT_PEM)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"bad input format specified\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
        in = BIO_new(BIO_s_file());
 | 
			
		||||
        if (in == NULL) {
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (infile == NULL)
 | 
			
		||||
            BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
        else {
 | 
			
		||||
            if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
                perror(infile);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
		if (dsaparam)
 | 
			
		||||
			{
 | 
			
		||||
			DSA *dsa;
 | 
			
		||||
			
 | 
			
		||||
			if (informat == FORMAT_ASN1)
 | 
			
		||||
				dsa=d2i_DSAparams_bio(in,NULL);
 | 
			
		||||
			else /* informat == FORMAT_PEM */
 | 
			
		||||
				dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL);
 | 
			
		||||
			
 | 
			
		||||
			if (dsa == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"unable to load DSA parameters\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			
 | 
			
		||||
			dh = DSA_dup_DH(dsa);
 | 
			
		||||
			DSA_free(dsa);
 | 
			
		||||
			if (dh == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
#endif
 | 
			
		||||
			{
 | 
			
		||||
			if (informat == FORMAT_ASN1)
 | 
			
		||||
				dh=d2i_DHparams_bio(in,NULL);
 | 
			
		||||
			else /* informat == FORMAT_PEM */
 | 
			
		||||
				dh=PEM_read_bio_DHparams(in,NULL,NULL,NULL);
 | 
			
		||||
			
 | 
			
		||||
			if (dh == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"unable to load DH parameters\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		
 | 
			
		||||
		/* dh != NULL */
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
        if (informat != FORMAT_ASN1 && informat != FORMAT_PEM) {
 | 
			
		||||
            BIO_printf(bio_err, "bad input format specified\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
# ifndef OPENSSL_NO_DSA
 | 
			
		||||
        if (dsaparam) {
 | 
			
		||||
            DSA *dsa;
 | 
			
		||||
 | 
			
		||||
            if (informat == FORMAT_ASN1)
 | 
			
		||||
                dsa = d2i_DSAparams_bio(in, NULL);
 | 
			
		||||
            else                /* informat == FORMAT_PEM */
 | 
			
		||||
                dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL);
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		DHparams_print(out,dh);
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if (check)
 | 
			
		||||
		{
 | 
			
		||||
		if (!DH_check(dh,&i))
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (i & DH_CHECK_P_NOT_PRIME)
 | 
			
		||||
			printf("p value is not prime\n");
 | 
			
		||||
		if (i & DH_CHECK_P_NOT_SAFE_PRIME)
 | 
			
		||||
			printf("p value is not a safe prime\n");
 | 
			
		||||
		if (i & DH_UNABLE_TO_CHECK_GENERATOR)
 | 
			
		||||
			printf("unable to check the generator value\n");
 | 
			
		||||
		if (i & DH_NOT_SUITABLE_GENERATOR)
 | 
			
		||||
			printf("the g value is not a generator\n");
 | 
			
		||||
		if (i == 0)
 | 
			
		||||
			printf("DH parameters appear to be ok.\n");
 | 
			
		||||
		}
 | 
			
		||||
	if (C)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char *data;
 | 
			
		||||
		int len,l,bits;
 | 
			
		||||
            if (dsa == NULL) {
 | 
			
		||||
                BIO_printf(bio_err, "unable to load DSA parameters\n");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
		len=BN_num_bytes(dh->p);
 | 
			
		||||
		bits=BN_num_bits(dh->p);
 | 
			
		||||
		data=(unsigned char *)OPENSSL_malloc(len);
 | 
			
		||||
		if (data == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		printf("#ifndef HEADER_DH_H\n"
 | 
			
		||||
		       "#include <openssl/dh.h>\n"
 | 
			
		||||
		       "#endif\n");
 | 
			
		||||
		printf("DH *get_dh%d()\n\t{\n",bits);
 | 
			
		||||
            dh = DSA_dup_DH(dsa);
 | 
			
		||||
            DSA_free(dsa);
 | 
			
		||||
            if (dh == NULL) {
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        } else
 | 
			
		||||
# endif
 | 
			
		||||
        {
 | 
			
		||||
            if (informat == FORMAT_ASN1)
 | 
			
		||||
                dh = d2i_DHparams_bio(in, NULL);
 | 
			
		||||
            else                /* informat == FORMAT_PEM */
 | 
			
		||||
                dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL);
 | 
			
		||||
 | 
			
		||||
		l=BN_bn2bin(dh->p,data);
 | 
			
		||||
		printf("\tstatic unsigned char dh%d_p[]={",bits);
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t\t};\n");
 | 
			
		||||
            if (dh == NULL) {
 | 
			
		||||
                BIO_printf(bio_err, "unable to load DH parameters\n");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		l=BN_bn2bin(dh->g,data);
 | 
			
		||||
		printf("\tstatic unsigned char dh%d_g[]={",bits);
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t\t};\n");
 | 
			
		||||
        /* dh != NULL */
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		printf("\tDH *dh;\n\n");
 | 
			
		||||
		printf("\tif ((dh=DH_new()) == NULL) return(NULL);\n");
 | 
			
		||||
		printf("\tdh->p=BN_bin2bn(dh%d_p,sizeof(dh%d_p),NULL);\n",
 | 
			
		||||
			bits,bits);
 | 
			
		||||
		printf("\tdh->g=BN_bin2bn(dh%d_g,sizeof(dh%d_g),NULL);\n",
 | 
			
		||||
			bits,bits);
 | 
			
		||||
		printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
 | 
			
		||||
		printf("\t\t{ DH_free(dh); return(NULL); }\n");
 | 
			
		||||
		if (dh->length)
 | 
			
		||||
			printf("\tdh->length = %ld;\n", dh->length);
 | 
			
		||||
		printf("\treturn(dh);\n\t}\n");
 | 
			
		||||
		OPENSSL_free(data);
 | 
			
		||||
		}
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if (out == NULL) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (text) {
 | 
			
		||||
        DHparams_print(out, dh);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!noout)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_DHparams_bio(out,dh);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i=PEM_write_bio_DHparams(out,dh);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to write DH parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dh != NULL) DH_free(dh);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    if (check) {
 | 
			
		||||
        if (!DH_check(dh, &i)) {
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (i & DH_CHECK_P_NOT_PRIME)
 | 
			
		||||
            printf("p value is not prime\n");
 | 
			
		||||
        if (i & DH_CHECK_P_NOT_SAFE_PRIME)
 | 
			
		||||
            printf("p value is not a safe prime\n");
 | 
			
		||||
        if (i & DH_UNABLE_TO_CHECK_GENERATOR)
 | 
			
		||||
            printf("unable to check the generator value\n");
 | 
			
		||||
        if (i & DH_NOT_SUITABLE_GENERATOR)
 | 
			
		||||
            printf("the g value is not a generator\n");
 | 
			
		||||
        if (i == 0)
 | 
			
		||||
            printf("DH parameters appear to be ok.\n");
 | 
			
		||||
    }
 | 
			
		||||
    if (C) {
 | 
			
		||||
        unsigned char *data;
 | 
			
		||||
        int len, l, bits;
 | 
			
		||||
 | 
			
		||||
        len = BN_num_bytes(dh->p);
 | 
			
		||||
        bits = BN_num_bits(dh->p);
 | 
			
		||||
        data = (unsigned char *)OPENSSL_malloc(len);
 | 
			
		||||
        if (data == NULL) {
 | 
			
		||||
            perror("OPENSSL_malloc");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        printf("#ifndef HEADER_DH_H\n"
 | 
			
		||||
               "#include <openssl/dh.h>\n" "#endif\n");
 | 
			
		||||
        printf("DH *get_dh%d()\n\t{\n", bits);
 | 
			
		||||
 | 
			
		||||
        l = BN_bn2bin(dh->p, data);
 | 
			
		||||
        printf("\tstatic unsigned char dh%d_p[]={", bits);
 | 
			
		||||
        for (i = 0; i < l; i++) {
 | 
			
		||||
            if ((i % 12) == 0)
 | 
			
		||||
                printf("\n\t\t");
 | 
			
		||||
            printf("0x%02X,", data[i]);
 | 
			
		||||
        }
 | 
			
		||||
        printf("\n\t\t};\n");
 | 
			
		||||
 | 
			
		||||
        l = BN_bn2bin(dh->g, data);
 | 
			
		||||
        printf("\tstatic unsigned char dh%d_g[]={", bits);
 | 
			
		||||
        for (i = 0; i < l; i++) {
 | 
			
		||||
            if ((i % 12) == 0)
 | 
			
		||||
                printf("\n\t\t");
 | 
			
		||||
            printf("0x%02X,", data[i]);
 | 
			
		||||
        }
 | 
			
		||||
        printf("\n\t\t};\n");
 | 
			
		||||
 | 
			
		||||
        printf("\tDH *dh;\n\n");
 | 
			
		||||
        printf("\tif ((dh=DH_new()) == NULL) return(NULL);\n");
 | 
			
		||||
        printf("\tdh->p=BN_bin2bn(dh%d_p,sizeof(dh%d_p),NULL);\n",
 | 
			
		||||
               bits, bits);
 | 
			
		||||
        printf("\tdh->g=BN_bin2bn(dh%d_g,sizeof(dh%d_g),NULL);\n",
 | 
			
		||||
               bits, bits);
 | 
			
		||||
        printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
 | 
			
		||||
        printf("\t\t{ DH_free(dh); return(NULL); }\n");
 | 
			
		||||
        if (dh->length)
 | 
			
		||||
            printf("\tdh->length = %ld;\n", dh->length);
 | 
			
		||||
        printf("\treturn(dh);\n\t}\n");
 | 
			
		||||
        OPENSSL_free(data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!noout) {
 | 
			
		||||
        if (outformat == FORMAT_ASN1)
 | 
			
		||||
            i = i2d_DHparams_bio(out, dh);
 | 
			
		||||
        else if (outformat == FORMAT_PEM) {
 | 
			
		||||
            if (dh->q)
 | 
			
		||||
                i = PEM_write_bio_DHxparams(out, dh);
 | 
			
		||||
            else
 | 
			
		||||
                i = PEM_write_bio_DHparams(out, dh);
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (!i) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to write DH parameters\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (dh != NULL)
 | 
			
		||||
        DH_free(dh);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* dh_cb is identical to dsa_cb in apps/dsaparam.c */
 | 
			
		||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
{
 | 
			
		||||
    char c = '*';
 | 
			
		||||
 | 
			
		||||
	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
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
    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
 | 
			
		||||
    p = n;
 | 
			
		||||
# endif
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else /* !OPENSSL_NO_DH */
 | 
			
		||||
#else                           /* !OPENSSL_NO_DH */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										570
									
								
								apps/dsa.c
									
									
									
									
									
								
							
							
						
						
									
										570
									
								
								apps/dsa.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,328 +49,326 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>	/* for OPENSSL_NO_DSA */
 | 
			
		||||
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/dsa.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <stdlib.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include <time.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/dsa.h>
 | 
			
		||||
# include <openssl/evp.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dsa_main
 | 
			
		||||
# 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
 | 
			
		||||
 * -des		- encrypt output if PEM format with DES in cbc mode
 | 
			
		||||
 * -des3	- encrypt output if PEM format
 | 
			
		||||
 * -idea	- encrypt output if PEM format
 | 
			
		||||
 * -aes128	- encrypt output if PEM format
 | 
			
		||||
 * -aes192	- encrypt output if PEM format
 | 
			
		||||
 * -aes256	- encrypt output if PEM format
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -out arg     - output file - default stdout
 | 
			
		||||
 * -des         - encrypt output if PEM format with DES in cbc mode
 | 
			
		||||
 * -des3        - encrypt output if PEM format
 | 
			
		||||
 * -idea        - encrypt output if PEM format
 | 
			
		||||
 * -aes128      - encrypt output if PEM format
 | 
			
		||||
 * -aes192      - encrypt output if PEM format
 | 
			
		||||
 * -aes256      - encrypt output if PEM format
 | 
			
		||||
 * -camellia128 - encrypt output if PEM format
 | 
			
		||||
 * -camellia192 - encrypt output if PEM format
 | 
			
		||||
 * -camellia256 - encrypt output if PEM format
 | 
			
		||||
 * -seed        - encrypt output if PEM format
 | 
			
		||||
 * -text	- print a text version
 | 
			
		||||
 * -modulus	- print the DSA public key
 | 
			
		||||
 * -text        - print a text version
 | 
			
		||||
 * -modulus     - print the DSA public key
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	DSA *dsa=NULL;
 | 
			
		||||
	int i,badops=0;
 | 
			
		||||
	const EVP_CIPHER *enc=NULL;
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat,text=0,noout=0;
 | 
			
		||||
	int pubin = 0, pubout = 0;
 | 
			
		||||
	char *infile,*outfile,*prog;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine;
 | 
			
		||||
#endif
 | 
			
		||||
	char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
	char *passin = NULL, *passout = NULL;
 | 
			
		||||
	int modulus=0;
 | 
			
		||||
{
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    DSA *dsa = NULL;
 | 
			
		||||
    int i, badops = 0;
 | 
			
		||||
    const EVP_CIPHER *enc = NULL;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int informat, outformat, text = 0, noout = 0;
 | 
			
		||||
    int pubin = 0, pubout = 0;
 | 
			
		||||
    char *infile, *outfile, *prog;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine;
 | 
			
		||||
# endif
 | 
			
		||||
    char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
    char *passin = NULL, *passout = NULL;
 | 
			
		||||
    int modulus = 0;
 | 
			
		||||
 | 
			
		||||
	int pvk_encr = 2;
 | 
			
		||||
    int pvk_encr = 2;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    infile = NULL;
 | 
			
		||||
    outfile = NULL;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-pvk-strong") == 0)
 | 
			
		||||
			pvk_encr=2;
 | 
			
		||||
		else if (strcmp(*argv,"-pvk-weak") == 0)
 | 
			
		||||
			pvk_encr=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pvk-none") == 0)
 | 
			
		||||
			pvk_encr=0;
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*argv,"-modulus") == 0)
 | 
			
		||||
			modulus=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pubin") == 0)
 | 
			
		||||
			pubin=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pubout") == 0)
 | 
			
		||||
			pubout=1;
 | 
			
		||||
		else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passin") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargin = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passout") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargout = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-pvk-strong") == 0)
 | 
			
		||||
            pvk_encr = 2;
 | 
			
		||||
        else if (strcmp(*argv, "-pvk-weak") == 0)
 | 
			
		||||
            pvk_encr = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pvk-none") == 0)
 | 
			
		||||
            pvk_encr = 0;
 | 
			
		||||
        else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-modulus") == 0)
 | 
			
		||||
            modulus = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pubin") == 0)
 | 
			
		||||
            pubin = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pubout") == 0)
 | 
			
		||||
            pubout = 1;
 | 
			
		||||
        else if ((enc = EVP_get_cipherbyname(&(argv[0][1]))) == NULL) {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg     input format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg    output format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg         input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -passin arg     input file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg        output file\n");
 | 
			
		||||
		BIO_printf(bio_err," -passout arg    output file pass phrase source\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		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");
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		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");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
		BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		BIO_printf(bio_err," -seed           encrypt PEM output with cbc seed\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -text           print the key in text\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout          don't print key out\n");
 | 
			
		||||
		BIO_printf(bio_err," -modulus        print the DSA public value\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, " -inform arg     input format - DER or PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -outform arg    output format - DER or PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -in arg         input file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -passin arg     input file pass phrase source\n");
 | 
			
		||||
        BIO_printf(bio_err, " -out arg        output file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -passout arg    output file pass phrase source\n");
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        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");
 | 
			
		||||
# ifndef OPENSSL_NO_IDEA
 | 
			
		||||
        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");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
        BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_SEED
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -seed           encrypt PEM output with cbc seed\n");
 | 
			
		||||
# endif
 | 
			
		||||
        BIO_printf(bio_err, " -text           print the key in text\n");
 | 
			
		||||
        BIO_printf(bio_err, " -noout          don't print key out\n");
 | 
			
		||||
        BIO_printf(bio_err, " -modulus        print the DSA public value\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
            perror(infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err,"read DSA key\n");
 | 
			
		||||
    BIO_printf(bio_err, "read DSA key\n");
 | 
			
		||||
 | 
			
		||||
		{
 | 
			
		||||
		EVP_PKEY	*pkey;
 | 
			
		||||
    {
 | 
			
		||||
        EVP_PKEY *pkey;
 | 
			
		||||
 | 
			
		||||
		if (pubin)
 | 
			
		||||
			pkey = load_pubkey(bio_err, infile, informat, 1,
 | 
			
		||||
				passin, e, "Public Key");
 | 
			
		||||
		else
 | 
			
		||||
			pkey = load_key(bio_err, infile, informat, 1,
 | 
			
		||||
				passin, e, "Private Key");
 | 
			
		||||
        if (pubin)
 | 
			
		||||
            pkey = load_pubkey(bio_err, infile, informat, 1,
 | 
			
		||||
                               passin, e, "Public Key");
 | 
			
		||||
        else
 | 
			
		||||
            pkey = load_key(bio_err, infile, informat, 1,
 | 
			
		||||
                            passin, e, "Private Key");
 | 
			
		||||
 | 
			
		||||
		if (pkey)
 | 
			
		||||
			{
 | 
			
		||||
			dsa = EVP_PKEY_get1_DSA(pkey);
 | 
			
		||||
			EVP_PKEY_free(pkey);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (dsa == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load Key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
        if (pkey) {
 | 
			
		||||
            dsa = EVP_PKEY_get1_DSA(pkey);
 | 
			
		||||
            EVP_PKEY_free(pkey);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (dsa == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to load Key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (text) 
 | 
			
		||||
		if (!DSA_print(out,dsa,0))
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    if (text)
 | 
			
		||||
        if (!DSA_print(out, dsa, 0)) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	if (modulus)
 | 
			
		||||
		{
 | 
			
		||||
		fprintf(stdout,"Public Key=");
 | 
			
		||||
		BN_print(out,dsa->pub_key);
 | 
			
		||||
		fprintf(stdout,"\n");
 | 
			
		||||
		}
 | 
			
		||||
    if (modulus) {
 | 
			
		||||
        fprintf(stdout, "Public Key=");
 | 
			
		||||
        BN_print(out, dsa->pub_key);
 | 
			
		||||
        fprintf(stdout, "\n");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	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);
 | 
			
		||||
	} 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,
 | 
			
		||||
							NULL,0,NULL, passout);
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
	} else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
 | 
			
		||||
		EVP_PKEY *pk;
 | 
			
		||||
		pk = EVP_PKEY_new();
 | 
			
		||||
		EVP_PKEY_set1_DSA(pk, dsa);
 | 
			
		||||
		if (outformat == FORMAT_PVK)
 | 
			
		||||
			i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
 | 
			
		||||
		else if (pubin || pubout)
 | 
			
		||||
			i = i2b_PublicKey_bio(out, pk);
 | 
			
		||||
		else
 | 
			
		||||
			i = i2b_PrivateKey_bio(out, pk);
 | 
			
		||||
		EVP_PKEY_free(pk);
 | 
			
		||||
#endif
 | 
			
		||||
	} else {
 | 
			
		||||
		BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (i <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to write private key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
	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);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_DSA */
 | 
			
		||||
    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);
 | 
			
		||||
    } 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,
 | 
			
		||||
                                            NULL, 0, NULL, passout);
 | 
			
		||||
# if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_RC4)
 | 
			
		||||
    } else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
 | 
			
		||||
        EVP_PKEY *pk;
 | 
			
		||||
        pk = EVP_PKEY_new();
 | 
			
		||||
        EVP_PKEY_set1_DSA(pk, dsa);
 | 
			
		||||
        if (outformat == FORMAT_PVK)
 | 
			
		||||
            i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
 | 
			
		||||
        else if (pubin || pubout)
 | 
			
		||||
            i = i2b_PublicKey_bio(out, pk);
 | 
			
		||||
        else
 | 
			
		||||
            i = i2b_PrivateKey_bio(out, pk);
 | 
			
		||||
        EVP_PKEY_free(pk);
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (i <= 0) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to write private key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    } 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);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
#else                           /* !OPENSSL_NO_DSA */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										737
									
								
								apps/dsaparam.c
									
									
									
									
									
								
							
							
						
						
									
										737
									
								
								apps/dsaparam.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,41 +49,44 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>	/* for OPENSSL_NO_DSA */
 | 
			
		||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code */
 | 
			
		||||
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */
 | 
			
		||||
/*
 | 
			
		||||
 * Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code
 | 
			
		||||
 */
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
# undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dsa.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
# include <assert.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <stdlib.h>
 | 
			
		||||
# include <time.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
# include <openssl/dsa.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dsaparam_main
 | 
			
		||||
# 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
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -out arg     - output file - default stdout
 | 
			
		||||
 * -noout
 | 
			
		||||
 * -text
 | 
			
		||||
 * -C
 | 
			
		||||
@@ -94,391 +97,373 @@
 | 
			
		||||
 *  #endif
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
# ifdef GENCB_TEST
 | 
			
		||||
 | 
			
		||||
static int stop_keygen_flag = 0;
 | 
			
		||||
 | 
			
		||||
static void timebomb_sigalarm(int foo)
 | 
			
		||||
	{
 | 
			
		||||
	stop_keygen_flag = 1;
 | 
			
		||||
	}
 | 
			
		||||
{
 | 
			
		||||
    stop_keygen_flag = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	DSA *dsa=NULL;
 | 
			
		||||
	int i,badops=0,text=0;
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat,noout=0,C=0,ret=1;
 | 
			
		||||
	char *infile,*outfile,*prog,*inrand=NULL;
 | 
			
		||||
	int numbits= -1,num,genkey=0;
 | 
			
		||||
	int need_rand=0;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
	int timebomb=0;
 | 
			
		||||
#endif
 | 
			
		||||
{
 | 
			
		||||
    DSA *dsa = NULL;
 | 
			
		||||
    int i, badops = 0, text = 0;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int informat, outformat, noout = 0, C = 0, ret = 1;
 | 
			
		||||
    char *infile, *outfile, *prog, *inrand = NULL;
 | 
			
		||||
    int numbits = -1, num, genkey = 0;
 | 
			
		||||
    int need_rand = 0;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
# ifdef GENCB_TEST
 | 
			
		||||
    int timebomb = 0;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    infile = NULL;
 | 
			
		||||
    outfile = NULL;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		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;
 | 
			
		||||
			timebomb = atoi(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*argv,"-C") == 0)
 | 
			
		||||
			C=1;
 | 
			
		||||
		else if (strcmp(*argv,"-genkey") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			genkey=1;
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (sscanf(*argv,"%d",&num) == 1)
 | 
			
		||||
			{
 | 
			
		||||
			/* generate a key */
 | 
			
		||||
			numbits=num;
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        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;
 | 
			
		||||
            timebomb = atoi(*(++argv));
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-C") == 0)
 | 
			
		||||
            C = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-genkey") == 0) {
 | 
			
		||||
            genkey = 1;
 | 
			
		||||
            need_rand = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-rand") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            inrand = *(++argv);
 | 
			
		||||
            need_rand = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (sscanf(*argv, "%d", &num) == 1) {
 | 
			
		||||
            /* generate a key */
 | 
			
		||||
            numbits = num;
 | 
			
		||||
            need_rand = 1;
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] [bits] <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," -out arg      output file\n");
 | 
			
		||||
		BIO_printf(bio_err," -text         print as text\n");
 | 
			
		||||
		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");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," -engine e     use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
		BIO_printf(bio_err," -timebomb n   interrupt keygen after <n> seconds\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," number        number of bits to use for generating private key\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "%s [options] [bits] <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, " -out arg      output file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -text         print as text\n");
 | 
			
		||||
        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");
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -engine e     use engine e, possibly a hardware device.\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifdef GENCB_TEST
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -timebomb n   interrupt keygen after <n> seconds\n");
 | 
			
		||||
# endif
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " number        number of bits to use for generating private key\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
            perror(infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	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 (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)
 | 
			
		||||
		{
 | 
			
		||||
		BN_GENCB cb;
 | 
			
		||||
		BN_GENCB_set(&cb, dsa_cb, bio_err);
 | 
			
		||||
		assert(need_rand);
 | 
			
		||||
		dsa = DSA_new();
 | 
			
		||||
		if(!dsa)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"Error allocating DSA object\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
 | 
			
		||||
	        BIO_printf(bio_err,"This could take some time\n");
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
		if(timebomb > 0)
 | 
			
		||||
	{
 | 
			
		||||
		struct sigaction act;
 | 
			
		||||
		act.sa_handler = timebomb_sigalarm;
 | 
			
		||||
		act.sa_flags = 0;
 | 
			
		||||
		BIO_printf(bio_err,"(though I'll stop it if not done within %d secs)\n",
 | 
			
		||||
				timebomb);
 | 
			
		||||
		if(sigaction(SIGALRM, &act, NULL) != 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"Error, couldn't set SIGALRM handler\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		alarm(timebomb);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
	        if(!DSA_generate_parameters_ex(dsa,num,NULL,0,NULL,NULL, &cb))
 | 
			
		||||
			{
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
			if(stop_keygen_flag)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"DSA key generation time-stopped\n");
 | 
			
		||||
				/* This is an asked-for behaviour! */
 | 
			
		||||
				ret = 0;
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
#endif
 | 
			
		||||
			BIO_printf(bio_err,"Error, DSA key generation failed\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	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
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (dsa == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load DSA parameters\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (numbits > 0) {
 | 
			
		||||
        BN_GENCB cb;
 | 
			
		||||
        BN_GENCB_set(&cb, dsa_cb, bio_err);
 | 
			
		||||
        assert(need_rand);
 | 
			
		||||
        dsa = DSA_new();
 | 
			
		||||
        if (!dsa) {
 | 
			
		||||
            BIO_printf(bio_err, "Error allocating DSA object\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\n",
 | 
			
		||||
                   num);
 | 
			
		||||
        BIO_printf(bio_err, "This could take some time\n");
 | 
			
		||||
# ifdef GENCB_TEST
 | 
			
		||||
        if (timebomb > 0) {
 | 
			
		||||
            struct sigaction act;
 | 
			
		||||
            act.sa_handler = timebomb_sigalarm;
 | 
			
		||||
            act.sa_flags = 0;
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "(though I'll stop it if not done within %d secs)\n",
 | 
			
		||||
                       timebomb);
 | 
			
		||||
            if (sigaction(SIGALRM, &act, NULL) != 0) {
 | 
			
		||||
                BIO_printf(bio_err, "Error, couldn't set SIGALRM handler\n");
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
            alarm(timebomb);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        if (!DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL, &cb)) {
 | 
			
		||||
# ifdef GENCB_TEST
 | 
			
		||||
            if (stop_keygen_flag) {
 | 
			
		||||
                BIO_printf(bio_err, "DSA key generation time-stopped\n");
 | 
			
		||||
                /* This is an asked-for behaviour! */
 | 
			
		||||
                ret = 0;
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
# endif
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            BIO_printf(bio_err, "Error, DSA key generation failed\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (informat == FORMAT_ASN1)
 | 
			
		||||
        dsa = d2i_DSAparams_bio(in, NULL);
 | 
			
		||||
    else if (informat == FORMAT_PEM)
 | 
			
		||||
        dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "bad input format specified\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (dsa == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to load DSA parameters\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		DSAparams_print(out,dsa);
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if (C)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char *data;
 | 
			
		||||
		int l,len,bits_p,bits_q,bits_g;
 | 
			
		||||
    if (text) {
 | 
			
		||||
        DSAparams_print(out, dsa);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		len=BN_num_bytes(dsa->p);
 | 
			
		||||
		bits_p=BN_num_bits(dsa->p);
 | 
			
		||||
		bits_q=BN_num_bits(dsa->q);
 | 
			
		||||
		bits_g=BN_num_bits(dsa->g);
 | 
			
		||||
		data=(unsigned char *)OPENSSL_malloc(len+20);
 | 
			
		||||
		if (data == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		l=BN_bn2bin(dsa->p,data);
 | 
			
		||||
		printf("static unsigned char dsa%d_p[]={",bits_p);
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t};\n");
 | 
			
		||||
    if (C) {
 | 
			
		||||
        unsigned char *data;
 | 
			
		||||
        int l, len, bits_p;
 | 
			
		||||
 | 
			
		||||
		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");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t};\n");
 | 
			
		||||
        len = BN_num_bytes(dsa->p);
 | 
			
		||||
        bits_p = BN_num_bits(dsa->p);
 | 
			
		||||
        data = (unsigned char *)OPENSSL_malloc(len + 20);
 | 
			
		||||
        if (data == NULL) {
 | 
			
		||||
            perror("OPENSSL_malloc");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        l = BN_bn2bin(dsa->p, data);
 | 
			
		||||
        printf("static unsigned char dsa%d_p[]={", bits_p);
 | 
			
		||||
        for (i = 0; i < l; i++) {
 | 
			
		||||
            if ((i % 12) == 0)
 | 
			
		||||
                printf("\n\t");
 | 
			
		||||
            printf("0x%02X,", data[i]);
 | 
			
		||||
        }
 | 
			
		||||
        printf("\n\t};\n");
 | 
			
		||||
 | 
			
		||||
		l=BN_bn2bin(dsa->g,data);
 | 
			
		||||
		printf("static unsigned char dsa%d_g[]={",bits_p);
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t};\n\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");
 | 
			
		||||
            printf("0x%02X,", data[i]);
 | 
			
		||||
        }
 | 
			
		||||
        printf("\n\t};\n");
 | 
			
		||||
 | 
			
		||||
		printf("DSA *get_dsa%d()\n\t{\n",bits_p);
 | 
			
		||||
		printf("\tDSA *dsa;\n\n");
 | 
			
		||||
		printf("\tif ((dsa=DSA_new()) == NULL) return(NULL);\n");
 | 
			
		||||
		printf("\tdsa->p=BN_bin2bn(dsa%d_p,sizeof(dsa%d_p),NULL);\n",
 | 
			
		||||
			bits_p,bits_p);
 | 
			
		||||
		printf("\tdsa->q=BN_bin2bn(dsa%d_q,sizeof(dsa%d_q),NULL);\n",
 | 
			
		||||
			bits_p,bits_p);
 | 
			
		||||
		printf("\tdsa->g=BN_bin2bn(dsa%d_g,sizeof(dsa%d_g),NULL);\n",
 | 
			
		||||
			bits_p,bits_p);
 | 
			
		||||
		printf("\tif ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))\n");
 | 
			
		||||
		printf("\t\t{ DSA_free(dsa); return(NULL); }\n");
 | 
			
		||||
		printf("\treturn(dsa);\n\t}\n");
 | 
			
		||||
		}
 | 
			
		||||
        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");
 | 
			
		||||
            printf("0x%02X,", data[i]);
 | 
			
		||||
        }
 | 
			
		||||
        printf("\n\t};\n\n");
 | 
			
		||||
 | 
			
		||||
        printf("DSA *get_dsa%d()\n\t{\n", bits_p);
 | 
			
		||||
        printf("\tDSA *dsa;\n\n");
 | 
			
		||||
        printf("\tif ((dsa=DSA_new()) == NULL) return(NULL);\n");
 | 
			
		||||
        printf("\tdsa->p=BN_bin2bn(dsa%d_p,sizeof(dsa%d_p),NULL);\n",
 | 
			
		||||
               bits_p, bits_p);
 | 
			
		||||
        printf("\tdsa->q=BN_bin2bn(dsa%d_q,sizeof(dsa%d_q),NULL);\n",
 | 
			
		||||
               bits_p, bits_p);
 | 
			
		||||
        printf("\tdsa->g=BN_bin2bn(dsa%d_g,sizeof(dsa%d_g),NULL);\n",
 | 
			
		||||
               bits_p, bits_p);
 | 
			
		||||
        printf
 | 
			
		||||
            ("\tif ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))\n");
 | 
			
		||||
        printf("\t\t{ DSA_free(dsa); return(NULL); }\n");
 | 
			
		||||
        printf("\treturn(dsa);\n\t}\n");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!noout)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_DSAparams_bio(out,dsa);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i=PEM_write_bio_DSAparams(out,dsa);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to write DSA parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (genkey)
 | 
			
		||||
		{
 | 
			
		||||
		DSA *dsakey;
 | 
			
		||||
    if (!noout) {
 | 
			
		||||
        if (outformat == FORMAT_ASN1)
 | 
			
		||||
            i = i2d_DSAparams_bio(out, dsa);
 | 
			
		||||
        else if (outformat == FORMAT_PEM)
 | 
			
		||||
            i = PEM_write_bio_DSAparams(out, dsa);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (!i) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to write DSA parameters\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (genkey) {
 | 
			
		||||
        DSA *dsakey;
 | 
			
		||||
 | 
			
		||||
		assert(need_rand);
 | 
			
		||||
		if ((dsakey=DSAparams_dup(dsa)) == NULL) goto end;
 | 
			
		||||
		if (!DSA_generate_key(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);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		DSA_free(dsakey);
 | 
			
		||||
		}
 | 
			
		||||
	if (need_rand)
 | 
			
		||||
		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);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
        assert(need_rand);
 | 
			
		||||
        if ((dsakey = DSAparams_dup(dsa)) == NULL)
 | 
			
		||||
            goto end;
 | 
			
		||||
        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);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            DSA_free(dsakey);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        DSA_free(dsakey);
 | 
			
		||||
    }
 | 
			
		||||
    if (need_rand)
 | 
			
		||||
        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);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
{
 | 
			
		||||
    char c = '*';
 | 
			
		||||
 | 
			
		||||
	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
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
	if(stop_keygen_flag)
 | 
			
		||||
		return 0;
 | 
			
		||||
#endif
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_DSA */
 | 
			
		||||
    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
 | 
			
		||||
    p = n;
 | 
			
		||||
# endif
 | 
			
		||||
# ifdef GENCB_TEST
 | 
			
		||||
    if (stop_keygen_flag)
 | 
			
		||||
        return 0;
 | 
			
		||||
# endif
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
#else                           /* !OPENSSL_NO_DSA */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										572
									
								
								apps/ec.c
									
									
									
									
									
								
							
							
						
						
									
										572
									
								
								apps/ec.c
									
									
									
									
									
								
							@@ -10,7 +10,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -58,19 +58,20 @@
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
#ifndef OPENSSL_NO_EC
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <stdlib.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/evp.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	ec_main
 | 
			
		||||
# 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
 | 
			
		||||
@@ -85,325 +86,280 @@ int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE 	*e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int 	ret = 1;
 | 
			
		||||
	EC_KEY 	*eckey = NULL;
 | 
			
		||||
	const EC_GROUP *group;
 | 
			
		||||
	int 	i, badops = 0;
 | 
			
		||||
	const EVP_CIPHER *enc = NULL;
 | 
			
		||||
	BIO 	*in = NULL, *out = NULL;
 | 
			
		||||
	int 	informat, outformat, text=0, noout=0;
 | 
			
		||||
	int  	pubin = 0, pubout = 0, param_out = 0;
 | 
			
		||||
	char 	*infile, *outfile, *prog, *engine;
 | 
			
		||||
	char 	*passargin = NULL, *passargout = NULL;
 | 
			
		||||
	char 	*passin = NULL, *passout = NULL;
 | 
			
		||||
	point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
 | 
			
		||||
	int	new_form = 0;
 | 
			
		||||
	int	asn1_flag = OPENSSL_EC_NAMED_CURVE;
 | 
			
		||||
	int 	new_asn1_flag = 0;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    EC_KEY *eckey = NULL;
 | 
			
		||||
    const EC_GROUP *group;
 | 
			
		||||
    int i, badops = 0;
 | 
			
		||||
    const EVP_CIPHER *enc = NULL;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int informat, outformat, text = 0, noout = 0;
 | 
			
		||||
    int pubin = 0, pubout = 0, param_out = 0;
 | 
			
		||||
    char *infile, *outfile, *prog, *engine;
 | 
			
		||||
    char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
    char *passin = NULL, *passout = NULL;
 | 
			
		||||
    point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
 | 
			
		||||
    int new_form = 0;
 | 
			
		||||
    int asn1_flag = OPENSSL_EC_NAMED_CURVE;
 | 
			
		||||
    int new_asn1_flag = 0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	engine = NULL;
 | 
			
		||||
	infile = NULL;
 | 
			
		||||
	outfile = NULL;
 | 
			
		||||
	informat = FORMAT_PEM;
 | 
			
		||||
	outformat = FORMAT_PEM;
 | 
			
		||||
    engine = NULL;
 | 
			
		||||
    infile = NULL;
 | 
			
		||||
    outfile = NULL;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog = argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if (strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
			noout = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
			text = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-conv_form") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
			new_form = 1;
 | 
			
		||||
			if (strcmp(*argv, "compressed") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_COMPRESSED;
 | 
			
		||||
			else if (strcmp(*argv, "uncompressed") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_UNCOMPRESSED;
 | 
			
		||||
			else if (strcmp(*argv, "hybrid") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_HYBRID;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-param_enc") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
			new_asn1_flag = 1;
 | 
			
		||||
			if (strcmp(*argv, "named_curve") == 0)
 | 
			
		||||
				asn1_flag = OPENSSL_EC_NAMED_CURVE;
 | 
			
		||||
			else if (strcmp(*argv, "explicit") == 0)
 | 
			
		||||
				asn1_flag = 0;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-param_out") == 0)
 | 
			
		||||
			param_out = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-pubin") == 0)
 | 
			
		||||
			pubin=1;
 | 
			
		||||
		else if (strcmp(*argv, "-pubout") == 0)
 | 
			
		||||
			pubout=1;
 | 
			
		||||
		else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passin") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargin = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passout") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargout = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-conv_form") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            ++argv;
 | 
			
		||||
            new_form = 1;
 | 
			
		||||
            if (strcmp(*argv, "compressed") == 0)
 | 
			
		||||
                form = POINT_CONVERSION_COMPRESSED;
 | 
			
		||||
            else if (strcmp(*argv, "uncompressed") == 0)
 | 
			
		||||
                form = POINT_CONVERSION_UNCOMPRESSED;
 | 
			
		||||
            else if (strcmp(*argv, "hybrid") == 0)
 | 
			
		||||
                form = POINT_CONVERSION_HYBRID;
 | 
			
		||||
            else
 | 
			
		||||
                goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-param_enc") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            ++argv;
 | 
			
		||||
            new_asn1_flag = 1;
 | 
			
		||||
            if (strcmp(*argv, "named_curve") == 0)
 | 
			
		||||
                asn1_flag = OPENSSL_EC_NAMED_CURVE;
 | 
			
		||||
            else if (strcmp(*argv, "explicit") == 0)
 | 
			
		||||
                asn1_flag = 0;
 | 
			
		||||
            else
 | 
			
		||||
                goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-param_out") == 0)
 | 
			
		||||
            param_out = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pubin") == 0)
 | 
			
		||||
            pubin = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pubout") == 0)
 | 
			
		||||
            pubout = 1;
 | 
			
		||||
        else if ((enc = EVP_get_cipherbyname(&(argv[0][1]))) == NULL) {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
		BIO_printf(bio_err, " -inform arg     input format - "
 | 
			
		||||
				"DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err, " -outform arg    output format - "
 | 
			
		||||
				"DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err, " -in arg         input file\n");
 | 
			
		||||
		BIO_printf(bio_err, " -passin arg     input file pass "
 | 
			
		||||
				"phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err, " -out arg        output file\n");
 | 
			
		||||
		BIO_printf(bio_err, " -passout arg    output file pass "
 | 
			
		||||
				"phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err, " -engine e       use engine e, "
 | 
			
		||||
				"possibly a hardware device.\n");
 | 
			
		||||
		BIO_printf(bio_err, " -des            encrypt PEM output, "
 | 
			
		||||
				"instead of 'des' every other \n"
 | 
			
		||||
				"                 cipher "
 | 
			
		||||
				"supported by OpenSSL can be used\n");
 | 
			
		||||
		BIO_printf(bio_err, " -text           print the key\n");
 | 
			
		||||
		BIO_printf(bio_err, " -noout          don't print key out\n");
 | 
			
		||||
		BIO_printf(bio_err, " -param_out      print the elliptic "
 | 
			
		||||
				"curve parameters\n");
 | 
			
		||||
		BIO_printf(bio_err, " -conv_form arg  specifies the "
 | 
			
		||||
				"point conversion form \n");
 | 
			
		||||
		BIO_printf(bio_err, "                 possible values:"
 | 
			
		||||
				" compressed\n");
 | 
			
		||||
		BIO_printf(bio_err, "                                 "
 | 
			
		||||
				" uncompressed (default)\n");
 | 
			
		||||
		BIO_printf(bio_err, "                                  "
 | 
			
		||||
				" hybrid\n");
 | 
			
		||||
		BIO_printf(bio_err, " -param_enc arg  specifies the way"
 | 
			
		||||
				" the ec parameters are encoded\n");
 | 
			
		||||
		BIO_printf(bio_err, "                 in the asn1 der "
 | 
			
		||||
				"encoding\n");
 | 
			
		||||
		BIO_printf(bio_err, "                 possible values:"
 | 
			
		||||
				" named_curve (default)\n");
 | 
			
		||||
		BIO_printf(bio_err,"                                  "
 | 
			
		||||
				"explicit\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, " -inform arg     input format - "
 | 
			
		||||
                   "DER or PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -outform arg    output format - "
 | 
			
		||||
                   "DER or PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -in arg         input file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -passin arg     input file pass "
 | 
			
		||||
                   "phrase source\n");
 | 
			
		||||
        BIO_printf(bio_err, " -out arg        output file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -passout arg    output file pass "
 | 
			
		||||
                   "phrase source\n");
 | 
			
		||||
        BIO_printf(bio_err, " -engine e       use engine e, "
 | 
			
		||||
                   "possibly a hardware device.\n");
 | 
			
		||||
        BIO_printf(bio_err, " -des            encrypt PEM output, "
 | 
			
		||||
                   "instead of 'des' every other \n"
 | 
			
		||||
                   "                 cipher "
 | 
			
		||||
                   "supported by OpenSSL can be used\n");
 | 
			
		||||
        BIO_printf(bio_err, " -text           print the key\n");
 | 
			
		||||
        BIO_printf(bio_err, " -noout          don't print key out\n");
 | 
			
		||||
        BIO_printf(bio_err, " -param_out      print the elliptic "
 | 
			
		||||
                   "curve parameters\n");
 | 
			
		||||
        BIO_printf(bio_err, " -conv_form arg  specifies the "
 | 
			
		||||
                   "point conversion form \n");
 | 
			
		||||
        BIO_printf(bio_err, "                 possible values:"
 | 
			
		||||
                   " compressed\n");
 | 
			
		||||
        BIO_printf(bio_err, "                                 "
 | 
			
		||||
                   " uncompressed (default)\n");
 | 
			
		||||
        BIO_printf(bio_err, "                                  " " hybrid\n");
 | 
			
		||||
        BIO_printf(bio_err, " -param_enc arg  specifies the way"
 | 
			
		||||
                   " the ec parameters are encoded\n");
 | 
			
		||||
        BIO_printf(bio_err, "                 in the asn1 der " "encoding\n");
 | 
			
		||||
        BIO_printf(bio_err, "                 possible values:"
 | 
			
		||||
                   " named_curve (default)\n");
 | 
			
		||||
        BIO_printf(bio_err, "                                  "
 | 
			
		||||
                   "explicit\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) 
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	in = BIO_new(BIO_s_file());
 | 
			
		||||
	out = BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in, infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
            perror(infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err, "read EC key\n");
 | 
			
		||||
	if (informat == FORMAT_ASN1) 
 | 
			
		||||
		{
 | 
			
		||||
		if (pubin) 
 | 
			
		||||
			eckey = d2i_EC_PUBKEY_bio(in, NULL);
 | 
			
		||||
		else 
 | 
			
		||||
			eckey = d2i_ECPrivateKey_bio(in, NULL);
 | 
			
		||||
		} 
 | 
			
		||||
	else if (informat == FORMAT_PEM) 
 | 
			
		||||
		{
 | 
			
		||||
		if (pubin) 
 | 
			
		||||
			eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL, 
 | 
			
		||||
				NULL);
 | 
			
		||||
		else 
 | 
			
		||||
			eckey = PEM_read_bio_ECPrivateKey(in, NULL, NULL,
 | 
			
		||||
				passin);
 | 
			
		||||
		} 
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "bad input format specified for key\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (eckey == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load Key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    BIO_printf(bio_err, "read EC key\n");
 | 
			
		||||
    if (informat == FORMAT_ASN1) {
 | 
			
		||||
        if (pubin)
 | 
			
		||||
            eckey = d2i_EC_PUBKEY_bio(in, NULL);
 | 
			
		||||
        else
 | 
			
		||||
            eckey = d2i_ECPrivateKey_bio(in, NULL);
 | 
			
		||||
    } else if (informat == FORMAT_PEM) {
 | 
			
		||||
        if (pubin)
 | 
			
		||||
            eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL, NULL);
 | 
			
		||||
        else
 | 
			
		||||
            eckey = PEM_read_bio_ECPrivateKey(in, NULL, NULL, passin);
 | 
			
		||||
    } else {
 | 
			
		||||
        BIO_printf(bio_err, "bad input format specified for key\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (eckey == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to load Key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out, outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	group = EC_KEY_get0_group(eckey);
 | 
			
		||||
    group = EC_KEY_get0_group(eckey);
 | 
			
		||||
 | 
			
		||||
	if (new_form)
 | 
			
		||||
		EC_KEY_set_conv_form(eckey, form);
 | 
			
		||||
    if (new_form)
 | 
			
		||||
        EC_KEY_set_conv_form(eckey, form);
 | 
			
		||||
 | 
			
		||||
	if (new_asn1_flag)
 | 
			
		||||
		EC_KEY_set_asn1_flag(eckey, asn1_flag);
 | 
			
		||||
    if (new_asn1_flag)
 | 
			
		||||
        EC_KEY_set_asn1_flag(eckey, asn1_flag);
 | 
			
		||||
 | 
			
		||||
	if (text) 
 | 
			
		||||
		if (!EC_KEY_print(out, eckey, 0))
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    if (text)
 | 
			
		||||
        if (!EC_KEY_print(out, eckey, 0)) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	if (noout) 
 | 
			
		||||
		{
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (noout) {
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err, "writing EC key\n");
 | 
			
		||||
	if (outformat == FORMAT_ASN1) 
 | 
			
		||||
		{
 | 
			
		||||
		if (param_out)
 | 
			
		||||
			i = i2d_ECPKParameters_bio(out, group);
 | 
			
		||||
		else if (pubin || pubout) 
 | 
			
		||||
			i = i2d_EC_PUBKEY_bio(out, eckey);
 | 
			
		||||
		else 
 | 
			
		||||
			i = i2d_ECPrivateKey_bio(out, eckey);
 | 
			
		||||
		} 
 | 
			
		||||
	else if (outformat == FORMAT_PEM) 
 | 
			
		||||
		{
 | 
			
		||||
		if (param_out)
 | 
			
		||||
			i = PEM_write_bio_ECPKParameters(out, group);
 | 
			
		||||
		else if (pubin || pubout)
 | 
			
		||||
			i = PEM_write_bio_EC_PUBKEY(out, eckey);
 | 
			
		||||
		else 
 | 
			
		||||
			i = PEM_write_bio_ECPrivateKey(out, eckey, enc,
 | 
			
		||||
						NULL, 0, NULL, passout);
 | 
			
		||||
		} 
 | 
			
		||||
	else 
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "bad output format specified for "
 | 
			
		||||
			"outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    BIO_printf(bio_err, "writing EC key\n");
 | 
			
		||||
    if (outformat == FORMAT_ASN1) {
 | 
			
		||||
        if (param_out)
 | 
			
		||||
            i = i2d_ECPKParameters_bio(out, group);
 | 
			
		||||
        else if (pubin || pubout)
 | 
			
		||||
            i = i2d_EC_PUBKEY_bio(out, eckey);
 | 
			
		||||
        else
 | 
			
		||||
            i = i2d_ECPrivateKey_bio(out, eckey);
 | 
			
		||||
    } else if (outformat == FORMAT_PEM) {
 | 
			
		||||
        if (param_out)
 | 
			
		||||
            i = PEM_write_bio_ECPKParameters(out, group);
 | 
			
		||||
        else if (pubin || pubout)
 | 
			
		||||
            i = PEM_write_bio_EC_PUBKEY(out, eckey);
 | 
			
		||||
        else
 | 
			
		||||
            i = PEM_write_bio_ECPrivateKey(out, eckey, enc,
 | 
			
		||||
                                           NULL, 0, NULL, passout);
 | 
			
		||||
    } else {
 | 
			
		||||
        BIO_printf(bio_err, "bad output format specified for " "outfile\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!i)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "unable to write private key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (in)
 | 
			
		||||
		BIO_free(in);
 | 
			
		||||
	if (out)
 | 
			
		||||
		BIO_free_all(out);
 | 
			
		||||
	if (eckey)
 | 
			
		||||
		EC_KEY_free(eckey);
 | 
			
		||||
	if (passin)
 | 
			
		||||
		OPENSSL_free(passin);
 | 
			
		||||
	if (passout)
 | 
			
		||||
		OPENSSL_free(passout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
    if (!i) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to write private key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    } else
 | 
			
		||||
        ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (in)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (eckey)
 | 
			
		||||
        EC_KEY_free(eckey);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
    if (passout)
 | 
			
		||||
        OPENSSL_free(passout);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
#else /* !OPENSSL_NO_EC */
 | 
			
		||||
#else                           /* !OPENSSL_NO_EC */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1088
									
								
								apps/ecparam.c
									
									
									
									
									
								
							
							
						
						
									
										1088
									
								
								apps/ecparam.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1145
									
								
								apps/enc.c
									
									
									
									
									
								
							
							
						
						
									
										1145
									
								
								apps/enc.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										846
									
								
								apps/engine.c
									
									
									
									
									
								
							
							
						
						
									
										846
									
								
								apps/engine.c
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
/* 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.
 | 
			
		||||
@@ -10,7 +11,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -56,494 +57,461 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#ifdef OPENSSL_NO_STDIO
 | 
			
		||||
#define APPS_WIN16
 | 
			
		||||
# define APPS_WIN16
 | 
			
		||||
#endif
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#include <openssl/engine.h>
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
# include <openssl/engine.h>
 | 
			
		||||
# include <openssl/ssl.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	engine_main
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG    engine_main
 | 
			
		||||
 | 
			
		||||
static const char *engine_usage[]={
 | 
			
		||||
"usage: engine opts [engine ...]\n",
 | 
			
		||||
" -v[v[v[v]]] - verbose mode, for each engine, list its 'control commands'\n",
 | 
			
		||||
"               -vv will additionally display each command's description\n",
 | 
			
		||||
"               -vvv will also add the input flags for each command\n",
 | 
			
		||||
"               -vvvv will also show internal input flags\n",
 | 
			
		||||
" -c          - for each engine, also list the capabilities\n",
 | 
			
		||||
" -t[t]       - for each engine, check that they are really available\n",
 | 
			
		||||
"               -tt will display error trace for unavailable engines\n",
 | 
			
		||||
" -pre <cmd>  - runs command 'cmd' against the ENGINE before any attempts\n",
 | 
			
		||||
"               to load it (if -t is used)\n",
 | 
			
		||||
" -post <cmd> - runs command 'cmd' against the ENGINE after loading it\n",
 | 
			
		||||
"               (only used if -t is also provided)\n",
 | 
			
		||||
" NB: -pre and -post will be applied to all ENGINEs supplied on the command\n",
 | 
			
		||||
" line, or all supported ENGINEs if none are specified.\n",
 | 
			
		||||
" Eg. '-pre \"SO_PATH:/lib/libdriver.so\"' calls command \"SO_PATH\" with\n",
 | 
			
		||||
" argument \"/lib/libdriver.so\".\n",
 | 
			
		||||
NULL
 | 
			
		||||
static const char *engine_usage[] = {
 | 
			
		||||
    "usage: engine opts [engine ...]\n",
 | 
			
		||||
    " -v[v[v[v]]] - verbose mode, for each engine, list its 'control commands'\n",
 | 
			
		||||
    "               -vv will additionally display each command's description\n",
 | 
			
		||||
    "               -vvv will also add the input flags for each command\n",
 | 
			
		||||
    "               -vvvv will also show internal input flags\n",
 | 
			
		||||
    " -c          - for each engine, also list the capabilities\n",
 | 
			
		||||
    " -t[t]       - for each engine, check that they are really available\n",
 | 
			
		||||
    "               -tt will display error trace for unavailable engines\n",
 | 
			
		||||
    " -pre <cmd>  - runs command 'cmd' against the ENGINE before any attempts\n",
 | 
			
		||||
    "               to load it (if -t is used)\n",
 | 
			
		||||
    " -post <cmd> - runs command 'cmd' against the ENGINE after loading it\n",
 | 
			
		||||
    "               (only used if -t is also provided)\n",
 | 
			
		||||
    " NB: -pre and -post will be applied to all ENGINEs supplied on the command\n",
 | 
			
		||||
    " line, or all supported ENGINEs if none are specified.\n",
 | 
			
		||||
    " Eg. '-pre \"SO_PATH:/lib/libdriver.so\"' calls command \"SO_PATH\" with\n",
 | 
			
		||||
    " argument \"/lib/libdriver.so\".\n",
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void identity(char *ptr)
 | 
			
		||||
	{
 | 
			
		||||
	return;
 | 
			
		||||
	}
 | 
			
		||||
{
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int append_buf(char **buf, const char *s, int *size, int step)
 | 
			
		||||
	{
 | 
			
		||||
	int l = strlen(s);
 | 
			
		||||
{
 | 
			
		||||
    int l = strlen(s);
 | 
			
		||||
 | 
			
		||||
	if (*buf == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		*size = step;
 | 
			
		||||
		*buf = OPENSSL_malloc(*size);
 | 
			
		||||
		if (*buf == NULL)
 | 
			
		||||
			return 0;
 | 
			
		||||
		**buf = '\0';
 | 
			
		||||
		}
 | 
			
		||||
    if (*buf == NULL) {
 | 
			
		||||
        *size = step;
 | 
			
		||||
        *buf = OPENSSL_malloc(*size);
 | 
			
		||||
        if (*buf == NULL)
 | 
			
		||||
            return 0;
 | 
			
		||||
        **buf = '\0';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (**buf != '\0')
 | 
			
		||||
		l += 2;		/* ", " */
 | 
			
		||||
    if (**buf != '\0')
 | 
			
		||||
        l += 2;                 /* ", " */
 | 
			
		||||
 | 
			
		||||
	if (strlen(*buf) + strlen(s) >= (unsigned int)*size)
 | 
			
		||||
		{
 | 
			
		||||
		*size += step;
 | 
			
		||||
		*buf = OPENSSL_realloc(*buf, *size);
 | 
			
		||||
		}
 | 
			
		||||
    if (strlen(*buf) + strlen(s) >= (unsigned int)*size) {
 | 
			
		||||
        *size += step;
 | 
			
		||||
        *buf = OPENSSL_realloc(*buf, *size);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (*buf == NULL)
 | 
			
		||||
		return 0;
 | 
			
		||||
    if (*buf == NULL)
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
	if (**buf != '\0')
 | 
			
		||||
		BUF_strlcat(*buf, ", ", *size);
 | 
			
		||||
	BUF_strlcat(*buf, s, *size);
 | 
			
		||||
    if (**buf != '\0')
 | 
			
		||||
        BUF_strlcat(*buf, ", ", *size);
 | 
			
		||||
    BUF_strlcat(*buf, s, *size);
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
		{
 | 
			
		||||
		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)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_out, "[Internal] ");
 | 
			
		||||
		}
 | 
			
		||||
{
 | 
			
		||||
    int started = 0, err = 0;
 | 
			
		||||
    /* Indent before displaying input flags */
 | 
			
		||||
    BIO_printf(bio_out, "%s%s(input flags): ", indent, indent);
 | 
			
		||||
    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) {
 | 
			
		||||
        BIO_printf(bio_out, "[Internal] ");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(flags & ENGINE_CMD_FLAG_NUMERIC)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_out, "NUMERIC");
 | 
			
		||||
		started = 1;
 | 
			
		||||
		}
 | 
			
		||||
	/* 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)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_out, "|");
 | 
			
		||||
			err = 1;
 | 
			
		||||
			}
 | 
			
		||||
		BIO_printf(bio_out, "STRING");
 | 
			
		||||
		started = 1;
 | 
			
		||||
		}
 | 
			
		||||
	if(flags & ENGINE_CMD_FLAG_NO_INPUT)
 | 
			
		||||
		{
 | 
			
		||||
		if(started)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_out, "|");
 | 
			
		||||
			err = 1;
 | 
			
		||||
			}
 | 
			
		||||
		BIO_printf(bio_out, "NO_INPUT");
 | 
			
		||||
		started = 1;
 | 
			
		||||
		}
 | 
			
		||||
	/* 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, "|");
 | 
			
		||||
		BIO_printf(bio_out, "<0x%04X>", flags);
 | 
			
		||||
		}
 | 
			
		||||
	if(err)
 | 
			
		||||
		BIO_printf(bio_out, "  <illegal flags!>");
 | 
			
		||||
	BIO_printf(bio_out, "\n");
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
    if (flags & ENGINE_CMD_FLAG_NUMERIC) {
 | 
			
		||||
        BIO_printf(bio_out, "NUMERIC");
 | 
			
		||||
        started = 1;
 | 
			
		||||
    }
 | 
			
		||||
    /*
 | 
			
		||||
     * 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) {
 | 
			
		||||
            BIO_printf(bio_out, "|");
 | 
			
		||||
            err = 1;
 | 
			
		||||
        }
 | 
			
		||||
        BIO_printf(bio_out, "STRING");
 | 
			
		||||
        started = 1;
 | 
			
		||||
    }
 | 
			
		||||
    if (flags & ENGINE_CMD_FLAG_NO_INPUT) {
 | 
			
		||||
        if (started) {
 | 
			
		||||
            BIO_printf(bio_out, "|");
 | 
			
		||||
            err = 1;
 | 
			
		||||
        }
 | 
			
		||||
        BIO_printf(bio_out, "NO_INPUT");
 | 
			
		||||
        started = 1;
 | 
			
		||||
    }
 | 
			
		||||
    /* 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, "|");
 | 
			
		||||
        BIO_printf(bio_out, "<0x%04X>", flags);
 | 
			
		||||
    }
 | 
			
		||||
    if (err)
 | 
			
		||||
        BIO_printf(bio_out, "  <illegal flags!>");
 | 
			
		||||
    BIO_printf(bio_out, "\n");
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int util_verbose(ENGINE *e, int verbose, BIO *bio_out, const char *indent)
 | 
			
		||||
	{
 | 
			
		||||
	static const int line_wrap = 78;
 | 
			
		||||
	int num;
 | 
			
		||||
	int ret = 0;
 | 
			
		||||
	char *name = NULL;
 | 
			
		||||
	char *desc = NULL;
 | 
			
		||||
	int flags;
 | 
			
		||||
	int xpos = 0;
 | 
			
		||||
	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))
 | 
			
		||||
		{
 | 
			
		||||
#if 0
 | 
			
		||||
		BIO_printf(bio_out, "%s<no control commands>\n", indent);
 | 
			
		||||
#endif
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
static int util_verbose(ENGINE *e, int verbose, BIO *bio_out,
 | 
			
		||||
                        const char *indent)
 | 
			
		||||
{
 | 
			
		||||
    static const int line_wrap = 78;
 | 
			
		||||
    int num;
 | 
			
		||||
    int ret = 0;
 | 
			
		||||
    char *name = NULL;
 | 
			
		||||
    char *desc = NULL;
 | 
			
		||||
    int flags;
 | 
			
		||||
    int xpos = 0;
 | 
			
		||||
    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)) {
 | 
			
		||||
# if 0
 | 
			
		||||
        BIO_printf(bio_out, "%s<no control commands>\n", indent);
 | 
			
		||||
# endif
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	cmds = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
    cmds = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
 | 
			
		||||
	if(!cmds)
 | 
			
		||||
		goto err;
 | 
			
		||||
	do {
 | 
			
		||||
		int len;
 | 
			
		||||
		/* Get the command input flags */
 | 
			
		||||
		if((flags = ENGINE_ctrl(e, ENGINE_CTRL_GET_CMD_FLAGS, num,
 | 
			
		||||
					NULL, NULL)) < 0)
 | 
			
		||||
			goto err;
 | 
			
		||||
                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)
 | 
			
		||||
                                goto err;
 | 
			
		||||
                        if((name = OPENSSL_malloc(len + 1)) == NULL)
 | 
			
		||||
                                goto err;
 | 
			
		||||
                        if(ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_FROM_CMD, num, name,
 | 
			
		||||
    if (!cmds)
 | 
			
		||||
        goto err;
 | 
			
		||||
    do {
 | 
			
		||||
        int len;
 | 
			
		||||
        /* Get the command input flags */
 | 
			
		||||
        if ((flags = ENGINE_ctrl(e, ENGINE_CTRL_GET_CMD_FLAGS, num,
 | 
			
		||||
                                 NULL, NULL)) < 0)
 | 
			
		||||
            goto err;
 | 
			
		||||
        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)
 | 
			
		||||
                goto err;
 | 
			
		||||
            if ((name = OPENSSL_malloc(len + 1)) == NULL)
 | 
			
		||||
                goto err;
 | 
			
		||||
            if (ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_FROM_CMD, num, name,
 | 
			
		||||
                            NULL) <= 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
            /* Get the command description */
 | 
			
		||||
            if ((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_LEN_FROM_CMD, num,
 | 
			
		||||
                                   NULL, NULL)) < 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
            if (len > 0) {
 | 
			
		||||
                if ((desc = OPENSSL_malloc(len + 1)) == NULL)
 | 
			
		||||
                    goto err;
 | 
			
		||||
                if (ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_FROM_CMD, num, desc,
 | 
			
		||||
                                NULL) <= 0)
 | 
			
		||||
                                goto err;
 | 
			
		||||
                        /* Get the command description */
 | 
			
		||||
                        if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_LEN_FROM_CMD, num,
 | 
			
		||||
                                NULL, NULL)) < 0)
 | 
			
		||||
                                goto err;
 | 
			
		||||
                        if(len > 0)
 | 
			
		||||
                                {
 | 
			
		||||
                                if((desc = OPENSSL_malloc(len + 1)) == NULL)
 | 
			
		||||
                                        goto err;
 | 
			
		||||
                                if(ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_FROM_CMD, num, desc,
 | 
			
		||||
                                        NULL) <= 0)
 | 
			
		||||
                                        goto err;
 | 
			
		||||
                                }
 | 
			
		||||
                        /* Now decide on the output */
 | 
			
		||||
                        if(xpos == 0)
 | 
			
		||||
                                /* Do an indent */
 | 
			
		||||
                                xpos = BIO_puts(bio_out, indent);
 | 
			
		||||
                        else
 | 
			
		||||
                                /* Otherwise prepend a ", " */
 | 
			
		||||
                                xpos += BIO_printf(bio_out, ", ");
 | 
			
		||||
                        if(verbose == 1)
 | 
			
		||||
                                {
 | 
			
		||||
                                /* We're just listing names, comma-delimited */
 | 
			
		||||
                                if((xpos > (int)strlen(indent)) &&
 | 
			
		||||
					(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
 | 
			
		||||
                                {
 | 
			
		||||
                                /* 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))
 | 
			
		||||
                                        goto err;
 | 
			
		||||
                                xpos = 0;
 | 
			
		||||
                                }
 | 
			
		||||
                        }
 | 
			
		||||
		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);
 | 
			
		||||
		} 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);
 | 
			
		||||
	return ret;
 | 
			
		||||
	}
 | 
			
		||||
                    goto err;
 | 
			
		||||
            }
 | 
			
		||||
            /* Now decide on the output */
 | 
			
		||||
            if (xpos == 0)
 | 
			
		||||
                /* Do an indent */
 | 
			
		||||
                xpos = BIO_puts(bio_out, indent);
 | 
			
		||||
            else
 | 
			
		||||
                /* Otherwise prepend a ", " */
 | 
			
		||||
                xpos += BIO_printf(bio_out, ", ");
 | 
			
		||||
            if (verbose == 1) {
 | 
			
		||||
                /*
 | 
			
		||||
                 * We're just listing names, comma-delimited
 | 
			
		||||
                 */
 | 
			
		||||
                if ((xpos > (int)strlen(indent)) &&
 | 
			
		||||
                    (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 {
 | 
			
		||||
                /* 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))
 | 
			
		||||
                    goto err;
 | 
			
		||||
                xpos = 0;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        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);
 | 
			
		||||
    } 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);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void util_do_cmds(ENGINE *e, STACK_OF(OPENSSL_STRING) *cmds,
 | 
			
		||||
			BIO *bio_out, const char *indent)
 | 
			
		||||
	{
 | 
			
		||||
	int loop, res, num = sk_OPENSSL_STRING_num(cmds);
 | 
			
		||||
                         BIO *bio_out, const char *indent)
 | 
			
		||||
{
 | 
			
		||||
    int loop, res, num = sk_OPENSSL_STRING_num(cmds);
 | 
			
		||||
 | 
			
		||||
	if(num < 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_out, "[Error]: internal stack error\n");
 | 
			
		||||
		return;
 | 
			
		||||
		}
 | 
			
		||||
	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(!ENGINE_ctrl_cmd_string(e, cmd, NULL, 0))
 | 
			
		||||
				res = 0;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if((int)(arg - cmd) > 254)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out,"[Error]: command name too long\n");
 | 
			
		||||
				return;
 | 
			
		||||
				}
 | 
			
		||||
			memcpy(buf, cmd, (int)(arg - cmd));
 | 
			
		||||
			buf[arg-cmd] = '\0';
 | 
			
		||||
			arg++; /* Move past the ":" */
 | 
			
		||||
			/* Call the command with the argument */
 | 
			
		||||
			if(!ENGINE_ctrl_cmd_string(e, buf, arg, 0))
 | 
			
		||||
				res = 0;
 | 
			
		||||
			}
 | 
			
		||||
		if(res)
 | 
			
		||||
			BIO_printf(bio_out, "[Success]: %s\n", cmd);
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_out, "[Failure]: %s\n", cmd);
 | 
			
		||||
			ERR_print_errors(bio_out);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
    if (num < 0) {
 | 
			
		||||
        BIO_printf(bio_out, "[Error]: internal stack error\n");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    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 (!ENGINE_ctrl_cmd_string(e, cmd, NULL, 0))
 | 
			
		||||
                res = 0;
 | 
			
		||||
        } else {
 | 
			
		||||
            if ((int)(arg - cmd) > 254) {
 | 
			
		||||
                BIO_printf(bio_out, "[Error]: command name too long\n");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            memcpy(buf, cmd, (int)(arg - cmd));
 | 
			
		||||
            buf[arg - cmd] = '\0';
 | 
			
		||||
            arg++;              /* Move past the ":" */
 | 
			
		||||
            /* Call the command with the argument */
 | 
			
		||||
            if (!ENGINE_ctrl_cmd_string(e, buf, arg, 0))
 | 
			
		||||
                res = 0;
 | 
			
		||||
        }
 | 
			
		||||
        if (res)
 | 
			
		||||
            BIO_printf(bio_out, "[Success]: %s\n", cmd);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_out, "[Failure]: %s\n", cmd);
 | 
			
		||||
            ERR_print_errors(bio_out);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int ret=1,i;
 | 
			
		||||
	const char **pp;
 | 
			
		||||
	int verbose=0, list_cap=0, test_avail=0, test_avail_noise = 0;
 | 
			
		||||
	ENGINE *e;
 | 
			
		||||
	STACK_OF(OPENSSL_STRING) *engines = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
	STACK_OF(OPENSSL_STRING) *pre_cmds = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
	STACK_OF(OPENSSL_STRING) *post_cmds = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
	int badops=1;
 | 
			
		||||
	BIO *bio_out=NULL;
 | 
			
		||||
	const char *indent = "     ";
 | 
			
		||||
{
 | 
			
		||||
    int ret = 1, i;
 | 
			
		||||
    const char **pp;
 | 
			
		||||
    int verbose = 0, list_cap = 0, test_avail = 0, test_avail_noise = 0;
 | 
			
		||||
    ENGINE *e;
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *engines = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *pre_cmds = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *post_cmds = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
    int badops = 1;
 | 
			
		||||
    BIO *bio_out = NULL;
 | 
			
		||||
    const char *indent = "     ";
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
	SSL_load_error_strings();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
    SSL_load_error_strings();
 | 
			
		||||
 | 
			
		||||
	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;
 | 
			
		||||
	bio_out=BIO_new_fp(stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
	{
 | 
			
		||||
	BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
	bio_out = BIO_push(tmpbio, bio_out);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
    bio_out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
    {
 | 
			
		||||
        BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
        bio_out = BIO_push(tmpbio, bio_out);
 | 
			
		||||
    }
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	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)
 | 
			
		||||
			list_cap=1;
 | 
			
		||||
		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++;
 | 
			
		||||
			if (argc == 0)
 | 
			
		||||
				goto skip_arg_loop;
 | 
			
		||||
			sk_OPENSSL_STRING_push(pre_cmds,*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) ||
 | 
			
		||||
				(strcmp(*argv,"-?") == 0))
 | 
			
		||||
			goto skip_arg_loop;
 | 
			
		||||
		else
 | 
			
		||||
			sk_OPENSSL_STRING_push(engines,*argv);
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
	/* Looks like everything went OK */
 | 
			
		||||
	badops = 0;
 | 
			
		||||
skip_arg_loop:
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    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)
 | 
			
		||||
            list_cap = 1;
 | 
			
		||||
        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++;
 | 
			
		||||
            if (argc == 0)
 | 
			
		||||
                goto skip_arg_loop;
 | 
			
		||||
            sk_OPENSSL_STRING_push(pre_cmds, *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) ||
 | 
			
		||||
                   (strcmp(*argv, "-?") == 0))
 | 
			
		||||
            goto skip_arg_loop;
 | 
			
		||||
        else
 | 
			
		||||
            sk_OPENSSL_STRING_push(engines, *argv);
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
    /* Looks like everything went OK */
 | 
			
		||||
    badops = 0;
 | 
			
		||||
 skip_arg_loop:
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
		for (pp=engine_usage; (*pp != NULL); pp++)
 | 
			
		||||
			BIO_printf(bio_err,"%s",*pp);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    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))
 | 
			
		||||
			{
 | 
			
		||||
			sk_OPENSSL_STRING_push(engines,(char *)ENGINE_get_id(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++)
 | 
			
		||||
		{
 | 
			
		||||
		const char *id = sk_OPENSSL_STRING_value(engines,i);
 | 
			
		||||
		if ((e = ENGINE_by_id(id)) != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			const char *name = ENGINE_get_name(e);
 | 
			
		||||
			/* 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)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out, "Loaded: (%s) %s\n",
 | 
			
		||||
					ENGINE_get_id(e), ENGINE_get_name(e));
 | 
			
		||||
				}
 | 
			
		||||
			if (list_cap)
 | 
			
		||||
				{
 | 
			
		||||
				int cap_size = 256;
 | 
			
		||||
				char *cap_buf = NULL;
 | 
			
		||||
				int k,n;
 | 
			
		||||
				const int *nids;
 | 
			
		||||
				ENGINE_CIPHERS_PTR fn_c;
 | 
			
		||||
				ENGINE_DIGESTS_PTR fn_d;
 | 
			
		||||
				ENGINE_PKEY_METHS_PTR fn_pk;
 | 
			
		||||
    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) {
 | 
			
		||||
            const char *name = ENGINE_get_name(e);
 | 
			
		||||
            /*
 | 
			
		||||
             * 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) {
 | 
			
		||||
                BIO_printf(bio_out, "Loaded: (%s) %s\n",
 | 
			
		||||
                           ENGINE_get_id(e), ENGINE_get_name(e));
 | 
			
		||||
            }
 | 
			
		||||
            if (list_cap) {
 | 
			
		||||
                int cap_size = 256;
 | 
			
		||||
                char *cap_buf = NULL;
 | 
			
		||||
                int k, n;
 | 
			
		||||
                const int *nids;
 | 
			
		||||
                ENGINE_CIPHERS_PTR fn_c;
 | 
			
		||||
                ENGINE_DIGESTS_PTR fn_d;
 | 
			
		||||
                ENGINE_PKEY_METHS_PTR fn_pk;
 | 
			
		||||
 | 
			
		||||
				if (ENGINE_get_RSA(e) != NULL
 | 
			
		||||
					&& !append_buf(&cap_buf, "RSA",
 | 
			
		||||
						&cap_size, 256))
 | 
			
		||||
					goto end;
 | 
			
		||||
				if (ENGINE_get_DSA(e) != NULL
 | 
			
		||||
					&& !append_buf(&cap_buf, "DSA",
 | 
			
		||||
						&cap_size, 256))
 | 
			
		||||
					goto end;
 | 
			
		||||
				if (ENGINE_get_DH(e) != NULL
 | 
			
		||||
					&& !append_buf(&cap_buf, "DH",
 | 
			
		||||
						&cap_size, 256))
 | 
			
		||||
					goto end;
 | 
			
		||||
				if (ENGINE_get_RAND(e) != NULL
 | 
			
		||||
					&& !append_buf(&cap_buf, "RAND",
 | 
			
		||||
						&cap_size, 256))
 | 
			
		||||
					goto end;
 | 
			
		||||
                if (ENGINE_get_RSA(e) != NULL
 | 
			
		||||
                    && !append_buf(&cap_buf, "RSA", &cap_size, 256))
 | 
			
		||||
                    goto end;
 | 
			
		||||
                if (ENGINE_get_DSA(e) != NULL
 | 
			
		||||
                    && !append_buf(&cap_buf, "DSA", &cap_size, 256))
 | 
			
		||||
                    goto end;
 | 
			
		||||
                if (ENGINE_get_DH(e) != NULL
 | 
			
		||||
                    && !append_buf(&cap_buf, "DH", &cap_size, 256))
 | 
			
		||||
                    goto end;
 | 
			
		||||
                if (ENGINE_get_RAND(e) != NULL
 | 
			
		||||
                    && !append_buf(&cap_buf, "RAND", &cap_size, 256))
 | 
			
		||||
                    goto end;
 | 
			
		||||
 | 
			
		||||
				fn_c = ENGINE_get_ciphers(e);
 | 
			
		||||
				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))
 | 
			
		||||
						goto end;
 | 
			
		||||
                fn_c = ENGINE_get_ciphers(e);
 | 
			
		||||
                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))
 | 
			
		||||
                        goto end;
 | 
			
		||||
 | 
			
		||||
skip_ciphers:
 | 
			
		||||
				fn_d = ENGINE_get_digests(e);
 | 
			
		||||
				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))
 | 
			
		||||
						goto end;
 | 
			
		||||
 skip_ciphers:
 | 
			
		||||
                fn_d = ENGINE_get_digests(e);
 | 
			
		||||
                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))
 | 
			
		||||
                        goto end;
 | 
			
		||||
 | 
			
		||||
skip_digests:
 | 
			
		||||
				fn_pk = ENGINE_get_pkey_meths(e);
 | 
			
		||||
				if(!fn_pk) goto skip_pmeths;
 | 
			
		||||
				n = fn_pk(e, NULL, &nids, 0);
 | 
			
		||||
				for(k=0 ; k < n ; ++k)
 | 
			
		||||
					if(!append_buf(&cap_buf,
 | 
			
		||||
						       OBJ_nid2sn(nids[k]),
 | 
			
		||||
						       &cap_size, 256))
 | 
			
		||||
						goto end;
 | 
			
		||||
skip_pmeths:
 | 
			
		||||
				if (cap_buf && (*cap_buf != '\0'))
 | 
			
		||||
					BIO_printf(bio_out, " [%s]\n", cap_buf);
 | 
			
		||||
 skip_digests:
 | 
			
		||||
                fn_pk = ENGINE_get_pkey_meths(e);
 | 
			
		||||
                if (!fn_pk)
 | 
			
		||||
                    goto skip_pmeths;
 | 
			
		||||
                n = fn_pk(e, NULL, &nids, 0);
 | 
			
		||||
                for (k = 0; k < n; ++k)
 | 
			
		||||
                    if (!append_buf(&cap_buf,
 | 
			
		||||
                                    OBJ_nid2sn(nids[k]), &cap_size, 256))
 | 
			
		||||
                        goto end;
 | 
			
		||||
 skip_pmeths:
 | 
			
		||||
                if (cap_buf && (*cap_buf != '\0'))
 | 
			
		||||
                    BIO_printf(bio_out, " [%s]\n", cap_buf);
 | 
			
		||||
 | 
			
		||||
				OPENSSL_free(cap_buf);
 | 
			
		||||
				}
 | 
			
		||||
			if(test_avail)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out, "%s", indent);
 | 
			
		||||
				if (ENGINE_init(e))
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_out, "[ available ]\n");
 | 
			
		||||
					util_do_cmds(e, post_cmds, bio_out, indent);
 | 
			
		||||
					ENGINE_finish(e);
 | 
			
		||||
					}
 | 
			
		||||
				else
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_out, "[ unavailable ]\n");
 | 
			
		||||
					if(test_avail_noise)
 | 
			
		||||
						ERR_print_errors_fp(stdout);
 | 
			
		||||
					ERR_clear_error();
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			if((verbose > 0) && !util_verbose(e, verbose, bio_out, indent))
 | 
			
		||||
				goto end;
 | 
			
		||||
			ENGINE_free(e);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
                OPENSSL_free(cap_buf);
 | 
			
		||||
            }
 | 
			
		||||
            if (test_avail) {
 | 
			
		||||
                BIO_printf(bio_out, "%s", indent);
 | 
			
		||||
                if (ENGINE_init(e)) {
 | 
			
		||||
                    BIO_printf(bio_out, "[ available ]\n");
 | 
			
		||||
                    util_do_cmds(e, post_cmds, bio_out, indent);
 | 
			
		||||
                    ENGINE_finish(e);
 | 
			
		||||
                } else {
 | 
			
		||||
                    BIO_printf(bio_out, "[ unavailable ]\n");
 | 
			
		||||
                    if (test_avail_noise)
 | 
			
		||||
                        ERR_print_errors_fp(stdout);
 | 
			
		||||
                    ERR_clear_error();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ((verbose > 0) && !util_verbose(e, verbose, bio_out, indent))
 | 
			
		||||
                goto end;
 | 
			
		||||
            ENGINE_free(e);
 | 
			
		||||
        } else
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
 | 
			
		||||
	ERR_print_errors(bio_err);
 | 
			
		||||
	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);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    ERR_print_errors(bio_err);
 | 
			
		||||
    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);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										101
									
								
								apps/errstr.c
									
									
									
									
									
								
							
							
						
						
									
										101
									
								
								apps/errstr.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -66,63 +66,56 @@
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	errstr_main
 | 
			
		||||
#define PROG    errstr_main
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int i,ret=0;
 | 
			
		||||
	char buf[256];
 | 
			
		||||
	unsigned long l;
 | 
			
		||||
{
 | 
			
		||||
    int i, ret = 0;
 | 
			
		||||
    char buf[256];
 | 
			
		||||
    unsigned long l;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	SSL_load_error_strings();
 | 
			
		||||
    SSL_load_error_strings();
 | 
			
		||||
 | 
			
		||||
	if ((argc > 1) && (strcmp(argv[1],"-stats") == 0))
 | 
			
		||||
		{
 | 
			
		||||
		BIO *out=NULL;
 | 
			
		||||
    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))
 | 
			
		||||
			{
 | 
			
		||||
        out = BIO_new(BIO_s_file());
 | 
			
		||||
        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);
 | 
			
		||||
			}
 | 
			
		||||
            {
 | 
			
		||||
                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(),out);
 | 
			
		||||
			}
 | 
			
		||||
		if (out != NULL) BIO_free_all(out);
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
            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);
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	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
 | 
			
		||||
			{
 | 
			
		||||
			printf("%s: bad error code\n",argv[i]);
 | 
			
		||||
			printf("usage: errstr [-stats] <errno> ...\n");
 | 
			
		||||
			ret++;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    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 {
 | 
			
		||||
            printf("%s: bad error code\n", argv[i]);
 | 
			
		||||
            printf("usage: errstr [-stats] <errno> ...\n");
 | 
			
		||||
            ret++;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										326
									
								
								apps/gendh.c
									
									
									
									
									
								
							
							
						
						
									
										326
									
								
								apps/gendh.c
									
									
									
									
									
								
							@@ -6,21 +6,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -35,10 +35,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -50,7 +50,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -58,187 +58,191 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#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
 | 
			
		||||
# undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dh.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include <sys/types.h>
 | 
			
		||||
# include <sys/stat.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/rand.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
# include <openssl/dh.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#define DEFBITS	512
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG gendh_main
 | 
			
		||||
# define DEFBITS 2048
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG gendh_main
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	BN_GENCB cb;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	DH *dh=NULL;
 | 
			
		||||
	int ret=1,num=DEFBITS;
 | 
			
		||||
	int g=2;
 | 
			
		||||
	char *outfile=NULL;
 | 
			
		||||
	char *inrand=NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	BIO *out=NULL;
 | 
			
		||||
{
 | 
			
		||||
    BN_GENCB cb;
 | 
			
		||||
    DH *dh = NULL;
 | 
			
		||||
    int ret = 1, num = DEFBITS;
 | 
			
		||||
    int g = 2;
 | 
			
		||||
    char *outfile = NULL;
 | 
			
		||||
    char *inrand = NULL;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    BIO *out = NULL;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	BN_GENCB_set(&cb, dh_cb, bio_err);
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    BN_GENCB_set(&cb, dh_cb, bio_err);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	argv++;
 | 
			
		||||
	argc--;
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (argc <= 0) break;
 | 
			
		||||
		if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-2") == 0)
 | 
			
		||||
			g=2;
 | 
			
		||||
	/*	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;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			break;
 | 
			
		||||
		argv++;
 | 
			
		||||
		argc--;
 | 
			
		||||
		}
 | 
			
		||||
	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," -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");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,"           - load the file (or the files in the directory) into\n");
 | 
			
		||||
		BIO_printf(bio_err,"             the random number generator\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
    argv++;
 | 
			
		||||
    argc--;
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (argc <= 0)
 | 
			
		||||
            break;
 | 
			
		||||
        if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-2") == 0)
 | 
			
		||||
            g = 2;
 | 
			
		||||
/*-     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;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-rand") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            inrand = *(++argv);
 | 
			
		||||
        } else
 | 
			
		||||
            break;
 | 
			
		||||
        argv++;
 | 
			
		||||
        argc--;
 | 
			
		||||
    }
 | 
			
		||||
    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, " -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");
 | 
			
		||||
# endif
 | 
			
		||||
        BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR,
 | 
			
		||||
                   LIST_SEPARATOR_CHAR);
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "           - load the file (or the files in the directory) into\n");
 | 
			
		||||
        BIO_printf(bio_err, "             the random number generator\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if (out == NULL) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!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));
 | 
			
		||||
    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,"This is going to take a long time\n");
 | 
			
		||||
    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))
 | 
			
		||||
		goto end;
 | 
			
		||||
		
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
    if (((dh = DH_new()) == NULL)
 | 
			
		||||
        || !DH_generate_parameters_ex(dh, num, g, &cb))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	if (!PEM_write_bio_DHparams(out,dh))
 | 
			
		||||
		goto end;
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (ret != 0)
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dh != NULL) DH_free(dh);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 | 
			
		||||
    if (!PEM_write_bio_DHparams(out, dh))
 | 
			
		||||
        goto end;
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (ret != 0)
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (dh != NULL)
 | 
			
		||||
        DH_free(dh);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
{
 | 
			
		||||
    char c = '*';
 | 
			
		||||
 | 
			
		||||
	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
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_DH */
 | 
			
		||||
    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
 | 
			
		||||
    p = n;
 | 
			
		||||
# endif
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
#else                           /* !OPENSSL_NO_DH */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										421
									
								
								apps/gendsa.c
									
									
									
									
									
								
							
							
						
						
									
										421
									
								
								apps/gendsa.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,240 +49,239 @@
 | 
			
		||||
 * 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.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>	/* for OPENSSL_NO_DSA */
 | 
			
		||||
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dsa.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include <sys/types.h>
 | 
			
		||||
# include <sys/stat.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
# include <openssl/dsa.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#define DEFBITS	512
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG gendsa_main
 | 
			
		||||
# define DEFBITS 512
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG gendsa_main
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	DSA *dsa=NULL;
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	char *outfile=NULL;
 | 
			
		||||
	char *inrand=NULL,*dsaparams=NULL;
 | 
			
		||||
	char *passargout = NULL, *passout = NULL;
 | 
			
		||||
	BIO *out=NULL,*in=NULL;
 | 
			
		||||
	const EVP_CIPHER *enc=NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
{
 | 
			
		||||
    DSA *dsa = NULL;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    char *outfile = NULL;
 | 
			
		||||
    char *inrand = NULL, *dsaparams = NULL;
 | 
			
		||||
    char *passargout = NULL, *passout = NULL;
 | 
			
		||||
    BIO *out = NULL, *in = NULL;
 | 
			
		||||
    const EVP_CIPHER *enc = NULL;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	argv++;
 | 
			
		||||
	argc--;
 | 
			
		||||
	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;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		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;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-") == 0)
 | 
			
		||||
			goto bad;
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
		else if (strcmp(*argv,"-des") == 0)
 | 
			
		||||
			enc=EVP_des_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-des3") == 0)
 | 
			
		||||
			enc=EVP_des_ede3_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		else if (strcmp(*argv,"-idea") == 0)
 | 
			
		||||
			enc=EVP_idea_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		else if (strcmp(*argv,"-seed") == 0)
 | 
			
		||||
			enc=EVP_seed_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		else if (strcmp(*argv,"-aes128") == 0)
 | 
			
		||||
			enc=EVP_aes_128_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-aes192") == 0)
 | 
			
		||||
			enc=EVP_aes_192_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-aes256") == 0)
 | 
			
		||||
			enc=EVP_aes_256_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
		else if (strcmp(*argv,"-camellia128") == 0)
 | 
			
		||||
			enc=EVP_camellia_128_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-camellia192") == 0)
 | 
			
		||||
			enc=EVP_camellia_192_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-camellia256") == 0)
 | 
			
		||||
			enc=EVP_camellia_256_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
		else if (**argv != '-' && dsaparams == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			dsaparams = *argv;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			goto bad;
 | 
			
		||||
		argv++;
 | 
			
		||||
		argc--;
 | 
			
		||||
		}
 | 
			
		||||
    argv++;
 | 
			
		||||
    argc--;
 | 
			
		||||
    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;
 | 
			
		||||
            passargout = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        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;
 | 
			
		||||
            inrand = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-") == 0)
 | 
			
		||||
            goto bad;
 | 
			
		||||
# ifndef OPENSSL_NO_DES
 | 
			
		||||
        else if (strcmp(*argv, "-des") == 0)
 | 
			
		||||
            enc = EVP_des_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-des3") == 0)
 | 
			
		||||
            enc = EVP_des_ede3_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_IDEA
 | 
			
		||||
        else if (strcmp(*argv, "-idea") == 0)
 | 
			
		||||
            enc = EVP_idea_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_SEED
 | 
			
		||||
        else if (strcmp(*argv, "-seed") == 0)
 | 
			
		||||
            enc = EVP_seed_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_AES
 | 
			
		||||
        else if (strcmp(*argv, "-aes128") == 0)
 | 
			
		||||
            enc = EVP_aes_128_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-aes192") == 0)
 | 
			
		||||
            enc = EVP_aes_192_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-aes256") == 0)
 | 
			
		||||
            enc = EVP_aes_256_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
        else if (strcmp(*argv, "-camellia128") == 0)
 | 
			
		||||
            enc = EVP_camellia_128_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-camellia192") == 0)
 | 
			
		||||
            enc = EVP_camellia_192_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-camellia256") == 0)
 | 
			
		||||
            enc = EVP_camellia_256_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
        else if (**argv != '-' && dsaparams == NULL) {
 | 
			
		||||
            dsaparams = *argv;
 | 
			
		||||
        } else
 | 
			
		||||
            goto bad;
 | 
			
		||||
        argv++;
 | 
			
		||||
        argc--;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	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");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		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");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
		BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		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,"             the random number generator\n");
 | 
			
		||||
		BIO_printf(bio_err," dsaparam-file\n");
 | 
			
		||||
		BIO_printf(bio_err,"           - a DSA parameter file as generated by the dsaparam command\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    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");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_IDEA
 | 
			
		||||
        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");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_AES
 | 
			
		||||
        BIO_printf(bio_err, " -aes128, -aes192, -aes256\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
        BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        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, "             the random number generator\n");
 | 
			
		||||
        BIO_printf(bio_err, " dsaparam-file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "           - a DSA parameter file as generated by the dsaparam command\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
    if (!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    if (!(BIO_read_filename(in, dsaparams))) {
 | 
			
		||||
        perror(dsaparams);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ((dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL)) == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to load DSA parameter file\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    in = NULL;
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	if (!(BIO_read_filename(in,dsaparams)))
 | 
			
		||||
		{
 | 
			
		||||
		perror(dsaparams);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if (out == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	if ((dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL)) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load DSA parameter file\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	in = NULL;
 | 
			
		||||
		
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if (out == NULL) goto end;
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (!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));
 | 
			
		||||
 | 
			
		||||
	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);
 | 
			
		||||
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 | 
			
		||||
	if (!PEM_write_bio_DSAPrivateKey(out,dsa,enc,NULL,0,NULL, passout))
 | 
			
		||||
		goto end;
 | 
			
		||||
	ret=0;
 | 
			
		||||
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);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_DSA */
 | 
			
		||||
    if (!PEM_write_bio_DSAPrivateKey(out, dsa, enc, NULL, 0, NULL, passout))
 | 
			
		||||
        goto end;
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 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);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
#else                           /* !OPENSSL_NO_DSA */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										599
									
								
								apps/genpkey.c
									
									
									
									
									
								
							
							
						
						
									
										599
									
								
								apps/genpkey.c
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
/* 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.
 | 
			
		||||
@@ -10,7 +11,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -62,11 +63,11 @@
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#include <openssl/engine.h>
 | 
			
		||||
# include <openssl/engine.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
 | 
			
		||||
				const char *file, ENGINE *e);
 | 
			
		||||
                            const char *file, ENGINE *e);
 | 
			
		||||
static int genpkey_cb(EVP_PKEY_CTX *ctx);
 | 
			
		||||
 | 
			
		||||
#define PROG genpkey_main
 | 
			
		||||
@@ -74,367 +75,331 @@ static int genpkey_cb(EVP_PKEY_CTX *ctx);
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	char **args, *outfile = NULL;
 | 
			
		||||
	char *passarg = NULL;
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	const EVP_CIPHER *cipher = NULL;
 | 
			
		||||
	int outformat;
 | 
			
		||||
	int text = 0;
 | 
			
		||||
	EVP_PKEY *pkey=NULL;
 | 
			
		||||
	EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
	char *pass = NULL;
 | 
			
		||||
	int badarg = 0;
 | 
			
		||||
	int ret = 1, rv;
 | 
			
		||||
{
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    char **args, *outfile = NULL;
 | 
			
		||||
    char *passarg = NULL;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    const EVP_CIPHER *cipher = NULL;
 | 
			
		||||
    int outformat;
 | 
			
		||||
    int text = 0;
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
    EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
    char *pass = NULL;
 | 
			
		||||
    int badarg = 0;
 | 
			
		||||
    int ret = 1, rv;
 | 
			
		||||
 | 
			
		||||
	int do_param = 0;
 | 
			
		||||
    int do_param = 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);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	OpenSSL_add_all_algorithms();
 | 
			
		||||
	args = argv + 1;
 | 
			
		||||
	while (!badarg && *args && *args[0] == '-')
 | 
			
		||||
		{
 | 
			
		||||
		if (!strcmp(*args,"-outform"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outformat=str2fmt(*args);
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-pass"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			passarg= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    OpenSSL_add_all_algorithms();
 | 
			
		||||
    args = argv + 1;
 | 
			
		||||
    while (!badarg && *args && *args[0] == '-') {
 | 
			
		||||
        if (!strcmp(*args, "-outform")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                outformat = str2fmt(*args);
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-pass")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passarg = *(++args);
 | 
			
		||||
        }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*args,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto bad;
 | 
			
		||||
        		e = setup_engine(bio_err, *(++args), 0);
 | 
			
		||||
			}
 | 
			
		||||
        else if (strcmp(*args, "-engine") == 0) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            e = setup_engine(bio_err, *(++args), 0);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		else if (!strcmp (*args, "-paramfile"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto bad;
 | 
			
		||||
			args++;
 | 
			
		||||
			if (do_param == 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			if (!init_keygen_file(bio_err, &ctx, *args, e))
 | 
			
		||||
				goto end;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-out"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outfile = *args;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-algorithm") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto bad;
 | 
			
		||||
			if (!init_gen_str(bio_err, &ctx, *(++args),e, do_param))
 | 
			
		||||
				goto end;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-pkeyopt") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto bad;
 | 
			
		||||
			if (!ctx)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_puts(bio_err, "No keytype specified\n");
 | 
			
		||||
				goto bad;
 | 
			
		||||
				}
 | 
			
		||||
			else if (pkey_ctrl_string(ctx, *(++args)) <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_puts(bio_err, "parameter setting error\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-genparam") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (ctx)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			do_param = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			cipher = EVP_get_cipherbyname(*args + 1);
 | 
			
		||||
			if (!cipher)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Unknown cipher %s\n",
 | 
			
		||||
								*args + 1);
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
				}
 | 
			
		||||
			if (do_param == 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		args++;
 | 
			
		||||
		}
 | 
			
		||||
        else if (!strcmp(*args, "-paramfile")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            args++;
 | 
			
		||||
            if (do_param == 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!init_keygen_file(bio_err, &ctx, *args, e))
 | 
			
		||||
                goto end;
 | 
			
		||||
        } else if (!strcmp(*args, "-out")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                outfile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (strcmp(*args, "-algorithm") == 0) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!init_gen_str(bio_err, &ctx, *(++args), e, do_param))
 | 
			
		||||
                goto end;
 | 
			
		||||
        } else if (strcmp(*args, "-pkeyopt") == 0) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!ctx) {
 | 
			
		||||
                BIO_puts(bio_err, "No keytype specified\n");
 | 
			
		||||
                goto bad;
 | 
			
		||||
            } else if (pkey_ctrl_string(ctx, *(++args)) <= 0) {
 | 
			
		||||
                BIO_puts(bio_err, "parameter setting error\n");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        } else if (strcmp(*args, "-genparam") == 0) {
 | 
			
		||||
            if (ctx)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            do_param = 1;
 | 
			
		||||
        } else if (strcmp(*args, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else {
 | 
			
		||||
            cipher = EVP_get_cipherbyname(*args + 1);
 | 
			
		||||
            if (!cipher) {
 | 
			
		||||
                BIO_printf(bio_err, "Unknown cipher %s\n", *args + 1);
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            }
 | 
			
		||||
            if (do_param == 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        }
 | 
			
		||||
        args++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
		badarg = 1;
 | 
			
		||||
    if (!ctx)
 | 
			
		||||
        badarg = 1;
 | 
			
		||||
 | 
			
		||||
	if (badarg)
 | 
			
		||||
		{
 | 
			
		||||
		bad:
 | 
			
		||||
		BIO_printf(bio_err, "Usage: genpkey [options]\n");
 | 
			
		||||
		BIO_printf(bio_err, "where options may be\n");
 | 
			
		||||
		BIO_printf(bio_err, "-out file          output file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-outform X         output format (DER or PEM)\n");
 | 
			
		||||
		BIO_printf(bio_err, "-pass arg          output file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err, "-<cipher>          use cipher <cipher> to encrypt the key\n");
 | 
			
		||||
    if (badarg) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "Usage: genpkey [options]\n");
 | 
			
		||||
        BIO_printf(bio_err, "where options may be\n");
 | 
			
		||||
        BIO_printf(bio_err, "-out file          output file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-outform X         output format (DER or PEM)\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-pass arg          output file pass phrase source\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-<cipher>          use cipher <cipher> to encrypt the key\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err, "-engine e          use engine e, possibly a hardware device.\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-engine e          use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err, "-paramfile file    parameters file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-algorithm alg     the public key algorithm\n");
 | 
			
		||||
		BIO_printf(bio_err, "-pkeyopt opt:value set the public key algorithm option <opt>\n"
 | 
			
		||||
				            "                   to value <value>\n");
 | 
			
		||||
		BIO_printf(bio_err, "-genparam          generate parameters, not key\n");
 | 
			
		||||
		BIO_printf(bio_err, "-text              print the in text\n");
 | 
			
		||||
		BIO_printf(bio_err, "NB: options order may be important!  See the manual page.\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
        BIO_printf(bio_err, "-paramfile file    parameters file\n");
 | 
			
		||||
        BIO_printf(bio_err, "-algorithm alg     the public key algorithm\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-pkeyopt opt:value set the public key algorithm option <opt>\n"
 | 
			
		||||
                   "                   to value <value>\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-genparam          generate parameters, not key\n");
 | 
			
		||||
        BIO_printf(bio_err, "-text              print the in text\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "NB: options order may be important!  See the manual page.\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!app_passwd(bio_err, passarg, NULL, &pass, NULL))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(bio_err, "Error getting password\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!app_passwd(bio_err, passarg, NULL, &pass, NULL)) {
 | 
			
		||||
        BIO_puts(bio_err, "Error getting password\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (outfile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(out = BIO_new_file (outfile, "wb")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		out = BIO_new_fp (stdout, BIO_NOCLOSE);
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "wb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open output file %s\n", outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	EVP_PKEY_CTX_set_cb(ctx, genpkey_cb);
 | 
			
		||||
	EVP_PKEY_CTX_set_app_data(ctx, bio_err);
 | 
			
		||||
    EVP_PKEY_CTX_set_cb(ctx, genpkey_cb);
 | 
			
		||||
    EVP_PKEY_CTX_set_app_data(ctx, bio_err);
 | 
			
		||||
 | 
			
		||||
	if (do_param)
 | 
			
		||||
		{
 | 
			
		||||
		if (EVP_PKEY_paramgen(ctx, &pkey) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_puts(bio_err, "Error generating parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (EVP_PKEY_keygen(ctx, &pkey) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_puts(bio_err, "Error generating key\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (do_param) {
 | 
			
		||||
        if (EVP_PKEY_paramgen(ctx, &pkey) <= 0) {
 | 
			
		||||
            BIO_puts(bio_err, "Error generating parameters\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        if (EVP_PKEY_keygen(ctx, &pkey) <= 0) {
 | 
			
		||||
            BIO_puts(bio_err, "Error generating key\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (do_param)
 | 
			
		||||
		rv = PEM_write_bio_Parameters(out, pkey);
 | 
			
		||||
	else if (outformat == FORMAT_PEM) 
 | 
			
		||||
		rv = PEM_write_bio_PrivateKey(out, pkey, cipher, NULL, 0,
 | 
			
		||||
								NULL, pass);
 | 
			
		||||
	else if (outformat == FORMAT_ASN1)
 | 
			
		||||
		rv = i2d_PrivateKey_bio(out, pkey);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (do_param)
 | 
			
		||||
        rv = PEM_write_bio_Parameters(out, pkey);
 | 
			
		||||
    else if (outformat == FORMAT_PEM)
 | 
			
		||||
        rv = PEM_write_bio_PrivateKey(out, pkey, cipher, NULL, 0, NULL, pass);
 | 
			
		||||
    else if (outformat == FORMAT_ASN1)
 | 
			
		||||
        rv = i2d_PrivateKey_bio(out, pkey);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (rv <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(bio_err, "Error writing key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
    if (rv <= 0) {
 | 
			
		||||
        BIO_puts(bio_err, "Error writing key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		if (do_param)
 | 
			
		||||
			rv = EVP_PKEY_print_params(out, pkey, 0, NULL);
 | 
			
		||||
		else
 | 
			
		||||
			rv = EVP_PKEY_print_private(out, pkey, 0, NULL);
 | 
			
		||||
    if (text) {
 | 
			
		||||
        if (do_param)
 | 
			
		||||
            rv = EVP_PKEY_print_params(out, pkey, 0, NULL);
 | 
			
		||||
        else
 | 
			
		||||
            rv = EVP_PKEY_print_private(out, pkey, 0, NULL);
 | 
			
		||||
 | 
			
		||||
		if (rv <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_puts(bio_err, "Error printing key\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
        if (rv <= 0) {
 | 
			
		||||
            BIO_puts(bio_err, "Error printing key\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ret = 0;
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
	end:
 | 
			
		||||
	if (pkey)
 | 
			
		||||
		EVP_PKEY_free(pkey);
 | 
			
		||||
	if (ctx)
 | 
			
		||||
		EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
	if (out)
 | 
			
		||||
		BIO_free_all(out);
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	if (pass)
 | 
			
		||||
		OPENSSL_free(pass);
 | 
			
		||||
 end:
 | 
			
		||||
    if (pkey)
 | 
			
		||||
        EVP_PKEY_free(pkey);
 | 
			
		||||
    if (ctx)
 | 
			
		||||
        EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
    if (out)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    if (pass)
 | 
			
		||||
        OPENSSL_free(pass);
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
	}
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
 | 
			
		||||
				const char *file, ENGINE *e)
 | 
			
		||||
	{
 | 
			
		||||
	BIO *pbio;
 | 
			
		||||
	EVP_PKEY *pkey = NULL;
 | 
			
		||||
	EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
	if (*pctx)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(err, "Parameters already set!\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
                            const char *file, ENGINE *e)
 | 
			
		||||
{
 | 
			
		||||
    BIO *pbio;
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
    EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
    if (*pctx) {
 | 
			
		||||
        BIO_puts(err, "Parameters already set!\n");
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	pbio = BIO_new_file(file, "r");
 | 
			
		||||
	if (!pbio)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(err, "Can't open parameter file %s\n", file);
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
    pbio = BIO_new_file(file, "r");
 | 
			
		||||
    if (!pbio) {
 | 
			
		||||
        BIO_printf(err, "Can't open parameter file %s\n", file);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	pkey = PEM_read_bio_Parameters(pbio, NULL);
 | 
			
		||||
	BIO_free(pbio);
 | 
			
		||||
    pkey = PEM_read_bio_Parameters(pbio, NULL);
 | 
			
		||||
    BIO_free(pbio);
 | 
			
		||||
 | 
			
		||||
	if (!pkey)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error reading parameter file %s\n", file);
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
    if (!pkey) {
 | 
			
		||||
        BIO_printf(bio_err, "Error reading parameter file %s\n", file);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ctx = EVP_PKEY_CTX_new(pkey, e);
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
		goto err;
 | 
			
		||||
	if (EVP_PKEY_keygen_init(ctx) <= 0)
 | 
			
		||||
		goto err;
 | 
			
		||||
	EVP_PKEY_free(pkey);
 | 
			
		||||
	*pctx = ctx;
 | 
			
		||||
	return 1;
 | 
			
		||||
    ctx = EVP_PKEY_CTX_new(pkey, e);
 | 
			
		||||
    if (!ctx)
 | 
			
		||||
        goto err;
 | 
			
		||||
    if (EVP_PKEY_keygen_init(ctx) <= 0)
 | 
			
		||||
        goto err;
 | 
			
		||||
    EVP_PKEY_free(pkey);
 | 
			
		||||
    *pctx = ctx;
 | 
			
		||||
    return 1;
 | 
			
		||||
 | 
			
		||||
	err:
 | 
			
		||||
	BIO_puts(err, "Error initializing context\n");
 | 
			
		||||
	ERR_print_errors(err);
 | 
			
		||||
	if (ctx)
 | 
			
		||||
		EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
	if (pkey)
 | 
			
		||||
		EVP_PKEY_free(pkey);
 | 
			
		||||
	return 0;
 | 
			
		||||
 err:
 | 
			
		||||
    BIO_puts(err, "Error initializing context\n");
 | 
			
		||||
    ERR_print_errors(err);
 | 
			
		||||
    if (ctx)
 | 
			
		||||
        EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
    if (pkey)
 | 
			
		||||
        EVP_PKEY_free(pkey);
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
 | 
			
		||||
			const char *algname, ENGINE *e, int do_param)
 | 
			
		||||
	{
 | 
			
		||||
	EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
	const EVP_PKEY_ASN1_METHOD *ameth;
 | 
			
		||||
	ENGINE *tmpeng = NULL;
 | 
			
		||||
	int pkey_id;
 | 
			
		||||
                 const char *algname, ENGINE *e, int do_param)
 | 
			
		||||
{
 | 
			
		||||
    EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
    const EVP_PKEY_ASN1_METHOD *ameth;
 | 
			
		||||
    ENGINE *tmpeng = NULL;
 | 
			
		||||
    int pkey_id;
 | 
			
		||||
 | 
			
		||||
	if (*pctx)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(err, "Algorithm already set!\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
    if (*pctx) {
 | 
			
		||||
        BIO_puts(err, "Algorithm already set!\n");
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ameth = EVP_PKEY_asn1_find_str(&tmpeng, algname, -1);
 | 
			
		||||
    ameth = EVP_PKEY_asn1_find_str(&tmpeng, algname, -1);
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	if (!ameth && e)
 | 
			
		||||
		ameth = ENGINE_get_pkey_asn1_meth_str(e, algname, -1);
 | 
			
		||||
    if (!ameth && e)
 | 
			
		||||
        ameth = ENGINE_get_pkey_asn1_meth_str(e, algname, -1);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (!ameth)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Algorithm %s not found\n", algname);
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
    if (!ameth) {
 | 
			
		||||
        BIO_printf(bio_err, "Algorithm %s not found\n", algname);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_clear_error();
 | 
			
		||||
    ERR_clear_error();
 | 
			
		||||
 | 
			
		||||
	EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth);
 | 
			
		||||
    EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth);
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	if (tmpeng)
 | 
			
		||||
		ENGINE_finish(tmpeng);
 | 
			
		||||
    if (tmpeng)
 | 
			
		||||
        ENGINE_finish(tmpeng);
 | 
			
		||||
#endif
 | 
			
		||||
	ctx = EVP_PKEY_CTX_new_id(pkey_id, e);
 | 
			
		||||
    ctx = EVP_PKEY_CTX_new_id(pkey_id, e);
 | 
			
		||||
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
		goto err;
 | 
			
		||||
	if (do_param)
 | 
			
		||||
		{
 | 
			
		||||
		if (EVP_PKEY_paramgen_init(ctx) <= 0)
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (EVP_PKEY_keygen_init(ctx) <= 0)
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
    if (!ctx)
 | 
			
		||||
        goto err;
 | 
			
		||||
    if (do_param) {
 | 
			
		||||
        if (EVP_PKEY_paramgen_init(ctx) <= 0)
 | 
			
		||||
            goto err;
 | 
			
		||||
    } else {
 | 
			
		||||
        if (EVP_PKEY_keygen_init(ctx) <= 0)
 | 
			
		||||
            goto err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	*pctx = ctx;
 | 
			
		||||
	return 1;
 | 
			
		||||
    *pctx = ctx;
 | 
			
		||||
    return 1;
 | 
			
		||||
 | 
			
		||||
	err:
 | 
			
		||||
	BIO_printf(err, "Error initializing %s context\n", algname);
 | 
			
		||||
	ERR_print_errors(err);
 | 
			
		||||
	if (ctx)
 | 
			
		||||
		EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
	return 0;
 | 
			
		||||
 err:
 | 
			
		||||
    BIO_printf(err, "Error initializing %s context\n", algname);
 | 
			
		||||
    ERR_print_errors(err);
 | 
			
		||||
    if (ctx)
 | 
			
		||||
        EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int genpkey_cb(EVP_PKEY_CTX *ctx)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
	BIO *b = EVP_PKEY_CTX_get_app_data(ctx);
 | 
			
		||||
	int p;
 | 
			
		||||
	p = EVP_PKEY_CTX_get_keygen_info(ctx, 0);
 | 
			
		||||
	if (p == 0) c='.';
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write(b,&c,1);
 | 
			
		||||
	(void)BIO_flush(b);
 | 
			
		||||
{
 | 
			
		||||
    char c = '*';
 | 
			
		||||
    BIO *b = EVP_PKEY_CTX_get_app_data(ctx);
 | 
			
		||||
    int p;
 | 
			
		||||
    p = EVP_PKEY_CTX_get_keygen_info(ctx, 0);
 | 
			
		||||
    if (p == 0)
 | 
			
		||||
        c = '.';
 | 
			
		||||
    if (p == 1)
 | 
			
		||||
        c = '+';
 | 
			
		||||
    if (p == 2)
 | 
			
		||||
        c = '*';
 | 
			
		||||
    if (p == 3)
 | 
			
		||||
        c = '\n';
 | 
			
		||||
    BIO_write(b, &c, 1);
 | 
			
		||||
    (void)BIO_flush(b);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
	p=n;
 | 
			
		||||
    p = n;
 | 
			
		||||
#endif
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										515
									
								
								apps/genrsa.c
									
									
									
									
									
								
							
							
						
						
									
										515
									
								
								apps/genrsa.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -57,279 +57,294 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#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
 | 
			
		||||
# undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/rsa.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include <sys/types.h>
 | 
			
		||||
# include <sys/stat.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
# include <openssl/rsa.h>
 | 
			
		||||
# include <openssl/evp.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
# include <openssl/rand.h>
 | 
			
		||||
 | 
			
		||||
#define DEFBITS	512
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG genrsa_main
 | 
			
		||||
# define DEFBITS 2048
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG genrsa_main
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	BN_GENCB cb;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	int i,num=DEFBITS;
 | 
			
		||||
	long l;
 | 
			
		||||
	const EVP_CIPHER *enc=NULL;
 | 
			
		||||
	unsigned long f4=RSA_F4;
 | 
			
		||||
	char *outfile=NULL;
 | 
			
		||||
	char *passargout = NULL, *passout = NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	char *inrand=NULL;
 | 
			
		||||
	BIO *out=NULL;
 | 
			
		||||
	BIGNUM *bn = BN_new();
 | 
			
		||||
	RSA *rsa = NULL;
 | 
			
		||||
{
 | 
			
		||||
    BN_GENCB cb;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    int i, num = DEFBITS;
 | 
			
		||||
    long l;
 | 
			
		||||
    const EVP_CIPHER *enc = NULL;
 | 
			
		||||
    unsigned long f4 = RSA_F4;
 | 
			
		||||
    char *outfile = NULL;
 | 
			
		||||
    char *passargout = NULL, *passout = NULL;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    char *inrand = NULL;
 | 
			
		||||
    BIO *out = NULL;
 | 
			
		||||
    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);
 | 
			
		||||
    apps_startup();
 | 
			
		||||
    BN_GENCB_set(&cb, genrsa_cb, bio_err);
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto err;
 | 
			
		||||
	if ((out=BIO_new(BIO_s_file())) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to create BIO for output\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto err;
 | 
			
		||||
    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;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		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;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
		else if (strcmp(*argv,"-des") == 0)
 | 
			
		||||
			enc=EVP_des_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-des3") == 0)
 | 
			
		||||
			enc=EVP_des_ede3_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		else if (strcmp(*argv,"-idea") == 0)
 | 
			
		||||
			enc=EVP_idea_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		else if (strcmp(*argv,"-seed") == 0)
 | 
			
		||||
			enc=EVP_seed_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		else if (strcmp(*argv,"-aes128") == 0)
 | 
			
		||||
			enc=EVP_aes_128_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-aes192") == 0)
 | 
			
		||||
			enc=EVP_aes_192_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-aes256") == 0)
 | 
			
		||||
			enc=EVP_aes_256_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
		else if (strcmp(*argv,"-camellia128") == 0)
 | 
			
		||||
			enc=EVP_camellia_128_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-camellia192") == 0)
 | 
			
		||||
			enc=EVP_camellia_192_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-camellia256") == 0)
 | 
			
		||||
			enc=EVP_camellia_256_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			break;
 | 
			
		||||
		argv++;
 | 
			
		||||
		argc--;
 | 
			
		||||
		}
 | 
			
		||||
	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");
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		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");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
		BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
#endif
 | 
			
		||||
		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," -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");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,"                 load the file (or the files in the directory) into\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 the random number generator\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    argv++;
 | 
			
		||||
    argc--;
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (argc <= 0)
 | 
			
		||||
            break;
 | 
			
		||||
        if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } 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;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-rand") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            inrand = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# ifndef OPENSSL_NO_DES
 | 
			
		||||
        else if (strcmp(*argv, "-des") == 0)
 | 
			
		||||
            enc = EVP_des_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-des3") == 0)
 | 
			
		||||
            enc = EVP_des_ede3_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_IDEA
 | 
			
		||||
        else if (strcmp(*argv, "-idea") == 0)
 | 
			
		||||
            enc = EVP_idea_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_SEED
 | 
			
		||||
        else if (strcmp(*argv, "-seed") == 0)
 | 
			
		||||
            enc = EVP_seed_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_AES
 | 
			
		||||
        else if (strcmp(*argv, "-aes128") == 0)
 | 
			
		||||
            enc = EVP_aes_128_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-aes192") == 0)
 | 
			
		||||
            enc = EVP_aes_192_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-aes256") == 0)
 | 
			
		||||
            enc = EVP_aes_256_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
        else if (strcmp(*argv, "-camellia128") == 0)
 | 
			
		||||
            enc = EVP_camellia_128_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-camellia192") == 0)
 | 
			
		||||
            enc = EVP_camellia_192_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-camellia256") == 0)
 | 
			
		||||
            enc = EVP_camellia_256_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-passout") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargout = *(++argv);
 | 
			
		||||
        } else
 | 
			
		||||
            break;
 | 
			
		||||
        argv++;
 | 
			
		||||
        argc--;
 | 
			
		||||
    }
 | 
			
		||||
    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");
 | 
			
		||||
# ifndef OPENSSL_NO_IDEA
 | 
			
		||||
        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");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_AES
 | 
			
		||||
        BIO_printf(bio_err, " -aes128, -aes192, -aes256\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
        BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
# endif
 | 
			
		||||
        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, " -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");
 | 
			
		||||
# endif
 | 
			
		||||
        BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR,
 | 
			
		||||
                   LIST_SEPARATOR_CHAR);
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 load the file (or the files in the directory) into\n");
 | 
			
		||||
        BIO_printf(bio_err, "                 the random number generator\n");
 | 
			
		||||
        goto err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
    if (!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
 | 
			
		||||
        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)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto 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");
 | 
			
		||||
		}
 | 
			
		||||
	if (inrand != NULL)
 | 
			
		||||
		BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
			app_RAND_load_files(inrand));
 | 
			
		||||
    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");
 | 
			
		||||
    }
 | 
			
		||||
    if (inrand != NULL)
 | 
			
		||||
        BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
 | 
			
		||||
                   app_RAND_load_files(inrand));
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err,"Generating RSA private key, %d bit long modulus\n",
 | 
			
		||||
		num);
 | 
			
		||||
#ifdef OPENSSL_NO_ENGINE
 | 
			
		||||
	rsa = RSA_new();
 | 
			
		||||
#else
 | 
			
		||||
	rsa = RSA_new_method(e);
 | 
			
		||||
#endif
 | 
			
		||||
	if (!rsa)
 | 
			
		||||
		goto err;
 | 
			
		||||
    BIO_printf(bio_err, "Generating RSA private key, %d bit long modulus\n",
 | 
			
		||||
               num);
 | 
			
		||||
# ifdef OPENSSL_NO_ENGINE
 | 
			
		||||
    rsa = RSA_new();
 | 
			
		||||
# else
 | 
			
		||||
    rsa = RSA_new_method(e);
 | 
			
		||||
# endif
 | 
			
		||||
    if (!rsa)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
	if(!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, &cb))
 | 
			
		||||
		goto err;
 | 
			
		||||
		
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
    if (!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, &cb))
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
	/* 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++)
 | 
			
		||||
		{
 | 
			
		||||
#ifndef SIXTY_FOUR_BIT
 | 
			
		||||
		l<<=BN_BITS4;
 | 
			
		||||
		l<<=BN_BITS4;
 | 
			
		||||
#endif
 | 
			
		||||
		l+=rsa->e->d[i];
 | 
			
		||||
		}
 | 
			
		||||
	BIO_printf(bio_err,"e is %ld (0x%lX)\n",l,l);
 | 
			
		||||
	{
 | 
			
		||||
	PW_CB_DATA cb_data;
 | 
			
		||||
	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))
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
    app_RAND_write_file(NULL, bio_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 (ret != 0)
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    /*
 | 
			
		||||
     * 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++) {
 | 
			
		||||
# ifndef SIXTY_FOUR_BIT
 | 
			
		||||
        l <<= BN_BITS4;
 | 
			
		||||
        l <<= BN_BITS4;
 | 
			
		||||
# endif
 | 
			
		||||
        l += rsa->e->d[i];
 | 
			
		||||
    }
 | 
			
		||||
    BIO_printf(bio_err, "e is %ld (0x%lX)\n", l, l);
 | 
			
		||||
    {
 | 
			
		||||
        PW_CB_DATA cb_data;
 | 
			
		||||
        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))
 | 
			
		||||
            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 (ret != 0)
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
{
 | 
			
		||||
    char c = '*';
 | 
			
		||||
 | 
			
		||||
	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
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_RSA */
 | 
			
		||||
    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
 | 
			
		||||
    p = n;
 | 
			
		||||
# endif
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
#else                           /* !OPENSSL_NO_RSA */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										107
									
								
								apps/install-apps.com
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										107
									
								
								apps/install-apps.com
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,107 @@
 | 
			
		||||
$! INSTALL.COM -- Installs the files in a given directory tree
 | 
			
		||||
$!
 | 
			
		||||
$! Author: Richard Levitte <richard@levitte.org>
 | 
			
		||||
$! Time of creation: 22-MAY-1998 10:13
 | 
			
		||||
$!
 | 
			
		||||
$! P1  root of the directory tree
 | 
			
		||||
$! P2  "64" for 64-bit pointers.
 | 
			
		||||
$!
 | 
			
		||||
$!
 | 
			
		||||
$! Announce/identify.
 | 
			
		||||
$!
 | 
			
		||||
$ proc = f$environment( "procedure")
 | 
			
		||||
$ write sys$output "@@@ "+ -
 | 
			
		||||
   f$parse( proc, , , "name")+ f$parse( proc, , , "type")
 | 
			
		||||
$!
 | 
			
		||||
$ on error then goto tidy
 | 
			
		||||
$ on control_c then goto tidy
 | 
			
		||||
$!
 | 
			
		||||
$ if (p1 .eqs. "")
 | 
			
		||||
$ then
 | 
			
		||||
$   write sys$output "First argument missing."
 | 
			
		||||
$   write sys$output -
 | 
			
		||||
     "It should be the directory where you want things installed."
 | 
			
		||||
$   exit
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$ if (f$getsyi("cpu") .lt. 128)
 | 
			
		||||
$ then
 | 
			
		||||
$   arch = "VAX"
 | 
			
		||||
$ else
 | 
			
		||||
$   arch = f$edit( f$getsyi( "arch_name"), "upcase")
 | 
			
		||||
$   if (arch .eqs. "") then arch = "UNK"
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$ archd = arch
 | 
			
		||||
$!
 | 
			
		||||
$ if (p2 .nes. "")
 | 
			
		||||
$ then
 | 
			
		||||
$   if (p2 .eqs. "64")
 | 
			
		||||
$   then
 | 
			
		||||
$     archd = arch+ "_64"
 | 
			
		||||
$   else
 | 
			
		||||
$     if (p2 .nes. "32")
 | 
			
		||||
$     then
 | 
			
		||||
$       write sys$output "Second argument invalid."
 | 
			
		||||
$       write sys$output "It should be "32", "64", or nothing."
 | 
			
		||||
$       exit
 | 
			
		||||
$     endif
 | 
			
		||||
$   endif
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$ root = f$parse( p1, "[]A.;0", , , "syntax_only, no_conceal") - "A.;0"
 | 
			
		||||
$ root_dev = f$parse(root,,,"device","syntax_only")
 | 
			
		||||
$ root_dir = f$parse(root,,,"directory","syntax_only") - -
 | 
			
		||||
   "[000000." - "][" - "[" - "]"
 | 
			
		||||
$ root = root_dev + "[" + root_dir
 | 
			
		||||
$!
 | 
			
		||||
$ define /nolog wrk_sslroot 'root'.] /trans=conc
 | 
			
		||||
$ define /nolog wrk_sslxexe wrk_sslroot:['archd'_exe]
 | 
			
		||||
$!
 | 
			
		||||
$ if f$parse("wrk_sslroot:[000000]") .eqs. "" then -
 | 
			
		||||
   create /directory /log wrk_sslroot:[000000]
 | 
			
		||||
$ if f$parse("wrk_sslxexe:") .eqs. "" then -
 | 
			
		||||
   create /directory /log wrk_sslxexe:
 | 
			
		||||
$!
 | 
			
		||||
$ exe := openssl
 | 
			
		||||
$!
 | 
			
		||||
$ exe_dir := [-.'archd'.exe.apps]
 | 
			
		||||
$!
 | 
			
		||||
$! Executables.
 | 
			
		||||
$!
 | 
			
		||||
$ i = 0
 | 
			
		||||
$ loop_exe:
 | 
			
		||||
$   e = f$edit(f$element( i, ",", exe), "trim")
 | 
			
		||||
$   i = i + 1
 | 
			
		||||
$   if e .eqs. "," then goto loop_exe_end
 | 
			
		||||
$   set noon
 | 
			
		||||
$   file = exe_dir+ e+ ".exe"
 | 
			
		||||
$   if f$search( file) .nes. ""
 | 
			
		||||
$   then
 | 
			
		||||
$     copy /protection = w:re 'file' wrk_sslxexe: /log
 | 
			
		||||
$   endif
 | 
			
		||||
$   set on
 | 
			
		||||
$ goto loop_exe
 | 
			
		||||
$ loop_exe_end:
 | 
			
		||||
$!
 | 
			
		||||
$! Miscellaneous.
 | 
			
		||||
$!
 | 
			
		||||
$ set noon
 | 
			
		||||
$ copy /protection = w:re ca.com wrk_sslxexe:ca.com /log
 | 
			
		||||
$ copy /protection = w:re openssl-vms.cnf wrk_sslroot:[000000]openssl.cnf /log
 | 
			
		||||
$ set on
 | 
			
		||||
$!
 | 
			
		||||
$ tidy:
 | 
			
		||||
$!
 | 
			
		||||
$ call deass wrk_sslroot
 | 
			
		||||
$ call deass wrk_sslxexe
 | 
			
		||||
$!
 | 
			
		||||
$ exit
 | 
			
		||||
$!
 | 
			
		||||
$ deass: subroutine
 | 
			
		||||
$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
 | 
			
		||||
$ then
 | 
			
		||||
$   deassign /process 'p1'
 | 
			
		||||
$ endif
 | 
			
		||||
$ endsubroutine
 | 
			
		||||
$!
 | 
			
		||||
@@ -1,65 +0,0 @@
 | 
			
		||||
$! INSTALL.COM -- Installs the files in a given directory tree
 | 
			
		||||
$!
 | 
			
		||||
$! Author: Richard Levitte <richard@levitte.org>
 | 
			
		||||
$! Time of creation: 22-MAY-1998 10:13
 | 
			
		||||
$!
 | 
			
		||||
$! P1	root of the directory tree
 | 
			
		||||
$!
 | 
			
		||||
$
 | 
			
		||||
$	IF P1 .EQS. ""
 | 
			
		||||
$	THEN
 | 
			
		||||
$	    WRITE SYS$OUTPUT "First argument missing."
 | 
			
		||||
$	    WRITE SYS$OUTPUT -
 | 
			
		||||
		  "Should be the directory where you want things installed."
 | 
			
		||||
$	    EXIT
 | 
			
		||||
$	ENDIF
 | 
			
		||||
$
 | 
			
		||||
$	IF (F$GETSYI("CPU").LT.128)
 | 
			
		||||
$	THEN
 | 
			
		||||
$	    ARCH := VAX
 | 
			
		||||
$	ELSE
 | 
			
		||||
$	    ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
 | 
			
		||||
$	    IF (ARCH .EQS. "") THEN ARCH = "UNK"
 | 
			
		||||
$	ENDIF
 | 
			
		||||
$
 | 
			
		||||
$	ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
 | 
			
		||||
$	ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
 | 
			
		||||
$	ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
 | 
			
		||||
		   - "[000000." - "][" - "[" - "]"
 | 
			
		||||
$	ROOT = ROOT_DEV + "[" + ROOT_DIR
 | 
			
		||||
$
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLEXE WRK_SSLROOT:['ARCH'_EXE]
 | 
			
		||||
$
 | 
			
		||||
$	IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLROOT:[000000]
 | 
			
		||||
$	IF F$PARSE("WRK_SSLEXE:") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLEXE:
 | 
			
		||||
$
 | 
			
		||||
$	EXE := openssl
 | 
			
		||||
$
 | 
			
		||||
$	EXE_DIR := [-.'ARCH'.EXE.APPS]
 | 
			
		||||
$
 | 
			
		||||
$	I = 0
 | 
			
		||||
$ LOOP_EXE: 
 | 
			
		||||
$	E = F$EDIT(F$ELEMENT(I, ",", EXE),"TRIM")
 | 
			
		||||
$	I = I + 1
 | 
			
		||||
$	IF E .EQS. "," THEN GOTO LOOP_EXE_END
 | 
			
		||||
$	SET NOON
 | 
			
		||||
$	IF F$SEARCH(EXE_DIR+E+".EXE") .NES. ""
 | 
			
		||||
$	THEN
 | 
			
		||||
$	  COPY 'EXE_DIR''E'.EXE WRK_SSLEXE:'E'.EXE/log
 | 
			
		||||
$	  SET FILE/PROT=W:RE WRK_SSLEXE:'E'.EXE
 | 
			
		||||
$	ENDIF
 | 
			
		||||
$	SET ON
 | 
			
		||||
$	GOTO LOOP_EXE
 | 
			
		||||
$ LOOP_EXE_END:
 | 
			
		||||
$
 | 
			
		||||
$	SET NOON
 | 
			
		||||
$	COPY CA.COM WRK_SSLEXE:CA.COM/LOG
 | 
			
		||||
$	SET FILE/PROT=W:RE WRK_SSLEXE:CA.COM
 | 
			
		||||
$	COPY OPENSSL-VMS.CNF WRK_SSLROOT:[000000]OPENSSL.CNF/LOG
 | 
			
		||||
$	SET FILE/PROT=W:R WRK_SSLROOT:[000000]OPENSSL.CNF
 | 
			
		||||
$	SET ON
 | 
			
		||||
$
 | 
			
		||||
$	EXIT
 | 
			
		||||
@@ -25,7 +25,7 @@ $!	   VAXC	 For VAX C.
 | 
			
		||||
$!	   DECC	 For DEC C.
 | 
			
		||||
$!	   GNUC	 For GNU C.
 | 
			
		||||
$!
 | 
			
		||||
$!  If you don't speficy a compiler, it will try to determine which
 | 
			
		||||
$!  If you don't specify a compiler, it will try to determine which
 | 
			
		||||
$!  "C" compiler to use.
 | 
			
		||||
$!
 | 
			
		||||
$!  P3, if defined, sets a TCP/IP library to use, through one of the following
 | 
			
		||||
@@ -39,11 +39,35 @@ $!  P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
 | 
			
		||||
$!
 | 
			
		||||
$!  P5, if defined, sets a choice of programs to compile.
 | 
			
		||||
$!
 | 
			
		||||
$!  P6, if defined, specifies the C pointer size.  Ignored on VAX.
 | 
			
		||||
$!      ("64=ARGV" gives more efficient code with HP C V7.3 or newer.)
 | 
			
		||||
$!      Supported values are:
 | 
			
		||||
$!
 | 
			
		||||
$!      ""       Compile with default (/NOPOINTER_SIZE)
 | 
			
		||||
$!      32       Compile with /POINTER_SIZE=32 (SHORT)
 | 
			
		||||
$!      64       Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV])
 | 
			
		||||
$!               (Automatically select ARGV if compiler supports it.)
 | 
			
		||||
$!      64=      Compile with /POINTER_SIZE=64 (LONG).
 | 
			
		||||
$!      64=ARGV  Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV).
 | 
			
		||||
$!
 | 
			
		||||
$!  P7, if defined, specifies a directory where ZLIB files (zlib.h,
 | 
			
		||||
$!  libz.olb) may be found.  Optionally, a non-default object library
 | 
			
		||||
$!  name may be included ("dev:[dir]libz_64.olb", for example).
 | 
			
		||||
$!
 | 
			
		||||
$!
 | 
			
		||||
$! Announce/identify.
 | 
			
		||||
$!
 | 
			
		||||
$ proc = f$environment( "procedure")
 | 
			
		||||
$ write sys$output "@@@ "+ -
 | 
			
		||||
   f$parse( proc, , , "name")+ f$parse( proc, , , "type")
 | 
			
		||||
$!
 | 
			
		||||
$ on control_c then goto exit
 | 
			
		||||
$!
 | 
			
		||||
$! Define A TCP/IP Library That We Will Need To Link To.
 | 
			
		||||
$! (That Is, If We Need To Link To One.)
 | 
			
		||||
$!
 | 
			
		||||
$ TCPIP_LIB = ""
 | 
			
		||||
$ ZLIB_LIB = ""
 | 
			
		||||
$!
 | 
			
		||||
$! Check What Architecture We Are Using.
 | 
			
		||||
$!
 | 
			
		||||
@@ -52,7 +76,7 @@ $ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  The Architecture Is VAX.
 | 
			
		||||
$!
 | 
			
		||||
$   ARCH := VAX
 | 
			
		||||
$   ARCH = "VAX"
 | 
			
		||||
$!
 | 
			
		||||
$! Else...
 | 
			
		||||
$!
 | 
			
		||||
@@ -67,37 +91,53 @@ $! End The Architecture Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$ ARCHD = ARCH
 | 
			
		||||
$ LIB32 = "32"
 | 
			
		||||
$ OPT_FILE = ""
 | 
			
		||||
$ POINTER_SIZE = ""
 | 
			
		||||
$!
 | 
			
		||||
$! Define what programs should be compiled
 | 
			
		||||
$!
 | 
			
		||||
$ PROGRAMS := OPENSSL
 | 
			
		||||
$!
 | 
			
		||||
$! Define The CRYPTO Library.
 | 
			
		||||
$!
 | 
			
		||||
$ CRYPTO_LIB := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]LIBCRYPTO.OLB
 | 
			
		||||
$!
 | 
			
		||||
$! Define The SSL Library.
 | 
			
		||||
$!
 | 
			
		||||
$ SSL_LIB := SYS$DISK:[-.'ARCH'.EXE.SSL]LIBSSL.OLB
 | 
			
		||||
$!
 | 
			
		||||
$! Define The OBJ Directory.
 | 
			
		||||
$!
 | 
			
		||||
$ OBJ_DIR := SYS$DISK:[-.'ARCH'.OBJ.APPS]
 | 
			
		||||
$!
 | 
			
		||||
$! Define The EXE Directory.
 | 
			
		||||
$!
 | 
			
		||||
$ EXE_DIR := SYS$DISK:[-.'ARCH'.EXE.APPS]
 | 
			
		||||
$!
 | 
			
		||||
$! Check To Make Sure We Have Valid Command Line Parameters.
 | 
			
		||||
$!
 | 
			
		||||
$ GOSUB CHECK_OPTIONS
 | 
			
		||||
$!
 | 
			
		||||
$! Define The CRYPTO Library.
 | 
			
		||||
$!
 | 
			
		||||
$ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB
 | 
			
		||||
$!
 | 
			
		||||
$! Define The SSL Library.
 | 
			
		||||
$!
 | 
			
		||||
$ SSL_LIB := SYS$DISK:[-.'ARCHD'.EXE.SSL]SSL_LIBSSL'LIB32'.OLB
 | 
			
		||||
$!
 | 
			
		||||
$! Define The OBJ and EXE Directories.
 | 
			
		||||
$!
 | 
			
		||||
$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.APPS]
 | 
			
		||||
$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.APPS]
 | 
			
		||||
$!
 | 
			
		||||
$! Specify the destination directory in any /MAP option.
 | 
			
		||||
$!
 | 
			
		||||
$ if (LINKMAP .eqs. "MAP")
 | 
			
		||||
$ then
 | 
			
		||||
$   LINKMAP = LINKMAP+ "=''EXE_DIR'"
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$! Add the location prefix to the linker options file name.
 | 
			
		||||
$!
 | 
			
		||||
$ if (OPT_FILE .nes. "")
 | 
			
		||||
$ then
 | 
			
		||||
$   OPT_FILE = EXE_DIR+ OPT_FILE
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$! Initialise logical names and such
 | 
			
		||||
$!
 | 
			
		||||
$ GOSUB INITIALISE
 | 
			
		||||
$!
 | 
			
		||||
$! Tell The User What Kind of Machine We Run On.
 | 
			
		||||
$!
 | 
			
		||||
$ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine."
 | 
			
		||||
$ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'"
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If The OBJ Directory Exists.
 | 
			
		||||
$!
 | 
			
		||||
@@ -144,7 +184,10 @@ $ 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"
 | 
			
		||||
$!
 | 
			
		||||
$ TCPIP_PROGRAMS = ",,"
 | 
			
		||||
$ IF COMPILER .EQS. "VAXC" THEN -
 | 
			
		||||
     TCPIP_PROGRAMS = ",OPENSSL,"
 | 
			
		||||
@@ -202,7 +245,7 @@ $   LIB_COUNTER = -1
 | 
			
		||||
$!
 | 
			
		||||
$!  Create a .OPT file for the object files
 | 
			
		||||
$!
 | 
			
		||||
$   OPEN/WRITE OBJECTS 'EXE_DIR''CURRENT_APP'.OPT
 | 
			
		||||
$   OPEN /WRITE OBJECTS 'EXE_DIR''CURRENT_APP'.OPT
 | 
			
		||||
$!
 | 
			
		||||
$!  Top Of The File Loop.
 | 
			
		||||
$!
 | 
			
		||||
@@ -289,34 +332,18 @@ $   GOTO NEXT_APP
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Link The Program.
 | 
			
		||||
$! Check To See If We Are To Link With A Specific TCP/IP Library.
 | 
			
		||||
$!
 | 
			
		||||
$ ON WARNING THEN GOTO NEXT_APP
 | 
			
		||||
$!
 | 
			
		||||
$ IF (TCPIP_LIB.NES."")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$! Don't Link With The RSAREF Routines And TCP/IP Library.
 | 
			
		||||
$!
 | 
			
		||||
$   LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
 | 
			
		||||
	'EXE_DIR''CURRENT_APP'.OPT/OPTION, -
 | 
			
		||||
        'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
 | 
			
		||||
        'TCPIP_LIB','OPT_FILE'/OPTION
 | 
			
		||||
$!
 | 
			
		||||
$! Else...
 | 
			
		||||
$!
 | 
			
		||||
$ ELSE
 | 
			
		||||
$!
 | 
			
		||||
$! Don't Link With The RSAREF Routines And Link With A TCP/IP Library.
 | 
			
		||||
$!
 | 
			
		||||
$   LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
 | 
			
		||||
	'EXE_DIR''CURRENT_APP'.OPT/OPTION, -
 | 
			
		||||
        'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
 | 
			
		||||
        'OPT_FILE'/OPTION
 | 
			
		||||
$!
 | 
			
		||||
$! End The TCP/IP Library Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' /EXE='EXE_FILE' -
 | 
			
		||||
  'EXE_DIR''CURRENT_APP'.OPT /OPTIONS, -
 | 
			
		||||
  'SSL_LIB' /LIBRARY, -
 | 
			
		||||
  'CRYPTO_LIB' /LIBRARY -
 | 
			
		||||
  'TCPIP_LIB' -
 | 
			
		||||
  'ZLIB_LIB' -
 | 
			
		||||
  ,'OPT_FILE' /OPTIONS
 | 
			
		||||
$!
 | 
			
		||||
$! Go Back And Do It Again.
 | 
			
		||||
$!
 | 
			
		||||
@@ -351,7 +378,7 @@ $!
 | 
			
		||||
$     CREATE 'OPT_FILE'
 | 
			
		||||
$DECK
 | 
			
		||||
!
 | 
			
		||||
! Default System Options File To Link Agianst 
 | 
			
		||||
! Default System Options File To Link Against 
 | 
			
		||||
! The Sharable VAX C Runtime Library.
 | 
			
		||||
!
 | 
			
		||||
SYS$SHARE:VAXCRTL.EXE/SHARE
 | 
			
		||||
@@ -380,7 +407,7 @@ $!
 | 
			
		||||
$     CREATE 'OPT_FILE'
 | 
			
		||||
$DECK
 | 
			
		||||
!
 | 
			
		||||
! Default System Options File To Link Agianst 
 | 
			
		||||
! Default System Options File To Link Against 
 | 
			
		||||
! The Sharable C Runtime Library.
 | 
			
		||||
!
 | 
			
		||||
GNU_CC:[000000]GCCLIB/LIBRARY
 | 
			
		||||
@@ -415,7 +442,7 @@ $!
 | 
			
		||||
$       CREATE 'OPT_FILE'
 | 
			
		||||
$DECK
 | 
			
		||||
!
 | 
			
		||||
! Default System Options File To Link Agianst 
 | 
			
		||||
! Default System Options File To Link Against 
 | 
			
		||||
! The Sharable DEC C Runtime Library.
 | 
			
		||||
!
 | 
			
		||||
SYS$SHARE:DECC$SHR.EXE/SHARE
 | 
			
		||||
@@ -430,7 +457,7 @@ $!
 | 
			
		||||
$       CREATE 'OPT_FILE'
 | 
			
		||||
$DECK
 | 
			
		||||
!
 | 
			
		||||
! Default System Options File For non-VAX To Link Agianst 
 | 
			
		||||
! Default System Options File For non-VAX To Link Against 
 | 
			
		||||
! The Sharable C Runtime Library.
 | 
			
		||||
!
 | 
			
		||||
SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
 | 
			
		||||
@@ -514,14 +541,15 @@ $!
 | 
			
		||||
$ IF (P1.EQS."NODEBUG")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!   P1 Is NODEBUG, So Compile Without Debugger Information.
 | 
			
		||||
$!  P1 Is NODEBUG, So Compile Without Debugger Information.
 | 
			
		||||
$!
 | 
			
		||||
$    DEBUGGER  = "NODEBUG"
 | 
			
		||||
$    TRACEBACK = "NOTRACEBACK" 
 | 
			
		||||
$    GCC_OPTIMIZE = "OPTIMIZE"
 | 
			
		||||
$    CC_OPTIMIZE = "OPTIMIZE"
 | 
			
		||||
$    WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
 | 
			
		||||
$    WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
 | 
			
		||||
$   DEBUGGER  = "NODEBUG"
 | 
			
		||||
$   LINKMAP = "NOMAP"
 | 
			
		||||
$   TRACEBACK = "NOTRACEBACK" 
 | 
			
		||||
$   GCC_OPTIMIZE = "OPTIMIZE"
 | 
			
		||||
$   CC_OPTIMIZE = "OPTIMIZE"
 | 
			
		||||
$   WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
 | 
			
		||||
$   WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
 | 
			
		||||
$!
 | 
			
		||||
$! Else...
 | 
			
		||||
$!
 | 
			
		||||
@@ -535,6 +563,7 @@ $!
 | 
			
		||||
$!    Compile With Debugger Information.
 | 
			
		||||
$!
 | 
			
		||||
$     DEBUGGER  = "DEBUG"
 | 
			
		||||
$     LINKMAP = "MAP"
 | 
			
		||||
$     TRACEBACK = "TRACEBACK"
 | 
			
		||||
$     GCC_OPTIMIZE = "NOOPTIMIZE"
 | 
			
		||||
$     CC_OPTIMIZE = "NOOPTIMIZE"
 | 
			
		||||
@@ -542,7 +571,7 @@ $     WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
 | 
			
		||||
$     WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
 | 
			
		||||
$   ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!    Tell The User Entered An Invalid Option..
 | 
			
		||||
$!    Tell The User Entered An Invalid Option.
 | 
			
		||||
$!
 | 
			
		||||
$     WRITE SYS$OUTPUT ""
 | 
			
		||||
$     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
 | 
			
		||||
@@ -555,7 +584,7 @@ $!    Time To EXIT.
 | 
			
		||||
$!
 | 
			
		||||
$     EXIT
 | 
			
		||||
$!
 | 
			
		||||
$!  End The Valid Arguement Check.
 | 
			
		||||
$!  End The Valid Argument Check.
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
@@ -563,6 +592,87 @@ $! End The P1 Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Check P6 (POINTER_SIZE).
 | 
			
		||||
$!
 | 
			
		||||
$ IF (P6 .NES. "") .AND. (ARCH .NES. "VAX")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$   IF (P6 .EQS. "32")
 | 
			
		||||
$   THEN
 | 
			
		||||
$     POINTER_SIZE = " /POINTER_SIZE=32"
 | 
			
		||||
$   ELSE
 | 
			
		||||
$     POINTER_SIZE = F$EDIT( P6, "COLLAPSE, UPCASE")
 | 
			
		||||
$     IF ((POINTER_SIZE .EQS. "64") .OR. -
 | 
			
		||||
       (POINTER_SIZE .EQS. "64=") .OR. -
 | 
			
		||||
       (POINTER_SIZE .EQS. "64=ARGV"))
 | 
			
		||||
$     THEN
 | 
			
		||||
$       ARCHD = ARCH+ "_64"
 | 
			
		||||
$       LIB32 = ""
 | 
			
		||||
$       IF (F$EXTRACT( 2, 1, POINTER_SIZE) .EQS. "=")
 | 
			
		||||
$       THEN
 | 
			
		||||
$!        Explicit user choice: "64" or "64=ARGV".
 | 
			
		||||
$         IF (POINTER_SIZE .EQS. "64=") THEN POINTER_SIZE = "64"
 | 
			
		||||
$       ELSE
 | 
			
		||||
$         SET NOON
 | 
			
		||||
$         DEFINE /USER_MODE SYS$OUTPUT NL:
 | 
			
		||||
$         DEFINE /USER_MODE SYS$ERROR NL:
 | 
			
		||||
$         CC /NOLIST /NOOBJECT /POINTER_SIZE=64=ARGV NL:
 | 
			
		||||
$         IF ($STATUS .AND. %X0FFF0000) .EQ. %X00030000
 | 
			
		||||
$         THEN
 | 
			
		||||
$           ! If we got here, it means DCL complained like this:
 | 
			
		||||
$           ! %DCL-W-NOVALU, value not allowed - remove value specification
 | 
			
		||||
$           !  \64=\
 | 
			
		||||
$           !
 | 
			
		||||
$           ! If the compiler was run, logicals defined in /USER would
 | 
			
		||||
$           ! have been deassigned automatically.  However, when DCL
 | 
			
		||||
$           ! complains, they aren't, so we do it here (it might be
 | 
			
		||||
$           ! unnecessary, but just in case there will be another error
 | 
			
		||||
$           ! message further on that we don't want to miss)
 | 
			
		||||
$           DEASSIGN /USER_MODE SYS$ERROR
 | 
			
		||||
$           DEASSIGN /USER_MODE SYS$OUTPUT
 | 
			
		||||
$         ELSE
 | 
			
		||||
$           POINTER_SIZE = POINTER_SIZE + "=ARGV"
 | 
			
		||||
$         ENDIF
 | 
			
		||||
$         SET ON
 | 
			
		||||
$       ENDIF
 | 
			
		||||
$       POINTER_SIZE = " /POINTER_SIZE=''POINTER_SIZE'"
 | 
			
		||||
$!
 | 
			
		||||
$     ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!      Tell The User Entered An Invalid Option.
 | 
			
		||||
$!
 | 
			
		||||
$       WRITE SYS$OUTPUT ""
 | 
			
		||||
$       WRITE SYS$OUTPUT "The Option ", P6, -
 | 
			
		||||
         " Is Invalid.  The Valid Options Are:"
 | 
			
		||||
$       WRITE SYS$OUTPUT ""
 | 
			
		||||
$       WRITE SYS$OUTPUT -
 | 
			
		||||
         "    """"  :  Compile with default (short) pointers."
 | 
			
		||||
$       WRITE SYS$OUTPUT -
 | 
			
		||||
         "    32  :  Compile with 32-bit (short) pointers."
 | 
			
		||||
$       WRITE SYS$OUTPUT -
 | 
			
		||||
         "    64       :  Compile with 64-bit (long) pointers (auto ARGV)."
 | 
			
		||||
$       WRITE SYS$OUTPUT -
 | 
			
		||||
         "    64=      :  Compile with 64-bit (long) pointers (no ARGV)."
 | 
			
		||||
$       WRITE SYS$OUTPUT -
 | 
			
		||||
         "    64=ARGV  :  Compile with 64-bit (long) pointers (ARGV)."
 | 
			
		||||
$       WRITE SYS$OUTPUT ""
 | 
			
		||||
$! 
 | 
			
		||||
$!      Time To EXIT.
 | 
			
		||||
$!
 | 
			
		||||
$       EXIT
 | 
			
		||||
$!
 | 
			
		||||
$     ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! End The P6 (POINTER_SIZE) Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Set basic C compiler /INCLUDE directories.
 | 
			
		||||
$!
 | 
			
		||||
$ CC_INCLUDES = "SYS$DISK:[-],SYS$DISK:[-.CRYPTO]"
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If P2 Is Blank.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (P2.EQS."")
 | 
			
		||||
@@ -663,11 +773,67 @@ $ 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 = "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
 | 
			
		||||
$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
 | 
			
		||||
	CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
 | 
			
		||||
$ CCDISABLEWARNINGS = "" !!! "MAYLOSEDATA3" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
 | 
			
		||||
$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. ""
 | 
			
		||||
$ THEN
 | 
			
		||||
$     IF CCDISABLEWARNINGS .NES. THEN CCDISABLEWARNINGS = CCDISABLEWARNINGS + ","
 | 
			
		||||
$     CCDISABLEWARNINGS = CCDISABLEWARNINGS + USER_CCDISABLEWARNINGS
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If The User Entered A Valid Paramter.
 | 
			
		||||
$! Check To See If We Have A ZLIB Option.
 | 
			
		||||
$!
 | 
			
		||||
$ ZLIB = P7
 | 
			
		||||
$ IF (ZLIB .NES. "")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Check for expected ZLIB files.
 | 
			
		||||
$!
 | 
			
		||||
$   err = 0
 | 
			
		||||
$   file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
 | 
			
		||||
$   if (f$search( file1) .eqs. "")
 | 
			
		||||
$   then
 | 
			
		||||
$     WRITE SYS$OUTPUT ""
 | 
			
		||||
$     WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
 | 
			
		||||
$     WRITE SYS$OUTPUT "    Can't find header: ''file1'"
 | 
			
		||||
$     err = 1
 | 
			
		||||
$   endif
 | 
			
		||||
$   file1 = f$parse( "A.;", ZLIB)- "A.;"
 | 
			
		||||
$!
 | 
			
		||||
$   file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
 | 
			
		||||
$   if (f$search( file2) .eqs. "")
 | 
			
		||||
$   then
 | 
			
		||||
$     if (err .eq. 0)
 | 
			
		||||
$     then
 | 
			
		||||
$       WRITE SYS$OUTPUT ""
 | 
			
		||||
$       WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
 | 
			
		||||
$     endif
 | 
			
		||||
$     WRITE SYS$OUTPUT "    Can't find library: ''file2'"
 | 
			
		||||
$     WRITE SYS$OUTPUT ""
 | 
			
		||||
$     err = err+ 2
 | 
			
		||||
$   endif
 | 
			
		||||
$   if (err .eq. 1)
 | 
			
		||||
$   then
 | 
			
		||||
$     WRITE SYS$OUTPUT ""
 | 
			
		||||
$   endif
 | 
			
		||||
$!
 | 
			
		||||
$   if (err .ne. 0)
 | 
			
		||||
$   then
 | 
			
		||||
$     EXIT
 | 
			
		||||
$   endif
 | 
			
		||||
$!
 | 
			
		||||
$   CCDEFS = """ZLIB=1"", "+ CCDEFS
 | 
			
		||||
$   CC_INCLUDES = CC_INCLUDES+ ", "+ file1
 | 
			
		||||
$   ZLIB_LIB = ", ''file2' /library"
 | 
			
		||||
$!
 | 
			
		||||
$!  Print info
 | 
			
		||||
$!
 | 
			
		||||
$   WRITE SYS$OUTPUT "ZLIB library spec: ", file2
 | 
			
		||||
$!
 | 
			
		||||
$! End The ZLIB Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If The User Entered A Valid Parameter.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (P2.EQS."VAXC").OR.(P2.EQS."DECC").OR.(P2.EQS."GNUC")
 | 
			
		||||
$ THEN
 | 
			
		||||
@@ -690,13 +856,13 @@ $!
 | 
			
		||||
$     CC = "CC"
 | 
			
		||||
$     IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
 | 
			
		||||
	 THEN CC = "CC/DECC"
 | 
			
		||||
$     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
 | 
			
		||||
           "/NOLIST/PREFIX=ALL" + -
 | 
			
		||||
	   "/INCLUDE=(SYS$DISK:[-],SYS$DISK:[-.CRYPTO])" + CCEXTRAFLAGS
 | 
			
		||||
$     CC = CC + " /''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ -
 | 
			
		||||
       "''POINTER_SIZE' /NOLIST /PREFIX=ALL" + -
 | 
			
		||||
       " /INCLUDE=(''CC_INCLUDES') " + CCEXTRAFLAGS
 | 
			
		||||
$!
 | 
			
		||||
$!    Define The Linker Options File Name.
 | 
			
		||||
$!
 | 
			
		||||
$     OPT_FILE = "''EXE_DIR'VAX_DECC_OPTIONS.OPT"
 | 
			
		||||
$     OPT_FILE = "VAX_DECC_OPTIONS.OPT"
 | 
			
		||||
$!
 | 
			
		||||
$!  End DECC Check.
 | 
			
		||||
$!
 | 
			
		||||
@@ -724,7 +890,7 @@ $	EXIT
 | 
			
		||||
$     ENDIF
 | 
			
		||||
$     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
 | 
			
		||||
$     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
 | 
			
		||||
	   "/INCLUDE=(SYS$DISK:[-],SYS$DISK:[-.CRYPTO])" + CCEXTRAFLAGS
 | 
			
		||||
	   "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
 | 
			
		||||
$     CCDEFS = CCDEFS + ",""VAXC"""
 | 
			
		||||
$!
 | 
			
		||||
$!    Define <sys> As SYS$COMMON:[SYSLIB]
 | 
			
		||||
@@ -733,7 +899,7 @@ $     DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
 | 
			
		||||
$!
 | 
			
		||||
$!    Define The Linker Options File Name.
 | 
			
		||||
$!
 | 
			
		||||
$     OPT_FILE = "''EXE_DIR'VAX_VAXC_OPTIONS.OPT"
 | 
			
		||||
$     OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
 | 
			
		||||
$!
 | 
			
		||||
$!  End VAXC Check
 | 
			
		||||
$!
 | 
			
		||||
@@ -756,11 +922,11 @@ $!    Use GNU C...
 | 
			
		||||
$!
 | 
			
		||||
$     IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC
 | 
			
		||||
$     CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
 | 
			
		||||
	   "/INCLUDE=(SYS$DISK:[-],SYS$DISK:[-.CRYPTO])" + CCEXTRAFLAGS
 | 
			
		||||
	   "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
 | 
			
		||||
$!
 | 
			
		||||
$!    Define The Linker Options File Name.
 | 
			
		||||
$!
 | 
			
		||||
$     OPT_FILE = "''EXE_DIR'VAX_GNUC_OPTIONS.OPT"
 | 
			
		||||
$     OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
 | 
			
		||||
$!
 | 
			
		||||
$!  End The GNU C Check.
 | 
			
		||||
$!
 | 
			
		||||
@@ -770,7 +936,7 @@ $!  Set up default defines
 | 
			
		||||
$!
 | 
			
		||||
$   CCDEFS = """FLAT_INC=1""," + CCDEFS
 | 
			
		||||
$!
 | 
			
		||||
$!  Else The User Entered An Invalid Arguement.
 | 
			
		||||
$!  Else The User Entered An Invalid Argument.
 | 
			
		||||
$!
 | 
			
		||||
$ ELSE
 | 
			
		||||
$!
 | 
			
		||||
@@ -802,7 +968,7 @@ $   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Set the library to use SOCKETSHR
 | 
			
		||||
$!
 | 
			
		||||
$     TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT"
 | 
			
		||||
$     TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
 | 
			
		||||
$!
 | 
			
		||||
$!    Done with SOCKETSHR
 | 
			
		||||
$!
 | 
			
		||||
@@ -828,13 +994,13 @@ $   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Set the library to use UCX.
 | 
			
		||||
$!
 | 
			
		||||
$     TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT/OPT"
 | 
			
		||||
$     TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
 | 
			
		||||
$     IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
 | 
			
		||||
$     THEN
 | 
			
		||||
$       TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT"
 | 
			
		||||
$       TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
 | 
			
		||||
$     ELSE
 | 
			
		||||
$       IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
 | 
			
		||||
	  TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT/OPT"
 | 
			
		||||
	  TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
 | 
			
		||||
$     ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!    Done with UCX
 | 
			
		||||
@@ -848,7 +1014,7 @@ $   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Set the library to use TCPIP.
 | 
			
		||||
$!
 | 
			
		||||
$     TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT"
 | 
			
		||||
$     TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
 | 
			
		||||
$!
 | 
			
		||||
$!    Done with TCPIP
 | 
			
		||||
$!
 | 
			
		||||
@@ -873,9 +1039,9 @@ $   CCDEFS = CCDEFS + ",TCPIP_TYPE_''P3'"
 | 
			
		||||
$!
 | 
			
		||||
$!  Print info
 | 
			
		||||
$!
 | 
			
		||||
$   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB
 | 
			
		||||
$   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
 | 
			
		||||
$!
 | 
			
		||||
$!  Else The User Entered An Invalid Arguement.
 | 
			
		||||
$!  Else The User Entered An Invalid Argument.
 | 
			
		||||
$!
 | 
			
		||||
$ ELSE
 | 
			
		||||
$!
 | 
			
		||||
@@ -901,15 +1067,27 @@ $! 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 + "))"
 | 
			
		||||
$     CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$ ELSE
 | 
			
		||||
$   CCDISABLEWARNINGS = ""
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$ CC2 = CC + "/DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS
 | 
			
		||||
$ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
 | 
			
		||||
$ CC2 = CC + " /DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS
 | 
			
		||||
$ CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
 | 
			
		||||
$!
 | 
			
		||||
$! Show user the result
 | 
			
		||||
$!
 | 
			
		||||
@@ -975,7 +1153,7 @@ $ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
 | 
			
		||||
$!
 | 
			
		||||
$! Set up the logical name OPENSSL to point at the include directory
 | 
			
		||||
$!
 | 
			
		||||
$ DEFINE OPENSSL/NOLOG '__INCLUDE'
 | 
			
		||||
$ DEFINE OPENSSL /NOLOG '__INCLUDE'
 | 
			
		||||
$!
 | 
			
		||||
$! Done
 | 
			
		||||
$!
 | 
			
		||||
@@ -983,15 +1161,24 @@ $ RETURN
 | 
			
		||||
$!
 | 
			
		||||
$ CLEANUP:
 | 
			
		||||
$!
 | 
			
		||||
$! Restore the logical name OPENSSL if it had a value
 | 
			
		||||
$! Restore the saved logical name OPENSSL, if it had a value.
 | 
			
		||||
$!
 | 
			
		||||
$ IF __SAVE_OPENSSL .EQS. ""
 | 
			
		||||
$ THEN
 | 
			
		||||
$   DEASSIGN OPENSSL
 | 
			
		||||
$ ELSE
 | 
			
		||||
$   DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL'
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$ if (f$type( __SAVE_OPENSSL) .nes. "")
 | 
			
		||||
$ then
 | 
			
		||||
$   IF __SAVE_OPENSSL .EQS. ""
 | 
			
		||||
$   THEN
 | 
			
		||||
$     DEASSIGN OPENSSL
 | 
			
		||||
$   ELSE
 | 
			
		||||
$     DEFINE /NOLOG OPENSSL '__SAVE_OPENSSL'
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$! Close any open files.
 | 
			
		||||
$!
 | 
			
		||||
$ if (f$trnlnm( "objects", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
 | 
			
		||||
   close objects
 | 
			
		||||
$!
 | 
			
		||||
$! Done
 | 
			
		||||
$!
 | 
			
		||||
$ RETURN
 | 
			
		||||
$!
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										181
									
								
								apps/nseq.c
									
									
									
									
									
								
							
							
						
						
									
										181
									
								
								apps/nseq.c
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
/* 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.
 | 
			
		||||
@@ -10,7 +11,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -69,99 +70,101 @@ int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	int toseq = 0;
 | 
			
		||||
	X509 *x509 = NULL;
 | 
			
		||||
	NETSCAPE_CERT_SEQUENCE *seq = NULL;
 | 
			
		||||
	int i, ret = 1;
 | 
			
		||||
	int badarg = 0;
 | 
			
		||||
	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;
 | 
			
		||||
		else if (!strcmp (*args, "-in")) {
 | 
			
		||||
			if (args[1]) {
 | 
			
		||||
				args++;
 | 
			
		||||
				infile = *args;
 | 
			
		||||
			} else badarg = 1;
 | 
			
		||||
		} else if (!strcmp (*args, "-out")) {
 | 
			
		||||
			if (args[1]) {
 | 
			
		||||
				args++;
 | 
			
		||||
				outfile = *args;
 | 
			
		||||
			} else badarg = 1;
 | 
			
		||||
		} else badarg = 1;
 | 
			
		||||
		args++;
 | 
			
		||||
	}
 | 
			
		||||
    char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int toseq = 0;
 | 
			
		||||
    X509 *x509 = NULL;
 | 
			
		||||
    NETSCAPE_CERT_SEQUENCE *seq = NULL;
 | 
			
		||||
    int i, ret = 1;
 | 
			
		||||
    int badarg = 0;
 | 
			
		||||
    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;
 | 
			
		||||
        else if (!strcmp(*args, "-in")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                infile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-out")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                outfile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else
 | 
			
		||||
            badarg = 1;
 | 
			
		||||
        args++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badarg) {
 | 
			
		||||
		BIO_printf (bio_err, "Netscape certificate sequence utility\n");
 | 
			
		||||
		BIO_printf (bio_err, "Usage nseq [options]\n");
 | 
			
		||||
		BIO_printf (bio_err, "where options are\n");
 | 
			
		||||
		BIO_printf (bio_err, "-in file  input file\n");
 | 
			
		||||
		BIO_printf (bio_err, "-out file output file\n");
 | 
			
		||||
		BIO_printf (bio_err, "-toseq    output NS Sequence file\n");
 | 
			
		||||
		OPENSSL_EXIT(1);
 | 
			
		||||
	}
 | 
			
		||||
    if (badarg) {
 | 
			
		||||
        BIO_printf(bio_err, "Netscape certificate sequence utility\n");
 | 
			
		||||
        BIO_printf(bio_err, "Usage nseq [options]\n");
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, "-in file  input file\n");
 | 
			
		||||
        BIO_printf(bio_err, "-out file output file\n");
 | 
			
		||||
        BIO_printf(bio_err, "-toseq    output NS Sequence file\n");
 | 
			
		||||
        OPENSSL_EXIT(1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (infile) {
 | 
			
		||||
		if (!(in = BIO_new_file (infile, "r"))) {
 | 
			
		||||
			BIO_printf (bio_err,
 | 
			
		||||
				 "Can't open input file %s\n", infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	} else in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
    if (infile) {
 | 
			
		||||
        if (!(in = BIO_new_file(infile, "r"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open input file %s\n", infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else
 | 
			
		||||
        in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (outfile) {
 | 
			
		||||
		if (!(out = BIO_new_file (outfile, "w"))) {
 | 
			
		||||
			BIO_printf (bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "w"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open output file %s\n", outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
	if (toseq) {
 | 
			
		||||
		seq = NETSCAPE_CERT_SEQUENCE_new();
 | 
			
		||||
		seq->certs = sk_X509_new_null();
 | 
			
		||||
		while((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL))) 
 | 
			
		||||
		    sk_X509_push(seq->certs,x509);
 | 
			
		||||
    }
 | 
			
		||||
    if (toseq) {
 | 
			
		||||
        seq = NETSCAPE_CERT_SEQUENCE_new();
 | 
			
		||||
        seq->certs = sk_X509_new_null();
 | 
			
		||||
        while ((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL)))
 | 
			
		||||
            sk_X509_push(seq->certs, x509);
 | 
			
		||||
 | 
			
		||||
		if(!sk_X509_num(seq->certs))
 | 
			
		||||
		{
 | 
			
		||||
			BIO_printf (bio_err, "Error reading certs file %s\n", infile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		PEM_write_bio_NETSCAPE_CERT_SEQUENCE(out, seq);
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
        if (!sk_X509_num(seq->certs)) {
 | 
			
		||||
            BIO_printf(bio_err, "Error reading certs file %s\n", infile);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        PEM_write_bio_NETSCAPE_CERT_SEQUENCE(out, seq);
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!(seq = PEM_read_bio_NETSCAPE_CERT_SEQUENCE(in, NULL, NULL, NULL))) {
 | 
			
		||||
		BIO_printf (bio_err, "Error reading sequence file %s\n", infile);
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    if (!(seq = PEM_read_bio_NETSCAPE_CERT_SEQUENCE(in, NULL, NULL, NULL))) {
 | 
			
		||||
        BIO_printf(bio_err, "Error reading sequence file %s\n", infile);
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	for(i = 0; i < sk_X509_num(seq->certs); i++) {
 | 
			
		||||
		x509 = sk_X509_value(seq->certs, i);
 | 
			
		||||
		dump_cert_text(out, x509);
 | 
			
		||||
		PEM_write_bio_X509(out, x509);
 | 
			
		||||
	}
 | 
			
		||||
	ret = 0;
 | 
			
		||||
end:
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	NETSCAPE_CERT_SEQUENCE_free(seq);
 | 
			
		||||
    for (i = 0; i < sk_X509_num(seq->certs); i++) {
 | 
			
		||||
        x509 = sk_X509_value(seq->certs, i);
 | 
			
		||||
        dump_cert_text(out, x509);
 | 
			
		||||
        PEM_write_bio_X509(out, x509);
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    NETSCAPE_CERT_SEQUENCE_free(seq);
 | 
			
		||||
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2413
									
								
								apps/ocsp.c
									
									
									
									
									
								
							
							
						
						
									
										2413
									
								
								apps/ocsp.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -103,7 +103,7 @@ emailAddress		= optional
 | 
			
		||||
 | 
			
		||||
####################################################################
 | 
			
		||||
[ req ]
 | 
			
		||||
default_bits		= 1024
 | 
			
		||||
default_bits		= 2048
 | 
			
		||||
default_keyfile 	= privkey.pem
 | 
			
		||||
distinguished_name	= req_distinguished_name
 | 
			
		||||
attributes		= req_attributes
 | 
			
		||||
@@ -145,7 +145,7 @@ localityName			= Locality Name (eg, city)
 | 
			
		||||
organizationalUnitName		= Organizational Unit Name (eg, section)
 | 
			
		||||
#organizationalUnitName_default	=
 | 
			
		||||
 | 
			
		||||
commonName			= Common Name (eg, YOUR name)
 | 
			
		||||
commonName			= Common Name (e.g. server FQDN or YOUR name)
 | 
			
		||||
commonName_max			= 64
 | 
			
		||||
 | 
			
		||||
emailAddress			= Email Address
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										976
									
								
								apps/openssl.c
									
									
									
									
									
								
							
							
						
						
									
										976
									
								
								apps/openssl.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -103,7 +103,7 @@ emailAddress		= optional
 | 
			
		||||
 | 
			
		||||
####################################################################
 | 
			
		||||
[ req ]
 | 
			
		||||
default_bits		= 1024
 | 
			
		||||
default_bits		= 2048
 | 
			
		||||
default_keyfile 	= privkey.pem
 | 
			
		||||
distinguished_name	= req_distinguished_name
 | 
			
		||||
attributes		= req_attributes
 | 
			
		||||
@@ -145,7 +145,7 @@ localityName			= Locality Name (eg, city)
 | 
			
		||||
organizationalUnitName		= Organizational Unit Name (eg, section)
 | 
			
		||||
#organizationalUnitName_default	=
 | 
			
		||||
 | 
			
		||||
commonName			= Common Name (eg, YOUR name)
 | 
			
		||||
commonName			= Common Name (e.g. server FQDN or YOUR name)
 | 
			
		||||
commonName_max			= 64
 | 
			
		||||
 | 
			
		||||
emailAddress			= Email Address
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										876
									
								
								apps/passwd.c
									
									
									
									
									
								
							
							
						
						
									
										876
									
								
								apps/passwd.c
									
									
									
									
									
								
							@@ -6,44 +6,44 @@
 | 
			
		||||
 | 
			
		||||
#if !defined(OPENSSL_NO_DES) || !defined(NO_MD5CRYPT_1)
 | 
			
		||||
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
# include <assert.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
# include <openssl/des.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef NO_MD5CRYPT_1
 | 
			
		||||
# include <openssl/md5.h>
 | 
			
		||||
#endif
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/evp.h>
 | 
			
		||||
# include <openssl/rand.h>
 | 
			
		||||
# ifndef OPENSSL_NO_DES
 | 
			
		||||
#  include <openssl/des.h>
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef NO_MD5CRYPT_1
 | 
			
		||||
#  include <openssl/md5.h>
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG passwd_main
 | 
			
		||||
 | 
			
		||||
#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,
 | 
			
		||||
	0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,
 | 
			
		||||
	0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,
 | 
			
		||||
	0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,
 | 
			
		||||
	0x55,0x56,0x57,0x58,0x59,0x5A,0x61,0x62,
 | 
			
		||||
	0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,
 | 
			
		||||
	0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,
 | 
			
		||||
	0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A
 | 
			
		||||
static unsigned const char cov_2char[64] = {
 | 
			
		||||
    /* from crypto/des/fcrypt.c */
 | 
			
		||||
    0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,
 | 
			
		||||
    0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44,
 | 
			
		||||
    0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C,
 | 
			
		||||
    0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,
 | 
			
		||||
    0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62,
 | 
			
		||||
    0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A,
 | 
			
		||||
    0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72,
 | 
			
		||||
    0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
 | 
			
		||||
	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
 | 
			
		||||
@@ -58,455 +58,437 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int ret = 1;
 | 
			
		||||
	char *infile = NULL;
 | 
			
		||||
	int in_stdin = 0;
 | 
			
		||||
	int in_noverify = 0;
 | 
			
		||||
	char *salt = NULL, *passwd = NULL, **passwds = NULL;
 | 
			
		||||
	char *salt_malloc = NULL, *passwd_malloc = NULL;
 | 
			
		||||
	size_t passwd_malloc_size = 0;
 | 
			
		||||
	int pw_source_defined = 0;
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	int i, badopt, opt_done;
 | 
			
		||||
	int passed_salt = 0, quiet = 0, table = 0, reverse = 0;
 | 
			
		||||
	int usecrypt = 0, use1 = 0, useapr1 = 0;
 | 
			
		||||
	size_t pw_maxlen = 0;
 | 
			
		||||
{
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    char *infile = NULL;
 | 
			
		||||
    int in_stdin = 0;
 | 
			
		||||
    int in_noverify = 0;
 | 
			
		||||
    char *salt = NULL, *passwd = NULL, **passwds = NULL;
 | 
			
		||||
    char *salt_malloc = NULL, *passwd_malloc = NULL;
 | 
			
		||||
    size_t passwd_malloc_size = 0;
 | 
			
		||||
    int pw_source_defined = 0;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int i, badopt, opt_done;
 | 
			
		||||
    int passed_salt = 0, quiet = 0, table = 0, reverse = 0;
 | 
			
		||||
    int usecrypt = 0, use1 = 0, useapr1 = 0;
 | 
			
		||||
    size_t pw_maxlen = 0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto err;
 | 
			
		||||
	out = BIO_new(BIO_s_file());
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
		goto err;
 | 
			
		||||
	BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
	{
 | 
			
		||||
	BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
	out = BIO_push(tmpbio, out);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto err;
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if (out == NULL)
 | 
			
		||||
        goto err;
 | 
			
		||||
    BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
    {
 | 
			
		||||
        BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
        out = BIO_push(tmpbio, out);
 | 
			
		||||
    }
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	badopt = 0, opt_done = 0;
 | 
			
		||||
	i = 0;
 | 
			
		||||
	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))
 | 
			
		||||
				{
 | 
			
		||||
				passed_salt = 1;
 | 
			
		||||
				salt = argv[++i];
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(argv[i], "-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if ((argv[i+1] != NULL) && !pw_source_defined)
 | 
			
		||||
				{
 | 
			
		||||
				pw_source_defined = 1;
 | 
			
		||||
				infile = argv[++i];
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(argv[i], "-stdin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!pw_source_defined)
 | 
			
		||||
				{
 | 
			
		||||
				pw_source_defined = 1;
 | 
			
		||||
				in_stdin = 1;
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(argv[i], "-noverify") == 0)
 | 
			
		||||
			in_noverify = 1;
 | 
			
		||||
		else if (strcmp(argv[i], "-quiet") == 0)
 | 
			
		||||
			quiet = 1;
 | 
			
		||||
		else if (strcmp(argv[i], "-table") == 0)
 | 
			
		||||
			table = 1;
 | 
			
		||||
		else if (strcmp(argv[i], "-reverse") == 0)
 | 
			
		||||
			reverse = 1;
 | 
			
		||||
		else if (argv[i][0] == '-')
 | 
			
		||||
			badopt = 1;
 | 
			
		||||
		else if (!pw_source_defined)
 | 
			
		||||
			/* non-option arguments, use as passwords */
 | 
			
		||||
			{
 | 
			
		||||
			pw_source_defined = 1;
 | 
			
		||||
			passwds = &argv[i];
 | 
			
		||||
			opt_done = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			badopt = 1;
 | 
			
		||||
		}
 | 
			
		||||
    badopt = 0, opt_done = 0;
 | 
			
		||||
    i = 0;
 | 
			
		||||
    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)) {
 | 
			
		||||
                passed_salt = 1;
 | 
			
		||||
                salt = argv[++i];
 | 
			
		||||
            } else
 | 
			
		||||
                badopt = 1;
 | 
			
		||||
        } else if (strcmp(argv[i], "-in") == 0) {
 | 
			
		||||
            if ((argv[i + 1] != NULL) && !pw_source_defined) {
 | 
			
		||||
                pw_source_defined = 1;
 | 
			
		||||
                infile = argv[++i];
 | 
			
		||||
            } else
 | 
			
		||||
                badopt = 1;
 | 
			
		||||
        } else if (strcmp(argv[i], "-stdin") == 0) {
 | 
			
		||||
            if (!pw_source_defined) {
 | 
			
		||||
                pw_source_defined = 1;
 | 
			
		||||
                in_stdin = 1;
 | 
			
		||||
            } else
 | 
			
		||||
                badopt = 1;
 | 
			
		||||
        } else if (strcmp(argv[i], "-noverify") == 0)
 | 
			
		||||
            in_noverify = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-quiet") == 0)
 | 
			
		||||
            quiet = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-table") == 0)
 | 
			
		||||
            table = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-reverse") == 0)
 | 
			
		||||
            reverse = 1;
 | 
			
		||||
        else if (argv[i][0] == '-')
 | 
			
		||||
            badopt = 1;
 | 
			
		||||
        else if (!pw_source_defined)
 | 
			
		||||
            /* non-option arguments, use as passwords */
 | 
			
		||||
        {
 | 
			
		||||
            pw_source_defined = 1;
 | 
			
		||||
            passwds = &argv[i];
 | 
			
		||||
            opt_done = 1;
 | 
			
		||||
        } else
 | 
			
		||||
            badopt = 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!usecrypt && !use1 && !useapr1) /* use default */
 | 
			
		||||
		usecrypt = 1;
 | 
			
		||||
	if (usecrypt + use1 + useapr1 > 1) /* conflict */
 | 
			
		||||
		badopt = 1;
 | 
			
		||||
    if (!usecrypt && !use1 && !useapr1) /* use default */
 | 
			
		||||
        usecrypt = 1;
 | 
			
		||||
    if (usecrypt + use1 + useapr1 > 1) /* conflict */
 | 
			
		||||
        badopt = 1;
 | 
			
		||||
 | 
			
		||||
	/* reject unsupported algorithms */
 | 
			
		||||
#ifdef OPENSSL_NO_DES
 | 
			
		||||
	if (usecrypt) badopt = 1;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef NO_MD5CRYPT_1
 | 
			
		||||
	if (use1 || useapr1) badopt = 1;
 | 
			
		||||
#endif
 | 
			
		||||
    /* reject unsupported algorithms */
 | 
			
		||||
# ifdef OPENSSL_NO_DES
 | 
			
		||||
    if (usecrypt)
 | 
			
		||||
        badopt = 1;
 | 
			
		||||
# endif
 | 
			
		||||
# ifdef NO_MD5CRYPT_1
 | 
			
		||||
    if (use1 || useapr1)
 | 
			
		||||
        badopt = 1;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	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");
 | 
			
		||||
#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");
 | 
			
		||||
#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, "-quiet             no warnings\n");
 | 
			
		||||
		BIO_printf(bio_err, "-table             format output as table\n");
 | 
			
		||||
		BIO_printf(bio_err, "-reverse           switch table columns\n");
 | 
			
		||||
		
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
    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");
 | 
			
		||||
# 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");
 | 
			
		||||
# 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, "-quiet             no warnings\n");
 | 
			
		||||
        BIO_printf(bio_err, "-table             format output as table\n");
 | 
			
		||||
        BIO_printf(bio_err, "-reverse           switch table columns\n");
 | 
			
		||||
 | 
			
		||||
	if ((infile != NULL) || in_stdin)
 | 
			
		||||
		{
 | 
			
		||||
		in = BIO_new(BIO_s_file());
 | 
			
		||||
		if (in == NULL)
 | 
			
		||||
			goto err;
 | 
			
		||||
		if (infile != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			assert(in_stdin == 0);
 | 
			
		||||
			if (BIO_read_filename(in, infile) <= 0)
 | 
			
		||||
				goto err;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			assert(in_stdin);
 | 
			
		||||
			BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if (usecrypt)
 | 
			
		||||
		pw_maxlen = 8;
 | 
			
		||||
	else if (use1 || useapr1)
 | 
			
		||||
		pw_maxlen = 256; /* arbitrary limit, should be enough for most passwords */
 | 
			
		||||
        goto err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (passwds == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		/* no passwords on the command line */
 | 
			
		||||
    if ((infile != NULL) || in_stdin) {
 | 
			
		||||
        in = BIO_new(BIO_s_file());
 | 
			
		||||
        if (in == NULL)
 | 
			
		||||
            goto err;
 | 
			
		||||
        if (infile != NULL) {
 | 
			
		||||
            assert(in_stdin == 0);
 | 
			
		||||
            if (BIO_read_filename(in, infile) <= 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
        } else {
 | 
			
		||||
            assert(in_stdin);
 | 
			
		||||
            BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		passwd_malloc_size = pw_maxlen + 2;
 | 
			
		||||
		/* 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 (usecrypt)
 | 
			
		||||
        pw_maxlen = 8;
 | 
			
		||||
    else if (use1 || useapr1)
 | 
			
		||||
        pw_maxlen = 256;        /* arbitrary limit, should be enough for most
 | 
			
		||||
                                 * passwords */
 | 
			
		||||
 | 
			
		||||
	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)
 | 
			
		||||
				goto err;
 | 
			
		||||
		passwds[0] = passwd_malloc;
 | 
			
		||||
		}
 | 
			
		||||
    if (passwds == NULL) {
 | 
			
		||||
        /* no passwords on the command line */
 | 
			
		||||
 | 
			
		||||
	if (in == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		assert(passwds != NULL);
 | 
			
		||||
		assert(*passwds != NULL);
 | 
			
		||||
		
 | 
			
		||||
		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))
 | 
			
		||||
				goto err;
 | 
			
		||||
			}
 | 
			
		||||
		while (*passwds != NULL);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		/* in != NULL */
 | 
			
		||||
		{
 | 
			
		||||
		int done;
 | 
			
		||||
        passwd_malloc_size = pw_maxlen + 2;
 | 
			
		||||
        /*
 | 
			
		||||
         * longer than necessary so that we can warn about truncation
 | 
			
		||||
         */
 | 
			
		||||
        passwd = passwd_malloc = OPENSSL_malloc(passwd_malloc_size);
 | 
			
		||||
        if (passwd_malloc == NULL)
 | 
			
		||||
            goto err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		assert (passwd != NULL);
 | 
			
		||||
		do
 | 
			
		||||
			{
 | 
			
		||||
			int r = BIO_gets(in, passwd, pw_maxlen + 1);
 | 
			
		||||
			if (r > 0)
 | 
			
		||||
				{
 | 
			
		||||
				char *c = (strchr(passwd, '\n')) ;
 | 
			
		||||
				if (c != NULL)
 | 
			
		||||
					*c = 0; /* truncate at newline */
 | 
			
		||||
				else
 | 
			
		||||
					{
 | 
			
		||||
					/* ignore rest of line */
 | 
			
		||||
					char trash[BUFSIZ];
 | 
			
		||||
					do
 | 
			
		||||
						r = BIO_gets(in, trash, sizeof trash);
 | 
			
		||||
					while ((r > 0) && (!strchr(trash, '\n')));
 | 
			
		||||
					}
 | 
			
		||||
				
 | 
			
		||||
				if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out,
 | 
			
		||||
					quiet, table, reverse, pw_maxlen, usecrypt, use1, useapr1))
 | 
			
		||||
					goto err;
 | 
			
		||||
				}
 | 
			
		||||
			done = (r <= 0);
 | 
			
		||||
			}
 | 
			
		||||
		while (!done);
 | 
			
		||||
		}
 | 
			
		||||
	ret = 0;
 | 
			
		||||
    if ((in == NULL) && (passwds == NULL)) {
 | 
			
		||||
        /* build a null-terminated list */
 | 
			
		||||
        static char *passwds_static[2] = { NULL, NULL };
 | 
			
		||||
 | 
			
		||||
err:
 | 
			
		||||
	ERR_print_errors(bio_err);
 | 
			
		||||
	if (salt_malloc)
 | 
			
		||||
		OPENSSL_free(salt_malloc);
 | 
			
		||||
	if (passwd_malloc)
 | 
			
		||||
		OPENSSL_free(passwd_malloc);
 | 
			
		||||
	if (in)
 | 
			
		||||
		BIO_free(in);
 | 
			
		||||
	if (out)
 | 
			
		||||
		BIO_free_all(out);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
        passwds = passwds_static;
 | 
			
		||||
        if (in == NULL)
 | 
			
		||||
            if (EVP_read_pw_string
 | 
			
		||||
                (passwd_malloc, passwd_malloc_size, "Password: ",
 | 
			
		||||
                 !(passed_salt || in_noverify)) != 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
        passwds[0] = passwd_malloc;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (in == NULL) {
 | 
			
		||||
        assert(passwds != NULL);
 | 
			
		||||
        assert(*passwds != NULL);
 | 
			
		||||
 | 
			
		||||
#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.)
 | 
			
		||||
        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))
 | 
			
		||||
                goto err;
 | 
			
		||||
        }
 | 
			
		||||
        while (*passwds != NULL);
 | 
			
		||||
    } else
 | 
			
		||||
        /* in != NULL */
 | 
			
		||||
    {
 | 
			
		||||
        int done;
 | 
			
		||||
 | 
			
		||||
        assert(passwd != NULL);
 | 
			
		||||
        do {
 | 
			
		||||
            int r = BIO_gets(in, passwd, pw_maxlen + 1);
 | 
			
		||||
            if (r > 0) {
 | 
			
		||||
                char *c = (strchr(passwd, '\n'));
 | 
			
		||||
                if (c != NULL)
 | 
			
		||||
                    *c = 0;     /* truncate at newline */
 | 
			
		||||
                else {
 | 
			
		||||
                    /* ignore rest of line */
 | 
			
		||||
                    char trash[BUFSIZ];
 | 
			
		||||
                    do
 | 
			
		||||
                        r = BIO_gets(in, trash, sizeof trash);
 | 
			
		||||
                    while ((r > 0) && (!strchr(trash, '\n')));
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out,
 | 
			
		||||
                               quiet, table, reverse, pw_maxlen, usecrypt,
 | 
			
		||||
                               use1, useapr1))
 | 
			
		||||
                    goto err;
 | 
			
		||||
            }
 | 
			
		||||
            done = (r <= 0);
 | 
			
		||||
        }
 | 
			
		||||
        while (!done);
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
 err:
 | 
			
		||||
    ERR_print_errors(bio_err);
 | 
			
		||||
    if (salt_malloc)
 | 
			
		||||
        OPENSSL_free(salt_malloc);
 | 
			
		||||
    if (passwd_malloc)
 | 
			
		||||
        OPENSSL_free(passwd_malloc);
 | 
			
		||||
    if (in)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# ifndef NO_MD5CRYPT_1
 | 
			
		||||
/*
 | 
			
		||||
 * MD5-based password algorithm (should probably be available as a library
 | 
			
		||||
 * function; then the static buffer would not be acceptable). For magic
 | 
			
		||||
 * string "1", this should be compatible to the MD5-based BSD password
 | 
			
		||||
 * algorithm. For 'magic' string "apr1", this is compatible to the MD5-based
 | 
			
		||||
 * Apache password algorithm. (Apparently, the Apache password algorithm is
 | 
			
		||||
 * identical except that the 'magic' string was changed -- the laziest
 | 
			
		||||
 * application of the NIH principle I've ever encountered.)
 | 
			
		||||
 */
 | 
			
		||||
static char *md5crypt(const char *passwd, const char *magic, const char *salt)
 | 
			
		||||
	{
 | 
			
		||||
	static char out_buf[6 + 9 + 24 + 2]; /* "$apr1$..salt..$.......md5hash..........\0" */
 | 
			
		||||
	unsigned char buf[MD5_DIGEST_LENGTH];
 | 
			
		||||
	char *salt_out;
 | 
			
		||||
	int n;
 | 
			
		||||
	unsigned int i;
 | 
			
		||||
	EVP_MD_CTX md,md2;
 | 
			
		||||
	size_t passwd_len, salt_len;
 | 
			
		||||
{
 | 
			
		||||
    /* "$apr1$..salt..$.......md5hash..........\0" */
 | 
			
		||||
    static char out_buf[6 + 9 + 24 + 2];
 | 
			
		||||
    unsigned char buf[MD5_DIGEST_LENGTH];
 | 
			
		||||
    char *salt_out;
 | 
			
		||||
    int n;
 | 
			
		||||
    unsigned int i;
 | 
			
		||||
    EVP_MD_CTX md, md2;
 | 
			
		||||
    size_t passwd_len, salt_len;
 | 
			
		||||
 | 
			
		||||
	passwd_len = strlen(passwd);
 | 
			
		||||
	out_buf[0] = '$';
 | 
			
		||||
	out_buf[1] = 0;
 | 
			
		||||
	assert(strlen(magic) <= 4); /* "1" or "apr1" */
 | 
			
		||||
	strncat(out_buf, magic, 4);
 | 
			
		||||
	strncat(out_buf, "$", 1);
 | 
			
		||||
	strncat(out_buf, salt, 8);
 | 
			
		||||
	assert(strlen(out_buf) <= 6 + 8); /* "$apr1$..salt.." */
 | 
			
		||||
	salt_out = out_buf + 2 + strlen(magic);
 | 
			
		||||
	salt_len = strlen(salt_out);
 | 
			
		||||
	assert(salt_len <= 8);
 | 
			
		||||
	
 | 
			
		||||
	EVP_MD_CTX_init(&md);
 | 
			
		||||
	EVP_DigestInit_ex(&md,EVP_md5(), NULL);
 | 
			
		||||
	EVP_DigestUpdate(&md, passwd, passwd_len);
 | 
			
		||||
	EVP_DigestUpdate(&md, "$", 1);
 | 
			
		||||
	EVP_DigestUpdate(&md, magic, strlen(magic));
 | 
			
		||||
	EVP_DigestUpdate(&md, "$", 1);
 | 
			
		||||
	EVP_DigestUpdate(&md, salt_out, salt_len);
 | 
			
		||||
	
 | 
			
		||||
	EVP_MD_CTX_init(&md2);
 | 
			
		||||
	EVP_DigestInit_ex(&md2,EVP_md5(), NULL);
 | 
			
		||||
	EVP_DigestUpdate(&md2, passwd, passwd_len);
 | 
			
		||||
	EVP_DigestUpdate(&md2, salt_out, salt_len);
 | 
			
		||||
	EVP_DigestUpdate(&md2, passwd, passwd_len);
 | 
			
		||||
	EVP_DigestFinal_ex(&md2, buf, NULL);
 | 
			
		||||
    passwd_len = strlen(passwd);
 | 
			
		||||
    out_buf[0] = '$';
 | 
			
		||||
    out_buf[1] = 0;
 | 
			
		||||
    assert(strlen(magic) <= 4); /* "1" or "apr1" */
 | 
			
		||||
    strncat(out_buf, magic, 4);
 | 
			
		||||
    strncat(out_buf, "$", 1);
 | 
			
		||||
    strncat(out_buf, salt, 8);
 | 
			
		||||
    assert(strlen(out_buf) <= 6 + 8); /* "$apr1$..salt.." */
 | 
			
		||||
    salt_out = out_buf + 2 + strlen(magic);
 | 
			
		||||
    salt_len = strlen(salt_out);
 | 
			
		||||
    assert(salt_len <= 8);
 | 
			
		||||
 | 
			
		||||
	for (i = passwd_len; i > sizeof buf; i -= sizeof buf)
 | 
			
		||||
		EVP_DigestUpdate(&md, buf, sizeof buf);
 | 
			
		||||
	EVP_DigestUpdate(&md, buf, i);
 | 
			
		||||
	
 | 
			
		||||
	n = passwd_len;
 | 
			
		||||
	while (n)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_DigestUpdate(&md, (n & 1) ? "\0" : passwd, 1);
 | 
			
		||||
		n >>= 1;
 | 
			
		||||
		}
 | 
			
		||||
	EVP_DigestFinal_ex(&md, buf, NULL);
 | 
			
		||||
    EVP_MD_CTX_init(&md);
 | 
			
		||||
    EVP_DigestInit_ex(&md, EVP_md5(), NULL);
 | 
			
		||||
    EVP_DigestUpdate(&md, passwd, passwd_len);
 | 
			
		||||
    EVP_DigestUpdate(&md, "$", 1);
 | 
			
		||||
    EVP_DigestUpdate(&md, magic, strlen(magic));
 | 
			
		||||
    EVP_DigestUpdate(&md, "$", 1);
 | 
			
		||||
    EVP_DigestUpdate(&md, salt_out, salt_len);
 | 
			
		||||
 | 
			
		||||
	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);
 | 
			
		||||
		if (i % 3)
 | 
			
		||||
			EVP_DigestUpdate(&md2, salt_out, salt_len);
 | 
			
		||||
		if (i % 7)
 | 
			
		||||
			EVP_DigestUpdate(&md2, passwd, passwd_len);
 | 
			
		||||
		EVP_DigestUpdate(&md2, (i & 1) ? buf : (unsigned const char *) passwd,
 | 
			
		||||
		                       (i & 1) ? sizeof buf : passwd_len);
 | 
			
		||||
		EVP_DigestFinal_ex(&md2, buf, NULL);
 | 
			
		||||
		}
 | 
			
		||||
	EVP_MD_CTX_cleanup(&md2);
 | 
			
		||||
	
 | 
			
		||||
	 {
 | 
			
		||||
		/* transform buf into output string */
 | 
			
		||||
	
 | 
			
		||||
		unsigned char buf_perm[sizeof buf];
 | 
			
		||||
		int dest, source;
 | 
			
		||||
		char *output;
 | 
			
		||||
    EVP_MD_CTX_init(&md2);
 | 
			
		||||
    EVP_DigestInit_ex(&md2, EVP_md5(), NULL);
 | 
			
		||||
    EVP_DigestUpdate(&md2, passwd, passwd_len);
 | 
			
		||||
    EVP_DigestUpdate(&md2, salt_out, salt_len);
 | 
			
		||||
    EVP_DigestUpdate(&md2, passwd, passwd_len);
 | 
			
		||||
    EVP_DigestFinal_ex(&md2, buf, NULL);
 | 
			
		||||
 | 
			
		||||
		/* silly output permutation */
 | 
			
		||||
		for (dest = 0, source = 0; dest < 14; dest++, source = (source + 6) % 17)
 | 
			
		||||
			buf_perm[dest] = buf[source];
 | 
			
		||||
		buf_perm[14] = buf[5];
 | 
			
		||||
		buf_perm[15] = buf[11];
 | 
			
		||||
#ifndef PEDANTIC /* Unfortunately, this generates a "no effect" warning */
 | 
			
		||||
		assert(16 == sizeof buf_perm);
 | 
			
		||||
#endif
 | 
			
		||||
		
 | 
			
		||||
		output = salt_out + salt_len;
 | 
			
		||||
		assert(output == out_buf + strlen(out_buf));
 | 
			
		||||
		
 | 
			
		||||
		*output++ = '$';
 | 
			
		||||
    for (i = passwd_len; i > sizeof buf; i -= sizeof buf)
 | 
			
		||||
        EVP_DigestUpdate(&md, buf, sizeof buf);
 | 
			
		||||
    EVP_DigestUpdate(&md, buf, i);
 | 
			
		||||
 | 
			
		||||
		for (i = 0; i < 15; i += 3)
 | 
			
		||||
			{
 | 
			
		||||
			*output++ = cov_2char[buf_perm[i+2] & 0x3f];
 | 
			
		||||
			*output++ = cov_2char[((buf_perm[i+1] & 0xf) << 2) |
 | 
			
		||||
				                  (buf_perm[i+2] >> 6)];
 | 
			
		||||
			*output++ = cov_2char[((buf_perm[i] & 3) << 4) |
 | 
			
		||||
				                  (buf_perm[i+1] >> 4)];
 | 
			
		||||
			*output++ = cov_2char[buf_perm[i] >> 2];
 | 
			
		||||
			}
 | 
			
		||||
		assert(i == 15);
 | 
			
		||||
		*output++ = cov_2char[buf_perm[i] & 0x3f];
 | 
			
		||||
		*output++ = cov_2char[buf_perm[i] >> 6];
 | 
			
		||||
		*output = 0;
 | 
			
		||||
		assert(strlen(out_buf) < sizeof(out_buf));
 | 
			
		||||
	 }
 | 
			
		||||
	EVP_MD_CTX_cleanup(&md);
 | 
			
		||||
    n = passwd_len;
 | 
			
		||||
    while (n) {
 | 
			
		||||
        EVP_DigestUpdate(&md, (n & 1) ? "\0" : passwd, 1);
 | 
			
		||||
        n >>= 1;
 | 
			
		||||
    }
 | 
			
		||||
    EVP_DigestFinal_ex(&md, buf, NULL);
 | 
			
		||||
 | 
			
		||||
	return out_buf;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
    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);
 | 
			
		||||
        if (i % 3)
 | 
			
		||||
            EVP_DigestUpdate(&md2, salt_out, salt_len);
 | 
			
		||||
        if (i % 7)
 | 
			
		||||
            EVP_DigestUpdate(&md2, passwd, passwd_len);
 | 
			
		||||
        EVP_DigestUpdate(&md2, (i & 1) ? buf : (unsigned const char *)passwd,
 | 
			
		||||
                         (i & 1) ? sizeof buf : passwd_len);
 | 
			
		||||
        EVP_DigestFinal_ex(&md2, buf, NULL);
 | 
			
		||||
    }
 | 
			
		||||
    EVP_MD_CTX_cleanup(&md2);
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        /* transform buf into output string */
 | 
			
		||||
 | 
			
		||||
        unsigned char buf_perm[sizeof buf];
 | 
			
		||||
        int dest, source;
 | 
			
		||||
        char *output;
 | 
			
		||||
 | 
			
		||||
        /* silly output permutation */
 | 
			
		||||
        for (dest = 0, source = 0; dest < 14;
 | 
			
		||||
             dest++, source = (source + 6) % 17)
 | 
			
		||||
            buf_perm[dest] = buf[source];
 | 
			
		||||
        buf_perm[14] = buf[5];
 | 
			
		||||
        buf_perm[15] = buf[11];
 | 
			
		||||
#  ifndef PEDANTIC              /* Unfortunately, this generates a "no
 | 
			
		||||
                                 * effect" warning */
 | 
			
		||||
        assert(16 == sizeof buf_perm);
 | 
			
		||||
#  endif
 | 
			
		||||
 | 
			
		||||
        output = salt_out + salt_len;
 | 
			
		||||
        assert(output == out_buf + strlen(out_buf));
 | 
			
		||||
 | 
			
		||||
        *output++ = '$';
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < 15; i += 3) {
 | 
			
		||||
            *output++ = cov_2char[buf_perm[i + 2] & 0x3f];
 | 
			
		||||
            *output++ = cov_2char[((buf_perm[i + 1] & 0xf) << 2) |
 | 
			
		||||
                                  (buf_perm[i + 2] >> 6)];
 | 
			
		||||
            *output++ = cov_2char[((buf_perm[i] & 3) << 4) |
 | 
			
		||||
                                  (buf_perm[i + 1] >> 4)];
 | 
			
		||||
            *output++ = cov_2char[buf_perm[i] >> 2];
 | 
			
		||||
        }
 | 
			
		||||
        assert(i == 15);
 | 
			
		||||
        *output++ = cov_2char[buf_perm[i] & 0x3f];
 | 
			
		||||
        *output++ = cov_2char[buf_perm[i] >> 6];
 | 
			
		||||
        *output = 0;
 | 
			
		||||
        assert(strlen(out_buf) < sizeof(out_buf));
 | 
			
		||||
    }
 | 
			
		||||
    EVP_MD_CTX_cleanup(&md);
 | 
			
		||||
 | 
			
		||||
    return out_buf;
 | 
			
		||||
}
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
 | 
			
		||||
	char *passwd, BIO *out,	int quiet, int table, int reverse,
 | 
			
		||||
	size_t pw_maxlen, int usecrypt, int use1, int useapr1)
 | 
			
		||||
	{
 | 
			
		||||
	char *hash = NULL;
 | 
			
		||||
                     char *passwd, BIO *out, int quiet, int table,
 | 
			
		||||
                     int reverse, size_t pw_maxlen, int usecrypt, int use1,
 | 
			
		||||
                     int useapr1)
 | 
			
		||||
{
 | 
			
		||||
    char *hash = NULL;
 | 
			
		||||
 | 
			
		||||
	assert(salt_p != NULL);
 | 
			
		||||
	assert(salt_malloc_p != NULL);
 | 
			
		||||
    assert(salt_p != NULL);
 | 
			
		||||
    assert(salt_malloc_p != NULL);
 | 
			
		||||
 | 
			
		||||
	/* first make sure we have a salt */
 | 
			
		||||
	if (!passed_salt)
 | 
			
		||||
		{
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
		if (usecrypt)
 | 
			
		||||
			{
 | 
			
		||||
			if (*salt_malloc_p == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				*salt_p = *salt_malloc_p = OPENSSL_malloc(3);
 | 
			
		||||
				if (*salt_malloc_p == NULL)
 | 
			
		||||
					goto err;
 | 
			
		||||
				}
 | 
			
		||||
			if (RAND_pseudo_bytes((unsigned char *)*salt_p, 2) < 0)
 | 
			
		||||
				goto err;
 | 
			
		||||
			(*salt_p)[0] = cov_2char[(*salt_p)[0] & 0x3f]; /* 6 bits */
 | 
			
		||||
			(*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 */
 | 
			
		||||
#endif
 | 
			
		||||
			}
 | 
			
		||||
#endif /* !OPENSSL_NO_DES */
 | 
			
		||||
    /* first make sure we have a salt */
 | 
			
		||||
    if (!passed_salt) {
 | 
			
		||||
# ifndef OPENSSL_NO_DES
 | 
			
		||||
        if (usecrypt) {
 | 
			
		||||
            if (*salt_malloc_p == NULL) {
 | 
			
		||||
                *salt_p = *salt_malloc_p = OPENSSL_malloc(3);
 | 
			
		||||
                if (*salt_malloc_p == NULL)
 | 
			
		||||
                    goto err;
 | 
			
		||||
            }
 | 
			
		||||
            if (RAND_pseudo_bytes((unsigned char *)*salt_p, 2) < 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
            (*salt_p)[0] = cov_2char[(*salt_p)[0] & 0x3f]; /* 6 bits */
 | 
			
		||||
            (*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 */
 | 
			
		||||
#  endif
 | 
			
		||||
        }
 | 
			
		||||
# endif                         /* !OPENSSL_NO_DES */
 | 
			
		||||
 | 
			
		||||
#ifndef NO_MD5CRYPT_1
 | 
			
		||||
		if (use1 || useapr1)
 | 
			
		||||
			{
 | 
			
		||||
			int i;
 | 
			
		||||
			
 | 
			
		||||
			if (*salt_malloc_p == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				*salt_p = *salt_malloc_p = OPENSSL_malloc(9);
 | 
			
		||||
				if (*salt_malloc_p == NULL)
 | 
			
		||||
					goto err;
 | 
			
		||||
				}
 | 
			
		||||
			if (RAND_pseudo_bytes((unsigned char *)*salt_p, 8) < 0)
 | 
			
		||||
				goto err;
 | 
			
		||||
			
 | 
			
		||||
			for (i = 0; i < 8; i++)
 | 
			
		||||
				(*salt_p)[i] = cov_2char[(*salt_p)[i] & 0x3f]; /* 6 bits */
 | 
			
		||||
			(*salt_p)[8] = 0;
 | 
			
		||||
			}
 | 
			
		||||
#endif /* !NO_MD5CRYPT_1 */
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	assert(*salt_p != NULL);
 | 
			
		||||
	
 | 
			
		||||
	/* truncate password if necessary */
 | 
			
		||||
	if ((strlen(passwd) > pw_maxlen))
 | 
			
		||||
		{
 | 
			
		||||
		if (!quiet)
 | 
			
		||||
			/* XXX: really we should know how to print a size_t, not cast it */
 | 
			
		||||
			BIO_printf(bio_err, "Warning: truncating password to %u characters\n", (unsigned)pw_maxlen);
 | 
			
		||||
		passwd[pw_maxlen] = 0;
 | 
			
		||||
		}
 | 
			
		||||
	assert(strlen(passwd) <= pw_maxlen);
 | 
			
		||||
	
 | 
			
		||||
	/* now compute password hash */
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	if (usecrypt)
 | 
			
		||||
		hash = DES_crypt(passwd, *salt_p);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef NO_MD5CRYPT_1
 | 
			
		||||
	if (use1 || useapr1)
 | 
			
		||||
		hash = md5crypt(passwd, (use1 ? "1" : "apr1"), *salt_p);
 | 
			
		||||
#endif
 | 
			
		||||
	assert(hash != NULL);
 | 
			
		||||
# ifndef NO_MD5CRYPT_1
 | 
			
		||||
        if (use1 || useapr1) {
 | 
			
		||||
            int i;
 | 
			
		||||
 | 
			
		||||
	if (table && !reverse)
 | 
			
		||||
		BIO_printf(out, "%s\t%s\n", passwd, hash);
 | 
			
		||||
	else if (table && reverse)
 | 
			
		||||
		BIO_printf(out, "%s\t%s\n", hash, passwd);
 | 
			
		||||
	else
 | 
			
		||||
		BIO_printf(out, "%s\n", hash);
 | 
			
		||||
	return 1;
 | 
			
		||||
	
 | 
			
		||||
err:
 | 
			
		||||
	return 0;
 | 
			
		||||
	}
 | 
			
		||||
            if (*salt_malloc_p == NULL) {
 | 
			
		||||
                *salt_p = *salt_malloc_p = OPENSSL_malloc(9);
 | 
			
		||||
                if (*salt_malloc_p == NULL)
 | 
			
		||||
                    goto err;
 | 
			
		||||
            }
 | 
			
		||||
            if (RAND_pseudo_bytes((unsigned char *)*salt_p, 8) < 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
 | 
			
		||||
            for (i = 0; i < 8; i++)
 | 
			
		||||
                (*salt_p)[i] = cov_2char[(*salt_p)[i] & 0x3f]; /* 6 bits */
 | 
			
		||||
            (*salt_p)[8] = 0;
 | 
			
		||||
        }
 | 
			
		||||
# endif                         /* !NO_MD5CRYPT_1 */
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    assert(*salt_p != NULL);
 | 
			
		||||
 | 
			
		||||
    /* truncate password if necessary */
 | 
			
		||||
    if ((strlen(passwd) > pw_maxlen)) {
 | 
			
		||||
        if (!quiet)
 | 
			
		||||
            /*
 | 
			
		||||
             * XXX: really we should know how to print a size_t, not cast it
 | 
			
		||||
             */
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "Warning: truncating password to %u characters\n",
 | 
			
		||||
                       (unsigned)pw_maxlen);
 | 
			
		||||
        passwd[pw_maxlen] = 0;
 | 
			
		||||
    }
 | 
			
		||||
    assert(strlen(passwd) <= pw_maxlen);
 | 
			
		||||
 | 
			
		||||
    /* now compute password hash */
 | 
			
		||||
# ifndef OPENSSL_NO_DES
 | 
			
		||||
    if (usecrypt)
 | 
			
		||||
        hash = DES_crypt(passwd, *salt_p);
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef NO_MD5CRYPT_1
 | 
			
		||||
    if (use1 || useapr1)
 | 
			
		||||
        hash = md5crypt(passwd, (use1 ? "1" : "apr1"), *salt_p);
 | 
			
		||||
# endif
 | 
			
		||||
    assert(hash != NULL);
 | 
			
		||||
 | 
			
		||||
    if (table && !reverse)
 | 
			
		||||
        BIO_printf(out, "%s\t%s\n", passwd, hash);
 | 
			
		||||
    else if (table && reverse)
 | 
			
		||||
        BIO_printf(out, "%s\t%s\n", hash, passwd);
 | 
			
		||||
    else
 | 
			
		||||
        BIO_printf(out, "%s\n", hash);
 | 
			
		||||
    return 1;
 | 
			
		||||
 | 
			
		||||
 err:
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	fputs("Program not available.\n", stderr)
 | 
			
		||||
	OPENSSL_EXIT(1);
 | 
			
		||||
	}
 | 
			
		||||
{
 | 
			
		||||
    fputs("Program not available.\n", stderr)
 | 
			
		||||
        OPENSSL_EXIT(1);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1573
									
								
								apps/pkcs12.c
									
									
									
									
									
								
							
							
						
						
									
										1573
									
								
								apps/pkcs12.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										417
									
								
								apps/pkcs7.c
									
									
									
									
									
								
							
							
						
						
									
										417
									
								
								apps/pkcs7.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -69,255 +69,240 @@
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	pkcs7_main
 | 
			
		||||
#define PROG    pkcs7_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -out arg     - output file - default stdout
 | 
			
		||||
 * -print_certs
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
{
 | 
			
		||||
    PKCS7 *p7 = NULL;
 | 
			
		||||
    int i, badops = 0;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int informat, outformat;
 | 
			
		||||
    char *infile, *outfile, *prog;
 | 
			
		||||
    int print_certs = 0, text = 0, noout = 0, p7_print = 0;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	PKCS7 *p7=NULL;
 | 
			
		||||
	int i,badops=0;
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat;
 | 
			
		||||
	char *infile,*outfile,*prog;
 | 
			
		||||
	int print_certs=0,text=0,noout=0,p7_print=0;
 | 
			
		||||
	int ret=1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    infile = NULL;
 | 
			
		||||
    outfile = NULL;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*argv,"-print") == 0)
 | 
			
		||||
			p7_print=1;
 | 
			
		||||
		else if (strcmp(*argv,"-print_certs") == 0)
 | 
			
		||||
			print_certs=1;
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-print") == 0)
 | 
			
		||||
            p7_print = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-print_certs") == 0)
 | 
			
		||||
            print_certs = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - 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," -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," -noout        don't output encoded data\n");
 | 
			
		||||
    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, " -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, " -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;
 | 
			
		||||
		}
 | 
			
		||||
        ret = 1;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
                }
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
		if (in == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to load input file\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if	(informat == FORMAT_ASN1)
 | 
			
		||||
		p7=d2i_PKCS7_bio(in,NULL);
 | 
			
		||||
	else if (informat == FORMAT_PEM)
 | 
			
		||||
		p7=PEM_read_bio_PKCS7(in,NULL,NULL,NULL);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified for pkcs7 object\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (p7 == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load PKCS7 object\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (informat == FORMAT_ASN1)
 | 
			
		||||
        p7 = d2i_PKCS7_bio(in, NULL);
 | 
			
		||||
    else if (informat == FORMAT_PEM)
 | 
			
		||||
        p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "bad input format specified for pkcs7 object\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (p7 == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to load PKCS7 object\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (p7_print)
 | 
			
		||||
		PKCS7_print_ctx(out, p7, 0, NULL);
 | 
			
		||||
    if (p7_print)
 | 
			
		||||
        PKCS7_print_ctx(out, p7, 0, NULL);
 | 
			
		||||
 | 
			
		||||
	if (print_certs)
 | 
			
		||||
		{
 | 
			
		||||
		STACK_OF(X509) *certs=NULL;
 | 
			
		||||
		STACK_OF(X509_CRL) *crls=NULL;
 | 
			
		||||
    if (print_certs) {
 | 
			
		||||
        STACK_OF(X509) *certs = NULL;
 | 
			
		||||
        STACK_OF(X509_CRL) *crls = NULL;
 | 
			
		||||
 | 
			
		||||
		i=OBJ_obj2nid(p7->type);
 | 
			
		||||
		switch (i)
 | 
			
		||||
			{
 | 
			
		||||
		case NID_pkcs7_signed:
 | 
			
		||||
			certs=p7->d.sign->cert;
 | 
			
		||||
			crls=p7->d.sign->crl;
 | 
			
		||||
			break;
 | 
			
		||||
		case NID_pkcs7_signedAndEnveloped:
 | 
			
		||||
			certs=p7->d.signed_and_enveloped->cert;
 | 
			
		||||
			crls=p7->d.signed_and_enveloped->crl;
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
        i = OBJ_obj2nid(p7->type);
 | 
			
		||||
        switch (i) {
 | 
			
		||||
        case NID_pkcs7_signed:
 | 
			
		||||
            certs = p7->d.sign->cert;
 | 
			
		||||
            crls = p7->d.sign->crl;
 | 
			
		||||
            break;
 | 
			
		||||
        case NID_pkcs7_signedAndEnveloped:
 | 
			
		||||
            certs = p7->d.signed_and_enveloped->cert;
 | 
			
		||||
            crls = p7->d.signed_and_enveloped->crl;
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if (certs != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			X509 *x;
 | 
			
		||||
        if (certs != NULL) {
 | 
			
		||||
            X509 *x;
 | 
			
		||||
 | 
			
		||||
			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);
 | 
			
		||||
            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(!noout) PEM_write_bio_X509(out,x);
 | 
			
		||||
				BIO_puts(out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		if (crls != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			X509_CRL *crl;
 | 
			
		||||
                if (!noout)
 | 
			
		||||
                    PEM_write_bio_X509(out, x);
 | 
			
		||||
                BIO_puts(out, "\n");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (crls != NULL) {
 | 
			
		||||
            X509_CRL *crl;
 | 
			
		||||
 | 
			
		||||
			for (i=0; i<sk_X509_CRL_num(crls); i++)
 | 
			
		||||
				{
 | 
			
		||||
				crl=sk_X509_CRL_value(crls,i);
 | 
			
		||||
            for (i = 0; i < sk_X509_CRL_num(crls); i++) {
 | 
			
		||||
                crl = sk_X509_CRL_value(crls, i);
 | 
			
		||||
 | 
			
		||||
				X509_CRL_print(out, crl);
 | 
			
		||||
                X509_CRL_print(out, crl);
 | 
			
		||||
 | 
			
		||||
				if(!noout)PEM_write_bio_X509_CRL(out,crl);
 | 
			
		||||
				BIO_puts(out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
                if (!noout)
 | 
			
		||||
                    PEM_write_bio_X509_CRL(out, crl);
 | 
			
		||||
                BIO_puts(out, "\n");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		ret=0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(!noout) {
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_PKCS7_bio(out,p7);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i=PEM_write_bio_PKCS7(out,p7);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    if (!noout) {
 | 
			
		||||
        if (outformat == FORMAT_ASN1)
 | 
			
		||||
            i = i2d_PKCS7_bio(out, p7);
 | 
			
		||||
        else if (outformat == FORMAT_PEM)
 | 
			
		||||
            i = PEM_write_bio_PKCS7(out, p7);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to write pkcs7 object\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
	}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (p7 != NULL) PKCS7_free(p7);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
        if (!i) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to write pkcs7 object\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (p7 != NULL)
 | 
			
		||||
        PKCS7_free(p7);
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										647
									
								
								apps/pkcs8.c
									
									
									
									
									
								
							
							
						
						
									
										647
									
								
								apps/pkcs8.c
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
/* 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.
 | 
			
		||||
@@ -10,7 +11,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -68,372 +69,334 @@
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
	char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	int topk8 = 0;
 | 
			
		||||
	int pbe_nid = -1;
 | 
			
		||||
	const EVP_CIPHER *cipher = NULL;
 | 
			
		||||
	int iter = PKCS12_DEFAULT_ITER;
 | 
			
		||||
	int informat, outformat;
 | 
			
		||||
	int p8_broken = PKCS8_OK;
 | 
			
		||||
	int nocrypt = 0;
 | 
			
		||||
	X509_SIG *p8 = NULL;
 | 
			
		||||
	PKCS8_PRIV_KEY_INFO *p8inf = NULL;
 | 
			
		||||
	EVP_PKEY *pkey=NULL;
 | 
			
		||||
	char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL;
 | 
			
		||||
	int badarg = 0;
 | 
			
		||||
	int ret = 1;
 | 
			
		||||
{
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
    char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int topk8 = 0;
 | 
			
		||||
    int pbe_nid = -1;
 | 
			
		||||
    const EVP_CIPHER *cipher = NULL;
 | 
			
		||||
    int iter = PKCS12_DEFAULT_ITER;
 | 
			
		||||
    int informat, outformat;
 | 
			
		||||
    int p8_broken = PKCS8_OK;
 | 
			
		||||
    int nocrypt = 0;
 | 
			
		||||
    X509_SIG *p8 = NULL;
 | 
			
		||||
    PKCS8_PRIV_KEY_INFO *p8inf = NULL;
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
    char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL;
 | 
			
		||||
    int badarg = 0;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
    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;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	OpenSSL_add_all_algorithms();
 | 
			
		||||
	args = argv + 1;
 | 
			
		||||
	while (!badarg && *args && *args[0] == '-')
 | 
			
		||||
		{
 | 
			
		||||
		if (!strcmp(*args,"-v2"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				cipher=EVP_get_cipherbyname(*args);
 | 
			
		||||
				if (!cipher)
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,
 | 
			
		||||
						 "Unknown cipher %s\n", *args);
 | 
			
		||||
					badarg = 1;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badarg = 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);
 | 
			
		||||
					badarg = 1;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-inform"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				informat=str2fmt(*args);
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-outform"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outformat=str2fmt(*args);
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-topk8"))
 | 
			
		||||
			topk8 = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-noiter"))
 | 
			
		||||
			iter = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-nocrypt"))
 | 
			
		||||
			nocrypt = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-nooct"))
 | 
			
		||||
			p8_broken = PKCS8_NO_OCTET;
 | 
			
		||||
		else if (!strcmp (*args, "-nsdb"))
 | 
			
		||||
			p8_broken = PKCS8_NS_DB;
 | 
			
		||||
		else if (!strcmp (*args, "-embed"))
 | 
			
		||||
			p8_broken = PKCS8_EMBEDDED_PARAM;
 | 
			
		||||
		else if (!strcmp(*args,"-passin"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			passargin= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-passout"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			passargout= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    OpenSSL_add_all_algorithms();
 | 
			
		||||
    args = argv + 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);
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
                }
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 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);
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
                }
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-v2prf")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                pbe_nid = OBJ_txt2nid(*args);
 | 
			
		||||
                if (!EVP_PBE_find(EVP_PBE_TYPE_PRF, pbe_nid, NULL, NULL, 0)) {
 | 
			
		||||
                    BIO_printf(bio_err, "Unknown PRF algorithm %s\n", *args);
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
                }
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-inform")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                informat = str2fmt(*args);
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-outform")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                outformat = str2fmt(*args);
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-topk8"))
 | 
			
		||||
            topk8 = 1;
 | 
			
		||||
        else if (!strcmp(*args, "-noiter"))
 | 
			
		||||
            iter = 1;
 | 
			
		||||
        else if (!strcmp(*args, "-nocrypt"))
 | 
			
		||||
            nocrypt = 1;
 | 
			
		||||
        else if (!strcmp(*args, "-nooct"))
 | 
			
		||||
            p8_broken = PKCS8_NO_OCTET;
 | 
			
		||||
        else if (!strcmp(*args, "-nsdb"))
 | 
			
		||||
            p8_broken = PKCS8_NS_DB;
 | 
			
		||||
        else if (!strcmp(*args, "-embed"))
 | 
			
		||||
            p8_broken = PKCS8_EMBEDDED_PARAM;
 | 
			
		||||
        else if (!strcmp(*args, "-passin")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargin = *(++args);
 | 
			
		||||
        } else if (!strcmp(*args, "-passout")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargout = *(++args);
 | 
			
		||||
        }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*args,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			engine= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
        else if (strcmp(*args, "-engine") == 0) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++args);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		else if (!strcmp (*args, "-in"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				infile = *args;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-out"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outfile = *args;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else badarg = 1;
 | 
			
		||||
		args++;
 | 
			
		||||
		}
 | 
			
		||||
        else if (!strcmp(*args, "-in")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                infile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-out")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                outfile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else
 | 
			
		||||
            badarg = 1;
 | 
			
		||||
        args++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	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, "-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, "-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, "-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");
 | 
			
		||||
    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, "-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, "-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, "-noiter         use 1 as iteration count\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-nocrypt        use or expect unencrypted private key\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-v2 alg         use PKCS#5 v2.0 and cipher \"alg\"\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-v1 obj         use PKCS#5 v1.5 and cipher \"alg\"\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		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;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
    e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (!app_passwd(bio_err, passargin, passargout, &passin, &passout))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if ((pbe_nid == -1) && !cipher)
 | 
			
		||||
		pbe_nid = NID_pbeWithMD5AndDES_CBC;
 | 
			
		||||
    if ((pbe_nid == -1) && !cipher)
 | 
			
		||||
        pbe_nid = NID_pbeWithMD5AndDES_CBC;
 | 
			
		||||
 | 
			
		||||
	if (infile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(in = BIO_new_file(infile, "rb")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open input file %s\n", infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		in = BIO_new_fp (stdin, BIO_NOCLOSE);
 | 
			
		||||
    if (infile) {
 | 
			
		||||
        if (!(in = BIO_new_file(infile, "rb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open input file %s\n", infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else
 | 
			
		||||
        in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (outfile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(out = BIO_new_file (outfile, "wb")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		out = BIO_new_fp (stdout, BIO_NOCLOSE);
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "wb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open output file %s\n", outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	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)))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error converting key\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (nocrypt)
 | 
			
		||||
			{
 | 
			
		||||
			if (outformat == FORMAT_PEM) 
 | 
			
		||||
				PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf);
 | 
			
		||||
			else if (outformat == FORMAT_ASN1)
 | 
			
		||||
				i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf);
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (passout)
 | 
			
		||||
				p8pass = passout;
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				p8pass = pass;
 | 
			
		||||
				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)))
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Error encrypting key\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
			if (outformat == FORMAT_PEM) 
 | 
			
		||||
				PEM_write_bio_PKCS8(out, p8);
 | 
			
		||||
			else if (outformat == FORMAT_ASN1)
 | 
			
		||||
				i2d_PKCS8_bio(out, p8);
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
    }
 | 
			
		||||
    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))) {
 | 
			
		||||
            BIO_printf(bio_err, "Error converting key\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (nocrypt) {
 | 
			
		||||
            if (outformat == FORMAT_PEM)
 | 
			
		||||
                PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf);
 | 
			
		||||
            else if (outformat == FORMAT_ASN1)
 | 
			
		||||
                i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf);
 | 
			
		||||
            else {
 | 
			
		||||
                BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            if (passout)
 | 
			
		||||
                p8pass = passout;
 | 
			
		||||
            else {
 | 
			
		||||
                p8pass = pass;
 | 
			
		||||
                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))) {
 | 
			
		||||
                BIO_printf(bio_err, "Error encrypting key\n");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
            app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
            if (outformat == FORMAT_PEM)
 | 
			
		||||
                PEM_write_bio_PKCS8(out, p8);
 | 
			
		||||
            else if (outformat == FORMAT_ASN1)
 | 
			
		||||
                i2d_PKCS8_bio(out, p8);
 | 
			
		||||
            else {
 | 
			
		||||
                BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	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
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (informat == FORMAT_PEM) 
 | 
			
		||||
			p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL);
 | 
			
		||||
		else if (informat == FORMAT_ASN1)
 | 
			
		||||
			p8 = d2i_PKCS8_bio(in, NULL);
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    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 {
 | 
			
		||||
            BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        if (informat == FORMAT_PEM)
 | 
			
		||||
            p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL);
 | 
			
		||||
        else if (informat == FORMAT_ASN1)
 | 
			
		||||
            p8 = d2i_PKCS8_bio(in, NULL);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if (!p8)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf (bio_err, "Error reading key\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (passin)
 | 
			
		||||
			p8pass = passin;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			p8pass = pass;
 | 
			
		||||
			EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0);
 | 
			
		||||
			}
 | 
			
		||||
		p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass));
 | 
			
		||||
		}
 | 
			
		||||
        if (!p8) {
 | 
			
		||||
            BIO_printf(bio_err, "Error reading key\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (passin)
 | 
			
		||||
            p8pass = passin;
 | 
			
		||||
        else {
 | 
			
		||||
            p8pass = pass;
 | 
			
		||||
            EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0);
 | 
			
		||||
        }
 | 
			
		||||
        p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!p8inf)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error decrypting key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!p8inf) {
 | 
			
		||||
        BIO_printf(bio_err, "Error decrypting key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!(pkey = EVP_PKCS82PKEY(p8inf)))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error converting key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if (p8inf->broken)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Warning: broken key encoding: ");
 | 
			
		||||
		switch (p8inf->broken)
 | 
			
		||||
			{
 | 
			
		||||
			case PKCS8_NO_OCTET:
 | 
			
		||||
			BIO_printf(bio_err, "No Octet String in PrivateKey\n");
 | 
			
		||||
			break;
 | 
			
		||||
    if (!(pkey = EVP_PKCS82PKEY(p8inf))) {
 | 
			
		||||
        BIO_printf(bio_err, "Error converting key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
			case PKCS8_EMBEDDED_PARAM:
 | 
			
		||||
			BIO_printf(bio_err, "DSA parameters included in PrivateKey\n");
 | 
			
		||||
			break;
 | 
			
		||||
    if (p8inf->broken) {
 | 
			
		||||
        BIO_printf(bio_err, "Warning: broken key encoding: ");
 | 
			
		||||
        switch (p8inf->broken) {
 | 
			
		||||
        case PKCS8_NO_OCTET:
 | 
			
		||||
            BIO_printf(bio_err, "No Octet String in PrivateKey\n");
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
			case PKCS8_NS_DB:
 | 
			
		||||
			BIO_printf(bio_err, "DSA public key include in PrivateKey\n");
 | 
			
		||||
			break;
 | 
			
		||||
        case PKCS8_EMBEDDED_PARAM:
 | 
			
		||||
            BIO_printf(bio_err, "DSA parameters included in PrivateKey\n");
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
			case PKCS8_NEG_PRIVKEY:
 | 
			
		||||
			BIO_printf(bio_err, "DSA private key value is negative\n");
 | 
			
		||||
			break;
 | 
			
		||||
        case PKCS8_NS_DB:
 | 
			
		||||
            BIO_printf(bio_err, "DSA public key include in PrivateKey\n");
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
			default:
 | 
			
		||||
			BIO_printf(bio_err, "Unknown broken type\n");
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (outformat == FORMAT_PEM) 
 | 
			
		||||
		PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout);
 | 
			
		||||
	else if (outformat == FORMAT_ASN1)
 | 
			
		||||
		i2d_PrivateKey_bio(out, pkey);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	ret = 0;
 | 
			
		||||
        case PKCS8_NEG_PRIVKEY:
 | 
			
		||||
            BIO_printf(bio_err, "DSA private key value is negative\n");
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
	end:
 | 
			
		||||
	X509_SIG_free(p8);
 | 
			
		||||
	PKCS8_PRIV_KEY_INFO_free(p8inf);
 | 
			
		||||
	EVP_PKEY_free(pkey);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	if (passin)
 | 
			
		||||
		OPENSSL_free(passin);
 | 
			
		||||
	if (passout)
 | 
			
		||||
		OPENSSL_free(passout);
 | 
			
		||||
        default:
 | 
			
		||||
            BIO_printf(bio_err, "Unknown broken type\n");
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
	}
 | 
			
		||||
    if (outformat == FORMAT_PEM)
 | 
			
		||||
        PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout);
 | 
			
		||||
    else if (outformat == FORMAT_ASN1)
 | 
			
		||||
        i2d_PrivateKey_bio(out, pkey);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
 end:
 | 
			
		||||
    X509_SIG_free(p8);
 | 
			
		||||
    PKCS8_PRIV_KEY_INFO_free(p8inf);
 | 
			
		||||
    EVP_PKEY_free(pkey);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
    if (passout)
 | 
			
		||||
        OPENSSL_free(passout);
 | 
			
		||||
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										355
									
								
								apps/pkey.c
									
									
									
									
									
								
							
							
						
						
									
										355
									
								
								apps/pkey.c
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
/* apps/pkey.c */
 | 
			
		||||
/* 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.
 | 
			
		||||
@@ -10,7 +11,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -67,218 +68,184 @@
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
	char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	const EVP_CIPHER *cipher = NULL;
 | 
			
		||||
	int informat, outformat;
 | 
			
		||||
	int pubin = 0, pubout = 0, pubtext = 0, text = 0, noout = 0;
 | 
			
		||||
	EVP_PKEY *pkey=NULL;
 | 
			
		||||
	char *passin = NULL, *passout = NULL;
 | 
			
		||||
	int badarg = 0;
 | 
			
		||||
{
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
    char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    const EVP_CIPHER *cipher = NULL;
 | 
			
		||||
    int informat, outformat;
 | 
			
		||||
    int pubin = 0, pubout = 0, pubtext = 0, text = 0, noout = 0;
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
    char *passin = NULL, *passout = NULL;
 | 
			
		||||
    int badarg = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int ret = 1;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
 | 
			
		||||
	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;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	OpenSSL_add_all_algorithms();
 | 
			
		||||
	args = argv + 1;
 | 
			
		||||
	while (!badarg && *args && *args[0] == '-')
 | 
			
		||||
		{
 | 
			
		||||
		if (!strcmp(*args,"-inform"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				informat=str2fmt(*args);
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-outform"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outformat=str2fmt(*args);
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-passin"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			passargin= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-passout"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			passargout= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    OpenSSL_add_all_algorithms();
 | 
			
		||||
    args = argv + 1;
 | 
			
		||||
    while (!badarg && *args && *args[0] == '-') {
 | 
			
		||||
        if (!strcmp(*args, "-inform")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                informat = str2fmt(*args);
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-outform")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                outformat = str2fmt(*args);
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-passin")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargin = *(++args);
 | 
			
		||||
        } else if (!strcmp(*args, "-passout")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargout = *(++args);
 | 
			
		||||
        }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*args,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			engine= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
        else if (strcmp(*args, "-engine") == 0) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++args);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		else if (!strcmp (*args, "-in"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				infile = *args;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-out"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outfile = *args;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-pubin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			pubin=1;
 | 
			
		||||
			pubout=1;
 | 
			
		||||
			pubtext=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-pubout") == 0)
 | 
			
		||||
			pubout=1;
 | 
			
		||||
		else if (strcmp(*args,"-text_pub") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			pubtext=1;
 | 
			
		||||
			text=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*args,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			cipher = EVP_get_cipherbyname(*args + 1);
 | 
			
		||||
			if (!cipher)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Unknown cipher %s\n",
 | 
			
		||||
								*args + 1);
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		args++;
 | 
			
		||||
		}
 | 
			
		||||
        else if (!strcmp(*args, "-in")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                infile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-out")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                outfile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (strcmp(*args, "-pubin") == 0) {
 | 
			
		||||
            pubin = 1;
 | 
			
		||||
            pubout = 1;
 | 
			
		||||
            pubtext = 1;
 | 
			
		||||
        } else if (strcmp(*args, "-pubout") == 0)
 | 
			
		||||
            pubout = 1;
 | 
			
		||||
        else if (strcmp(*args, "-text_pub") == 0) {
 | 
			
		||||
            pubtext = 1;
 | 
			
		||||
            text = 1;
 | 
			
		||||
        } else if (strcmp(*args, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*args, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else {
 | 
			
		||||
            cipher = EVP_get_cipherbyname(*args + 1);
 | 
			
		||||
            if (!cipher) {
 | 
			
		||||
                BIO_printf(bio_err, "Unknown cipher %s\n", *args + 1);
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        args++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badarg)
 | 
			
		||||
		{
 | 
			
		||||
		bad:
 | 
			
		||||
		BIO_printf(bio_err, "Usage pkey [options]\n");
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
		BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-inform X       input format (DER or PEM)\n");
 | 
			
		||||
		BIO_printf(bio_err, "-passin arg     input file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err, "-outform X      output format (DER or PEM)\n");
 | 
			
		||||
		BIO_printf(bio_err, "-out file       output file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-passout arg    output file pass phrase source\n");
 | 
			
		||||
    if (badarg) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "Usage pkey [options]\n");
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
        BIO_printf(bio_err, "-inform X       input format (DER or PEM)\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-passin arg     input file pass phrase source\n");
 | 
			
		||||
        BIO_printf(bio_err, "-outform X      output format (DER or PEM)\n");
 | 
			
		||||
        BIO_printf(bio_err, "-out file       output file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-passout arg    output file pass phrase source\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err, "-engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
    e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (!app_passwd(bio_err, passargin, passargout, &passin, &passout))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (outfile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(out = BIO_new_file (outfile, "wb")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		out = BIO_new_fp (stdout, BIO_NOCLOSE);
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "wb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open output file %s\n", outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (pubin)
 | 
			
		||||
		pkey = load_pubkey(bio_err, infile, informat, 1,
 | 
			
		||||
			passin, e, "Public Key");
 | 
			
		||||
	else
 | 
			
		||||
		pkey = load_key(bio_err, infile, informat, 1,
 | 
			
		||||
			passin, e, "key");
 | 
			
		||||
	if (!pkey)
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (pubin)
 | 
			
		||||
        pkey = load_pubkey(bio_err, infile, informat, 1,
 | 
			
		||||
                           passin, e, "Public Key");
 | 
			
		||||
    else
 | 
			
		||||
        pkey = load_key(bio_err, infile, informat, 1, passin, e, "key");
 | 
			
		||||
    if (!pkey)
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	if (!noout)
 | 
			
		||||
		{
 | 
			
		||||
		if (outformat == FORMAT_PEM) 
 | 
			
		||||
			{
 | 
			
		||||
			if (pubout)
 | 
			
		||||
				PEM_write_bio_PUBKEY(out,pkey);
 | 
			
		||||
			else
 | 
			
		||||
				PEM_write_bio_PrivateKey(out, pkey, cipher,
 | 
			
		||||
							NULL, 0, NULL, passout);
 | 
			
		||||
			}
 | 
			
		||||
		else if (outformat == FORMAT_ASN1)
 | 
			
		||||
			{
 | 
			
		||||
			if (pubout)
 | 
			
		||||
				i2d_PUBKEY_bio(out, pkey);
 | 
			
		||||
			else
 | 
			
		||||
				i2d_PrivateKey_bio(out, pkey);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    if (!noout) {
 | 
			
		||||
        if (outformat == FORMAT_PEM) {
 | 
			
		||||
            if (pubout)
 | 
			
		||||
                PEM_write_bio_PUBKEY(out, pkey);
 | 
			
		||||
            else
 | 
			
		||||
                PEM_write_bio_PrivateKey(out, pkey, cipher,
 | 
			
		||||
                                         NULL, 0, NULL, passout);
 | 
			
		||||
        } else if (outformat == FORMAT_ASN1) {
 | 
			
		||||
            if (pubout)
 | 
			
		||||
                i2d_PUBKEY_bio(out, pkey);
 | 
			
		||||
            else
 | 
			
		||||
                i2d_PrivateKey_bio(out, pkey);
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		if (pubtext)
 | 
			
		||||
			EVP_PKEY_print_public(out, pkey, 0, NULL);
 | 
			
		||||
		else
 | 
			
		||||
			EVP_PKEY_print_private(out, pkey, 0, NULL);
 | 
			
		||||
		}
 | 
			
		||||
    if (text) {
 | 
			
		||||
        if (pubtext)
 | 
			
		||||
            EVP_PKEY_print_public(out, pkey, 0, NULL);
 | 
			
		||||
        else
 | 
			
		||||
            EVP_PKEY_print_private(out, pkey, 0, NULL);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ret = 0;
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
	end:
 | 
			
		||||
	EVP_PKEY_free(pkey);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	if (passin)
 | 
			
		||||
		OPENSSL_free(passin);
 | 
			
		||||
	if (passout)
 | 
			
		||||
		OPENSSL_free(passout);
 | 
			
		||||
 end:
 | 
			
		||||
    EVP_PKEY_free(pkey);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
    if (passout)
 | 
			
		||||
        OPENSSL_free(passout);
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
	}
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										204
									
								
								apps/pkeyparam.c
									
									
									
									
									
								
							
							
						
						
									
										204
									
								
								apps/pkeyparam.c
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
/* 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.
 | 
			
		||||
@@ -10,7 +11,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -67,135 +68,118 @@
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	int text = 0, noout = 0;
 | 
			
		||||
	EVP_PKEY *pkey=NULL;
 | 
			
		||||
	int badarg = 0;
 | 
			
		||||
{
 | 
			
		||||
    char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int text = 0, noout = 0;
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
    int badarg = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int ret = 1;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
 | 
			
		||||
	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;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	OpenSSL_add_all_algorithms();
 | 
			
		||||
	args = argv + 1;
 | 
			
		||||
	while (!badarg && *args && *args[0] == '-')
 | 
			
		||||
		{
 | 
			
		||||
		if (!strcmp (*args, "-in"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				infile = *args;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-out"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outfile = *args;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    OpenSSL_add_all_algorithms();
 | 
			
		||||
    args = argv + 1;
 | 
			
		||||
    while (!badarg && *args && *args[0] == '-') {
 | 
			
		||||
        if (!strcmp(*args, "-in")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                infile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-out")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                outfile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*args,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			engine= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
        else if (strcmp(*args, "-engine") == 0) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++args);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		else if (strcmp(*args,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*args,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		args++;
 | 
			
		||||
		}
 | 
			
		||||
        else if (strcmp(*args, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*args, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        args++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badarg)
 | 
			
		||||
		{
 | 
			
		||||
    if (badarg) {
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		bad:
 | 
			
		||||
 bad:
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err, "Usage pkeyparam [options]\n");
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
		BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-out file       output file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-text           print parameters as text\n");
 | 
			
		||||
		BIO_printf(bio_err, "-noout          don't output encoded parameters\n");
 | 
			
		||||
        BIO_printf(bio_err, "Usage pkeyparam [options]\n");
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
        BIO_printf(bio_err, "-out file       output file\n");
 | 
			
		||||
        BIO_printf(bio_err, "-text           print parameters as text\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-noout          don't output encoded parameters\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err, "-engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (infile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(in = BIO_new_file (infile, "r")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open input file %s\n", infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		in = BIO_new_fp (stdin, BIO_NOCLOSE);
 | 
			
		||||
    if (infile) {
 | 
			
		||||
        if (!(in = BIO_new_file(infile, "r"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open input file %s\n", infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else
 | 
			
		||||
        in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (outfile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(out = BIO_new_file (outfile, "w")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		out = BIO_new_fp (stdout, BIO_NOCLOSE);
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "w"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open output file %s\n", outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	pkey = PEM_read_bio_Parameters(in, NULL);
 | 
			
		||||
	if (!pkey)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error reading parameters\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    pkey = PEM_read_bio_Parameters(in, NULL);
 | 
			
		||||
    if (!pkey) {
 | 
			
		||||
        BIO_printf(bio_err, "Error reading parameters\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!noout)
 | 
			
		||||
		PEM_write_bio_Parameters(out,pkey);
 | 
			
		||||
    if (!noout)
 | 
			
		||||
        PEM_write_bio_Parameters(out, pkey);
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		EVP_PKEY_print_params(out, pkey, 0, NULL);
 | 
			
		||||
    if (text)
 | 
			
		||||
        EVP_PKEY_print_params(out, pkey, 0, NULL);
 | 
			
		||||
 | 
			
		||||
	ret = 0;
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
	end:
 | 
			
		||||
	EVP_PKEY_free(pkey);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
 end:
 | 
			
		||||
    EVP_PKEY_free(pkey);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
	}
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										817
									
								
								apps/pkeyutl.c
									
									
									
									
									
								
							
							
						
						
									
										817
									
								
								apps/pkeyutl.c
									
									
									
									
									
								
							@@ -1,5 +1,6 @@
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 2006.
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 2006.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2006 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -9,7 +10,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -55,16 +56,15 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
 | 
			
		||||
#define KEY_PRIVKEY	1
 | 
			
		||||
#define KEY_PUBKEY	2
 | 
			
		||||
#define KEY_CERT	3
 | 
			
		||||
#define KEY_PRIVKEY     1
 | 
			
		||||
#define KEY_PUBKEY      2
 | 
			
		||||
#define KEY_CERT        3
 | 
			
		||||
 | 
			
		||||
static void usage(void);
 | 
			
		||||
 | 
			
		||||
@@ -73,498 +73,451 @@ static void usage(void);
 | 
			
		||||
#define PROG pkeyutl_main
 | 
			
		||||
 | 
			
		||||
static EVP_PKEY_CTX *init_ctx(int *pkeysize,
 | 
			
		||||
				char *keyfile, int keyform, int key_type,
 | 
			
		||||
				char *passargin, int pkey_op, ENGINE *e);
 | 
			
		||||
                              char *keyfile, int keyform, int key_type,
 | 
			
		||||
                              char *passargin, int pkey_op, ENGINE *e);
 | 
			
		||||
 | 
			
		||||
static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
 | 
			
		||||
							const char *file);
 | 
			
		||||
                      const char *file);
 | 
			
		||||
 | 
			
		||||
static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
 | 
			
		||||
		unsigned char *out, size_t *poutlen,
 | 
			
		||||
		unsigned char *in, size_t inlen);
 | 
			
		||||
                    unsigned char *out, size_t *poutlen,
 | 
			
		||||
                    unsigned char *in, size_t inlen);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	char *infile = NULL, *outfile = NULL, *sigfile = NULL;
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	int pkey_op = EVP_PKEY_OP_SIGN, key_type = KEY_PRIVKEY;
 | 
			
		||||
	int keyform = FORMAT_PEM, peerform = FORMAT_PEM;
 | 
			
		||||
	char badarg = 0, rev = 0;
 | 
			
		||||
	char hexdump = 0, asn1parse = 0;
 | 
			
		||||
	EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
	char *passargin = NULL;
 | 
			
		||||
	int keysize = -1;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    char *infile = NULL, *outfile = NULL, *sigfile = NULL;
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    int pkey_op = EVP_PKEY_OP_SIGN, key_type = KEY_PRIVKEY;
 | 
			
		||||
    int keyform = FORMAT_PEM, peerform = FORMAT_PEM;
 | 
			
		||||
    char badarg = 0, rev = 0;
 | 
			
		||||
    char hexdump = 0, asn1parse = 0;
 | 
			
		||||
    EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
    char *passargin = NULL;
 | 
			
		||||
    int keysize = -1;
 | 
			
		||||
 | 
			
		||||
	unsigned char *buf_in = NULL, *buf_out = NULL, *sig = NULL;
 | 
			
		||||
	size_t buf_outlen;
 | 
			
		||||
	int buf_inlen = 0, siglen = -1;
 | 
			
		||||
    unsigned char *buf_in = NULL, *buf_out = NULL, *sig = NULL;
 | 
			
		||||
    size_t buf_outlen;
 | 
			
		||||
    int buf_inlen = 0, siglen = -1;
 | 
			
		||||
 | 
			
		||||
	int ret = 1, rv = -1;
 | 
			
		||||
    int ret = 1, rv = -1;
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	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"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) badarg = 1;
 | 
			
		||||
                        infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*argv,"-out"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) badarg = 1;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*argv,"-sigfile"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) badarg = 1;
 | 
			
		||||
			sigfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if(!strcmp(*argv, "-inkey"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				ctx = init_ctx(&keysize,
 | 
			
		||||
						*(++argv), keyform, key_type,
 | 
			
		||||
						passargin, pkey_op, e);
 | 
			
		||||
				if (!ctx)
 | 
			
		||||
					{
 | 
			
		||||
					BIO_puts(bio_err,
 | 
			
		||||
						"Error initializing context\n");
 | 
			
		||||
					ERR_print_errors(bio_err);
 | 
			
		||||
					badarg = 1;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*argv,"-peerkey"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else if (!setup_peer(bio_err, ctx, peerform, *(++argv)))
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*argv,"-passin"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) badarg = 1;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-peerform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) badarg = 1;
 | 
			
		||||
			peerform=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-keyform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) badarg = 1;
 | 
			
		||||
			keyform=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    OpenSSL_add_all_algorithms();
 | 
			
		||||
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (!strcmp(*argv, "-in")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                infile = *(++argv);
 | 
			
		||||
        } else if (!strcmp(*argv, "-out")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                outfile = *(++argv);
 | 
			
		||||
        } else if (!strcmp(*argv, "-sigfile")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                sigfile = *(++argv);
 | 
			
		||||
        } else if (!strcmp(*argv, "-inkey")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else {
 | 
			
		||||
                ctx = init_ctx(&keysize,
 | 
			
		||||
                               *(++argv), keyform, key_type,
 | 
			
		||||
                               passargin, pkey_op, e);
 | 
			
		||||
                if (!ctx) {
 | 
			
		||||
                    BIO_puts(bio_err, "Error initializing context\n");
 | 
			
		||||
                    ERR_print_errors(bio_err);
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } else if (!strcmp(*argv, "-peerkey")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else if (!setup_peer(bio_err, ctx, peerform, *(++argv)))
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*argv, "-passin")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                passargin = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-peerform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                peerform = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-keyform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                keyform = str2fmt(*(++argv));
 | 
			
		||||
        }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if(!strcmp(*argv, "-engine"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
				e = setup_engine(bio_err, *(++argv), 0);
 | 
			
		||||
			}
 | 
			
		||||
        else if (!strcmp(*argv, "-engine")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                e = setup_engine(bio_err, *(++argv), 0);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		else if(!strcmp(*argv, "-pubin"))
 | 
			
		||||
			key_type = KEY_PUBKEY;
 | 
			
		||||
		else if(!strcmp(*argv, "-certin"))
 | 
			
		||||
			key_type = KEY_CERT;
 | 
			
		||||
		else if(!strcmp(*argv, "-asn1parse"))
 | 
			
		||||
			asn1parse = 1;
 | 
			
		||||
		else if(!strcmp(*argv, "-hexdump"))
 | 
			
		||||
			hexdump = 1;
 | 
			
		||||
		else if(!strcmp(*argv, "-sign"))
 | 
			
		||||
			pkey_op = EVP_PKEY_OP_SIGN;
 | 
			
		||||
		else if(!strcmp(*argv, "-verify"))
 | 
			
		||||
			pkey_op = EVP_PKEY_OP_VERIFY;
 | 
			
		||||
		else if(!strcmp(*argv, "-verifyrecover"))
 | 
			
		||||
			pkey_op = EVP_PKEY_OP_VERIFYRECOVER;
 | 
			
		||||
		else if(!strcmp(*argv, "-rev"))
 | 
			
		||||
			rev = 1;
 | 
			
		||||
		else if(!strcmp(*argv, "-encrypt"))
 | 
			
		||||
			pkey_op = EVP_PKEY_OP_ENCRYPT;
 | 
			
		||||
		else if(!strcmp(*argv, "-decrypt"))
 | 
			
		||||
			pkey_op = EVP_PKEY_OP_DECRYPT;
 | 
			
		||||
		else if(!strcmp(*argv, "-derive"))
 | 
			
		||||
			pkey_op = EVP_PKEY_OP_DERIVE;
 | 
			
		||||
		else if (strcmp(*argv,"-pkeyopt") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else if (!ctx)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_puts(bio_err,
 | 
			
		||||
					"-pkeyopt command before -inkey\n");
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
				}
 | 
			
		||||
			else if (pkey_ctrl_string(ctx, *(++argv)) <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_puts(bio_err, "parameter setting error\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else badarg = 1;
 | 
			
		||||
		if(badarg)
 | 
			
		||||
			{
 | 
			
		||||
			usage();
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
        else if (!strcmp(*argv, "-pubin"))
 | 
			
		||||
            key_type = KEY_PUBKEY;
 | 
			
		||||
        else if (!strcmp(*argv, "-certin"))
 | 
			
		||||
            key_type = KEY_CERT;
 | 
			
		||||
        else if (!strcmp(*argv, "-asn1parse"))
 | 
			
		||||
            asn1parse = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-hexdump"))
 | 
			
		||||
            hexdump = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-sign"))
 | 
			
		||||
            pkey_op = EVP_PKEY_OP_SIGN;
 | 
			
		||||
        else if (!strcmp(*argv, "-verify"))
 | 
			
		||||
            pkey_op = EVP_PKEY_OP_VERIFY;
 | 
			
		||||
        else if (!strcmp(*argv, "-verifyrecover"))
 | 
			
		||||
            pkey_op = EVP_PKEY_OP_VERIFYRECOVER;
 | 
			
		||||
        else if (!strcmp(*argv, "-rev"))
 | 
			
		||||
            rev = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-encrypt"))
 | 
			
		||||
            pkey_op = EVP_PKEY_OP_ENCRYPT;
 | 
			
		||||
        else if (!strcmp(*argv, "-decrypt"))
 | 
			
		||||
            pkey_op = EVP_PKEY_OP_DECRYPT;
 | 
			
		||||
        else if (!strcmp(*argv, "-derive"))
 | 
			
		||||
            pkey_op = EVP_PKEY_OP_DERIVE;
 | 
			
		||||
        else if (strcmp(*argv, "-pkeyopt") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else if (!ctx) {
 | 
			
		||||
                BIO_puts(bio_err, "-pkeyopt command before -inkey\n");
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            } else if (pkey_ctrl_string(ctx, *(++argv)) <= 0) {
 | 
			
		||||
                BIO_puts(bio_err, "parameter setting error\n");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        } else
 | 
			
		||||
            badarg = 1;
 | 
			
		||||
        if (badarg) {
 | 
			
		||||
            usage();
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
		{
 | 
			
		||||
		usage();
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!ctx) {
 | 
			
		||||
        usage();
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (sigfile && (pkey_op != EVP_PKEY_OP_VERIFY))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(bio_err, "Signature file specified for non verify\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (sigfile && (pkey_op != EVP_PKEY_OP_VERIFY)) {
 | 
			
		||||
        BIO_puts(bio_err, "Signature file specified for non verify\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!sigfile && (pkey_op == EVP_PKEY_OP_VERIFY))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(bio_err, "No signature file specified for verify\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!sigfile && (pkey_op == EVP_PKEY_OP_VERIFY)) {
 | 
			
		||||
        BIO_puts(bio_err, "No signature file specified for verify\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
/* FIXME: seed PRNG only if needed */
 | 
			
		||||
	app_RAND_load_file(NULL, bio_err, 0);
 | 
			
		||||
    app_RAND_load_file(NULL, bio_err, 0);
 | 
			
		||||
 | 
			
		||||
	if (pkey_op != EVP_PKEY_OP_DERIVE)
 | 
			
		||||
		{
 | 
			
		||||
		if(infile)
 | 
			
		||||
			{
 | 
			
		||||
			if(!(in = BIO_new_file(infile, "rb")))
 | 
			
		||||
				{
 | 
			
		||||
				BIO_puts(bio_err,
 | 
			
		||||
					"Error Opening Input File\n");
 | 
			
		||||
				ERR_print_errors(bio_err);	
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
		}
 | 
			
		||||
    if (pkey_op != EVP_PKEY_OP_DERIVE) {
 | 
			
		||||
        if (infile) {
 | 
			
		||||
            if (!(in = BIO_new_file(infile, "rb"))) {
 | 
			
		||||
                BIO_puts(bio_err, "Error Opening Input File\n");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        } else
 | 
			
		||||
            in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(outfile)
 | 
			
		||||
		{
 | 
			
		||||
		if(!(out = BIO_new_file(outfile, "wb")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error Creating Output File\n");
 | 
			
		||||
			ERR_print_errors(bio_err);	
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "wb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Error Creating Output File\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		    out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (sigfile)
 | 
			
		||||
		{
 | 
			
		||||
		BIO *sigbio = BIO_new_file(sigfile, "rb");
 | 
			
		||||
		if (!sigbio)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Can't open signature file %s\n",
 | 
			
		||||
								sigfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		siglen = bio_to_mem(&sig, keysize * 10, sigbio);
 | 
			
		||||
		BIO_free(sigbio);
 | 
			
		||||
		if (siglen <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error reading signature data\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if (in)
 | 
			
		||||
		{
 | 
			
		||||
		/* Read the input data */
 | 
			
		||||
		buf_inlen = bio_to_mem(&buf_in, keysize * 10, in);
 | 
			
		||||
		if(buf_inlen <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error reading input Data\n");
 | 
			
		||||
			exit(1);
 | 
			
		||||
			}
 | 
			
		||||
		if(rev)
 | 
			
		||||
			{
 | 
			
		||||
			size_t i;
 | 
			
		||||
			unsigned char ctmp;
 | 
			
		||||
			size_t l = (size_t)buf_inlen;
 | 
			
		||||
			for(i = 0; i < l/2; i++)
 | 
			
		||||
				{
 | 
			
		||||
				ctmp = buf_in[i];
 | 
			
		||||
				buf_in[i] = buf_in[l - 1 - i];
 | 
			
		||||
				buf_in[l - 1 - i] = ctmp;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (sigfile) {
 | 
			
		||||
        BIO *sigbio = BIO_new_file(sigfile, "rb");
 | 
			
		||||
        if (!sigbio) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open signature file %s\n", sigfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        siglen = bio_to_mem(&sig, keysize * 10, sigbio);
 | 
			
		||||
        BIO_free(sigbio);
 | 
			
		||||
        if (siglen <= 0) {
 | 
			
		||||
            BIO_printf(bio_err, "Error reading signature data\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(pkey_op == EVP_PKEY_OP_VERIFY)
 | 
			
		||||
		{
 | 
			
		||||
		rv  = EVP_PKEY_verify(ctx, sig, (size_t)siglen,
 | 
			
		||||
				      buf_in, (size_t)buf_inlen);
 | 
			
		||||
		if (rv == 0)
 | 
			
		||||
			BIO_puts(out, "Signature Verification Failure\n");
 | 
			
		||||
		else if (rv == 1)
 | 
			
		||||
			BIO_puts(out, "Signature Verified Successfully\n");
 | 
			
		||||
		if (rv >= 0)
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{	
 | 
			
		||||
		rv = do_keyop(ctx, pkey_op, NULL, (size_t *)&buf_outlen,
 | 
			
		||||
			      buf_in, (size_t)buf_inlen);
 | 
			
		||||
		if (rv > 0)
 | 
			
		||||
			{
 | 
			
		||||
			buf_out = OPENSSL_malloc(buf_outlen);
 | 
			
		||||
			if (!buf_out)
 | 
			
		||||
				rv = -1;
 | 
			
		||||
			else
 | 
			
		||||
				rv = do_keyop(ctx, pkey_op,
 | 
			
		||||
						buf_out, (size_t *)&buf_outlen,
 | 
			
		||||
						buf_in, (size_t)buf_inlen);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (in) {
 | 
			
		||||
        /* Read the input data */
 | 
			
		||||
        buf_inlen = bio_to_mem(&buf_in, keysize * 10, in);
 | 
			
		||||
        if (buf_inlen <= 0) {
 | 
			
		||||
            BIO_printf(bio_err, "Error reading input Data\n");
 | 
			
		||||
            exit(1);
 | 
			
		||||
        }
 | 
			
		||||
        if (rev) {
 | 
			
		||||
            size_t i;
 | 
			
		||||
            unsigned char ctmp;
 | 
			
		||||
            size_t l = (size_t)buf_inlen;
 | 
			
		||||
            for (i = 0; i < l / 2; i++) {
 | 
			
		||||
                ctmp = buf_in[i];
 | 
			
		||||
                buf_in[i] = buf_in[l - 1 - i];
 | 
			
		||||
                buf_in[l - 1 - i] = ctmp;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(rv <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Public Key operation error\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	ret = 0;
 | 
			
		||||
	if(asn1parse)
 | 
			
		||||
		{
 | 
			
		||||
		if(!ASN1_parse_dump(out, buf_out, buf_outlen, 1, -1))
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
	else if(hexdump)
 | 
			
		||||
		BIO_dump(out, (char *)buf_out, buf_outlen);
 | 
			
		||||
	else
 | 
			
		||||
		BIO_write(out, buf_out, buf_outlen);
 | 
			
		||||
    if (pkey_op == EVP_PKEY_OP_VERIFY) {
 | 
			
		||||
        rv = EVP_PKEY_verify(ctx, sig, (size_t)siglen,
 | 
			
		||||
                             buf_in, (size_t)buf_inlen);
 | 
			
		||||
        if (rv == 0)
 | 
			
		||||
            BIO_puts(out, "Signature Verification Failure\n");
 | 
			
		||||
        else if (rv == 1)
 | 
			
		||||
            BIO_puts(out, "Signature Verified Successfully\n");
 | 
			
		||||
        if (rv >= 0)
 | 
			
		||||
            goto end;
 | 
			
		||||
    } else {
 | 
			
		||||
        rv = do_keyop(ctx, pkey_op, NULL, (size_t *)&buf_outlen,
 | 
			
		||||
                      buf_in, (size_t)buf_inlen);
 | 
			
		||||
        if (rv > 0) {
 | 
			
		||||
            buf_out = OPENSSL_malloc(buf_outlen);
 | 
			
		||||
            if (!buf_out)
 | 
			
		||||
                rv = -1;
 | 
			
		||||
            else
 | 
			
		||||
                rv = do_keyop(ctx, pkey_op,
 | 
			
		||||
                              buf_out, (size_t *)&buf_outlen,
 | 
			
		||||
                              buf_in, (size_t)buf_inlen);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	end:
 | 
			
		||||
	if (ctx)
 | 
			
		||||
		EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	if (buf_in)
 | 
			
		||||
		OPENSSL_free(buf_in);
 | 
			
		||||
	if (buf_out)
 | 
			
		||||
		OPENSSL_free(buf_out);
 | 
			
		||||
	if (sig)
 | 
			
		||||
		OPENSSL_free(sig);
 | 
			
		||||
	return ret;
 | 
			
		||||
    if (rv <= 0) {
 | 
			
		||||
        BIO_printf(bio_err, "Public Key operation error\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
    if (asn1parse) {
 | 
			
		||||
        if (!ASN1_parse_dump(out, buf_out, buf_outlen, 1, -1))
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
    } else if (hexdump)
 | 
			
		||||
        BIO_dump(out, (char *)buf_out, buf_outlen);
 | 
			
		||||
    else
 | 
			
		||||
        BIO_write(out, buf_out, buf_outlen);
 | 
			
		||||
 | 
			
		||||
 end:
 | 
			
		||||
    if (ctx)
 | 
			
		||||
        EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    if (buf_in)
 | 
			
		||||
        OPENSSL_free(buf_in);
 | 
			
		||||
    if (buf_out)
 | 
			
		||||
        OPENSSL_free(buf_out);
 | 
			
		||||
    if (sig)
 | 
			
		||||
        OPENSSL_free(sig);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void usage()
 | 
			
		||||
{
 | 
			
		||||
	BIO_printf(bio_err, "Usage: pkeyutl [options]\n");
 | 
			
		||||
	BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
	BIO_printf(bio_err, "-out file       output file\n");
 | 
			
		||||
	BIO_printf(bio_err, "-sigfile file signature file (verify operation only)\n");
 | 
			
		||||
	BIO_printf(bio_err, "-inkey file     input key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-keyform arg    private key format - default PEM\n");
 | 
			
		||||
	BIO_printf(bio_err, "-pubin          input is a public key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-certin         input is a certificate carrying a public key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-pkeyopt X:Y    public key options\n");
 | 
			
		||||
	BIO_printf(bio_err, "-sign           sign with private key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-verify         verify with public key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-verifyrecover  verify with public key, recover original data\n");
 | 
			
		||||
	BIO_printf(bio_err, "-encrypt        encrypt with public key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-decrypt        decrypt with private key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-derive         derive shared secret\n");
 | 
			
		||||
	BIO_printf(bio_err, "-hexdump        hex dump output\n");
 | 
			
		||||
    BIO_printf(bio_err, "Usage: pkeyutl [options]\n");
 | 
			
		||||
    BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
    BIO_printf(bio_err, "-out file       output file\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               "-sigfile file signature file (verify operation only)\n");
 | 
			
		||||
    BIO_printf(bio_err, "-inkey file     input key\n");
 | 
			
		||||
    BIO_printf(bio_err, "-keyform arg    private key format - default PEM\n");
 | 
			
		||||
    BIO_printf(bio_err, "-pubin          input is a public key\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               "-certin         input is a certificate carrying a public key\n");
 | 
			
		||||
    BIO_printf(bio_err, "-pkeyopt X:Y    public key options\n");
 | 
			
		||||
    BIO_printf(bio_err, "-sign           sign with private key\n");
 | 
			
		||||
    BIO_printf(bio_err, "-verify         verify with public key\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               "-verifyrecover  verify with public key, recover original data\n");
 | 
			
		||||
    BIO_printf(bio_err, "-encrypt        encrypt with public key\n");
 | 
			
		||||
    BIO_printf(bio_err, "-decrypt        decrypt with private key\n");
 | 
			
		||||
    BIO_printf(bio_err, "-derive         derive shared secret\n");
 | 
			
		||||
    BIO_printf(bio_err, "-hexdump        hex dump output\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	BIO_printf(bio_err, "-engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
    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");
 | 
			
		||||
    BIO_printf(bio_err, "-passin arg     pass phrase source\n");
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static EVP_PKEY_CTX *init_ctx(int *pkeysize,
 | 
			
		||||
				char *keyfile, int keyform, int key_type,
 | 
			
		||||
				char *passargin, int pkey_op, ENGINE *e)
 | 
			
		||||
	{
 | 
			
		||||
	EVP_PKEY *pkey = NULL;
 | 
			
		||||
	EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
	char *passin = NULL;
 | 
			
		||||
	int rv = -1;
 | 
			
		||||
	X509 *x;
 | 
			
		||||
	if(((pkey_op == EVP_PKEY_OP_SIGN) || (pkey_op == EVP_PKEY_OP_DECRYPT) 
 | 
			
		||||
		|| (pkey_op == EVP_PKEY_OP_DERIVE))
 | 
			
		||||
		&& (key_type != KEY_PRIVKEY))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "A private key is needed for this operation\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, NULL, &passin, NULL))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	switch(key_type)
 | 
			
		||||
		{
 | 
			
		||||
		case KEY_PRIVKEY:
 | 
			
		||||
		pkey = load_key(bio_err, keyfile, keyform, 0,
 | 
			
		||||
			passin, e, "Private Key");
 | 
			
		||||
		break;
 | 
			
		||||
                              char *keyfile, int keyform, int key_type,
 | 
			
		||||
                              char *passargin, int pkey_op, ENGINE *e)
 | 
			
		||||
{
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
    EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
    char *passin = NULL;
 | 
			
		||||
    int rv = -1;
 | 
			
		||||
    X509 *x;
 | 
			
		||||
    if (((pkey_op == EVP_PKEY_OP_SIGN) || (pkey_op == EVP_PKEY_OP_DECRYPT)
 | 
			
		||||
         || (pkey_op == EVP_PKEY_OP_DERIVE))
 | 
			
		||||
        && (key_type != KEY_PRIVKEY)) {
 | 
			
		||||
        BIO_printf(bio_err, "A private key is needed for this operation\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    switch (key_type) {
 | 
			
		||||
    case KEY_PRIVKEY:
 | 
			
		||||
        pkey = load_key(bio_err, keyfile, keyform, 0,
 | 
			
		||||
                        passin, e, "Private Key");
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case KEY_PUBKEY:
 | 
			
		||||
		pkey = load_pubkey(bio_err, keyfile, keyform, 0,
 | 
			
		||||
			NULL, e, "Public Key");
 | 
			
		||||
		break;
 | 
			
		||||
    case KEY_PUBKEY:
 | 
			
		||||
        pkey = load_pubkey(bio_err, keyfile, keyform, 0,
 | 
			
		||||
                           NULL, e, "Public Key");
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case KEY_CERT:
 | 
			
		||||
		x = load_cert(bio_err, keyfile, keyform,
 | 
			
		||||
			NULL, e, "Certificate");
 | 
			
		||||
		if(x)
 | 
			
		||||
			{
 | 
			
		||||
			pkey = X509_get_pubkey(x);
 | 
			
		||||
			X509_free(x);
 | 
			
		||||
			}
 | 
			
		||||
		break;
 | 
			
		||||
    case KEY_CERT:
 | 
			
		||||
        x = load_cert(bio_err, keyfile, keyform, NULL, e, "Certificate");
 | 
			
		||||
        if (x) {
 | 
			
		||||
            pkey = X509_get_pubkey(x);
 | 
			
		||||
            X509_free(x);
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	*pkeysize = EVP_PKEY_size(pkey);
 | 
			
		||||
    *pkeysize = EVP_PKEY_size(pkey);
 | 
			
		||||
 | 
			
		||||
	if (!pkey)
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!pkey)
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	ctx = EVP_PKEY_CTX_new(pkey, e);
 | 
			
		||||
    ctx = EVP_PKEY_CTX_new(pkey, e);
 | 
			
		||||
 | 
			
		||||
	EVP_PKEY_free(pkey);
 | 
			
		||||
    EVP_PKEY_free(pkey);
 | 
			
		||||
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!ctx)
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	switch(pkey_op)
 | 
			
		||||
		{
 | 
			
		||||
		case EVP_PKEY_OP_SIGN:
 | 
			
		||||
		rv = EVP_PKEY_sign_init(ctx);
 | 
			
		||||
		break;
 | 
			
		||||
    switch (pkey_op) {
 | 
			
		||||
    case EVP_PKEY_OP_SIGN:
 | 
			
		||||
        rv = EVP_PKEY_sign_init(ctx);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_VERIFY:
 | 
			
		||||
		rv = EVP_PKEY_verify_init(ctx);
 | 
			
		||||
		break;
 | 
			
		||||
    case EVP_PKEY_OP_VERIFY:
 | 
			
		||||
        rv = EVP_PKEY_verify_init(ctx);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_VERIFYRECOVER:
 | 
			
		||||
		rv = EVP_PKEY_verify_recover_init(ctx);
 | 
			
		||||
		break;
 | 
			
		||||
    case EVP_PKEY_OP_VERIFYRECOVER:
 | 
			
		||||
        rv = EVP_PKEY_verify_recover_init(ctx);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_ENCRYPT:
 | 
			
		||||
		rv = EVP_PKEY_encrypt_init(ctx);
 | 
			
		||||
		break;
 | 
			
		||||
    case EVP_PKEY_OP_ENCRYPT:
 | 
			
		||||
        rv = EVP_PKEY_encrypt_init(ctx);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_DECRYPT:
 | 
			
		||||
		rv = EVP_PKEY_decrypt_init(ctx);
 | 
			
		||||
		break;
 | 
			
		||||
    case EVP_PKEY_OP_DECRYPT:
 | 
			
		||||
        rv = EVP_PKEY_decrypt_init(ctx);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_DERIVE:
 | 
			
		||||
		rv = EVP_PKEY_derive_init(ctx);
 | 
			
		||||
		break;
 | 
			
		||||
		}
 | 
			
		||||
    case EVP_PKEY_OP_DERIVE:
 | 
			
		||||
        rv = EVP_PKEY_derive_init(ctx);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (rv <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
		ctx = NULL;
 | 
			
		||||
		}
 | 
			
		||||
    if (rv <= 0) {
 | 
			
		||||
        EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
        ctx = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	end:
 | 
			
		||||
 end:
 | 
			
		||||
 | 
			
		||||
	if (passin)
 | 
			
		||||
		OPENSSL_free(passin);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
 | 
			
		||||
	return ctx;
 | 
			
		||||
    return ctx;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
 | 
			
		||||
							const char *file)
 | 
			
		||||
	{
 | 
			
		||||
	EVP_PKEY *peer = NULL;
 | 
			
		||||
	int ret;
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(err, "-peerkey command before -inkey\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
	peer = load_pubkey(bio_err, file, peerform, 0, NULL, NULL, "Peer Key");
 | 
			
		||||
                      const char *file)
 | 
			
		||||
{
 | 
			
		||||
    EVP_PKEY *peer = NULL;
 | 
			
		||||
    int ret;
 | 
			
		||||
    if (!ctx) {
 | 
			
		||||
        BIO_puts(err, "-peerkey command before -inkey\n");
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!peer)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error reading peer key %s\n", file);
 | 
			
		||||
		ERR_print_errors(err);
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
    peer = load_pubkey(bio_err, file, peerform, 0, NULL, NULL, "Peer Key");
 | 
			
		||||
 | 
			
		||||
	ret = EVP_PKEY_derive_set_peer(ctx, peer);
 | 
			
		||||
    if (!peer) {
 | 
			
		||||
        BIO_printf(bio_err, "Error reading peer key %s\n", file);
 | 
			
		||||
        ERR_print_errors(err);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	EVP_PKEY_free(peer);
 | 
			
		||||
	if (ret <= 0)
 | 
			
		||||
		ERR_print_errors(err);
 | 
			
		||||
	return ret;
 | 
			
		||||
	}
 | 
			
		||||
    ret = EVP_PKEY_derive_set_peer(ctx, peer);
 | 
			
		||||
 | 
			
		||||
    EVP_PKEY_free(peer);
 | 
			
		||||
    if (ret <= 0)
 | 
			
		||||
        ERR_print_errors(err);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
 | 
			
		||||
		unsigned char *out, size_t *poutlen,
 | 
			
		||||
		unsigned char *in, size_t inlen)
 | 
			
		||||
	{
 | 
			
		||||
	int rv = 0;
 | 
			
		||||
	switch(pkey_op)
 | 
			
		||||
		{
 | 
			
		||||
		case EVP_PKEY_OP_VERIFYRECOVER:
 | 
			
		||||
		rv  = EVP_PKEY_verify_recover(ctx, out, poutlen, in, inlen);
 | 
			
		||||
		break;
 | 
			
		||||
                    unsigned char *out, size_t *poutlen,
 | 
			
		||||
                    unsigned char *in, size_t inlen)
 | 
			
		||||
{
 | 
			
		||||
    int rv = 0;
 | 
			
		||||
    switch (pkey_op) {
 | 
			
		||||
    case EVP_PKEY_OP_VERIFYRECOVER:
 | 
			
		||||
        rv = EVP_PKEY_verify_recover(ctx, out, poutlen, in, inlen);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_SIGN:
 | 
			
		||||
		rv  = EVP_PKEY_sign(ctx, out, poutlen, in, inlen);
 | 
			
		||||
		break;
 | 
			
		||||
    case EVP_PKEY_OP_SIGN:
 | 
			
		||||
        rv = EVP_PKEY_sign(ctx, out, poutlen, in, inlen);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_ENCRYPT:
 | 
			
		||||
		rv  = EVP_PKEY_encrypt(ctx, out, poutlen, in, inlen);
 | 
			
		||||
		break;
 | 
			
		||||
    case EVP_PKEY_OP_ENCRYPT:
 | 
			
		||||
        rv = EVP_PKEY_encrypt(ctx, out, poutlen, in, inlen);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_DECRYPT:
 | 
			
		||||
		rv  = EVP_PKEY_decrypt(ctx, out, poutlen, in, inlen);
 | 
			
		||||
		break; 
 | 
			
		||||
    case EVP_PKEY_OP_DECRYPT:
 | 
			
		||||
        rv = EVP_PKEY_decrypt(ctx, out, poutlen, in, inlen);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_DERIVE:
 | 
			
		||||
		rv  = EVP_PKEY_derive(ctx, out, poutlen);
 | 
			
		||||
		break;
 | 
			
		||||
    case EVP_PKEY_OP_DERIVE:
 | 
			
		||||
        rv = EVP_PKEY_derive(ctx, out, poutlen);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	return rv;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    return rv;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										149
									
								
								apps/prime.c
									
									
									
									
									
								
							
							
						
						
									
										149
									
								
								apps/prime.c
									
									
									
									
									
								
							@@ -6,7 +6,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -52,109 +52,100 @@
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG prime_main
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
    {
 | 
			
		||||
    int hex=0;
 | 
			
		||||
    int checks=20;
 | 
			
		||||
    int generate=0;
 | 
			
		||||
    int bits=0;
 | 
			
		||||
    int safe=0;
 | 
			
		||||
    BIGNUM *bn=NULL;
 | 
			
		||||
{
 | 
			
		||||
    int hex = 0;
 | 
			
		||||
    int checks = 20;
 | 
			
		||||
    int generate = 0;
 | 
			
		||||
    int bits = 0;
 | 
			
		||||
    int safe = 0;
 | 
			
		||||
    BIGNUM *bn = NULL;
 | 
			
		||||
    BIO *bio_out;
 | 
			
		||||
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
	if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
	    BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
    --argc;
 | 
			
		||||
    ++argv;
 | 
			
		||||
    while (argc >= 1 && **argv == '-')
 | 
			
		||||
	{
 | 
			
		||||
	if(!strcmp(*argv,"-hex"))
 | 
			
		||||
	    hex=1;
 | 
			
		||||
	else if(!strcmp(*argv,"-generate"))
 | 
			
		||||
	    generate=1;
 | 
			
		||||
	else if(!strcmp(*argv,"-bits"))
 | 
			
		||||
	    if(--argc < 1)
 | 
			
		||||
		goto bad;
 | 
			
		||||
	    else
 | 
			
		||||
		bits=atoi(*++argv);
 | 
			
		||||
	else if(!strcmp(*argv,"-safe"))
 | 
			
		||||
	    safe=1;
 | 
			
		||||
	else if(!strcmp(*argv,"-checks"))
 | 
			
		||||
	    if(--argc < 1)
 | 
			
		||||
		goto bad;
 | 
			
		||||
	    else
 | 
			
		||||
		checks=atoi(*++argv);
 | 
			
		||||
	else
 | 
			
		||||
	    {
 | 
			
		||||
	    BIO_printf(bio_err,"Unknown option '%s'\n",*argv);
 | 
			
		||||
	    goto bad;
 | 
			
		||||
	    }
 | 
			
		||||
	--argc;
 | 
			
		||||
	++argv;
 | 
			
		||||
	}
 | 
			
		||||
    while (argc >= 1 && **argv == '-') {
 | 
			
		||||
        if (!strcmp(*argv, "-hex"))
 | 
			
		||||
            hex = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-generate"))
 | 
			
		||||
            generate = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-bits"))
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            else
 | 
			
		||||
                bits = atoi(*++argv);
 | 
			
		||||
        else if (!strcmp(*argv, "-safe"))
 | 
			
		||||
            safe = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-checks"))
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            else
 | 
			
		||||
                checks = atoi(*++argv);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "Unknown option '%s'\n", *argv);
 | 
			
		||||
            goto bad;
 | 
			
		||||
        }
 | 
			
		||||
        --argc;
 | 
			
		||||
        ++argv;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (argv[0] == NULL && !generate)
 | 
			
		||||
	{
 | 
			
		||||
	BIO_printf(bio_err,"No prime specified\n");
 | 
			
		||||
	goto bad;
 | 
			
		||||
	}
 | 
			
		||||
    if (argv[0] == NULL && !generate) {
 | 
			
		||||
        BIO_printf(bio_err, "No prime specified\n");
 | 
			
		||||
        goto bad;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ((bio_out=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
	{
 | 
			
		||||
	BIO_set_fp(bio_out,stdout,BIO_NOCLOSE);
 | 
			
		||||
    if ((bio_out = BIO_new(BIO_s_file())) != NULL) {
 | 
			
		||||
        BIO_set_fp(bio_out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
	    {
 | 
			
		||||
	    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
	    bio_out = BIO_push(tmpbio, bio_out);
 | 
			
		||||
	    }
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            bio_out = BIO_push(tmpbio, bio_out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(generate)
 | 
			
		||||
	{
 | 
			
		||||
	char *s;
 | 
			
		||||
    if (generate) {
 | 
			
		||||
        char *s;
 | 
			
		||||
 | 
			
		||||
	if(!bits)
 | 
			
		||||
	    {
 | 
			
		||||
	    BIO_printf(bio_err,"Specifiy the number of bits.\n");
 | 
			
		||||
	    return 1;
 | 
			
		||||
	    }
 | 
			
		||||
	bn=BN_new();
 | 
			
		||||
	BN_generate_prime_ex(bn,bits,safe,NULL,NULL,NULL);
 | 
			
		||||
	s=hex ? BN_bn2hex(bn) : BN_bn2dec(bn);
 | 
			
		||||
	BIO_printf(bio_out,"%s\n",s);
 | 
			
		||||
	OPENSSL_free(s);
 | 
			
		||||
	}
 | 
			
		||||
    else
 | 
			
		||||
	{
 | 
			
		||||
	if(hex)
 | 
			
		||||
	    BN_hex2bn(&bn,argv[0]);
 | 
			
		||||
	else
 | 
			
		||||
	    BN_dec2bn(&bn,argv[0]);
 | 
			
		||||
        if (!bits) {
 | 
			
		||||
            BIO_printf(bio_err, "Specifiy the number of bits.\n");
 | 
			
		||||
            return 1;
 | 
			
		||||
        }
 | 
			
		||||
        bn = BN_new();
 | 
			
		||||
        BN_generate_prime_ex(bn, bits, safe, NULL, NULL, NULL);
 | 
			
		||||
        s = hex ? BN_bn2hex(bn) : BN_bn2dec(bn);
 | 
			
		||||
        BIO_printf(bio_out, "%s\n", s);
 | 
			
		||||
        OPENSSL_free(s);
 | 
			
		||||
    } else {
 | 
			
		||||
        if (hex)
 | 
			
		||||
            BN_hex2bn(&bn, argv[0]);
 | 
			
		||||
        else
 | 
			
		||||
            BN_dec2bn(&bn, argv[0]);
 | 
			
		||||
 | 
			
		||||
	BN_print(bio_out,bn);
 | 
			
		||||
	BIO_printf(bio_out," is %sprime\n",
 | 
			
		||||
		   BN_is_prime_ex(bn,checks,NULL,NULL) ? "" : "not ");
 | 
			
		||||
	}
 | 
			
		||||
        BN_print(bio_out, bn);
 | 
			
		||||
        BIO_printf(bio_out, " is %sprime\n",
 | 
			
		||||
                   BN_is_prime_ex(bn, checks, NULL, NULL) ? "" : "not ");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    BN_free(bn);
 | 
			
		||||
    BIO_free_all(bio_out);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
    bad:
 | 
			
		||||
    BIO_printf(bio_err,"options are\n");
 | 
			
		||||
    BIO_printf(bio_err,"%-14s hex\n","-hex");
 | 
			
		||||
    BIO_printf(bio_err,"%-14s number of checks\n","-checks <n>");
 | 
			
		||||
 bad:
 | 
			
		||||
    BIO_printf(bio_err, "options are\n");
 | 
			
		||||
    BIO_printf(bio_err, "%-14s hex\n", "-hex");
 | 
			
		||||
    BIO_printf(bio_err, "%-14s number of checks\n", "-checks <n>");
 | 
			
		||||
    return 1;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										358
									
								
								apps/progs.h
									
									
									
									
									
								
							
							
						
						
									
										358
									
								
								apps/progs.h
									
									
									
									
									
								
							@@ -1,362 +1,366 @@
 | 
			
		||||
/* apps/progs.h */
 | 
			
		||||
/* automatically generated by progs.pl for openssl.c */
 | 
			
		||||
 | 
			
		||||
extern int verify_main(int argc,char *argv[]);
 | 
			
		||||
extern int asn1parse_main(int argc,char *argv[]);
 | 
			
		||||
extern int req_main(int argc,char *argv[]);
 | 
			
		||||
extern int dgst_main(int argc,char *argv[]);
 | 
			
		||||
extern int dh_main(int argc,char *argv[]);
 | 
			
		||||
extern int dhparam_main(int argc,char *argv[]);
 | 
			
		||||
extern int enc_main(int argc,char *argv[]);
 | 
			
		||||
extern int passwd_main(int argc,char *argv[]);
 | 
			
		||||
extern int gendh_main(int argc,char *argv[]);
 | 
			
		||||
extern int errstr_main(int argc,char *argv[]);
 | 
			
		||||
extern int ca_main(int argc,char *argv[]);
 | 
			
		||||
extern int crl_main(int argc,char *argv[]);
 | 
			
		||||
extern int rsa_main(int argc,char *argv[]);
 | 
			
		||||
extern int rsautl_main(int argc,char *argv[]);
 | 
			
		||||
extern int dsa_main(int argc,char *argv[]);
 | 
			
		||||
extern int dsaparam_main(int argc,char *argv[]);
 | 
			
		||||
extern int ec_main(int argc,char *argv[]);
 | 
			
		||||
extern int ecparam_main(int argc,char *argv[]);
 | 
			
		||||
extern int x509_main(int argc,char *argv[]);
 | 
			
		||||
extern int genrsa_main(int argc,char *argv[]);
 | 
			
		||||
extern int gendsa_main(int argc,char *argv[]);
 | 
			
		||||
extern int genpkey_main(int argc,char *argv[]);
 | 
			
		||||
extern int s_server_main(int argc,char *argv[]);
 | 
			
		||||
extern int s_client_main(int argc,char *argv[]);
 | 
			
		||||
extern int speed_main(int argc,char *argv[]);
 | 
			
		||||
extern int s_time_main(int argc,char *argv[]);
 | 
			
		||||
extern int version_main(int argc,char *argv[]);
 | 
			
		||||
extern int pkcs7_main(int argc,char *argv[]);
 | 
			
		||||
extern int cms_main(int argc,char *argv[]);
 | 
			
		||||
extern int crl2pkcs7_main(int argc,char *argv[]);
 | 
			
		||||
extern int sess_id_main(int argc,char *argv[]);
 | 
			
		||||
extern int ciphers_main(int argc,char *argv[]);
 | 
			
		||||
extern int nseq_main(int argc,char *argv[]);
 | 
			
		||||
extern int pkcs12_main(int argc,char *argv[]);
 | 
			
		||||
extern int pkcs8_main(int argc,char *argv[]);
 | 
			
		||||
extern int pkey_main(int argc,char *argv[]);
 | 
			
		||||
extern int pkeyparam_main(int argc,char *argv[]);
 | 
			
		||||
extern int pkeyutl_main(int argc,char *argv[]);
 | 
			
		||||
extern int spkac_main(int argc,char *argv[]);
 | 
			
		||||
extern int 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 prime_main(int argc,char *argv[]);
 | 
			
		||||
extern int ts_main(int argc,char *argv[]);
 | 
			
		||||
extern int verify_main(int argc, char *argv[]);
 | 
			
		||||
extern int asn1parse_main(int argc, char *argv[]);
 | 
			
		||||
extern int req_main(int argc, char *argv[]);
 | 
			
		||||
extern int dgst_main(int argc, char *argv[]);
 | 
			
		||||
extern int dh_main(int argc, char *argv[]);
 | 
			
		||||
extern int dhparam_main(int argc, char *argv[]);
 | 
			
		||||
extern int enc_main(int argc, char *argv[]);
 | 
			
		||||
extern int passwd_main(int argc, char *argv[]);
 | 
			
		||||
extern int gendh_main(int argc, char *argv[]);
 | 
			
		||||
extern int errstr_main(int argc, char *argv[]);
 | 
			
		||||
extern int ca_main(int argc, char *argv[]);
 | 
			
		||||
extern int crl_main(int argc, char *argv[]);
 | 
			
		||||
extern int rsa_main(int argc, char *argv[]);
 | 
			
		||||
extern int rsautl_main(int argc, char *argv[]);
 | 
			
		||||
extern int dsa_main(int argc, char *argv[]);
 | 
			
		||||
extern int dsaparam_main(int argc, char *argv[]);
 | 
			
		||||
extern int ec_main(int argc, char *argv[]);
 | 
			
		||||
extern int ecparam_main(int argc, char *argv[]);
 | 
			
		||||
extern int x509_main(int argc, char *argv[]);
 | 
			
		||||
extern int genrsa_main(int argc, char *argv[]);
 | 
			
		||||
extern int gendsa_main(int argc, char *argv[]);
 | 
			
		||||
extern int genpkey_main(int argc, char *argv[]);
 | 
			
		||||
extern int s_server_main(int argc, char *argv[]);
 | 
			
		||||
extern int s_client_main(int argc, char *argv[]);
 | 
			
		||||
extern int speed_main(int argc, char *argv[]);
 | 
			
		||||
extern int s_time_main(int argc, char *argv[]);
 | 
			
		||||
extern int version_main(int argc, char *argv[]);
 | 
			
		||||
extern int pkcs7_main(int argc, char *argv[]);
 | 
			
		||||
extern int cms_main(int argc, char *argv[]);
 | 
			
		||||
extern int crl2pkcs7_main(int argc, char *argv[]);
 | 
			
		||||
extern int sess_id_main(int argc, char *argv[]);
 | 
			
		||||
extern int ciphers_main(int argc, char *argv[]);
 | 
			
		||||
extern int nseq_main(int argc, char *argv[]);
 | 
			
		||||
extern int pkcs12_main(int argc, char *argv[]);
 | 
			
		||||
extern int pkcs8_main(int argc, char *argv[]);
 | 
			
		||||
extern int pkey_main(int argc, char *argv[]);
 | 
			
		||||
extern int pkeyparam_main(int argc, char *argv[]);
 | 
			
		||||
extern int pkeyutl_main(int argc, char *argv[]);
 | 
			
		||||
extern int spkac_main(int argc, char *argv[]);
 | 
			
		||||
extern int 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 prime_main(int argc, char *argv[]);
 | 
			
		||||
extern int ts_main(int argc, char *argv[]);
 | 
			
		||||
extern int srp_main(int argc, char *argv[]);
 | 
			
		||||
 | 
			
		||||
#define FUNC_TYPE_GENERAL	1
 | 
			
		||||
#define FUNC_TYPE_MD		2
 | 
			
		||||
#define FUNC_TYPE_CIPHER	3
 | 
			
		||||
#define FUNC_TYPE_PKEY		4
 | 
			
		||||
#define FUNC_TYPE_MD_ALG	5
 | 
			
		||||
#define FUNC_TYPE_CIPHER_ALG	6
 | 
			
		||||
#define FUNC_TYPE_GENERAL       1
 | 
			
		||||
#define FUNC_TYPE_MD            2
 | 
			
		||||
#define FUNC_TYPE_CIPHER        3
 | 
			
		||||
#define FUNC_TYPE_PKEY          4
 | 
			
		||||
#define FUNC_TYPE_MD_ALG        5
 | 
			
		||||
#define FUNC_TYPE_CIPHER_ALG    6
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
	int type;
 | 
			
		||||
	const char *name;
 | 
			
		||||
	int (*func)(int argc,char *argv[]);
 | 
			
		||||
	} FUNCTION;
 | 
			
		||||
    int type;
 | 
			
		||||
    const char *name;
 | 
			
		||||
    int (*func) (int argc, char *argv[]);
 | 
			
		||||
} FUNCTION;
 | 
			
		||||
DECLARE_LHASH_OF(FUNCTION);
 | 
			
		||||
 | 
			
		||||
FUNCTION functions[] = {
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"verify",verify_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"asn1parse",asn1parse_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"req",req_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"dgst",dgst_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "verify", verify_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "asn1parse", asn1parse_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "req", req_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "dgst", dgst_main},
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"dh",dh_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "dh", dh_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"dhparam",dhparam_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "dhparam", dhparam_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"enc",enc_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"passwd",passwd_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "enc", enc_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "passwd", passwd_main},
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"gendh",gendh_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "gendh", gendh_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"errstr",errstr_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ca",ca_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"crl",crl_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "errstr", errstr_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "ca", ca_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "crl", crl_main},
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"rsa",rsa_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "rsa", rsa_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"rsautl",rsautl_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "rsautl", rsautl_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"dsa",dsa_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "dsa", dsa_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"dsaparam",dsaparam_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "dsaparam", dsaparam_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_EC
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ec",ec_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "ec", ec_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_EC
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ecparam",ecparam_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "ecparam", ecparam_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"x509",x509_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "x509", x509_main},
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"genrsa",genrsa_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "genrsa", genrsa_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"gendsa",gendsa_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "gendsa", gendsa_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"genpkey",genpkey_main},
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"s_server",s_server_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "genpkey", genpkey_main},
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK)
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "s_server", s_server_main},
 | 
			
		||||
#endif
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"s_client",s_client_main},
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK)
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "s_client", s_client_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SPEED
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"speed",speed_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "speed", speed_main},
 | 
			
		||||
#endif
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"s_time",s_time_main},
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK)
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "s_time", s_time_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"version",version_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"pkcs7",pkcs7_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "version", version_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "pkcs7", pkcs7_main},
 | 
			
		||||
#ifndef OPENSSL_NO_CMS
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"cms",cms_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "cms", cms_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"crl2pkcs7",crl2pkcs7_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"sess_id",sess_id_main},
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ciphers",ciphers_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "crl2pkcs7", crl2pkcs7_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "sess_id", sess_id_main},
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK)
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "ciphers", ciphers_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"nseq",nseq_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "nseq", nseq_main},
 | 
			
		||||
#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1)
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"pkcs12",pkcs12_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "pkcs12", pkcs12_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"pkcs8",pkcs8_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"pkey",pkey_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"pkeyparam",pkeyparam_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"pkeyutl",pkeyutl_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"spkac",spkac_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"smime",smime_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"rand",rand_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "pkcs8", pkcs8_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "pkey", pkey_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "pkeyparam", pkeyparam_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "pkeyutl", pkeyutl_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "spkac", spkac_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "smime", smime_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "rand", rand_main},
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"engine",engine_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "engine", engine_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_OCSP
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ocsp",ocsp_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "ocsp", ocsp_main},
 | 
			
		||||
#endif
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "prime", prime_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "ts", ts_main},
 | 
			
		||||
#ifndef OPENSSL_NO_SRP
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "srp", srp_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"prime",prime_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ts",ts_main},
 | 
			
		||||
#ifndef OPENSSL_NO_MD2
 | 
			
		||||
	{FUNC_TYPE_MD,"md2",dgst_main},
 | 
			
		||||
    {FUNC_TYPE_MD, "md2", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_MD4
 | 
			
		||||
	{FUNC_TYPE_MD,"md4",dgst_main},
 | 
			
		||||
    {FUNC_TYPE_MD, "md4", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_MD5
 | 
			
		||||
	{FUNC_TYPE_MD,"md5",dgst_main},
 | 
			
		||||
    {FUNC_TYPE_MD, "md5", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SHA
 | 
			
		||||
	{FUNC_TYPE_MD,"sha",dgst_main},
 | 
			
		||||
    {FUNC_TYPE_MD, "sha", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SHA1
 | 
			
		||||
	{FUNC_TYPE_MD,"sha1",dgst_main},
 | 
			
		||||
    {FUNC_TYPE_MD, "sha1", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_MDC2
 | 
			
		||||
	{FUNC_TYPE_MD,"mdc2",dgst_main},
 | 
			
		||||
    {FUNC_TYPE_MD, "mdc2", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RMD160
 | 
			
		||||
	{FUNC_TYPE_MD,"rmd160",dgst_main},
 | 
			
		||||
    {FUNC_TYPE_MD, "rmd160", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"aes-128-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "aes-128-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"aes-128-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "aes-128-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"aes-192-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "aes-192-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"aes-192-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "aes-192-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"aes-256-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "aes-256-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"aes-256-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "aes-256-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"camellia-128-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "camellia-128-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"camellia-128-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "camellia-128-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"camellia-192-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "camellia-192-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"camellia-192-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "camellia-192-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"camellia-256-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "camellia-256-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"camellia-256-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "camellia-256-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"base64",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "base64", enc_main},
 | 
			
		||||
#ifdef ZLIB
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"zlib",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "zlib", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des3",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des3", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"desx",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "desx", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"idea",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "idea", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"seed",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "seed", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC4
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc4",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc4", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC4
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc4-40",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc4-40", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc2",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc2", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"bf",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "bf", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAST
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"cast",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "cast", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC5
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc5",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc5", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ede",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ede", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ede3",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ede3", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ede-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ede-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ede3-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ede3-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ede-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ede-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ede3-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ede3-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ede-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ede-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ede3-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ede3-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"idea-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "idea-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"idea-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "idea-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"idea-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "idea-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"idea-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "idea-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"seed-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "seed-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"seed-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "seed-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"seed-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "seed-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"seed-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "seed-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc2-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc2-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc2-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc2-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc2-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc2-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc2-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc2-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc2-64-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc2-64-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc2-40-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc2-40-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"bf-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "bf-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"bf-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "bf-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"bf-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "bf-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"bf-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "bf-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAST
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"cast5-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "cast5-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAST
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"cast5-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "cast5-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAST
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"cast5-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "cast5-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAST
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"cast5-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "cast5-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAST
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"cast-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "cast-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC5
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc5-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc5-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC5
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc5-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc5-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC5
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc5-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc5-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC5
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc5-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc5-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{0,NULL,NULL}
 | 
			
		||||
	};
 | 
			
		||||
    {0, NULL, NULL}
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ foreach (@ARGV)
 | 
			
		||||
	push(@files,$_);
 | 
			
		||||
	$str="\t{FUNC_TYPE_GENERAL,\"$_\",${_}_main},\n";
 | 
			
		||||
	if (($_ =~ /^s_/) || ($_ =~ /^ciphers$/))
 | 
			
		||||
		{ print "#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))\n${str}#endif\n"; } 
 | 
			
		||||
		{ print "#if !defined(OPENSSL_NO_SOCK)\n${str}#endif\n"; } 
 | 
			
		||||
	elsif ( ($_ =~ /^speed$/))
 | 
			
		||||
		{ print "#ifndef OPENSSL_NO_SPEED\n${str}#endif\n"; }
 | 
			
		||||
	elsif ( ($_ =~ /^engine$/))
 | 
			
		||||
@@ -51,6 +51,8 @@ foreach (@ARGV)
 | 
			
		||||
		{ print "#ifndef OPENSSL_NO_CMS\n${str}#endif\n"; }
 | 
			
		||||
	elsif ( ($_ =~ /^ocsp$/))
 | 
			
		||||
		{ print "#ifndef OPENSSL_NO_OCSP\n${str}#endif\n"; }
 | 
			
		||||
	elsif ( ($_ =~ /^srp$/))
 | 
			
		||||
		{ print "#ifndef OPENSSL_NO_SRP\n${str}#endif\n"; }
 | 
			
		||||
	else
 | 
			
		||||
		{ print $str; }
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										283
									
								
								apps/rand.c
									
									
									
									
									
								
							
							
						
						
									
										283
									
								
								apps/rand.c
									
									
									
									
									
								
							@@ -7,7 +7,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -66,7 +66,8 @@
 | 
			
		||||
#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
 | 
			
		||||
@@ -76,173 +77,153 @@
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
{
 | 
			
		||||
    int i, r, ret = 1;
 | 
			
		||||
    int badopt;
 | 
			
		||||
    char *outfile = NULL;
 | 
			
		||||
    char *inrand = NULL;
 | 
			
		||||
    int base64 = 0;
 | 
			
		||||
    int hex = 0;
 | 
			
		||||
    BIO *out = NULL;
 | 
			
		||||
    int num = -1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int i, r, ret = 1;
 | 
			
		||||
	int badopt;
 | 
			
		||||
	char *outfile = NULL;
 | 
			
		||||
	char *inrand = NULL;
 | 
			
		||||
	int base64 = 0;
 | 
			
		||||
	int hex = 0;
 | 
			
		||||
	BIO *out = NULL;
 | 
			
		||||
	int num = -1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto err;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
	badopt = 0;
 | 
			
		||||
	i = 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;
 | 
			
		||||
			}
 | 
			
		||||
    badopt = 0;
 | 
			
		||||
    i = 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)
 | 
			
		||||
			{
 | 
			
		||||
			if ((argv[i+1] != NULL) && (engine == NULL))
 | 
			
		||||
				engine = argv[++i];
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
        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)
 | 
			
		||||
			{
 | 
			
		||||
			if ((argv[i+1] != NULL) && (inrand == NULL))
 | 
			
		||||
				inrand = argv[++i];
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(argv[i], "-base64") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!base64)
 | 
			
		||||
				base64 = 1;
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
		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)
 | 
			
		||||
				{
 | 
			
		||||
				r = sscanf(argv[i], "%d", &num);
 | 
			
		||||
				if (r == 0 || num < 0)
 | 
			
		||||
					badopt = 1;
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			badopt = 1;
 | 
			
		||||
		}
 | 
			
		||||
        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) {
 | 
			
		||||
            if (!base64)
 | 
			
		||||
                base64 = 1;
 | 
			
		||||
            else
 | 
			
		||||
                badopt = 1;
 | 
			
		||||
        } 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) {
 | 
			
		||||
                r = sscanf(argv[i], "%d", &num);
 | 
			
		||||
                if (r == 0 || num < 0)
 | 
			
		||||
                    badopt = 1;
 | 
			
		||||
            } else
 | 
			
		||||
                badopt = 1;
 | 
			
		||||
        } else
 | 
			
		||||
            badopt = 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (hex && base64)
 | 
			
		||||
		badopt = 1;
 | 
			
		||||
    if (hex && base64)
 | 
			
		||||
        badopt = 1;
 | 
			
		||||
 | 
			
		||||
	if (num < 0)
 | 
			
		||||
		badopt = 1;
 | 
			
		||||
	
 | 
			
		||||
	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");
 | 
			
		||||
    if (num < 0)
 | 
			
		||||
        badopt = 1;
 | 
			
		||||
 | 
			
		||||
    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, "-base64               - base64 encode output\n");
 | 
			
		||||
		BIO_printf(bio_err, "-hex                  - hex encode output\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        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
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	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));
 | 
			
		||||
    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));
 | 
			
		||||
 | 
			
		||||
	out = BIO_new(BIO_s_file());
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
		goto err;
 | 
			
		||||
	if (outfile != NULL)
 | 
			
		||||
		r = BIO_write_filename(out, outfile);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if (out == NULL)
 | 
			
		||||
        goto err;
 | 
			
		||||
    if (outfile != NULL)
 | 
			
		||||
        r = BIO_write_filename(out, outfile);
 | 
			
		||||
    else {
 | 
			
		||||
        r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	if (r <= 0)
 | 
			
		||||
		goto err;
 | 
			
		||||
    }
 | 
			
		||||
    if (r <= 0)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
	if (base64)
 | 
			
		||||
		{
 | 
			
		||||
		BIO *b64 = BIO_new(BIO_f_base64());
 | 
			
		||||
		if (b64 == NULL)
 | 
			
		||||
			goto err;
 | 
			
		||||
		out = BIO_push(b64, out);
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	while (num > 0) 
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char buf[4096];
 | 
			
		||||
		int chunk;
 | 
			
		||||
    if (base64) {
 | 
			
		||||
        BIO *b64 = BIO_new(BIO_f_base64());
 | 
			
		||||
        if (b64 == NULL)
 | 
			
		||||
            goto err;
 | 
			
		||||
        out = BIO_push(b64, out);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		chunk = num;
 | 
			
		||||
		if (chunk > (int)sizeof(buf))
 | 
			
		||||
			chunk = sizeof buf;
 | 
			
		||||
		r = RAND_bytes(buf, chunk);
 | 
			
		||||
		if (r <= 0)
 | 
			
		||||
			goto err;
 | 
			
		||||
		if (!hex) 
 | 
			
		||||
			BIO_write(out, buf, chunk);
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			for (i = 0; i < chunk; i++)
 | 
			
		||||
				BIO_printf(out, "%02x", buf[i]);
 | 
			
		||||
			}
 | 
			
		||||
		num -= chunk;
 | 
			
		||||
		}
 | 
			
		||||
	if (hex)
 | 
			
		||||
		BIO_puts(out, "\n");
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
    while (num > 0) {
 | 
			
		||||
        unsigned char buf[4096];
 | 
			
		||||
        int chunk;
 | 
			
		||||
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
	ret = 0;
 | 
			
		||||
	
 | 
			
		||||
err:
 | 
			
		||||
	ERR_print_errors(bio_err);
 | 
			
		||||
	if (out)
 | 
			
		||||
		BIO_free_all(out);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
        chunk = num;
 | 
			
		||||
        if (chunk > (int)sizeof(buf))
 | 
			
		||||
            chunk = sizeof buf;
 | 
			
		||||
        r = RAND_bytes(buf, chunk);
 | 
			
		||||
        if (r <= 0)
 | 
			
		||||
            goto err;
 | 
			
		||||
        if (!hex)
 | 
			
		||||
            BIO_write(out, buf, chunk);
 | 
			
		||||
        else {
 | 
			
		||||
            for (i = 0; i < chunk; i++)
 | 
			
		||||
                BIO_printf(out, "%02x", buf[i]);
 | 
			
		||||
        }
 | 
			
		||||
        num -= chunk;
 | 
			
		||||
    }
 | 
			
		||||
    if (hex)
 | 
			
		||||
        BIO_puts(out, "\n");
 | 
			
		||||
    (void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
    app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
 err:
 | 
			
		||||
    ERR_print_errors(bio_err);
 | 
			
		||||
    if (out)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2926
									
								
								apps/req.c
									
									
									
									
									
								
							
							
						
						
									
										2926
									
								
								apps/req.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										703
									
								
								apps/rsa.c
									
									
									
									
									
								
							
							
						
						
									
										703
									
								
								apps/rsa.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -58,393 +58,382 @@
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/rsa.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <stdlib.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include <time.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/rsa.h>
 | 
			
		||||
# include <openssl/evp.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	rsa_main
 | 
			
		||||
# 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
 | 
			
		||||
 * -des		- encrypt output if PEM format with DES in cbc mode
 | 
			
		||||
 * -des3	- encrypt output if PEM format
 | 
			
		||||
 * -idea	- encrypt output if PEM format
 | 
			
		||||
 * -seed	- encrypt output if PEM format
 | 
			
		||||
 * -aes128	- encrypt output if PEM format
 | 
			
		||||
 * -aes192	- encrypt output if PEM format
 | 
			
		||||
 * -aes256	- encrypt output if PEM format
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -out arg     - output file - default stdout
 | 
			
		||||
 * -des         - encrypt output if PEM format with DES in cbc mode
 | 
			
		||||
 * -des3        - encrypt output if PEM format
 | 
			
		||||
 * -idea        - encrypt output if PEM format
 | 
			
		||||
 * -seed        - encrypt output if PEM format
 | 
			
		||||
 * -aes128      - encrypt output if PEM format
 | 
			
		||||
 * -aes192      - encrypt output if PEM format
 | 
			
		||||
 * -aes256      - encrypt output if PEM format
 | 
			
		||||
 * -camellia128 - encrypt output if PEM format
 | 
			
		||||
 * -camellia192 - encrypt output if PEM format
 | 
			
		||||
 * -camellia256 - encrypt output if PEM format
 | 
			
		||||
 * -text	- print a text version
 | 
			
		||||
 * -modulus	- print the RSA key modulus
 | 
			
		||||
 * -check	- verify key consistency
 | 
			
		||||
 * -pubin	- Expect a public key in input file.
 | 
			
		||||
 * -pubout	- Output a public key.
 | 
			
		||||
 * -text        - print a text version
 | 
			
		||||
 * -modulus     - print the RSA key modulus
 | 
			
		||||
 * -check       - verify key consistency
 | 
			
		||||
 * -pubin       - Expect a public key in input file.
 | 
			
		||||
 * -pubout      - Output a public key.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	RSA *rsa=NULL;
 | 
			
		||||
	int i,badops=0, sgckey=0;
 | 
			
		||||
	const EVP_CIPHER *enc=NULL;
 | 
			
		||||
	BIO *out=NULL;
 | 
			
		||||
	int informat,outformat,text=0,check=0,noout=0;
 | 
			
		||||
	int pubin = 0, pubout = 0;
 | 
			
		||||
	char *infile,*outfile,*prog;
 | 
			
		||||
	char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
	char *passin = NULL, *passout = NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int modulus=0;
 | 
			
		||||
{
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    RSA *rsa = NULL;
 | 
			
		||||
    int i, badops = 0, sgckey = 0;
 | 
			
		||||
    const EVP_CIPHER *enc = NULL;
 | 
			
		||||
    BIO *out = NULL;
 | 
			
		||||
    int informat, outformat, text = 0, check = 0, noout = 0;
 | 
			
		||||
    int pubin = 0, pubout = 0;
 | 
			
		||||
    char *infile, *outfile, *prog;
 | 
			
		||||
    char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
    char *passin = NULL, *passout = NULL;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    int modulus = 0;
 | 
			
		||||
 | 
			
		||||
	int pvk_encr = 2;
 | 
			
		||||
    int pvk_encr = 2;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    infile = NULL;
 | 
			
		||||
    outfile = NULL;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-sgckey") == 0)
 | 
			
		||||
			sgckey=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pubin") == 0)
 | 
			
		||||
			pubin=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pubout") == 0)
 | 
			
		||||
			pubout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-RSAPublicKey_in") == 0)
 | 
			
		||||
			pubin = 2;
 | 
			
		||||
		else if (strcmp(*argv,"-RSAPublicKey_out") == 0)
 | 
			
		||||
			pubout = 2;
 | 
			
		||||
		else if (strcmp(*argv,"-pvk-strong") == 0)
 | 
			
		||||
			pvk_encr=2;
 | 
			
		||||
		else if (strcmp(*argv,"-pvk-weak") == 0)
 | 
			
		||||
			pvk_encr=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pvk-none") == 0)
 | 
			
		||||
			pvk_encr=0;
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*argv,"-modulus") == 0)
 | 
			
		||||
			modulus=1;
 | 
			
		||||
		else if (strcmp(*argv,"-check") == 0)
 | 
			
		||||
			check=1;
 | 
			
		||||
		else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passin") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargin = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passout") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargout = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-sgckey") == 0)
 | 
			
		||||
            sgckey = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pubin") == 0)
 | 
			
		||||
            pubin = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pubout") == 0)
 | 
			
		||||
            pubout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-RSAPublicKey_in") == 0)
 | 
			
		||||
            pubin = 2;
 | 
			
		||||
        else if (strcmp(*argv, "-RSAPublicKey_out") == 0)
 | 
			
		||||
            pubout = 2;
 | 
			
		||||
        else if (strcmp(*argv, "-pvk-strong") == 0)
 | 
			
		||||
            pvk_encr = 2;
 | 
			
		||||
        else if (strcmp(*argv, "-pvk-weak") == 0)
 | 
			
		||||
            pvk_encr = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pvk-none") == 0)
 | 
			
		||||
            pvk_encr = 0;
 | 
			
		||||
        else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-modulus") == 0)
 | 
			
		||||
            modulus = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-check") == 0)
 | 
			
		||||
            check = 1;
 | 
			
		||||
        else if ((enc = EVP_get_cipherbyname(&(argv[0][1]))) == NULL) {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg     input format - 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," -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");
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		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");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
		BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -text           print the key in text\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout          don't print key out\n");
 | 
			
		||||
		BIO_printf(bio_err," -modulus        print the RSA key modulus\n");
 | 
			
		||||
		BIO_printf(bio_err," -check          verify key consistency\n");
 | 
			
		||||
		BIO_printf(bio_err," -pubin          expect a public key in input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -pubout         output a public key\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," -engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    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, " -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, " -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");
 | 
			
		||||
# ifndef OPENSSL_NO_IDEA
 | 
			
		||||
        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");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_AES
 | 
			
		||||
        BIO_printf(bio_err, " -aes128, -aes192, -aes256\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
        BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
# endif
 | 
			
		||||
        BIO_printf(bio_err, " -text           print the key in text\n");
 | 
			
		||||
        BIO_printf(bio_err, " -noout          don't print key out\n");
 | 
			
		||||
        BIO_printf(bio_err, " -modulus        print the RSA key modulus\n");
 | 
			
		||||
        BIO_printf(bio_err, " -check          verify key consistency\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -pubin          expect a public key in input file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -pubout         output a public key\n");
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
# endif
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(check && pubin) {
 | 
			
		||||
		BIO_printf(bio_err, "Only private keys can be checked\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    if (check && pubin) {
 | 
			
		||||
        BIO_printf(bio_err, "Only private keys can be checked\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
		EVP_PKEY	*pkey;
 | 
			
		||||
    {
 | 
			
		||||
        EVP_PKEY *pkey;
 | 
			
		||||
 | 
			
		||||
		if (pubin)
 | 
			
		||||
			{
 | 
			
		||||
			int tmpformat=-1;
 | 
			
		||||
			if (pubin == 2)
 | 
			
		||||
				{
 | 
			
		||||
				if (informat == FORMAT_PEM)
 | 
			
		||||
					tmpformat = FORMAT_PEMRSA;
 | 
			
		||||
				else if (informat == FORMAT_ASN1)
 | 
			
		||||
					tmpformat = FORMAT_ASN1RSA;
 | 
			
		||||
				}
 | 
			
		||||
			else if (informat == FORMAT_NETSCAPE && sgckey)
 | 
			
		||||
				tmpformat = FORMAT_IISSGC;
 | 
			
		||||
			else
 | 
			
		||||
				tmpformat = informat;
 | 
			
		||||
					
 | 
			
		||||
			pkey = load_pubkey(bio_err, infile, tmpformat, 1,
 | 
			
		||||
				passin, e, "Public Key");
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			pkey = load_key(bio_err, infile,
 | 
			
		||||
				(informat == FORMAT_NETSCAPE && sgckey ?
 | 
			
		||||
					FORMAT_IISSGC : informat), 1,
 | 
			
		||||
				passin, e, "Private Key");
 | 
			
		||||
        if (pubin) {
 | 
			
		||||
            int tmpformat = -1;
 | 
			
		||||
            if (pubin == 2) {
 | 
			
		||||
                if (informat == FORMAT_PEM)
 | 
			
		||||
                    tmpformat = FORMAT_PEMRSA;
 | 
			
		||||
                else if (informat == FORMAT_ASN1)
 | 
			
		||||
                    tmpformat = FORMAT_ASN1RSA;
 | 
			
		||||
            } else if (informat == FORMAT_NETSCAPE && sgckey)
 | 
			
		||||
                tmpformat = FORMAT_IISSGC;
 | 
			
		||||
            else
 | 
			
		||||
                tmpformat = informat;
 | 
			
		||||
 | 
			
		||||
		if (pkey != NULL)
 | 
			
		||||
			rsa = EVP_PKEY_get1_RSA(pkey);
 | 
			
		||||
		EVP_PKEY_free(pkey);
 | 
			
		||||
	}
 | 
			
		||||
            pkey = load_pubkey(bio_err, infile, tmpformat, 1,
 | 
			
		||||
                               passin, e, "Public Key");
 | 
			
		||||
        } else
 | 
			
		||||
            pkey = load_key(bio_err, infile,
 | 
			
		||||
                            (informat == FORMAT_NETSCAPE && sgckey ?
 | 
			
		||||
                             FORMAT_IISSGC : informat), 1,
 | 
			
		||||
                            passin, e, "Private Key");
 | 
			
		||||
 | 
			
		||||
	if (rsa == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
        if (pkey != NULL)
 | 
			
		||||
            rsa = EVP_PKEY_get1_RSA(pkey);
 | 
			
		||||
        EVP_PKEY_free(pkey);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (rsa == NULL) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (text) 
 | 
			
		||||
		if (!RSA_print(out,rsa,0))
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (modulus)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(out,"Modulus=");
 | 
			
		||||
		BN_print(out,rsa->n);
 | 
			
		||||
		BIO_printf(out,"\n");
 | 
			
		||||
		}
 | 
			
		||||
    if (text)
 | 
			
		||||
        if (!RSA_print(out, rsa, 0)) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	if (check)
 | 
			
		||||
		{
 | 
			
		||||
		int r = RSA_check_key(rsa);
 | 
			
		||||
    if (modulus) {
 | 
			
		||||
        BIO_printf(out, "Modulus=");
 | 
			
		||||
        BN_print(out, rsa->n);
 | 
			
		||||
        BIO_printf(out, "\n");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		if (r == 1)
 | 
			
		||||
			BIO_printf(out,"RSA key ok\n");
 | 
			
		||||
		else if (r == 0)
 | 
			
		||||
			{
 | 
			
		||||
			unsigned long err;
 | 
			
		||||
    if (check) {
 | 
			
		||||
        int r = RSA_check_key(rsa);
 | 
			
		||||
 | 
			
		||||
			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_error(); /* remove e from error stack */
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		
 | 
			
		||||
		if (r == -1 || ERR_peek_error() != 0) /* should happen only if r == -1 */
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
	if (noout)
 | 
			
		||||
		{
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	BIO_printf(bio_err,"writing RSA key\n");
 | 
			
		||||
	if 	(outformat == FORMAT_ASN1) {
 | 
			
		||||
		if(pubout || pubin) 
 | 
			
		||||
			{
 | 
			
		||||
			if (pubout == 2)
 | 
			
		||||
				i=i2d_RSAPublicKey_bio(out,rsa);
 | 
			
		||||
			else
 | 
			
		||||
				i=i2d_RSA_PUBKEY_bio(out,rsa);
 | 
			
		||||
			}
 | 
			
		||||
		else i=i2d_RSAPrivateKey_bio(out,rsa);
 | 
			
		||||
	}
 | 
			
		||||
#ifndef OPENSSL_NO_RC4
 | 
			
		||||
	else if (outformat == FORMAT_NETSCAPE)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char *p,*pp;
 | 
			
		||||
		int size;
 | 
			
		||||
        if (r == 1)
 | 
			
		||||
            BIO_printf(out, "RSA key ok\n");
 | 
			
		||||
        else if (r == 0) {
 | 
			
		||||
            unsigned long err;
 | 
			
		||||
 | 
			
		||||
		i=1;
 | 
			
		||||
		size=i2d_RSA_NET(rsa,NULL,NULL, sgckey);
 | 
			
		||||
		if ((p=(unsigned char *)OPENSSL_malloc(size)) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"Memory allocation failure\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		pp=p;
 | 
			
		||||
		i2d_RSA_NET(rsa,&p,NULL, sgckey);
 | 
			
		||||
		BIO_write(out,(char *)pp,size);
 | 
			
		||||
		OPENSSL_free(pp);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	else if (outformat == FORMAT_PEM) {
 | 
			
		||||
		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,
 | 
			
		||||
						enc,NULL,0,NULL,passout);
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
	} else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
 | 
			
		||||
		EVP_PKEY *pk;
 | 
			
		||||
		pk = EVP_PKEY_new();
 | 
			
		||||
		EVP_PKEY_set1_RSA(pk, rsa);
 | 
			
		||||
		if (outformat == FORMAT_PVK)
 | 
			
		||||
			i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
 | 
			
		||||
		else if (pubin || pubout)
 | 
			
		||||
			i = i2b_PublicKey_bio(out, pk);
 | 
			
		||||
		else
 | 
			
		||||
			i = i2b_PrivateKey_bio(out, pk);
 | 
			
		||||
		EVP_PKEY_free(pk);
 | 
			
		||||
#endif
 | 
			
		||||
	} else	{
 | 
			
		||||
		BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (i <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to write key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if(out != NULL) BIO_free_all(out);
 | 
			
		||||
	if(rsa != NULL) RSA_free(rsa);
 | 
			
		||||
	if(passin) OPENSSL_free(passin);
 | 
			
		||||
	if(passout) OPENSSL_free(passout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_RSA */
 | 
			
		||||
            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_error(); /* remove e from error stack */
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (r == -1 || ERR_peek_error() != 0) { /* should happen only if r ==
 | 
			
		||||
                                                 * -1 */
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (noout) {
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    BIO_printf(bio_err, "writing RSA key\n");
 | 
			
		||||
    if (outformat == FORMAT_ASN1) {
 | 
			
		||||
        if (pubout || pubin) {
 | 
			
		||||
            if (pubout == 2)
 | 
			
		||||
                i = i2d_RSAPublicKey_bio(out, rsa);
 | 
			
		||||
            else
 | 
			
		||||
                i = i2d_RSA_PUBKEY_bio(out, rsa);
 | 
			
		||||
        } else
 | 
			
		||||
            i = i2d_RSAPrivateKey_bio(out, rsa);
 | 
			
		||||
    }
 | 
			
		||||
# ifndef OPENSSL_NO_RC4
 | 
			
		||||
    else if (outformat == FORMAT_NETSCAPE) {
 | 
			
		||||
        unsigned char *p, *pp;
 | 
			
		||||
        int size;
 | 
			
		||||
 | 
			
		||||
        i = 1;
 | 
			
		||||
        size = i2d_RSA_NET(rsa, NULL, NULL, sgckey);
 | 
			
		||||
        if ((p = (unsigned char *)OPENSSL_malloc(size)) == NULL) {
 | 
			
		||||
            BIO_printf(bio_err, "Memory allocation failure\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        pp = p;
 | 
			
		||||
        i2d_RSA_NET(rsa, &p, NULL, sgckey);
 | 
			
		||||
        BIO_write(out, (char *)pp, size);
 | 
			
		||||
        OPENSSL_free(pp);
 | 
			
		||||
    }
 | 
			
		||||
# endif
 | 
			
		||||
    else if (outformat == FORMAT_PEM) {
 | 
			
		||||
        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,
 | 
			
		||||
                                            enc, NULL, 0, NULL, passout);
 | 
			
		||||
# if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_RC4)
 | 
			
		||||
    } else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
 | 
			
		||||
        EVP_PKEY *pk;
 | 
			
		||||
        pk = EVP_PKEY_new();
 | 
			
		||||
        EVP_PKEY_set1_RSA(pk, rsa);
 | 
			
		||||
        if (outformat == FORMAT_PVK)
 | 
			
		||||
            i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
 | 
			
		||||
        else if (pubin || pubout)
 | 
			
		||||
            i = i2b_PublicKey_bio(out, pk);
 | 
			
		||||
        else
 | 
			
		||||
            i = i2b_PrivateKey_bio(out, pk);
 | 
			
		||||
        EVP_PKEY_free(pk);
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (i <= 0) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to write key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    } else
 | 
			
		||||
        ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (rsa != NULL)
 | 
			
		||||
        RSA_free(rsa);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
    if (passout)
 | 
			
		||||
        OPENSSL_free(passout);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
#else                           /* !OPENSSL_NO_RSA */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										514
									
								
								apps/rsautl.c
									
									
									
									
									
								
							
							
						
						
									
										514
									
								
								apps/rsautl.c
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
/* 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.
 | 
			
		||||
@@ -10,7 +11,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -59,293 +60,316 @@
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/rsa.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
# include <openssl/rsa.h>
 | 
			
		||||
 | 
			
		||||
#define RSA_SIGN 	1
 | 
			
		||||
#define RSA_VERIFY 	2
 | 
			
		||||
#define RSA_ENCRYPT 	3
 | 
			
		||||
#define RSA_DECRYPT 	4
 | 
			
		||||
# define RSA_SIGN        1
 | 
			
		||||
# define RSA_VERIFY      2
 | 
			
		||||
# define RSA_ENCRYPT     3
 | 
			
		||||
# define RSA_DECRYPT     4
 | 
			
		||||
 | 
			
		||||
#define KEY_PRIVKEY	1
 | 
			
		||||
#define KEY_PUBKEY	2
 | 
			
		||||
#define KEY_CERT	3
 | 
			
		||||
# define KEY_PRIVKEY     1
 | 
			
		||||
# define KEY_PUBKEY      2
 | 
			
		||||
# define KEY_CERT        3
 | 
			
		||||
 | 
			
		||||
static void usage(void);
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
# undef PROG
 | 
			
		||||
 | 
			
		||||
#define PROG rsautl_main
 | 
			
		||||
# define PROG rsautl_main
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	char *infile = NULL, *outfile = NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	char *keyfile = NULL;
 | 
			
		||||
	char rsa_mode = RSA_VERIFY, key_type = KEY_PRIVKEY;
 | 
			
		||||
	int keyform = FORMAT_PEM;
 | 
			
		||||
	char need_priv = 0, badarg = 0, rev = 0;
 | 
			
		||||
	char hexdump = 0, asn1parse = 0;
 | 
			
		||||
	X509 *x;
 | 
			
		||||
	EVP_PKEY *pkey = NULL;
 | 
			
		||||
	RSA *rsa = NULL;
 | 
			
		||||
	unsigned char *rsa_in = NULL, *rsa_out = NULL, pad;
 | 
			
		||||
	char *passargin = NULL, *passin = NULL;
 | 
			
		||||
	int rsa_inlen, rsa_outlen = 0;
 | 
			
		||||
	int keysize;
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    char *infile = NULL, *outfile = NULL;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    char *keyfile = NULL;
 | 
			
		||||
    char rsa_mode = RSA_VERIFY, key_type = KEY_PRIVKEY;
 | 
			
		||||
    int keyform = FORMAT_PEM;
 | 
			
		||||
    char need_priv = 0, badarg = 0, rev = 0;
 | 
			
		||||
    char hexdump = 0, asn1parse = 0;
 | 
			
		||||
    X509 *x;
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
    RSA *rsa = NULL;
 | 
			
		||||
    unsigned char *rsa_in = NULL, *rsa_out = NULL, pad;
 | 
			
		||||
    char *passargin = NULL, *passin = NULL;
 | 
			
		||||
    int rsa_inlen, rsa_outlen = 0;
 | 
			
		||||
    int keysize;
 | 
			
		||||
 | 
			
		||||
	int ret = 1;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	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();
 | 
			
		||||
	pad = RSA_PKCS1_PADDING;
 | 
			
		||||
	
 | 
			
		||||
	while(argc >= 1)
 | 
			
		||||
	{
 | 
			
		||||
		if (!strcmp(*argv,"-in")) {
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
				infile= *(++argv);
 | 
			
		||||
		} else if (!strcmp(*argv,"-out")) {
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
				outfile= *(++argv);
 | 
			
		||||
		} else if(!strcmp(*argv, "-inkey")) {
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
				keyfile = *(++argv);
 | 
			
		||||
		} else if (!strcmp(*argv,"-passin")) {
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
				passargin= *(++argv);
 | 
			
		||||
		} else if (strcmp(*argv,"-keyform") == 0) {
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
				keyform=str2fmt(*(++argv));
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		} else if(!strcmp(*argv, "-engine")) {
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
				engine = *(++argv);
 | 
			
		||||
#endif
 | 
			
		||||
		} else if(!strcmp(*argv, "-pubin")) {
 | 
			
		||||
			key_type = KEY_PUBKEY;
 | 
			
		||||
		} else if(!strcmp(*argv, "-certin")) {
 | 
			
		||||
			key_type = KEY_CERT;
 | 
			
		||||
		} 
 | 
			
		||||
		else if(!strcmp(*argv, "-asn1parse")) asn1parse = 1;
 | 
			
		||||
		else if(!strcmp(*argv, "-hexdump")) hexdump = 1;
 | 
			
		||||
		else if(!strcmp(*argv, "-raw")) pad = RSA_NO_PADDING;
 | 
			
		||||
		else if(!strcmp(*argv, "-oaep")) pad = RSA_PKCS1_OAEP_PADDING;
 | 
			
		||||
		else if(!strcmp(*argv, "-ssl")) pad = RSA_SSLV23_PADDING;
 | 
			
		||||
		else if(!strcmp(*argv, "-pkcs")) pad = RSA_PKCS1_PADDING;
 | 
			
		||||
		else if(!strcmp(*argv, "-x931")) pad = RSA_X931_PADDING;
 | 
			
		||||
		else if(!strcmp(*argv, "-sign")) {
 | 
			
		||||
			rsa_mode = RSA_SIGN;
 | 
			
		||||
			need_priv = 1;
 | 
			
		||||
		} else if(!strcmp(*argv, "-verify")) rsa_mode = RSA_VERIFY;
 | 
			
		||||
		else if(!strcmp(*argv, "-rev")) rev = 1;
 | 
			
		||||
		else if(!strcmp(*argv, "-encrypt")) rsa_mode = RSA_ENCRYPT;
 | 
			
		||||
		else if(!strcmp(*argv, "-decrypt")) {
 | 
			
		||||
			rsa_mode = RSA_DECRYPT;
 | 
			
		||||
			need_priv = 1;
 | 
			
		||||
		} else badarg = 1;
 | 
			
		||||
		if(badarg) {
 | 
			
		||||
			usage();
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
	}
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    OpenSSL_add_all_algorithms();
 | 
			
		||||
    pad = RSA_PKCS1_PADDING;
 | 
			
		||||
 | 
			
		||||
	if(need_priv && (key_type != KEY_PRIVKEY)) {
 | 
			
		||||
		BIO_printf(bio_err, "A private key is needed for this operation\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (!strcmp(*argv, "-in")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                infile = *(++argv);
 | 
			
		||||
        } else if (!strcmp(*argv, "-out")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                outfile = *(++argv);
 | 
			
		||||
        } else if (!strcmp(*argv, "-inkey")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                keyfile = *(++argv);
 | 
			
		||||
        } else if (!strcmp(*argv, "-passin")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                passargin = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-keyform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                keyform = str2fmt(*(++argv));
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        } else if (!strcmp(*argv, "-engine")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                engine = *(++argv);
 | 
			
		||||
# endif
 | 
			
		||||
        } else if (!strcmp(*argv, "-pubin")) {
 | 
			
		||||
            key_type = KEY_PUBKEY;
 | 
			
		||||
        } else if (!strcmp(*argv, "-certin")) {
 | 
			
		||||
            key_type = KEY_CERT;
 | 
			
		||||
        } else if (!strcmp(*argv, "-asn1parse"))
 | 
			
		||||
            asn1parse = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-hexdump"))
 | 
			
		||||
            hexdump = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-raw"))
 | 
			
		||||
            pad = RSA_NO_PADDING;
 | 
			
		||||
        else if (!strcmp(*argv, "-oaep"))
 | 
			
		||||
            pad = RSA_PKCS1_OAEP_PADDING;
 | 
			
		||||
        else if (!strcmp(*argv, "-ssl"))
 | 
			
		||||
            pad = RSA_SSLV23_PADDING;
 | 
			
		||||
        else if (!strcmp(*argv, "-pkcs"))
 | 
			
		||||
            pad = RSA_PKCS1_PADDING;
 | 
			
		||||
        else if (!strcmp(*argv, "-x931"))
 | 
			
		||||
            pad = RSA_X931_PADDING;
 | 
			
		||||
        else if (!strcmp(*argv, "-sign")) {
 | 
			
		||||
            rsa_mode = RSA_SIGN;
 | 
			
		||||
            need_priv = 1;
 | 
			
		||||
        } else if (!strcmp(*argv, "-verify"))
 | 
			
		||||
            rsa_mode = RSA_VERIFY;
 | 
			
		||||
        else if (!strcmp(*argv, "-rev"))
 | 
			
		||||
            rev = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-encrypt"))
 | 
			
		||||
            rsa_mode = RSA_ENCRYPT;
 | 
			
		||||
        else if (!strcmp(*argv, "-decrypt")) {
 | 
			
		||||
            rsa_mode = RSA_DECRYPT;
 | 
			
		||||
            need_priv = 1;
 | 
			
		||||
        } else
 | 
			
		||||
            badarg = 1;
 | 
			
		||||
        if (badarg) {
 | 
			
		||||
            usage();
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    if (need_priv && (key_type != KEY_PRIVKEY)) {
 | 
			
		||||
        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
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
/* FIXME: seed PRNG only if needed */
 | 
			
		||||
	app_RAND_load_file(NULL, bio_err, 0);
 | 
			
		||||
	
 | 
			
		||||
	switch(key_type) {
 | 
			
		||||
		case KEY_PRIVKEY:
 | 
			
		||||
		pkey = load_key(bio_err, keyfile, keyform, 0,
 | 
			
		||||
			passin, e, "Private Key");
 | 
			
		||||
		break;
 | 
			
		||||
    app_RAND_load_file(NULL, bio_err, 0);
 | 
			
		||||
 | 
			
		||||
		case KEY_PUBKEY:
 | 
			
		||||
		pkey = load_pubkey(bio_err, keyfile, keyform, 0,
 | 
			
		||||
			NULL, e, "Public Key");
 | 
			
		||||
		break;
 | 
			
		||||
    switch (key_type) {
 | 
			
		||||
    case KEY_PRIVKEY:
 | 
			
		||||
        pkey = load_key(bio_err, keyfile, keyform, 0,
 | 
			
		||||
                        passin, e, "Private Key");
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case KEY_CERT:
 | 
			
		||||
		x = load_cert(bio_err, keyfile, keyform,
 | 
			
		||||
			NULL, e, "Certificate");
 | 
			
		||||
		if(x) {
 | 
			
		||||
			pkey = X509_get_pubkey(x);
 | 
			
		||||
			X509_free(x);
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
    case KEY_PUBKEY:
 | 
			
		||||
        pkey = load_pubkey(bio_err, keyfile, keyform, 0,
 | 
			
		||||
                           NULL, e, "Public Key");
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
	if(!pkey) {
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
    case KEY_CERT:
 | 
			
		||||
        x = load_cert(bio_err, keyfile, keyform, NULL, e, "Certificate");
 | 
			
		||||
        if (x) {
 | 
			
		||||
            pkey = X509_get_pubkey(x);
 | 
			
		||||
            X509_free(x);
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	rsa = EVP_PKEY_get1_RSA(pkey);
 | 
			
		||||
	EVP_PKEY_free(pkey);
 | 
			
		||||
    if (!pkey) {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(!rsa) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting RSA key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    rsa = EVP_PKEY_get1_RSA(pkey);
 | 
			
		||||
    EVP_PKEY_free(pkey);
 | 
			
		||||
 | 
			
		||||
    if (!rsa) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting RSA key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        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);
 | 
			
		||||
    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);
 | 
			
		||||
 | 
			
		||||
	if(outfile) {
 | 
			
		||||
		if(!(out = BIO_new_file(outfile, "wb"))) {
 | 
			
		||||
			BIO_printf(bio_err, "Error Reading Output File\n");
 | 
			
		||||
			ERR_print_errors(bio_err);	
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		    out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "wb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Error Reading Output File\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	keysize = RSA_size(rsa);
 | 
			
		||||
    keysize = RSA_size(rsa);
 | 
			
		||||
 | 
			
		||||
	rsa_in = OPENSSL_malloc(keysize * 2);
 | 
			
		||||
	rsa_out = OPENSSL_malloc(keysize);
 | 
			
		||||
    rsa_in = OPENSSL_malloc(keysize * 2);
 | 
			
		||||
    rsa_out = OPENSSL_malloc(keysize);
 | 
			
		||||
    if (!rsa_in || !rsa_out) {
 | 
			
		||||
        BIO_printf(bio_err, "Out of memory\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	/* Read the input data */
 | 
			
		||||
	rsa_inlen = BIO_read(in, rsa_in, keysize * 2);
 | 
			
		||||
	if(rsa_inlen <= 0) {
 | 
			
		||||
		BIO_printf(bio_err, "Error reading input Data\n");
 | 
			
		||||
		exit(1);
 | 
			
		||||
	}
 | 
			
		||||
	if(rev) {
 | 
			
		||||
		int i;
 | 
			
		||||
		unsigned char ctmp;
 | 
			
		||||
		for(i = 0; i < rsa_inlen/2; i++) {
 | 
			
		||||
			ctmp = rsa_in[i];
 | 
			
		||||
			rsa_in[i] = rsa_in[rsa_inlen - 1 - i];
 | 
			
		||||
			rsa_in[rsa_inlen - 1 - i] = ctmp;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	switch(rsa_mode) {
 | 
			
		||||
    /* Read the input data */
 | 
			
		||||
    rsa_inlen = BIO_read(in, rsa_in, keysize * 2);
 | 
			
		||||
    if (rsa_inlen <= 0) {
 | 
			
		||||
        BIO_printf(bio_err, "Error reading input Data\n");
 | 
			
		||||
        exit(1);
 | 
			
		||||
    }
 | 
			
		||||
    if (rev) {
 | 
			
		||||
        int i;
 | 
			
		||||
        unsigned char ctmp;
 | 
			
		||||
        for (i = 0; i < rsa_inlen / 2; i++) {
 | 
			
		||||
            ctmp = rsa_in[i];
 | 
			
		||||
            rsa_in[i] = rsa_in[rsa_inlen - 1 - i];
 | 
			
		||||
            rsa_in[rsa_inlen - 1 - i] = ctmp;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    switch (rsa_mode) {
 | 
			
		||||
 | 
			
		||||
		case RSA_VERIFY:
 | 
			
		||||
			rsa_outlen  = RSA_public_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
		break;
 | 
			
		||||
    case RSA_VERIFY:
 | 
			
		||||
        rsa_outlen = RSA_public_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case RSA_SIGN:
 | 
			
		||||
			rsa_outlen  = RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
		break;
 | 
			
		||||
    case RSA_SIGN:
 | 
			
		||||
        rsa_outlen =
 | 
			
		||||
            RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case RSA_ENCRYPT:
 | 
			
		||||
			rsa_outlen  = RSA_public_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
		break;
 | 
			
		||||
    case RSA_ENCRYPT:
 | 
			
		||||
        rsa_outlen = RSA_public_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case RSA_DECRYPT:
 | 
			
		||||
			rsa_outlen  = RSA_private_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
		break;
 | 
			
		||||
    case RSA_DECRYPT:
 | 
			
		||||
        rsa_outlen =
 | 
			
		||||
            RSA_private_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(rsa_outlen <= 0) {
 | 
			
		||||
		BIO_printf(bio_err, "RSA operation error\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
	ret = 0;
 | 
			
		||||
	if(asn1parse) {
 | 
			
		||||
		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);
 | 
			
		||||
	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);
 | 
			
		||||
	return ret;
 | 
			
		||||
    if (rsa_outlen <= 0) {
 | 
			
		||||
        BIO_printf(bio_err, "RSA operation error\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
    if (asn1parse) {
 | 
			
		||||
        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);
 | 
			
		||||
 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);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void usage()
 | 
			
		||||
{
 | 
			
		||||
	BIO_printf(bio_err, "Usage: rsautl [options]\n");
 | 
			
		||||
	BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
	BIO_printf(bio_err, "-out file       output file\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 an RSA public\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, "-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");
 | 
			
		||||
	BIO_printf(bio_err, "-encrypt        encrypt with public key\n");
 | 
			
		||||
	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, "-passin arg    pass phrase source\n");
 | 
			
		||||
#endif
 | 
			
		||||
    BIO_printf(bio_err, "Usage: rsautl [options]\n");
 | 
			
		||||
    BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
    BIO_printf(bio_err, "-out file       output file\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 an RSA public\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, "-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");
 | 
			
		||||
    BIO_printf(bio_err, "-encrypt        encrypt with public key\n");
 | 
			
		||||
    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, "-passin arg    pass phrase source\n");
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else /* !OPENSSL_NO_RSA */
 | 
			
		||||
#else                           /* !OPENSSL_NO_RSA */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										105
									
								
								apps/s_apps.h
									
									
									
									
									
								
							
							
						
						
									
										105
									
								
								apps/s_apps.h
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -63,7 +63,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -108,69 +108,104 @@
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(OPENSSL_SYS_NETWARE)  /* conflicts with winsock2 stuff on netware */
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
/* conflicts with winsock2 stuff on netware */
 | 
			
		||||
#if !defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
# include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
 | 
			
		||||
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
 | 
			
		||||
#include <conio.h>
 | 
			
		||||
# include <conio.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(OPENSSL_SYS_MSDOS) && !defined(_WIN32)
 | 
			
		||||
#define _kbhit kbhit
 | 
			
		||||
# define _kbhit kbhit
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(OPENSSL_SYS_VMS) && !defined(FD_SET)
 | 
			
		||||
/* VAX C does not defined fd_set and friends, but it's actually quite simple */
 | 
			
		||||
/* These definitions are borrowed from SOCKETSHR.	/Richard Levitte */
 | 
			
		||||
#define MAX_NOFILE	32
 | 
			
		||||
#define	NBBY		 8		/* number of bits in a byte	*/
 | 
			
		||||
/*
 | 
			
		||||
 * 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 */
 | 
			
		||||
 | 
			
		||||
#ifndef	FD_SETSIZE
 | 
			
		||||
#define	FD_SETSIZE	MAX_NOFILE
 | 
			
		||||
#endif	/* FD_SETSIZE */
 | 
			
		||||
# ifndef FD_SETSIZE
 | 
			
		||||
#  define FD_SETSIZE      MAX_NOFILE
 | 
			
		||||
# endif                         /* FD_SETSIZE */
 | 
			
		||||
 | 
			
		||||
/* How many things we'll allow select to use. 0 if unlimited */
 | 
			
		||||
#define MAXSELFD	MAX_NOFILE
 | 
			
		||||
typedef int	fd_mask;	/* int here! VMS prototypes int, not long */
 | 
			
		||||
#define NFDBITS	(sizeof(fd_mask) * NBBY)	/* bits per mask (power of 2!)*/
 | 
			
		||||
#define NFDSHIFT 5				/* Shift based on above */
 | 
			
		||||
# define MAXSELFD        MAX_NOFILE
 | 
			
		||||
typedef int fd_mask;            /* int here! VMS prototypes int, not long */
 | 
			
		||||
# define NFDBITS (sizeof(fd_mask) * NBBY)/* bits per mask (power of 2!) */
 | 
			
		||||
# define NFDSHIFT 5             /* Shift based on above */
 | 
			
		||||
 | 
			
		||||
typedef fd_mask fd_set;
 | 
			
		||||
#define	FD_SET(n, p)	(*(p) |= (1 << ((n) % NFDBITS)))
 | 
			
		||||
#define	FD_CLR(n, p)	(*(p) &= ~(1 << ((n) % NFDBITS)))
 | 
			
		||||
#define	FD_ISSET(n, p)	(*(p) & (1 << ((n) % NFDBITS)))
 | 
			
		||||
#define FD_ZERO(p)	memset((char *)(p), 0, sizeof(*(p)))
 | 
			
		||||
# define FD_SET(n, p)    (*(p) |= (1 << ((n) % NFDBITS)))
 | 
			
		||||
# define FD_CLR(n, p)    (*(p) &= ~(1 << ((n) % NFDBITS)))
 | 
			
		||||
# define FD_ISSET(n, p)  (*(p) & (1 << ((n) % NFDBITS)))
 | 
			
		||||
# define FD_ZERO(p)      memset((char *)(p), 0, sizeof(*(p)))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define PORT            4433
 | 
			
		||||
#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, int stype,
 | 
			
		||||
                         unsigned char *context), unsigned char *context,
 | 
			
		||||
              int naccept);
 | 
			
		||||
#ifdef HEADER_X509_H
 | 
			
		||||
int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HEADER_SSL_H
 | 
			
		||||
int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file);
 | 
			
		||||
int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key);
 | 
			
		||||
int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key,
 | 
			
		||||
                       STACK_OF(X509) *chain, int build_chain);
 | 
			
		||||
int ssl_print_sigalgs(BIO *out, SSL *s);
 | 
			
		||||
int ssl_print_point_formats(BIO *out, SSL *s);
 | 
			
		||||
int ssl_print_curves(BIO *out, SSL *s, int noshared);
 | 
			
		||||
#endif
 | 
			
		||||
int ssl_print_tmp_key(BIO *out, SSL *s);
 | 
			
		||||
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);
 | 
			
		||||
                                   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);
 | 
			
		||||
 | 
			
		||||
typedef struct ssl_excert_st SSL_EXCERT;
 | 
			
		||||
 | 
			
		||||
void ssl_ctx_set_excert(SSL_CTX *ctx, SSL_EXCERT *exc);
 | 
			
		||||
void ssl_excert_free(SSL_EXCERT *exc);
 | 
			
		||||
int args_excert(char ***pargs, int *pargc,
 | 
			
		||||
                int *badarg, BIO *err, SSL_EXCERT **pexc);
 | 
			
		||||
int load_excert(SSL_EXCERT **pexc, BIO *err);
 | 
			
		||||
void print_ssl_summary(BIO *bio, SSL *s);
 | 
			
		||||
#ifdef HEADER_SSL_H
 | 
			
		||||
int args_ssl(char ***pargs, int *pargc, SSL_CONF_CTX *cctx,
 | 
			
		||||
             int *badarg, BIO *err, STACK_OF(OPENSSL_STRING) **pstr);
 | 
			
		||||
int args_ssl_call(SSL_CTX *ctx, BIO *err, SSL_CONF_CTX *cctx,
 | 
			
		||||
                  STACK_OF(OPENSSL_STRING) *str, int no_ecdhe, int no_jpake);
 | 
			
		||||
int ssl_ctx_add_crls(SSL_CTX *ctx, STACK_OF(X509_CRL) *crls,
 | 
			
		||||
                     int crl_download);
 | 
			
		||||
int ssl_load_stores(SSL_CTX *ctx, const char *vfyCApath,
 | 
			
		||||
                    const char *vfyCAfile, const char *chCApath,
 | 
			
		||||
                    const char *chCAfile, STACK_OF(X509_CRL) *crls,
 | 
			
		||||
                    int crl_download);
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2115
									
								
								apps/s_cb.c
									
									
									
									
									
								
							
							
						
						
									
										2115
									
								
								apps/s_cb.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3386
									
								
								apps/s_client.c
									
									
									
									
									
								
							
							
						
						
									
										3386
									
								
								apps/s_client.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										4937
									
								
								apps/s_server.c
									
									
									
									
									
								
							
							
						
						
									
										4937
									
								
								apps/s_server.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										956
									
								
								apps/s_socket.c
									
									
									
									
									
								
							
							
						
						
									
										956
									
								
								apps/s_socket.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										757
									
								
								apps/s_time.c
									
									
									
									
									
								
							
							
						
						
									
										757
									
								
								apps/s_time.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -58,7 +58,7 @@
 | 
			
		||||
 | 
			
		||||
#define NO_SHUTDOWN
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------
 | 
			
		||||
/* ----------------------------------------
 | 
			
		||||
   s_time - SSL client connection timer program
 | 
			
		||||
   Written and donated by Larry Streepy <streepy@healthcare.com>
 | 
			
		||||
  -----------------------------------------*/
 | 
			
		||||
@@ -70,7 +70,7 @@
 | 
			
		||||
#define USE_SOCKETS
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#ifdef OPENSSL_NO_STDIO
 | 
			
		||||
#define APPS_WIN16
 | 
			
		||||
# define APPS_WIN16
 | 
			
		||||
#endif
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
@@ -78,11 +78,11 @@
 | 
			
		||||
#include "s_apps.h"
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#ifdef WIN32_STUFF
 | 
			
		||||
#include "winmain.h"
 | 
			
		||||
#include "wintext.h"
 | 
			
		||||
# include "winmain.h"
 | 
			
		||||
# include "wintext.h"
 | 
			
		||||
#endif
 | 
			
		||||
#if !defined(OPENSSL_SYS_MSDOS)
 | 
			
		||||
#include OPENSSL_UNISTD
 | 
			
		||||
# include OPENSSL_UNISTD
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
@@ -91,9 +91,12 @@
 | 
			
		||||
#undef ioctl
 | 
			
		||||
#define ioctl ioctlsocket
 | 
			
		||||
 | 
			
		||||
#define SSL_CONNECT_NAME	"localhost:4433"
 | 
			
		||||
#define SSL_CONNECT_NAME        "localhost:4433"
 | 
			
		||||
 | 
			
		||||
/*#define TEST_CERT "client.pem" */ /* no default cert. */
 | 
			
		||||
/* no default cert. */
 | 
			
		||||
/*
 | 
			
		||||
 * #define TEST_CERT "client.pem"
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#undef BUFSIZZ
 | 
			
		||||
#define BUFSIZZ 1024*10
 | 
			
		||||
@@ -106,13 +109,13 @@
 | 
			
		||||
#define max(a,b) (((a) > (b)) ? (a) : (b))
 | 
			
		||||
 | 
			
		||||
#undef SECONDS
 | 
			
		||||
#define SECONDS	30
 | 
			
		||||
#define SECONDS 30
 | 
			
		||||
extern int verify_depth;
 | 
			
		||||
extern int verify_error;
 | 
			
		||||
 | 
			
		||||
static void s_time_usage(void);
 | 
			
		||||
static int parseArgs( int argc, char **argv );
 | 
			
		||||
static SSL *doConnection( SSL *scon );
 | 
			
		||||
static int parseArgs(int argc, char **argv);
 | 
			
		||||
static SSL *doConnection(SSL *scon);
 | 
			
		||||
static void s_time_init(void);
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
@@ -120,58 +123,58 @@ static void s_time_init(void);
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* static char *port=PORT_STR;*/
 | 
			
		||||
static char *host=SSL_CONNECT_NAME;
 | 
			
		||||
static char *t_cert_file=NULL;
 | 
			
		||||
static char *t_key_file=NULL;
 | 
			
		||||
static char *CApath=NULL;
 | 
			
		||||
static char *CAfile=NULL;
 | 
			
		||||
static char *tm_cipher=NULL;
 | 
			
		||||
static char *host = SSL_CONNECT_NAME;
 | 
			
		||||
static char *t_cert_file = NULL;
 | 
			
		||||
static char *t_key_file = NULL;
 | 
			
		||||
static char *CApath = NULL;
 | 
			
		||||
static char *CAfile = NULL;
 | 
			
		||||
static char *tm_cipher = NULL;
 | 
			
		||||
static int tm_verify = SSL_VERIFY_NONE;
 | 
			
		||||
static int maxTime = SECONDS;
 | 
			
		||||
static SSL_CTX *tm_ctx=NULL;
 | 
			
		||||
static const SSL_METHOD *s_time_meth=NULL;
 | 
			
		||||
static char *s_www_path=NULL;
 | 
			
		||||
static long bytes_read=0; 
 | 
			
		||||
static int st_bugs=0;
 | 
			
		||||
static int perform=0;
 | 
			
		||||
static SSL_CTX *tm_ctx = NULL;
 | 
			
		||||
static const SSL_METHOD *s_time_meth = NULL;
 | 
			
		||||
static char *s_www_path = NULL;
 | 
			
		||||
static long bytes_read = 0;
 | 
			
		||||
static int st_bugs = 0;
 | 
			
		||||
static int perform = 0;
 | 
			
		||||
#ifdef FIONBIO
 | 
			
		||||
static int t_nbio=0;
 | 
			
		||||
static int t_nbio = 0;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef OPENSSL_SYS_WIN32
 | 
			
		||||
static int exitNow = 0;		/* Set when it's time to exit main */
 | 
			
		||||
static int exitNow = 0;         /* Set when it's time to exit main */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void s_time_init(void)
 | 
			
		||||
	{
 | 
			
		||||
	host=SSL_CONNECT_NAME;
 | 
			
		||||
	t_cert_file=NULL;
 | 
			
		||||
	t_key_file=NULL;
 | 
			
		||||
	CApath=NULL;
 | 
			
		||||
	CAfile=NULL;
 | 
			
		||||
	tm_cipher=NULL;
 | 
			
		||||
	tm_verify = SSL_VERIFY_NONE;
 | 
			
		||||
	maxTime = SECONDS;
 | 
			
		||||
	tm_ctx=NULL;
 | 
			
		||||
	s_time_meth=NULL;
 | 
			
		||||
	s_www_path=NULL;
 | 
			
		||||
	bytes_read=0; 
 | 
			
		||||
	st_bugs=0;
 | 
			
		||||
	perform=0;
 | 
			
		||||
{
 | 
			
		||||
    host = SSL_CONNECT_NAME;
 | 
			
		||||
    t_cert_file = NULL;
 | 
			
		||||
    t_key_file = NULL;
 | 
			
		||||
    CApath = NULL;
 | 
			
		||||
    CAfile = NULL;
 | 
			
		||||
    tm_cipher = NULL;
 | 
			
		||||
    tm_verify = SSL_VERIFY_NONE;
 | 
			
		||||
    maxTime = SECONDS;
 | 
			
		||||
    tm_ctx = NULL;
 | 
			
		||||
    s_time_meth = NULL;
 | 
			
		||||
    s_www_path = NULL;
 | 
			
		||||
    bytes_read = 0;
 | 
			
		||||
    st_bugs = 0;
 | 
			
		||||
    perform = 0;
 | 
			
		||||
 | 
			
		||||
#ifdef FIONBIO
 | 
			
		||||
	t_nbio=0;
 | 
			
		||||
    t_nbio = 0;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef OPENSSL_SYS_WIN32
 | 
			
		||||
	exitNow = 0;		/* Set when it's time to exit main */
 | 
			
		||||
    exitNow = 0;                /* Set when it's time to exit main */
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
 * usage - display usage message
 | 
			
		||||
 */
 | 
			
		||||
static void s_time_usage(void)
 | 
			
		||||
{
 | 
			
		||||
	static char umsg[] = "\
 | 
			
		||||
    static char umsg[] = "\
 | 
			
		||||
-time arg     - max number of seconds to collect data, default %d\n\
 | 
			
		||||
-verify arg   - turn on peer certificate verification, arg == depth\n\
 | 
			
		||||
-cert arg     - certificate file to use, PEM format assumed\n\
 | 
			
		||||
@@ -181,19 +184,20 @@ static void s_time_usage(void)
 | 
			
		||||
-CAfile arg   - PEM format file of CA's\n\
 | 
			
		||||
-cipher       - preferred cipher to use, play with 'openssl ciphers'\n\n";
 | 
			
		||||
 | 
			
		||||
	printf( "usage: s_time <args>\n\n" );
 | 
			
		||||
    printf("usage: s_time <args>\n\n");
 | 
			
		||||
 | 
			
		||||
	printf("-connect host:port - host:port to connect to (default is %s)\n",SSL_CONNECT_NAME);
 | 
			
		||||
    printf("-connect host:port - host:port to connect to (default is %s)\n",
 | 
			
		||||
           SSL_CONNECT_NAME);
 | 
			
		||||
#ifdef FIONBIO
 | 
			
		||||
	printf("-nbio         - Run with non-blocking IO\n");
 | 
			
		||||
	printf("-ssl2         - Just use SSLv2\n");
 | 
			
		||||
	printf("-ssl3         - Just use SSLv3\n");
 | 
			
		||||
	printf("-bugs         - Turn on SSL bug compatibility\n");
 | 
			
		||||
	printf("-new          - Just time new connections\n");
 | 
			
		||||
	printf("-reuse        - Just time connection reuse\n");
 | 
			
		||||
	printf("-www page     - Retrieve 'page' from the site\n");
 | 
			
		||||
    printf("-nbio         - Run with non-blocking IO\n");
 | 
			
		||||
    printf("-ssl2         - Just use SSLv2\n");
 | 
			
		||||
    printf("-ssl3         - Just use SSLv3\n");
 | 
			
		||||
    printf("-bugs         - Turn on SSL bug compatibility\n");
 | 
			
		||||
    printf("-new          - Just time new connections\n");
 | 
			
		||||
    printf("-reuse        - Just time connection reuse\n");
 | 
			
		||||
    printf("-www page     - Retrieve 'page' from the site\n");
 | 
			
		||||
#endif
 | 
			
		||||
	printf( umsg,SECONDS );
 | 
			
		||||
    printf(umsg, SECONDS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
@@ -205,428 +209,433 @@ static int parseArgs(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    int badop = 0;
 | 
			
		||||
 | 
			
		||||
    verify_depth=0;
 | 
			
		||||
    verify_error=X509_V_OK;
 | 
			
		||||
    verify_depth = 0;
 | 
			
		||||
    verify_error = X509_V_OK;
 | 
			
		||||
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
	if (strcmp(*argv,"-connect") == 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (--argc < 1) goto bad;
 | 
			
		||||
		host= *(++argv);
 | 
			
		||||
		}
 | 
			
		||||
        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;
 | 
			
		||||
		host= *(++argv);
 | 
			
		||||
		}
 | 
			
		||||
	else if( strcmp(*argv,"-port") == 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (--argc < 1) goto bad;
 | 
			
		||||
		port= *(++argv);
 | 
			
		||||
		}
 | 
			
		||||
        else if (strcmp(*argv, "-host") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            host = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-port") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            port = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
	else if (strcmp(*argv,"-reuse") == 0)
 | 
			
		||||
		perform=2;
 | 
			
		||||
	else if (strcmp(*argv,"-new") == 0)
 | 
			
		||||
		perform=1;
 | 
			
		||||
	else if( strcmp(*argv,"-verify") == 0) {
 | 
			
		||||
        else if (strcmp(*argv, "-reuse") == 0)
 | 
			
		||||
            perform = 2;
 | 
			
		||||
        else if (strcmp(*argv, "-new") == 0)
 | 
			
		||||
            perform = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-verify") == 0) {
 | 
			
		||||
 | 
			
		||||
	    tm_verify=SSL_VERIFY_PEER|SSL_VERIFY_CLIENT_ONCE;
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    verify_depth=atoi(*(++argv));
 | 
			
		||||
	    BIO_printf(bio_err,"verify depth is %d\n",verify_depth);
 | 
			
		||||
            tm_verify = SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE;
 | 
			
		||||
            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) {
 | 
			
		||||
        } else if (strcmp(*argv, "-cert") == 0) {
 | 
			
		||||
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    t_cert_file= *(++argv);
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            t_cert_file = *(++argv);
 | 
			
		||||
 | 
			
		||||
	} else if( strcmp(*argv,"-key") == 0) {
 | 
			
		||||
        } else if (strcmp(*argv, "-key") == 0) {
 | 
			
		||||
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    t_key_file= *(++argv);
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            t_key_file = *(++argv);
 | 
			
		||||
 | 
			
		||||
	} else if( strcmp(*argv,"-CApath") == 0) {
 | 
			
		||||
        } else if (strcmp(*argv, "-CApath") == 0) {
 | 
			
		||||
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    CApath= *(++argv);
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            CApath = *(++argv);
 | 
			
		||||
 | 
			
		||||
	} else if( strcmp(*argv,"-CAfile") == 0) {
 | 
			
		||||
        } else if (strcmp(*argv, "-CAfile") == 0) {
 | 
			
		||||
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    CAfile= *(++argv);
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            CAfile = *(++argv);
 | 
			
		||||
 | 
			
		||||
	} else if( strcmp(*argv,"-cipher") == 0) {
 | 
			
		||||
        } else if (strcmp(*argv, "-cipher") == 0) {
 | 
			
		||||
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    tm_cipher= *(++argv);
 | 
			
		||||
	}
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            tm_cipher = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
#ifdef FIONBIO
 | 
			
		||||
	else if(strcmp(*argv,"-nbio") == 0) {
 | 
			
		||||
	    t_nbio=1;
 | 
			
		||||
	}
 | 
			
		||||
        else if (strcmp(*argv, "-nbio") == 0) {
 | 
			
		||||
            t_nbio = 1;
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
	else if(strcmp(*argv,"-www") == 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (--argc < 1) goto bad;
 | 
			
		||||
		s_www_path= *(++argv);
 | 
			
		||||
		if(strlen(s_www_path) > MYBUFSIZ-100)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"-www option too long\n");
 | 
			
		||||
			badop=1;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else if(strcmp(*argv,"-bugs") == 0)
 | 
			
		||||
	    st_bugs=1;
 | 
			
		||||
        else if (strcmp(*argv, "-www") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            s_www_path = *(++argv);
 | 
			
		||||
            if (strlen(s_www_path) > MYBUFSIZ - 100) {
 | 
			
		||||
                BIO_printf(bio_err, "-www option too long\n");
 | 
			
		||||
                badop = 1;
 | 
			
		||||
            }
 | 
			
		||||
        } else if (strcmp(*argv, "-bugs") == 0)
 | 
			
		||||
            st_bugs = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_SSL2
 | 
			
		||||
	else if(strcmp(*argv,"-ssl2") == 0)
 | 
			
		||||
	    s_time_meth=SSLv2_client_method();
 | 
			
		||||
        else if (strcmp(*argv, "-ssl2") == 0)
 | 
			
		||||
            s_time_meth = SSLv2_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SSL3
 | 
			
		||||
	else if(strcmp(*argv,"-ssl3") == 0)
 | 
			
		||||
	    s_time_meth=SSLv3_client_method();
 | 
			
		||||
        else if (strcmp(*argv, "-ssl3") == 0)
 | 
			
		||||
            s_time_meth = SSLv3_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
	else if( strcmp(*argv,"-time") == 0) {
 | 
			
		||||
        else if (strcmp(*argv, "-time") == 0) {
 | 
			
		||||
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    maxTime= atoi(*(++argv));
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
	    BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
	    badop=1;
 | 
			
		||||
	    break;
 | 
			
		||||
	}
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            maxTime = atoi(*(++argv));
 | 
			
		||||
            if(maxTime <= 0) {
 | 
			
		||||
                BIO_printf(bio_err, "time must be > 0\n");
 | 
			
		||||
                badop = 1;
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badop = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (perform == 0) perform=3;
 | 
			
		||||
    if (perform == 0)
 | 
			
		||||
        perform = 3;
 | 
			
		||||
 | 
			
		||||
    if(badop) {
 | 
			
		||||
bad:
 | 
			
		||||
		s_time_usage();
 | 
			
		||||
		return -1;
 | 
			
		||||
    if (badop) {
 | 
			
		||||
 bad:
 | 
			
		||||
        s_time_usage();
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	return 0;			/* Valid args */
 | 
			
		||||
    return 0;                   /* Valid args */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
 * TIME - time functions
 | 
			
		||||
 */
 | 
			
		||||
#define START	0
 | 
			
		||||
#define STOP	1
 | 
			
		||||
#define START   0
 | 
			
		||||
#define STOP    1
 | 
			
		||||
 | 
			
		||||
static double tm_Time_F(int s)
 | 
			
		||||
	{
 | 
			
		||||
	return app_tminterval(s,1);
 | 
			
		||||
	}
 | 
			
		||||
{
 | 
			
		||||
    return app_tminterval(s, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
 * MAIN - main processing area for client
 | 
			
		||||
 *			real name depends on MONOLITH
 | 
			
		||||
 *                      real name depends on MONOLITH
 | 
			
		||||
 */
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	double totalTime = 0.0;
 | 
			
		||||
	int nConn = 0;
 | 
			
		||||
	SSL *scon=NULL;
 | 
			
		||||
	long finishtime=0;
 | 
			
		||||
	int ret=1,i;
 | 
			
		||||
	MS_STATIC char buf[1024*8];
 | 
			
		||||
	int ver;
 | 
			
		||||
{
 | 
			
		||||
    double totalTime = 0.0;
 | 
			
		||||
    int nConn = 0;
 | 
			
		||||
    SSL *scon = NULL;
 | 
			
		||||
    long finishtime = 0;
 | 
			
		||||
    int ret = 1, i;
 | 
			
		||||
    MS_STATIC char buf[1024 * 8];
 | 
			
		||||
    int ver;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
	s_time_init();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
    s_time_init();
 | 
			
		||||
 | 
			
		||||
	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 !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
	s_time_meth=SSLv23_client_method();
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
	s_time_meth=SSLv3_client_method();
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL2)
 | 
			
		||||
	s_time_meth=SSLv2_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
    s_time_meth = SSLv23_client_method();
 | 
			
		||||
 | 
			
		||||
	/* parse the command line arguments */
 | 
			
		||||
	if( parseArgs( argc, argv ) < 0 )
 | 
			
		||||
		goto end;
 | 
			
		||||
    /* parse the command line arguments */
 | 
			
		||||
    if (parseArgs(argc, argv) < 0)
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	OpenSSL_add_ssl_algorithms();
 | 
			
		||||
	if ((tm_ctx=SSL_CTX_new(s_time_meth)) == NULL) return(1);
 | 
			
		||||
    OpenSSL_add_ssl_algorithms();
 | 
			
		||||
    if ((tm_ctx = SSL_CTX_new(s_time_meth)) == NULL)
 | 
			
		||||
        return (1);
 | 
			
		||||
 | 
			
		||||
	SSL_CTX_set_quiet_shutdown(tm_ctx,1);
 | 
			
		||||
    SSL_CTX_set_quiet_shutdown(tm_ctx, 1);
 | 
			
		||||
 | 
			
		||||
	if (st_bugs) SSL_CTX_set_options(tm_ctx,SSL_OP_ALL);
 | 
			
		||||
	SSL_CTX_set_cipher_list(tm_ctx,tm_cipher);
 | 
			
		||||
	if(!set_cert_stuff(tm_ctx,t_cert_file,t_key_file)) 
 | 
			
		||||
		goto end;
 | 
			
		||||
    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;
 | 
			
		||||
 | 
			
		||||
	SSL_load_error_strings();
 | 
			
		||||
    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"); */
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		/* goto end; */
 | 
			
		||||
		}
 | 
			
		||||
    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");
 | 
			
		||||
         */
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        /* goto end; */
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (tm_cipher == NULL)
 | 
			
		||||
		tm_cipher = getenv("SSL_CIPHER");
 | 
			
		||||
    if (tm_cipher == NULL)
 | 
			
		||||
        tm_cipher = getenv("SSL_CIPHER");
 | 
			
		||||
 | 
			
		||||
	if (tm_cipher == NULL ) {
 | 
			
		||||
		fprintf( stderr, "No CIPHER specified\n" );
 | 
			
		||||
	}
 | 
			
		||||
    if (tm_cipher == NULL) {
 | 
			
		||||
        fprintf(stderr, "No CIPHER specified\n");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!(perform & 1)) goto next;
 | 
			
		||||
	printf( "Collecting connection statistics for %d seconds\n", maxTime );
 | 
			
		||||
    if (!(perform & 1))
 | 
			
		||||
        goto next;
 | 
			
		||||
    printf("Collecting connection statistics for %d seconds\n", maxTime);
 | 
			
		||||
 | 
			
		||||
	/* Loop and time how long it takes to make connections */
 | 
			
		||||
    /* Loop and time how long it takes to make connections */
 | 
			
		||||
 | 
			
		||||
	bytes_read=0;
 | 
			
		||||
	finishtime=(long)time(NULL)+maxTime;
 | 
			
		||||
	tm_Time_F(START);
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (finishtime < (long)time(NULL)) break;
 | 
			
		||||
    bytes_read = 0;
 | 
			
		||||
    finishtime = (long)time(NULL) + maxTime;
 | 
			
		||||
    tm_Time_F(START);
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (finishtime < (long)time(NULL))
 | 
			
		||||
            break;
 | 
			
		||||
#ifdef WIN32_STUFF
 | 
			
		||||
 | 
			
		||||
		if( flushWinMsgs(0) == -1 )
 | 
			
		||||
			goto end;
 | 
			
		||||
        if (flushWinMsgs(0) == -1)
 | 
			
		||||
            goto end;
 | 
			
		||||
 | 
			
		||||
		if( waitingToDie || exitNow )		/* we're dead */
 | 
			
		||||
			goto end;
 | 
			
		||||
        if (waitingToDie || exitNow) /* we're dead */
 | 
			
		||||
            goto end;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		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);
 | 
			
		||||
			SSL_write(scon,buf,strlen(buf));
 | 
			
		||||
			while ((i=SSL_read(scon,buf,sizeof(buf))) > 0)
 | 
			
		||||
				bytes_read+=i;
 | 
			
		||||
			}
 | 
			
		||||
        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);
 | 
			
		||||
            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);
 | 
			
		||||
        SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
 | 
			
		||||
#else
 | 
			
		||||
		SSL_shutdown(scon);
 | 
			
		||||
        SSL_shutdown(scon);
 | 
			
		||||
#endif
 | 
			
		||||
		SHUTDOWN2(SSL_get_fd(scon));
 | 
			
		||||
        SHUTDOWN2(SSL_get_fd(scon));
 | 
			
		||||
 | 
			
		||||
		nConn += 1;
 | 
			
		||||
		if (SSL_session_reused(scon))
 | 
			
		||||
			ver='r';
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			ver=SSL_version(scon);
 | 
			
		||||
			if (ver == TLS1_VERSION)
 | 
			
		||||
				ver='t';
 | 
			
		||||
			else if (ver == SSL3_VERSION)
 | 
			
		||||
				ver='3';
 | 
			
		||||
			else if (ver == SSL2_VERSION)
 | 
			
		||||
				ver='2';
 | 
			
		||||
			else
 | 
			
		||||
				ver='*';
 | 
			
		||||
			}
 | 
			
		||||
		fputc(ver,stdout);
 | 
			
		||||
		fflush(stdout);
 | 
			
		||||
        nConn += 1;
 | 
			
		||||
        if (SSL_session_reused(scon))
 | 
			
		||||
            ver = 'r';
 | 
			
		||||
        else {
 | 
			
		||||
            ver = SSL_version(scon);
 | 
			
		||||
            if (ver == TLS1_VERSION)
 | 
			
		||||
                ver = 't';
 | 
			
		||||
            else if (ver == SSL3_VERSION)
 | 
			
		||||
                ver = '3';
 | 
			
		||||
            else if (ver == SSL2_VERSION)
 | 
			
		||||
                ver = '2';
 | 
			
		||||
            else
 | 
			
		||||
                ver = '*';
 | 
			
		||||
        }
 | 
			
		||||
        fputc(ver, stdout);
 | 
			
		||||
        fflush(stdout);
 | 
			
		||||
 | 
			
		||||
		SSL_free( scon );
 | 
			
		||||
		scon=NULL;
 | 
			
		||||
		}
 | 
			
		||||
	totalTime += tm_Time_F(STOP); /* Add the time for this iteration */
 | 
			
		||||
        SSL_free(scon);
 | 
			
		||||
        scon = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    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);
 | 
			
		||||
    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);
 | 
			
		||||
 | 
			
		||||
	/* 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;
 | 
			
		||||
	printf( "\n\nNow timing with session id reuse.\n" );
 | 
			
		||||
 next:
 | 
			
		||||
    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 )
 | 
			
		||||
		{
 | 
			
		||||
		fprintf( stderr, "Unable to get connection\n" );
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    /* Get an SSL object so we can reuse the session id */
 | 
			
		||||
    if ((scon = doConnection(NULL)) == NULL) {
 | 
			
		||||
        fprintf(stderr, "Unable to get connection\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (s_www_path != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
			
		||||
		SSL_write(scon,buf,strlen(buf));
 | 
			
		||||
		while (SSL_read(scon,buf,sizeof(buf)) > 0)
 | 
			
		||||
			;
 | 
			
		||||
		}
 | 
			
		||||
    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) ;
 | 
			
		||||
    }
 | 
			
		||||
#ifdef NO_SHUTDOWN
 | 
			
		||||
	SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
 | 
			
		||||
    SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
 | 
			
		||||
#else
 | 
			
		||||
	SSL_shutdown(scon);
 | 
			
		||||
    SSL_shutdown(scon);
 | 
			
		||||
#endif
 | 
			
		||||
	SHUTDOWN2(SSL_get_fd(scon));
 | 
			
		||||
    SHUTDOWN2(SSL_get_fd(scon));
 | 
			
		||||
 | 
			
		||||
	nConn = 0;
 | 
			
		||||
	totalTime = 0.0;
 | 
			
		||||
    nConn = 0;
 | 
			
		||||
    totalTime = 0.0;
 | 
			
		||||
 | 
			
		||||
	finishtime=(long)time(NULL)+maxTime;
 | 
			
		||||
    finishtime = (long)time(NULL) + maxTime;
 | 
			
		||||
 | 
			
		||||
	printf( "starting\n" );
 | 
			
		||||
	bytes_read=0;
 | 
			
		||||
	tm_Time_F(START);
 | 
			
		||||
		
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (finishtime < (long)time(NULL)) break;
 | 
			
		||||
    printf("starting\n");
 | 
			
		||||
    bytes_read = 0;
 | 
			
		||||
    tm_Time_F(START);
 | 
			
		||||
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (finishtime < (long)time(NULL))
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
#ifdef WIN32_STUFF
 | 
			
		||||
		if( flushWinMsgs(0) == -1 )
 | 
			
		||||
			goto end;
 | 
			
		||||
        if (flushWinMsgs(0) == -1)
 | 
			
		||||
            goto end;
 | 
			
		||||
 | 
			
		||||
		if( waitingToDie || exitNow )	/* we're dead */
 | 
			
		||||
			goto end;
 | 
			
		||||
        if (waitingToDie || exitNow) /* we're dead */
 | 
			
		||||
            goto end;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	 	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);
 | 
			
		||||
			SSL_write(scon,buf,strlen(buf));
 | 
			
		||||
			while ((i=SSL_read(scon,buf,sizeof(buf))) > 0)
 | 
			
		||||
				bytes_read+=i;
 | 
			
		||||
			}
 | 
			
		||||
        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);
 | 
			
		||||
            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);
 | 
			
		||||
        SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
 | 
			
		||||
#else
 | 
			
		||||
		SSL_shutdown(scon);
 | 
			
		||||
        SSL_shutdown(scon);
 | 
			
		||||
#endif
 | 
			
		||||
		SHUTDOWN2(SSL_get_fd(scon));
 | 
			
		||||
	
 | 
			
		||||
		nConn += 1;
 | 
			
		||||
		if (SSL_session_reused(scon))
 | 
			
		||||
			ver='r';
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			ver=SSL_version(scon);
 | 
			
		||||
			if (ver == TLS1_VERSION)
 | 
			
		||||
				ver='t';
 | 
			
		||||
			else if (ver == SSL3_VERSION)
 | 
			
		||||
				ver='3';
 | 
			
		||||
			else if (ver == SSL2_VERSION)
 | 
			
		||||
				ver='2';
 | 
			
		||||
			else
 | 
			
		||||
				ver='*';
 | 
			
		||||
			}
 | 
			
		||||
		fputc(ver,stdout);
 | 
			
		||||
		fflush(stdout);
 | 
			
		||||
		}
 | 
			
		||||
	totalTime += tm_Time_F(STOP); /* Add the time for this iteration*/
 | 
			
		||||
        SHUTDOWN2(SSL_get_fd(scon));
 | 
			
		||||
 | 
			
		||||
        nConn += 1;
 | 
			
		||||
        if (SSL_session_reused(scon))
 | 
			
		||||
            ver = 'r';
 | 
			
		||||
        else {
 | 
			
		||||
            ver = SSL_version(scon);
 | 
			
		||||
            if (ver == TLS1_VERSION)
 | 
			
		||||
                ver = 't';
 | 
			
		||||
            else if (ver == SSL3_VERSION)
 | 
			
		||||
                ver = '3';
 | 
			
		||||
            else if (ver == SSL2_VERSION)
 | 
			
		||||
                ver = '2';
 | 
			
		||||
            else
 | 
			
		||||
                ver = '*';
 | 
			
		||||
        }
 | 
			
		||||
        fputc(ver, stdout);
 | 
			
		||||
        fflush(stdout);
 | 
			
		||||
    }
 | 
			
		||||
    totalTime += tm_Time_F(STOP); /* Add the time for this iteration */
 | 
			
		||||
 | 
			
		||||
	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?nConn:1));
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (scon != NULL) SSL_free(scon);
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (scon != NULL)
 | 
			
		||||
        SSL_free(scon);
 | 
			
		||||
 | 
			
		||||
	if (tm_ctx != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		SSL_CTX_free(tm_ctx);
 | 
			
		||||
		tm_ctx=NULL;
 | 
			
		||||
		}
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    if (tm_ctx != NULL) {
 | 
			
		||||
        SSL_CTX_free(tm_ctx);
 | 
			
		||||
        tm_ctx = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
/*-
 | 
			
		||||
 * doConnection - make a connection
 | 
			
		||||
 * Args:
 | 
			
		||||
 *		scon	= earlier ssl connection for session id, or NULL
 | 
			
		||||
 *              scon    = earlier ssl connection for session id, or NULL
 | 
			
		||||
 * Returns:
 | 
			
		||||
 *		SSL *	= the connection pointer.
 | 
			
		||||
 *              SSL *   = the connection pointer.
 | 
			
		||||
 */
 | 
			
		||||
static SSL *doConnection(SSL *scon)
 | 
			
		||||
	{
 | 
			
		||||
	BIO *conn;
 | 
			
		||||
	SSL *serverCon;
 | 
			
		||||
	int width, i;
 | 
			
		||||
	fd_set readfds;
 | 
			
		||||
{
 | 
			
		||||
    BIO *conn;
 | 
			
		||||
    SSL *serverCon;
 | 
			
		||||
    int width, i;
 | 
			
		||||
    fd_set readfds;
 | 
			
		||||
 | 
			
		||||
	if ((conn=BIO_new(BIO_s_connect())) == NULL)
 | 
			
		||||
		return(NULL);
 | 
			
		||||
    if ((conn = BIO_new(BIO_s_connect())) == NULL)
 | 
			
		||||
        return (NULL);
 | 
			
		||||
 | 
			
		||||
/*	BIO_set_conn_port(conn,port);*/
 | 
			
		||||
	BIO_set_conn_hostname(conn,host);
 | 
			
		||||
/*      BIO_set_conn_port(conn,port);*/
 | 
			
		||||
    BIO_set_conn_hostname(conn, host);
 | 
			
		||||
 | 
			
		||||
	if (scon == NULL)
 | 
			
		||||
		serverCon=SSL_new(tm_ctx);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		serverCon=scon;
 | 
			
		||||
		SSL_set_connect_state(serverCon);
 | 
			
		||||
		}
 | 
			
		||||
    if (scon == NULL)
 | 
			
		||||
        serverCon = SSL_new(tm_ctx);
 | 
			
		||||
    else {
 | 
			
		||||
        serverCon = scon;
 | 
			
		||||
        SSL_set_connect_state(serverCon);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	SSL_set_bio(serverCon,conn,conn);
 | 
			
		||||
    SSL_set_bio(serverCon, conn, conn);
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
	if( scon != NULL )
 | 
			
		||||
		SSL_set_session(serverCon,SSL_get_session(scon));
 | 
			
		||||
    if (scon != NULL)
 | 
			
		||||
        SSL_set_session(serverCon, SSL_get_session(scon));
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	/* ok, lets connect */
 | 
			
		||||
	for(;;) {
 | 
			
		||||
		i=SSL_connect(serverCon);
 | 
			
		||||
		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 *).
 | 
			
		||||
			 */
 | 
			
		||||
			select(width,(void *)&readfds,NULL,NULL,NULL);
 | 
			
		||||
			continue;
 | 
			
		||||
			}
 | 
			
		||||
		break;
 | 
			
		||||
		}
 | 
			
		||||
	if(i <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"ERROR\n");
 | 
			
		||||
		if (verify_error != X509_V_OK)
 | 
			
		||||
			BIO_printf(bio_err,"verify error:%s\n",
 | 
			
		||||
				X509_verify_cert_error_string(verify_error));
 | 
			
		||||
		else
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
		if (scon == NULL)
 | 
			
		||||
			SSL_free(serverCon);
 | 
			
		||||
		return NULL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	return serverCon;
 | 
			
		||||
	}
 | 
			
		||||
    /* ok, lets connect */
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        i = SSL_connect(serverCon);
 | 
			
		||||
        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 *).
 | 
			
		||||
             */
 | 
			
		||||
            select(width, (void *)&readfds, NULL, NULL, NULL);
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    if (i <= 0) {
 | 
			
		||||
        BIO_printf(bio_err, "ERROR\n");
 | 
			
		||||
        if (verify_error != X509_V_OK)
 | 
			
		||||
            BIO_printf(bio_err, "verify error:%s\n",
 | 
			
		||||
                       X509_verify_cert_error_string(verify_error));
 | 
			
		||||
        else
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
        if (scon == NULL)
 | 
			
		||||
            SSL_free(serverCon);
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return serverCon;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										413
									
								
								apps/server.pem
									
									
									
									
									
								
							
							
						
						
									
										413
									
								
								apps/server.pem
									
									
									
									
									
								
							@@ -1,369 +1,52 @@
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
 | 
			
		||||
subject= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Server test cert (512 bit)
 | 
			
		||||
subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = Test Server Cert
 | 
			
		||||
issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB6TCCAVICAQYwDQYJKoZIhvcNAQEEBQAwWzELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYD
 | 
			
		||||
VQQDExJUZXN0IENBICgxMDI0IGJpdCkwHhcNMDAxMDE2MjIzMTAzWhcNMDMwMTE0
 | 
			
		||||
MjIzMTAzWjBjMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
 | 
			
		||||
A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxIzAhBgNVBAMTGlNlcnZlciB0ZXN0IGNl
 | 
			
		||||
cnQgKDUxMiBiaXQpMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ+zw4Qnlf8SMVIP
 | 
			
		||||
Fe9GEcStgOY2Ww/dgNdhjeD8ckUJNP5VZkVDTGiXav6ooKXfX3j/7tdkuD8Ey2//
 | 
			
		||||
Kv7+ue0CAwEAATANBgkqhkiG9w0BAQQFAAOBgQCT0grFQeZaqYb5EYfk20XixZV4
 | 
			
		||||
GmyAbXMftG1Eo7qGiMhYzRwGNWxEYojf5PZkYZXvSqZ/ZXHXa4g59jK/rJNnaVGM
 | 
			
		||||
k+xIX8mxQvlV0n5O9PIha5BX5teZnkHKgL8aKKLKW1BK7YTngsfSzzaeame5iKfz
 | 
			
		||||
itAE+OjGF+PFKbwX8Q==
 | 
			
		||||
MIID5zCCAs+gAwIBAgIJALnu1NlVpZ6zMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV
 | 
			
		||||
BAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMSIwIAYDVQQLDBlGT1IgVEVT
 | 
			
		||||
VElORyBQVVJQT1NFUyBPTkxZMSUwIwYDVQQDDBxPcGVuU1NMIFRlc3QgSW50ZXJt
 | 
			
		||||
ZWRpYXRlIENBMB4XDTExMTIwODE0MDE0OFoXDTIxMTAxNjE0MDE0OFowZDELMAkG
 | 
			
		||||
A1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBU
 | 
			
		||||
RVNUSU5HIFBVUlBPU0VTIE9OTFkxGTAXBgNVBAMMEFRlc3QgU2VydmVyIENlcnQw
 | 
			
		||||
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDzhPOSNtyyRspmeuUpxfNJ
 | 
			
		||||
KCLTuf7g3uQ4zu4iHOmRO5TQci+HhVlLZrHF9XqFXcIP0y4pWDbMSGuiorUmzmfi
 | 
			
		||||
R7bfSdI/+qIQt8KXRH6HNG1t8ou0VSvWId5TS5Dq/er5ODUr9OaaDva7EquHIcMv
 | 
			
		||||
vPQGuI+OEAcnleVCy9HVEIySrO4P3CNIicnGkwwiAud05yUAq/gPXBC1hTtmlPD7
 | 
			
		||||
TVcGVSEiJdvzqqlgv02qedGrkki6GY4S7GjZxrrf7Foc2EP+51LJzwLQx3/JfrCU
 | 
			
		||||
41NEWAsu/Sl0tQabXESN+zJ1pDqoZ3uHMgpQjeGiE0olr+YcsSW/tJmiU9OiAr8R
 | 
			
		||||
AgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBeAwLAYJYIZI
 | 
			
		||||
AYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQW
 | 
			
		||||
BBSCvM8AABPR9zklmifnr9LvIBturDAfBgNVHSMEGDAWgBQ2w2yI55X+sL3szj49
 | 
			
		||||
hqshgYfa2jANBgkqhkiG9w0BAQUFAAOCAQEAqb1NV0B0/pbpK9Z4/bNjzPQLTRLK
 | 
			
		||||
WnSNm/Jh5v0GEUOE/Beg7GNjNrmeNmqxAlpqWz9qoeoFZax+QBpIZYjROU3TS3fp
 | 
			
		||||
yLsrnlr0CDQ5R7kCCDGa8dkXxemmpZZLbUCpW2Uoy8sAA4JjN9OtsZY7dvUXFgJ7
 | 
			
		||||
vVNTRnI01ghknbtD+2SxSQd3CWF6QhcRMAzZJ1z1cbbwGDDzfvGFPzJ+Sq+zEPds
 | 
			
		||||
xoVLLSetCiBc+40ZcDS5dV98h9XD7JMTQfxzA7mNGv73JoZJA6nFgj+ADSlJsY/t
 | 
			
		||||
JBv+z1iQRueoh9Qeee+ZbRifPouCB8FDx+AltvHTANdAq0t/K3o+pplMVA==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIIBPAIBAAJBAJ+zw4Qnlf8SMVIPFe9GEcStgOY2Ww/dgNdhjeD8ckUJNP5VZkVD
 | 
			
		||||
TGiXav6ooKXfX3j/7tdkuD8Ey2//Kv7+ue0CAwEAAQJAN6W31vDEP2DjdqhzCDDu
 | 
			
		||||
OA4NACqoiFqyblo7yc2tM4h4xMbC3Yx5UKMN9ZkCtX0gzrz6DyF47bdKcWBzNWCj
 | 
			
		||||
gQIhANEoojVt7hq+SQ6MCN6FTAysGgQf56Q3TYoJMoWvdiXVAiEAw3e3rc+VJpOz
 | 
			
		||||
rHuDo6bgpjUAAXM+v3fcpsfZSNO6V7kCIQCtbVjanpUwvZkMI9by02oUk9taki3b
 | 
			
		||||
PzPfAfNPYAbCJQIhAJXNQDWyqwn/lGmR11cqY2y9nZ1+5w3yHGatLrcDnQHxAiEA
 | 
			
		||||
vnlEGo8K85u+KwIOimM48ZG8oTk7iFdkqLJR1utT3aU=
 | 
			
		||||
MIIEpAIBAAKCAQEA84TzkjbcskbKZnrlKcXzSSgi07n+4N7kOM7uIhzpkTuU0HIv
 | 
			
		||||
h4VZS2axxfV6hV3CD9MuKVg2zEhroqK1Js5n4ke230nSP/qiELfCl0R+hzRtbfKL
 | 
			
		||||
tFUr1iHeU0uQ6v3q+Tg1K/Tmmg72uxKrhyHDL7z0BriPjhAHJ5XlQsvR1RCMkqzu
 | 
			
		||||
D9wjSInJxpMMIgLndOclAKv4D1wQtYU7ZpTw+01XBlUhIiXb86qpYL9NqnnRq5JI
 | 
			
		||||
uhmOEuxo2ca63+xaHNhD/udSyc8C0Md/yX6wlONTRFgLLv0pdLUGm1xEjfsydaQ6
 | 
			
		||||
qGd7hzIKUI3hohNKJa/mHLElv7SZolPTogK/EQIDAQABAoIBAADq9FwNtuE5IRQn
 | 
			
		||||
zGtO4q7Y5uCzZ8GDNYr9RKp+P2cbuWDbvVAecYq2NV9QoIiWJOAYZKklOvekIju3
 | 
			
		||||
r0UZLA0PRiIrTg6NrESx3JrjWDK8QNlUO7CPTZ39/K+FrmMkV9lem9yxjJjyC34D
 | 
			
		||||
AQB+YRTx+l14HppjdxNwHjAVQpIx/uO2F5xAMuk32+3K+pq9CZUtrofe1q4Agj9R
 | 
			
		||||
5s8mSy9pbRo9kW9wl5xdEotz1LivFOEiqPUJTUq5J5PeMKao3vdK726XI4Z455Nm
 | 
			
		||||
W2/MA0YV0ug2FYinHcZdvKM6dimH8GLfa3X8xKRfzjGjTiMSwsdjgMa4awY3tEHH
 | 
			
		||||
674jhAECgYEA/zqMrc0zsbNk83sjgaYIug5kzEpN4ic020rSZsmQxSCerJTgNhmg
 | 
			
		||||
utKSCt0Re09Jt3LqG48msahX8ycqDsHNvlEGPQSbMu9IYeO3Wr3fAm75GEtFWePY
 | 
			
		||||
BhM73I7gkRt4s8bUiUepMG/wY45c5tRF23xi8foReHFFe9MDzh8fJFECgYEA9EFX
 | 
			
		||||
4qAik1pOJGNei9BMwmx0I0gfVEIgu0tzeVqT45vcxbxr7RkTEaDoAG6PlbWP6D9a
 | 
			
		||||
WQNLp4gsgRM90ZXOJ4up5DsAWDluvaF4/omabMA+MJJ5kGZ0gCj5rbZbKqUws7x8
 | 
			
		||||
bp+6iBfUPJUbcqNqFmi/08Yt7vrDnMnyMw2A/sECgYEAiiuRMxnuzVm34hQcsbhH
 | 
			
		||||
6ymVqf7j0PW2qK0F4H1ocT9qhzWFd+RB3kHWrCjnqODQoI6GbGr/4JepHUpre1ex
 | 
			
		||||
4UEN5oSS3G0ru0rC3U4C59dZ5KwDHFm7ffZ1pr52ljfQDUsrjjIMRtuiwNK2OoRa
 | 
			
		||||
WSsqiaL+SDzSB+nBmpnAizECgYBdt/y6rerWUx4MhDwwtTnel7JwHyo2MDFS6/5g
 | 
			
		||||
n8qC2Lj6/fMDRE22w+CA2esp7EJNQJGv+b27iFpbJEDh+/Lf5YzIT4MwVskQ5bYB
 | 
			
		||||
JFcmRxUVmf4e09D7o705U/DjCgMH09iCsbLmqQ38ONIRSHZaJtMDtNTHD1yi+jF+
 | 
			
		||||
OT43gQKBgQC/2OHZoko6iRlNOAQ/tMVFNq7fL81GivoQ9F1U0Qr+DH3ZfaH8eIkX
 | 
			
		||||
xT0ToMPJUzWAn8pZv0snA0um6SIgvkCuxO84OkANCVbttzXImIsL7pFzfcwV/ERK
 | 
			
		||||
UM6j0ZuSMFOCr/lGPAoOQU0fskidGEHi1/kW+suSr28TqsyYZpwBDQ==
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
subject=/C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
 | 
			
		||||
issuer= /C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
 | 
			
		||||
notBefore=950413210656Z
 | 
			
		||||
notAfter =970412210656Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICCDCCAXECAQAwDQYJKoZIhvcNAQEEBQAwTjELMAkGA1UEBhMCVVMxHzAdBgNV
 | 
			
		||||
BAoUFkFUJlQgQmVsbCBMYWJvcmF0b3JpZXMxHjAcBgNVBAsUFVByb3RvdHlwZSBS
 | 
			
		||||
ZXNlYXJjaCBDQTAeFw05NTA0MTMyMTA2NTZaFw05NzA0MTIyMTA2NTZaME4xCzAJ
 | 
			
		||||
BgNVBAYTAlVTMR8wHQYDVQQKFBZBVCZUIEJlbGwgTGFib3JhdG9yaWVzMR4wHAYD
 | 
			
		||||
VQQLFBVQcm90b3R5cGUgUmVzZWFyY2ggQ0EwgZwwDQYJKoZIhvcNAQEBBQADgYoA
 | 
			
		||||
MIGGAoGAebOmgtSCl+wCYZc86UGYeTLY8cjmW2P0FN8ToT/u2pECCoFdrlycX0OR
 | 
			
		||||
3wt0ZhpFXLVNeDnHwEE9veNUih7pCL2ZBFqoIoQkB1lZmXRiVtjGonz8BLm/qrFM
 | 
			
		||||
YHb0lme/Ol+s118mwKVxnn6bSAeI/OXKhLaVdYZWk+aEaxEDkVkCAQ8wDQYJKoZI
 | 
			
		||||
hvcNAQEEBQADgYEAAZMG14lZmZ8bahkaHaTV9dQf4p2FZiQTFwHP9ZyGsXPC+LT5
 | 
			
		||||
dG5iTaRmyjNIJdPWohZDl97kAci79aBndvuEvRKOjLHs3WRGBIwERnAcnY9Mz8u/
 | 
			
		||||
zIHK23PjYVxGGaZd669OJwD0CYyqH22HH9nFUGaoJdsv39ChW0NRdLE9+y8=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICJjCCAY8CAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
 | 
			
		||||
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTc0M1oXDTAxMDYw
 | 
			
		||||
OTEzNTc0M1owWzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
 | 
			
		||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYDVQQDExJUZXN0IENBICgxMDI0
 | 
			
		||||
IGJpdCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKO7o8t116VP6cgybTsZ
 | 
			
		||||
DCZhr95nYlZuya3aCi1IKoztqwWnjbmDFIriOqGFPrZQ+moMETC9D59iRW/dFXSv
 | 
			
		||||
1F65ka/XY2hLh9exCCo7XuUcDs53Qp3bI3AmMqHjgzE8oO3ajyJAzJkTTOUecQU2
 | 
			
		||||
mw/gI4tMM0LqWMQS7luTy4+xAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAM7achv3v
 | 
			
		||||
hLQJcv/65eGEpBXM40ZDVoFQFFJWaY5p883HTqLB1x4FdzsXHH0QKBTcKpWwqyu4
 | 
			
		||||
YDm3fb8oDugw72bCzfyZK/zVZPR/hVlqI/fvU109Qoc+7oPvIXWky71HfcK6ZBCA
 | 
			
		||||
q30KIqGM/uoM60INq97qjDmCJapagcNBGQs=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIICXQIBAAKBgQCju6PLddelT+nIMm07GQwmYa/eZ2JWbsmt2gotSCqM7asFp425
 | 
			
		||||
gxSK4jqhhT62UPpqDBEwvQ+fYkVv3RV0r9ReuZGv12NoS4fXsQgqO17lHA7Od0Kd
 | 
			
		||||
2yNwJjKh44MxPKDt2o8iQMyZE0zlHnEFNpsP4COLTDNC6ljEEu5bk8uPsQIDAQAB
 | 
			
		||||
AoGAVZmpFZsDZfr0l2S9tLLwpjRWNOlKATQkno6q2WesT0eGLQufTciY+c8ypfU6
 | 
			
		||||
hyio8r5iUl/VhhdjhAtKx1mRpiotftHo/eYf8rtsrnprOnWG0bWjLjtIoMbcxGn2
 | 
			
		||||
J3bN6LJmbJMjDs0eJ3KnTu646F3nDUw2oGAwmpzKXA1KAP0CQQDRvQhxk2D3Pehs
 | 
			
		||||
HvG665u2pB5ipYQngEFlZO7RHJZzJOZEWSLuuMqaF/7pTfA5jiBvWqCgJeCRRInL
 | 
			
		||||
21ru4dlPAkEAx9jj7BgKn5TYnMoBSSe0afjsV9oApVpN1Nacb1YDtCwy+scp3++s
 | 
			
		||||
nFxlv98wxIlSdpwMUn+AUWfjiWR7Tu/G/wJBAJ/KjwZIrFVxewP0x2ILYsTRYLzz
 | 
			
		||||
MS4PDsO7FB+I0i7DbBOifXS2oNSpd3I0CNMwrxFnUHzynpbOStVfN3ZL5w0CQQCa
 | 
			
		||||
pwFahxBRhkJKsxhjoFJBX9yl75JoY4Wvm5Tbo9ih6UJaRx3kqfkN14L2BKYcsZgb
 | 
			
		||||
KY9vmDOYy6iNfjDeWTfJAkBkfPUb8oTJ/nSP5zN6sqGxSY4krc4xLxpRmxoJ8HL2
 | 
			
		||||
XfhqXkTzbU13RX9JJ/NZ8vQN9Vm2NhxRGJocQkmcdVtJ
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
MIICYDCCAiACAgEoMAkGBSsOAwINBQAwfDELMAkGA1UEBhMCVVMxNjA0BgNVBAoT
 | 
			
		||||
LU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFuZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZ
 | 
			
		||||
MBcGA1UECxMQVGVzdCBFbnZpcm9ubWVudDEaMBgGA1UECxMRRFNTLU5BU0EtUGls
 | 
			
		||||
b3QtQ0EwHhcNOTYwMjI2MTYzMjQ1WhcNOTcwMjI1MTYzMjQ1WjB8MQswCQYDVQQG
 | 
			
		||||
EwJVUzE2MDQGA1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFk
 | 
			
		||||
bWluaXN0cmF0aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MRowGAYDVQQL
 | 
			
		||||
ExFEU1MtTkFTQS1QaWxvdC1DQTCB8jAJBgUrDgMCDAUAA4HkADCB4AJBAMA/ssKb
 | 
			
		||||
hPNUG7ZlASfVwEJU21O5OyF/iyBzgHI1O8eOhJGUYO8cc8wDMjR508Mr9cp6Uhl/
 | 
			
		||||
ZB7FV5GkLNEnRHYCQQDUEaSg45P2qrDwixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLb
 | 
			
		||||
bn3QK74T2IxY1yY+kCNq8XrIqf5fJJzIH0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3
 | 
			
		||||
fVd0geUCQQCzCFUQAh+ZkEmp5804cs6ZWBhrUAfnra8lJItYo9xPcXgdIfLfibcX
 | 
			
		||||
R71UsyO77MRD7B0+Ag2tq794IleCVcEEMAkGBSsOAwINBQADLwAwLAIUUayDfreR
 | 
			
		||||
Yh2WeU86/pHNdkUC1IgCFEfxe1f0oMpxJyrJ5XIxTi7vGdoK
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICGTCCAdgCAwCqTDAJBgUrDgMCDQUAMHwxCzAJBgNVBAYTAlVTMTYwNAYDVQQK
 | 
			
		||||
Ey1OYXRpb25hbCBBZXJvbmF1dGljcyBhbmQgU3BhY2UgQWRtaW5pc3RyYXRpb24x
 | 
			
		||||
GTAXBgNVBAsTEFRlc3QgRW52aXJvbm1lbnQxGjAYBgNVBAsTEURTUy1OQVNBLVBp
 | 
			
		||||
bG90LUNBMB4XDTk2MDUxNDE3MDE0MVoXDTk3MDUxNDE3MDE0MVowMzELMAkGA1UE
 | 
			
		||||
BhMCQVUxDzANBgNVBAoTBk1pbmNvbTETMBEGA1UEAxMKRXJpYyBZb3VuZzCB8jAJ
 | 
			
		||||
BgUrDgMCDAUAA4HkADCB4AJBAKbfHz6vE6pXXMTpswtGUec2tvnfLJUsoxE9qs4+
 | 
			
		||||
ObZX7LmLvragNPUeiTJx7UOWZ5DfBj6bXLc8eYne0lP1g3ACQQDUEaSg45P2qrDw
 | 
			
		||||
ixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLbbn3QK74T2IxY1yY+kCNq8XrIqf5fJJzI
 | 
			
		||||
H0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3fVd0geUCQQCzCFUQAh+ZkEmp5804cs6Z
 | 
			
		||||
WBhrUAfnra8lJItYo9xPcXgdIfLfibcXR71UsyO77MRD7B0+Ag2tq794IleCVcEE
 | 
			
		||||
MAkGBSsOAwINBQADMAAwLQIUWsuuJRE3VT4ueWkWMAJMJaZjj1ECFQCYY0zX4bzM
 | 
			
		||||
LC7obsrHD8XAHG+ZRG==
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICTTCCAbagAwIBAgIBADANBgkqhkiG9w0BAQQFADBMMQswCQYDVQQGEwJHQjEM
 | 
			
		||||
MAoGA1UEChMDVUNMMRgwFgYDVQQLEw9JQ0UtVEVMIFByb2plY3QxFTATBgNVBAMT
 | 
			
		||||
DFRydXN0RmFjdG9yeTAeFw05NzA0MjIxNDM5MTRaFw05ODA0MjIxNDM5MTRaMEwx
 | 
			
		||||
CzAJBgNVBAYTAkdCMQwwCgYDVQQKEwNVQ0wxGDAWBgNVBAsTD0lDRS1URUwgUHJv
 | 
			
		||||
amVjdDEVMBMGA1UEAxMMVHJ1c3RGYWN0b3J5MIGcMAoGBFUIAQECAgQAA4GNADCB
 | 
			
		||||
iQKBgQCEieR8NcXkUW1f0G6aC6u0i8q/98JqS6RxK5YmHIGKCkuTWAUjzLfUa4dt
 | 
			
		||||
U9igGCjTuxaDqlzEim+t/02pmiBZT9HaX++35MjQPUWmsChcYU5WyzGErXi+rQaw
 | 
			
		||||
zlwS73zM8qiPj/97lXYycWhgL0VaiDSPxRXEUdWoaGruom4mNQIDAQABo0IwQDAd
 | 
			
		||||
BgNVHQ4EFgQUHal1LZr7oVg5z6lYzrhTgZRCmcUwDgYDVR0PAQH/BAQDAgH2MA8G
 | 
			
		||||
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAfaggfl6FZoioecjv0dq8
 | 
			
		||||
/DXo/u11iMZvXn08gjX/zl2b4wtPbShOSY5FhkSm8GeySasz+/Nwb/uzfnIhokWi
 | 
			
		||||
lfPZHtlCWtXbIy/TN51eJyq04ceDCQDWvLC2enVg9KB+GJ34b5c5VaPRzq8MBxsA
 | 
			
		||||
S7ELuYGtmYgYm9NZOIr7yU0=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB6jCCAZQCAgEtMA0GCSqGSIb3DQEBBAUAMIGAMQswCQYDVQQGEwJVUzE2MDQG
 | 
			
		||||
A1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFkbWluaXN0cmF0
 | 
			
		||||
aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MR4wHAYDVQQLExVNRDUtUlNB
 | 
			
		||||
LU5BU0EtUGlsb3QtQ0EwHhcNOTYwNDMwMjIwNTAwWhcNOTcwNDMwMjIwNTAwWjCB
 | 
			
		||||
gDELMAkGA1UEBhMCVVMxNjA0BgNVBAoTLU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFu
 | 
			
		||||
ZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZMBcGA1UECxMQVGVzdCBFbnZpcm9ubWVu
 | 
			
		||||
dDEeMBwGA1UECxMVTUQ1LVJTQS1OQVNBLVBpbG90LUNBMFkwCgYEVQgBAQICAgAD
 | 
			
		||||
SwAwSAJBALmmX5+GqAvcrWK13rfDrNX9UfeA7f+ijyBgeFQjYUoDpFqapw4nzQBL
 | 
			
		||||
bAXug8pKkRwa2Zh8YODhXsRWu2F/UckCAwEAATANBgkqhkiG9w0BAQQFAANBAH9a
 | 
			
		||||
OBA+QCsjxXgnSqHx04gcU8S49DVUb1f2XVoLnHlIb8RnX0k5O6mpHT5eti9bLkiW
 | 
			
		||||
GJNMJ4L0AJ/ac+SmHZc=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICajCCAdMCBDGA0QUwDQYJKoZIhvcNAQEEBQAwfTELMAkGA1UEBhMCQ2ExDzAN
 | 
			
		||||
BgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmlsaXR5IEFjY2VwdGVkMR8w
 | 
			
		||||
HQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRwwGgYDVQQDExNFbnRydXN0
 | 
			
		||||
IERlbW8gV2ViIENBMB4XDTk2MDQyNjEzMzUwMVoXDTA2MDQyNjEzMzUwMVowfTEL
 | 
			
		||||
MAkGA1UEBhMCQ2ExDzANBgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmls
 | 
			
		||||
aXR5IEFjY2VwdGVkMR8wHQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRww
 | 
			
		||||
GgYDVQQDExNFbnRydXN0IERlbW8gV2ViIENBMIGdMA0GCSqGSIb3DQEBAQUAA4GL
 | 
			
		||||
ADCBhwKBgQCaroS7O1DA0hm4IefNYU1cx/nqOmzEnk291d1XqznDeF4wEgakbkCc
 | 
			
		||||
zTKxK791yNpXG5RmngqH7cygDRTHZJ6mfCRn0wGC+AI00F2vYTGqPGRQL1N3lZT0
 | 
			
		||||
YDKFC0SQeMMjFIZ1aeQigroFQnHo0VB3zWIMpNkka8PY9lxHZAmWwQIBAzANBgkq
 | 
			
		||||
hkiG9w0BAQQFAAOBgQBAx0UMVA1s54lMQyXjMX5kj99FJN5itb8bK1Rk+cegPQPF
 | 
			
		||||
cWO9SEWyEjjBjIkjjzAwBkaEszFsNGxemxtXvwjIm1xEUMTVlPEWTs2qnDvAUA9W
 | 
			
		||||
YqhWbhH0toGT36236QAsqCZ76rbTRVSSX2BHyJwJMG2tCRv7kRJ//NIgxj3H4w==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICJzCCAZACAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
 | 
			
		||||
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTczN1oXDTAxMDYw
 | 
			
		||||
OTEzNTczN1owXDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
 | 
			
		||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYDVQQDExNUZXN0IFBDQSAoMTAy
 | 
			
		||||
NCBiaXQpMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdoWk/3+WcMlfjIrkg
 | 
			
		||||
40ketmnQaEogQe1LLcuOJV6rKfUSAsPgwgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp
 | 
			
		||||
22Jp85PmemiDzyUIStwk72qhp1imbANZvlmlCFKiQrjUyuDfu4TABmn+kkt3vR1Y
 | 
			
		||||
BEOGt+IFye1UBVSATVdRJ2UVhwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABNA1u/S
 | 
			
		||||
Cg/LJZWb7GliiKJsvuhxlE4E5JxQF2zMub/CSNbF97//tYSyj96sxeFQxZXbcjm9
 | 
			
		||||
xt6mr/xNLA4szNQMJ4P+L7b5e/jC5DSqlwS+CUYJgaFs/SP+qJoCSu1bR3IM9XWO
 | 
			
		||||
cRBpDmcBbYLkSyB92WURvsZ1LtjEcn+cdQVI
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIICXAIBAAKBgQCdoWk/3+WcMlfjIrkg40ketmnQaEogQe1LLcuOJV6rKfUSAsPg
 | 
			
		||||
wgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp22Jp85PmemiDzyUIStwk72qhp1imbANZ
 | 
			
		||||
vlmlCFKiQrjUyuDfu4TABmn+kkt3vR1YBEOGt+IFye1UBVSATVdRJ2UVhwIDAQAB
 | 
			
		||||
AoGAba4fTtuap5l7/8ZsbE7Z1O32KJY4ZcOZukLOLUUhXxXduT+FTgGWujc0/rgc
 | 
			
		||||
z9qYCLlNZHOouMYTgtSfYvuMuLZ11VIt0GYH+nRioLShE59Yy+zCRyC+gPigS1kz
 | 
			
		||||
xvo14AsOIPYV14Tk/SsHyq6E0eTk7VzaIE197giiINUERPECQQDSKmtPTh/lRKw7
 | 
			
		||||
HSZSM0I1mFWn/1zqrAbontRQY5w98QWIOe5qmzYyFbPXYT3d9BzlsMyhgiRNoBbD
 | 
			
		||||
yvohSHXJAkEAwAHx6ezAZeWWzD5yXD36nyjpkVCw7Tk7TSmOceLJMWt1QcrCfqlS
 | 
			
		||||
xA5jjpQ6Z8suU5DdtWAryM2sAir1WisYzwJAd6Zcx56jvAQ3xcPXsE6scBTVFzrj
 | 
			
		||||
7FqZ6E+cclPzfLQ+QQsyOBE7bpI6e/FJppY26XGZXo3YGzV8IGXrt40oOQJALETG
 | 
			
		||||
h86EFXo3qGOFbmsDy4pdP5nBERCu8X1xUCSfintiD4c2DInxgS5oGclnJeMcjTvL
 | 
			
		||||
QjQoJCX3UJCi/OUO1QJBAKgcDHWjMvt+l1pjJBsSEZ0HX9AAIIVx0RQmbFGS+F2Q
 | 
			
		||||
hhu5l77WnnZOQ9vvhV5u7NPCUF9nhU3jh60qWWO8mkc=
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
subject=/C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
 | 
			
		||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
 | 
			
		||||
notBefore=941104185834Z
 | 
			
		||||
notAfter =991103185834Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICIzCCAZACBQJBAAAWMA0GCSqGSIb3DQEBAgUAMFwxCzAJBgNVBAYTAlVTMSAw
 | 
			
		||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVy
 | 
			
		||||
Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDQxODU4MzRaFw05
 | 
			
		||||
OTExMDMxODU4MzRaMFwxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBT
 | 
			
		||||
ZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9u
 | 
			
		||||
IEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCk+4Fie84QJ93o
 | 
			
		||||
975sbsZwmdu41QUDaSiCnHJ/lj+O7Kwpkj+KFPhCdr69XQO5kNTQvAayUTNfxMK/
 | 
			
		||||
touPmbZiImDd298ggrTKoi8tUO2UMt7gVY3UaOLgTNLNBRYulWZcYVI4HlGogqHE
 | 
			
		||||
7yXpCuaLK44xZtn42f29O2nZ6wIDAQABMA0GCSqGSIb3DQEBAgUAA34AdrW2EP4j
 | 
			
		||||
9/dZYkuwX5zBaLxJu7NJbyFHXSudVMQAKD+YufKKg5tgf+tQx6sFEC097TgCwaVI
 | 
			
		||||
0v5loMC86qYjFmZsGySp8+x5NRhPJsjjr1BKx6cxa9B8GJ1Qv6km+iYrRpwUqbtb
 | 
			
		||||
MJhCKLVLU7tDCZJAuqiqWqTGtotXTcU=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
subject=/C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
 | 
			
		||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
 | 
			
		||||
notBefore=941109235417Z
 | 
			
		||||
notAfter =991231235417Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICKTCCAZYCBQJBAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMSAw
 | 
			
		||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJl
 | 
			
		||||
IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDkyMzU0MTda
 | 
			
		||||
Fw05OTEyMzEyMzU0MTdaMF8xCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0
 | 
			
		||||
YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJlIFNlcnZlciBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCSznrB
 | 
			
		||||
roM+WqqJg1esJQF2DK2ujiw3zus1eGRUA+WEQFHJv48I4oqCCNIWhjdV6bEhAq12
 | 
			
		||||
aIGaBaJLyUslZiJWbIgHj/eBWW2EB2VwE3F2Ppt3TONQiVaYSLkdpykaEy5KEVmc
 | 
			
		||||
HhXVSVQsczppgrGXOZxtcGdI5d0t1sgeewIDAQABMA0GCSqGSIb3DQEBAgUAA34A
 | 
			
		||||
iNHReSHO4ovo+MF9NFM/YYPZtgs4F7boviGNjwC4i1N+RGceIr2XJ+CchcxK9oU7
 | 
			
		||||
suK+ktPlDemvXA4MRpX/oRxePug2WHpzpgr4IhFrwwk4fia7c+8AvQKk8xQNMD9h
 | 
			
		||||
cHsg/jKjn7P0Z1LctO6EjJY2IN6BCINxIYoPnqk=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
subject=/C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
 | 
			
		||||
	/OU=Certification Services Division/CN=Thawte Server CA
 | 
			
		||||
	/Email=server-certs@thawte.com
 | 
			
		||||
issuer= /C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
 | 
			
		||||
	/OU=Certification Services Division/CN=Thawte Server CA
 | 
			
		||||
	/Email=server-certs@thawte.com
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIC+TCCAmICAQAwDQYJKoZIhvcNAQEEBQAwgcQxCzAJBgNVBAYTAlpBMRUwEwYD
 | 
			
		||||
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
 | 
			
		||||
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
 | 
			
		||||
dmljZXMgRGl2aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkq
 | 
			
		||||
hkiG9w0BCQEWF3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMB4XDTk2MDcyNzE4MDc1
 | 
			
		||||
N1oXDTk4MDcyNzE4MDc1N1owgcQxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0
 | 
			
		||||
ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMUVGhhd3RlIENv
 | 
			
		||||
bnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
 | 
			
		||||
aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkqhkiG9w0BCQEW
 | 
			
		||||
F3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
 | 
			
		||||
iQKBgQDTpFBuyP9Wa+bPXbbqDGh1R6KqwtqEJfyo9EdR2oW1IHSUhh4PdcnpCGH1
 | 
			
		||||
Bm0wbhUZAulSwGLbTZme4moMRDjN/r7jZAlwxf6xaym2L0nIO9QnBCUQly/nkG3A
 | 
			
		||||
KEKZ10xD3sP1IW1Un13DWOHA5NlbsLjctHvfNjrCtWYiEtaHDQIDAQABMA0GCSqG
 | 
			
		||||
SIb3DQEBBAUAA4GBAIsvn7ifX3RUIrvYXtpI4DOfARkTogwm6o7OwVdl93yFhDcX
 | 
			
		||||
7h5t0XZ11MUAMziKdde3rmTvzUYIUCYoY5b032IwGMTvdiclK+STN6NP2m5nvFAM
 | 
			
		||||
qJT5gC5O+j/jBuZRQ4i0AMYQr5F4lT8oBJnhgafw6PL8aDY2vMHGSPl9+7uf
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIDDTCCAnYCAQAwDQYJKoZIhvcNAQEEBQAwgc4xCzAJBgNVBAYTAlpBMRUwEwYD
 | 
			
		||||
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
 | 
			
		||||
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
 | 
			
		||||
dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBD
 | 
			
		||||
QTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTAeFw05
 | 
			
		||||
NjA3MjcxODA3MTRaFw05ODA3MjcxODA3MTRaMIHOMQswCQYDVQQGEwJaQTEVMBMG
 | 
			
		||||
A1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xHTAbBgNVBAoT
 | 
			
		||||
FFRoYXd0ZSBDb25zdWx0aW5nIGNjMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNl
 | 
			
		||||
cnZpY2VzIERpdmlzaW9uMSEwHwYDVQQDExhUaGF3dGUgUHJlbWl1bSBTZXJ2ZXIg
 | 
			
		||||
Q0ExKDAmBgkqhkiG9w0BCQEWGXByZW1pdW0tc2VydmVyQHRoYXd0ZS5jb20wgZ8w
 | 
			
		||||
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANI2NmqL18JbntqBQWKPOO5JBFXW0O8c
 | 
			
		||||
G5UWR+8YSDU6UvQragaPOy/qVuOvho2eF/eetGV1Ak3vywmiIVHYm9Bn0LoNkgYU
 | 
			
		||||
c9STy5cqAJxcTgy8+hVS/PJEbtoRSm4Iny8t4/mqOoZztkZTWMiJBb2DEbhzP6oH
 | 
			
		||||
jfRCTedAnRw3AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAutFIgTRZVYerIZfL9lvR
 | 
			
		||||
w9Eifvvo5KTZ3h+Bj+VzNnyw4Qc/IyXkPOu6SIiH9LQ3sCmWBdxpe+qr4l77rLj2
 | 
			
		||||
GYuMtESFfn1XVALzkYgC7JcPuTOjMfIiMByt+uFf8AV8x0IW/Qkuv+hEQcyM9vxK
 | 
			
		||||
3VZdLbCVIhNoEsysrxCpxcI=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
Tims test GCI CA
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB8DCCAZoCAQAwDQYJKoZIhvcNAQEEBQAwgYIxCzAJBgNVBAYTAkFVMRMwEQYD
 | 
			
		||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
 | 
			
		||||
cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2RldmVsb3BtZW50MRkwFwYDVQQDExBD
 | 
			
		||||
cnlwdFNvZnQgRGV2IENBMB4XDTk3MDMyMjEzMzQwNFoXDTk4MDMyMjEzMzQwNFow
 | 
			
		||||
gYIxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhC
 | 
			
		||||
cmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2Rl
 | 
			
		||||
dmVsb3BtZW50MRkwFwYDVQQDExBDcnlwdFNvZnQgRGV2IENBMFwwDQYJKoZIhvcN
 | 
			
		||||
AQEBBQADSwAwSAJBAOAOAqogG5QwAmLhzyO4CoRnx/wVy4NZP4dxJy83O1EnL0rw
 | 
			
		||||
OdsamJKvPOLHgSXo3gDu9uVyvCf/QJmZAmC5ml8CAwEAATANBgkqhkiG9w0BAQQF
 | 
			
		||||
AANBADRRS/GVdd7rAqRW6SdmgLJduOU2yq3avBu99kRqbp9A/dLu6r6jU+eP4oOA
 | 
			
		||||
TfdbFZtAAD2Hx9jUtY3tfdrJOb8= 
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICVjCCAgACAQAwDQYJKoZIhvcNAQEEBQAwgbUxCzAJBgNVBAYTAkFVMRMwEQYD
 | 
			
		||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
 | 
			
		||||
cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsTI1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9O
 | 
			
		||||
IEFVVEhPUklUSUVTMTQwMgYDVQQDEytaRVJPIFZBTFVFIENBIC0gREVNT05TVFJB
 | 
			
		||||
VElPTiBQVVJQT1NFUyBPTkxZMB4XDTk3MDQwMzEzMjI1NFoXDTk4MDQwMzEzMjI1
 | 
			
		||||
NFowgbUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQH
 | 
			
		||||
EwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsT
 | 
			
		||||
I1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9OIEFVVEhPUklUSUVTMTQwMgYDVQQDEyta
 | 
			
		||||
RVJPIFZBTFVFIENBIC0gREVNT05TVFJBVElPTiBQVVJQT1NFUyBPTkxZMFwwDQYJ
 | 
			
		||||
KoZIhvcNAQEBBQADSwAwSAJBAOZ7T7yqP/tyspcko3yPY1y0Cm2EmwNvzW4QgVXR
 | 
			
		||||
Fjs3HmJ4xtSpXdo6mwcGezL3Abt/aQXaxv9PU8xt+Jr0OFUCAwEAATANBgkqhkiG
 | 
			
		||||
9w0BAQQFAANBAOQpYmGgyCqCy1OljgJhCqQOu627oVlHzK1L+t9vBaMfn40AVUR4
 | 
			
		||||
WzQVWO31KTgi5vTK1U+3h46fgUWqQ0h+6rU=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIAwgKADAgECAgEAMA0GCSqGSIb3DQEBBAUAMGIxETAPBgNVBAcTCEludGVybmV0
 | 
			
		||||
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xh
 | 
			
		||||
c3MgMSBDQSAtIEluZGl2aWR1YWwgU3Vic2NyaWJlcjAeFw05NjA0MDgxMDIwMjda
 | 
			
		||||
Fw05NzA0MDgxMDIwMjdaMGIxETAPBgNVBAcTCEludGVybmV0MRcwFQYDVQQKEw5W
 | 
			
		||||
ZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xhc3MgMSBDQSAtIElu
 | 
			
		||||
ZGl2aWR1YWwgU3Vic2NyaWJlcjCAMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2
 | 
			
		||||
FKbPTdAFDdjKI9BvqrQpkmOOLPhvltcunXZLEbE2jVfJw/0cxrr+Hgi6M8qV6r7j
 | 
			
		||||
W80GqLd5HUQq7XPysVKDaBBwZJHXPmv5912dFEObbpdFmIFH0S3L3bty10w/cari
 | 
			
		||||
QPJUObwW7s987LrbP2wqsxaxhhKdrpM01bjV0Pc+qQIDAQABAAAAADANBgkqhkiG
 | 
			
		||||
9w0BAQQFAAOBgQA+1nJryNt8VBRjRr07ArDAV/3jAH7GjDc9jsrxZS68ost9v06C
 | 
			
		||||
TvTNKGL+LISNmFLXl+JXhgGB0JZ9fvyYzNgHQ46HBUng1H6voalfJgS2KdEo50wW
 | 
			
		||||
8EFZYMDkT1k4uynwJqkVN2QJK/2q4/A/VCov5h6SlM8Affg2W+1TLqvqkwAA
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
 subject=/L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
 | 
			
		||||
 issuer= /L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIEkzCCA/ygAwIBAgIRANDTUpSRL3nTFeMrMayFSPAwDQYJKoZIhvcNAQECBQAw
 | 
			
		||||
YjERMA8GA1UEBxMISW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQw
 | 
			
		||||
MgYDVQQLEytWZXJpU2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3Jp
 | 
			
		||||
YmVyMB4XDTk2MDYwNDAwMDAwMFoXDTk4MDYwNDIzNTk1OVowYjERMA8GA1UEBxMI
 | 
			
		||||
SW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQLEytWZXJp
 | 
			
		||||
U2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3JpYmVyMIGfMA0GCSqG
 | 
			
		||||
SIb3DQEBAQUAA4GNADCBiQKBgQC6A+2czKGRcYMfm8gdnk+0de99TDDzsqo0v5nb
 | 
			
		||||
RsbUmMcdRQ7nsMbRWe0SAb/9QoLTZ/cJ0iOBqdrkz7UpqqKarVoTSdlSMVM92tWp
 | 
			
		||||
3bJncZHQD1t4xd6lQVdI1/T6R+5J0T1ukOdsI9Jmf+F28S6g3R3L1SFwiHKeZKZv
 | 
			
		||||
z+793wIDAQABo4ICRzCCAkMwggIpBgNVHQMBAf8EggIdMIICGTCCAhUwggIRBgtg
 | 
			
		||||
hkgBhvhFAQcBATCCAgAWggGrVGhpcyBjZXJ0aWZpY2F0ZSBpbmNvcnBvcmF0ZXMg
 | 
			
		||||
YnkgcmVmZXJlbmNlLCBhbmQgaXRzIHVzZSBpcyBzdHJpY3RseSBzdWJqZWN0IHRv
 | 
			
		||||
LCB0aGUgVmVyaVNpZ24gQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQg
 | 
			
		||||
KENQUyksIGF2YWlsYWJsZSBhdDogaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL0NQ
 | 
			
		||||
Uy0xLjA7IGJ5IEUtbWFpbCBhdCBDUFMtcmVxdWVzdHNAdmVyaXNpZ24uY29tOyBv
 | 
			
		||||
ciBieSBtYWlsIGF0IFZlcmlTaWduLCBJbmMuLCAyNTkzIENvYXN0IEF2ZS4sIE1v
 | 
			
		||||
dW50YWluIFZpZXcsIENBIDk0MDQzIFVTQSBUZWwuICsxICg0MTUpIDk2MS04ODMw
 | 
			
		||||
IENvcHlyaWdodCAoYykgMTk5NiBWZXJpU2lnbiwgSW5jLiAgQWxsIFJpZ2h0cyBS
 | 
			
		||||
ZXNlcnZlZC4gQ0VSVEFJTiBXQVJSQU5USUVTIERJU0NMQUlNRUQgYW5kIExJQUJJ
 | 
			
		||||
TElUWSBMSU1JVEVELqAOBgxghkgBhvhFAQcBAQGhDgYMYIZIAYb4RQEHAQECMC8w
 | 
			
		||||
LRYraHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvQ1BTLTEuMDAU
 | 
			
		||||
BglghkgBhvhCAQEBAf8EBAMCAgQwDQYJKoZIhvcNAQECBQADgYEApRJRkNBqLLgs
 | 
			
		||||
53IR/d18ODdLOWMTZ+QOOxBrq460iBEdUwgF8vmPRX1ku7UiDeNzaLlurE6eFqHq
 | 
			
		||||
2zPyK5j60zfTLVJMWKcQWwTJLjHtXrW8pxhNtFc6Fdvy5ZkHnC/9NIl7/t4U6WqB
 | 
			
		||||
p4y+p7SdMIkEwIZfds0VbnQyX5MRUJY=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
 subject=/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
			
		||||
 issuer= /C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICMTCCAZoCBQKhAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
 | 
			
		||||
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMg
 | 
			
		||||
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
 | 
			
		||||
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
 | 
			
		||||
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyVxZ
 | 
			
		||||
nvIbigEUtBDfBEDb41evakVAj4QMC9Ez2dkRz+4CWB8l9yqoRAWq7AMfeH+ek7ma
 | 
			
		||||
AKojfdashaJjRcdyJ8z0TMZ1cdI5709C8HXfCpDGjiBvmA/4rCNfcCk2pMmG57Ga
 | 
			
		||||
IMtTpYXnPb59mv4kRTPcdhXtD6JxZExlLoFoRacCAwEAATANBgkqhkiG9w0BAQIF
 | 
			
		||||
AAOBgQB1Zmw+0c2B27X4LzZRtvdCvM1Cr9wO+hVs+GeTVzrrtpLotgHKjLeOQ7RJ
 | 
			
		||||
Zfk+7r11Ri7J/CVdqMcvi5uPaM+0nJcYwE3vH9mvgrPmZLiEXIqaB1JDYft0nls6
 | 
			
		||||
NvxMsvwaPxUupVs8G5DsiCnkWRb5zget7Ond2tIxik/W2O8XjQ==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 subject=/C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
 | 
			
		||||
 issuer= /C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICMTCCAZoCBQKmAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
 | 
			
		||||
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMg
 | 
			
		||||
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
 | 
			
		||||
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
 | 
			
		||||
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LJ1
 | 
			
		||||
9njQrlpQ9OlQqZ+M1++RlHDo0iSQdomF1t+s5gEXMoDwnZNHvJplnR+Xrr/phnVj
 | 
			
		||||
IIm9gFidBAydqMEk6QvlMXi9/C0MN2qeeIDpRnX57aP7E3vIwUzSo+/1PLBij0pd
 | 
			
		||||
O92VZ48TucE81qcmm+zDO3rZTbxtm+gVAePwR6kCAwEAATANBgkqhkiG9w0BAQIF
 | 
			
		||||
AAOBgQBT3dPwnCR+QKri/AAa19oM/DJhuBUNlvP6Vxt/M3yv6ZiaYch6s7f/sdyZ
 | 
			
		||||
g9ysEvxwyR84Qu1E9oAuW2szaayc01znX1oYx7EteQSWQZGZQbE8DbqEOcY7l/Am
 | 
			
		||||
yY7uvcxClf8exwI/VAx49byqYHwCaejcrOICdmHEPgPq0ook0Q==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										420
									
								
								apps/server2.pem
									
									
									
									
									
								
							
							
						
						
									
										420
									
								
								apps/server2.pem
									
									
									
									
									
								
							@@ -1,376 +1,52 @@
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Server test cert (1024 bit)
 | 
			
		||||
subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = Test Server Cert #2
 | 
			
		||||
issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICLjCCAZcCAQEwDQYJKoZIhvcNAQEEBQAwWzELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYD
 | 
			
		||||
VQQDExJUZXN0IENBICgxMDI0IGJpdCkwHhcNOTcwNjA5MTM1NzU0WhcNOTgwNjA5
 | 
			
		||||
MTM1NzU0WjBkMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
 | 
			
		||||
A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxJDAiBgNVBAMTG1NlcnZlciB0ZXN0IGNl
 | 
			
		||||
cnQgKDEwMjQgYml0KTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsxH1PBPm
 | 
			
		||||
RkxrR11eV4bzNi4N9n11CI8nV29+ARlT1+qDe/mjVUvXlmsr1v/vf71G9GgqopSa
 | 
			
		||||
6RXrICLVdk/FYYYzhPvl1M+OrjaXDFO8BzBAF1Lnz6c7aRZvGRJNrRSr2nZEkqDf
 | 
			
		||||
JW9dY7r2VZEpD5QeuaRYUnuECkqeieB65GMCAwEAATANBgkqhkiG9w0BAQQFAAOB
 | 
			
		||||
gQCWsOta6C0wiVzXz8wPmJKyTrurMlgUss2iSuW9366iwofZddsNg7FXniMzkIf6
 | 
			
		||||
dp7jnmWZwKZ9cXsNUS2o4OL07qOk2HOywC0YsNZQsOBu1CBTYYkIefDiKFL1zQHh
 | 
			
		||||
8lwwNd4NP+OE3NzUNkCfh4DnFfg9WHkXUlD5UpxNRJ4gJA==
 | 
			
		||||
MIID6jCCAtKgAwIBAgIJALnu1NlVpZ60MA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV
 | 
			
		||||
BAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMSIwIAYDVQQLDBlGT1IgVEVT
 | 
			
		||||
VElORyBQVVJQT1NFUyBPTkxZMSUwIwYDVQQDDBxPcGVuU1NMIFRlc3QgSW50ZXJt
 | 
			
		||||
ZWRpYXRlIENBMB4XDTExMTIwODE0MDE0OFoXDTIxMTAxNjE0MDE0OFowZzELMAkG
 | 
			
		||||
A1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBU
 | 
			
		||||
RVNUSU5HIFBVUlBPU0VTIE9OTFkxHDAaBgNVBAMME1Rlc3QgU2VydmVyIENlcnQg
 | 
			
		||||
IzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrdi7j9yctG+L4EjBy
 | 
			
		||||
gjPmEqZzOJEQba26MoQGzglU7e5Xf59Rb/hgVQuKAoiZe7/R8rK4zJ4W7iXdXw0L
 | 
			
		||||
qBpyG8B5aGKeI32w+A9TcBApoXXL2CrYQEQjZwUIpLlYBIi2NkJj3nVkq5dgl1gO
 | 
			
		||||
ALiQ+W8jg3kzg5Ec9rimp9r93N8wsSL3awsafurmYCvOf7leHaMP1WJ/zDRGUNHG
 | 
			
		||||
/WtDjXc8ZUG1+6EXU9Jc2Fs+2Omf7fcN0l00AK/wPg8OaNS0rKyGq9JdIT9FRGV1
 | 
			
		||||
bXe/rx58FaE5CItdwCSYhJvF/O95LWQoxJXye5bCFLmvDTEyVq9FMSCptfsmbXjE
 | 
			
		||||
ZGsXAgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBeAwLAYJ
 | 
			
		||||
YIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1Ud
 | 
			
		||||
DgQWBBR52UaWWTKzZGDH/X4mWNcuqeQVazAfBgNVHSMEGDAWgBQ2w2yI55X+sL3s
 | 
			
		||||
zj49hqshgYfa2jANBgkqhkiG9w0BAQUFAAOCAQEANBW+XYLlHBqVY/31ie+3gRlS
 | 
			
		||||
LPfy4SIqn0t3RJjagT29MXprblBO2cbMO8VGjkQdKGpmMXjxbht2arOOUXRHX4n/
 | 
			
		||||
XTyn/QHEf0bcwIITMReO3DZUPAEw8hSjn9xEOM0IRVOCP+mH5fi74QzzQaZVCyYg
 | 
			
		||||
5VtLKdww/+sc0nCbKl2KWgDluriH0nfVx95qgW3mg9dhXRr0zmf1w2zkBHYpARYL
 | 
			
		||||
Dew6Z8EE4tS3HJu8/qM6meWzNtrfonQ3eiiMxjZBxzV46jchBwa2z9XYhP6AmpPb
 | 
			
		||||
oeTSzcQNbWsxaGYzWo46oLDUZmJOwSBawbS31bZNMCoPIY6ukoesCzFSsUKZww==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIICXgIBAAKBgQCzEfU8E+ZGTGtHXV5XhvM2Lg32fXUIjydXb34BGVPX6oN7+aNV
 | 
			
		||||
S9eWayvW/+9/vUb0aCqilJrpFesgItV2T8VhhjOE++XUz46uNpcMU7wHMEAXUufP
 | 
			
		||||
pztpFm8ZEk2tFKvadkSSoN8lb11juvZVkSkPlB65pFhSe4QKSp6J4HrkYwIDAQAB
 | 
			
		||||
AoGBAKy8jvb0Lzby8q11yNLf7+78wCVdYi7ugMHcYA1JVFK8+zb1WfSm44FLQo/0
 | 
			
		||||
dSChAjgz36TTexeLODPYxleJndjVcOMVzsLJjSM8dLpXsTS4FCeMbhw2s2u+xqKY
 | 
			
		||||
bbPWfk+HOTyJjfnkcC5Nbg44eOmruq0gSmBeUXVM5UntlTnxAkEA7TGCA3h7kx5E
 | 
			
		||||
Bl4zl2pc3gPAGt+dyfk5Po9mGJUUXhF5p2zueGmYWW74TmOWB1kzt4QRdYMzFePq
 | 
			
		||||
zfDNXEa1CwJBAMFErdY0xp0UJ13WwBbUTk8rujqQdHtjw0klhpbuKkjxu2hN0wwM
 | 
			
		||||
6p0D9qxF7JHaghqVRI0fAW/EE0OzdHMR9QkCQQDNR26dMFXKsoPu+vItljj/UEGf
 | 
			
		||||
QG7gERiQ4yxaFBPHgdpGo0kT31eh9x9hQGDkxTe0GNG/YSgCRvm8+C3TMcKXAkBD
 | 
			
		||||
dhGn36wkUFCddMSAM4NSJ1VN8/Z0y5HzCmI8dM3VwGtGMUQlxKxwOl30LEQzdS5M
 | 
			
		||||
0SWojNYXiT2gOBfBwtbhAkEAhafl5QEOIgUz+XazS/IlZ8goNKdDVfYgK3mHHjvv
 | 
			
		||||
nY5G+AuGebdNkXJr4KSWxDcN+C2i47zuj4QXA16MAOandA==
 | 
			
		||||
MIIEowIBAAKCAQEA63Yu4/cnLRvi+BIwcoIz5hKmcziREG2tujKEBs4JVO3uV3+f
 | 
			
		||||
UW/4YFULigKImXu/0fKyuMyeFu4l3V8NC6gachvAeWhiniN9sPgPU3AQKaF1y9gq
 | 
			
		||||
2EBEI2cFCKS5WASItjZCY951ZKuXYJdYDgC4kPlvI4N5M4ORHPa4pqfa/dzfMLEi
 | 
			
		||||
92sLGn7q5mArzn+5Xh2jD9Vif8w0RlDRxv1rQ413PGVBtfuhF1PSXNhbPtjpn+33
 | 
			
		||||
DdJdNACv8D4PDmjUtKyshqvSXSE/RURldW13v68efBWhOQiLXcAkmISbxfzveS1k
 | 
			
		||||
KMSV8nuWwhS5rw0xMlavRTEgqbX7Jm14xGRrFwIDAQABAoIBAHLsTPihIfLnYIE5
 | 
			
		||||
x4GsQQ5zXeBw5ITDM37ktwHnQDC+rIzyUl1aLD1AZRBoKinXd4lOTqLZ4/NHKx4A
 | 
			
		||||
DYr58mZtWyUmqLOMmQVuHXTZBlp7XtYuXMMNovQwjQlp9LicBeoBU6gQ5PVMtubD
 | 
			
		||||
F4xGF89Sn0cTHW3iMkqTtQ5KcR1j57OcJO0FEb1vPvk2MXI5ZyAatUYE7YacbEzd
 | 
			
		||||
rg02uIwx3FqNSkuSI79uz4hMdV5TPtuhxx9nTwj9aLUhXFeZ0mn2PVgVzEnnMoJb
 | 
			
		||||
+znlsZDgzDlJqdaD744YGWh8Z3OEssB35KfzFcdOeO6yH8lmv2Zfznk7pNPT7LTb
 | 
			
		||||
Lae9VgkCgYEA92p1qnAB3NtJtNcaW53i0S5WJgS1hxWKvUDx3lTB9s8X9fHpqL1a
 | 
			
		||||
E94fDfWzp/hax6FefUKIvBOukPLQ6bYjTMiFoOHzVirghAIuIUoMI5VtLhwD1hKs
 | 
			
		||||
Lr7l/dptMgKb1nZHyXoKHRBthsy3K4+udsPi8TzMvYElgEqyQIe/Rk0CgYEA86GL
 | 
			
		||||
8HC6zLszzKERDPBxrboRmoFvVUCTQDhsfj1M8aR3nQ8V5LkdIJc7Wqm/Ggfk9QRf
 | 
			
		||||
rJ8M2WUMlU5CNnCn/KCrKzCNZIReze3fV+HnKdbcXGLvgbHPrhnz8yYehUFG+RGq
 | 
			
		||||
bVyDWRU94T38izy2s5qMYrMJWZEYyXncSPbfcPMCgYAtaXfxcZ+V5xYPQFARMtiX
 | 
			
		||||
5nZfggvDoJuXgx0h3tK/N2HBfcaSdzbaYLG4gTmZggc/jwnl2dl5E++9oSPhUdIG
 | 
			
		||||
3ONSFUbxsOsGr9PBvnKd8WZZyUCXAVRjPBzAzF+whzQNWCZy/5htnz9LN7YDI9s0
 | 
			
		||||
5113Q96cheDZPFydZY0hHQKBgQDVbEhNukM5xCiNcu+f2SaMnLp9EjQ4h5g3IvaP
 | 
			
		||||
5B16daw/Dw8LzcohWboqIxeAsze0GD/D1ZUJAEd0qBjC3g+a9BjefervCjKOzXng
 | 
			
		||||
38mEUm+6EwVjJSQcjSmycEs+Sr/kwr/8i5WYvU32+jk4tFgMoC+o6tQe/Uesf68k
 | 
			
		||||
z/dPVwKBgGbF7Vv1/3SmhlOy+zYyvJ0CrWtKxH9QP6tLIEgEpd8x7YTSuCH94yok
 | 
			
		||||
kToMXYA3sWNPt22GbRDZ+rcp4c7HkDx6I6vpdP9aQEwJTp0EPy0sgWr2XwYmreIQ
 | 
			
		||||
NFmkk8Itn9EY2R9VBaP7GLv5kvwxDdLAnmwGmzVtbmaVdxCaBwUk
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
subject=/C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
 | 
			
		||||
issuer= /C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
 | 
			
		||||
notBefore=950413210656Z
 | 
			
		||||
notAfter =970412210656Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICCDCCAXECAQAwDQYJKoZIhvcNAQEEBQAwTjELMAkGA1UEBhMCVVMxHzAdBgNV
 | 
			
		||||
BAoUFkFUJlQgQmVsbCBMYWJvcmF0b3JpZXMxHjAcBgNVBAsUFVByb3RvdHlwZSBS
 | 
			
		||||
ZXNlYXJjaCBDQTAeFw05NTA0MTMyMTA2NTZaFw05NzA0MTIyMTA2NTZaME4xCzAJ
 | 
			
		||||
BgNVBAYTAlVTMR8wHQYDVQQKFBZBVCZUIEJlbGwgTGFib3JhdG9yaWVzMR4wHAYD
 | 
			
		||||
VQQLFBVQcm90b3R5cGUgUmVzZWFyY2ggQ0EwgZwwDQYJKoZIhvcNAQEBBQADgYoA
 | 
			
		||||
MIGGAoGAebOmgtSCl+wCYZc86UGYeTLY8cjmW2P0FN8ToT/u2pECCoFdrlycX0OR
 | 
			
		||||
3wt0ZhpFXLVNeDnHwEE9veNUih7pCL2ZBFqoIoQkB1lZmXRiVtjGonz8BLm/qrFM
 | 
			
		||||
YHb0lme/Ol+s118mwKVxnn6bSAeI/OXKhLaVdYZWk+aEaxEDkVkCAQ8wDQYJKoZI
 | 
			
		||||
hvcNAQEEBQADgYEAAZMG14lZmZ8bahkaHaTV9dQf4p2FZiQTFwHP9ZyGsXPC+LT5
 | 
			
		||||
dG5iTaRmyjNIJdPWohZDl97kAci79aBndvuEvRKOjLHs3WRGBIwERnAcnY9Mz8u/
 | 
			
		||||
zIHK23PjYVxGGaZd669OJwD0CYyqH22HH9nFUGaoJdsv39ChW0NRdLE9+y8=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICJjCCAY8CAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
 | 
			
		||||
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTc0M1oXDTAxMDYw
 | 
			
		||||
OTEzNTc0M1owWzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
 | 
			
		||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYDVQQDExJUZXN0IENBICgxMDI0
 | 
			
		||||
IGJpdCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKO7o8t116VP6cgybTsZ
 | 
			
		||||
DCZhr95nYlZuya3aCi1IKoztqwWnjbmDFIriOqGFPrZQ+moMETC9D59iRW/dFXSv
 | 
			
		||||
1F65ka/XY2hLh9exCCo7XuUcDs53Qp3bI3AmMqHjgzE8oO3ajyJAzJkTTOUecQU2
 | 
			
		||||
mw/gI4tMM0LqWMQS7luTy4+xAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAM7achv3v
 | 
			
		||||
hLQJcv/65eGEpBXM40ZDVoFQFFJWaY5p883HTqLB1x4FdzsXHH0QKBTcKpWwqyu4
 | 
			
		||||
YDm3fb8oDugw72bCzfyZK/zVZPR/hVlqI/fvU109Qoc+7oPvIXWky71HfcK6ZBCA
 | 
			
		||||
q30KIqGM/uoM60INq97qjDmCJapagcNBGQs=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIICXQIBAAKBgQCju6PLddelT+nIMm07GQwmYa/eZ2JWbsmt2gotSCqM7asFp425
 | 
			
		||||
gxSK4jqhhT62UPpqDBEwvQ+fYkVv3RV0r9ReuZGv12NoS4fXsQgqO17lHA7Od0Kd
 | 
			
		||||
2yNwJjKh44MxPKDt2o8iQMyZE0zlHnEFNpsP4COLTDNC6ljEEu5bk8uPsQIDAQAB
 | 
			
		||||
AoGAVZmpFZsDZfr0l2S9tLLwpjRWNOlKATQkno6q2WesT0eGLQufTciY+c8ypfU6
 | 
			
		||||
hyio8r5iUl/VhhdjhAtKx1mRpiotftHo/eYf8rtsrnprOnWG0bWjLjtIoMbcxGn2
 | 
			
		||||
J3bN6LJmbJMjDs0eJ3KnTu646F3nDUw2oGAwmpzKXA1KAP0CQQDRvQhxk2D3Pehs
 | 
			
		||||
HvG665u2pB5ipYQngEFlZO7RHJZzJOZEWSLuuMqaF/7pTfA5jiBvWqCgJeCRRInL
 | 
			
		||||
21ru4dlPAkEAx9jj7BgKn5TYnMoBSSe0afjsV9oApVpN1Nacb1YDtCwy+scp3++s
 | 
			
		||||
nFxlv98wxIlSdpwMUn+AUWfjiWR7Tu/G/wJBAJ/KjwZIrFVxewP0x2ILYsTRYLzz
 | 
			
		||||
MS4PDsO7FB+I0i7DbBOifXS2oNSpd3I0CNMwrxFnUHzynpbOStVfN3ZL5w0CQQCa
 | 
			
		||||
pwFahxBRhkJKsxhjoFJBX9yl75JoY4Wvm5Tbo9ih6UJaRx3kqfkN14L2BKYcsZgb
 | 
			
		||||
KY9vmDOYy6iNfjDeWTfJAkBkfPUb8oTJ/nSP5zN6sqGxSY4krc4xLxpRmxoJ8HL2
 | 
			
		||||
XfhqXkTzbU13RX9JJ/NZ8vQN9Vm2NhxRGJocQkmcdVtJ
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
MIICYDCCAiACAgEoMAkGBSsOAwINBQAwfDELMAkGA1UEBhMCVVMxNjA0BgNVBAoT
 | 
			
		||||
LU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFuZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZ
 | 
			
		||||
MBcGA1UECxMQVGVzdCBFbnZpcm9ubWVudDEaMBgGA1UECxMRRFNTLU5BU0EtUGls
 | 
			
		||||
b3QtQ0EwHhcNOTYwMjI2MTYzMjQ1WhcNOTcwMjI1MTYzMjQ1WjB8MQswCQYDVQQG
 | 
			
		||||
EwJVUzE2MDQGA1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFk
 | 
			
		||||
bWluaXN0cmF0aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MRowGAYDVQQL
 | 
			
		||||
ExFEU1MtTkFTQS1QaWxvdC1DQTCB8jAJBgUrDgMCDAUAA4HkADCB4AJBAMA/ssKb
 | 
			
		||||
hPNUG7ZlASfVwEJU21O5OyF/iyBzgHI1O8eOhJGUYO8cc8wDMjR508Mr9cp6Uhl/
 | 
			
		||||
ZB7FV5GkLNEnRHYCQQDUEaSg45P2qrDwixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLb
 | 
			
		||||
bn3QK74T2IxY1yY+kCNq8XrIqf5fJJzIH0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3
 | 
			
		||||
fVd0geUCQQCzCFUQAh+ZkEmp5804cs6ZWBhrUAfnra8lJItYo9xPcXgdIfLfibcX
 | 
			
		||||
R71UsyO77MRD7B0+Ag2tq794IleCVcEEMAkGBSsOAwINBQADLwAwLAIUUayDfreR
 | 
			
		||||
Yh2WeU86/pHNdkUC1IgCFEfxe1f0oMpxJyrJ5XIxTi7vGdoK
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICGTCCAdgCAwCqTDAJBgUrDgMCDQUAMHwxCzAJBgNVBAYTAlVTMTYwNAYDVQQK
 | 
			
		||||
Ey1OYXRpb25hbCBBZXJvbmF1dGljcyBhbmQgU3BhY2UgQWRtaW5pc3RyYXRpb24x
 | 
			
		||||
GTAXBgNVBAsTEFRlc3QgRW52aXJvbm1lbnQxGjAYBgNVBAsTEURTUy1OQVNBLVBp
 | 
			
		||||
bG90LUNBMB4XDTk2MDUxNDE3MDE0MVoXDTk3MDUxNDE3MDE0MVowMzELMAkGA1UE
 | 
			
		||||
BhMCQVUxDzANBgNVBAoTBk1pbmNvbTETMBEGA1UEAxMKRXJpYyBZb3VuZzCB8jAJ
 | 
			
		||||
BgUrDgMCDAUAA4HkADCB4AJBAKbfHz6vE6pXXMTpswtGUec2tvnfLJUsoxE9qs4+
 | 
			
		||||
ObZX7LmLvragNPUeiTJx7UOWZ5DfBj6bXLc8eYne0lP1g3ACQQDUEaSg45P2qrDw
 | 
			
		||||
ixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLbbn3QK74T2IxY1yY+kCNq8XrIqf5fJJzI
 | 
			
		||||
H0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3fVd0geUCQQCzCFUQAh+ZkEmp5804cs6Z
 | 
			
		||||
WBhrUAfnra8lJItYo9xPcXgdIfLfibcXR71UsyO77MRD7B0+Ag2tq794IleCVcEE
 | 
			
		||||
MAkGBSsOAwINBQADMAAwLQIUWsuuJRE3VT4ueWkWMAJMJaZjj1ECFQCYY0zX4bzM
 | 
			
		||||
LC7obsrHD8XAHG+ZRG==
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICTTCCAbagAwIBAgIBADANBgkqhkiG9w0BAQQFADBMMQswCQYDVQQGEwJHQjEM
 | 
			
		||||
MAoGA1UEChMDVUNMMRgwFgYDVQQLEw9JQ0UtVEVMIFByb2plY3QxFTATBgNVBAMT
 | 
			
		||||
DFRydXN0RmFjdG9yeTAeFw05NzA0MjIxNDM5MTRaFw05ODA0MjIxNDM5MTRaMEwx
 | 
			
		||||
CzAJBgNVBAYTAkdCMQwwCgYDVQQKEwNVQ0wxGDAWBgNVBAsTD0lDRS1URUwgUHJv
 | 
			
		||||
amVjdDEVMBMGA1UEAxMMVHJ1c3RGYWN0b3J5MIGcMAoGBFUIAQECAgQAA4GNADCB
 | 
			
		||||
iQKBgQCEieR8NcXkUW1f0G6aC6u0i8q/98JqS6RxK5YmHIGKCkuTWAUjzLfUa4dt
 | 
			
		||||
U9igGCjTuxaDqlzEim+t/02pmiBZT9HaX++35MjQPUWmsChcYU5WyzGErXi+rQaw
 | 
			
		||||
zlwS73zM8qiPj/97lXYycWhgL0VaiDSPxRXEUdWoaGruom4mNQIDAQABo0IwQDAd
 | 
			
		||||
BgNVHQ4EFgQUHal1LZr7oVg5z6lYzrhTgZRCmcUwDgYDVR0PAQH/BAQDAgH2MA8G
 | 
			
		||||
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAfaggfl6FZoioecjv0dq8
 | 
			
		||||
/DXo/u11iMZvXn08gjX/zl2b4wtPbShOSY5FhkSm8GeySasz+/Nwb/uzfnIhokWi
 | 
			
		||||
lfPZHtlCWtXbIy/TN51eJyq04ceDCQDWvLC2enVg9KB+GJ34b5c5VaPRzq8MBxsA
 | 
			
		||||
S7ELuYGtmYgYm9NZOIr7yU0=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB6jCCAZQCAgEtMA0GCSqGSIb3DQEBBAUAMIGAMQswCQYDVQQGEwJVUzE2MDQG
 | 
			
		||||
A1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFkbWluaXN0cmF0
 | 
			
		||||
aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MR4wHAYDVQQLExVNRDUtUlNB
 | 
			
		||||
LU5BU0EtUGlsb3QtQ0EwHhcNOTYwNDMwMjIwNTAwWhcNOTcwNDMwMjIwNTAwWjCB
 | 
			
		||||
gDELMAkGA1UEBhMCVVMxNjA0BgNVBAoTLU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFu
 | 
			
		||||
ZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZMBcGA1UECxMQVGVzdCBFbnZpcm9ubWVu
 | 
			
		||||
dDEeMBwGA1UECxMVTUQ1LVJTQS1OQVNBLVBpbG90LUNBMFkwCgYEVQgBAQICAgAD
 | 
			
		||||
SwAwSAJBALmmX5+GqAvcrWK13rfDrNX9UfeA7f+ijyBgeFQjYUoDpFqapw4nzQBL
 | 
			
		||||
bAXug8pKkRwa2Zh8YODhXsRWu2F/UckCAwEAATANBgkqhkiG9w0BAQQFAANBAH9a
 | 
			
		||||
OBA+QCsjxXgnSqHx04gcU8S49DVUb1f2XVoLnHlIb8RnX0k5O6mpHT5eti9bLkiW
 | 
			
		||||
GJNMJ4L0AJ/ac+SmHZc=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICajCCAdMCBDGA0QUwDQYJKoZIhvcNAQEEBQAwfTELMAkGA1UEBhMCQ2ExDzAN
 | 
			
		||||
BgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmlsaXR5IEFjY2VwdGVkMR8w
 | 
			
		||||
HQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRwwGgYDVQQDExNFbnRydXN0
 | 
			
		||||
IERlbW8gV2ViIENBMB4XDTk2MDQyNjEzMzUwMVoXDTA2MDQyNjEzMzUwMVowfTEL
 | 
			
		||||
MAkGA1UEBhMCQ2ExDzANBgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmls
 | 
			
		||||
aXR5IEFjY2VwdGVkMR8wHQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRww
 | 
			
		||||
GgYDVQQDExNFbnRydXN0IERlbW8gV2ViIENBMIGdMA0GCSqGSIb3DQEBAQUAA4GL
 | 
			
		||||
ADCBhwKBgQCaroS7O1DA0hm4IefNYU1cx/nqOmzEnk291d1XqznDeF4wEgakbkCc
 | 
			
		||||
zTKxK791yNpXG5RmngqH7cygDRTHZJ6mfCRn0wGC+AI00F2vYTGqPGRQL1N3lZT0
 | 
			
		||||
YDKFC0SQeMMjFIZ1aeQigroFQnHo0VB3zWIMpNkka8PY9lxHZAmWwQIBAzANBgkq
 | 
			
		||||
hkiG9w0BAQQFAAOBgQBAx0UMVA1s54lMQyXjMX5kj99FJN5itb8bK1Rk+cegPQPF
 | 
			
		||||
cWO9SEWyEjjBjIkjjzAwBkaEszFsNGxemxtXvwjIm1xEUMTVlPEWTs2qnDvAUA9W
 | 
			
		||||
YqhWbhH0toGT36236QAsqCZ76rbTRVSSX2BHyJwJMG2tCRv7kRJ//NIgxj3H4w==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICJzCCAZACAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
 | 
			
		||||
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTczN1oXDTAxMDYw
 | 
			
		||||
OTEzNTczN1owXDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
 | 
			
		||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYDVQQDExNUZXN0IFBDQSAoMTAy
 | 
			
		||||
NCBiaXQpMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdoWk/3+WcMlfjIrkg
 | 
			
		||||
40ketmnQaEogQe1LLcuOJV6rKfUSAsPgwgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp
 | 
			
		||||
22Jp85PmemiDzyUIStwk72qhp1imbANZvlmlCFKiQrjUyuDfu4TABmn+kkt3vR1Y
 | 
			
		||||
BEOGt+IFye1UBVSATVdRJ2UVhwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABNA1u/S
 | 
			
		||||
Cg/LJZWb7GliiKJsvuhxlE4E5JxQF2zMub/CSNbF97//tYSyj96sxeFQxZXbcjm9
 | 
			
		||||
xt6mr/xNLA4szNQMJ4P+L7b5e/jC5DSqlwS+CUYJgaFs/SP+qJoCSu1bR3IM9XWO
 | 
			
		||||
cRBpDmcBbYLkSyB92WURvsZ1LtjEcn+cdQVI
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIICXAIBAAKBgQCdoWk/3+WcMlfjIrkg40ketmnQaEogQe1LLcuOJV6rKfUSAsPg
 | 
			
		||||
wgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp22Jp85PmemiDzyUIStwk72qhp1imbANZ
 | 
			
		||||
vlmlCFKiQrjUyuDfu4TABmn+kkt3vR1YBEOGt+IFye1UBVSATVdRJ2UVhwIDAQAB
 | 
			
		||||
AoGAba4fTtuap5l7/8ZsbE7Z1O32KJY4ZcOZukLOLUUhXxXduT+FTgGWujc0/rgc
 | 
			
		||||
z9qYCLlNZHOouMYTgtSfYvuMuLZ11VIt0GYH+nRioLShE59Yy+zCRyC+gPigS1kz
 | 
			
		||||
xvo14AsOIPYV14Tk/SsHyq6E0eTk7VzaIE197giiINUERPECQQDSKmtPTh/lRKw7
 | 
			
		||||
HSZSM0I1mFWn/1zqrAbontRQY5w98QWIOe5qmzYyFbPXYT3d9BzlsMyhgiRNoBbD
 | 
			
		||||
yvohSHXJAkEAwAHx6ezAZeWWzD5yXD36nyjpkVCw7Tk7TSmOceLJMWt1QcrCfqlS
 | 
			
		||||
xA5jjpQ6Z8suU5DdtWAryM2sAir1WisYzwJAd6Zcx56jvAQ3xcPXsE6scBTVFzrj
 | 
			
		||||
7FqZ6E+cclPzfLQ+QQsyOBE7bpI6e/FJppY26XGZXo3YGzV8IGXrt40oOQJALETG
 | 
			
		||||
h86EFXo3qGOFbmsDy4pdP5nBERCu8X1xUCSfintiD4c2DInxgS5oGclnJeMcjTvL
 | 
			
		||||
QjQoJCX3UJCi/OUO1QJBAKgcDHWjMvt+l1pjJBsSEZ0HX9AAIIVx0RQmbFGS+F2Q
 | 
			
		||||
hhu5l77WnnZOQ9vvhV5u7NPCUF9nhU3jh60qWWO8mkc=
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
subject=/C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
 | 
			
		||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
 | 
			
		||||
notBefore=941104185834Z
 | 
			
		||||
notAfter =991103185834Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICIzCCAZACBQJBAAAWMA0GCSqGSIb3DQEBAgUAMFwxCzAJBgNVBAYTAlVTMSAw
 | 
			
		||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVy
 | 
			
		||||
Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDQxODU4MzRaFw05
 | 
			
		||||
OTExMDMxODU4MzRaMFwxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBT
 | 
			
		||||
ZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9u
 | 
			
		||||
IEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCk+4Fie84QJ93o
 | 
			
		||||
975sbsZwmdu41QUDaSiCnHJ/lj+O7Kwpkj+KFPhCdr69XQO5kNTQvAayUTNfxMK/
 | 
			
		||||
touPmbZiImDd298ggrTKoi8tUO2UMt7gVY3UaOLgTNLNBRYulWZcYVI4HlGogqHE
 | 
			
		||||
7yXpCuaLK44xZtn42f29O2nZ6wIDAQABMA0GCSqGSIb3DQEBAgUAA34AdrW2EP4j
 | 
			
		||||
9/dZYkuwX5zBaLxJu7NJbyFHXSudVMQAKD+YufKKg5tgf+tQx6sFEC097TgCwaVI
 | 
			
		||||
0v5loMC86qYjFmZsGySp8+x5NRhPJsjjr1BKx6cxa9B8GJ1Qv6km+iYrRpwUqbtb
 | 
			
		||||
MJhCKLVLU7tDCZJAuqiqWqTGtotXTcU=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
subject=/C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
 | 
			
		||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
 | 
			
		||||
notBefore=941109235417Z
 | 
			
		||||
notAfter =991231235417Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICKTCCAZYCBQJBAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMSAw
 | 
			
		||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJl
 | 
			
		||||
IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDkyMzU0MTda
 | 
			
		||||
Fw05OTEyMzEyMzU0MTdaMF8xCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0
 | 
			
		||||
YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJlIFNlcnZlciBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCSznrB
 | 
			
		||||
roM+WqqJg1esJQF2DK2ujiw3zus1eGRUA+WEQFHJv48I4oqCCNIWhjdV6bEhAq12
 | 
			
		||||
aIGaBaJLyUslZiJWbIgHj/eBWW2EB2VwE3F2Ppt3TONQiVaYSLkdpykaEy5KEVmc
 | 
			
		||||
HhXVSVQsczppgrGXOZxtcGdI5d0t1sgeewIDAQABMA0GCSqGSIb3DQEBAgUAA34A
 | 
			
		||||
iNHReSHO4ovo+MF9NFM/YYPZtgs4F7boviGNjwC4i1N+RGceIr2XJ+CchcxK9oU7
 | 
			
		||||
suK+ktPlDemvXA4MRpX/oRxePug2WHpzpgr4IhFrwwk4fia7c+8AvQKk8xQNMD9h
 | 
			
		||||
cHsg/jKjn7P0Z1LctO6EjJY2IN6BCINxIYoPnqk=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
subject=/C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
 | 
			
		||||
	/OU=Certification Services Division/CN=Thawte Server CA
 | 
			
		||||
	/Email=server-certs@thawte.com
 | 
			
		||||
issuer= /C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
 | 
			
		||||
	/OU=Certification Services Division/CN=Thawte Server CA
 | 
			
		||||
	/Email=server-certs@thawte.com
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIC+TCCAmICAQAwDQYJKoZIhvcNAQEEBQAwgcQxCzAJBgNVBAYTAlpBMRUwEwYD
 | 
			
		||||
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
 | 
			
		||||
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
 | 
			
		||||
dmljZXMgRGl2aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkq
 | 
			
		||||
hkiG9w0BCQEWF3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMB4XDTk2MDcyNzE4MDc1
 | 
			
		||||
N1oXDTk4MDcyNzE4MDc1N1owgcQxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0
 | 
			
		||||
ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMUVGhhd3RlIENv
 | 
			
		||||
bnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
 | 
			
		||||
aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkqhkiG9w0BCQEW
 | 
			
		||||
F3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
 | 
			
		||||
iQKBgQDTpFBuyP9Wa+bPXbbqDGh1R6KqwtqEJfyo9EdR2oW1IHSUhh4PdcnpCGH1
 | 
			
		||||
Bm0wbhUZAulSwGLbTZme4moMRDjN/r7jZAlwxf6xaym2L0nIO9QnBCUQly/nkG3A
 | 
			
		||||
KEKZ10xD3sP1IW1Un13DWOHA5NlbsLjctHvfNjrCtWYiEtaHDQIDAQABMA0GCSqG
 | 
			
		||||
SIb3DQEBBAUAA4GBAIsvn7ifX3RUIrvYXtpI4DOfARkTogwm6o7OwVdl93yFhDcX
 | 
			
		||||
7h5t0XZ11MUAMziKdde3rmTvzUYIUCYoY5b032IwGMTvdiclK+STN6NP2m5nvFAM
 | 
			
		||||
qJT5gC5O+j/jBuZRQ4i0AMYQr5F4lT8oBJnhgafw6PL8aDY2vMHGSPl9+7uf
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIDDTCCAnYCAQAwDQYJKoZIhvcNAQEEBQAwgc4xCzAJBgNVBAYTAlpBMRUwEwYD
 | 
			
		||||
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
 | 
			
		||||
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
 | 
			
		||||
dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBD
 | 
			
		||||
QTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTAeFw05
 | 
			
		||||
NjA3MjcxODA3MTRaFw05ODA3MjcxODA3MTRaMIHOMQswCQYDVQQGEwJaQTEVMBMG
 | 
			
		||||
A1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xHTAbBgNVBAoT
 | 
			
		||||
FFRoYXd0ZSBDb25zdWx0aW5nIGNjMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNl
 | 
			
		||||
cnZpY2VzIERpdmlzaW9uMSEwHwYDVQQDExhUaGF3dGUgUHJlbWl1bSBTZXJ2ZXIg
 | 
			
		||||
Q0ExKDAmBgkqhkiG9w0BCQEWGXByZW1pdW0tc2VydmVyQHRoYXd0ZS5jb20wgZ8w
 | 
			
		||||
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANI2NmqL18JbntqBQWKPOO5JBFXW0O8c
 | 
			
		||||
G5UWR+8YSDU6UvQragaPOy/qVuOvho2eF/eetGV1Ak3vywmiIVHYm9Bn0LoNkgYU
 | 
			
		||||
c9STy5cqAJxcTgy8+hVS/PJEbtoRSm4Iny8t4/mqOoZztkZTWMiJBb2DEbhzP6oH
 | 
			
		||||
jfRCTedAnRw3AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAutFIgTRZVYerIZfL9lvR
 | 
			
		||||
w9Eifvvo5KTZ3h+Bj+VzNnyw4Qc/IyXkPOu6SIiH9LQ3sCmWBdxpe+qr4l77rLj2
 | 
			
		||||
GYuMtESFfn1XVALzkYgC7JcPuTOjMfIiMByt+uFf8AV8x0IW/Qkuv+hEQcyM9vxK
 | 
			
		||||
3VZdLbCVIhNoEsysrxCpxcI=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
Tims test GCI CA
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB8DCCAZoCAQAwDQYJKoZIhvcNAQEEBQAwgYIxCzAJBgNVBAYTAkFVMRMwEQYD
 | 
			
		||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
 | 
			
		||||
cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2RldmVsb3BtZW50MRkwFwYDVQQDExBD
 | 
			
		||||
cnlwdFNvZnQgRGV2IENBMB4XDTk3MDMyMjEzMzQwNFoXDTk4MDMyMjEzMzQwNFow
 | 
			
		||||
gYIxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhC
 | 
			
		||||
cmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2Rl
 | 
			
		||||
dmVsb3BtZW50MRkwFwYDVQQDExBDcnlwdFNvZnQgRGV2IENBMFwwDQYJKoZIhvcN
 | 
			
		||||
AQEBBQADSwAwSAJBAOAOAqogG5QwAmLhzyO4CoRnx/wVy4NZP4dxJy83O1EnL0rw
 | 
			
		||||
OdsamJKvPOLHgSXo3gDu9uVyvCf/QJmZAmC5ml8CAwEAATANBgkqhkiG9w0BAQQF
 | 
			
		||||
AANBADRRS/GVdd7rAqRW6SdmgLJduOU2yq3avBu99kRqbp9A/dLu6r6jU+eP4oOA
 | 
			
		||||
TfdbFZtAAD2Hx9jUtY3tfdrJOb8= 
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICVjCCAgACAQAwDQYJKoZIhvcNAQEEBQAwgbUxCzAJBgNVBAYTAkFVMRMwEQYD
 | 
			
		||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
 | 
			
		||||
cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsTI1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9O
 | 
			
		||||
IEFVVEhPUklUSUVTMTQwMgYDVQQDEytaRVJPIFZBTFVFIENBIC0gREVNT05TVFJB
 | 
			
		||||
VElPTiBQVVJQT1NFUyBPTkxZMB4XDTk3MDQwMzEzMjI1NFoXDTk4MDQwMzEzMjI1
 | 
			
		||||
NFowgbUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQH
 | 
			
		||||
EwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsT
 | 
			
		||||
I1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9OIEFVVEhPUklUSUVTMTQwMgYDVQQDEyta
 | 
			
		||||
RVJPIFZBTFVFIENBIC0gREVNT05TVFJBVElPTiBQVVJQT1NFUyBPTkxZMFwwDQYJ
 | 
			
		||||
KoZIhvcNAQEBBQADSwAwSAJBAOZ7T7yqP/tyspcko3yPY1y0Cm2EmwNvzW4QgVXR
 | 
			
		||||
Fjs3HmJ4xtSpXdo6mwcGezL3Abt/aQXaxv9PU8xt+Jr0OFUCAwEAATANBgkqhkiG
 | 
			
		||||
9w0BAQQFAANBAOQpYmGgyCqCy1OljgJhCqQOu627oVlHzK1L+t9vBaMfn40AVUR4
 | 
			
		||||
WzQVWO31KTgi5vTK1U+3h46fgUWqQ0h+6rU=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIAwgKADAgECAgEAMA0GCSqGSIb3DQEBBAUAMGIxETAPBgNVBAcTCEludGVybmV0
 | 
			
		||||
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xh
 | 
			
		||||
c3MgMSBDQSAtIEluZGl2aWR1YWwgU3Vic2NyaWJlcjAeFw05NjA0MDgxMDIwMjda
 | 
			
		||||
Fw05NzA0MDgxMDIwMjdaMGIxETAPBgNVBAcTCEludGVybmV0MRcwFQYDVQQKEw5W
 | 
			
		||||
ZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xhc3MgMSBDQSAtIElu
 | 
			
		||||
ZGl2aWR1YWwgU3Vic2NyaWJlcjCAMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2
 | 
			
		||||
FKbPTdAFDdjKI9BvqrQpkmOOLPhvltcunXZLEbE2jVfJw/0cxrr+Hgi6M8qV6r7j
 | 
			
		||||
W80GqLd5HUQq7XPysVKDaBBwZJHXPmv5912dFEObbpdFmIFH0S3L3bty10w/cari
 | 
			
		||||
QPJUObwW7s987LrbP2wqsxaxhhKdrpM01bjV0Pc+qQIDAQABAAAAADANBgkqhkiG
 | 
			
		||||
9w0BAQQFAAOBgQA+1nJryNt8VBRjRr07ArDAV/3jAH7GjDc9jsrxZS68ost9v06C
 | 
			
		||||
TvTNKGL+LISNmFLXl+JXhgGB0JZ9fvyYzNgHQ46HBUng1H6voalfJgS2KdEo50wW
 | 
			
		||||
8EFZYMDkT1k4uynwJqkVN2QJK/2q4/A/VCov5h6SlM8Affg2W+1TLqvqkwAA
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
 subject=/L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
 | 
			
		||||
 issuer= /L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIEkzCCA/ygAwIBAgIRANDTUpSRL3nTFeMrMayFSPAwDQYJKoZIhvcNAQECBQAw
 | 
			
		||||
YjERMA8GA1UEBxMISW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQw
 | 
			
		||||
MgYDVQQLEytWZXJpU2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3Jp
 | 
			
		||||
YmVyMB4XDTk2MDYwNDAwMDAwMFoXDTk4MDYwNDIzNTk1OVowYjERMA8GA1UEBxMI
 | 
			
		||||
SW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQLEytWZXJp
 | 
			
		||||
U2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3JpYmVyMIGfMA0GCSqG
 | 
			
		||||
SIb3DQEBAQUAA4GNADCBiQKBgQC6A+2czKGRcYMfm8gdnk+0de99TDDzsqo0v5nb
 | 
			
		||||
RsbUmMcdRQ7nsMbRWe0SAb/9QoLTZ/cJ0iOBqdrkz7UpqqKarVoTSdlSMVM92tWp
 | 
			
		||||
3bJncZHQD1t4xd6lQVdI1/T6R+5J0T1ukOdsI9Jmf+F28S6g3R3L1SFwiHKeZKZv
 | 
			
		||||
z+793wIDAQABo4ICRzCCAkMwggIpBgNVHQMBAf8EggIdMIICGTCCAhUwggIRBgtg
 | 
			
		||||
hkgBhvhFAQcBATCCAgAWggGrVGhpcyBjZXJ0aWZpY2F0ZSBpbmNvcnBvcmF0ZXMg
 | 
			
		||||
YnkgcmVmZXJlbmNlLCBhbmQgaXRzIHVzZSBpcyBzdHJpY3RseSBzdWJqZWN0IHRv
 | 
			
		||||
LCB0aGUgVmVyaVNpZ24gQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQg
 | 
			
		||||
KENQUyksIGF2YWlsYWJsZSBhdDogaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL0NQ
 | 
			
		||||
Uy0xLjA7IGJ5IEUtbWFpbCBhdCBDUFMtcmVxdWVzdHNAdmVyaXNpZ24uY29tOyBv
 | 
			
		||||
ciBieSBtYWlsIGF0IFZlcmlTaWduLCBJbmMuLCAyNTkzIENvYXN0IEF2ZS4sIE1v
 | 
			
		||||
dW50YWluIFZpZXcsIENBIDk0MDQzIFVTQSBUZWwuICsxICg0MTUpIDk2MS04ODMw
 | 
			
		||||
IENvcHlyaWdodCAoYykgMTk5NiBWZXJpU2lnbiwgSW5jLiAgQWxsIFJpZ2h0cyBS
 | 
			
		||||
ZXNlcnZlZC4gQ0VSVEFJTiBXQVJSQU5USUVTIERJU0NMQUlNRUQgYW5kIExJQUJJ
 | 
			
		||||
TElUWSBMSU1JVEVELqAOBgxghkgBhvhFAQcBAQGhDgYMYIZIAYb4RQEHAQECMC8w
 | 
			
		||||
LRYraHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvQ1BTLTEuMDAU
 | 
			
		||||
BglghkgBhvhCAQEBAf8EBAMCAgQwDQYJKoZIhvcNAQECBQADgYEApRJRkNBqLLgs
 | 
			
		||||
53IR/d18ODdLOWMTZ+QOOxBrq460iBEdUwgF8vmPRX1ku7UiDeNzaLlurE6eFqHq
 | 
			
		||||
2zPyK5j60zfTLVJMWKcQWwTJLjHtXrW8pxhNtFc6Fdvy5ZkHnC/9NIl7/t4U6WqB
 | 
			
		||||
p4y+p7SdMIkEwIZfds0VbnQyX5MRUJY=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
 subject=/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
			
		||||
 issuer= /C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICMTCCAZoCBQKhAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
 | 
			
		||||
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMg
 | 
			
		||||
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
 | 
			
		||||
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
 | 
			
		||||
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyVxZ
 | 
			
		||||
nvIbigEUtBDfBEDb41evakVAj4QMC9Ez2dkRz+4CWB8l9yqoRAWq7AMfeH+ek7ma
 | 
			
		||||
AKojfdashaJjRcdyJ8z0TMZ1cdI5709C8HXfCpDGjiBvmA/4rCNfcCk2pMmG57Ga
 | 
			
		||||
IMtTpYXnPb59mv4kRTPcdhXtD6JxZExlLoFoRacCAwEAATANBgkqhkiG9w0BAQIF
 | 
			
		||||
AAOBgQB1Zmw+0c2B27X4LzZRtvdCvM1Cr9wO+hVs+GeTVzrrtpLotgHKjLeOQ7RJ
 | 
			
		||||
Zfk+7r11Ri7J/CVdqMcvi5uPaM+0nJcYwE3vH9mvgrPmZLiEXIqaB1JDYft0nls6
 | 
			
		||||
NvxMsvwaPxUupVs8G5DsiCnkWRb5zget7Ond2tIxik/W2O8XjQ==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 subject=/C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
 | 
			
		||||
 issuer= /C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICMTCCAZoCBQKmAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
 | 
			
		||||
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMg
 | 
			
		||||
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
 | 
			
		||||
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
 | 
			
		||||
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LJ1
 | 
			
		||||
9njQrlpQ9OlQqZ+M1++RlHDo0iSQdomF1t+s5gEXMoDwnZNHvJplnR+Xrr/phnVj
 | 
			
		||||
IIm9gFidBAydqMEk6QvlMXi9/C0MN2qeeIDpRnX57aP7E3vIwUzSo+/1PLBij0pd
 | 
			
		||||
O92VZ48TucE81qcmm+zDO3rZTbxtm+gVAePwR6kCAwEAATANBgkqhkiG9w0BAQIF
 | 
			
		||||
AAOBgQBT3dPwnCR+QKri/AAa19oM/DJhuBUNlvP6Vxt/M3yv6ZiaYch6s7f/sdyZ
 | 
			
		||||
g9ysEvxwyR84Qu1E9oAuW2szaayc01znX1oYx7EteQSWQZGZQbE8DbqEOcY7l/Am
 | 
			
		||||
yY7uvcxClf8exwI/VAx49byqYHwCaejcrOICdmHEPgPq0ook0Q==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										432
									
								
								apps/sess_id.c
									
									
									
									
									
								
							
							
						
						
									
										432
									
								
								apps/sess_id.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -67,20 +67,20 @@
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	sess_id_main
 | 
			
		||||
#define PROG    sess_id_main
 | 
			
		||||
 | 
			
		||||
static const char *sess_id_usage[]={
 | 
			
		||||
"usage: sess_id args\n",
 | 
			
		||||
"\n",
 | 
			
		||||
" -inform arg     - input format - default PEM (DER or PEM)\n",
 | 
			
		||||
" -outform arg    - output format - default PEM\n",
 | 
			
		||||
" -in arg         - input file - default stdin\n",
 | 
			
		||||
" -out arg        - output file - default stdout\n",
 | 
			
		||||
" -text           - print ssl session id details\n",
 | 
			
		||||
" -cert           - output certificate \n",
 | 
			
		||||
" -noout          - no CRL output\n",
 | 
			
		||||
" -context arg    - set the session ID context\n",
 | 
			
		||||
NULL
 | 
			
		||||
static const char *sess_id_usage[] = {
 | 
			
		||||
    "usage: sess_id args\n",
 | 
			
		||||
    "\n",
 | 
			
		||||
    " -inform arg     - input format - default PEM (DER or PEM)\n",
 | 
			
		||||
    " -outform arg    - output format - default PEM\n",
 | 
			
		||||
    " -in arg         - input file - default stdin\n",
 | 
			
		||||
    " -out arg        - output file - default stdout\n",
 | 
			
		||||
    " -text           - print ssl session id details\n",
 | 
			
		||||
    " -cert           - output certificate \n",
 | 
			
		||||
    " -noout          - no CRL output\n",
 | 
			
		||||
    " -context arg    - set the session ID context\n",
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static SSL_SESSION *load_sess_id(char *file, int format);
 | 
			
		||||
@@ -88,233 +88,213 @@ static SSL_SESSION *load_sess_id(char *file, int format);
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	SSL_SESSION *x=NULL;
 | 
			
		||||
	int ret=1,i,num,badops=0;
 | 
			
		||||
	BIO *out=NULL;
 | 
			
		||||
	int informat,outformat;
 | 
			
		||||
	char *infile=NULL,*outfile=NULL,*context=NULL;
 | 
			
		||||
	int cert=0,noout=0,text=0;
 | 
			
		||||
	const char **pp;
 | 
			
		||||
{
 | 
			
		||||
    SSL_SESSION *x = NULL;
 | 
			
		||||
    X509 *peer = NULL;
 | 
			
		||||
    int ret = 1, i, num, badops = 0;
 | 
			
		||||
    BIO *out = NULL;
 | 
			
		||||
    int informat, outformat;
 | 
			
		||||
    char *infile = NULL, *outfile = NULL, *context = NULL;
 | 
			
		||||
    int cert = 0, noout = 0, text = 0;
 | 
			
		||||
    const char **pp;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	num=0;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text= ++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;
 | 
			
		||||
		    context=*++argv;
 | 
			
		||||
		    }
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    num = 0;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = ++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;
 | 
			
		||||
            context = *++argv;
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		for (pp=sess_id_usage; (*pp != NULL); pp++)
 | 
			
		||||
			BIO_printf(bio_err,"%s",*pp);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        for (pp = sess_id_usage; (*pp != NULL); pp++)
 | 
			
		||||
            BIO_printf(bio_err, "%s", *pp);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	x=load_sess_id(infile,informat);
 | 
			
		||||
	if (x == NULL) { goto end; }
 | 
			
		||||
 | 
			
		||||
	if(context)
 | 
			
		||||
	    {
 | 
			
		||||
	    x->sid_ctx_length=strlen(context);
 | 
			
		||||
	    if(x->sid_ctx_length > SSL_MAX_SID_CTX_LENGTH)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"Context too long\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	    memcpy(x->sid_ctx,context,x->sid_ctx_length);
 | 
			
		||||
	    }
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    x = load_sess_id(infile, informat);
 | 
			
		||||
    if (x == NULL) {
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    peer = SSL_SESSION_get0_peer(x);
 | 
			
		||||
 | 
			
		||||
    if (context) {
 | 
			
		||||
        size_t ctx_len = strlen(context);
 | 
			
		||||
        if (ctx_len > SSL_MAX_SID_CTX_LENGTH) {
 | 
			
		||||
            BIO_printf(bio_err, "Context too long\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        SSL_SESSION_set1_id_context(x, (unsigned char *)context, ctx_len);
 | 
			
		||||
    }
 | 
			
		||||
#ifdef undef
 | 
			
		||||
	/* just testing for memory leaks :-) */
 | 
			
		||||
	{
 | 
			
		||||
	SSL_SESSION *s;
 | 
			
		||||
	char buf[1024*10],*p;
 | 
			
		||||
	int i;
 | 
			
		||||
    /* just testing for memory leaks :-) */
 | 
			
		||||
    {
 | 
			
		||||
        SSL_SESSION *s;
 | 
			
		||||
        char buf[1024 * 10], *p;
 | 
			
		||||
        int i;
 | 
			
		||||
 | 
			
		||||
	s=SSL_SESSION_new();
 | 
			
		||||
        s = SSL_SESSION_new();
 | 
			
		||||
 | 
			
		||||
	p= &buf;
 | 
			
		||||
	i=i2d_SSL_SESSION(x,&p);
 | 
			
		||||
	p= &buf;
 | 
			
		||||
	d2i_SSL_SESSION(&s,&p,(long)i);
 | 
			
		||||
	p= &buf;
 | 
			
		||||
	d2i_SSL_SESSION(&s,&p,(long)i);
 | 
			
		||||
	p= &buf;
 | 
			
		||||
	d2i_SSL_SESSION(&s,&p,(long)i);
 | 
			
		||||
	SSL_SESSION_free(s);
 | 
			
		||||
	}
 | 
			
		||||
        p = &buf;
 | 
			
		||||
        i = i2d_SSL_SESSION(x, &p);
 | 
			
		||||
        p = &buf;
 | 
			
		||||
        d2i_SSL_SESSION(&s, &p, (long)i);
 | 
			
		||||
        p = &buf;
 | 
			
		||||
        d2i_SSL_SESSION(&s, &p, (long)i);
 | 
			
		||||
        p = &buf;
 | 
			
		||||
        d2i_SSL_SESSION(&s, &p, (long)i);
 | 
			
		||||
        SSL_SESSION_free(s);
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (!noout || text)
 | 
			
		||||
		{
 | 
			
		||||
		out=BIO_new(BIO_s_file());
 | 
			
		||||
		if (out == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    if (!noout || text) {
 | 
			
		||||
        out = BIO_new(BIO_s_file());
 | 
			
		||||
        if (out == NULL) {
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if (outfile == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
        if (outfile == NULL) {
 | 
			
		||||
            BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
            {
 | 
			
		||||
                BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
                out = BIO_push(tmpbio, out);
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				perror(outfile);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
        } else {
 | 
			
		||||
            if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
                perror(outfile);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		SSL_SESSION_print(out,x);
 | 
			
		||||
    if (text) {
 | 
			
		||||
        SSL_SESSION_print(out, x);
 | 
			
		||||
 | 
			
		||||
		if (cert)
 | 
			
		||||
			{
 | 
			
		||||
			if (x->peer == NULL)
 | 
			
		||||
				BIO_puts(out,"No certificate present\n");
 | 
			
		||||
			else
 | 
			
		||||
				X509_print(out,x->peer);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
        if (cert) {
 | 
			
		||||
            if (peer == NULL)
 | 
			
		||||
                BIO_puts(out, "No certificate present\n");
 | 
			
		||||
            else
 | 
			
		||||
                X509_print(out, peer);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!noout && !cert)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_SSL_SESSION_bio(out,x);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i=PEM_write_bio_SSL_SESSION(out,x);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (!i) {
 | 
			
		||||
			BIO_printf(bio_err,"unable to write SSL_SESSION\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else if (!noout && (x->peer != NULL)) /* just print the certificate */
 | 
			
		||||
		{
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=(int)i2d_X509_bio(out,x->peer);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i=PEM_write_bio_X509(out,x->peer);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (!i) {
 | 
			
		||||
			BIO_printf(bio_err,"unable to write X509\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (x != NULL) SSL_SESSION_free(x);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    if (!noout && !cert) {
 | 
			
		||||
        if (outformat == FORMAT_ASN1)
 | 
			
		||||
            i = i2d_SSL_SESSION_bio(out, x);
 | 
			
		||||
        else if (outformat == FORMAT_PEM)
 | 
			
		||||
            i = PEM_write_bio_SSL_SESSION(out, x);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (!i) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to write SSL_SESSION\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (!noout && (peer != NULL)) { /* just print the certificate */
 | 
			
		||||
        if (outformat == FORMAT_ASN1)
 | 
			
		||||
            i = (int)i2d_X509_bio(out, peer);
 | 
			
		||||
        else if (outformat == FORMAT_PEM)
 | 
			
		||||
            i = PEM_write_bio_X509(out, peer);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (!i) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to write X509\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (x != NULL)
 | 
			
		||||
        SSL_SESSION_free(x);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static SSL_SESSION *load_sess_id(char *infile, int format)
 | 
			
		||||
	{
 | 
			
		||||
	SSL_SESSION *x=NULL;
 | 
			
		||||
	BIO *in=NULL;
 | 
			
		||||
{
 | 
			
		||||
    SSL_SESSION *x = NULL;
 | 
			
		||||
    BIO *in = NULL;
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	if (in == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    if (in == NULL) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if 	(format == FORMAT_ASN1)
 | 
			
		||||
		x=d2i_SSL_SESSION_bio(in,NULL);
 | 
			
		||||
	else if (format == FORMAT_PEM)
 | 
			
		||||
		x=PEM_read_bio_SSL_SESSION(in,NULL,NULL,NULL);
 | 
			
		||||
	else	{
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified for input crl\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (x == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load SSL_SESSION\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
end:
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	return(x);
 | 
			
		||||
	}
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
            perror(infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (format == FORMAT_ASN1)
 | 
			
		||||
        x = d2i_SSL_SESSION_bio(in, NULL);
 | 
			
		||||
    else if (format == FORMAT_PEM)
 | 
			
		||||
        x = PEM_read_bio_SSL_SESSION(in, NULL, NULL, NULL);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "bad input format specified for input crl\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (x == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to load SSL_SESSION\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 end:
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    return (x);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1331
									
								
								apps/smime.c
									
									
									
									
									
								
							
							
						
						
									
										1331
									
								
								apps/smime.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										5186
									
								
								apps/speed.c
									
									
									
									
									
								
							
							
						
						
									
										5186
									
								
								apps/speed.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										404
									
								
								apps/spkac.c
									
									
									
									
									
								
							
							
						
						
									
										404
									
								
								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.
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -71,238 +71,242 @@
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	spkac_main
 | 
			
		||||
#define PROG    spkac_main
 | 
			
		||||
 | 
			
		||||
/* -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
/*-
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -out arg     - output file - default stdout
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	int i,badops=0, ret = 1;
 | 
			
		||||
	BIO *in = NULL,*out = NULL;
 | 
			
		||||
	int verify=0,noout=0,pubkey=0;
 | 
			
		||||
	char *infile = NULL,*outfile = NULL,*prog;
 | 
			
		||||
	char *passargin = NULL, *passin = NULL;
 | 
			
		||||
	const char *spkac = "SPKAC", *spksect = "default";
 | 
			
		||||
	char *spkstr = NULL;
 | 
			
		||||
	char *challenge = NULL, *keyfile = NULL;
 | 
			
		||||
	CONF *conf = NULL;
 | 
			
		||||
	NETSCAPE_SPKI *spki = NULL;
 | 
			
		||||
	EVP_PKEY *pkey = NULL;
 | 
			
		||||
{
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    int i, badops = 0, ret = 1;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int verify = 0, noout = 0, pubkey = 0;
 | 
			
		||||
    char *infile = NULL, *outfile = NULL, *prog;
 | 
			
		||||
    char *passargin = NULL, *passin = NULL;
 | 
			
		||||
    const char *spkac = "SPKAC", *spksect = "default";
 | 
			
		||||
    char *spkstr = NULL;
 | 
			
		||||
    char *challenge = NULL, *keyfile = NULL;
 | 
			
		||||
    CONF *conf = NULL;
 | 
			
		||||
    NETSCAPE_SPKI *spki = NULL;
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    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;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	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;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-key") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			keyfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-challenge") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			challenge= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-spkac") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			spkac= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-spksect") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			spksect= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    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;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passin") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargin = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-key") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            keyfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-challenge") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            challenge = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-spkac") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            spkac = *(++argv);
 | 
			
		||||
        } 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;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pubkey") == 0)
 | 
			
		||||
			pubkey=1;
 | 
			
		||||
		else if (strcmp(*argv,"-verify") == 0)
 | 
			
		||||
			verify=1;
 | 
			
		||||
		else badops = 1;
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
        else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pubkey") == 0)
 | 
			
		||||
            pubkey = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-verify") == 0)
 | 
			
		||||
            verify = 1;
 | 
			
		||||
        else
 | 
			
		||||
            badops = 1;
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	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," -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");
 | 
			
		||||
    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, " -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;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
    e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if(keyfile) {
 | 
			
		||||
		pkey = load_key(bio_err,
 | 
			
		||||
				strcmp(keyfile, "-") ? keyfile : NULL,
 | 
			
		||||
				FORMAT_PEM, 1, passin, e, "private key");
 | 
			
		||||
		if(!pkey) {
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		spki = NETSCAPE_SPKI_new();
 | 
			
		||||
		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 (keyfile) {
 | 
			
		||||
        pkey = load_key(bio_err,
 | 
			
		||||
                        strcmp(keyfile, "-") ? keyfile : NULL,
 | 
			
		||||
                        FORMAT_PEM, 1, passin, e, "private key");
 | 
			
		||||
        if (!pkey) {
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        spki = NETSCAPE_SPKI_new();
 | 
			
		||||
        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");
 | 
			
		||||
		else {
 | 
			
		||||
			out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
        if (outfile)
 | 
			
		||||
            out = BIO_new_file(outfile, "w");
 | 
			
		||||
        else {
 | 
			
		||||
            out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			    out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
            {
 | 
			
		||||
                BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
                out = BIO_push(tmpbio, out);
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if(!out) {
 | 
			
		||||
			BIO_printf(bio_err, "Error opening output file\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		BIO_printf(out, "SPKAC=%s\n", spkstr);
 | 
			
		||||
		OPENSSL_free(spkstr);
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
        if (!out) {
 | 
			
		||||
            BIO_printf(bio_err, "Error opening output file\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        BIO_printf(out, "SPKAC=%s\n", spkstr);
 | 
			
		||||
        OPENSSL_free(spkstr);
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        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");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(!in) {
 | 
			
		||||
		BIO_printf(bio_err, "Error opening input file\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    conf = NCONF_new(NULL);
 | 
			
		||||
    i = NCONF_load_bio(conf, in, NULL);
 | 
			
		||||
 | 
			
		||||
	conf = NCONF_new(NULL);
 | 
			
		||||
	i = NCONF_load_bio(conf, in, NULL);
 | 
			
		||||
    if (!i) {
 | 
			
		||||
        BIO_printf(bio_err, "Error parsing config file\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(!i) {
 | 
			
		||||
		BIO_printf(bio_err, "Error parsing config file\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    spkstr = NCONF_get_string(conf, spksect, spkac);
 | 
			
		||||
 | 
			
		||||
	spkstr = NCONF_get_string(conf, spksect, spkac);
 | 
			
		||||
		
 | 
			
		||||
	if(!spkstr) {
 | 
			
		||||
		BIO_printf(bio_err, "Can't find SPKAC called \"%s\"\n", spkac);
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    if (!spkstr) {
 | 
			
		||||
        BIO_printf(bio_err, "Can't find SPKAC called \"%s\"\n", spkac);
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	spki = NETSCAPE_SPKI_b64_decode(spkstr, -1);
 | 
			
		||||
	
 | 
			
		||||
	if(!spki) {
 | 
			
		||||
		BIO_printf(bio_err, "Error loading SPKAC\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    spki = NETSCAPE_SPKI_b64_decode(spkstr, -1);
 | 
			
		||||
 | 
			
		||||
	if (outfile) out = BIO_new_file(outfile, "w");
 | 
			
		||||
	else {
 | 
			
		||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
    if (!spki) {
 | 
			
		||||
        BIO_printf(bio_err, "Error loading SPKAC\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (outfile)
 | 
			
		||||
        out = BIO_new_file(outfile, "w");
 | 
			
		||||
    else {
 | 
			
		||||
        out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		    out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(!out) {
 | 
			
		||||
		BIO_printf(bio_err, "Error opening output file\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    if (!out) {
 | 
			
		||||
        BIO_printf(bio_err, "Error opening output file\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	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");
 | 
			
		||||
		else {
 | 
			
		||||
			BIO_printf(bio_err, "Signature Failure\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if(pubkey) PEM_write_bio_PUBKEY(out, pkey);
 | 
			
		||||
    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");
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "Signature Failure\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (pubkey)
 | 
			
		||||
        PEM_write_bio_PUBKEY(out, pkey);
 | 
			
		||||
 | 
			
		||||
	ret = 0;
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
end:
 | 
			
		||||
	NCONF_free(conf);
 | 
			
		||||
	NETSCAPE_SPKI_free(spki);
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	EVP_PKEY_free(pkey);
 | 
			
		||||
	if(passin) OPENSSL_free(passin);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 end:
 | 
			
		||||
    NCONF_free(conf);
 | 
			
		||||
    NETSCAPE_SPKI_free(spki);
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    EVP_PKEY_free(pkey);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										768
									
								
								apps/srp.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										768
									
								
								apps/srp.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,768 @@
 | 
			
		||||
/* 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, 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);
 | 
			
		||||
 | 
			
		||||
        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);
 | 
			
		||||
            if(!tofree) {
 | 
			
		||||
                BIO_printf(bio_err, "Out of memory\n");
 | 
			
		||||
                goto err;
 | 
			
		||||
            }
 | 
			
		||||
            strcpy(tofree, s);
 | 
			
		||||
# else
 | 
			
		||||
            len = strlen(s) + sizeof(CONFIG_FILE) + 1;
 | 
			
		||||
            tofree = OPENSSL_malloc(len);
 | 
			
		||||
            if(!tofree) {
 | 
			
		||||
                BIO_printf(bio_err, "Out of memory\n");
 | 
			
		||||
                goto err;
 | 
			
		||||
            }
 | 
			
		||||
            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 =
 | 
			
		||||
                                (char **)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 abandoned.\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
 | 
			
		||||
							
								
								
									
										420
									
								
								apps/testdsa.h
									
									
									
									
									
								
							
							
						
						
									
										420
									
								
								apps/testdsa.h
									
									
									
									
									
								
							@@ -1,217 +1,233 @@
 | 
			
		||||
/* NOCW */
 | 
			
		||||
/* used by apps/speed.c */
 | 
			
		||||
DSA *get_dsa512(void );
 | 
			
		||||
DSA *get_dsa1024(void );
 | 
			
		||||
DSA *get_dsa2048(void );
 | 
			
		||||
DSA *get_dsa512(void);
 | 
			
		||||
DSA *get_dsa1024(void);
 | 
			
		||||
DSA *get_dsa2048(void);
 | 
			
		||||
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,
 | 
			
		||||
	};
 | 
			
		||||
    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,
 | 
			
		||||
	0x27,0xb3,0xec,0x49,0xfd,0x08,0x43,0x3d,0x7e,0xa8,0x2c,0x5e,
 | 
			
		||||
	0x7b,0xbb,0xfc,0xf4,0x6e,0xeb,0x6c,0xb0,0x6e,0xf8,0x02,0x12,
 | 
			
		||||
	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,
 | 
			
		||||
	0x62,0x50,0x33,0x4B,0x02,0x3C,0x52,0x30,0x03,0x8B,0x3B,0xF9,
 | 
			
		||||
	0x5F,0xD1,0x24,0x06,0x4F,0x7B,0x4C,0xBA,0xAA,0x40,0x9B,0xFD,
 | 
			
		||||
	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,
 | 
			
		||||
	0xBE,0x5B,0x5F,0xB7,0x10,0xD7,0x89,0xB7,0x8E,0x74,0xFB,0xCF,
 | 
			
		||||
	0x29,0x1E,0xEB,0xA8,0x2C,0x54,0x51,0xB8,0x10,0xDE,0xA0,0xCE,
 | 
			
		||||
	0x2F,0xCC,0x24,0x6B,0x90,0x77,0xDE,0xA2,0x68,0xA6,0x52,0x12,
 | 
			
		||||
	0xA2,0x03,0x9D,0x20,
 | 
			
		||||
	};
 | 
			
		||||
    0x00, 0x95, 0xa7, 0x0d, 0xec, 0x93, 0x68, 0xba, 0x5f, 0xf7, 0x5f, 0x07,
 | 
			
		||||
    0xf2, 0x3b, 0xad, 0x6b, 0x01, 0xdc, 0xbe, 0xec, 0xde, 0x04, 0x7a, 0x3a,
 | 
			
		||||
    0x27, 0xb3, 0xec, 0x49, 0xfd, 0x08, 0x43, 0x3d, 0x7e, 0xa8, 0x2c, 0x5e,
 | 
			
		||||
    0x7b, 0xbb, 0xfc, 0xf4, 0x6e, 0xeb, 0x6c, 0xb0, 0x6e, 0xf8, 0x02, 0x12,
 | 
			
		||||
    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,
 | 
			
		||||
    0x62, 0x50, 0x33, 0x4B, 0x02, 0x3C, 0x52, 0x30, 0x03, 0x8B, 0x3B, 0xF9,
 | 
			
		||||
    0x5F, 0xD1, 0x24, 0x06, 0x4F, 0x7B, 0x4C, 0xBA, 0xAA, 0x40, 0x9B, 0xFD,
 | 
			
		||||
    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,
 | 
			
		||||
    0xBE, 0x5B, 0x5F, 0xB7, 0x10, 0xD7, 0x89, 0xB7, 0x8E, 0x74, 0xFB, 0xCF,
 | 
			
		||||
    0x29, 0x1E, 0xEB, 0xA8, 0x2C, 0x54, 0x51, 0xB8, 0x10, 0xDE, 0xA0, 0xCE,
 | 
			
		||||
    0x2F, 0xCC, 0x24, 0x6B, 0x90, 0x77, 0xDE, 0xA2, 0x68, 0xA6, 0x52, 0x12,
 | 
			
		||||
    0xA2, 0x03, 0x9D, 0x20,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
DSA *get_dsa512()
 | 
			
		||||
	{
 | 
			
		||||
	DSA *dsa;
 | 
			
		||||
{
 | 
			
		||||
    DSA *dsa;
 | 
			
		||||
 | 
			
		||||
	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))
 | 
			
		||||
		return(NULL);
 | 
			
		||||
	return(dsa);
 | 
			
		||||
	}
 | 
			
		||||
    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))
 | 
			
		||||
        return (NULL);
 | 
			
		||||
    return (dsa);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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,
 | 
			
		||||
	0x7d,0x9c,0x8f,0x8c,0x8a,0x51,0xd6,0x11,0x2b,0x99,0xaf,0x1e,
 | 
			
		||||
	0x90,0x97,0xb5,0xd3,0xa6,0x20,0x25,0xd6,0xfe,0x43,0x02,0xd5,
 | 
			
		||||
	0x91,0x7d,0xa7,0x8c,0xdb,0xc9,0x85,0xa3,0x36,0x48,0xf7,0x68,
 | 
			
		||||
	0xaa,0x60,0xb1,0xf7,0x05,0x68,0x3a,0xa3,0x3f,0xd3,0x19,0x82,
 | 
			
		||||
	0xd8,0x82,0x7a,0x77,0xfb,0xef,0xf4,0x15,0x0a,0xeb,0x06,0x04,
 | 
			
		||||
	0x7f,0x53,0x07,0x0c,0xbc,0xcb,0x2d,0x83,0xdb,0x3e,0xd1,0x28,
 | 
			
		||||
	0xa5,0xa1,0x31,0xe0,0x67,0xfa,0x50,0xde,0x9b,0x07,0x83,0x7e,
 | 
			
		||||
	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,
 | 
			
		||||
	0x86,0x96,0xB3,0x15,0xE0,0x53,0x2E,0x8F,0xE0,0x59,0x82,0x73,
 | 
			
		||||
	0x90,0x3E,0x75,0x31,0x99,0x47,0x7A,0x52,0xFB,0x85,0xE4,0xD9,
 | 
			
		||||
	0xA6,0x7B,0x38,0x9B,0x68,0x8A,0x84,0x9B,0x87,0xC6,0x1E,0xB5,
 | 
			
		||||
	0x7E,0x86,0x4B,0x53,0x5B,0x59,0xCF,0x71,0x65,0x19,0x88,0x6E,
 | 
			
		||||
	0xCE,0x66,0xAE,0x6B,0x88,0x36,0xFB,0xEC,0x28,0xDC,0xC2,0xD7,
 | 
			
		||||
	0xA5,0xBB,0xE5,0x2C,0x39,0x26,0x4B,0xDA,0x9A,0x70,0x18,0x95,
 | 
			
		||||
	0x37,0x95,0x10,0x56,0x23,0xF6,0x15,0xED,0xBA,0x04,0x5E,0xDE,
 | 
			
		||||
	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,
 | 
			
		||||
	0x98,0xBB,0x28,0x86,0x48,0xFC,0xDE,0x99,0x04,0x3F,0x5F,0x88,
 | 
			
		||||
	0x0C,0x9C,0x73,0x24,0x0D,0x20,0x5D,0xB9,0x2A,0x9A,0x3F,0x18,
 | 
			
		||||
	0x96,0x27,0xE4,0x62,0x87,0xC1,0x7B,0x74,0x62,0x53,0xFC,0x61,
 | 
			
		||||
	0x27,0xA8,0x7A,0x91,0x09,0x9D,0xB6,0xF1,0x4D,0x9C,0x54,0x0F,
 | 
			
		||||
	0x58,0x06,0xEE,0x49,0x74,0x07,0xCE,0x55,0x7E,0x23,0xCE,0x16,
 | 
			
		||||
	0xF6,0xCA,0xDC,0x5A,0x61,0x01,0x7E,0xC9,0x71,0xB5,0x4D,0xF6,
 | 
			
		||||
	0xDC,0x34,0x29,0x87,0x68,0xF6,0x5E,0x20,0x93,0xB3,0xDB,0xF5,
 | 
			
		||||
	0xE4,0x09,0x6C,0x41,0x17,0x95,0x92,0xEB,0x01,0xB5,0x73,0xA5,
 | 
			
		||||
	0x6A,0x7E,0xD8,0x32,0xED,0x0E,0x02,0xB8,
 | 
			
		||||
	};
 | 
			
		||||
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,
 | 
			
		||||
    0x7d, 0x9c, 0x8f, 0x8c, 0x8a, 0x51, 0xd6, 0x11, 0x2b, 0x99, 0xaf, 0x1e,
 | 
			
		||||
    0x90, 0x97, 0xb5, 0xd3, 0xa6, 0x20, 0x25, 0xd6, 0xfe, 0x43, 0x02, 0xd5,
 | 
			
		||||
    0x91, 0x7d, 0xa7, 0x8c, 0xdb, 0xc9, 0x85, 0xa3, 0x36, 0x48, 0xf7, 0x68,
 | 
			
		||||
    0xaa, 0x60, 0xb1, 0xf7, 0x05, 0x68, 0x3a, 0xa3, 0x3f, 0xd3, 0x19, 0x82,
 | 
			
		||||
    0xd8, 0x82, 0x7a, 0x77, 0xfb, 0xef, 0xf4, 0x15, 0x0a, 0xeb, 0x06, 0x04,
 | 
			
		||||
    0x7f, 0x53, 0x07, 0x0c, 0xbc, 0xcb, 0x2d, 0x83, 0xdb, 0x3e, 0xd1, 0x28,
 | 
			
		||||
    0xa5, 0xa1, 0x31, 0xe0, 0x67, 0xfa, 0x50, 0xde, 0x9b, 0x07, 0x83, 0x7e,
 | 
			
		||||
    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,
 | 
			
		||||
    0x86, 0x96, 0xB3, 0x15, 0xE0, 0x53, 0x2E, 0x8F, 0xE0, 0x59, 0x82, 0x73,
 | 
			
		||||
    0x90, 0x3E, 0x75, 0x31, 0x99, 0x47, 0x7A, 0x52, 0xFB, 0x85, 0xE4, 0xD9,
 | 
			
		||||
    0xA6, 0x7B, 0x38, 0x9B, 0x68, 0x8A, 0x84, 0x9B, 0x87, 0xC6, 0x1E, 0xB5,
 | 
			
		||||
    0x7E, 0x86, 0x4B, 0x53, 0x5B, 0x59, 0xCF, 0x71, 0x65, 0x19, 0x88, 0x6E,
 | 
			
		||||
    0xCE, 0x66, 0xAE, 0x6B, 0x88, 0x36, 0xFB, 0xEC, 0x28, 0xDC, 0xC2, 0xD7,
 | 
			
		||||
    0xA5, 0xBB, 0xE5, 0x2C, 0x39, 0x26, 0x4B, 0xDA, 0x9A, 0x70, 0x18, 0x95,
 | 
			
		||||
    0x37, 0x95, 0x10, 0x56, 0x23, 0xF6, 0x15, 0xED, 0xBA, 0x04, 0x5E, 0xDE,
 | 
			
		||||
    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,
 | 
			
		||||
    0x98, 0xBB, 0x28, 0x86, 0x48, 0xFC, 0xDE, 0x99, 0x04, 0x3F, 0x5F, 0x88,
 | 
			
		||||
    0x0C, 0x9C, 0x73, 0x24, 0x0D, 0x20, 0x5D, 0xB9, 0x2A, 0x9A, 0x3F, 0x18,
 | 
			
		||||
    0x96, 0x27, 0xE4, 0x62, 0x87, 0xC1, 0x7B, 0x74, 0x62, 0x53, 0xFC, 0x61,
 | 
			
		||||
    0x27, 0xA8, 0x7A, 0x91, 0x09, 0x9D, 0xB6, 0xF1, 0x4D, 0x9C, 0x54, 0x0F,
 | 
			
		||||
    0x58, 0x06, 0xEE, 0x49, 0x74, 0x07, 0xCE, 0x55, 0x7E, 0x23, 0xCE, 0x16,
 | 
			
		||||
    0xF6, 0xCA, 0xDC, 0x5A, 0x61, 0x01, 0x7E, 0xC9, 0x71, 0xB5, 0x4D, 0xF6,
 | 
			
		||||
    0xDC, 0x34, 0x29, 0x87, 0x68, 0xF6, 0x5E, 0x20, 0x93, 0xB3, 0xDB, 0xF5,
 | 
			
		||||
    0xE4, 0x09, 0x6C, 0x41, 0x17, 0x95, 0x92, 0xEB, 0x01, 0xB5, 0x73, 0xA5,
 | 
			
		||||
    0x6A, 0x7E, 0xD8, 0x32, 0xED, 0x0E, 0x02, 0xB8,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
DSA *get_dsa1024()
 | 
			
		||||
	{
 | 
			
		||||
	DSA *dsa;
 | 
			
		||||
{
 | 
			
		||||
    DSA *dsa;
 | 
			
		||||
 | 
			
		||||
	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))
 | 
			
		||||
		return(NULL);
 | 
			
		||||
	return(dsa);
 | 
			
		||||
	}
 | 
			
		||||
    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))
 | 
			
		||||
        return (NULL);
 | 
			
		||||
    return (dsa);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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,
 | 
			
		||||
    0xe0, 0x61, 0x88, 0x88, 0x21, 0xcc, 0x74, 0x5d, 0xce, 0x4c, 0x51, 0x47,
 | 
			
		||||
    0xf0, 0xc5, 0x5c, 0x4c, 0x82, 0x7a, 0xaf, 0x72, 0xad, 0xb9, 0xe0, 0x53,
 | 
			
		||||
    0xf2, 0x78, 0xb7, 0xf0, 0xb5, 0x48, 0x7f, 0x8a, 0x3a, 0x18, 0xd1, 0x9f,
 | 
			
		||||
    0x8b, 0x7d, 0xa5, 0x47, 0xb7, 0x95, 0xab, 0x98, 0xf8, 0x7b, 0x74, 0x50,
 | 
			
		||||
    0x56, 0x8e, 0x57, 0xf0, 0xee, 0xf5, 0xb7, 0xba, 0xab, 0x85, 0x86, 0xf9,
 | 
			
		||||
    0x2b, 0xef, 0x41, 0x56, 0xa0, 0xa4, 0x9f, 0xb7, 0x38, 0x00, 0x46, 0x0a,
 | 
			
		||||
    0xa6, 0xf1, 0xfc, 0x1f, 0xd8, 0x4e, 0x85, 0x44, 0x92, 0x43, 0x21, 0x5d,
 | 
			
		||||
    0x6e, 0xcc, 0xc2, 0xcb, 0x26, 0x31, 0x0d, 0x21, 0xc4, 0xbd, 0x8d, 0x24,
 | 
			
		||||
    0xbc, 0xd9, 0x18, 0x19, 0xd7, 0xdc, 0xf1, 0xe7, 0x93, 0x50, 0x48, 0x03,
 | 
			
		||||
    0x2c, 0xae, 0x2e, 0xe7, 0x49, 0x88, 0x5f, 0x93, 0x57, 0x27, 0x99, 0x36,
 | 
			
		||||
    0xb4, 0x20, 0xab, 0xfc, 0xa7, 0x2b, 0xf2, 0xd9, 0x98, 0xd7, 0xd4, 0x34,
 | 
			
		||||
    0x9d, 0x96, 0x50, 0x58, 0x9a, 0xea, 0x54, 0xf3, 0xee, 0xf5, 0x63, 0x14,
 | 
			
		||||
    0xee, 0x85, 0x83, 0x74, 0x76, 0xe1, 0x52, 0x95, 0xc3, 0xf7, 0xeb, 0x04,
 | 
			
		||||
    0x04, 0x7b, 0xa7, 0x28, 0x1b, 0xcc, 0xea, 0x4a, 0x4e, 0x84, 0xda, 0xd8,
 | 
			
		||||
    0x9c, 0x79, 0xd8, 0x9b, 0x66, 0x89, 0x2f, 0xcf, 0xac, 0xd7, 0x79, 0xf9,
 | 
			
		||||
    0xa9, 0xd8, 0x45, 0x13, 0x78, 0xb9, 0x00, 0x14, 0xc9, 0x7e, 0x22, 0x51,
 | 
			
		||||
    0x86, 0x67, 0xb0, 0x9f, 0x26, 0x11, 0x23, 0xc8, 0x38, 0xd7, 0x70, 0x1d,
 | 
			
		||||
    0x15, 0x8e, 0x4d, 0x4f, 0x95, 0x97, 0x40, 0xa1, 0xc2, 0x7e, 0x01, 0x18,
 | 
			
		||||
    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,
 | 
			
		||||
    0xEB, 0xF8, 0xC4, 0x13, 0xD9, 0xA0, 0x5D, 0x8B, 0x5C, 0x8E, 0xDC, 0xC2,
 | 
			
		||||
    0x1D, 0x0B, 0x41, 0x32, 0xB0, 0x1F, 0xFE, 0xEF, 0x0C, 0xC2, 0xA2, 0x7E,
 | 
			
		||||
    0x68, 0x5C, 0x28, 0x21, 0xE9, 0xF5, 0xB1, 0x58, 0x12, 0x63, 0x4C, 0x19,
 | 
			
		||||
    0x4E, 0xFF, 0x02, 0x4B, 0x92, 0xED, 0xD2, 0x07, 0x11, 0x4D, 0x8C, 0x58,
 | 
			
		||||
    0x16, 0x5C, 0x55, 0x8E, 0xAD, 0xA3, 0x67, 0x7D, 0xB9, 0x86, 0x6E, 0x0B,
 | 
			
		||||
    0xE6, 0x54, 0x6F, 0x40, 0xAE, 0x0E, 0x67, 0x4C, 0xF9, 0x12, 0x5B, 0x3C,
 | 
			
		||||
    0x08, 0x7A, 0xF7, 0xFC, 0x67, 0x86, 0x69, 0xE7, 0x0A, 0x94, 0x40, 0xBF,
 | 
			
		||||
    0x8B, 0x76, 0xFE, 0x26, 0xD1, 0xF2, 0xA1, 0x1A, 0x84, 0xA1, 0x43, 0x56,
 | 
			
		||||
    0x28, 0xBC, 0x9A, 0x5F, 0xD7, 0x3B, 0x69, 0x89, 0x8A, 0x36, 0x2C, 0x51,
 | 
			
		||||
    0xDF, 0x12, 0x77, 0x2F, 0x57, 0x7B, 0xA0, 0xAA, 0xDD, 0x7F, 0xA1, 0x62,
 | 
			
		||||
    0x3B, 0x40, 0x7B, 0x68, 0x1A, 0x8F, 0x0D, 0x38, 0xBB, 0x21, 0x5D, 0x18,
 | 
			
		||||
    0xFC, 0x0F, 0x46, 0xF7, 0xA3, 0xB0, 0x1D, 0x23, 0xC3, 0xD2, 0xC7, 0x72,
 | 
			
		||||
    0x51, 0x18, 0xDF, 0x46, 0x95, 0x79, 0xD9, 0xBD, 0xB5, 0x19, 0x02, 0x2C,
 | 
			
		||||
    0x87, 0xDC, 0xE7, 0x57, 0x82, 0x7E, 0xF1, 0x8B, 0x06, 0x3D, 0x00, 0xA5,
 | 
			
		||||
    0x7B, 0x6B, 0x26, 0x27, 0x91, 0x0F, 0x6A, 0x77, 0xE4, 0xD5, 0x04, 0xE4,
 | 
			
		||||
    0x12, 0x2C, 0x42, 0xFF, 0xD2, 0x88, 0xBB, 0xD3, 0x92, 0xA0, 0xF9, 0xC8,
 | 
			
		||||
    0x51, 0x64, 0x14, 0x5C, 0xD8, 0xF9, 0x6C, 0x47, 0x82, 0xB4, 0x1C, 0x7F,
 | 
			
		||||
    0x09, 0xB8, 0xF0, 0x25, 0x83, 0x1D, 0x3F, 0x3F, 0x05, 0xB3, 0x21, 0x0A,
 | 
			
		||||
    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,
 | 
			
		||||
    0x90, 0xBF, 0x96, 0xA6, 0xAE, 0x25, 0x90, 0x72, 0xF5, 0x8E, 0x80, 0x0C,
 | 
			
		||||
    0x39, 0x1C, 0xD9, 0xEC, 0xBA, 0x90, 0x5B, 0x3A, 0xE8, 0x58, 0x6C, 0x9E,
 | 
			
		||||
    0x30, 0x42, 0x37, 0x02, 0x31, 0x82, 0xBC, 0x6A, 0xDF, 0x6A, 0x09, 0x29,
 | 
			
		||||
    0xE3, 0xC0, 0x46, 0xD1, 0xCB, 0x85, 0xEC, 0x0C, 0x30, 0x5E, 0xEA, 0xC8,
 | 
			
		||||
    0x39, 0x8E, 0x22, 0x9F, 0x22, 0x10, 0xD2, 0x34, 0x61, 0x68, 0x37, 0x3D,
 | 
			
		||||
    0x2E, 0x4A, 0x5B, 0x9A, 0xF5, 0xC1, 0x48, 0xC6, 0xF6, 0xDC, 0x63, 0x1A,
 | 
			
		||||
    0xD3, 0x96, 0x64, 0xBA, 0x34, 0xC9, 0xD1, 0xA0, 0xD1, 0xAE, 0x6C, 0x2F,
 | 
			
		||||
    0x48, 0x17, 0x93, 0x14, 0x43, 0xED, 0xF0, 0x21, 0x30, 0x19, 0xC3, 0x1B,
 | 
			
		||||
    0x5F, 0xDE, 0xA3, 0xF0, 0x70, 0x78, 0x18, 0xE1, 0xA8, 0xE4, 0xEE, 0x2E,
 | 
			
		||||
    0x00, 0xA5, 0xE4, 0xB3, 0x17, 0xC8, 0x0C, 0x7D, 0x6E, 0x42, 0xDC, 0xB7,
 | 
			
		||||
    0x46, 0x00, 0x36, 0x4D, 0xD4, 0x46, 0xAA, 0x3D, 0x3C, 0x46, 0x89, 0x40,
 | 
			
		||||
    0xBF, 0x1D, 0x84, 0x77, 0x0A, 0x75, 0xF3, 0x87, 0x1D, 0x08, 0x4C, 0xA6,
 | 
			
		||||
    0xD1, 0xA9, 0x1C, 0x1E, 0x12, 0x1E, 0xE1, 0xC7, 0x30, 0x28, 0x76, 0xA5,
 | 
			
		||||
    0x7F, 0x6C, 0x85, 0x96, 0x2B, 0x6F, 0xDB, 0x80, 0x66, 0x26, 0xAE, 0xF5,
 | 
			
		||||
    0x93, 0xC7, 0x8E, 0xAE, 0x9A, 0xED, 0xE4, 0xCA, 0x04, 0xEA, 0x3B, 0x72,
 | 
			
		||||
    0xEF, 0xDC, 0x87, 0xED, 0x0D, 0xA5, 0x4C, 0x4A, 0xDD, 0x71, 0x22, 0x64,
 | 
			
		||||
    0x59, 0x69, 0x4E, 0x8E, 0xBF, 0x43, 0xDC, 0xAB, 0x8E, 0x66, 0xBB, 0x01,
 | 
			
		||||
    0xB6, 0xF4, 0xE7, 0xFD, 0xD2, 0xAD, 0x9F, 0x36, 0xC1, 0xA0, 0x29, 0x99,
 | 
			
		||||
    0xD1, 0x96, 0x70, 0x59, 0x06, 0x78, 0x35, 0xBD, 0x65, 0x55, 0x52, 0x9E,
 | 
			
		||||
    0xF8, 0xB2, 0xE5, 0x38,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
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,
 | 
			
		||||
	0xe0,0x61,0x88,0x88,0x21,0xcc,0x74,0x5d,0xce,0x4c,0x51,0x47,
 | 
			
		||||
	0xf0,0xc5,0x5c,0x4c,0x82,0x7a,0xaf,0x72,0xad,0xb9,0xe0,0x53,
 | 
			
		||||
	0xf2,0x78,0xb7,0xf0,0xb5,0x48,0x7f,0x8a,0x3a,0x18,0xd1,0x9f,
 | 
			
		||||
	0x8b,0x7d,0xa5,0x47,0xb7,0x95,0xab,0x98,0xf8,0x7b,0x74,0x50,
 | 
			
		||||
	0x56,0x8e,0x57,0xf0,0xee,0xf5,0xb7,0xba,0xab,0x85,0x86,0xf9,
 | 
			
		||||
	0x2b,0xef,0x41,0x56,0xa0,0xa4,0x9f,0xb7,0x38,0x00,0x46,0x0a,
 | 
			
		||||
	0xa6,0xf1,0xfc,0x1f,0xd8,0x4e,0x85,0x44,0x92,0x43,0x21,0x5d,
 | 
			
		||||
	0x6e,0xcc,0xc2,0xcb,0x26,0x31,0x0d,0x21,0xc4,0xbd,0x8d,0x24,
 | 
			
		||||
	0xbc,0xd9,0x18,0x19,0xd7,0xdc,0xf1,0xe7,0x93,0x50,0x48,0x03,
 | 
			
		||||
	0x2c,0xae,0x2e,0xe7,0x49,0x88,0x5f,0x93,0x57,0x27,0x99,0x36,
 | 
			
		||||
	0xb4,0x20,0xab,0xfc,0xa7,0x2b,0xf2,0xd9,0x98,0xd7,0xd4,0x34,
 | 
			
		||||
	0x9d,0x96,0x50,0x58,0x9a,0xea,0x54,0xf3,0xee,0xf5,0x63,0x14,
 | 
			
		||||
	0xee,0x85,0x83,0x74,0x76,0xe1,0x52,0x95,0xc3,0xf7,0xeb,0x04,
 | 
			
		||||
	0x04,0x7b,0xa7,0x28,0x1b,0xcc,0xea,0x4a,0x4e,0x84,0xda,0xd8,
 | 
			
		||||
	0x9c,0x79,0xd8,0x9b,0x66,0x89,0x2f,0xcf,0xac,0xd7,0x79,0xf9,
 | 
			
		||||
	0xa9,0xd8,0x45,0x13,0x78,0xb9,0x00,0x14,0xc9,0x7e,0x22,0x51,
 | 
			
		||||
	0x86,0x67,0xb0,0x9f,0x26,0x11,0x23,0xc8,0x38,0xd7,0x70,0x1d,
 | 
			
		||||
	0x15,0x8e,0x4d,0x4f,0x95,0x97,0x40,0xa1,0xc2,0x7e,0x01,0x18,
 | 
			
		||||
	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,
 | 
			
		||||
	0xEB,0xF8,0xC4,0x13,0xD9,0xA0,0x5D,0x8B,0x5C,0x8E,0xDC,0xC2,
 | 
			
		||||
	0x1D,0x0B,0x41,0x32,0xB0,0x1F,0xFE,0xEF,0x0C,0xC2,0xA2,0x7E,
 | 
			
		||||
	0x68,0x5C,0x28,0x21,0xE9,0xF5,0xB1,0x58,0x12,0x63,0x4C,0x19,
 | 
			
		||||
	0x4E,0xFF,0x02,0x4B,0x92,0xED,0xD2,0x07,0x11,0x4D,0x8C,0x58,
 | 
			
		||||
	0x16,0x5C,0x55,0x8E,0xAD,0xA3,0x67,0x7D,0xB9,0x86,0x6E,0x0B,
 | 
			
		||||
	0xE6,0x54,0x6F,0x40,0xAE,0x0E,0x67,0x4C,0xF9,0x12,0x5B,0x3C,
 | 
			
		||||
	0x08,0x7A,0xF7,0xFC,0x67,0x86,0x69,0xE7,0x0A,0x94,0x40,0xBF,
 | 
			
		||||
	0x8B,0x76,0xFE,0x26,0xD1,0xF2,0xA1,0x1A,0x84,0xA1,0x43,0x56,
 | 
			
		||||
	0x28,0xBC,0x9A,0x5F,0xD7,0x3B,0x69,0x89,0x8A,0x36,0x2C,0x51,
 | 
			
		||||
	0xDF,0x12,0x77,0x2F,0x57,0x7B,0xA0,0xAA,0xDD,0x7F,0xA1,0x62,
 | 
			
		||||
	0x3B,0x40,0x7B,0x68,0x1A,0x8F,0x0D,0x38,0xBB,0x21,0x5D,0x18,
 | 
			
		||||
	0xFC,0x0F,0x46,0xF7,0xA3,0xB0,0x1D,0x23,0xC3,0xD2,0xC7,0x72,
 | 
			
		||||
	0x51,0x18,0xDF,0x46,0x95,0x79,0xD9,0xBD,0xB5,0x19,0x02,0x2C,
 | 
			
		||||
	0x87,0xDC,0xE7,0x57,0x82,0x7E,0xF1,0x8B,0x06,0x3D,0x00,0xA5,
 | 
			
		||||
	0x7B,0x6B,0x26,0x27,0x91,0x0F,0x6A,0x77,0xE4,0xD5,0x04,0xE4,
 | 
			
		||||
	0x12,0x2C,0x42,0xFF,0xD2,0x88,0xBB,0xD3,0x92,0xA0,0xF9,0xC8,
 | 
			
		||||
	0x51,0x64,0x14,0x5C,0xD8,0xF9,0x6C,0x47,0x82,0xB4,0x1C,0x7F,
 | 
			
		||||
	0x09,0xB8,0xF0,0x25,0x83,0x1D,0x3F,0x3F,0x05,0xB3,0x21,0x0A,
 | 
			
		||||
	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,
 | 
			
		||||
	0x90,0xBF,0x96,0xA6,0xAE,0x25,0x90,0x72,0xF5,0x8E,0x80,0x0C,
 | 
			
		||||
	0x39,0x1C,0xD9,0xEC,0xBA,0x90,0x5B,0x3A,0xE8,0x58,0x6C,0x9E,
 | 
			
		||||
	0x30,0x42,0x37,0x02,0x31,0x82,0xBC,0x6A,0xDF,0x6A,0x09,0x29,
 | 
			
		||||
	0xE3,0xC0,0x46,0xD1,0xCB,0x85,0xEC,0x0C,0x30,0x5E,0xEA,0xC8,
 | 
			
		||||
	0x39,0x8E,0x22,0x9F,0x22,0x10,0xD2,0x34,0x61,0x68,0x37,0x3D,
 | 
			
		||||
	0x2E,0x4A,0x5B,0x9A,0xF5,0xC1,0x48,0xC6,0xF6,0xDC,0x63,0x1A,
 | 
			
		||||
	0xD3,0x96,0x64,0xBA,0x34,0xC9,0xD1,0xA0,0xD1,0xAE,0x6C,0x2F,
 | 
			
		||||
	0x48,0x17,0x93,0x14,0x43,0xED,0xF0,0x21,0x30,0x19,0xC3,0x1B,
 | 
			
		||||
	0x5F,0xDE,0xA3,0xF0,0x70,0x78,0x18,0xE1,0xA8,0xE4,0xEE,0x2E,
 | 
			
		||||
	0x00,0xA5,0xE4,0xB3,0x17,0xC8,0x0C,0x7D,0x6E,0x42,0xDC,0xB7,
 | 
			
		||||
	0x46,0x00,0x36,0x4D,0xD4,0x46,0xAA,0x3D,0x3C,0x46,0x89,0x40,
 | 
			
		||||
	0xBF,0x1D,0x84,0x77,0x0A,0x75,0xF3,0x87,0x1D,0x08,0x4C,0xA6,
 | 
			
		||||
	0xD1,0xA9,0x1C,0x1E,0x12,0x1E,0xE1,0xC7,0x30,0x28,0x76,0xA5,
 | 
			
		||||
	0x7F,0x6C,0x85,0x96,0x2B,0x6F,0xDB,0x80,0x66,0x26,0xAE,0xF5,
 | 
			
		||||
	0x93,0xC7,0x8E,0xAE,0x9A,0xED,0xE4,0xCA,0x04,0xEA,0x3B,0x72,
 | 
			
		||||
	0xEF,0xDC,0x87,0xED,0x0D,0xA5,0x4C,0x4A,0xDD,0x71,0x22,0x64,
 | 
			
		||||
	0x59,0x69,0x4E,0x8E,0xBF,0x43,0xDC,0xAB,0x8E,0x66,0xBB,0x01,
 | 
			
		||||
	0xB6,0xF4,0xE7,0xFD,0xD2,0xAD,0x9F,0x36,0xC1,0xA0,0x29,0x99,
 | 
			
		||||
	0xD1,0x96,0x70,0x59,0x06,0x78,0x35,0xBD,0x65,0x55,0x52,0x9E,
 | 
			
		||||
	0xF8,0xB2,0xE5,0x38,
 | 
			
		||||
	};
 | 
			
		||||
 
 | 
			
		||||
DSA *get_dsa2048()
 | 
			
		||||
	{
 | 
			
		||||
	DSA *dsa;
 | 
			
		||||
 
 | 
			
		||||
	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))
 | 
			
		||||
		return(NULL);
 | 
			
		||||
	return(dsa);
 | 
			
		||||
	}
 | 
			
		||||
{
 | 
			
		||||
    DSA *dsa;
 | 
			
		||||
 | 
			
		||||
static const char rnd_seed[] = "string to make the random number generator think it has entropy";
 | 
			
		||||
    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))
 | 
			
		||||
        return (NULL);
 | 
			
		||||
    return (dsa);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const char rnd_seed[] =
 | 
			
		||||
    "string to make the random number generator think it has entropy";
 | 
			
		||||
static int rnd_fake = 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										924
									
								
								apps/testrsa.h
									
									
									
									
									
								
							
							
						
						
									
										924
									
								
								apps/testrsa.h
									
									
									
									
									
								
							@@ -6,21 +6,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -35,10 +35,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -50,469 +50,469 @@
 | 
			
		||||
 * 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.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static unsigned char test512[]={
 | 
			
		||||
	0x30,0x82,0x01,0x3a,0x02,0x01,0x00,0x02,0x41,0x00,
 | 
			
		||||
	0xd6,0x33,0xb9,0xc8,0xfb,0x4f,0x3c,0x7d,0xc0,0x01,
 | 
			
		||||
	0x86,0xd0,0xe7,0xa0,0x55,0xf2,0x95,0x93,0xcc,0x4f,
 | 
			
		||||
	0xb7,0x5b,0x67,0x5b,0x94,0x68,0xc9,0x34,0x15,0xde,
 | 
			
		||||
	0xa5,0x2e,0x1c,0x33,0xc2,0x6e,0xfc,0x34,0x5e,0x71,
 | 
			
		||||
	0x13,0xb7,0xd6,0xee,0xd8,0xa5,0x65,0x05,0x72,0x87,
 | 
			
		||||
	0xa8,0xb0,0x77,0xfe,0x57,0xf5,0xfc,0x5f,0x55,0x83,
 | 
			
		||||
	0x87,0xdd,0x57,0x49,0x02,0x03,0x01,0x00,0x01,0x02,
 | 
			
		||||
	0x41,0x00,0xa7,0xf7,0x91,0xc5,0x0f,0x84,0x57,0xdc,
 | 
			
		||||
	0x07,0xf7,0x6a,0x7f,0x60,0x52,0xb3,0x72,0xf1,0x66,
 | 
			
		||||
	0x1f,0x7d,0x97,0x3b,0x9e,0xb6,0x0a,0x8f,0x8c,0xcf,
 | 
			
		||||
	0x42,0x23,0x00,0x04,0xd4,0x28,0x0e,0x1c,0x90,0xc4,
 | 
			
		||||
	0x11,0x25,0x25,0xa5,0x93,0xa5,0x2f,0x70,0x02,0xdf,
 | 
			
		||||
	0x81,0x9c,0x49,0x03,0xa0,0xf8,0x6d,0x54,0x2e,0x26,
 | 
			
		||||
	0xde,0xaa,0x85,0x59,0xa8,0x31,0x02,0x21,0x00,0xeb,
 | 
			
		||||
	0x47,0xd7,0x3b,0xf6,0xc3,0xdd,0x5a,0x46,0xc5,0xb9,
 | 
			
		||||
	0x2b,0x9a,0xa0,0x09,0x8f,0xa6,0xfb,0xf3,0x78,0x7a,
 | 
			
		||||
	0x33,0x70,0x9d,0x0f,0x42,0x6b,0x13,0x68,0x24,0xd3,
 | 
			
		||||
	0x15,0x02,0x21,0x00,0xe9,0x10,0xb0,0xb3,0x0d,0xe2,
 | 
			
		||||
	0x82,0x68,0x77,0x8a,0x6e,0x7c,0xda,0xbc,0x3e,0x53,
 | 
			
		||||
	0x83,0xfb,0xd6,0x22,0xe7,0xb5,0xae,0x6e,0x80,0xda,
 | 
			
		||||
	0x00,0x55,0x97,0xc1,0xd0,0x65,0x02,0x20,0x4c,0xf8,
 | 
			
		||||
	0x73,0xb1,0x6a,0x49,0x29,0x61,0x1f,0x46,0x10,0x0d,
 | 
			
		||||
	0xf3,0xc7,0xe7,0x58,0xd7,0x88,0x15,0x5e,0x94,0x9b,
 | 
			
		||||
	0xbf,0x7b,0xa2,0x42,0x58,0x45,0x41,0x0c,0xcb,0x01,
 | 
			
		||||
	0x02,0x20,0x12,0x11,0xba,0x31,0x57,0x9d,0x3d,0x11,
 | 
			
		||||
	0x0e,0x5b,0x8c,0x2f,0x5f,0xe2,0x02,0x4f,0x05,0x47,
 | 
			
		||||
	0x8c,0x15,0x8e,0xb3,0x56,0x3f,0xb8,0xfb,0xad,0xd4,
 | 
			
		||||
	0xf4,0xfc,0x10,0xc5,0x02,0x20,0x18,0xa1,0x29,0x99,
 | 
			
		||||
	0x5b,0xd9,0xc8,0xd4,0xfc,0x49,0x7a,0x2a,0x21,0x2c,
 | 
			
		||||
	0x49,0xe4,0x4f,0xeb,0xef,0x51,0xf1,0xab,0x6d,0xfb,
 | 
			
		||||
	0x4b,0x14,0xe9,0x4b,0x52,0xb5,0x82,0x2c,
 | 
			
		||||
	};
 | 
			
		||||
static unsigned char test512[] = {
 | 
			
		||||
    0x30, 0x82, 0x01, 0x3a, 0x02, 0x01, 0x00, 0x02, 0x41, 0x00,
 | 
			
		||||
    0xd6, 0x33, 0xb9, 0xc8, 0xfb, 0x4f, 0x3c, 0x7d, 0xc0, 0x01,
 | 
			
		||||
    0x86, 0xd0, 0xe7, 0xa0, 0x55, 0xf2, 0x95, 0x93, 0xcc, 0x4f,
 | 
			
		||||
    0xb7, 0x5b, 0x67, 0x5b, 0x94, 0x68, 0xc9, 0x34, 0x15, 0xde,
 | 
			
		||||
    0xa5, 0x2e, 0x1c, 0x33, 0xc2, 0x6e, 0xfc, 0x34, 0x5e, 0x71,
 | 
			
		||||
    0x13, 0xb7, 0xd6, 0xee, 0xd8, 0xa5, 0x65, 0x05, 0x72, 0x87,
 | 
			
		||||
    0xa8, 0xb0, 0x77, 0xfe, 0x57, 0xf5, 0xfc, 0x5f, 0x55, 0x83,
 | 
			
		||||
    0x87, 0xdd, 0x57, 0x49, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02,
 | 
			
		||||
    0x41, 0x00, 0xa7, 0xf7, 0x91, 0xc5, 0x0f, 0x84, 0x57, 0xdc,
 | 
			
		||||
    0x07, 0xf7, 0x6a, 0x7f, 0x60, 0x52, 0xb3, 0x72, 0xf1, 0x66,
 | 
			
		||||
    0x1f, 0x7d, 0x97, 0x3b, 0x9e, 0xb6, 0x0a, 0x8f, 0x8c, 0xcf,
 | 
			
		||||
    0x42, 0x23, 0x00, 0x04, 0xd4, 0x28, 0x0e, 0x1c, 0x90, 0xc4,
 | 
			
		||||
    0x11, 0x25, 0x25, 0xa5, 0x93, 0xa5, 0x2f, 0x70, 0x02, 0xdf,
 | 
			
		||||
    0x81, 0x9c, 0x49, 0x03, 0xa0, 0xf8, 0x6d, 0x54, 0x2e, 0x26,
 | 
			
		||||
    0xde, 0xaa, 0x85, 0x59, 0xa8, 0x31, 0x02, 0x21, 0x00, 0xeb,
 | 
			
		||||
    0x47, 0xd7, 0x3b, 0xf6, 0xc3, 0xdd, 0x5a, 0x46, 0xc5, 0xb9,
 | 
			
		||||
    0x2b, 0x9a, 0xa0, 0x09, 0x8f, 0xa6, 0xfb, 0xf3, 0x78, 0x7a,
 | 
			
		||||
    0x33, 0x70, 0x9d, 0x0f, 0x42, 0x6b, 0x13, 0x68, 0x24, 0xd3,
 | 
			
		||||
    0x15, 0x02, 0x21, 0x00, 0xe9, 0x10, 0xb0, 0xb3, 0x0d, 0xe2,
 | 
			
		||||
    0x82, 0x68, 0x77, 0x8a, 0x6e, 0x7c, 0xda, 0xbc, 0x3e, 0x53,
 | 
			
		||||
    0x83, 0xfb, 0xd6, 0x22, 0xe7, 0xb5, 0xae, 0x6e, 0x80, 0xda,
 | 
			
		||||
    0x00, 0x55, 0x97, 0xc1, 0xd0, 0x65, 0x02, 0x20, 0x4c, 0xf8,
 | 
			
		||||
    0x73, 0xb1, 0x6a, 0x49, 0x29, 0x61, 0x1f, 0x46, 0x10, 0x0d,
 | 
			
		||||
    0xf3, 0xc7, 0xe7, 0x58, 0xd7, 0x88, 0x15, 0x5e, 0x94, 0x9b,
 | 
			
		||||
    0xbf, 0x7b, 0xa2, 0x42, 0x58, 0x45, 0x41, 0x0c, 0xcb, 0x01,
 | 
			
		||||
    0x02, 0x20, 0x12, 0x11, 0xba, 0x31, 0x57, 0x9d, 0x3d, 0x11,
 | 
			
		||||
    0x0e, 0x5b, 0x8c, 0x2f, 0x5f, 0xe2, 0x02, 0x4f, 0x05, 0x47,
 | 
			
		||||
    0x8c, 0x15, 0x8e, 0xb3, 0x56, 0x3f, 0xb8, 0xfb, 0xad, 0xd4,
 | 
			
		||||
    0xf4, 0xfc, 0x10, 0xc5, 0x02, 0x20, 0x18, 0xa1, 0x29, 0x99,
 | 
			
		||||
    0x5b, 0xd9, 0xc8, 0xd4, 0xfc, 0x49, 0x7a, 0x2a, 0x21, 0x2c,
 | 
			
		||||
    0x49, 0xe4, 0x4f, 0xeb, 0xef, 0x51, 0xf1, 0xab, 0x6d, 0xfb,
 | 
			
		||||
    0x4b, 0x14, 0xe9, 0x4b, 0x52, 0xb5, 0x82, 0x2c,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char test1024[]={
 | 
			
		||||
	0x30,0x82,0x02,0x5c,0x02,0x01,0x00,0x02,0x81,0x81,
 | 
			
		||||
	0x00,0xdc,0x98,0x43,0xe8,0x3d,0x43,0x5b,0xe4,0x05,
 | 
			
		||||
	0xcd,0xd0,0xa9,0x3e,0xcb,0x83,0x75,0xf6,0xb5,0xa5,
 | 
			
		||||
	0x9f,0x6b,0xe9,0x34,0x41,0x29,0x18,0xfa,0x6a,0x55,
 | 
			
		||||
	0x4d,0x70,0xfc,0xec,0xae,0x87,0x38,0x0a,0x20,0xa9,
 | 
			
		||||
	0xc0,0x45,0x77,0x6e,0x57,0x60,0x57,0xf4,0xed,0x96,
 | 
			
		||||
	0x22,0xcb,0x8f,0xe1,0x33,0x3a,0x17,0x1f,0xed,0x37,
 | 
			
		||||
	0xa5,0x6f,0xeb,0xa6,0xbc,0x12,0x80,0x1d,0x53,0xbd,
 | 
			
		||||
	0x70,0xeb,0x21,0x76,0x3e,0xc9,0x2f,0x1a,0x45,0x24,
 | 
			
		||||
	0x82,0xff,0xcd,0x59,0x32,0x06,0x2e,0x12,0x3b,0x23,
 | 
			
		||||
	0x78,0xed,0x12,0x3d,0xe0,0x8d,0xf9,0x67,0x4f,0x37,
 | 
			
		||||
	0x4e,0x47,0x02,0x4c,0x2d,0xc0,0x4f,0x1f,0xb3,0x94,
 | 
			
		||||
	0xe1,0x41,0x2e,0x2d,0x90,0x10,0xfc,0x82,0x91,0x8b,
 | 
			
		||||
	0x0f,0x22,0xd4,0xf2,0xfc,0x2c,0xab,0x53,0x55,0x02,
 | 
			
		||||
	0x03,0x01,0x00,0x01,0x02,0x81,0x80,0x2b,0xcc,0x3f,
 | 
			
		||||
	0x8f,0x58,0xba,0x8b,0x00,0x16,0xf6,0xea,0x3a,0xf0,
 | 
			
		||||
	0x30,0xd0,0x05,0x17,0xda,0xb0,0xeb,0x9a,0x2d,0x4f,
 | 
			
		||||
	0x26,0xb0,0xd6,0x38,0xc1,0xeb,0xf5,0xd8,0x3d,0x1f,
 | 
			
		||||
	0x70,0xf7,0x7f,0xf4,0xe2,0xcf,0x51,0x51,0x79,0x88,
 | 
			
		||||
	0xfa,0xe8,0x32,0x0e,0x7b,0x2d,0x97,0xf2,0xfa,0xba,
 | 
			
		||||
	0x27,0xc5,0x9c,0xd9,0xc5,0xeb,0x8a,0x79,0x52,0x3c,
 | 
			
		||||
	0x64,0x34,0x7d,0xc2,0xcf,0x28,0xc7,0x4e,0xd5,0x43,
 | 
			
		||||
	0x0b,0xd1,0xa6,0xca,0x6d,0x03,0x2d,0x72,0x23,0xbc,
 | 
			
		||||
	0x6d,0x05,0xfa,0x16,0x09,0x2f,0x2e,0x5c,0xb6,0xee,
 | 
			
		||||
	0x74,0xdd,0xd2,0x48,0x8e,0x36,0x0c,0x06,0x3d,0x4d,
 | 
			
		||||
	0xe5,0x10,0x82,0xeb,0x6a,0xf3,0x4b,0x9f,0xd6,0xed,
 | 
			
		||||
	0x11,0xb1,0x6e,0xec,0xf4,0xfe,0x8e,0x75,0x94,0x20,
 | 
			
		||||
	0x2f,0xcb,0xac,0x46,0xf1,0x02,0x41,0x00,0xf9,0x8c,
 | 
			
		||||
	0xa3,0x85,0xb1,0xdd,0x29,0xaf,0x65,0xc1,0x33,0xf3,
 | 
			
		||||
	0x95,0xc5,0x52,0x68,0x0b,0xd4,0xf1,0xe5,0x0e,0x02,
 | 
			
		||||
	0x9f,0x4f,0xfa,0x77,0xdc,0x46,0x9e,0xc7,0xa6,0xe4,
 | 
			
		||||
	0x16,0x29,0xda,0xb0,0x07,0xcf,0x5b,0xa9,0x12,0x8a,
 | 
			
		||||
	0xdd,0x63,0x0a,0xde,0x2e,0x8c,0x66,0x8b,0x8c,0xdc,
 | 
			
		||||
	0x19,0xa3,0x7e,0xf4,0x3b,0xd0,0x1a,0x8c,0xa4,0xc2,
 | 
			
		||||
	0xe1,0xd3,0x02,0x41,0x00,0xe2,0x4c,0x05,0xf2,0x04,
 | 
			
		||||
	0x86,0x4e,0x61,0x43,0xdb,0xb0,0xb9,0x96,0x86,0x52,
 | 
			
		||||
	0x2c,0xca,0x8d,0x7b,0xab,0x0b,0x13,0x0d,0x7e,0x38,
 | 
			
		||||
	0x5b,0xe2,0x2e,0x7b,0x0e,0xe7,0x19,0x99,0x38,0xe7,
 | 
			
		||||
	0xf2,0x21,0xbd,0x85,0x85,0xe3,0xfd,0x28,0x77,0x20,
 | 
			
		||||
	0x31,0x71,0x2c,0xd0,0xff,0xfb,0x2e,0xaf,0x85,0xb4,
 | 
			
		||||
	0x86,0xca,0xf3,0xbb,0xca,0xaa,0x0f,0x95,0x37,0x02,
 | 
			
		||||
	0x40,0x0e,0x41,0x9a,0x95,0xe8,0xb3,0x59,0xce,0x4b,
 | 
			
		||||
	0x61,0xde,0x35,0xec,0x38,0x79,0x9c,0xb8,0x10,0x52,
 | 
			
		||||
	0x41,0x63,0xab,0x82,0xae,0x6f,0x00,0xa9,0xf4,0xde,
 | 
			
		||||
	0xdd,0x49,0x0b,0x7e,0xb8,0xa5,0x65,0xa9,0x0c,0x8f,
 | 
			
		||||
	0x8f,0xf9,0x1f,0x35,0xc6,0x92,0xb8,0x5e,0xb0,0x66,
 | 
			
		||||
	0xab,0x52,0x40,0xc0,0xb6,0x36,0x6a,0x7d,0x80,0x46,
 | 
			
		||||
	0x04,0x02,0xe5,0x9f,0x41,0x02,0x41,0x00,0xc0,0xad,
 | 
			
		||||
	0xcc,0x4e,0x21,0xee,0x1d,0x24,0x91,0xfb,0xa7,0x80,
 | 
			
		||||
	0x8d,0x9a,0xb6,0xb3,0x2e,0x8f,0xc2,0xe1,0x82,0xdf,
 | 
			
		||||
	0x69,0x18,0xb4,0x71,0xff,0xa6,0x65,0xde,0xed,0x84,
 | 
			
		||||
	0x8d,0x42,0xb7,0xb3,0x21,0x69,0x56,0x1c,0x07,0x60,
 | 
			
		||||
	0x51,0x29,0x04,0xff,0x34,0x06,0xdd,0xb9,0x67,0x2c,
 | 
			
		||||
	0x7c,0x04,0x93,0x0e,0x46,0x15,0xbb,0x2a,0xb7,0x1b,
 | 
			
		||||
	0xe7,0x87,0x02,0x40,0x78,0xda,0x5d,0x07,0x51,0x0c,
 | 
			
		||||
	0x16,0x7a,0x9f,0x29,0x20,0x84,0x0d,0x42,0xfa,0xd7,
 | 
			
		||||
	0x00,0xd8,0x77,0x7e,0xb0,0xb0,0x6b,0xd6,0x5b,0x53,
 | 
			
		||||
	0xb8,0x9b,0x7a,0xcd,0xc7,0x2b,0xb8,0x6a,0x63,0xa9,
 | 
			
		||||
	0xfb,0x6f,0xa4,0x72,0xbf,0x4c,0x5d,0x00,0x14,0xba,
 | 
			
		||||
	0xfa,0x59,0x88,0xed,0xe4,0xe0,0x8c,0xa2,0xec,0x14,
 | 
			
		||||
	0x7e,0x2d,0xe2,0xf0,0x46,0x49,0x95,0x45,
 | 
			
		||||
	};
 | 
			
		||||
static unsigned char test1024[] = {
 | 
			
		||||
    0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81,
 | 
			
		||||
    0x00, 0xdc, 0x98, 0x43, 0xe8, 0x3d, 0x43, 0x5b, 0xe4, 0x05,
 | 
			
		||||
    0xcd, 0xd0, 0xa9, 0x3e, 0xcb, 0x83, 0x75, 0xf6, 0xb5, 0xa5,
 | 
			
		||||
    0x9f, 0x6b, 0xe9, 0x34, 0x41, 0x29, 0x18, 0xfa, 0x6a, 0x55,
 | 
			
		||||
    0x4d, 0x70, 0xfc, 0xec, 0xae, 0x87, 0x38, 0x0a, 0x20, 0xa9,
 | 
			
		||||
    0xc0, 0x45, 0x77, 0x6e, 0x57, 0x60, 0x57, 0xf4, 0xed, 0x96,
 | 
			
		||||
    0x22, 0xcb, 0x8f, 0xe1, 0x33, 0x3a, 0x17, 0x1f, 0xed, 0x37,
 | 
			
		||||
    0xa5, 0x6f, 0xeb, 0xa6, 0xbc, 0x12, 0x80, 0x1d, 0x53, 0xbd,
 | 
			
		||||
    0x70, 0xeb, 0x21, 0x76, 0x3e, 0xc9, 0x2f, 0x1a, 0x45, 0x24,
 | 
			
		||||
    0x82, 0xff, 0xcd, 0x59, 0x32, 0x06, 0x2e, 0x12, 0x3b, 0x23,
 | 
			
		||||
    0x78, 0xed, 0x12, 0x3d, 0xe0, 0x8d, 0xf9, 0x67, 0x4f, 0x37,
 | 
			
		||||
    0x4e, 0x47, 0x02, 0x4c, 0x2d, 0xc0, 0x4f, 0x1f, 0xb3, 0x94,
 | 
			
		||||
    0xe1, 0x41, 0x2e, 0x2d, 0x90, 0x10, 0xfc, 0x82, 0x91, 0x8b,
 | 
			
		||||
    0x0f, 0x22, 0xd4, 0xf2, 0xfc, 0x2c, 0xab, 0x53, 0x55, 0x02,
 | 
			
		||||
    0x03, 0x01, 0x00, 0x01, 0x02, 0x81, 0x80, 0x2b, 0xcc, 0x3f,
 | 
			
		||||
    0x8f, 0x58, 0xba, 0x8b, 0x00, 0x16, 0xf6, 0xea, 0x3a, 0xf0,
 | 
			
		||||
    0x30, 0xd0, 0x05, 0x17, 0xda, 0xb0, 0xeb, 0x9a, 0x2d, 0x4f,
 | 
			
		||||
    0x26, 0xb0, 0xd6, 0x38, 0xc1, 0xeb, 0xf5, 0xd8, 0x3d, 0x1f,
 | 
			
		||||
    0x70, 0xf7, 0x7f, 0xf4, 0xe2, 0xcf, 0x51, 0x51, 0x79, 0x88,
 | 
			
		||||
    0xfa, 0xe8, 0x32, 0x0e, 0x7b, 0x2d, 0x97, 0xf2, 0xfa, 0xba,
 | 
			
		||||
    0x27, 0xc5, 0x9c, 0xd9, 0xc5, 0xeb, 0x8a, 0x79, 0x52, 0x3c,
 | 
			
		||||
    0x64, 0x34, 0x7d, 0xc2, 0xcf, 0x28, 0xc7, 0x4e, 0xd5, 0x43,
 | 
			
		||||
    0x0b, 0xd1, 0xa6, 0xca, 0x6d, 0x03, 0x2d, 0x72, 0x23, 0xbc,
 | 
			
		||||
    0x6d, 0x05, 0xfa, 0x16, 0x09, 0x2f, 0x2e, 0x5c, 0xb6, 0xee,
 | 
			
		||||
    0x74, 0xdd, 0xd2, 0x48, 0x8e, 0x36, 0x0c, 0x06, 0x3d, 0x4d,
 | 
			
		||||
    0xe5, 0x10, 0x82, 0xeb, 0x6a, 0xf3, 0x4b, 0x9f, 0xd6, 0xed,
 | 
			
		||||
    0x11, 0xb1, 0x6e, 0xec, 0xf4, 0xfe, 0x8e, 0x75, 0x94, 0x20,
 | 
			
		||||
    0x2f, 0xcb, 0xac, 0x46, 0xf1, 0x02, 0x41, 0x00, 0xf9, 0x8c,
 | 
			
		||||
    0xa3, 0x85, 0xb1, 0xdd, 0x29, 0xaf, 0x65, 0xc1, 0x33, 0xf3,
 | 
			
		||||
    0x95, 0xc5, 0x52, 0x68, 0x0b, 0xd4, 0xf1, 0xe5, 0x0e, 0x02,
 | 
			
		||||
    0x9f, 0x4f, 0xfa, 0x77, 0xdc, 0x46, 0x9e, 0xc7, 0xa6, 0xe4,
 | 
			
		||||
    0x16, 0x29, 0xda, 0xb0, 0x07, 0xcf, 0x5b, 0xa9, 0x12, 0x8a,
 | 
			
		||||
    0xdd, 0x63, 0x0a, 0xde, 0x2e, 0x8c, 0x66, 0x8b, 0x8c, 0xdc,
 | 
			
		||||
    0x19, 0xa3, 0x7e, 0xf4, 0x3b, 0xd0, 0x1a, 0x8c, 0xa4, 0xc2,
 | 
			
		||||
    0xe1, 0xd3, 0x02, 0x41, 0x00, 0xe2, 0x4c, 0x05, 0xf2, 0x04,
 | 
			
		||||
    0x86, 0x4e, 0x61, 0x43, 0xdb, 0xb0, 0xb9, 0x96, 0x86, 0x52,
 | 
			
		||||
    0x2c, 0xca, 0x8d, 0x7b, 0xab, 0x0b, 0x13, 0x0d, 0x7e, 0x38,
 | 
			
		||||
    0x5b, 0xe2, 0x2e, 0x7b, 0x0e, 0xe7, 0x19, 0x99, 0x38, 0xe7,
 | 
			
		||||
    0xf2, 0x21, 0xbd, 0x85, 0x85, 0xe3, 0xfd, 0x28, 0x77, 0x20,
 | 
			
		||||
    0x31, 0x71, 0x2c, 0xd0, 0xff, 0xfb, 0x2e, 0xaf, 0x85, 0xb4,
 | 
			
		||||
    0x86, 0xca, 0xf3, 0xbb, 0xca, 0xaa, 0x0f, 0x95, 0x37, 0x02,
 | 
			
		||||
    0x40, 0x0e, 0x41, 0x9a, 0x95, 0xe8, 0xb3, 0x59, 0xce, 0x4b,
 | 
			
		||||
    0x61, 0xde, 0x35, 0xec, 0x38, 0x79, 0x9c, 0xb8, 0x10, 0x52,
 | 
			
		||||
    0x41, 0x63, 0xab, 0x82, 0xae, 0x6f, 0x00, 0xa9, 0xf4, 0xde,
 | 
			
		||||
    0xdd, 0x49, 0x0b, 0x7e, 0xb8, 0xa5, 0x65, 0xa9, 0x0c, 0x8f,
 | 
			
		||||
    0x8f, 0xf9, 0x1f, 0x35, 0xc6, 0x92, 0xb8, 0x5e, 0xb0, 0x66,
 | 
			
		||||
    0xab, 0x52, 0x40, 0xc0, 0xb6, 0x36, 0x6a, 0x7d, 0x80, 0x46,
 | 
			
		||||
    0x04, 0x02, 0xe5, 0x9f, 0x41, 0x02, 0x41, 0x00, 0xc0, 0xad,
 | 
			
		||||
    0xcc, 0x4e, 0x21, 0xee, 0x1d, 0x24, 0x91, 0xfb, 0xa7, 0x80,
 | 
			
		||||
    0x8d, 0x9a, 0xb6, 0xb3, 0x2e, 0x8f, 0xc2, 0xe1, 0x82, 0xdf,
 | 
			
		||||
    0x69, 0x18, 0xb4, 0x71, 0xff, 0xa6, 0x65, 0xde, 0xed, 0x84,
 | 
			
		||||
    0x8d, 0x42, 0xb7, 0xb3, 0x21, 0x69, 0x56, 0x1c, 0x07, 0x60,
 | 
			
		||||
    0x51, 0x29, 0x04, 0xff, 0x34, 0x06, 0xdd, 0xb9, 0x67, 0x2c,
 | 
			
		||||
    0x7c, 0x04, 0x93, 0x0e, 0x46, 0x15, 0xbb, 0x2a, 0xb7, 0x1b,
 | 
			
		||||
    0xe7, 0x87, 0x02, 0x40, 0x78, 0xda, 0x5d, 0x07, 0x51, 0x0c,
 | 
			
		||||
    0x16, 0x7a, 0x9f, 0x29, 0x20, 0x84, 0x0d, 0x42, 0xfa, 0xd7,
 | 
			
		||||
    0x00, 0xd8, 0x77, 0x7e, 0xb0, 0xb0, 0x6b, 0xd6, 0x5b, 0x53,
 | 
			
		||||
    0xb8, 0x9b, 0x7a, 0xcd, 0xc7, 0x2b, 0xb8, 0x6a, 0x63, 0xa9,
 | 
			
		||||
    0xfb, 0x6f, 0xa4, 0x72, 0xbf, 0x4c, 0x5d, 0x00, 0x14, 0xba,
 | 
			
		||||
    0xfa, 0x59, 0x88, 0xed, 0xe4, 0xe0, 0x8c, 0xa2, 0xec, 0x14,
 | 
			
		||||
    0x7e, 0x2d, 0xe2, 0xf0, 0x46, 0x49, 0x95, 0x45,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char test2048[]={
 | 
			
		||||
	0x30,0x82,0x04,0xa3,0x02,0x01,0x00,0x02,0x82,0x01,
 | 
			
		||||
	0x01,0x00,0xc0,0xc0,0xce,0x3e,0x3c,0x53,0x67,0x3f,
 | 
			
		||||
	0x4f,0xc5,0x2f,0xa4,0xc2,0x5a,0x2f,0x58,0xfd,0x27,
 | 
			
		||||
	0x52,0x6a,0xe8,0xcf,0x4a,0x73,0x47,0x8d,0x25,0x0f,
 | 
			
		||||
	0x5f,0x03,0x26,0x78,0xef,0xf0,0x22,0x12,0xd3,0xde,
 | 
			
		||||
	0x47,0xb2,0x1c,0x0b,0x38,0x63,0x1a,0x6c,0x85,0x7a,
 | 
			
		||||
	0x80,0xc6,0x8f,0xa0,0x41,0xaf,0x62,0xc4,0x67,0x32,
 | 
			
		||||
	0x88,0xf8,0xa6,0x9c,0xf5,0x23,0x1d,0xe4,0xac,0x3f,
 | 
			
		||||
	0x29,0xf9,0xec,0xe1,0x8b,0x26,0x03,0x2c,0xb2,0xab,
 | 
			
		||||
	0xf3,0x7d,0xb5,0xca,0x49,0xc0,0x8f,0x1c,0xdf,0x33,
 | 
			
		||||
	0x3a,0x60,0xda,0x3c,0xb0,0x16,0xf8,0xa9,0x12,0x8f,
 | 
			
		||||
	0x64,0xac,0x23,0x0c,0x69,0x64,0x97,0x5d,0x99,0xd4,
 | 
			
		||||
	0x09,0x83,0x9b,0x61,0xd3,0xac,0xf0,0xde,0xdd,0x5e,
 | 
			
		||||
	0x9f,0x44,0x94,0xdb,0x3a,0x4d,0x97,0xe8,0x52,0x29,
 | 
			
		||||
	0xf7,0xdb,0x94,0x07,0x45,0x90,0x78,0x1e,0x31,0x0b,
 | 
			
		||||
	0x80,0xf7,0x57,0xad,0x1c,0x79,0xc5,0xcb,0x32,0xb0,
 | 
			
		||||
	0xce,0xcd,0x74,0xb3,0xe2,0x94,0xc5,0x78,0x2f,0x34,
 | 
			
		||||
	0x1a,0x45,0xf7,0x8c,0x52,0xa5,0xbc,0x8d,0xec,0xd1,
 | 
			
		||||
	0x2f,0x31,0x3b,0xf0,0x49,0x59,0x5e,0x88,0x9d,0x15,
 | 
			
		||||
	0x92,0x35,0x32,0xc1,0xe7,0x61,0xec,0x50,0x48,0x7c,
 | 
			
		||||
	0xba,0x05,0xf9,0xf8,0xf8,0xa7,0x8c,0x83,0xe8,0x66,
 | 
			
		||||
	0x5b,0xeb,0xfe,0xd8,0x4f,0xdd,0x6d,0x36,0xc0,0xb2,
 | 
			
		||||
	0x90,0x0f,0xb8,0x52,0xf9,0x04,0x9b,0x40,0x2c,0x27,
 | 
			
		||||
	0xd6,0x36,0x8e,0xc2,0x1b,0x44,0xf3,0x92,0xd5,0x15,
 | 
			
		||||
	0x9e,0x9a,0xbc,0xf3,0x7d,0x03,0xd7,0x02,0x14,0x20,
 | 
			
		||||
	0xe9,0x10,0x92,0xfd,0xf9,0xfc,0x8f,0xe5,0x18,0xe1,
 | 
			
		||||
	0x95,0xcc,0x9e,0x60,0xa6,0xfa,0x38,0x4d,0x02,0x03,
 | 
			
		||||
	0x01,0x00,0x01,0x02,0x82,0x01,0x00,0x00,0xc3,0xc3,
 | 
			
		||||
	0x0d,0xb4,0x27,0x90,0x8d,0x4b,0xbf,0xb8,0x84,0xaa,
 | 
			
		||||
	0xd0,0xb8,0xc7,0x5d,0x99,0xbe,0x55,0xf6,0x3e,0x7c,
 | 
			
		||||
	0x49,0x20,0xcb,0x8a,0x8e,0x19,0x0e,0x66,0x24,0xac,
 | 
			
		||||
	0xaf,0x03,0x33,0x97,0xeb,0x95,0xd5,0x3b,0x0f,0x40,
 | 
			
		||||
	0x56,0x04,0x50,0xd1,0xe6,0xbe,0x84,0x0b,0x25,0xd3,
 | 
			
		||||
	0x9c,0xe2,0x83,0x6c,0xf5,0x62,0x5d,0xba,0x2b,0x7d,
 | 
			
		||||
	0x3d,0x7a,0x6c,0xe1,0xd2,0x0e,0x54,0x93,0x80,0x01,
 | 
			
		||||
	0x91,0x51,0x09,0xe8,0x5b,0x8e,0x47,0xbd,0x64,0xe4,
 | 
			
		||||
	0x0e,0x03,0x83,0x55,0xcf,0x5a,0x37,0xf0,0x25,0xb5,
 | 
			
		||||
	0x7d,0x21,0xd7,0x69,0xdf,0x6f,0xc2,0xcf,0x10,0xc9,
 | 
			
		||||
	0x8a,0x40,0x9f,0x7a,0x70,0xc0,0xe8,0xe8,0xc0,0xe6,
 | 
			
		||||
	0x9a,0x15,0x0a,0x8d,0x4e,0x46,0xcb,0x7a,0xdb,0xb3,
 | 
			
		||||
	0xcb,0x83,0x02,0xc4,0xf0,0xab,0xeb,0x02,0x01,0x0e,
 | 
			
		||||
	0x23,0xfc,0x1d,0xc4,0xbd,0xd4,0xaa,0x5d,0x31,0x46,
 | 
			
		||||
	0x99,0xce,0x9e,0xf8,0x04,0x75,0x10,0x67,0xc4,0x53,
 | 
			
		||||
	0x47,0x44,0xfa,0xc2,0x25,0x73,0x7e,0xd0,0x8e,0x59,
 | 
			
		||||
	0xd1,0xb2,0x5a,0xf4,0xc7,0x18,0x92,0x2f,0x39,0xab,
 | 
			
		||||
	0xcd,0xa3,0xb5,0xc2,0xb9,0xc7,0xb9,0x1b,0x9f,0x48,
 | 
			
		||||
	0xfa,0x13,0xc6,0x98,0x4d,0xca,0x84,0x9c,0x06,0xca,
 | 
			
		||||
	0xe7,0x89,0x01,0x04,0xc4,0x6c,0xfd,0x29,0x59,0x35,
 | 
			
		||||
	0xe7,0xf3,0xdd,0xce,0x64,0x59,0xbf,0x21,0x13,0xa9,
 | 
			
		||||
	0x9f,0x0e,0xc5,0xff,0xbd,0x33,0x00,0xec,0xac,0x6b,
 | 
			
		||||
	0x11,0xef,0x51,0x5e,0xad,0x07,0x15,0xde,0xb8,0x5f,
 | 
			
		||||
	0xc6,0xb9,0xa3,0x22,0x65,0x46,0x83,0x14,0xdf,0xd0,
 | 
			
		||||
	0xf1,0x44,0x8a,0xe1,0x9c,0x23,0x33,0xb4,0x97,0x33,
 | 
			
		||||
	0xe6,0x6b,0x81,0x02,0x81,0x81,0x00,0xec,0x12,0xa7,
 | 
			
		||||
	0x59,0x74,0x6a,0xde,0x3e,0xad,0xd8,0x36,0x80,0x50,
 | 
			
		||||
	0xa2,0xd5,0x21,0x81,0x07,0xf1,0xd0,0x91,0xf2,0x6c,
 | 
			
		||||
	0x12,0x2f,0x9d,0x1a,0x26,0xf8,0x30,0x65,0xdf,0xe8,
 | 
			
		||||
	0xc0,0x9b,0x6a,0x30,0x98,0x82,0x87,0xec,0xa2,0x56,
 | 
			
		||||
	0x87,0x62,0x6f,0xe7,0x9f,0xf6,0x56,0xe6,0x71,0x8f,
 | 
			
		||||
	0x49,0x86,0x93,0x5a,0x4d,0x34,0x58,0xfe,0xd9,0x04,
 | 
			
		||||
	0x13,0xaf,0x79,0xb7,0xad,0x11,0xd1,0x30,0x9a,0x14,
 | 
			
		||||
	0x06,0xa0,0xfa,0xb7,0x55,0xdc,0x6c,0x5a,0x4c,0x2c,
 | 
			
		||||
	0x59,0x56,0xf6,0xe8,0x9d,0xaf,0x0a,0x78,0x99,0x06,
 | 
			
		||||
	0x06,0x9e,0xe7,0x9c,0x51,0x55,0x43,0xfc,0x3b,0x6c,
 | 
			
		||||
	0x0b,0xbf,0x2d,0x41,0xa7,0xaf,0xb7,0xe0,0xe8,0x28,
 | 
			
		||||
	0x18,0xb4,0x13,0xd1,0xe6,0x97,0xd0,0x9f,0x6a,0x80,
 | 
			
		||||
	0xca,0xdd,0x1a,0x7e,0x15,0x02,0x81,0x81,0x00,0xd1,
 | 
			
		||||
	0x06,0x0c,0x1f,0xe3,0xd0,0xab,0xd6,0xca,0x7c,0xbc,
 | 
			
		||||
	0x7d,0x13,0x35,0xce,0x27,0xcd,0xd8,0x49,0x51,0x63,
 | 
			
		||||
	0x64,0x0f,0xca,0x06,0x12,0xfc,0x07,0x3e,0xaf,0x61,
 | 
			
		||||
	0x6d,0xe2,0x53,0x39,0x27,0xae,0xc3,0x11,0x9e,0x94,
 | 
			
		||||
	0x01,0x4f,0xe3,0xf3,0x67,0xf9,0x77,0xf9,0xe7,0x95,
 | 
			
		||||
	0x3a,0x6f,0xe2,0x20,0x73,0x3e,0xa4,0x7a,0x28,0xd4,
 | 
			
		||||
	0x61,0x97,0xf6,0x17,0xa0,0x23,0x10,0x2b,0xce,0x84,
 | 
			
		||||
	0x57,0x7e,0x25,0x1f,0xf4,0xa8,0x54,0xd2,0x65,0x94,
 | 
			
		||||
	0xcc,0x95,0x0a,0xab,0x30,0xc1,0x59,0x1f,0x61,0x8e,
 | 
			
		||||
	0xb9,0x6b,0xd7,0x4e,0xb9,0x83,0x43,0x79,0x85,0x11,
 | 
			
		||||
	0xbc,0x0f,0xae,0x25,0x20,0x05,0xbc,0xd2,0x48,0xa1,
 | 
			
		||||
	0x68,0x09,0x84,0xf6,0x12,0x9a,0x66,0xb9,0x2b,0xbb,
 | 
			
		||||
	0x76,0x03,0x17,0x46,0x4e,0x97,0x59,0x02,0x81,0x80,
 | 
			
		||||
	0x09,0x4c,0xfa,0xd6,0xe5,0x65,0x48,0x78,0x43,0xb5,
 | 
			
		||||
	0x1f,0x00,0x93,0x2c,0xb7,0x24,0xe8,0xc6,0x7d,0x5a,
 | 
			
		||||
	0x70,0x45,0x92,0xc8,0x6c,0xa3,0xcd,0xe1,0xf7,0x29,
 | 
			
		||||
	0x40,0xfa,0x3f,0x5b,0x47,0x44,0x39,0xc1,0xe8,0x72,
 | 
			
		||||
	0x9e,0x7a,0x0e,0xda,0xaa,0xa0,0x2a,0x09,0xfd,0x54,
 | 
			
		||||
	0x93,0x23,0xaa,0x37,0x85,0x5b,0xcc,0xd4,0xf9,0xd8,
 | 
			
		||||
	0xff,0xc1,0x61,0x0d,0xbd,0x7e,0x18,0x24,0x73,0x6d,
 | 
			
		||||
	0x40,0x72,0xf1,0x93,0x09,0x48,0x97,0x6c,0x84,0x90,
 | 
			
		||||
	0xa8,0x46,0x14,0x01,0x39,0x11,0xe5,0x3c,0x41,0x27,
 | 
			
		||||
	0x32,0x75,0x24,0xed,0xa1,0xd9,0x12,0x29,0x8a,0x28,
 | 
			
		||||
	0x71,0x89,0x8d,0xca,0x30,0xb0,0x01,0xc4,0x2f,0x82,
 | 
			
		||||
	0x19,0x14,0x4c,0x70,0x1c,0xb8,0x23,0x2e,0xe8,0x90,
 | 
			
		||||
	0x49,0x97,0x92,0x97,0x6b,0x7a,0x9d,0xb9,0x02,0x81,
 | 
			
		||||
	0x80,0x0f,0x0e,0xa1,0x76,0xf6,0xa1,0x44,0x8f,0xaf,
 | 
			
		||||
	0x7c,0x76,0xd3,0x87,0xbb,0xbb,0x83,0x10,0x88,0x01,
 | 
			
		||||
	0x18,0x14,0xd1,0xd3,0x75,0x59,0x24,0xaa,0xf5,0x16,
 | 
			
		||||
	0xa5,0xe9,0x9d,0xd1,0xcc,0xee,0xf4,0x15,0xd9,0xc5,
 | 
			
		||||
	0x7e,0x27,0xe9,0x44,0x49,0x06,0x72,0xb9,0xfc,0xd3,
 | 
			
		||||
	0x8a,0xc4,0x2c,0x36,0x7d,0x12,0x9b,0x5a,0xaa,0xdc,
 | 
			
		||||
	0x85,0xee,0x6e,0xad,0x54,0xb3,0xf4,0xfc,0x31,0xa1,
 | 
			
		||||
	0x06,0x3a,0x70,0x57,0x0c,0xf3,0x95,0x5b,0x3e,0xe8,
 | 
			
		||||
	0xfd,0x1a,0x4f,0xf6,0x78,0x93,0x46,0x6a,0xd7,0x31,
 | 
			
		||||
	0xb4,0x84,0x64,0x85,0x09,0x38,0x89,0x92,0x94,0x1c,
 | 
			
		||||
	0xbf,0xe2,0x3c,0x2a,0xe0,0xff,0x99,0xa3,0xf0,0x2b,
 | 
			
		||||
	0x31,0xc2,0x36,0xcd,0x60,0xbf,0x9d,0x2d,0x74,0x32,
 | 
			
		||||
	0xe8,0x9c,0x93,0x6e,0xbb,0x91,0x7b,0xfd,0xd9,0x02,
 | 
			
		||||
	0x81,0x81,0x00,0xa2,0x71,0x25,0x38,0xeb,0x2a,0xe9,
 | 
			
		||||
	0x37,0xcd,0xfe,0x44,0xce,0x90,0x3f,0x52,0x87,0x84,
 | 
			
		||||
	0x52,0x1b,0xae,0x8d,0x22,0x94,0xce,0x38,0xe6,0x04,
 | 
			
		||||
	0x88,0x76,0x85,0x9a,0xd3,0x14,0x09,0xe5,0x69,0x9a,
 | 
			
		||||
	0xff,0x58,0x92,0x02,0x6a,0x7d,0x7c,0x1e,0x2c,0xfd,
 | 
			
		||||
	0xa8,0xca,0x32,0x14,0x4f,0x0d,0x84,0x0d,0x37,0x43,
 | 
			
		||||
	0xbf,0xe4,0x5d,0x12,0xc8,0x24,0x91,0x27,0x8d,0x46,
 | 
			
		||||
	0xd9,0x54,0x53,0xe7,0x62,0x71,0xa8,0x2b,0x71,0x41,
 | 
			
		||||
	0x8d,0x75,0xf8,0x3a,0xa0,0x61,0x29,0x46,0xa6,0xe5,
 | 
			
		||||
	0x82,0xfa,0x3a,0xd9,0x08,0xfa,0xfc,0x63,0xfd,0x6b,
 | 
			
		||||
	0x30,0xbc,0xf4,0x4e,0x9e,0x8c,0x25,0x0c,0xb6,0x55,
 | 
			
		||||
	0xe7,0x3c,0xd4,0x4e,0x0b,0xfd,0x8b,0xc3,0x0e,0x1d,
 | 
			
		||||
	0x9c,0x44,0x57,0x8f,0x1f,0x86,0xf7,0xd5,0x1b,0xe4,
 | 
			
		||||
	0x95,
 | 
			
		||||
	};
 | 
			
		||||
static unsigned char test2048[] = {
 | 
			
		||||
    0x30, 0x82, 0x04, 0xa3, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01,
 | 
			
		||||
    0x01, 0x00, 0xc0, 0xc0, 0xce, 0x3e, 0x3c, 0x53, 0x67, 0x3f,
 | 
			
		||||
    0x4f, 0xc5, 0x2f, 0xa4, 0xc2, 0x5a, 0x2f, 0x58, 0xfd, 0x27,
 | 
			
		||||
    0x52, 0x6a, 0xe8, 0xcf, 0x4a, 0x73, 0x47, 0x8d, 0x25, 0x0f,
 | 
			
		||||
    0x5f, 0x03, 0x26, 0x78, 0xef, 0xf0, 0x22, 0x12, 0xd3, 0xde,
 | 
			
		||||
    0x47, 0xb2, 0x1c, 0x0b, 0x38, 0x63, 0x1a, 0x6c, 0x85, 0x7a,
 | 
			
		||||
    0x80, 0xc6, 0x8f, 0xa0, 0x41, 0xaf, 0x62, 0xc4, 0x67, 0x32,
 | 
			
		||||
    0x88, 0xf8, 0xa6, 0x9c, 0xf5, 0x23, 0x1d, 0xe4, 0xac, 0x3f,
 | 
			
		||||
    0x29, 0xf9, 0xec, 0xe1, 0x8b, 0x26, 0x03, 0x2c, 0xb2, 0xab,
 | 
			
		||||
    0xf3, 0x7d, 0xb5, 0xca, 0x49, 0xc0, 0x8f, 0x1c, 0xdf, 0x33,
 | 
			
		||||
    0x3a, 0x60, 0xda, 0x3c, 0xb0, 0x16, 0xf8, 0xa9, 0x12, 0x8f,
 | 
			
		||||
    0x64, 0xac, 0x23, 0x0c, 0x69, 0x64, 0x97, 0x5d, 0x99, 0xd4,
 | 
			
		||||
    0x09, 0x83, 0x9b, 0x61, 0xd3, 0xac, 0xf0, 0xde, 0xdd, 0x5e,
 | 
			
		||||
    0x9f, 0x44, 0x94, 0xdb, 0x3a, 0x4d, 0x97, 0xe8, 0x52, 0x29,
 | 
			
		||||
    0xf7, 0xdb, 0x94, 0x07, 0x45, 0x90, 0x78, 0x1e, 0x31, 0x0b,
 | 
			
		||||
    0x80, 0xf7, 0x57, 0xad, 0x1c, 0x79, 0xc5, 0xcb, 0x32, 0xb0,
 | 
			
		||||
    0xce, 0xcd, 0x74, 0xb3, 0xe2, 0x94, 0xc5, 0x78, 0x2f, 0x34,
 | 
			
		||||
    0x1a, 0x45, 0xf7, 0x8c, 0x52, 0xa5, 0xbc, 0x8d, 0xec, 0xd1,
 | 
			
		||||
    0x2f, 0x31, 0x3b, 0xf0, 0x49, 0x59, 0x5e, 0x88, 0x9d, 0x15,
 | 
			
		||||
    0x92, 0x35, 0x32, 0xc1, 0xe7, 0x61, 0xec, 0x50, 0x48, 0x7c,
 | 
			
		||||
    0xba, 0x05, 0xf9, 0xf8, 0xf8, 0xa7, 0x8c, 0x83, 0xe8, 0x66,
 | 
			
		||||
    0x5b, 0xeb, 0xfe, 0xd8, 0x4f, 0xdd, 0x6d, 0x36, 0xc0, 0xb2,
 | 
			
		||||
    0x90, 0x0f, 0xb8, 0x52, 0xf9, 0x04, 0x9b, 0x40, 0x2c, 0x27,
 | 
			
		||||
    0xd6, 0x36, 0x8e, 0xc2, 0x1b, 0x44, 0xf3, 0x92, 0xd5, 0x15,
 | 
			
		||||
    0x9e, 0x9a, 0xbc, 0xf3, 0x7d, 0x03, 0xd7, 0x02, 0x14, 0x20,
 | 
			
		||||
    0xe9, 0x10, 0x92, 0xfd, 0xf9, 0xfc, 0x8f, 0xe5, 0x18, 0xe1,
 | 
			
		||||
    0x95, 0xcc, 0x9e, 0x60, 0xa6, 0xfa, 0x38, 0x4d, 0x02, 0x03,
 | 
			
		||||
    0x01, 0x00, 0x01, 0x02, 0x82, 0x01, 0x00, 0x00, 0xc3, 0xc3,
 | 
			
		||||
    0x0d, 0xb4, 0x27, 0x90, 0x8d, 0x4b, 0xbf, 0xb8, 0x84, 0xaa,
 | 
			
		||||
    0xd0, 0xb8, 0xc7, 0x5d, 0x99, 0xbe, 0x55, 0xf6, 0x3e, 0x7c,
 | 
			
		||||
    0x49, 0x20, 0xcb, 0x8a, 0x8e, 0x19, 0x0e, 0x66, 0x24, 0xac,
 | 
			
		||||
    0xaf, 0x03, 0x33, 0x97, 0xeb, 0x95, 0xd5, 0x3b, 0x0f, 0x40,
 | 
			
		||||
    0x56, 0x04, 0x50, 0xd1, 0xe6, 0xbe, 0x84, 0x0b, 0x25, 0xd3,
 | 
			
		||||
    0x9c, 0xe2, 0x83, 0x6c, 0xf5, 0x62, 0x5d, 0xba, 0x2b, 0x7d,
 | 
			
		||||
    0x3d, 0x7a, 0x6c, 0xe1, 0xd2, 0x0e, 0x54, 0x93, 0x80, 0x01,
 | 
			
		||||
    0x91, 0x51, 0x09, 0xe8, 0x5b, 0x8e, 0x47, 0xbd, 0x64, 0xe4,
 | 
			
		||||
    0x0e, 0x03, 0x83, 0x55, 0xcf, 0x5a, 0x37, 0xf0, 0x25, 0xb5,
 | 
			
		||||
    0x7d, 0x21, 0xd7, 0x69, 0xdf, 0x6f, 0xc2, 0xcf, 0x10, 0xc9,
 | 
			
		||||
    0x8a, 0x40, 0x9f, 0x7a, 0x70, 0xc0, 0xe8, 0xe8, 0xc0, 0xe6,
 | 
			
		||||
    0x9a, 0x15, 0x0a, 0x8d, 0x4e, 0x46, 0xcb, 0x7a, 0xdb, 0xb3,
 | 
			
		||||
    0xcb, 0x83, 0x02, 0xc4, 0xf0, 0xab, 0xeb, 0x02, 0x01, 0x0e,
 | 
			
		||||
    0x23, 0xfc, 0x1d, 0xc4, 0xbd, 0xd4, 0xaa, 0x5d, 0x31, 0x46,
 | 
			
		||||
    0x99, 0xce, 0x9e, 0xf8, 0x04, 0x75, 0x10, 0x67, 0xc4, 0x53,
 | 
			
		||||
    0x47, 0x44, 0xfa, 0xc2, 0x25, 0x73, 0x7e, 0xd0, 0x8e, 0x59,
 | 
			
		||||
    0xd1, 0xb2, 0x5a, 0xf4, 0xc7, 0x18, 0x92, 0x2f, 0x39, 0xab,
 | 
			
		||||
    0xcd, 0xa3, 0xb5, 0xc2, 0xb9, 0xc7, 0xb9, 0x1b, 0x9f, 0x48,
 | 
			
		||||
    0xfa, 0x13, 0xc6, 0x98, 0x4d, 0xca, 0x84, 0x9c, 0x06, 0xca,
 | 
			
		||||
    0xe7, 0x89, 0x01, 0x04, 0xc4, 0x6c, 0xfd, 0x29, 0x59, 0x35,
 | 
			
		||||
    0xe7, 0xf3, 0xdd, 0xce, 0x64, 0x59, 0xbf, 0x21, 0x13, 0xa9,
 | 
			
		||||
    0x9f, 0x0e, 0xc5, 0xff, 0xbd, 0x33, 0x00, 0xec, 0xac, 0x6b,
 | 
			
		||||
    0x11, 0xef, 0x51, 0x5e, 0xad, 0x07, 0x15, 0xde, 0xb8, 0x5f,
 | 
			
		||||
    0xc6, 0xb9, 0xa3, 0x22, 0x65, 0x46, 0x83, 0x14, 0xdf, 0xd0,
 | 
			
		||||
    0xf1, 0x44, 0x8a, 0xe1, 0x9c, 0x23, 0x33, 0xb4, 0x97, 0x33,
 | 
			
		||||
    0xe6, 0x6b, 0x81, 0x02, 0x81, 0x81, 0x00, 0xec, 0x12, 0xa7,
 | 
			
		||||
    0x59, 0x74, 0x6a, 0xde, 0x3e, 0xad, 0xd8, 0x36, 0x80, 0x50,
 | 
			
		||||
    0xa2, 0xd5, 0x21, 0x81, 0x07, 0xf1, 0xd0, 0x91, 0xf2, 0x6c,
 | 
			
		||||
    0x12, 0x2f, 0x9d, 0x1a, 0x26, 0xf8, 0x30, 0x65, 0xdf, 0xe8,
 | 
			
		||||
    0xc0, 0x9b, 0x6a, 0x30, 0x98, 0x82, 0x87, 0xec, 0xa2, 0x56,
 | 
			
		||||
    0x87, 0x62, 0x6f, 0xe7, 0x9f, 0xf6, 0x56, 0xe6, 0x71, 0x8f,
 | 
			
		||||
    0x49, 0x86, 0x93, 0x5a, 0x4d, 0x34, 0x58, 0xfe, 0xd9, 0x04,
 | 
			
		||||
    0x13, 0xaf, 0x79, 0xb7, 0xad, 0x11, 0xd1, 0x30, 0x9a, 0x14,
 | 
			
		||||
    0x06, 0xa0, 0xfa, 0xb7, 0x55, 0xdc, 0x6c, 0x5a, 0x4c, 0x2c,
 | 
			
		||||
    0x59, 0x56, 0xf6, 0xe8, 0x9d, 0xaf, 0x0a, 0x78, 0x99, 0x06,
 | 
			
		||||
    0x06, 0x9e, 0xe7, 0x9c, 0x51, 0x55, 0x43, 0xfc, 0x3b, 0x6c,
 | 
			
		||||
    0x0b, 0xbf, 0x2d, 0x41, 0xa7, 0xaf, 0xb7, 0xe0, 0xe8, 0x28,
 | 
			
		||||
    0x18, 0xb4, 0x13, 0xd1, 0xe6, 0x97, 0xd0, 0x9f, 0x6a, 0x80,
 | 
			
		||||
    0xca, 0xdd, 0x1a, 0x7e, 0x15, 0x02, 0x81, 0x81, 0x00, 0xd1,
 | 
			
		||||
    0x06, 0x0c, 0x1f, 0xe3, 0xd0, 0xab, 0xd6, 0xca, 0x7c, 0xbc,
 | 
			
		||||
    0x7d, 0x13, 0x35, 0xce, 0x27, 0xcd, 0xd8, 0x49, 0x51, 0x63,
 | 
			
		||||
    0x64, 0x0f, 0xca, 0x06, 0x12, 0xfc, 0x07, 0x3e, 0xaf, 0x61,
 | 
			
		||||
    0x6d, 0xe2, 0x53, 0x39, 0x27, 0xae, 0xc3, 0x11, 0x9e, 0x94,
 | 
			
		||||
    0x01, 0x4f, 0xe3, 0xf3, 0x67, 0xf9, 0x77, 0xf9, 0xe7, 0x95,
 | 
			
		||||
    0x3a, 0x6f, 0xe2, 0x20, 0x73, 0x3e, 0xa4, 0x7a, 0x28, 0xd4,
 | 
			
		||||
    0x61, 0x97, 0xf6, 0x17, 0xa0, 0x23, 0x10, 0x2b, 0xce, 0x84,
 | 
			
		||||
    0x57, 0x7e, 0x25, 0x1f, 0xf4, 0xa8, 0x54, 0xd2, 0x65, 0x94,
 | 
			
		||||
    0xcc, 0x95, 0x0a, 0xab, 0x30, 0xc1, 0x59, 0x1f, 0x61, 0x8e,
 | 
			
		||||
    0xb9, 0x6b, 0xd7, 0x4e, 0xb9, 0x83, 0x43, 0x79, 0x85, 0x11,
 | 
			
		||||
    0xbc, 0x0f, 0xae, 0x25, 0x20, 0x05, 0xbc, 0xd2, 0x48, 0xa1,
 | 
			
		||||
    0x68, 0x09, 0x84, 0xf6, 0x12, 0x9a, 0x66, 0xb9, 0x2b, 0xbb,
 | 
			
		||||
    0x76, 0x03, 0x17, 0x46, 0x4e, 0x97, 0x59, 0x02, 0x81, 0x80,
 | 
			
		||||
    0x09, 0x4c, 0xfa, 0xd6, 0xe5, 0x65, 0x48, 0x78, 0x43, 0xb5,
 | 
			
		||||
    0x1f, 0x00, 0x93, 0x2c, 0xb7, 0x24, 0xe8, 0xc6, 0x7d, 0x5a,
 | 
			
		||||
    0x70, 0x45, 0x92, 0xc8, 0x6c, 0xa3, 0xcd, 0xe1, 0xf7, 0x29,
 | 
			
		||||
    0x40, 0xfa, 0x3f, 0x5b, 0x47, 0x44, 0x39, 0xc1, 0xe8, 0x72,
 | 
			
		||||
    0x9e, 0x7a, 0x0e, 0xda, 0xaa, 0xa0, 0x2a, 0x09, 0xfd, 0x54,
 | 
			
		||||
    0x93, 0x23, 0xaa, 0x37, 0x85, 0x5b, 0xcc, 0xd4, 0xf9, 0xd8,
 | 
			
		||||
    0xff, 0xc1, 0x61, 0x0d, 0xbd, 0x7e, 0x18, 0x24, 0x73, 0x6d,
 | 
			
		||||
    0x40, 0x72, 0xf1, 0x93, 0x09, 0x48, 0x97, 0x6c, 0x84, 0x90,
 | 
			
		||||
    0xa8, 0x46, 0x14, 0x01, 0x39, 0x11, 0xe5, 0x3c, 0x41, 0x27,
 | 
			
		||||
    0x32, 0x75, 0x24, 0xed, 0xa1, 0xd9, 0x12, 0x29, 0x8a, 0x28,
 | 
			
		||||
    0x71, 0x89, 0x8d, 0xca, 0x30, 0xb0, 0x01, 0xc4, 0x2f, 0x82,
 | 
			
		||||
    0x19, 0x14, 0x4c, 0x70, 0x1c, 0xb8, 0x23, 0x2e, 0xe8, 0x90,
 | 
			
		||||
    0x49, 0x97, 0x92, 0x97, 0x6b, 0x7a, 0x9d, 0xb9, 0x02, 0x81,
 | 
			
		||||
    0x80, 0x0f, 0x0e, 0xa1, 0x76, 0xf6, 0xa1, 0x44, 0x8f, 0xaf,
 | 
			
		||||
    0x7c, 0x76, 0xd3, 0x87, 0xbb, 0xbb, 0x83, 0x10, 0x88, 0x01,
 | 
			
		||||
    0x18, 0x14, 0xd1, 0xd3, 0x75, 0x59, 0x24, 0xaa, 0xf5, 0x16,
 | 
			
		||||
    0xa5, 0xe9, 0x9d, 0xd1, 0xcc, 0xee, 0xf4, 0x15, 0xd9, 0xc5,
 | 
			
		||||
    0x7e, 0x27, 0xe9, 0x44, 0x49, 0x06, 0x72, 0xb9, 0xfc, 0xd3,
 | 
			
		||||
    0x8a, 0xc4, 0x2c, 0x36, 0x7d, 0x12, 0x9b, 0x5a, 0xaa, 0xdc,
 | 
			
		||||
    0x85, 0xee, 0x6e, 0xad, 0x54, 0xb3, 0xf4, 0xfc, 0x31, 0xa1,
 | 
			
		||||
    0x06, 0x3a, 0x70, 0x57, 0x0c, 0xf3, 0x95, 0x5b, 0x3e, 0xe8,
 | 
			
		||||
    0xfd, 0x1a, 0x4f, 0xf6, 0x78, 0x93, 0x46, 0x6a, 0xd7, 0x31,
 | 
			
		||||
    0xb4, 0x84, 0x64, 0x85, 0x09, 0x38, 0x89, 0x92, 0x94, 0x1c,
 | 
			
		||||
    0xbf, 0xe2, 0x3c, 0x2a, 0xe0, 0xff, 0x99, 0xa3, 0xf0, 0x2b,
 | 
			
		||||
    0x31, 0xc2, 0x36, 0xcd, 0x60, 0xbf, 0x9d, 0x2d, 0x74, 0x32,
 | 
			
		||||
    0xe8, 0x9c, 0x93, 0x6e, 0xbb, 0x91, 0x7b, 0xfd, 0xd9, 0x02,
 | 
			
		||||
    0x81, 0x81, 0x00, 0xa2, 0x71, 0x25, 0x38, 0xeb, 0x2a, 0xe9,
 | 
			
		||||
    0x37, 0xcd, 0xfe, 0x44, 0xce, 0x90, 0x3f, 0x52, 0x87, 0x84,
 | 
			
		||||
    0x52, 0x1b, 0xae, 0x8d, 0x22, 0x94, 0xce, 0x38, 0xe6, 0x04,
 | 
			
		||||
    0x88, 0x76, 0x85, 0x9a, 0xd3, 0x14, 0x09, 0xe5, 0x69, 0x9a,
 | 
			
		||||
    0xff, 0x58, 0x92, 0x02, 0x6a, 0x7d, 0x7c, 0x1e, 0x2c, 0xfd,
 | 
			
		||||
    0xa8, 0xca, 0x32, 0x14, 0x4f, 0x0d, 0x84, 0x0d, 0x37, 0x43,
 | 
			
		||||
    0xbf, 0xe4, 0x5d, 0x12, 0xc8, 0x24, 0x91, 0x27, 0x8d, 0x46,
 | 
			
		||||
    0xd9, 0x54, 0x53, 0xe7, 0x62, 0x71, 0xa8, 0x2b, 0x71, 0x41,
 | 
			
		||||
    0x8d, 0x75, 0xf8, 0x3a, 0xa0, 0x61, 0x29, 0x46, 0xa6, 0xe5,
 | 
			
		||||
    0x82, 0xfa, 0x3a, 0xd9, 0x08, 0xfa, 0xfc, 0x63, 0xfd, 0x6b,
 | 
			
		||||
    0x30, 0xbc, 0xf4, 0x4e, 0x9e, 0x8c, 0x25, 0x0c, 0xb6, 0x55,
 | 
			
		||||
    0xe7, 0x3c, 0xd4, 0x4e, 0x0b, 0xfd, 0x8b, 0xc3, 0x0e, 0x1d,
 | 
			
		||||
    0x9c, 0x44, 0x57, 0x8f, 0x1f, 0x86, 0xf7, 0xd5, 0x1b, 0xe4,
 | 
			
		||||
    0x95,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char test4096[]={
 | 
			
		||||
	0x30,0x82,0x09,0x29,0x02,0x01,0x00,0x02,0x82,0x02,
 | 
			
		||||
	0x01,0x00,0xc0,0x71,0xac,0x1a,0x13,0x88,0x82,0x43,
 | 
			
		||||
	0x3b,0x51,0x57,0x71,0x8d,0xb6,0x2b,0x82,0x65,0x21,
 | 
			
		||||
	0x53,0x5f,0x28,0x29,0x4f,0x8d,0x7c,0x8a,0xb9,0x44,
 | 
			
		||||
	0xb3,0x28,0x41,0x4f,0xd3,0xfa,0x6a,0xf8,0xb9,0x28,
 | 
			
		||||
	0x50,0x39,0x67,0x53,0x2c,0x3c,0xd7,0xcb,0x96,0x41,
 | 
			
		||||
	0x40,0x32,0xbb,0xeb,0x70,0xae,0x1f,0xb0,0x65,0xf7,
 | 
			
		||||
	0x3a,0xd9,0x22,0xfd,0x10,0xae,0xbd,0x02,0xe2,0xdd,
 | 
			
		||||
	0xf3,0xc2,0x79,0x3c,0xc6,0xfc,0x75,0xbb,0xaf,0x4e,
 | 
			
		||||
	0x3a,0x36,0xc2,0x4f,0xea,0x25,0xdf,0x13,0x16,0x4b,
 | 
			
		||||
	0x20,0xfe,0x4b,0x69,0x16,0xc4,0x7f,0x1a,0x43,0xa6,
 | 
			
		||||
	0x17,0x1b,0xb9,0x0a,0xf3,0x09,0x86,0x28,0x89,0xcf,
 | 
			
		||||
	0x2c,0xd0,0xd4,0x81,0xaf,0xc6,0x6d,0xe6,0x21,0x8d,
 | 
			
		||||
	0xee,0xef,0xea,0xdc,0xb7,0xc6,0x3b,0x63,0x9f,0x0e,
 | 
			
		||||
	0xad,0x89,0x78,0x23,0x18,0xbf,0x70,0x7e,0x84,0xe0,
 | 
			
		||||
	0x37,0xec,0xdb,0x8e,0x9c,0x3e,0x6a,0x19,0xcc,0x99,
 | 
			
		||||
	0x72,0xe6,0xb5,0x7d,0x6d,0xfa,0xe5,0xd3,0xe4,0x90,
 | 
			
		||||
	0xb5,0xb2,0xb2,0x12,0x70,0x4e,0xca,0xf8,0x10,0xf8,
 | 
			
		||||
	0xa3,0x14,0xc2,0x48,0x19,0xeb,0x60,0x99,0xbb,0x2a,
 | 
			
		||||
	0x1f,0xb1,0x7a,0xb1,0x3d,0x24,0xfb,0xa0,0x29,0xda,
 | 
			
		||||
	0xbd,0x1b,0xd7,0xa4,0xbf,0xef,0x60,0x2d,0x22,0xca,
 | 
			
		||||
	0x65,0x98,0xf1,0xc4,0xe1,0xc9,0x02,0x6b,0x16,0x28,
 | 
			
		||||
	0x2f,0xa1,0xaa,0x79,0x00,0xda,0xdc,0x7c,0x43,0xf7,
 | 
			
		||||
	0x42,0x3c,0xa0,0xef,0x68,0xf7,0xdf,0xb9,0x69,0xfb,
 | 
			
		||||
	0x8e,0x01,0xed,0x01,0x42,0xb5,0x4e,0x57,0xa6,0x26,
 | 
			
		||||
	0xb8,0xd0,0x7b,0x56,0x6d,0x03,0xc6,0x40,0x8c,0x8c,
 | 
			
		||||
	0x2a,0x55,0xd7,0x9c,0x35,0x00,0x94,0x93,0xec,0x03,
 | 
			
		||||
	0xeb,0x22,0xef,0x77,0xbb,0x79,0x13,0x3f,0x15,0xa1,
 | 
			
		||||
	0x8f,0xca,0xdf,0xfd,0xd3,0xb8,0xe1,0xd4,0xcc,0x09,
 | 
			
		||||
	0x3f,0x3c,0x2c,0xdb,0xd1,0x49,0x7f,0x38,0x07,0x83,
 | 
			
		||||
	0x6d,0xeb,0x08,0x66,0xe9,0x06,0x44,0x12,0xac,0x95,
 | 
			
		||||
	0x22,0x90,0x23,0x67,0xd4,0x08,0xcc,0xf4,0xb7,0xdc,
 | 
			
		||||
	0xcc,0x87,0xd4,0xac,0x69,0x35,0x4c,0xb5,0x39,0x36,
 | 
			
		||||
	0xcd,0xa4,0xd2,0x95,0xca,0x0d,0xc5,0xda,0xc2,0xc5,
 | 
			
		||||
	0x22,0x32,0x28,0x08,0xe3,0xd2,0x8b,0x38,0x30,0xdc,
 | 
			
		||||
	0x8c,0x75,0x4f,0x6a,0xec,0x7a,0xac,0x16,0x3e,0xa8,
 | 
			
		||||
	0xd4,0x6a,0x45,0xe1,0xa8,0x4f,0x2e,0x80,0x34,0xaa,
 | 
			
		||||
	0x54,0x1b,0x02,0x95,0x7d,0x8a,0x6d,0xcc,0x79,0xca,
 | 
			
		||||
	0xf2,0xa4,0x2e,0x8d,0xfb,0xfe,0x15,0x51,0x10,0x0e,
 | 
			
		||||
	0x4d,0x88,0xb1,0xc7,0xf4,0x79,0xdb,0xf0,0xb4,0x56,
 | 
			
		||||
	0x44,0x37,0xca,0x5a,0xc1,0x8c,0x48,0xac,0xae,0x48,
 | 
			
		||||
	0x80,0x83,0x01,0x3f,0xde,0xd9,0xd3,0x2c,0x51,0x46,
 | 
			
		||||
	0xb1,0x41,0xb6,0xc6,0x91,0x72,0xf9,0x83,0x55,0x1b,
 | 
			
		||||
	0x8c,0xba,0xf3,0x73,0xe5,0x2c,0x74,0x50,0x3a,0xbe,
 | 
			
		||||
	0xc5,0x2f,0xa7,0xb2,0x6d,0x8c,0x9e,0x13,0x77,0xa3,
 | 
			
		||||
	0x13,0xcd,0x6d,0x8c,0x45,0xe1,0xfc,0x0b,0xb7,0x69,
 | 
			
		||||
	0xe9,0x27,0xbc,0x65,0xc3,0xfa,0x9b,0xd0,0xef,0xfe,
 | 
			
		||||
	0xe8,0x1f,0xb3,0x5e,0x34,0xf4,0x8c,0xea,0xfc,0xd3,
 | 
			
		||||
	0x81,0xbf,0x3d,0x30,0xb2,0xb4,0x01,0xe8,0x43,0x0f,
 | 
			
		||||
	0xba,0x02,0x23,0x42,0x76,0x82,0x31,0x73,0x91,0xed,
 | 
			
		||||
	0x07,0x46,0x61,0x0d,0x39,0x83,0x40,0xce,0x7a,0xd4,
 | 
			
		||||
	0xdb,0x80,0x2c,0x1f,0x0d,0xd1,0x34,0xd4,0x92,0xe3,
 | 
			
		||||
	0xd4,0xf1,0xc2,0x01,0x02,0x03,0x01,0x00,0x01,0x02,
 | 
			
		||||
	0x82,0x02,0x01,0x00,0x97,0x6c,0xda,0x6e,0xea,0x4f,
 | 
			
		||||
	0xcf,0xaf,0xf7,0x4c,0xd9,0xf1,0x90,0x00,0x77,0xdb,
 | 
			
		||||
	0xf2,0x97,0x76,0x72,0xb9,0xb7,0x47,0xd1,0x9c,0xdd,
 | 
			
		||||
	0xcb,0x4a,0x33,0x6e,0xc9,0x75,0x76,0xe6,0xe4,0xa5,
 | 
			
		||||
	0x31,0x8c,0x77,0x13,0xb4,0x29,0xcd,0xf5,0x52,0x17,
 | 
			
		||||
	0xef,0xf3,0x08,0x00,0xe3,0xbd,0x2e,0xbc,0xd4,0x52,
 | 
			
		||||
	0x88,0xe9,0x30,0x75,0x0b,0x02,0xf5,0xcd,0x89,0x0c,
 | 
			
		||||
	0x6c,0x57,0x19,0x27,0x3d,0x1e,0x85,0xb4,0xc1,0x2f,
 | 
			
		||||
	0x1d,0x92,0x00,0x5c,0x76,0x29,0x4b,0xa4,0xe1,0x12,
 | 
			
		||||
	0xb3,0xc8,0x09,0xfe,0x0e,0x78,0x72,0x61,0xcb,0x61,
 | 
			
		||||
	0x6f,0x39,0x91,0x95,0x4e,0xd5,0x3e,0xc7,0x8f,0xb8,
 | 
			
		||||
	0xf6,0x36,0xfe,0x9c,0x93,0x9a,0x38,0x25,0x7a,0xf4,
 | 
			
		||||
	0x4a,0x12,0xd4,0xa0,0x13,0xbd,0xf9,0x1d,0x12,0x3e,
 | 
			
		||||
	0x21,0x39,0xfb,0x72,0xe0,0x05,0x3d,0xc3,0xe5,0x50,
 | 
			
		||||
	0xa8,0x5d,0x85,0xa3,0xea,0x5f,0x1c,0xb2,0x3f,0xea,
 | 
			
		||||
	0x6d,0x03,0x91,0x55,0xd8,0x19,0x0a,0x21,0x12,0x16,
 | 
			
		||||
	0xd9,0x12,0xc4,0xe6,0x07,0x18,0x5b,0x26,0xa4,0xae,
 | 
			
		||||
	0xed,0x2b,0xb7,0xa6,0xed,0xf8,0xad,0xec,0x77,0xe6,
 | 
			
		||||
	0x7f,0x4f,0x76,0x00,0xc0,0xfa,0x15,0x92,0xb4,0x2c,
 | 
			
		||||
	0x22,0xc2,0xeb,0x6a,0xad,0x14,0x05,0xb2,0xe5,0x8a,
 | 
			
		||||
	0x9e,0x85,0x83,0xcc,0x04,0xf1,0x56,0x78,0x44,0x5e,
 | 
			
		||||
	0xde,0xe0,0x60,0x1a,0x65,0x79,0x31,0x23,0x05,0xbb,
 | 
			
		||||
	0x01,0xff,0xdd,0x2e,0xb7,0xb3,0xaa,0x74,0xe0,0xa5,
 | 
			
		||||
	0x94,0xaf,0x4b,0xde,0x58,0x0f,0x55,0xde,0x33,0xf6,
 | 
			
		||||
	0xe3,0xd6,0x34,0x36,0x57,0xd6,0x79,0x91,0x2e,0xbe,
 | 
			
		||||
	0x3b,0xd9,0x4e,0xb6,0x9d,0x21,0x5c,0xd3,0x48,0x14,
 | 
			
		||||
	0x7f,0x4a,0xc4,0x60,0xa9,0x29,0xf8,0x53,0x7f,0x88,
 | 
			
		||||
	0x11,0x2d,0xb5,0xc5,0x2d,0x6f,0xee,0x85,0x0b,0xf7,
 | 
			
		||||
	0x8d,0x9a,0xbe,0xb0,0x42,0xf2,0x2e,0x71,0xaf,0x19,
 | 
			
		||||
	0x31,0x6d,0xec,0xcd,0x6f,0x2b,0x23,0xdf,0xb4,0x40,
 | 
			
		||||
	0xaf,0x2c,0x0a,0xc3,0x1b,0x7d,0x7d,0x03,0x1d,0x4b,
 | 
			
		||||
	0xf3,0xb5,0xe0,0x85,0xd8,0xdf,0x91,0x6b,0x0a,0x69,
 | 
			
		||||
	0xf7,0xf2,0x69,0x66,0x5b,0xf1,0xcf,0x46,0x7d,0xe9,
 | 
			
		||||
	0x70,0xfa,0x6d,0x7e,0x75,0x4e,0xa9,0x77,0xe6,0x8c,
 | 
			
		||||
	0x02,0xf7,0x14,0x4d,0xa5,0x41,0x8f,0x3f,0xc1,0x62,
 | 
			
		||||
	0x1e,0x71,0x5e,0x38,0xb4,0xd6,0xe6,0xe1,0x4b,0xc2,
 | 
			
		||||
	0x2c,0x30,0x83,0x81,0x6f,0x49,0x2e,0x96,0xe6,0xc9,
 | 
			
		||||
	0x9a,0xf7,0x5d,0x09,0xa0,0x55,0x02,0xa5,0x3a,0x25,
 | 
			
		||||
	0x23,0xd0,0x92,0xc3,0xa3,0xe3,0x0e,0x12,0x2f,0x4d,
 | 
			
		||||
	0xef,0xf3,0x55,0x5a,0xbe,0xe6,0x19,0x86,0x31,0xab,
 | 
			
		||||
	0x75,0x9a,0xd3,0xf0,0x2c,0xc5,0x41,0x92,0xd9,0x1f,
 | 
			
		||||
	0x5f,0x11,0x8c,0x75,0x1c,0x63,0xd0,0x02,0x80,0x2c,
 | 
			
		||||
	0x68,0xcb,0x93,0xfb,0x51,0x73,0x49,0xb4,0x60,0xda,
 | 
			
		||||
	0xe2,0x26,0xaf,0xa9,0x46,0x12,0xb8,0xec,0x50,0xdd,
 | 
			
		||||
	0x12,0x06,0x5f,0xce,0x59,0xe6,0xf6,0x1c,0xe0,0x54,
 | 
			
		||||
	0x10,0xad,0xf6,0xcd,0x98,0xcc,0x0f,0xfb,0xcb,0x41,
 | 
			
		||||
	0x14,0x9d,0xed,0xe4,0xb4,0x74,0x5f,0x09,0x60,0xc7,
 | 
			
		||||
	0x12,0xf6,0x7b,0x3c,0x8f,0xa7,0x20,0xbc,0xe4,0xb1,
 | 
			
		||||
	0xef,0xeb,0xa4,0x93,0xc5,0x06,0xca,0x9a,0x27,0x9d,
 | 
			
		||||
	0x87,0xf3,0xde,0xca,0xe5,0xe7,0xf6,0x1c,0x01,0x65,
 | 
			
		||||
	0x5b,0xfb,0x19,0x79,0x6e,0x08,0x26,0xc5,0xc8,0x28,
 | 
			
		||||
	0x0e,0xb6,0x3b,0x07,0x08,0xc1,0x02,0x82,0x01,0x01,
 | 
			
		||||
	0x00,0xe8,0x1c,0x73,0xa6,0xb8,0xe0,0x0e,0x6d,0x8d,
 | 
			
		||||
	0x1b,0xb9,0x53,0xed,0x58,0x94,0xe6,0x1d,0x60,0x14,
 | 
			
		||||
	0x5c,0x76,0x43,0xc4,0x58,0x19,0xc4,0x24,0xe8,0xbc,
 | 
			
		||||
	0x1b,0x3b,0x0b,0x13,0x24,0x45,0x54,0x0e,0xcc,0x37,
 | 
			
		||||
	0xf0,0xe0,0x63,0x7d,0xc3,0xf7,0xfb,0x81,0x74,0x81,
 | 
			
		||||
	0xc4,0x0f,0x1a,0x21,0x48,0xaf,0xce,0xc1,0xc4,0x94,
 | 
			
		||||
	0x18,0x06,0x44,0x8d,0xd3,0xd2,0x22,0x2d,0x2d,0x3e,
 | 
			
		||||
	0x5a,0x31,0xdc,0x95,0x8e,0xf4,0x41,0xfc,0x58,0xc9,
 | 
			
		||||
	0x40,0x92,0x17,0x5f,0xe3,0xda,0xac,0x9e,0x3f,0x1c,
 | 
			
		||||
	0x2a,0x6b,0x58,0x5f,0x48,0x78,0x20,0xb1,0xaf,0x24,
 | 
			
		||||
	0x9b,0x3c,0x20,0x8b,0x93,0x25,0x9e,0xe6,0x6b,0xbc,
 | 
			
		||||
	0x13,0x42,0x14,0x6c,0x36,0x31,0xff,0x7a,0xd1,0xc1,
 | 
			
		||||
	0x1a,0x26,0x14,0x7f,0xa9,0x76,0xa7,0x0c,0xf8,0xcc,
 | 
			
		||||
	0xed,0x07,0x6a,0xd2,0xdf,0x62,0xee,0x0a,0x7c,0x84,
 | 
			
		||||
	0xcb,0x49,0x90,0xb2,0x03,0x0d,0xa2,0x82,0x06,0x77,
 | 
			
		||||
	0xf1,0xcd,0x67,0xf2,0x47,0x21,0x02,0x3f,0x43,0x21,
 | 
			
		||||
	0xf0,0x46,0x30,0x62,0x51,0x72,0xb1,0xe7,0x48,0xc6,
 | 
			
		||||
	0x67,0x12,0xcd,0x9e,0xd6,0x15,0xe5,0x21,0xed,0xfa,
 | 
			
		||||
	0x8f,0x30,0xa6,0x41,0xfe,0xb6,0xfa,0x8f,0x34,0x14,
 | 
			
		||||
	0x19,0xe8,0x11,0xf7,0xa5,0x77,0x3e,0xb7,0xf9,0x39,
 | 
			
		||||
	0x07,0x8c,0x67,0x2a,0xab,0x7b,0x08,0xf8,0xb0,0x06,
 | 
			
		||||
	0xa8,0xea,0x2f,0x8f,0xfa,0xcc,0xcc,0x40,0xce,0xf3,
 | 
			
		||||
	0x70,0x4f,0x3f,0x7f,0xe2,0x0c,0xea,0x76,0x4a,0x35,
 | 
			
		||||
	0x4e,0x47,0xad,0x2b,0xa7,0x97,0x5d,0x74,0x43,0x97,
 | 
			
		||||
	0x90,0xd2,0xfb,0xd9,0xf9,0x96,0x01,0x33,0x05,0xed,
 | 
			
		||||
	0x7b,0x03,0x05,0xad,0xf8,0x49,0x03,0x02,0x82,0x01,
 | 
			
		||||
	0x01,0x00,0xd4,0x40,0x17,0x66,0x10,0x92,0x95,0xc8,
 | 
			
		||||
	0xec,0x62,0xa9,0x7a,0xcb,0x93,0x8e,0xe6,0x53,0xd4,
 | 
			
		||||
	0x80,0x48,0x27,0x4b,0x41,0xce,0x61,0xdf,0xbf,0x94,
 | 
			
		||||
	0xa4,0x3d,0x71,0x03,0x0b,0xed,0x25,0x71,0x98,0xa4,
 | 
			
		||||
	0xd6,0xd5,0x4a,0x57,0xf5,0x6c,0x1b,0xda,0x21,0x7d,
 | 
			
		||||
	0x35,0x45,0xb3,0xf3,0x6a,0xd9,0xd3,0x43,0xe8,0x5c,
 | 
			
		||||
	0x54,0x1c,0x83,0x1b,0xb4,0x5f,0xf2,0x97,0x24,0x2e,
 | 
			
		||||
	0xdc,0x40,0xde,0x92,0x23,0x59,0x8e,0xbc,0xd2,0xa1,
 | 
			
		||||
	0xf2,0xe0,0x4c,0xdd,0x0b,0xd1,0xe7,0xae,0x65,0xbc,
 | 
			
		||||
	0xb5,0xf5,0x5b,0x98,0xe9,0xd7,0xc2,0xb7,0x0e,0x55,
 | 
			
		||||
	0x71,0x0e,0x3c,0x0a,0x24,0x6b,0xa6,0xe6,0x14,0x61,
 | 
			
		||||
	0x11,0xfd,0x33,0x42,0x99,0x2b,0x84,0x77,0x74,0x92,
 | 
			
		||||
	0x91,0xf5,0x79,0x79,0xcf,0xad,0x8e,0x04,0xef,0x80,
 | 
			
		||||
	0x1e,0x57,0xf4,0x14,0xf5,0x35,0x09,0x74,0xb2,0x13,
 | 
			
		||||
	0x71,0x58,0x6b,0xea,0x32,0x5d,0xf3,0xd3,0x76,0x48,
 | 
			
		||||
	0x39,0x10,0x23,0x84,0x9d,0xbe,0x92,0x77,0x4a,0xed,
 | 
			
		||||
	0x70,0x3e,0x1a,0xa2,0x6c,0xb3,0x81,0x00,0xc3,0xc9,
 | 
			
		||||
	0xe4,0x52,0xc8,0x24,0x88,0x0c,0x41,0xad,0x87,0x5a,
 | 
			
		||||
	0xea,0xa3,0x7a,0x85,0x1c,0x5e,0x31,0x7f,0xc3,0x35,
 | 
			
		||||
	0xc6,0xfa,0x10,0xc8,0x75,0x10,0xc4,0x96,0x99,0xe7,
 | 
			
		||||
	0xfe,0x01,0xb4,0x74,0xdb,0xb4,0x11,0xc3,0xc8,0x8c,
 | 
			
		||||
	0xf6,0xf7,0x3b,0x66,0x50,0xfc,0xdb,0xeb,0xca,0x47,
 | 
			
		||||
	0x85,0x89,0xe1,0x65,0xd9,0x62,0x34,0x3c,0x70,0xd8,
 | 
			
		||||
	0x2e,0xb4,0x2f,0x65,0x3c,0x4a,0xa6,0x2a,0xe7,0xc7,
 | 
			
		||||
	0xd8,0x41,0x8f,0x8a,0x43,0xbf,0x42,0xf2,0x4d,0xbc,
 | 
			
		||||
	0xfc,0x9e,0x27,0x95,0xfb,0x75,0xff,0xab,0x02,0x82,
 | 
			
		||||
	0x01,0x00,0x41,0x2f,0x44,0x57,0x6d,0x12,0x17,0x5b,
 | 
			
		||||
	0x32,0xc6,0xb7,0x6c,0x57,0x7a,0x8a,0x0e,0x79,0xef,
 | 
			
		||||
	0x72,0xa8,0x68,0xda,0x2d,0x38,0xe4,0xbb,0x8d,0xf6,
 | 
			
		||||
	0x02,0x65,0xcf,0x56,0x13,0xe1,0x1a,0xcb,0x39,0x80,
 | 
			
		||||
	0xa6,0xb1,0x32,0x03,0x1e,0xdd,0xbb,0x35,0xd9,0xac,
 | 
			
		||||
	0x43,0x89,0x31,0x08,0x90,0x92,0x5e,0x35,0x3d,0x7b,
 | 
			
		||||
	0x9c,0x6f,0x86,0xcb,0x17,0xdd,0x85,0xe4,0xed,0x35,
 | 
			
		||||
	0x08,0x8e,0xc1,0xf4,0x05,0xd8,0x68,0xc6,0x63,0x3c,
 | 
			
		||||
	0xf7,0xff,0xf7,0x47,0x33,0x39,0xc5,0x3e,0xb7,0x0e,
 | 
			
		||||
	0x58,0x35,0x9d,0x81,0xea,0xf8,0x6a,0x2c,0x1c,0x5a,
 | 
			
		||||
	0x68,0x78,0x64,0x11,0x6b,0xc1,0x3e,0x4e,0x7a,0xbd,
 | 
			
		||||
	0x84,0xcb,0x0f,0xc2,0xb6,0x85,0x1d,0xd3,0x76,0xc5,
 | 
			
		||||
	0x93,0x6a,0x69,0x89,0x56,0x34,0xdc,0x4a,0x9b,0xbc,
 | 
			
		||||
	0xff,0xa8,0x0d,0x6e,0x35,0x9c,0x60,0xa7,0x23,0x30,
 | 
			
		||||
	0xc7,0x06,0x64,0x39,0x8b,0x94,0x89,0xee,0xba,0x7f,
 | 
			
		||||
	0x60,0x8d,0xfa,0xb6,0x97,0x76,0xdc,0x51,0x4a,0x3c,
 | 
			
		||||
	0xeb,0x3a,0x14,0x2c,0x20,0x60,0x69,0x4a,0x86,0xfe,
 | 
			
		||||
	0x8c,0x21,0x84,0x49,0x54,0xb3,0x20,0xe1,0x01,0x7f,
 | 
			
		||||
	0x58,0xdf,0x7f,0xb5,0x21,0x51,0x8c,0x47,0x9f,0x91,
 | 
			
		||||
	0xeb,0x97,0x3e,0xf2,0x54,0xcf,0x16,0x46,0xf9,0xd9,
 | 
			
		||||
	0xb6,0xe7,0x64,0xc9,0xd0,0x54,0xea,0x2f,0xa1,0xcf,
 | 
			
		||||
	0xa5,0x7f,0x28,0x8d,0x84,0xec,0xd5,0x39,0x03,0x76,
 | 
			
		||||
	0x5b,0x2d,0x8e,0x43,0xf2,0x01,0x24,0xc9,0x6f,0xc0,
 | 
			
		||||
	0xf5,0x69,0x6f,0x7d,0xb5,0x85,0xd2,0x5f,0x7f,0x78,
 | 
			
		||||
	0x40,0x07,0x7f,0x09,0x15,0xb5,0x1f,0x28,0x65,0x10,
 | 
			
		||||
	0xe4,0x19,0xa8,0xc6,0x9e,0x8d,0xdc,0xcb,0x02,0x82,
 | 
			
		||||
	0x01,0x00,0x13,0x01,0xee,0x56,0x80,0x93,0x70,0x00,
 | 
			
		||||
	0x7f,0x52,0xd2,0x94,0xa1,0x98,0x84,0x4a,0x92,0x25,
 | 
			
		||||
	0x4c,0x9b,0xa9,0x91,0x2e,0xc2,0x79,0xb7,0x5c,0xe3,
 | 
			
		||||
	0xc5,0xd5,0x8e,0xc2,0x54,0x16,0x17,0xad,0x55,0x9b,
 | 
			
		||||
	0x25,0x76,0x12,0x63,0x50,0x22,0x2f,0x58,0x58,0x79,
 | 
			
		||||
	0x6b,0x04,0xe3,0xf9,0x9f,0x8f,0x04,0x41,0x67,0x94,
 | 
			
		||||
	0xa5,0x1f,0xac,0x8a,0x15,0x9c,0x26,0x10,0x6c,0xf8,
 | 
			
		||||
	0x19,0x57,0x61,0xd7,0x3a,0x7d,0x31,0xb0,0x2d,0x38,
 | 
			
		||||
	0xbd,0x94,0x62,0xad,0xc4,0xfa,0x36,0x42,0x42,0xf0,
 | 
			
		||||
	0x24,0x67,0x65,0x9d,0x8b,0x0b,0x7c,0x6f,0x82,0x44,
 | 
			
		||||
	0x1a,0x8c,0xc8,0xc9,0xab,0xbb,0x4c,0x45,0xfc,0x7b,
 | 
			
		||||
	0x38,0xee,0x30,0xe1,0xfc,0xef,0x8d,0xbc,0x58,0xdf,
 | 
			
		||||
	0x2b,0x5d,0x0d,0x54,0xe0,0x49,0x4d,0x97,0x99,0x8f,
 | 
			
		||||
	0x22,0xa8,0x83,0xbe,0x40,0xbb,0x50,0x2e,0x78,0x28,
 | 
			
		||||
	0x0f,0x95,0x78,0x8c,0x8f,0x98,0x24,0x56,0xc2,0x97,
 | 
			
		||||
	0xf3,0x2c,0x43,0xd2,0x03,0x82,0x66,0x81,0x72,0x5f,
 | 
			
		||||
	0x53,0x16,0xec,0xb1,0xb1,0x04,0x5e,0x40,0x20,0x48,
 | 
			
		||||
	0x7b,0x3f,0x02,0x97,0x6a,0xeb,0x96,0x12,0x21,0x35,
 | 
			
		||||
	0xfe,0x1f,0x47,0xc0,0x95,0xea,0xc5,0x8a,0x08,0x84,
 | 
			
		||||
	0x4f,0x5e,0x63,0x94,0x60,0x0f,0x71,0x5b,0x7f,0x4a,
 | 
			
		||||
	0xec,0x4f,0x60,0xc6,0xba,0x4a,0x24,0xf1,0x20,0x8b,
 | 
			
		||||
	0xa7,0x2e,0x3a,0xce,0x8d,0xe0,0x27,0x1d,0xb5,0x8e,
 | 
			
		||||
	0xb4,0x21,0xc5,0xe2,0xa6,0x16,0x0a,0x51,0x83,0x55,
 | 
			
		||||
	0x88,0xd1,0x30,0x11,0x63,0xd5,0xd7,0x8d,0xae,0x16,
 | 
			
		||||
	0x12,0x82,0xc4,0x85,0x00,0x4e,0x27,0x83,0xa5,0x7c,
 | 
			
		||||
	0x90,0x2e,0xe5,0xa2,0xa3,0xd3,0x4c,0x63,0x02,0x82,
 | 
			
		||||
	0x01,0x01,0x00,0x86,0x08,0x98,0x98,0xa5,0x00,0x05,
 | 
			
		||||
	0x39,0x77,0xd9,0x66,0xb3,0xcf,0xca,0xa0,0x71,0xb3,
 | 
			
		||||
	0x50,0xce,0x3d,0xb1,0x93,0x95,0x35,0xc4,0xd4,0x2e,
 | 
			
		||||
	0x90,0xdf,0x0f,0xfc,0x60,0xc1,0x94,0x68,0x61,0x43,
 | 
			
		||||
	0xca,0x9a,0x23,0x4a,0x1e,0x45,0x72,0x99,0xb5,0x1e,
 | 
			
		||||
	0x61,0x8d,0x77,0x0f,0xa0,0xbb,0xd7,0x77,0xb4,0x2a,
 | 
			
		||||
	0x15,0x11,0x88,0x2d,0xb3,0x56,0x61,0x5e,0x6a,0xed,
 | 
			
		||||
	0xa4,0x46,0x4a,0x3f,0x50,0x11,0xd6,0xba,0xb6,0xd7,
 | 
			
		||||
	0x95,0x65,0x53,0xc3,0xa1,0x8f,0xe0,0xa3,0xf5,0x1c,
 | 
			
		||||
	0xfd,0xaf,0x6e,0x43,0xd7,0x17,0xa7,0xd3,0x81,0x1b,
 | 
			
		||||
	0xa4,0xdf,0xe0,0x97,0x8a,0x46,0x03,0xd3,0x46,0x0e,
 | 
			
		||||
	0x83,0x48,0x4e,0xd2,0x02,0xcb,0xc0,0xad,0x79,0x95,
 | 
			
		||||
	0x8c,0x96,0xba,0x40,0x34,0x11,0x71,0x5e,0xe9,0x11,
 | 
			
		||||
	0xf9,0xc5,0x4a,0x5e,0x91,0x9d,0xf5,0x92,0x4f,0xeb,
 | 
			
		||||
	0xc6,0x70,0x02,0x2d,0x3d,0x04,0xaa,0xe9,0x3a,0x8e,
 | 
			
		||||
	0xd5,0xa8,0xad,0xf7,0xce,0x0d,0x16,0xb2,0xec,0x0a,
 | 
			
		||||
	0x9c,0xf5,0x94,0x39,0xb9,0x8a,0xfc,0x1e,0xf9,0xcc,
 | 
			
		||||
	0xf2,0x5f,0x21,0x31,0x74,0x72,0x6b,0x64,0xae,0x35,
 | 
			
		||||
	0x61,0x8d,0x0d,0xcb,0xe7,0xda,0x39,0xca,0xf3,0x21,
 | 
			
		||||
	0x66,0x0b,0x95,0xd7,0x0a,0x7c,0xca,0xa1,0xa9,0x5a,
 | 
			
		||||
	0xe8,0xac,0xe0,0x71,0x54,0xaf,0x28,0xcf,0xd5,0x70,
 | 
			
		||||
	0x89,0xe0,0xf3,0x9e,0x43,0x6c,0x8d,0x7b,0x99,0x01,
 | 
			
		||||
	0x68,0x4d,0xa1,0x45,0x46,0x0c,0x43,0xbc,0xcc,0x2c,
 | 
			
		||||
	0xdd,0xc5,0x46,0xc8,0x4e,0x0e,0xbe,0xed,0xb9,0x26,
 | 
			
		||||
	0xab,0x2e,0xdb,0xeb,0x8f,0xff,0xdb,0xb0,0xc6,0x55,
 | 
			
		||||
	0xaf,0xf8,0x2a,0x91,0x9d,0x50,0x44,0x21,0x17,
 | 
			
		||||
	};
 | 
			
		||||
static unsigned char test4096[] = {
 | 
			
		||||
    0x30, 0x82, 0x09, 0x29, 0x02, 0x01, 0x00, 0x02, 0x82, 0x02,
 | 
			
		||||
    0x01, 0x00, 0xc0, 0x71, 0xac, 0x1a, 0x13, 0x88, 0x82, 0x43,
 | 
			
		||||
    0x3b, 0x51, 0x57, 0x71, 0x8d, 0xb6, 0x2b, 0x82, 0x65, 0x21,
 | 
			
		||||
    0x53, 0x5f, 0x28, 0x29, 0x4f, 0x8d, 0x7c, 0x8a, 0xb9, 0x44,
 | 
			
		||||
    0xb3, 0x28, 0x41, 0x4f, 0xd3, 0xfa, 0x6a, 0xf8, 0xb9, 0x28,
 | 
			
		||||
    0x50, 0x39, 0x67, 0x53, 0x2c, 0x3c, 0xd7, 0xcb, 0x96, 0x41,
 | 
			
		||||
    0x40, 0x32, 0xbb, 0xeb, 0x70, 0xae, 0x1f, 0xb0, 0x65, 0xf7,
 | 
			
		||||
    0x3a, 0xd9, 0x22, 0xfd, 0x10, 0xae, 0xbd, 0x02, 0xe2, 0xdd,
 | 
			
		||||
    0xf3, 0xc2, 0x79, 0x3c, 0xc6, 0xfc, 0x75, 0xbb, 0xaf, 0x4e,
 | 
			
		||||
    0x3a, 0x36, 0xc2, 0x4f, 0xea, 0x25, 0xdf, 0x13, 0x16, 0x4b,
 | 
			
		||||
    0x20, 0xfe, 0x4b, 0x69, 0x16, 0xc4, 0x7f, 0x1a, 0x43, 0xa6,
 | 
			
		||||
    0x17, 0x1b, 0xb9, 0x0a, 0xf3, 0x09, 0x86, 0x28, 0x89, 0xcf,
 | 
			
		||||
    0x2c, 0xd0, 0xd4, 0x81, 0xaf, 0xc6, 0x6d, 0xe6, 0x21, 0x8d,
 | 
			
		||||
    0xee, 0xef, 0xea, 0xdc, 0xb7, 0xc6, 0x3b, 0x63, 0x9f, 0x0e,
 | 
			
		||||
    0xad, 0x89, 0x78, 0x23, 0x18, 0xbf, 0x70, 0x7e, 0x84, 0xe0,
 | 
			
		||||
    0x37, 0xec, 0xdb, 0x8e, 0x9c, 0x3e, 0x6a, 0x19, 0xcc, 0x99,
 | 
			
		||||
    0x72, 0xe6, 0xb5, 0x7d, 0x6d, 0xfa, 0xe5, 0xd3, 0xe4, 0x90,
 | 
			
		||||
    0xb5, 0xb2, 0xb2, 0x12, 0x70, 0x4e, 0xca, 0xf8, 0x10, 0xf8,
 | 
			
		||||
    0xa3, 0x14, 0xc2, 0x48, 0x19, 0xeb, 0x60, 0x99, 0xbb, 0x2a,
 | 
			
		||||
    0x1f, 0xb1, 0x7a, 0xb1, 0x3d, 0x24, 0xfb, 0xa0, 0x29, 0xda,
 | 
			
		||||
    0xbd, 0x1b, 0xd7, 0xa4, 0xbf, 0xef, 0x60, 0x2d, 0x22, 0xca,
 | 
			
		||||
    0x65, 0x98, 0xf1, 0xc4, 0xe1, 0xc9, 0x02, 0x6b, 0x16, 0x28,
 | 
			
		||||
    0x2f, 0xa1, 0xaa, 0x79, 0x00, 0xda, 0xdc, 0x7c, 0x43, 0xf7,
 | 
			
		||||
    0x42, 0x3c, 0xa0, 0xef, 0x68, 0xf7, 0xdf, 0xb9, 0x69, 0xfb,
 | 
			
		||||
    0x8e, 0x01, 0xed, 0x01, 0x42, 0xb5, 0x4e, 0x57, 0xa6, 0x26,
 | 
			
		||||
    0xb8, 0xd0, 0x7b, 0x56, 0x6d, 0x03, 0xc6, 0x40, 0x8c, 0x8c,
 | 
			
		||||
    0x2a, 0x55, 0xd7, 0x9c, 0x35, 0x00, 0x94, 0x93, 0xec, 0x03,
 | 
			
		||||
    0xeb, 0x22, 0xef, 0x77, 0xbb, 0x79, 0x13, 0x3f, 0x15, 0xa1,
 | 
			
		||||
    0x8f, 0xca, 0xdf, 0xfd, 0xd3, 0xb8, 0xe1, 0xd4, 0xcc, 0x09,
 | 
			
		||||
    0x3f, 0x3c, 0x2c, 0xdb, 0xd1, 0x49, 0x7f, 0x38, 0x07, 0x83,
 | 
			
		||||
    0x6d, 0xeb, 0x08, 0x66, 0xe9, 0x06, 0x44, 0x12, 0xac, 0x95,
 | 
			
		||||
    0x22, 0x90, 0x23, 0x67, 0xd4, 0x08, 0xcc, 0xf4, 0xb7, 0xdc,
 | 
			
		||||
    0xcc, 0x87, 0xd4, 0xac, 0x69, 0x35, 0x4c, 0xb5, 0x39, 0x36,
 | 
			
		||||
    0xcd, 0xa4, 0xd2, 0x95, 0xca, 0x0d, 0xc5, 0xda, 0xc2, 0xc5,
 | 
			
		||||
    0x22, 0x32, 0x28, 0x08, 0xe3, 0xd2, 0x8b, 0x38, 0x30, 0xdc,
 | 
			
		||||
    0x8c, 0x75, 0x4f, 0x6a, 0xec, 0x7a, 0xac, 0x16, 0x3e, 0xa8,
 | 
			
		||||
    0xd4, 0x6a, 0x45, 0xe1, 0xa8, 0x4f, 0x2e, 0x80, 0x34, 0xaa,
 | 
			
		||||
    0x54, 0x1b, 0x02, 0x95, 0x7d, 0x8a, 0x6d, 0xcc, 0x79, 0xca,
 | 
			
		||||
    0xf2, 0xa4, 0x2e, 0x8d, 0xfb, 0xfe, 0x15, 0x51, 0x10, 0x0e,
 | 
			
		||||
    0x4d, 0x88, 0xb1, 0xc7, 0xf4, 0x79, 0xdb, 0xf0, 0xb4, 0x56,
 | 
			
		||||
    0x44, 0x37, 0xca, 0x5a, 0xc1, 0x8c, 0x48, 0xac, 0xae, 0x48,
 | 
			
		||||
    0x80, 0x83, 0x01, 0x3f, 0xde, 0xd9, 0xd3, 0x2c, 0x51, 0x46,
 | 
			
		||||
    0xb1, 0x41, 0xb6, 0xc6, 0x91, 0x72, 0xf9, 0x83, 0x55, 0x1b,
 | 
			
		||||
    0x8c, 0xba, 0xf3, 0x73, 0xe5, 0x2c, 0x74, 0x50, 0x3a, 0xbe,
 | 
			
		||||
    0xc5, 0x2f, 0xa7, 0xb2, 0x6d, 0x8c, 0x9e, 0x13, 0x77, 0xa3,
 | 
			
		||||
    0x13, 0xcd, 0x6d, 0x8c, 0x45, 0xe1, 0xfc, 0x0b, 0xb7, 0x69,
 | 
			
		||||
    0xe9, 0x27, 0xbc, 0x65, 0xc3, 0xfa, 0x9b, 0xd0, 0xef, 0xfe,
 | 
			
		||||
    0xe8, 0x1f, 0xb3, 0x5e, 0x34, 0xf4, 0x8c, 0xea, 0xfc, 0xd3,
 | 
			
		||||
    0x81, 0xbf, 0x3d, 0x30, 0xb2, 0xb4, 0x01, 0xe8, 0x43, 0x0f,
 | 
			
		||||
    0xba, 0x02, 0x23, 0x42, 0x76, 0x82, 0x31, 0x73, 0x91, 0xed,
 | 
			
		||||
    0x07, 0x46, 0x61, 0x0d, 0x39, 0x83, 0x40, 0xce, 0x7a, 0xd4,
 | 
			
		||||
    0xdb, 0x80, 0x2c, 0x1f, 0x0d, 0xd1, 0x34, 0xd4, 0x92, 0xe3,
 | 
			
		||||
    0xd4, 0xf1, 0xc2, 0x01, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02,
 | 
			
		||||
    0x82, 0x02, 0x01, 0x00, 0x97, 0x6c, 0xda, 0x6e, 0xea, 0x4f,
 | 
			
		||||
    0xcf, 0xaf, 0xf7, 0x4c, 0xd9, 0xf1, 0x90, 0x00, 0x77, 0xdb,
 | 
			
		||||
    0xf2, 0x97, 0x76, 0x72, 0xb9, 0xb7, 0x47, 0xd1, 0x9c, 0xdd,
 | 
			
		||||
    0xcb, 0x4a, 0x33, 0x6e, 0xc9, 0x75, 0x76, 0xe6, 0xe4, 0xa5,
 | 
			
		||||
    0x31, 0x8c, 0x77, 0x13, 0xb4, 0x29, 0xcd, 0xf5, 0x52, 0x17,
 | 
			
		||||
    0xef, 0xf3, 0x08, 0x00, 0xe3, 0xbd, 0x2e, 0xbc, 0xd4, 0x52,
 | 
			
		||||
    0x88, 0xe9, 0x30, 0x75, 0x0b, 0x02, 0xf5, 0xcd, 0x89, 0x0c,
 | 
			
		||||
    0x6c, 0x57, 0x19, 0x27, 0x3d, 0x1e, 0x85, 0xb4, 0xc1, 0x2f,
 | 
			
		||||
    0x1d, 0x92, 0x00, 0x5c, 0x76, 0x29, 0x4b, 0xa4, 0xe1, 0x12,
 | 
			
		||||
    0xb3, 0xc8, 0x09, 0xfe, 0x0e, 0x78, 0x72, 0x61, 0xcb, 0x61,
 | 
			
		||||
    0x6f, 0x39, 0x91, 0x95, 0x4e, 0xd5, 0x3e, 0xc7, 0x8f, 0xb8,
 | 
			
		||||
    0xf6, 0x36, 0xfe, 0x9c, 0x93, 0x9a, 0x38, 0x25, 0x7a, 0xf4,
 | 
			
		||||
    0x4a, 0x12, 0xd4, 0xa0, 0x13, 0xbd, 0xf9, 0x1d, 0x12, 0x3e,
 | 
			
		||||
    0x21, 0x39, 0xfb, 0x72, 0xe0, 0x05, 0x3d, 0xc3, 0xe5, 0x50,
 | 
			
		||||
    0xa8, 0x5d, 0x85, 0xa3, 0xea, 0x5f, 0x1c, 0xb2, 0x3f, 0xea,
 | 
			
		||||
    0x6d, 0x03, 0x91, 0x55, 0xd8, 0x19, 0x0a, 0x21, 0x12, 0x16,
 | 
			
		||||
    0xd9, 0x12, 0xc4, 0xe6, 0x07, 0x18, 0x5b, 0x26, 0xa4, 0xae,
 | 
			
		||||
    0xed, 0x2b, 0xb7, 0xa6, 0xed, 0xf8, 0xad, 0xec, 0x77, 0xe6,
 | 
			
		||||
    0x7f, 0x4f, 0x76, 0x00, 0xc0, 0xfa, 0x15, 0x92, 0xb4, 0x2c,
 | 
			
		||||
    0x22, 0xc2, 0xeb, 0x6a, 0xad, 0x14, 0x05, 0xb2, 0xe5, 0x8a,
 | 
			
		||||
    0x9e, 0x85, 0x83, 0xcc, 0x04, 0xf1, 0x56, 0x78, 0x44, 0x5e,
 | 
			
		||||
    0xde, 0xe0, 0x60, 0x1a, 0x65, 0x79, 0x31, 0x23, 0x05, 0xbb,
 | 
			
		||||
    0x01, 0xff, 0xdd, 0x2e, 0xb7, 0xb3, 0xaa, 0x74, 0xe0, 0xa5,
 | 
			
		||||
    0x94, 0xaf, 0x4b, 0xde, 0x58, 0x0f, 0x55, 0xde, 0x33, 0xf6,
 | 
			
		||||
    0xe3, 0xd6, 0x34, 0x36, 0x57, 0xd6, 0x79, 0x91, 0x2e, 0xbe,
 | 
			
		||||
    0x3b, 0xd9, 0x4e, 0xb6, 0x9d, 0x21, 0x5c, 0xd3, 0x48, 0x14,
 | 
			
		||||
    0x7f, 0x4a, 0xc4, 0x60, 0xa9, 0x29, 0xf8, 0x53, 0x7f, 0x88,
 | 
			
		||||
    0x11, 0x2d, 0xb5, 0xc5, 0x2d, 0x6f, 0xee, 0x85, 0x0b, 0xf7,
 | 
			
		||||
    0x8d, 0x9a, 0xbe, 0xb0, 0x42, 0xf2, 0x2e, 0x71, 0xaf, 0x19,
 | 
			
		||||
    0x31, 0x6d, 0xec, 0xcd, 0x6f, 0x2b, 0x23, 0xdf, 0xb4, 0x40,
 | 
			
		||||
    0xaf, 0x2c, 0x0a, 0xc3, 0x1b, 0x7d, 0x7d, 0x03, 0x1d, 0x4b,
 | 
			
		||||
    0xf3, 0xb5, 0xe0, 0x85, 0xd8, 0xdf, 0x91, 0x6b, 0x0a, 0x69,
 | 
			
		||||
    0xf7, 0xf2, 0x69, 0x66, 0x5b, 0xf1, 0xcf, 0x46, 0x7d, 0xe9,
 | 
			
		||||
    0x70, 0xfa, 0x6d, 0x7e, 0x75, 0x4e, 0xa9, 0x77, 0xe6, 0x8c,
 | 
			
		||||
    0x02, 0xf7, 0x14, 0x4d, 0xa5, 0x41, 0x8f, 0x3f, 0xc1, 0x62,
 | 
			
		||||
    0x1e, 0x71, 0x5e, 0x38, 0xb4, 0xd6, 0xe6, 0xe1, 0x4b, 0xc2,
 | 
			
		||||
    0x2c, 0x30, 0x83, 0x81, 0x6f, 0x49, 0x2e, 0x96, 0xe6, 0xc9,
 | 
			
		||||
    0x9a, 0xf7, 0x5d, 0x09, 0xa0, 0x55, 0x02, 0xa5, 0x3a, 0x25,
 | 
			
		||||
    0x23, 0xd0, 0x92, 0xc3, 0xa3, 0xe3, 0x0e, 0x12, 0x2f, 0x4d,
 | 
			
		||||
    0xef, 0xf3, 0x55, 0x5a, 0xbe, 0xe6, 0x19, 0x86, 0x31, 0xab,
 | 
			
		||||
    0x75, 0x9a, 0xd3, 0xf0, 0x2c, 0xc5, 0x41, 0x92, 0xd9, 0x1f,
 | 
			
		||||
    0x5f, 0x11, 0x8c, 0x75, 0x1c, 0x63, 0xd0, 0x02, 0x80, 0x2c,
 | 
			
		||||
    0x68, 0xcb, 0x93, 0xfb, 0x51, 0x73, 0x49, 0xb4, 0x60, 0xda,
 | 
			
		||||
    0xe2, 0x26, 0xaf, 0xa9, 0x46, 0x12, 0xb8, 0xec, 0x50, 0xdd,
 | 
			
		||||
    0x12, 0x06, 0x5f, 0xce, 0x59, 0xe6, 0xf6, 0x1c, 0xe0, 0x54,
 | 
			
		||||
    0x10, 0xad, 0xf6, 0xcd, 0x98, 0xcc, 0x0f, 0xfb, 0xcb, 0x41,
 | 
			
		||||
    0x14, 0x9d, 0xed, 0xe4, 0xb4, 0x74, 0x5f, 0x09, 0x60, 0xc7,
 | 
			
		||||
    0x12, 0xf6, 0x7b, 0x3c, 0x8f, 0xa7, 0x20, 0xbc, 0xe4, 0xb1,
 | 
			
		||||
    0xef, 0xeb, 0xa4, 0x93, 0xc5, 0x06, 0xca, 0x9a, 0x27, 0x9d,
 | 
			
		||||
    0x87, 0xf3, 0xde, 0xca, 0xe5, 0xe7, 0xf6, 0x1c, 0x01, 0x65,
 | 
			
		||||
    0x5b, 0xfb, 0x19, 0x79, 0x6e, 0x08, 0x26, 0xc5, 0xc8, 0x28,
 | 
			
		||||
    0x0e, 0xb6, 0x3b, 0x07, 0x08, 0xc1, 0x02, 0x82, 0x01, 0x01,
 | 
			
		||||
    0x00, 0xe8, 0x1c, 0x73, 0xa6, 0xb8, 0xe0, 0x0e, 0x6d, 0x8d,
 | 
			
		||||
    0x1b, 0xb9, 0x53, 0xed, 0x58, 0x94, 0xe6, 0x1d, 0x60, 0x14,
 | 
			
		||||
    0x5c, 0x76, 0x43, 0xc4, 0x58, 0x19, 0xc4, 0x24, 0xe8, 0xbc,
 | 
			
		||||
    0x1b, 0x3b, 0x0b, 0x13, 0x24, 0x45, 0x54, 0x0e, 0xcc, 0x37,
 | 
			
		||||
    0xf0, 0xe0, 0x63, 0x7d, 0xc3, 0xf7, 0xfb, 0x81, 0x74, 0x81,
 | 
			
		||||
    0xc4, 0x0f, 0x1a, 0x21, 0x48, 0xaf, 0xce, 0xc1, 0xc4, 0x94,
 | 
			
		||||
    0x18, 0x06, 0x44, 0x8d, 0xd3, 0xd2, 0x22, 0x2d, 0x2d, 0x3e,
 | 
			
		||||
    0x5a, 0x31, 0xdc, 0x95, 0x8e, 0xf4, 0x41, 0xfc, 0x58, 0xc9,
 | 
			
		||||
    0x40, 0x92, 0x17, 0x5f, 0xe3, 0xda, 0xac, 0x9e, 0x3f, 0x1c,
 | 
			
		||||
    0x2a, 0x6b, 0x58, 0x5f, 0x48, 0x78, 0x20, 0xb1, 0xaf, 0x24,
 | 
			
		||||
    0x9b, 0x3c, 0x20, 0x8b, 0x93, 0x25, 0x9e, 0xe6, 0x6b, 0xbc,
 | 
			
		||||
    0x13, 0x42, 0x14, 0x6c, 0x36, 0x31, 0xff, 0x7a, 0xd1, 0xc1,
 | 
			
		||||
    0x1a, 0x26, 0x14, 0x7f, 0xa9, 0x76, 0xa7, 0x0c, 0xf8, 0xcc,
 | 
			
		||||
    0xed, 0x07, 0x6a, 0xd2, 0xdf, 0x62, 0xee, 0x0a, 0x7c, 0x84,
 | 
			
		||||
    0xcb, 0x49, 0x90, 0xb2, 0x03, 0x0d, 0xa2, 0x82, 0x06, 0x77,
 | 
			
		||||
    0xf1, 0xcd, 0x67, 0xf2, 0x47, 0x21, 0x02, 0x3f, 0x43, 0x21,
 | 
			
		||||
    0xf0, 0x46, 0x30, 0x62, 0x51, 0x72, 0xb1, 0xe7, 0x48, 0xc6,
 | 
			
		||||
    0x67, 0x12, 0xcd, 0x9e, 0xd6, 0x15, 0xe5, 0x21, 0xed, 0xfa,
 | 
			
		||||
    0x8f, 0x30, 0xa6, 0x41, 0xfe, 0xb6, 0xfa, 0x8f, 0x34, 0x14,
 | 
			
		||||
    0x19, 0xe8, 0x11, 0xf7, 0xa5, 0x77, 0x3e, 0xb7, 0xf9, 0x39,
 | 
			
		||||
    0x07, 0x8c, 0x67, 0x2a, 0xab, 0x7b, 0x08, 0xf8, 0xb0, 0x06,
 | 
			
		||||
    0xa8, 0xea, 0x2f, 0x8f, 0xfa, 0xcc, 0xcc, 0x40, 0xce, 0xf3,
 | 
			
		||||
    0x70, 0x4f, 0x3f, 0x7f, 0xe2, 0x0c, 0xea, 0x76, 0x4a, 0x35,
 | 
			
		||||
    0x4e, 0x47, 0xad, 0x2b, 0xa7, 0x97, 0x5d, 0x74, 0x43, 0x97,
 | 
			
		||||
    0x90, 0xd2, 0xfb, 0xd9, 0xf9, 0x96, 0x01, 0x33, 0x05, 0xed,
 | 
			
		||||
    0x7b, 0x03, 0x05, 0xad, 0xf8, 0x49, 0x03, 0x02, 0x82, 0x01,
 | 
			
		||||
    0x01, 0x00, 0xd4, 0x40, 0x17, 0x66, 0x10, 0x92, 0x95, 0xc8,
 | 
			
		||||
    0xec, 0x62, 0xa9, 0x7a, 0xcb, 0x93, 0x8e, 0xe6, 0x53, 0xd4,
 | 
			
		||||
    0x80, 0x48, 0x27, 0x4b, 0x41, 0xce, 0x61, 0xdf, 0xbf, 0x94,
 | 
			
		||||
    0xa4, 0x3d, 0x71, 0x03, 0x0b, 0xed, 0x25, 0x71, 0x98, 0xa4,
 | 
			
		||||
    0xd6, 0xd5, 0x4a, 0x57, 0xf5, 0x6c, 0x1b, 0xda, 0x21, 0x7d,
 | 
			
		||||
    0x35, 0x45, 0xb3, 0xf3, 0x6a, 0xd9, 0xd3, 0x43, 0xe8, 0x5c,
 | 
			
		||||
    0x54, 0x1c, 0x83, 0x1b, 0xb4, 0x5f, 0xf2, 0x97, 0x24, 0x2e,
 | 
			
		||||
    0xdc, 0x40, 0xde, 0x92, 0x23, 0x59, 0x8e, 0xbc, 0xd2, 0xa1,
 | 
			
		||||
    0xf2, 0xe0, 0x4c, 0xdd, 0x0b, 0xd1, 0xe7, 0xae, 0x65, 0xbc,
 | 
			
		||||
    0xb5, 0xf5, 0x5b, 0x98, 0xe9, 0xd7, 0xc2, 0xb7, 0x0e, 0x55,
 | 
			
		||||
    0x71, 0x0e, 0x3c, 0x0a, 0x24, 0x6b, 0xa6, 0xe6, 0x14, 0x61,
 | 
			
		||||
    0x11, 0xfd, 0x33, 0x42, 0x99, 0x2b, 0x84, 0x77, 0x74, 0x92,
 | 
			
		||||
    0x91, 0xf5, 0x79, 0x79, 0xcf, 0xad, 0x8e, 0x04, 0xef, 0x80,
 | 
			
		||||
    0x1e, 0x57, 0xf4, 0x14, 0xf5, 0x35, 0x09, 0x74, 0xb2, 0x13,
 | 
			
		||||
    0x71, 0x58, 0x6b, 0xea, 0x32, 0x5d, 0xf3, 0xd3, 0x76, 0x48,
 | 
			
		||||
    0x39, 0x10, 0x23, 0x84, 0x9d, 0xbe, 0x92, 0x77, 0x4a, 0xed,
 | 
			
		||||
    0x70, 0x3e, 0x1a, 0xa2, 0x6c, 0xb3, 0x81, 0x00, 0xc3, 0xc9,
 | 
			
		||||
    0xe4, 0x52, 0xc8, 0x24, 0x88, 0x0c, 0x41, 0xad, 0x87, 0x5a,
 | 
			
		||||
    0xea, 0xa3, 0x7a, 0x85, 0x1c, 0x5e, 0x31, 0x7f, 0xc3, 0x35,
 | 
			
		||||
    0xc6, 0xfa, 0x10, 0xc8, 0x75, 0x10, 0xc4, 0x96, 0x99, 0xe7,
 | 
			
		||||
    0xfe, 0x01, 0xb4, 0x74, 0xdb, 0xb4, 0x11, 0xc3, 0xc8, 0x8c,
 | 
			
		||||
    0xf6, 0xf7, 0x3b, 0x66, 0x50, 0xfc, 0xdb, 0xeb, 0xca, 0x47,
 | 
			
		||||
    0x85, 0x89, 0xe1, 0x65, 0xd9, 0x62, 0x34, 0x3c, 0x70, 0xd8,
 | 
			
		||||
    0x2e, 0xb4, 0x2f, 0x65, 0x3c, 0x4a, 0xa6, 0x2a, 0xe7, 0xc7,
 | 
			
		||||
    0xd8, 0x41, 0x8f, 0x8a, 0x43, 0xbf, 0x42, 0xf2, 0x4d, 0xbc,
 | 
			
		||||
    0xfc, 0x9e, 0x27, 0x95, 0xfb, 0x75, 0xff, 0xab, 0x02, 0x82,
 | 
			
		||||
    0x01, 0x00, 0x41, 0x2f, 0x44, 0x57, 0x6d, 0x12, 0x17, 0x5b,
 | 
			
		||||
    0x32, 0xc6, 0xb7, 0x6c, 0x57, 0x7a, 0x8a, 0x0e, 0x79, 0xef,
 | 
			
		||||
    0x72, 0xa8, 0x68, 0xda, 0x2d, 0x38, 0xe4, 0xbb, 0x8d, 0xf6,
 | 
			
		||||
    0x02, 0x65, 0xcf, 0x56, 0x13, 0xe1, 0x1a, 0xcb, 0x39, 0x80,
 | 
			
		||||
    0xa6, 0xb1, 0x32, 0x03, 0x1e, 0xdd, 0xbb, 0x35, 0xd9, 0xac,
 | 
			
		||||
    0x43, 0x89, 0x31, 0x08, 0x90, 0x92, 0x5e, 0x35, 0x3d, 0x7b,
 | 
			
		||||
    0x9c, 0x6f, 0x86, 0xcb, 0x17, 0xdd, 0x85, 0xe4, 0xed, 0x35,
 | 
			
		||||
    0x08, 0x8e, 0xc1, 0xf4, 0x05, 0xd8, 0x68, 0xc6, 0x63, 0x3c,
 | 
			
		||||
    0xf7, 0xff, 0xf7, 0x47, 0x33, 0x39, 0xc5, 0x3e, 0xb7, 0x0e,
 | 
			
		||||
    0x58, 0x35, 0x9d, 0x81, 0xea, 0xf8, 0x6a, 0x2c, 0x1c, 0x5a,
 | 
			
		||||
    0x68, 0x78, 0x64, 0x11, 0x6b, 0xc1, 0x3e, 0x4e, 0x7a, 0xbd,
 | 
			
		||||
    0x84, 0xcb, 0x0f, 0xc2, 0xb6, 0x85, 0x1d, 0xd3, 0x76, 0xc5,
 | 
			
		||||
    0x93, 0x6a, 0x69, 0x89, 0x56, 0x34, 0xdc, 0x4a, 0x9b, 0xbc,
 | 
			
		||||
    0xff, 0xa8, 0x0d, 0x6e, 0x35, 0x9c, 0x60, 0xa7, 0x23, 0x30,
 | 
			
		||||
    0xc7, 0x06, 0x64, 0x39, 0x8b, 0x94, 0x89, 0xee, 0xba, 0x7f,
 | 
			
		||||
    0x60, 0x8d, 0xfa, 0xb6, 0x97, 0x76, 0xdc, 0x51, 0x4a, 0x3c,
 | 
			
		||||
    0xeb, 0x3a, 0x14, 0x2c, 0x20, 0x60, 0x69, 0x4a, 0x86, 0xfe,
 | 
			
		||||
    0x8c, 0x21, 0x84, 0x49, 0x54, 0xb3, 0x20, 0xe1, 0x01, 0x7f,
 | 
			
		||||
    0x58, 0xdf, 0x7f, 0xb5, 0x21, 0x51, 0x8c, 0x47, 0x9f, 0x91,
 | 
			
		||||
    0xeb, 0x97, 0x3e, 0xf2, 0x54, 0xcf, 0x16, 0x46, 0xf9, 0xd9,
 | 
			
		||||
    0xb6, 0xe7, 0x64, 0xc9, 0xd0, 0x54, 0xea, 0x2f, 0xa1, 0xcf,
 | 
			
		||||
    0xa5, 0x7f, 0x28, 0x8d, 0x84, 0xec, 0xd5, 0x39, 0x03, 0x76,
 | 
			
		||||
    0x5b, 0x2d, 0x8e, 0x43, 0xf2, 0x01, 0x24, 0xc9, 0x6f, 0xc0,
 | 
			
		||||
    0xf5, 0x69, 0x6f, 0x7d, 0xb5, 0x85, 0xd2, 0x5f, 0x7f, 0x78,
 | 
			
		||||
    0x40, 0x07, 0x7f, 0x09, 0x15, 0xb5, 0x1f, 0x28, 0x65, 0x10,
 | 
			
		||||
    0xe4, 0x19, 0xa8, 0xc6, 0x9e, 0x8d, 0xdc, 0xcb, 0x02, 0x82,
 | 
			
		||||
    0x01, 0x00, 0x13, 0x01, 0xee, 0x56, 0x80, 0x93, 0x70, 0x00,
 | 
			
		||||
    0x7f, 0x52, 0xd2, 0x94, 0xa1, 0x98, 0x84, 0x4a, 0x92, 0x25,
 | 
			
		||||
    0x4c, 0x9b, 0xa9, 0x91, 0x2e, 0xc2, 0x79, 0xb7, 0x5c, 0xe3,
 | 
			
		||||
    0xc5, 0xd5, 0x8e, 0xc2, 0x54, 0x16, 0x17, 0xad, 0x55, 0x9b,
 | 
			
		||||
    0x25, 0x76, 0x12, 0x63, 0x50, 0x22, 0x2f, 0x58, 0x58, 0x79,
 | 
			
		||||
    0x6b, 0x04, 0xe3, 0xf9, 0x9f, 0x8f, 0x04, 0x41, 0x67, 0x94,
 | 
			
		||||
    0xa5, 0x1f, 0xac, 0x8a, 0x15, 0x9c, 0x26, 0x10, 0x6c, 0xf8,
 | 
			
		||||
    0x19, 0x57, 0x61, 0xd7, 0x3a, 0x7d, 0x31, 0xb0, 0x2d, 0x38,
 | 
			
		||||
    0xbd, 0x94, 0x62, 0xad, 0xc4, 0xfa, 0x36, 0x42, 0x42, 0xf0,
 | 
			
		||||
    0x24, 0x67, 0x65, 0x9d, 0x8b, 0x0b, 0x7c, 0x6f, 0x82, 0x44,
 | 
			
		||||
    0x1a, 0x8c, 0xc8, 0xc9, 0xab, 0xbb, 0x4c, 0x45, 0xfc, 0x7b,
 | 
			
		||||
    0x38, 0xee, 0x30, 0xe1, 0xfc, 0xef, 0x8d, 0xbc, 0x58, 0xdf,
 | 
			
		||||
    0x2b, 0x5d, 0x0d, 0x54, 0xe0, 0x49, 0x4d, 0x97, 0x99, 0x8f,
 | 
			
		||||
    0x22, 0xa8, 0x83, 0xbe, 0x40, 0xbb, 0x50, 0x2e, 0x78, 0x28,
 | 
			
		||||
    0x0f, 0x95, 0x78, 0x8c, 0x8f, 0x98, 0x24, 0x56, 0xc2, 0x97,
 | 
			
		||||
    0xf3, 0x2c, 0x43, 0xd2, 0x03, 0x82, 0x66, 0x81, 0x72, 0x5f,
 | 
			
		||||
    0x53, 0x16, 0xec, 0xb1, 0xb1, 0x04, 0x5e, 0x40, 0x20, 0x48,
 | 
			
		||||
    0x7b, 0x3f, 0x02, 0x97, 0x6a, 0xeb, 0x96, 0x12, 0x21, 0x35,
 | 
			
		||||
    0xfe, 0x1f, 0x47, 0xc0, 0x95, 0xea, 0xc5, 0x8a, 0x08, 0x84,
 | 
			
		||||
    0x4f, 0x5e, 0x63, 0x94, 0x60, 0x0f, 0x71, 0x5b, 0x7f, 0x4a,
 | 
			
		||||
    0xec, 0x4f, 0x60, 0xc6, 0xba, 0x4a, 0x24, 0xf1, 0x20, 0x8b,
 | 
			
		||||
    0xa7, 0x2e, 0x3a, 0xce, 0x8d, 0xe0, 0x27, 0x1d, 0xb5, 0x8e,
 | 
			
		||||
    0xb4, 0x21, 0xc5, 0xe2, 0xa6, 0x16, 0x0a, 0x51, 0x83, 0x55,
 | 
			
		||||
    0x88, 0xd1, 0x30, 0x11, 0x63, 0xd5, 0xd7, 0x8d, 0xae, 0x16,
 | 
			
		||||
    0x12, 0x82, 0xc4, 0x85, 0x00, 0x4e, 0x27, 0x83, 0xa5, 0x7c,
 | 
			
		||||
    0x90, 0x2e, 0xe5, 0xa2, 0xa3, 0xd3, 0x4c, 0x63, 0x02, 0x82,
 | 
			
		||||
    0x01, 0x01, 0x00, 0x86, 0x08, 0x98, 0x98, 0xa5, 0x00, 0x05,
 | 
			
		||||
    0x39, 0x77, 0xd9, 0x66, 0xb3, 0xcf, 0xca, 0xa0, 0x71, 0xb3,
 | 
			
		||||
    0x50, 0xce, 0x3d, 0xb1, 0x93, 0x95, 0x35, 0xc4, 0xd4, 0x2e,
 | 
			
		||||
    0x90, 0xdf, 0x0f, 0xfc, 0x60, 0xc1, 0x94, 0x68, 0x61, 0x43,
 | 
			
		||||
    0xca, 0x9a, 0x23, 0x4a, 0x1e, 0x45, 0x72, 0x99, 0xb5, 0x1e,
 | 
			
		||||
    0x61, 0x8d, 0x77, 0x0f, 0xa0, 0xbb, 0xd7, 0x77, 0xb4, 0x2a,
 | 
			
		||||
    0x15, 0x11, 0x88, 0x2d, 0xb3, 0x56, 0x61, 0x5e, 0x6a, 0xed,
 | 
			
		||||
    0xa4, 0x46, 0x4a, 0x3f, 0x50, 0x11, 0xd6, 0xba, 0xb6, 0xd7,
 | 
			
		||||
    0x95, 0x65, 0x53, 0xc3, 0xa1, 0x8f, 0xe0, 0xa3, 0xf5, 0x1c,
 | 
			
		||||
    0xfd, 0xaf, 0x6e, 0x43, 0xd7, 0x17, 0xa7, 0xd3, 0x81, 0x1b,
 | 
			
		||||
    0xa4, 0xdf, 0xe0, 0x97, 0x8a, 0x46, 0x03, 0xd3, 0x46, 0x0e,
 | 
			
		||||
    0x83, 0x48, 0x4e, 0xd2, 0x02, 0xcb, 0xc0, 0xad, 0x79, 0x95,
 | 
			
		||||
    0x8c, 0x96, 0xba, 0x40, 0x34, 0x11, 0x71, 0x5e, 0xe9, 0x11,
 | 
			
		||||
    0xf9, 0xc5, 0x4a, 0x5e, 0x91, 0x9d, 0xf5, 0x92, 0x4f, 0xeb,
 | 
			
		||||
    0xc6, 0x70, 0x02, 0x2d, 0x3d, 0x04, 0xaa, 0xe9, 0x3a, 0x8e,
 | 
			
		||||
    0xd5, 0xa8, 0xad, 0xf7, 0xce, 0x0d, 0x16, 0xb2, 0xec, 0x0a,
 | 
			
		||||
    0x9c, 0xf5, 0x94, 0x39, 0xb9, 0x8a, 0xfc, 0x1e, 0xf9, 0xcc,
 | 
			
		||||
    0xf2, 0x5f, 0x21, 0x31, 0x74, 0x72, 0x6b, 0x64, 0xae, 0x35,
 | 
			
		||||
    0x61, 0x8d, 0x0d, 0xcb, 0xe7, 0xda, 0x39, 0xca, 0xf3, 0x21,
 | 
			
		||||
    0x66, 0x0b, 0x95, 0xd7, 0x0a, 0x7c, 0xca, 0xa1, 0xa9, 0x5a,
 | 
			
		||||
    0xe8, 0xac, 0xe0, 0x71, 0x54, 0xaf, 0x28, 0xcf, 0xd5, 0x70,
 | 
			
		||||
    0x89, 0xe0, 0xf3, 0x9e, 0x43, 0x6c, 0x8d, 0x7b, 0x99, 0x01,
 | 
			
		||||
    0x68, 0x4d, 0xa1, 0x45, 0x46, 0x0c, 0x43, 0xbc, 0xcc, 0x2c,
 | 
			
		||||
    0xdd, 0xc5, 0x46, 0xc8, 0x4e, 0x0e, 0xbe, 0xed, 0xb9, 0x26,
 | 
			
		||||
    0xab, 0x2e, 0xdb, 0xeb, 0x8f, 0xff, 0xdb, 0xb0, 0xc6, 0x55,
 | 
			
		||||
    0xaf, 0xf8, 0x2a, 0x91, 0x9d, 0x50, 0x44, 0x21, 0x17,
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/* apps/timeouts.h */
 | 
			
		||||
/* 
 | 
			
		||||
/*
 | 
			
		||||
 * DTLS implementation written by Nagendra Modadugu
 | 
			
		||||
 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.  
 | 
			
		||||
 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1999-2005 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -58,10 +58,10 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef INCLUDED_TIMEOUTS_H
 | 
			
		||||
#define INCLUDED_TIMEOUTS_H
 | 
			
		||||
# define INCLUDED_TIMEOUTS_H
 | 
			
		||||
 | 
			
		||||
/* numbers in us */
 | 
			
		||||
#define DGRAM_RCV_TIMEOUT         250000
 | 
			
		||||
#define DGRAM_SND_TIMEOUT         250000
 | 
			
		||||
# define DGRAM_RCV_TIMEOUT         250000
 | 
			
		||||
# define DGRAM_SND_TIMEOUT         250000
 | 
			
		||||
 | 
			
		||||
#endif /* ! INCLUDED_TIMEOUTS_H */
 | 
			
		||||
#endif                          /* ! INCLUDED_TIMEOUTS_H */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										490
									
								
								apps/verify.c
									
									
									
									
									
								
							
							
						
						
									
										490
									
								
								apps/verify.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -67,284 +67,286 @@
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	verify_main
 | 
			
		||||
#define PROG    verify_main
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx);
 | 
			
		||||
static int check(X509_STORE *ctx, char *file,
 | 
			
		||||
		STACK_OF(X509) *uchain, STACK_OF(X509) *tchain,
 | 
			
		||||
		STACK_OF(X509_CRL) *crls, ENGINE *e);
 | 
			
		||||
static int v_verbose=0, vflags = 0;
 | 
			
		||||
                 STACK_OF(X509) *uchain, STACK_OF(X509) *tchain,
 | 
			
		||||
                 STACK_OF(X509_CRL) *crls, ENGINE *e);
 | 
			
		||||
static int v_verbose = 0, vflags = 0;
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	int i,ret=1, badarg = 0;
 | 
			
		||||
	char *CApath=NULL,*CAfile=NULL;
 | 
			
		||||
	char *untfile = NULL, *trustfile = NULL, *crlfile = NULL;
 | 
			
		||||
	STACK_OF(X509) *untrusted = NULL, *trusted = NULL;
 | 
			
		||||
	STACK_OF(X509_CRL) *crls = NULL;
 | 
			
		||||
	X509_STORE *cert_ctx=NULL;
 | 
			
		||||
	X509_LOOKUP *lookup=NULL;
 | 
			
		||||
	X509_VERIFY_PARAM *vpm = NULL;
 | 
			
		||||
{
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    int i, ret = 1, badarg = 0;
 | 
			
		||||
    char *CApath = NULL, *CAfile = NULL;
 | 
			
		||||
    char *untfile = NULL, *trustfile = NULL, *crlfile = NULL;
 | 
			
		||||
    STACK_OF(X509) *untrusted = NULL, *trusted = NULL;
 | 
			
		||||
    STACK_OF(X509_CRL) *crls = NULL;
 | 
			
		||||
    X509_STORE *cert_ctx = NULL;
 | 
			
		||||
    X509_LOOKUP *lookup = NULL;
 | 
			
		||||
    X509_VERIFY_PARAM *vpm = NULL;
 | 
			
		||||
    int crl_download = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	cert_ctx=X509_STORE_new();
 | 
			
		||||
	if (cert_ctx == NULL) goto end;
 | 
			
		||||
	X509_STORE_set_verify_cb(cert_ctx,cb);
 | 
			
		||||
    cert_ctx = X509_STORE_new();
 | 
			
		||||
    if (cert_ctx == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
    X509_STORE_set_verify_cb(cert_ctx, cb);
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	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;
 | 
			
		||||
				CAfile= *(++argv);
 | 
			
		||||
				}
 | 
			
		||||
			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;
 | 
			
		||||
				untfile= *(++argv);
 | 
			
		||||
				}
 | 
			
		||||
			else if (strcmp(*argv,"-trusted") == 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (argc-- < 1) goto end;
 | 
			
		||||
				trustfile= *(++argv);
 | 
			
		||||
				}
 | 
			
		||||
			else if (strcmp(*argv,"-CRLfile") == 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (argc-- < 1) goto end;
 | 
			
		||||
				crlfile= *(++argv);
 | 
			
		||||
				}
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    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;
 | 
			
		||||
                CAfile = *(++argv);
 | 
			
		||||
            } 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;
 | 
			
		||||
                untfile = *(++argv);
 | 
			
		||||
            } else if (strcmp(*argv, "-trusted") == 0) {
 | 
			
		||||
                if (argc-- < 1)
 | 
			
		||||
                    goto end;
 | 
			
		||||
                trustfile = *(++argv);
 | 
			
		||||
            } else if (strcmp(*argv, "-CRLfile") == 0) {
 | 
			
		||||
                if (argc-- < 1)
 | 
			
		||||
                    goto end;
 | 
			
		||||
                crlfile = *(++argv);
 | 
			
		||||
            } else if (strcmp(*argv, "-crl_download") == 0)
 | 
			
		||||
                crl_download = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
			else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (--argc < 1) goto end;
 | 
			
		||||
				engine= *(++argv);
 | 
			
		||||
				}
 | 
			
		||||
            else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
                if (--argc < 1)
 | 
			
		||||
                    goto end;
 | 
			
		||||
                engine = *(++argv);
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
			else if (strcmp(*argv,"-help") == 0)
 | 
			
		||||
				goto end;
 | 
			
		||||
			else if (strcmp(*argv,"-verbose") == 0)
 | 
			
		||||
				v_verbose=1;
 | 
			
		||||
			else if (argv[0][0] == '-')
 | 
			
		||||
				goto end;
 | 
			
		||||
			else
 | 
			
		||||
				break;
 | 
			
		||||
			argc--;
 | 
			
		||||
			argv++;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
            else if (strcmp(*argv, "-help") == 0)
 | 
			
		||||
                goto end;
 | 
			
		||||
            else if (strcmp(*argv, "-verbose") == 0)
 | 
			
		||||
                v_verbose = 1;
 | 
			
		||||
            else if (argv[0][0] == '-')
 | 
			
		||||
                goto end;
 | 
			
		||||
            else
 | 
			
		||||
                break;
 | 
			
		||||
            argc--;
 | 
			
		||||
            argv++;
 | 
			
		||||
        } else
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
    e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (vpm)
 | 
			
		||||
		X509_STORE_set1_param(cert_ctx, vpm);
 | 
			
		||||
    if (vpm)
 | 
			
		||||
        X509_STORE_set1_param(cert_ctx, vpm);
 | 
			
		||||
 | 
			
		||||
	lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_file());
 | 
			
		||||
	if (lookup == NULL) abort();
 | 
			
		||||
	if (CAfile) {
 | 
			
		||||
		i=X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM);
 | 
			
		||||
		if(!i) {
 | 
			
		||||
			BIO_printf(bio_err, "Error loading file %s\n", CAfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	} 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 (CApath) {
 | 
			
		||||
		i=X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM);
 | 
			
		||||
		if(!i) {
 | 
			
		||||
			BIO_printf(bio_err, "Error loading directory %s\n", CApath);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	} else X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
 | 
			
		||||
    lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_file());
 | 
			
		||||
    if (lookup == NULL)
 | 
			
		||||
        abort();
 | 
			
		||||
    if (CAfile) {
 | 
			
		||||
        i = X509_LOOKUP_load_file(lookup, CAfile, X509_FILETYPE_PEM);
 | 
			
		||||
        if (!i) {
 | 
			
		||||
            BIO_printf(bio_err, "Error loading file %s\n", CAfile);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else
 | 
			
		||||
        X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT);
 | 
			
		||||
 | 
			
		||||
	ERR_clear_error();
 | 
			
		||||
    lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_hash_dir());
 | 
			
		||||
    if (lookup == NULL)
 | 
			
		||||
        abort();
 | 
			
		||||
    if (CApath) {
 | 
			
		||||
        i = X509_LOOKUP_add_dir(lookup, CApath, X509_FILETYPE_PEM);
 | 
			
		||||
        if (!i) {
 | 
			
		||||
            BIO_printf(bio_err, "Error loading directory %s\n", CApath);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else
 | 
			
		||||
        X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT);
 | 
			
		||||
 | 
			
		||||
	if(untfile)
 | 
			
		||||
		{
 | 
			
		||||
		untrusted = load_certs(bio_err, untfile, FORMAT_PEM,
 | 
			
		||||
					NULL, e, "untrusted certificates");
 | 
			
		||||
		if(!untrusted)
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
    ERR_clear_error();
 | 
			
		||||
 | 
			
		||||
	if(trustfile)
 | 
			
		||||
		{
 | 
			
		||||
		trusted = load_certs(bio_err, trustfile, FORMAT_PEM,
 | 
			
		||||
					NULL, e, "trusted certificates");
 | 
			
		||||
		if(!trusted)
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (untfile) {
 | 
			
		||||
        untrusted = load_certs(bio_err, untfile, FORMAT_PEM,
 | 
			
		||||
                               NULL, e, "untrusted certificates");
 | 
			
		||||
        if (!untrusted)
 | 
			
		||||
            goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(crlfile)
 | 
			
		||||
		{
 | 
			
		||||
		crls = load_crls(bio_err, crlfile, FORMAT_PEM,
 | 
			
		||||
					NULL, e, "other CRLs");
 | 
			
		||||
		if(!crls)
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (trustfile) {
 | 
			
		||||
        trusted = load_certs(bio_err, trustfile, FORMAT_PEM,
 | 
			
		||||
                             NULL, e, "trusted certificates");
 | 
			
		||||
        if (!trusted)
 | 
			
		||||
            goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	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]");
 | 
			
		||||
    if (crlfile) {
 | 
			
		||||
        crls = load_crls(bio_err, crlfile, FORMAT_PEM, NULL, e, "other CRLs");
 | 
			
		||||
        if (!crls)
 | 
			
		||||
            goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
    if (crl_download)
 | 
			
		||||
        store_setup_crl_download(cert_ctx);
 | 
			
		||||
    if (argc < 1) {
 | 
			
		||||
        if (1 != check(cert_ctx, NULL, untrusted, trusted, crls, e))
 | 
			
		||||
            ret = -1;
 | 
			
		||||
    } else {
 | 
			
		||||
        for (i = 0; i < argc; i++)
 | 
			
		||||
            if (1 != check(cert_ctx, argv[i], untrusted, trusted, crls, e))
 | 
			
		||||
                ret = -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 end:
 | 
			
		||||
    if (ret == 1) {
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check]");
 | 
			
		||||
        BIO_printf(bio_err, " [-attime timestamp]");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," [-engine e]");
 | 
			
		||||
        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++) {
 | 
			
		||||
			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));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	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);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
        BIO_printf(bio_err, " cert1 cert2 ...\n");
 | 
			
		||||
 | 
			
		||||
        BIO_printf(bio_err, "recognized usages:\n");
 | 
			
		||||
        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));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    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);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret < 0 ? 2 : ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int check(X509_STORE *ctx, char *file,
 | 
			
		||||
		STACK_OF(X509) *uchain, STACK_OF(X509) *tchain,
 | 
			
		||||
		STACK_OF(X509_CRL) *crls, ENGINE *e)
 | 
			
		||||
	{
 | 
			
		||||
	X509 *x=NULL;
 | 
			
		||||
	int i=0,ret=0;
 | 
			
		||||
	X509_STORE_CTX *csc;
 | 
			
		||||
                 STACK_OF(X509) *uchain, STACK_OF(X509) *tchain,
 | 
			
		||||
                 STACK_OF(X509_CRL) *crls, ENGINE *e)
 | 
			
		||||
{
 | 
			
		||||
    X509 *x = NULL;
 | 
			
		||||
    int i = 0, ret = 0;
 | 
			
		||||
    X509_STORE_CTX *csc;
 | 
			
		||||
 | 
			
		||||
	x = load_cert(bio_err, file, FORMAT_PEM, NULL, e, "certificate file");
 | 
			
		||||
	if (x == NULL)
 | 
			
		||||
		goto end;
 | 
			
		||||
	fprintf(stdout,"%s: ",(file == NULL)?"stdin":file);
 | 
			
		||||
    x = load_cert(bio_err, file, FORMAT_PEM, NULL, e, "certificate file");
 | 
			
		||||
    if (x == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
    fprintf(stdout, "%s: ", (file == NULL) ? "stdin" : file);
 | 
			
		||||
 | 
			
		||||
	csc = X509_STORE_CTX_new();
 | 
			
		||||
	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))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if(tchain) X509_STORE_CTX_trusted_stack(csc, tchain);
 | 
			
		||||
	if (crls)
 | 
			
		||||
		X509_STORE_CTX_set0_crls(csc, crls);
 | 
			
		||||
	i=X509_verify_cert(csc);
 | 
			
		||||
	X509_STORE_CTX_free(csc);
 | 
			
		||||
    csc = X509_STORE_CTX_new();
 | 
			
		||||
    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)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (tchain)
 | 
			
		||||
        X509_STORE_CTX_trusted_stack(csc, tchain);
 | 
			
		||||
    if (crls)
 | 
			
		||||
        X509_STORE_CTX_set0_crls(csc, crls);
 | 
			
		||||
    i = X509_verify_cert(csc);
 | 
			
		||||
    X509_STORE_CTX_free(csc);
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (i > 0)
 | 
			
		||||
		{
 | 
			
		||||
		fprintf(stdout,"OK\n");
 | 
			
		||||
		ret=1;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
	if (x != NULL) X509_free(x);
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (i > 0) {
 | 
			
		||||
        fprintf(stdout, "OK\n");
 | 
			
		||||
        ret = 1;
 | 
			
		||||
    } else
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    if (x != NULL)
 | 
			
		||||
        X509_free(x);
 | 
			
		||||
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
    return (ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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);
 | 
			
		||||
{
 | 
			
		||||
    int cert_error = X509_STORE_CTX_get_error(ctx);
 | 
			
		||||
    X509 *current_cert = X509_STORE_CTX_get_current_cert(ctx);
 | 
			
		||||
 | 
			
		||||
	if (!ok)
 | 
			
		||||
		{
 | 
			
		||||
		if (current_cert)
 | 
			
		||||
			{
 | 
			
		||||
			X509_NAME_print_ex_fp(stdout,
 | 
			
		||||
				X509_get_subject_name(current_cert),
 | 
			
		||||
				0, XN_FLAG_ONELINE);
 | 
			
		||||
			printf("\n");
 | 
			
		||||
			}
 | 
			
		||||
		printf("%serror %d at %d depth lookup:%s\n",
 | 
			
		||||
			X509_STORE_CTX_get0_parent_ctx(ctx) ? "[CRL path]" : "",
 | 
			
		||||
			cert_error,
 | 
			
		||||
			X509_STORE_CTX_get_error_depth(ctx),
 | 
			
		||||
			X509_verify_cert_error_string(cert_error));
 | 
			
		||||
		switch(cert_error)
 | 
			
		||||
			{
 | 
			
		||||
			case X509_V_ERR_NO_EXPLICIT_POLICY:
 | 
			
		||||
				policies_print(NULL, ctx);
 | 
			
		||||
			case X509_V_ERR_CERT_HAS_EXPIRED:
 | 
			
		||||
    if (!ok) {
 | 
			
		||||
        if (current_cert) {
 | 
			
		||||
            X509_NAME_print_ex_fp(stdout,
 | 
			
		||||
                                  X509_get_subject_name(current_cert),
 | 
			
		||||
                                  0, XN_FLAG_ONELINE);
 | 
			
		||||
            printf("\n");
 | 
			
		||||
        }
 | 
			
		||||
        printf("%serror %d at %d depth lookup:%s\n",
 | 
			
		||||
               X509_STORE_CTX_get0_parent_ctx(ctx) ? "[CRL path]" : "",
 | 
			
		||||
               cert_error,
 | 
			
		||||
               X509_STORE_CTX_get_error_depth(ctx),
 | 
			
		||||
               X509_verify_cert_error_string(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:
 | 
			
		||||
			/* Continue after extension errors too */
 | 
			
		||||
			case X509_V_ERR_INVALID_CA:
 | 
			
		||||
			case X509_V_ERR_INVALID_NON_CA:
 | 
			
		||||
			case X509_V_ERR_PATH_LENGTH_EXCEEDED:
 | 
			
		||||
			case X509_V_ERR_INVALID_PURPOSE:
 | 
			
		||||
			case X509_V_ERR_CRL_HAS_EXPIRED:
 | 
			
		||||
			case X509_V_ERR_CRL_NOT_YET_VALID:
 | 
			
		||||
			case X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION:
 | 
			
		||||
			ok = 1;
 | 
			
		||||
        case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
 | 
			
		||||
            /* Continue after extension errors too */
 | 
			
		||||
        case X509_V_ERR_INVALID_CA:
 | 
			
		||||
        case X509_V_ERR_INVALID_NON_CA:
 | 
			
		||||
        case X509_V_ERR_PATH_LENGTH_EXCEEDED:
 | 
			
		||||
        case X509_V_ERR_INVALID_PURPOSE:
 | 
			
		||||
        case X509_V_ERR_CRL_HAS_EXPIRED:
 | 
			
		||||
        case X509_V_ERR_CRL_NOT_YET_VALID:
 | 
			
		||||
        case X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION:
 | 
			
		||||
            ok = 1;
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		return ok;
 | 
			
		||||
        return ok;
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	if (cert_error == X509_V_OK && ok == 2)
 | 
			
		||||
		policies_print(NULL, ctx);
 | 
			
		||||
	if (!v_verbose)
 | 
			
		||||
		ERR_clear_error();
 | 
			
		||||
	return(ok);
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    if (cert_error == X509_V_OK && ok == 2)
 | 
			
		||||
        policies_print(NULL, ctx);
 | 
			
		||||
    if (!v_verbose)
 | 
			
		||||
        ERR_clear_error();
 | 
			
		||||
    return (ok);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										139
									
								
								apps/version.c
									
									
									
									
									
								
							
							
						
						
									
										139
									
								
								apps/version.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -63,7 +63,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -133,85 +133,82 @@
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	version_main
 | 
			
		||||
#define PROG    version_main
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int i,ret=0;
 | 
			
		||||
	int cflags=0,version=0,date=0,options=0,platform=0,dir=0;
 | 
			
		||||
{
 | 
			
		||||
    int i, ret = 0;
 | 
			
		||||
    int cflags = 0, version = 0, date = 0, options = 0, platform = 0, dir = 0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        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 (strcmp(argv[i],"-v") == 0)
 | 
			
		||||
			version=1;	
 | 
			
		||||
		else if (strcmp(argv[i],"-b") == 0)
 | 
			
		||||
			date=1;
 | 
			
		||||
		else if (strcmp(argv[i],"-f") == 0)
 | 
			
		||||
			cflags=1;
 | 
			
		||||
		else if (strcmp(argv[i],"-o") == 0)
 | 
			
		||||
			options=1;
 | 
			
		||||
		else if (strcmp(argv[i],"-p") == 0)
 | 
			
		||||
			platform=1;
 | 
			
		||||
		else if (strcmp(argv[i],"-d") == 0)
 | 
			
		||||
			dir=1;
 | 
			
		||||
		else if (strcmp(argv[i],"-a") == 0)
 | 
			
		||||
			date=version=cflags=options=platform=dir=1;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"usage:version -[avbofpd]\n");
 | 
			
		||||
			ret=1;
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    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)
 | 
			
		||||
            date = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-f") == 0)
 | 
			
		||||
            cflags = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-o") == 0)
 | 
			
		||||
            options = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-p") == 0)
 | 
			
		||||
            platform = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-d") == 0)
 | 
			
		||||
            dir = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-a") == 0)
 | 
			
		||||
            date = version = cflags = options = platform = dir = 1;
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "usage:version -[avbofpd]\n");
 | 
			
		||||
            ret = 1;
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (version)
 | 
			
		||||
		{
 | 
			
		||||
		if (SSLeay() == SSLEAY_VERSION_NUMBER)
 | 
			
		||||
			{
 | 
			
		||||
			printf("%s\n",SSLeay_version(SSLEAY_VERSION));
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			printf("%s (Library: %s)\n",
 | 
			
		||||
				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) 
 | 
			
		||||
		{
 | 
			
		||||
		printf("options:  ");
 | 
			
		||||
		printf("%s ",BN_options());
 | 
			
		||||
    if (version) {
 | 
			
		||||
        if (SSLeay() == SSLEAY_VERSION_NUMBER) {
 | 
			
		||||
            printf("%s\n", SSLeay_version(SSLEAY_VERSION));
 | 
			
		||||
        } else {
 | 
			
		||||
            printf("%s (Library: %s)\n",
 | 
			
		||||
                   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) {
 | 
			
		||||
        printf("options:  ");
 | 
			
		||||
        printf("%s ", BN_options());
 | 
			
		||||
#ifndef OPENSSL_NO_MD2
 | 
			
		||||
		printf("%s ",MD2_options());
 | 
			
		||||
        printf("%s ", MD2_options());
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC4
 | 
			
		||||
		printf("%s ",RC4_options());
 | 
			
		||||
        printf("%s ", RC4_options());
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
		printf("%s ",DES_options());
 | 
			
		||||
        printf("%s ", DES_options());
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		printf("%s ",idea_options());
 | 
			
		||||
        printf("%s ", idea_options());
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
		printf("%s ",BF_options());
 | 
			
		||||
        printf("%s ", BF_options());
 | 
			
		||||
#endif
 | 
			
		||||
		printf("\n");
 | 
			
		||||
		}
 | 
			
		||||
	if (cflags)  printf("%s\n",SSLeay_version(SSLEAY_CFLAGS));
 | 
			
		||||
	if (dir)  printf("%s\n",SSLeay_version(SSLEAY_DIR));
 | 
			
		||||
end:
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
        printf("\n");
 | 
			
		||||
    }
 | 
			
		||||
    if (cflags)
 | 
			
		||||
        printf("%s\n", SSLeay_version(SSLEAY_CFLAGS));
 | 
			
		||||
    if (dir)
 | 
			
		||||
        printf("%s\n", SSLeay_version(SSLEAY_DIR));
 | 
			
		||||
 end:
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										172
									
								
								apps/vms_decc_init.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								apps/vms_decc_init.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,172 @@
 | 
			
		||||
#if defined( __VMS) && !defined( OPENSSL_NO_DECC_INIT) && \
 | 
			
		||||
 defined( __DECC) && !defined( __VAX) && (__CRTL_VER >= 70301000)
 | 
			
		||||
# define USE_DECC_INIT 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef USE_DECC_INIT
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * 2010-04-26 SMS.
 | 
			
		||||
 *
 | 
			
		||||
 *----------------------------------------------------------------------
 | 
			
		||||
 *
 | 
			
		||||
 *       decc_init()
 | 
			
		||||
 *
 | 
			
		||||
 *    On non-VAX systems, uses LIB$INITIALIZE to set a collection of C
 | 
			
		||||
 *    RTL features without using the DECC$* logical name method.
 | 
			
		||||
 *
 | 
			
		||||
 *----------------------------------------------------------------------
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# 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 {
 | 
			
		||||
    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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
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".
 | 
			
		||||
     */
 | 
			
		||||
    {"DECC$EFS_CHARSET", 1},
 | 
			
		||||
 | 
			
		||||
    /* List terminator. */
 | 
			
		||||
    {(char *)NULL, 0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* LIB$INITIALIZE initialization function. */
 | 
			
		||||
 | 
			
		||||
static void decc_init(void)
 | 
			
		||||
{
 | 
			
		||||
    char *openssl_debug_decc_init;
 | 
			
		||||
    int verbose = 0;
 | 
			
		||||
    int feat_index;
 | 
			
		||||
    int feat_value;
 | 
			
		||||
    int feat_value_max;
 | 
			
		||||
    int feat_value_min;
 | 
			
		||||
    int i;
 | 
			
		||||
    int sts;
 | 
			
		||||
 | 
			
		||||
    /* Get debug option. */
 | 
			
		||||
    openssl_debug_decc_init = getenv("OPENSSL_DEBUG_DECC_INIT");
 | 
			
		||||
    if (openssl_debug_decc_init != NULL) {
 | 
			
		||||
        verbose = strtol(openssl_debug_decc_init, NULL, 10);
 | 
			
		||||
        if (verbose <= 0) {
 | 
			
		||||
            verbose = 1;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Set the global flag to indicate that LIB$INITIALIZE worked. */
 | 
			
		||||
    decc_init_done = 1;
 | 
			
		||||
 | 
			
		||||
    /* Loop through all items in the decc_feat_array[]. */
 | 
			
		||||
 | 
			
		||||
    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) {
 | 
			
		||||
            /* Valid item.  Collect its properties. */
 | 
			
		||||
            feat_value = decc$feature_get_value(feat_index, 1);
 | 
			
		||||
            feat_value_min = decc$feature_get_value(feat_index, 2);
 | 
			
		||||
            feat_value_max = decc$feature_get_value(feat_index, 3);
 | 
			
		||||
 | 
			
		||||
            /* Check the validity of our desired value. */
 | 
			
		||||
            if ((decc_feat_array[i].value >= feat_value_min) &&
 | 
			
		||||
                (decc_feat_array[i].value <= feat_value_max)) {
 | 
			
		||||
                /* Valid value.  Set it if necessary. */
 | 
			
		||||
                if (feat_value != decc_feat_array[i].value) {
 | 
			
		||||
                    sts = decc$feature_set_value(feat_index,
 | 
			
		||||
                                                 1, decc_feat_array[i].value);
 | 
			
		||||
 | 
			
		||||
                    if (verbose > 1) {
 | 
			
		||||
                        fprintf(stderr, " %s = %d, sts = %d.\n",
 | 
			
		||||
                                decc_feat_array[i].name,
 | 
			
		||||
                                decc_feat_array[i].value, sts);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            } 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);
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            /* Invalid DECC feature name. */
 | 
			
		||||
            fprintf(stderr,
 | 
			
		||||
                    " UNKNOWN DECC$FEATURE: %s.\n", decc_feat_array[i].name);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (verbose > 0) {
 | 
			
		||||
        fprintf(stderr, " DECC_INIT complete.\n");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Get "decc_init()" into a valid, loaded LIB$INITIALIZE PSECT. */
 | 
			
		||||
 | 
			
		||||
# pragma nostandard
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Establish the LIB$INITIALIZE PSECTs, with proper alignment and other
 | 
			
		||||
 * attributes.  Note that "nopic" is significant only on VAX.
 | 
			
		||||
 */
 | 
			
		||||
# pragma extern_model save
 | 
			
		||||
 | 
			
		||||
# if __INITIAL_POINTER_SIZE == 64
 | 
			
		||||
#  define PSECT_ALIGN 3
 | 
			
		||||
# else
 | 
			
		||||
#  define PSECT_ALIGN 2
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# pragma extern_model strict_refdef "LIB$INITIALIZ" PSECT_ALIGN, nopic, nowrt
 | 
			
		||||
const int spare[8] = { 0 };
 | 
			
		||||
 | 
			
		||||
# pragma extern_model strict_refdef "LIB$INITIALIZE" PSECT_ALIGN, nopic, nowrt
 | 
			
		||||
void (*const x_decc_init) () = decc_init;
 | 
			
		||||
 | 
			
		||||
# pragma extern_model restore
 | 
			
		||||
 | 
			
		||||
/* Fake reference to ensure loading the LIB$INITIALIZE PSECT. */
 | 
			
		||||
 | 
			
		||||
# pragma extern_model save
 | 
			
		||||
 | 
			
		||||
int LIB$INITIALIZE(void);
 | 
			
		||||
 | 
			
		||||
# pragma extern_model strict_refdef
 | 
			
		||||
int dmy_lib$initialize = (int)LIB$INITIALIZE;
 | 
			
		||||
 | 
			
		||||
# pragma extern_model restore
 | 
			
		||||
 | 
			
		||||
# pragma standard
 | 
			
		||||
 | 
			
		||||
#else                           /* def USE_DECC_INIT */
 | 
			
		||||
 | 
			
		||||
/* Dummy code to avoid a %CC-W-EMPTYFILE complaint. */
 | 
			
		||||
int decc_init_dummy(void);
 | 
			
		||||
 | 
			
		||||
#endif                          /* def USE_DECC_INIT */
 | 
			
		||||
							
								
								
									
										136
									
								
								apps/winrand.c
									
									
									
									
									
								
							
							
						
						
									
										136
									
								
								apps/winrand.c
									
									
									
									
									
								
							@@ -7,7 +7,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -53,7 +53,8 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Usage: winrand [filename]
 | 
			
		||||
/*-
 | 
			
		||||
 * Usage: winrand [filename]
 | 
			
		||||
 *
 | 
			
		||||
 * Collects entropy from mouse movements and other events and writes
 | 
			
		||||
 * random data to filename or .rnd
 | 
			
		||||
@@ -67,82 +68,79 @@ LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 | 
			
		||||
const char *filename;
 | 
			
		||||
 | 
			
		||||
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
 | 
			
		||||
        PSTR cmdline, int iCmdShow)
 | 
			
		||||
	{
 | 
			
		||||
	static char appname[] = "OpenSSL";
 | 
			
		||||
	HWND hwnd;
 | 
			
		||||
	MSG msg;
 | 
			
		||||
	WNDCLASSEX wndclass;
 | 
			
		||||
        char buffer[200];
 | 
			
		||||
                   PSTR cmdline, int iCmdShow)
 | 
			
		||||
{
 | 
			
		||||
    static char appname[] = "OpenSSL";
 | 
			
		||||
    HWND hwnd;
 | 
			
		||||
    MSG msg;
 | 
			
		||||
    WNDCLASSEX wndclass;
 | 
			
		||||
    char buffer[200];
 | 
			
		||||
 | 
			
		||||
        if (cmdline[0] == '\0')
 | 
			
		||||
                filename = RAND_file_name(buffer, sizeof buffer);
 | 
			
		||||
        else
 | 
			
		||||
                filename = cmdline;
 | 
			
		||||
    if (cmdline[0] == '\0')
 | 
			
		||||
        filename = RAND_file_name(buffer, sizeof buffer);
 | 
			
		||||
    else
 | 
			
		||||
        filename = cmdline;
 | 
			
		||||
 | 
			
		||||
        RAND_load_file(filename, -1);
 | 
			
		||||
    RAND_load_file(filename, -1);
 | 
			
		||||
 | 
			
		||||
	wndclass.cbSize = sizeof(wndclass);
 | 
			
		||||
	wndclass.style = CS_HREDRAW | CS_VREDRAW;
 | 
			
		||||
	wndclass.lpfnWndProc = WndProc;
 | 
			
		||||
	wndclass.cbClsExtra = 0;
 | 
			
		||||
	wndclass.cbWndExtra = 0;
 | 
			
		||||
	wndclass.hInstance = hInstance;
 | 
			
		||||
	wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
 | 
			
		||||
	wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
 | 
			
		||||
	wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
 | 
			
		||||
	wndclass.lpszMenuName = NULL;
 | 
			
		||||
        wndclass.lpszClassName = appname;
 | 
			
		||||
	wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
 | 
			
		||||
	RegisterClassEx(&wndclass);
 | 
			
		||||
    wndclass.cbSize = sizeof(wndclass);
 | 
			
		||||
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
 | 
			
		||||
    wndclass.lpfnWndProc = WndProc;
 | 
			
		||||
    wndclass.cbClsExtra = 0;
 | 
			
		||||
    wndclass.cbWndExtra = 0;
 | 
			
		||||
    wndclass.hInstance = hInstance;
 | 
			
		||||
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
 | 
			
		||||
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
 | 
			
		||||
    wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
 | 
			
		||||
    wndclass.lpszMenuName = NULL;
 | 
			
		||||
    wndclass.lpszClassName = appname;
 | 
			
		||||
    wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
 | 
			
		||||
    RegisterClassEx(&wndclass);
 | 
			
		||||
 | 
			
		||||
        hwnd = CreateWindow(appname, OPENSSL_VERSION_TEXT,
 | 
			
		||||
		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
 | 
			
		||||
		CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
 | 
			
		||||
    hwnd = CreateWindow(appname, OPENSSL_VERSION_TEXT,
 | 
			
		||||
                        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
 | 
			
		||||
                        CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance,
 | 
			
		||||
                        NULL);
 | 
			
		||||
 | 
			
		||||
	ShowWindow(hwnd, iCmdShow);
 | 
			
		||||
	UpdateWindow(hwnd);
 | 
			
		||||
    ShowWindow(hwnd, iCmdShow);
 | 
			
		||||
    UpdateWindow(hwnd);
 | 
			
		||||
 | 
			
		||||
    while (GetMessage(&msg, NULL, 0, 0)) {
 | 
			
		||||
        TranslateMessage(&msg);
 | 
			
		||||
        DispatchMessage(&msg);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	while (GetMessage(&msg, NULL, 0, 0))
 | 
			
		||||
		{
 | 
			
		||||
		TranslateMessage(&msg);
 | 
			
		||||
		DispatchMessage(&msg);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	return msg.wParam;
 | 
			
		||||
	}
 | 
			
		||||
    return msg.wParam;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
 | 
			
		||||
	{
 | 
			
		||||
        HDC hdc;
 | 
			
		||||
	PAINTSTRUCT ps;
 | 
			
		||||
        RECT rect;
 | 
			
		||||
        static int seeded = 0;
 | 
			
		||||
{
 | 
			
		||||
    HDC hdc;
 | 
			
		||||
    PAINTSTRUCT ps;
 | 
			
		||||
    RECT rect;
 | 
			
		||||
    static int seeded = 0;
 | 
			
		||||
 | 
			
		||||
	switch (iMsg)
 | 
			
		||||
		{
 | 
			
		||||
	case WM_PAINT:
 | 
			
		||||
		hdc = BeginPaint(hwnd, &ps);
 | 
			
		||||
		GetClientRect(hwnd, &rect);
 | 
			
		||||
                DrawText(hdc, "Seeding the PRNG. Please move the mouse!", -1,
 | 
			
		||||
			&rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
 | 
			
		||||
		EndPaint(hwnd, &ps);
 | 
			
		||||
		return 0;
 | 
			
		||||
		
 | 
			
		||||
        case WM_DESTROY:
 | 
			
		||||
                PostQuitMessage(0);
 | 
			
		||||
                return 0;
 | 
			
		||||
                }
 | 
			
		||||
    switch (iMsg) {
 | 
			
		||||
    case WM_PAINT:
 | 
			
		||||
        hdc = BeginPaint(hwnd, &ps);
 | 
			
		||||
        GetClientRect(hwnd, &rect);
 | 
			
		||||
        DrawText(hdc, "Seeding the PRNG. Please move the mouse!", -1,
 | 
			
		||||
                 &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
 | 
			
		||||
        EndPaint(hwnd, &ps);
 | 
			
		||||
        return 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!",
 | 
			
		||||
				"OpenSSL", MB_OK | MB_ICONERROR);
 | 
			
		||||
                PostQuitMessage(0);
 | 
			
		||||
                }
 | 
			
		||||
    case WM_DESTROY:
 | 
			
		||||
        PostQuitMessage(0);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	return DefWindowProc(hwnd, iMsg, wParam, lParam);
 | 
			
		||||
	}
 | 
			
		||||
    if (RAND_event(iMsg, wParam, lParam) == 1 && seeded == 0) {
 | 
			
		||||
        seeded = 1;
 | 
			
		||||
        if (RAND_write_file(filename) <= 0)
 | 
			
		||||
            MessageBox(hwnd, "Couldn't write random file!",
 | 
			
		||||
                       "OpenSSL", MB_OK | MB_ICONERROR);
 | 
			
		||||
        PostQuitMessage(0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return DefWindowProc(hwnd, iMsg, wParam, lParam);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2160
									
								
								apps/x509.c
									
									
									
									
									
								
							
							
						
						
									
										2160
									
								
								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