Compare commits
	
		
			1482 Commits
		
	
	
		
			OpenSSL_0_
			...
			LEVITTE_af
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					828f94d852 | ||
| 
						 | 
					875a644a90 | ||
| 
						 | 
					ec37635c94 | ||
| 
						 | 
					fd836aeee0 | ||
| 
						 | 
					560f7abb7e | ||
| 
						 | 
					b6358c89a1 | ||
| 
						 | 
					5d735465d1 | ||
| 
						 | 
					9e051bac13 | ||
| 
						 | 
					30fbcaa213 | ||
| 
						 | 
					93825dddad | ||
| 
						 | 
					a8aa764d3c | ||
| 
						 | 
					e7716b7a19 | ||
| 
						 | 
					a4e3150f00 | ||
| 
						 | 
					edec614efd | ||
| 
						 | 
					2457c19df1 | ||
| 
						 | 
					5fa5eb71a4 | ||
| 
						 | 
					3f39976da3 | ||
| 
						 | 
					216ad9ef58 | ||
| 
						 | 
					bc50157010 | ||
| 
						 | 
					91180d45f9 | ||
| 
						 | 
					d9f40bbe55 | ||
| 
						 | 
					ec7c9ee8b8 | ||
| 
						 | 
					f82bb9cb9c | ||
| 
						 | 
					5a8922aed5 | ||
| 
						 | 
					f2c1812560 | ||
| 
						 | 
					4cfa4ae820 | ||
| 
						 | 
					a30af36c77 | ||
| 
						 | 
					5075521e75 | ||
| 
						 | 
					ee3a47a994 | ||
| 
						 | 
					f727266ae8 | ||
| 
						 | 
					8bb0c8522a | ||
| 
						 | 
					c6700d2746 | ||
| 
						 | 
					1b06804491 | ||
| 
						 | 
					dc90f64d56 | ||
| 
						 | 
					6c43032121 | ||
| 
						 | 
					37ead9be0b | ||
| 
						 | 
					1751034669 | ||
| 
						 | 
					d4575825f1 | ||
| 
						 | 
					d04b1b4656 | ||
| 
						 | 
					1247092776 | ||
| 
						 | 
					7e22a1df55 | ||
| 
						 | 
					bb5810d21d | ||
| 
						 | 
					61a88c31c0 | ||
| 
						 | 
					b86ed8d18f | ||
| 
						 | 
					e5886a2388 | ||
| 
						 | 
					8d1ebe0bd1 | ||
| 
						 | 
					1fb724449d | ||
| 
						 | 
					721a5e83f9 | ||
| 
						 | 
					6df617a59d | ||
| 
						 | 
					8c6336b0aa | ||
| 
						 | 
					87203dc99a | ||
| 
						 | 
					4de65cbc06 | ||
| 
						 | 
					27b2b78f90 | ||
| 
						 | 
					3a160f1dc6 | ||
| 
						 | 
					7f24b1c3e9 | ||
| 
						 | 
					a5e8bcfb7b | ||
| 
						 | 
					9d5c3c1939 | ||
| 
						 | 
					815d7057be | ||
| 
						 | 
					30cb9ec715 | ||
| 
						 | 
					af6dab9b00 | ||
| 
						 | 
					cdb42bcf0c | ||
| 
						 | 
					fc56b52924 | ||
| 
						 | 
					a32fc687de | ||
| 
						 | 
					c0017a5a65 | ||
| 
						 | 
					344e86645d | ||
| 
						 | 
					075521725d | ||
| 
						 | 
					5fdf06666c | ||
| 
						 | 
					f28e8bd300 | ||
| 
						 | 
					de02ec2767 | ||
| 
						 | 
					112341031b | ||
| 
						 | 
					7cf803230b | ||
| 
						 | 
					79b42e7654 | ||
| 
						 | 
					f0c5db92f7 | ||
| 
						 | 
					d420ac2c7d | ||
| 
						 | 
					b79aa47a0c | ||
| 
						 | 
					e88c577738 | ||
| 
						 | 
					a2b0de98af | ||
| 
						 | 
					4775944f81 | ||
| 
						 | 
					2abd5b7aa0 | ||
| 
						 | 
					380e145daf | ||
| 
						 | 
					a9f2330f43 | ||
| 
						 | 
					ce38bb1a8c | ||
| 
						 | 
					919f8bcd21 | ||
| 
						 | 
					2bfd2c74d2 | ||
| 
						 | 
					82b2f57e30 | ||
| 
						 | 
					2ae1ea3788 | ||
| 
						 | 
					34066d741a | ||
| 
						 | 
					b74cc0776b | ||
| 
						 | 
					e7e5fe4705 | ||
| 
						 | 
					998ae048e7 | ||
| 
						 | 
					e65c2b9872 | ||
| 
						 | 
					2fe9ab8e20 | ||
| 
						 | 
					1145e03870 | ||
| 
						 | 
					6781efb92f | ||
| 
						 | 
					0bf1c1d80d | ||
| 
						 | 
					6ed474ca66 | ||
| 
						 | 
					46cb8d3689 | ||
| 
						 | 
					23fc5ac646 | ||
| 
						 | 
					5734bebe05 | ||
| 
						 | 
					657a919598 | ||
| 
						 | 
					6859bb1a22 | ||
| 
						 | 
					3822740ce3 | ||
| 
						 | 
					0d78bc3356 | ||
| 
						 | 
					d87b79bf31 | ||
| 
						 | 
					70ef9c5a3d | ||
| 
						 | 
					b727907ae8 | ||
| 
						 | 
					444c3a8492 | ||
| 
						 | 
					0b352c58db | ||
| 
						 | 
					03ddbdd9b9 | ||
| 
						 | 
					5ebdb39084 | ||
| 
						 | 
					d45a098472 | ||
| 
						 | 
					6d5ffb591b | ||
| 
						 | 
					7ce9e425bc | ||
| 
						 | 
					4d8743f490 | ||
| 
						 | 
					4c8b4f9d03 | ||
| 
						 | 
					81ba5f6713 | ||
| 
						 | 
					6defae04f3 | ||
| 
						 | 
					e1064adfd3 | ||
| 
						 | 
					d7559f16cd | ||
| 
						 | 
					9e989810ba | ||
| 
						 | 
					ec2179cf81 | ||
| 
						 | 
					a8287a90ea | ||
| 
						 | 
					ad5f0ed509 | ||
| 
						 | 
					0a4c8baf5e | ||
| 
						 | 
					95de3d204f | ||
| 
						 | 
					31182ad39b | ||
| 
						 | 
					f35232e6f3 | ||
| 
						 | 
					fda5e38551 | ||
| 
						 | 
					ac9c6e10a4 | ||
| 
						 | 
					1a01733047 | ||
| 
						 | 
					d2cd46127c | ||
| 
						 | 
					9dde17e8b4 | ||
| 
						 | 
					37af03d311 | ||
| 
						 | 
					f7a397cc8d | ||
| 
						 | 
					cd2e8a6f2d | ||
| 
						 | 
					d18b993c43 | ||
| 
						 | 
					e6e81c5894 | ||
| 
						 | 
					f75abcefed | ||
| 
						 | 
					18f62d4b82 | ||
| 
						 | 
					5c0c22803e | ||
| 
						 | 
					0ef85c7f45 | ||
| 
						 | 
					078dd1a0f9 | ||
| 
						 | 
					2b96c95197 | ||
| 
						 | 
					c5f1c7b4d8 | ||
| 
						 | 
					d870740cd7 | ||
| 
						 | 
					d8ec0dcf45 | ||
| 
						 | 
					c465e7941e | ||
| 
						 | 
					933398f110 | ||
| 
						 | 
					cfd06a6223 | ||
| 
						 | 
					a9fd78f9da | ||
| 
						 | 
					5f747c7f4b | ||
| 
						 | 
					c4db1a8b5c | ||
| 
						 | 
					f7939fcd9a | ||
| 
						 | 
					d531c9014d | ||
| 
						 | 
					aca95e0b2f | ||
| 
						 | 
					bc3c578208 | ||
| 
						 | 
					06e4024d98 | ||
| 
						 | 
					8087d8f7ea | ||
| 
						 | 
					31166ec8f3 | ||
| 
						 | 
					2754597013 | ||
| 
						 | 
					2ce90b9b74 | ||
| 
						 | 
					4e952ae4fc | ||
| 
						 | 
					db59141467 | ||
| 
						 | 
					8a66d17899 | ||
| 
						 | 
					2eeaa0261e | ||
| 
						 | 
					8dc344ccbf | ||
| 
						 | 
					6bcd3f903a | ||
| 
						 | 
					40f935f5b4 | ||
| 
						 | 
					0991f07034 | ||
| 
						 | 
					2aaec9cced | ||
| 
						 | 
					9d473aa2e4 | ||
| 
						 | 
					6145b0b183 | ||
| 
						 | 
					2a85f77146 | ||
| 
						 | 
					66b82f5aad | ||
| 
						 | 
					12bdceac8a | ||
| 
						 | 
					aea293e3bc | ||
| 
						 | 
					8ad7e3ad2a | ||
| 
						 | 
					0b6956b474 | ||
| 
						 | 
					0bb6187e71 | ||
| 
						 | 
					c5a5546389 | ||
| 
						 | 
					77fe058c10 | ||
| 
						 | 
					8d9086dfa2 | ||
| 
						 | 
					0602abf5bd | ||
| 
						 | 
					caf044cb3e | ||
| 
						 | 
					a08ced78c8 | ||
| 
						 | 
					83eb412da8 | ||
| 
						 | 
					4d1c443123 | ||
| 
						 | 
					f44e184ec6 | ||
| 
						 | 
					377dcdba44 | ||
| 
						 | 
					8242354952 | ||
| 
						 | 
					c40b9bdefb | ||
| 
						 | 
					6895cca89d | ||
| 
						 | 
					f82ab534c6 | ||
| 
						 | 
					f6e8c19ed1 | ||
| 
						 | 
					cf89b40584 | ||
| 
						 | 
					c076599c18 | ||
| 
						 | 
					4d8148fa98 | ||
| 
						 | 
					aed29ce5ea | ||
| 
						 | 
					9ad82c123a | ||
| 
						 | 
					eeff6bb6b3 | ||
| 
						 | 
					d90e74c50c | ||
| 
						 | 
					2990244980 | ||
| 
						 | 
					c798868d96 | ||
| 
						 | 
					057a04398d | ||
| 
						 | 
					7f3ba9428f | ||
| 
						 | 
					3c02e24bb3 | ||
| 
						 | 
					1be02dd842 | ||
| 
						 | 
					3d7c4a5a6d | ||
| 
						 | 
					11171f3c74 | ||
| 
						 | 
					ba9f80c5d5 | ||
| 
						 | 
					e59659dc41 | ||
| 
						 | 
					253e893c2b | ||
| 
						 | 
					0ad2c4f85b | ||
| 
						 | 
					0e6c20da46 | ||
| 
						 | 
					f6b659cba4 | ||
| 
						 | 
					6bd27f8644 | ||
| 
						 | 
					dfe399e7d9 | ||
| 
						 | 
					7068c8b1a6 | ||
| 
						 | 
					82384690e2 | ||
| 
						 | 
					e6fa67fa93 | ||
| 
						 | 
					9ea72d3705 | ||
| 
						 | 
					a907751350 | ||
| 
						 | 
					560dfd2a02 | ||
| 
						 | 
					14f3d7c5cc | ||
| 
						 | 
					510dc1ecd0 | ||
| 
						 | 
					563c05e2dc | ||
| 
						 | 
					643ecd2ed6 | ||
| 
						 | 
					88401ed449 | ||
| 
						 | 
					3aa8d3a7f1 | ||
| 
						 | 
					5b6e7c8c65 | ||
| 
						 | 
					f96d1af449 | ||
| 
						 | 
					968766cad8 | ||
| 
						 | 
					652ae06bad | ||
| 
						 | 
					ddc38679ce | ||
| 
						 | 
					02e0559477 | ||
| 
						 | 
					ada0e717fa | ||
| 
						 | 
					2c789c82be | ||
| 
						 | 
					d143dce03c | ||
| 
						 | 
					f9d183c209 | ||
| 
						 | 
					182cd19dea | ||
| 
						 | 
					61f00386ab | ||
| 
						 | 
					2ae0352b0f | ||
| 
						 | 
					94805c84d1 | ||
| 
						 | 
					6f2f534b58 | ||
| 
						 | 
					da6c44fc97 | ||
| 
						 | 
					da0d33560f | ||
| 
						 | 
					9d19fbc4fc | ||
| 
						 | 
					aa5ae4841e | ||
| 
						 | 
					eb3d68c454 | ||
| 
						 | 
					c89f31def0 | ||
| 
						 | 
					ed5fae580e | ||
| 
						 | 
					d55141ed7a | ||
| 
						 | 
					a99ce1a574 | ||
| 
						 | 
					c687a3d5d5 | ||
| 
						 | 
					dfc3151925 | ||
| 
						 | 
					0fbffe7a71 | ||
| 
						 | 
					037f6e73f1 | ||
| 
						 | 
					cf82439de8 | ||
| 
						 | 
					37fcd48f86 | ||
| 
						 | 
					cf9a88cad7 | ||
| 
						 | 
					4f1cd8324c | ||
| 
						 | 
					ed7f1d0bc6 | ||
| 
						 | 
					f6b9cd7f82 | ||
| 
						 | 
					8fbb2af392 | ||
| 
						 | 
					c5aba56c5b | ||
| 
						 | 
					fd4ef69913 | ||
| 
						 | 
					834ac33a37 | ||
| 
						 | 
					4e9023f4d2 | ||
| 
						 | 
					d3a28e8b8d | ||
| 
						 | 
					0bd71d3b7e | ||
| 
						 | 
					d97322f0e6 | ||
| 
						 | 
					b52d512dfa | ||
| 
						 | 
					a3a2ff4cd9 | ||
| 
						 | 
					5a1fd87ec1 | ||
| 
						 | 
					8645c415cf | ||
| 
						 | 
					700d86ea18 | ||
| 
						 | 
					54bbde3c3f | ||
| 
						 | 
					c14b337570 | ||
| 
						 | 
					e666c4599f | ||
| 
						 | 
					98cec7fc7b | ||
| 
						 | 
					fadd2246a0 | ||
| 
						 | 
					c78b4f1d3d | ||
| 
						 | 
					33862b90bb | ||
| 
						 | 
					36bad5cdfd | ||
| 
						 | 
					54f6451670 | ||
| 
						 | 
					490967195a | ||
| 
						 | 
					606c8048a0 | ||
| 
						 | 
					e66d863cd0 | ||
| 
						 | 
					a069460015 | ||
| 
						 | 
					55b12f8641 | ||
| 
						 | 
					40e5b9abeb | ||
| 
						 | 
					dcfb57c736 | ||
| 
						 | 
					2ee67f1dad | ||
| 
						 | 
					4af3184662 | ||
| 
						 | 
					e31047744a | ||
| 
						 | 
					f6eba601b0 | ||
| 
						 | 
					f796dc5c06 | ||
| 
						 | 
					50078051bd | ||
| 
						 | 
					db01746978 | ||
| 
						 | 
					63b815583b | ||
| 
						 | 
					ca82ac1fee | ||
| 
						 | 
					aff0542844 | ||
| 
						 | 
					beab098d53 | ||
| 
						 | 
					02b95b7499 | ||
| 
						 | 
					c4d471552f | ||
| 
						 | 
					01fc834bc9 | ||
| 
						 | 
					f7f8d82aaa | ||
| 
						 | 
					4f17dfcd75 | ||
| 
						 | 
					83b4f49c0a | ||
| 
						 | 
					60790aff6f | ||
| 
						 | 
					e19d0ef068 | ||
| 
						 | 
					f5f7dffdd1 | ||
| 
						 | 
					edd55d08f5 | ||
| 
						 | 
					83743ad039 | ||
| 
						 | 
					163f5b236c | ||
| 
						 | 
					513c01a591 | ||
| 
						 | 
					d9a2a89a17 | ||
| 
						 | 
					31939f1544 | ||
| 
						 | 
					11ce33a71d | ||
| 
						 | 
					9acef3bbd7 | ||
| 
						 | 
					164bc7dae8 | ||
| 
						 | 
					f59c941950 | ||
| 
						 | 
					0239876511 | ||
| 
						 | 
					93c929e411 | ||
| 
						 | 
					c2dac35a02 | ||
| 
						 | 
					727ef76ebd | ||
| 
						 | 
					bca52f7d4e | ||
| 
						 | 
					48c36fdb2a | ||
| 
						 | 
					9b2042fac3 | ||
| 
						 | 
					816d785721 | ||
| 
						 | 
					742b139f54 | ||
| 
						 | 
					3b30121bd9 | ||
| 
						 | 
					9ee789e6c3 | ||
| 
						 | 
					b9d2d20086 | ||
| 
						 | 
					b9d7ca9748 | ||
| 
						 | 
					5b194dfbd5 | ||
| 
						 | 
					7f6af7d9db | ||
| 
						 | 
					42b2b6a2d5 | ||
| 
						 | 
					d1465bac90 | ||
| 
						 | 
					3bbb0212f3 | ||
| 
						 | 
					a5db6fa576 | ||
| 
						 | 
					9236b5b013 | ||
| 
						 | 
					535fba4907 | ||
| 
						 | 
					7e4140f73f | ||
| 
						 | 
					1ae0a83bdd | ||
| 
						 | 
					7ae46c6761 | ||
| 
						 | 
					d584fd6b66 | ||
| 
						 | 
					54dbdd9837 | ||
| 
						 | 
					9d6c32d6d1 | ||
| 
						 | 
					26851b6b42 | ||
| 
						 | 
					ea5240a5ed | ||
| 
						 | 
					eec7968f18 | ||
| 
						 | 
					1cc087fe4f | ||
| 
						 | 
					040c687ce4 | ||
| 
						 | 
					cd1226bc6a | ||
| 
						 | 
					7a04fdd87f | ||
| 
						 | 
					138f970e6e | ||
| 
						 | 
					1a0c1f9052 | ||
| 
						 | 
					1774e22d6f | ||
| 
						 | 
					26abc8f01a | ||
| 
						 | 
					5924c21608 | ||
| 
						 | 
					c93fbfaebc | ||
| 
						 | 
					0b1c00abeb | ||
| 
						 | 
					721688c2f8 | ||
| 
						 | 
					a109220107 | ||
| 
						 | 
					4a4a04622e | ||
| 
						 | 
					d6fd88fffd | ||
| 
						 | 
					e96133e4cf | ||
| 
						 | 
					f65a75786b | ||
| 
						 | 
					0b55368306 | ||
| 
						 | 
					43eb3b0130 | ||
| 
						 | 
					0a861ab7f3 | ||
| 
						 | 
					7b36590b17 | ||
| 
						 | 
					a8b728445c | ||
| 
						 | 
					af0f0f3e8f | ||
| 
						 | 
					8d570498a2 | ||
| 
						 | 
					4c771796d5 | ||
| 
						 | 
					d6df2b281f | ||
| 
						 | 
					6fcf735497 | ||
| 
						 | 
					b5f96e8818 | ||
| 
						 | 
					3ae70939ba | ||
| 
						 | 
					c433d72593 | ||
| 
						 | 
					68b42986cb | ||
| 
						 | 
					57544ee224 | ||
| 
						 | 
					83b23ed967 | ||
| 
						 | 
					4342c5c1a0 | ||
| 
						 | 
					16b1b03543 | ||
| 
						 | 
					e6526fbf4d | ||
| 
						 | 
					8152d88799 | ||
| 
						 | 
					4ce4884a5b | ||
| 
						 | 
					db598fbce2 | ||
| 
						 | 
					8382ec5d37 | ||
| 
						 | 
					0998cfaadd | ||
| 
						 | 
					c4448f60d6 | ||
| 
						 | 
					63b6fe2bf6 | ||
| 
						 | 
					f85b68cd49 | ||
| 
						 | 
					5679bcce07 | ||
| 
						 | 
					24692fc5d7 | ||
| 
						 | 
					4390d66179 | ||
| 
						 | 
					d678cc07ed | ||
| 
						 | 
					6dd6da6005 | ||
| 
						 | 
					03eeb07152 | ||
| 
						 | 
					1a15c89988 | ||
| 
						 | 
					d0a4bd00b6 | ||
| 
						 | 
					423b1a840c | ||
| 
						 | 
					a47789e849 | ||
| 
						 | 
					e5b0508a14 | ||
| 
						 | 
					c4d00669a0 | ||
| 
						 | 
					d6cab100fa | ||
| 
						 | 
					81bd0446a9 | ||
| 
						 | 
					520b76ffd9 | ||
| 
						 | 
					1c2d141238 | ||
| 
						 | 
					32e75dd3f0 | ||
| 
						 | 
					abfc6a3a9b | ||
| 
						 | 
					5cc5ec1bba | ||
| 
						 | 
					f80153e20b | ||
| 
						 | 
					33b34a9d8f | ||
| 
						 | 
					9b94f215b1 | ||
| 
						 | 
					8b5bcef798 | ||
| 
						 | 
					ea17e1f00f | ||
| 
						 | 
					543105ac17 | ||
| 
						 | 
					3789284807 | ||
| 
						 | 
					be9bec9bc7 | ||
| 
						 | 
					9c35452842 | ||
| 
						 | 
					69104cdf34 | ||
| 
						 | 
					dfefdb41f7 | ||
| 
						 | 
					cd6ab56da0 | ||
| 
						 | 
					c988c9b839 | ||
| 
						 | 
					bff8e1dddb | ||
| 
						 | 
					641e6ef2cb | ||
| 
						 | 
					9e9e8cb6a8 | ||
| 
						 | 
					f118514501 | ||
| 
						 | 
					39c4b7092c | ||
| 
						 | 
					c7e7fc3ee4 | ||
| 
						 | 
					786b0075d5 | ||
| 
						 | 
					fb10590910 | ||
| 
						 | 
					abf21308d2 | ||
| 
						 | 
					8c84b677e2 | ||
| 
						 | 
					d5ef144222 | ||
| 
						 | 
					741dae576f | ||
| 
						 | 
					59ade20500 | ||
| 
						 | 
					c11b9af75e | ||
| 
						 | 
					08a54f6e6a | ||
| 
						 | 
					8305477157 | ||
| 
						 | 
					e8cc7de4f4 | ||
| 
						 | 
					3b6aa36c77 | ||
| 
						 | 
					03829b2b47 | ||
| 
						 | 
					87c9c659de | ||
| 
						 | 
					751ff1d376 | ||
| 
						 | 
					d3ae5b1c8a | ||
| 
						 | 
					0f3879455b | ||
| 
						 | 
					0c7d61ee0e | ||
| 
						 | 
					78951e7711 | ||
| 
						 | 
					9ba4cc007b | ||
| 
						 | 
					7b5a6c7a62 | ||
| 
						 | 
					44deca977d | ||
| 
						 | 
					536b73e78e | ||
| 
						 | 
					940767b03f | ||
| 
						 | 
					d4a47a5778 | ||
| 
						 | 
					b24668626e | ||
| 
						 | 
					ea3675b5b6 | ||
| 
						 | 
					c554155b58 | ||
| 
						 | 
					a1d12daed2 | ||
| 
						 | 
					6f528cac5a | ||
| 
						 | 
					10a66ad389 | ||
| 
						 | 
					e986704d24 | ||
| 
						 | 
					ce06265a37 | ||
| 
						 | 
					439909a068 | ||
| 
						 | 
					d177e6180d | ||
| 
						 | 
					48f1fa7482 | ||
| 
						 | 
					aa9d896b0d | ||
| 
						 | 
					42a559163d | ||
| 
						 | 
					3285eb336c | ||
| 
						 | 
					02da5bcd83 | ||
| 
						 | 
					9ed1fa4813 | ||
| 
						 | 
					500df82a96 | ||
| 
						 | 
					e8e0e3716a | ||
| 
						 | 
					bc441b739b | ||
| 
						 | 
					e6539fe22d | ||
| 
						 | 
					ba5df66a8b | ||
| 
						 | 
					12d4e7b8c8 | ||
| 
						 | 
					bba2cb3ada | ||
| 
						 | 
					52c4c51f02 | ||
| 
						 | 
					767712fa62 | ||
| 
						 | 
					90e8a3102b | ||
| 
						 | 
					879650b866 | ||
| 
						 | 
					176f31ddec | ||
| 
						 | 
					fe14ee96db | ||
| 
						 | 
					57376542a0 | ||
| 
						 | 
					b8dc9693a7 | ||
| 
						 | 
					6ac26a5ce5 | ||
| 
						 | 
					155bd1137e | ||
| 
						 | 
					f0dc08e656 | ||
| 
						 | 
					e9ec63961b | ||
| 
						 | 
					0185803cc2 | ||
| 
						 | 
					5c9a9c9c33 | ||
| 
						 | 
					63ff3e83fc | ||
| 
						 | 
					b4f43344d5 | ||
| 
						 | 
					c8c5cec1f9 | ||
| 
						 | 
					66ecdf3bfb | ||
| 
						 | 
					7841edc9c1 | ||
| 
						 | 
					132eaa59da | ||
| 
						 | 
					5562cfaca4 | ||
| 
						 | 
					c8252b71b5 | ||
| 
						 | 
					94949a50aa | ||
| 
						 | 
					0214893e6a | ||
| 
						 | 
					5be4a42e99 | ||
| 
						 | 
					f2aa055ec6 | ||
| 
						 | 
					62e3163b1b | ||
| 
						 | 
					8214e74f76 | ||
| 
						 | 
					542a1b1a2e | ||
| 
						 | 
					5672e3a321 | ||
| 
						 | 
					fbbfd86b67 | ||
| 
						 | 
					d8cbc93585 | ||
| 
						 | 
					5b0b0e98ce | ||
| 
						 | 
					d5234c7b3a | ||
| 
						 | 
					77e270d10e | ||
| 
						 | 
					c893bffae7 | ||
| 
						 | 
					988e8458ad | ||
| 
						 | 
					758f942b88 | ||
| 
						 | 
					26e9724458 | ||
| 
						 | 
					4879ec7bf3 | ||
| 
						 | 
					b653327d47 | ||
| 
						 | 
					4cadedef57 | ||
| 
						 | 
					27068df7e0 | ||
| 
						 | 
					b12753dffc | ||
| 
						 | 
					79221bc265 | ||
| 
						 | 
					ffa49dc3d9 | ||
| 
						 | 
					b7bbac72c4 | ||
| 
						 | 
					c1269c81fd | ||
| 
						 | 
					794a386af3 | ||
| 
						 | 
					e270cf9c5e | ||
| 
						 | 
					7e38616d1f | ||
| 
						 | 
					85d686e723 | ||
| 
						 | 
					2d3de726c5 | ||
| 
						 | 
					4989f0599f | ||
| 
						 | 
					e4b52ac353 | ||
| 
						 | 
					abd22c9c46 | ||
| 
						 | 
					ba729265a8 | ||
| 
						 | 
					9ec1d35f29 | ||
| 
						 | 
					cf56663fb7 | ||
| 
						 | 
					ea513641d0 | ||
| 
						 | 
					8537943e8b | ||
| 
						 | 
					a8f5b2ed50 | ||
| 
						 | 
					33075f229e | ||
| 
						 | 
					28f573a28d | ||
| 
						 | 
					e2c9c91b5b | ||
| 
						 | 
					d42d2d1ab6 | ||
| 
						 | 
					65b254e8c0 | ||
| 
						 | 
					82871eaa17 | ||
| 
						 | 
					24893ca999 | ||
| 
						 | 
					27a9bf17c7 | ||
| 
						 | 
					37c660ff9b | ||
| 
						 | 
					772ec4135c | ||
| 
						 | 
					0e9035ac98 | ||
| 
						 | 
					4e5d3a7f98 | ||
| 
						 | 
					379e568950 | ||
| 
						 | 
					c09a297892 | ||
| 
						 | 
					2619676256 | ||
| 
						 | 
					33cc07f79a | ||
| 
						 | 
					c029841e36 | ||
| 
						 | 
					bfa3555081 | ||
| 
						 | 
					5d780babe3 | ||
| 
						 | 
					5cd48abf9f | ||
| 
						 | 
					db5006df04 | ||
| 
						 | 
					3d6a84c42a | ||
| 
						 | 
					5fe11c7533 | ||
| 
						 | 
					a1d57849b3 | ||
| 
						 | 
					0b13e9f055 | ||
| 
						 | 
					96f7065f63 | ||
| 
						 | 
					f3c22ef10d | ||
| 
						 | 
					a85bef1899 | ||
| 
						 | 
					bb3e67f315 | ||
| 
						 | 
					c0a93e31ab | ||
| 
						 | 
					2e60ea7634 | ||
| 
						 | 
					4e78074b39 | ||
| 
						 | 
					b637670f03 | ||
| 
						 | 
					bd1217a176 | ||
| 
						 | 
					da45180de4 | ||
| 
						 | 
					82516e3baf | ||
| 
						 | 
					c1862f9136 | ||
| 
						 | 
					9048c7245b | ||
| 
						 | 
					02bf9a151a | ||
| 
						 | 
					d3b5cb5343 | ||
| 
						 | 
					97e6bf6b22 | ||
| 
						 | 
					04da4558dd | ||
| 
						 | 
					0c3426da86 | ||
| 
						 | 
					9b3f03d5a2 | ||
| 
						 | 
					9abff96b2f | ||
| 
						 | 
					722d17cbac | ||
| 
						 | 
					59b846c515 | ||
| 
						 | 
					42bf2a5cdc | ||
| 
						 | 
					80bcbaa02f | ||
| 
						 | 
					7c4e24af38 | ||
| 
						 | 
					726c223143 | ||
| 
						 | 
					59ae8c9419 | ||
| 
						 | 
					0bdd2da5d2 | ||
| 
						 | 
					2f09524501 | ||
| 
						 | 
					06492aef01 | ||
| 
						 | 
					c00cee00fd | ||
| 
						 | 
					8228f302dd | ||
| 
						 | 
					018c56fdca | ||
| 
						 | 
					d745af4b0c | ||
| 
						 | 
					44ea41cfff | ||
| 
						 | 
					acad5755a2 | ||
| 
						 | 
					28b958f732 | ||
| 
						 | 
					4e59cd3bb6 | ||
| 
						 | 
					a74333f905 | ||
| 
						 | 
					365e14622a | ||
| 
						 | 
					8ec16ce711 | ||
| 
						 | 
					0e4aa0d2d2 | ||
| 
						 | 
					08cb96bba2 | ||
| 
						 | 
					cdc5b4a41e | ||
| 
						 | 
					52e5e5c2ba | ||
| 
						 | 
					c653b56937 | ||
| 
						 | 
					04aff67de4 | ||
| 
						 | 
					1a6356b2ca | ||
| 
						 | 
					b05645902a | ||
| 
						 | 
					54d4f8c320 | ||
| 
						 | 
					c76153f31d | ||
| 
						 | 
					8cbb91c857 | ||
| 
						 | 
					aaae0aa48b | ||
| 
						 | 
					0535d3b25f | ||
| 
						 | 
					62be003150 | ||
| 
						 | 
					364c7cd621 | ||
| 
						 | 
					9d5390a049 | ||
| 
						 | 
					bda2fa364d | ||
| 
						 | 
					caa7b2ad4f | ||
| 
						 | 
					c14b4d6b38 | ||
| 
						 | 
					0382c95e4d | ||
| 
						 | 
					fda20f08d0 | ||
| 
						 | 
					afd41c9fc7 | ||
| 
						 | 
					2964ba8c6a | ||
| 
						 | 
					c0cc5c3059 | ||
| 
						 | 
					e68cb95d84 | ||
| 
						 | 
					448666239c | ||
| 
						 | 
					c0ac323360 | ||
| 
						 | 
					a0cd3ca62b | ||
| 
						 | 
					4a9476dd8d | ||
| 
						 | 
					8d2511688d | ||
| 
						 | 
					969511d2cb | ||
| 
						 | 
					989f48d8c1 | ||
| 
						 | 
					f8ea5cb579 | ||
| 
						 | 
					360e506710 | ||
| 
						 | 
					09ad2458b8 | ||
| 
						 | 
					ad200a864e | ||
| 
						 | 
					9d1b5614f9 | ||
| 
						 | 
					416b19c6fc | ||
| 
						 | 
					5b7249f302 | ||
| 
						 | 
					699543e4a2 | ||
| 
						 | 
					4309c4ad46 | ||
| 
						 | 
					4ebb5293fc | ||
| 
						 | 
					2814c62915 | ||
| 
						 | 
					876e96fdbf | ||
| 
						 | 
					f68843e3d7 | ||
| 
						 | 
					19a97a1df0 | ||
| 
						 | 
					72997517b0 | ||
| 
						 | 
					2a9fca82d2 | ||
| 
						 | 
					55b1516770 | ||
| 
						 | 
					3cc9a89dda | ||
| 
						 | 
					46a0d4fbcb | ||
| 
						 | 
					04945fda66 | ||
| 
						 | 
					97e2e71ef9 | ||
| 
						 | 
					c8a647846c | ||
| 
						 | 
					90ce14cd84 | ||
| 
						 | 
					28e276f139 | ||
| 
						 | 
					f22e1e4dd2 | ||
| 
						 | 
					e0d769caa2 | ||
| 
						 | 
					4a37c48789 | ||
| 
						 | 
					ad492c3601 | ||
| 
						 | 
					0c055b201e | ||
| 
						 | 
					7eed0fc041 | ||
| 
						 | 
					7a1c6aa2a3 | ||
| 
						 | 
					948dcdb81b | ||
| 
						 | 
					08101d72ce | ||
| 
						 | 
					75c4028585 | ||
| 
						 | 
					85f258d1c2 | ||
| 
						 | 
					49be7042dc | ||
| 
						 | 
					44fcd3ef3e | ||
| 
						 | 
					21cde7a41c | ||
| 
						 | 
					8598289936 | ||
| 
						 | 
					35dde7480f | ||
| 
						 | 
					5e42f9ab46 | ||
| 
						 | 
					7acf00a633 | ||
| 
						 | 
					69339d254b | ||
| 
						 | 
					ec517d25e8 | ||
| 
						 | 
					ce9b1b0573 | ||
| 
						 | 
					0a2407a851 | ||
| 
						 | 
					76a03d568e | ||
| 
						 | 
					7c03f26393 | ||
| 
						 | 
					9ff9e406ea | ||
| 
						 | 
					b5beb13abb | ||
| 
						 | 
					ceb12d3074 | ||
| 
						 | 
					59c0dd56ab | ||
| 
						 | 
					dcf19c173c | ||
| 
						 | 
					e235000169 | ||
| 
						 | 
					821951b851 | ||
| 
						 | 
					35ba1f17dc | ||
| 
						 | 
					ea8e0cc7c2 | ||
| 
						 | 
					cb661c56b0 | ||
| 
						 | 
					e904bd0ddc | ||
| 
						 | 
					e9883d285d | ||
| 
						 | 
					8d6ad9e39d | ||
| 
						 | 
					aa18245f7e | ||
| 
						 | 
					316bfb77b5 | ||
| 
						 | 
					9b58214e4a | ||
| 
						 | 
					3c801fa460 | ||
| 
						 | 
					1c9202004b | ||
| 
						 | 
					1004c99c29 | ||
| 
						 | 
					c9ecb1edd8 | ||
| 
						 | 
					8baf5fdca0 | ||
| 
						 | 
					aafafa314d | ||
| 
						 | 
					49e42a1f60 | ||
| 
						 | 
					9cd16b1dea | ||
| 
						 | 
					12cd28258d | ||
| 
						 | 
					9564997222 | ||
| 
						 | 
					f968059c67 | ||
| 
						 | 
					0b900a5e93 | ||
| 
						 | 
					09867a47a4 | ||
| 
						 | 
					9d5c42b61b | ||
| 
						 | 
					8e7a8b68d2 | ||
| 
						 | 
					4d625031a5 | ||
| 
						 | 
					26a60b2eb0 | ||
| 
						 | 
					07d09fdb66 | ||
| 
						 | 
					4553ed276b | ||
| 
						 | 
					62966f3829 | ||
| 
						 | 
					c445142505 | ||
| 
						 | 
					f70ddce761 | ||
| 
						 | 
					e29246cb17 | ||
| 
						 | 
					146e6776f5 | ||
| 
						 | 
					a45051fbfc | ||
| 
						 | 
					ec9f67f610 | ||
| 
						 | 
					30c08f2e3d | ||
| 
						 | 
					9f100cf344 | ||
| 
						 | 
					a5a01e9051 | ||
| 
						 | 
					6be4688bdc | ||
| 
						 | 
					717c5cdcc7 | ||
| 
						 | 
					0654bba39f | ||
| 
						 | 
					4d77d5b316 | ||
| 
						 | 
					2f98abbcb6 | ||
| 
						 | 
					270fa8aeda | ||
| 
						 | 
					4329db3726 | ||
| 
						 | 
					6f7ac8e1b0 | ||
| 
						 | 
					a1457874c6 | ||
| 
						 | 
					18be6c4116 | ||
| 
						 | 
					dad1535f7a | ||
| 
						 | 
					f60e6604b8 | ||
| 
						 | 
					0d3f2ccb62 | ||
| 
						 | 
					14676ffcd6 | ||
| 
						 | 
					e5a08ce44d | ||
| 
						 | 
					b9b6e14b4a | ||
| 
						 | 
					442d42300b | ||
| 
						 | 
					75e1c74724 | ||
| 
						 | 
					5db2b5e573 | ||
| 
						 | 
					005ef84c5d | ||
| 
						 | 
					f92570f00a | ||
| 
						 | 
					9314e366c8 | ||
| 
						 | 
					b22c7a1cfb | ||
| 
						 | 
					99efc0f50f | ||
| 
						 | 
					d979d09ccc | ||
| 
						 | 
					c17810b087 | ||
| 
						 | 
					e0b2073fd4 | ||
| 
						 | 
					123e5dfc3a | ||
| 
						 | 
					0edad88a31 | ||
| 
						 | 
					4ccfe5f49b | ||
| 
						 | 
					e189872486 | ||
| 
						 | 
					fdaea9ed2e | ||
| 
						 | 
					5daec7ea0e | ||
| 
						 | 
					e9224c7177 | ||
| 
						 | 
					e90e719739 | ||
| 
						 | 
					7ba666fa0e | ||
| 
						 | 
					86a62cf15c | ||
| 
						 | 
					b11405723d | ||
| 
						 | 
					4c3a2b4f8a | ||
| 
						 | 
					bbf8198feb | ||
| 
						 | 
					3dda0dd2a2 | ||
| 
						 | 
					fa63a98ad8 | ||
| 
						 | 
					1fc73fef48 | ||
| 
						 | 
					90543bd07a | ||
| 
						 | 
					43ecece595 | ||
| 
						 | 
					4ba8cabf62 | ||
| 
						 | 
					f68bb3c51f | ||
| 
						 | 
					6d4ac67ac1 | ||
| 
						 | 
					b84d5b72f1 | ||
| 
						 | 
					8cbccedf7c | ||
| 
						 | 
					1c24347062 | ||
| 
						 | 
					9ef888130d | ||
| 
						 | 
					4387f47832 | ||
| 
						 | 
					38d6e4bb50 | ||
| 
						 | 
					ced621e3c2 | ||
| 
						 | 
					85940ea8ea | ||
| 
						 | 
					439ae4d398 | ||
| 
						 | 
					4fbe40c54f | ||
| 
						 | 
					578ca7e4cd | ||
| 
						 | 
					7e8c30b589 | ||
| 
						 | 
					2b32b28191 | ||
| 
						 | 
					532215f2db | ||
| 
						 | 
					5319be4438 | ||
| 
						 | 
					f7a3e73ef6 | ||
| 
						 | 
					ff3345cb72 | ||
| 
						 | 
					716b2079dc | ||
| 
						 | 
					e7b6228fd3 | ||
| 
						 | 
					2053c43de2 | ||
| 
						 | 
					1c3e4a3660 | ||
| 
						 | 
					4707991520 | ||
| 
						 | 
					7a1f92fdc3 | ||
| 
						 | 
					e7a285694e | ||
| 
						 | 
					6ab285bf4c | ||
| 
						 | 
					1d3159bcca | ||
| 
						 | 
					f60ceb54eb | ||
| 
						 | 
					0f995b2f40 | ||
| 
						 | 
					848f735ae4 | ||
| 
						 | 
					a678430602 | ||
| 
						 | 
					e9b553dac1 | ||
| 
						 | 
					db3758923b | ||
| 
						 | 
					5e4a75e79f | ||
| 
						 | 
					43d601641f | ||
| 
						 | 
					55f78baf32 | ||
| 
						 | 
					6c359479d7 | ||
| 
						 | 
					4579924b7e | ||
| 
						 | 
					2047bda6fb | ||
| 
						 | 
					406c6f6962 | ||
| 
						 | 
					df29cc8f77 | ||
| 
						 | 
					ec7164133d | ||
| 
						 | 
					ba8ad07490 | ||
| 
						 | 
					17582ccf21 | ||
| 
						 | 
					31be2daa06 | ||
| 
						 | 
					de868e0b94 | ||
| 
						 | 
					15994b034a | ||
| 
						 | 
					922fa76e26 | ||
| 
						 | 
					19aa370573 | ||
| 
						 | 
					d020e701bb | ||
| 
						 | 
					364ff369d1 | ||
| 
						 | 
					8a09b3866a | ||
| 
						 | 
					137445140b | ||
| 
						 | 
					6a8afe2201 | ||
| 
						 | 
					1e3a9b650f | ||
| 
						 | 
					229dc0ee31 | ||
| 
						 | 
					fcc764639d | ||
| 
						 | 
					821385ad00 | ||
| 
						 | 
					25ff76d565 | ||
| 
						 | 
					9801fb61d0 | ||
| 
						 | 
					20199ca809 | ||
| 
						 | 
					711f1a3c26 | ||
| 
						 | 
					a1d85309ee | ||
| 
						 | 
					450cee5c3a | ||
| 
						 | 
					a2dbcf3644 | ||
| 
						 | 
					4663355496 | ||
| 
						 | 
					9dc610495c | ||
| 
						 | 
					055076cd4f | ||
| 
						 | 
					527497a722 | ||
| 
						 | 
					32d21c1ef6 | ||
| 
						 | 
					629b58b7fb | ||
| 
						 | 
					7fa2a81d34 | ||
| 
						 | 
					7f66ab4783 | ||
| 
						 | 
					95189389b0 | ||
| 
						 | 
					b4b82ab465 | ||
| 
						 | 
					89618e7a0d | ||
| 
						 | 
					b87e2576b5 | ||
| 
						 | 
					0bf23d9b20 | ||
| 
						 | 
					813f256783 | ||
| 
						 | 
					bfa96bc20e | ||
| 
						 | 
					6f17f16fd5 | ||
| 
						 | 
					84034f7aec | ||
| 
						 | 
					acce40c585 | ||
| 
						 | 
					6dc78bf7e8 | ||
| 
						 | 
					ce4f169ff9 | ||
| 
						 | 
					c566205319 | ||
| 
						 | 
					eaf6c61c9f | ||
| 
						 | 
					4c53d11d7f | ||
| 
						 | 
					1d647444e3 | ||
| 
						 | 
					c1eeb6078f | ||
| 
						 | 
					953db08416 | ||
| 
						 | 
					0a5942093e | ||
| 
						 | 
					d78254aa28 | ||
| 
						 | 
					af67804bef | ||
| 
						 | 
					35a6db8640 | ||
| 
						 | 
					56dc24d483 | ||
| 
						 | 
					84d828ab70 | ||
| 
						 | 
					cfae3d94e9 | ||
| 
						 | 
					b9c23cca01 | ||
| 
						 | 
					c863201780 | ||
| 
						 | 
					cb21d001c9 | ||
| 
						 | 
					c7faede37b | ||
| 
						 | 
					d4e573f305 | ||
| 
						 | 
					e20afbb340 | ||
| 
						 | 
					2b2ab52354 | ||
| 
						 | 
					8d6e60486f | ||
| 
						 | 
					1f30946481 | ||
| 
						 | 
					b1697f189b | ||
| 
						 | 
					17a202add7 | ||
| 
						 | 
					3bd16a8902 | ||
| 
						 | 
					555d75252a | ||
| 
						 | 
					eaad02a747 | ||
| 
						 | 
					97101fafd5 | ||
| 
						 | 
					403f1bdc70 | ||
| 
						 | 
					d574d83993 | ||
| 
						 | 
					83411793b6 | ||
| 
						 | 
					65caee44ff | ||
| 
						 | 
					738554331b | ||
| 
						 | 
					3f083ef0eb | ||
| 
						 | 
					17ed6c06a7 | ||
| 
						 | 
					c112323dd5 | ||
| 
						 | 
					0709385d3c | ||
| 
						 | 
					54a656ef08 | ||
| 
						 | 
					8f797f14b8 | ||
| 
						 | 
					c0d64de660 | ||
| 
						 | 
					c1ce8cf3b8 | ||
| 
						 | 
					2d780dfd81 | ||
| 
						 | 
					b6fee5c2fb | ||
| 
						 | 
					10fa047622 | ||
| 
						 | 
					04f0a6ba39 | ||
| 
						 | 
					eb43641dd3 | ||
| 
						 | 
					d479dc1d02 | ||
| 
						 | 
					7fb8d254fe | ||
| 
						 | 
					c99935e32c | ||
| 
						 | 
					2232e262bf | ||
| 
						 | 
					137e7e3aa1 | ||
| 
						 | 
					ba36b61d3d | ||
| 
						 | 
					ccb13ded84 | ||
| 
						 | 
					9ea1b87862 | ||
| 
						 | 
					688cf84d1f | ||
| 
						 | 
					69ce48c307 | ||
| 
						 | 
					06b7c8d5ba | ||
| 
						 | 
					6722b62b36 | ||
| 
						 | 
					7d80b27949 | ||
| 
						 | 
					d742bd882e | ||
| 
						 | 
					97a06ad9ef | ||
| 
						 | 
					756b9a0046 | ||
| 
						 | 
					96c930dd2f | ||
| 
						 | 
					c81a15099a | ||
| 
						 | 
					a8c125550c | ||
| 
						 | 
					3782350c14 | ||
| 
						 | 
					d6257073aa | ||
| 
						 | 
					ddff68bee7 | ||
| 
						 | 
					491659c436 | ||
| 
						 | 
					8d6fc30bc7 | ||
| 
						 | 
					56824b9658 | ||
| 
						 | 
					892e9625d3 | ||
| 
						 | 
					e2916b2540 | ||
| 
						 | 
					1810d2088e | ||
| 
						 | 
					d618f703ec | ||
| 
						 | 
					896e4fef30 | ||
| 
						 | 
					38c7271a39 | ||
| 
						 | 
					5e3247d8bc | ||
| 
						 | 
					b53e44e572 | ||
| 
						 | 
					e5f4d8279d | ||
| 
						 | 
					86e8b56ac4 | ||
| 
						 | 
					bff1567623 | ||
| 
						 | 
					db199abd9e | ||
| 
						 | 
					b6d0defb98 | ||
| 
						 | 
					ad22b914d6 | ||
| 
						 | 
					f216fae545 | ||
| 
						 | 
					242823c9bc | ||
| 
						 | 
					40efa67248 | ||
| 
						 | 
					769fedc3ad | ||
| 
						 | 
					9c3db400dc | ||
| 
						 | 
					d9ec9d990f | ||
| 
						 | 
					b5148cf1f7 | ||
| 
						 | 
					90a617e050 | ||
| 
						 | 
					259cdf2af9 | ||
| 
						 | 
					6c950e0dc9 | ||
| 
						 | 
					62dd6f161a | ||
| 
						 | 
					6aba658cd8 | ||
| 
						 | 
					accb0c6edb | ||
| 
						 | 
					e0db2eed8d | ||
| 
						 | 
					00a357ab20 | ||
| 
						 | 
					8ee4845b65 | ||
| 
						 | 
					19b8d06a79 | ||
| 
						 | 
					5c6bf03117 | ||
| 
						 | 
					f72ed6153b | ||
| 
						 | 
					d652a0957f | ||
| 
						 | 
					fbcd27907b | ||
| 
						 | 
					a551bea52e | ||
| 
						 | 
					6cb686208e | ||
| 
						 | 
					bd1fb77245 | ||
| 
						 | 
					d610d27f30 | ||
| 
						 | 
					96b35c9e26 | ||
| 
						 | 
					907a8f1e6e | ||
| 
						 | 
					e1c191fe44 | ||
| 
						 | 
					5aa3429c5d | ||
| 
						 | 
					ffd418f217 | ||
| 
						 | 
					0711be1696 | ||
| 
						 | 
					7521ab3d0b | ||
| 
						 | 
					0587ec2645 | ||
| 
						 | 
					b76d66fbf6 | ||
| 
						 | 
					06f851f721 | ||
| 
						 | 
					f6661d391c | ||
| 
						 | 
					284b216b3a | ||
| 
						 | 
					05dbe6ee1f | ||
| 
						 | 
					871d0f5126 | ||
| 
						 | 
					5be1264b7e | ||
| 
						 | 
					314c667050 | ||
| 
						 | 
					28c8a911bd | ||
| 
						 | 
					437d1ed49f | ||
| 
						 | 
					12fd8be2c4 | ||
| 
						 | 
					8258f7b361 | ||
| 
						 | 
					e15ea3d9e1 | ||
| 
						 | 
					677532629d | ||
| 
						 | 
					57d8ff79b2 | ||
| 
						 | 
					4b14ed760d | ||
| 
						 | 
					79a6260a11 | ||
| 
						 | 
					a0bf8f2008 | ||
| 
						 | 
					408bf2f0c4 | ||
| 
						 | 
					874fee478c | ||
| 
						 | 
					90d9a69bb1 | ||
| 
						 | 
					4006c56036 | ||
| 
						 | 
					1729588435 | ||
| 
						 | 
					6f7c2cb31e | ||
| 
						 | 
					a4629f4136 | ||
| 
						 | 
					56b5f687e4 | ||
| 
						 | 
					caa4f47f61 | ||
| 
						 | 
					36757b4438 | ||
| 
						 | 
					75871dda4b | ||
| 
						 | 
					506fec1a95 | ||
| 
						 | 
					aae329c447 | ||
| 
						 | 
					02acf1409e | ||
| 
						 | 
					6ac3309c74 | ||
| 
						 | 
					1b15cfa11d | ||
| 
						 | 
					76dfca879f | ||
| 
						 | 
					7cdc7bacea | ||
| 
						 | 
					fbd78b5c08 | ||
| 
						 | 
					fbcd0da597 | ||
| 
						 | 
					665dc3924d | ||
| 
						 | 
					4bdacff25b | ||
| 
						 | 
					ecd45314b8 | ||
| 
						 | 
					3e06fb754e | ||
| 
						 | 
					b2e20a31ea | ||
| 
						 | 
					38e19a4220 | ||
| 
						 | 
					f28164fefd | ||
| 
						 | 
					2eaabb718b | ||
| 
						 | 
					5572f482e7 | ||
| 
						 | 
					729f0a277e | ||
| 
						 | 
					c55d759168 | ||
| 
						 | 
					b7910992d8 | ||
| 
						 | 
					cf3b8b52f1 | ||
| 
						 | 
					42b06fbaca | ||
| 
						 | 
					2245cd87d4 | ||
| 
						 | 
					c199837c54 | ||
| 
						 | 
					83699c4784 | ||
| 
						 | 
					30afcc072a | ||
| 
						 | 
					832f9304fd | ||
| 
						 | 
					fa4bde98d2 | ||
| 
						 | 
					ca80756c70 | ||
| 
						 | 
					ef0baf60aa | ||
| 
						 | 
					7ba3a4c3d2 | ||
| 
						 | 
					29e48c18b7 | ||
| 
						 | 
					982dfb7d10 | ||
| 
						 | 
					8c4b69d3ab | ||
| 
						 | 
					0e2cc42cfb | ||
| 
						 | 
					1e5c205ccb | ||
| 
						 | 
					4c82171a8e | ||
| 
						 | 
					88c80b3e75 | ||
| 
						 | 
					27bad5ad3d | ||
| 
						 | 
					6a89a25c27 | ||
| 
						 | 
					001ab3abad | ||
| 
						 | 
					ec8ad2bb96 | ||
| 
						 | 
					5fbb02fcb1 | ||
| 
						 | 
					4e1b50e219 | ||
| 
						 | 
					d7b2342a6a | ||
| 
						 | 
					7e9db7cefc | ||
| 
						 | 
					d30e4c5b0b | ||
| 
						 | 
					9de6bb8abc | ||
| 
						 | 
					72e04bd13f | ||
| 
						 | 
					4ec0448122 | ||
| 
						 | 
					842d8e209b | ||
| 
						 | 
					292fcd5c7b | ||
| 
						 | 
					74e3931f84 | ||
| 
						 | 
					12dadc555f | ||
| 
						 | 
					b75b2225e5 | ||
| 
						 | 
					12f27bd414 | ||
| 
						 | 
					69deec58fb | ||
| 
						 | 
					1e976bdc46 | ||
| 
						 | 
					9946fceb9d | ||
| 
						 | 
					6fed88113b | ||
| 
						 | 
					97ebe047d0 | ||
| 
						 | 
					fc6a6a1030 | ||
| 
						 | 
					3d840c827f | ||
| 
						 | 
					a2a1a04e53 | ||
| 
						 | 
					f86abc2e80 | ||
| 
						 | 
					7104c376ae | ||
| 
						 | 
					0638ced5cc | ||
| 
						 | 
					e984b2af64 | ||
| 
						 | 
					70e96dcf59 | ||
| 
						 | 
					2c696b2ddc | ||
| 
						 | 
					9a48b07ee4 | ||
| 
						 | 
					230fd6b7b6 | ||
| 
						 | 
					20b33a015f | ||
| 
						 | 
					293d5082c7 | ||
| 
						 | 
					929f116733 | ||
| 
						 | 
					ba5ba5490d | ||
| 
						 | 
					b8565a9af9 | ||
| 
						 | 
					94960c8421 | ||
| 
						 | 
					6859cf7459 | ||
| 
						 | 
					2018681b33 | ||
| 
						 | 
					e204516178 | ||
| 
						 | 
					153aecf91a | ||
| 
						 | 
					cd98ab6491 | ||
| 
						 | 
					b3823ac64b | ||
| 
						 | 
					5d9470ff8e | ||
| 
						 | 
					e78f137899 | ||
| 
						 | 
					40e66398db | ||
| 
						 | 
					6e32d0a74b | ||
| 
						 | 
					a4f53a1c73 | ||
| 
						 | 
					a90ae02454 | ||
| 
						 | 
					4c8f79a33e | ||
| 
						 | 
					7cc6ec7af7 | ||
| 
						 | 
					c2bbf275b2 | ||
| 
						 | 
					9226e2187c | ||
| 
						 | 
					48921e00fc | ||
| 
						 | 
					f804930150 | ||
| 
						 | 
					3403caf3da | ||
| 
						 | 
					ba11121731 | ||
| 
						 | 
					ed5e37c309 | ||
| 
						 | 
					65b1d31df5 | ||
| 
						 | 
					b499ed06d2 | ||
| 
						 | 
					6ff7c95843 | ||
| 
						 | 
					41cc7096b8 | ||
| 
						 | 
					c237de058f | ||
| 
						 | 
					e2aeb8174b | ||
| 
						 | 
					34f1f2a81c | ||
| 
						 | 
					c96f0fd2d1 | ||
| 
						 | 
					8aefe253a7 | ||
| 
						 | 
					7e31164ae0 | ||
| 
						 | 
					ad55f581f9 | ||
| 
						 | 
					d4a8f90cab | ||
| 
						 | 
					41ab00bedf | ||
| 
						 | 
					fc85ac20c7 | ||
| 
						 | 
					e88479243c | ||
| 
						 | 
					c787525ac8 | ||
| 
						 | 
					9a2601033d | ||
| 
						 | 
					fbb311a7d2 | ||
| 
						 | 
					f309c1ae50 | ||
| 
						 | 
					82a20fb0f0 | ||
| 
						 | 
					428112ef10 | ||
| 
						 | 
					64376cd8ff | ||
| 
						 | 
					cc8aa08b02 | ||
| 
						 | 
					1c4e4e4f56 | ||
| 
						 | 
					3f6db7f518 | ||
| 
						 | 
					8435a755fd | ||
| 
						 | 
					52c29b7b99 | ||
| 
						 | 
					c6bf63da7c | ||
| 
						 | 
					0fd05a2f0f | ||
| 
						 | 
					1fd0338b49 | ||
| 
						 | 
					b2be73e4e8 | ||
| 
						 | 
					37f5fcf85c | ||
| 
						 | 
					f742e497dd | ||
| 
						 | 
					dcc426fcfe | ||
| 
						 | 
					7eb18f1237 | ||
| 
						 | 
					265e892fed | ||
| 
						 | 
					623e9e66c0 | ||
| 
						 | 
					90f5a2b6fe | ||
| 
						 | 
					bf625abe29 | ||
| 
						 | 
					b44069730b | ||
| 
						 | 
					749d055eba | ||
| 
						 | 
					49a0f77867 | ||
| 
						 | 
					2af52de7b5 | ||
| 
						 | 
					629d860cbc | ||
| 
						 | 
					056cc163f5 | ||
| 
						 | 
					e09efcf71a | ||
| 
						 | 
					763b4dcc66 | ||
| 
						 | 
					83348e0b80 | ||
| 
						 | 
					f13ddd5d0a | ||
| 
						 | 
					18a31aa861 | ||
| 
						 | 
					b2a4e959c9 | ||
| 
						 | 
					f17ef241d1 | ||
| 
						 | 
					aa1e56b0b9 | ||
| 
						 | 
					7ef524ea1c | ||
| 
						 | 
					0c7141a343 | ||
| 
						 | 
					5488bb6197 | ||
| 
						 | 
					8e28c67155 | ||
| 
						 | 
					36969082bb | ||
| 
						 | 
					4fde69b066 | ||
| 
						 | 
					fd9a4dbe94 | ||
| 
						 | 
					f0db0ed35d | ||
| 
						 | 
					6d24cbf452 | ||
| 
						 | 
					5454829ae6 | ||
| 
						 | 
					da0bca6466 | ||
| 
						 | 
					4705bd9b37 | ||
| 
						 | 
					5bd90983bc | ||
| 
						 | 
					329f981582 | ||
| 
						 | 
					cece7adcee | ||
| 
						 | 
					74cc4903ef | ||
| 
						 | 
					41fdcfa71e | ||
| 
						 | 
					60cc56b1a9 | ||
| 
						 | 
					f912e9293f | ||
| 
						 | 
					56939728b7 | ||
| 
						 | 
					ea26226046 | ||
| 
						 | 
					17f6279317 | ||
| 
						 | 
					e172d60ddb | ||
| 
						 | 
					f8fe7fa491 | ||
| 
						 | 
					fbe792f0ac | ||
| 
						 | 
					14a7cfb32a | ||
| 
						 | 
					7a8645d171 | ||
| 
						 | 
					5bf738737d | ||
| 
						 | 
					415e03aa6f | ||
| 
						 | 
					ac120e20e3 | ||
| 
						 | 
					3f90e45079 | ||
| 
						 | 
					9dcc441a5f | ||
| 
						 | 
					db4f691f9f | ||
| 
						 | 
					d28735a05b | ||
| 
						 | 
					183847747a | ||
| 
						 | 
					bac6012308 | ||
| 
						 | 
					aaa384ca1a | ||
| 
						 | 
					f908226898 | ||
| 
						 | 
					909abce800 | ||
| 
						 | 
					33d4e690cc | ||
| 
						 | 
					848c849584 | ||
| 
						 | 
					102c8f47bf | ||
| 
						 | 
					d3bcbba45c | ||
| 
						 | 
					0903e56196 | ||
| 
						 | 
					95ecacf8a2 | ||
| 
						 | 
					be8a280e0b | ||
| 
						 | 
					6fb60a84dd | ||
| 
						 | 
					5af7d1a3b8 | ||
| 
						 | 
					35b73a1f20 | ||
| 
						 | 
					9e4f9b36fc | ||
| 
						 | 
					84d7e365a0 | ||
| 
						 | 
					64c3da230f | ||
| 
						 | 
					7793f30e09 | ||
| 
						 | 
					714df32e33 | ||
| 
						 | 
					1dc920c8de | ||
| 
						 | 
					16dc1cfb5c | ||
| 
						 | 
					819ff32dc4 | ||
| 
						 | 
					5574e0ed41 | ||
| 
						 | 
					042e57d562 | ||
| 
						 | 
					ba8fb52183 | ||
| 
						 | 
					f6f9961819 | ||
| 
						 | 
					e74e9c48de | ||
| 
						 | 
					179add2b07 | ||
| 
						 | 
					456bc309d8 | ||
| 
						 | 
					a7535a2727 | ||
| 
						 | 
					44c09667ff | ||
| 
						 | 
					da9b972466 | ||
| 
						 | 
					bd45950f4a | ||
| 
						 | 
					f70cf11819 | ||
| 
						 | 
					5575f781ad | ||
| 
						 | 
					0472883cc2 | ||
| 
						 | 
					87e8feca95 | ||
| 
						 | 
					e70a39830c | ||
| 
						 | 
					ba25198517 | ||
| 
						 | 
					6297bcd74c | ||
| 
						 | 
					dd7ab82e75 | ||
| 
						 | 
					c046fffa16 | ||
| 
						 | 
					3aecef7697 | ||
| 
						 | 
					b218af2b27 | ||
| 
						 | 
					77c46bbf29 | ||
| 
						 | 
					02750ff56f | ||
| 
						 | 
					0bee0e6294 | ||
| 
						 | 
					12593e6f45 | ||
| 
						 | 
					819a040f44 | ||
| 
						 | 
					546405bece | ||
| 
						 | 
					f013c7f2a6 | ||
| 
						 | 
					1cc67fa80c | ||
| 
						 | 
					eefa6e4e2b | ||
| 
						 | 
					6d9116f83d | ||
| 
						 | 
					8be4e173e8 | ||
| 
						 | 
					648765ba2f | ||
| 
						 | 
					c6ccf055ba | ||
| 
						 | 
					1649d85d10 | ||
| 
						 | 
					cd72dcd925 | ||
| 
						 | 
					7a5ed919ad | ||
| 
						 | 
					799d7a34cf | ||
| 
						 | 
					20adcfa058 | ||
| 
						 | 
					02b7ec88bb | ||
| 
						 | 
					0af9a89cef | ||
| 
						 | 
					db802c60e3 | ||
| 
						 | 
					503f3b1a21 | ||
| 
						 | 
					402bcde847 | ||
| 
						 | 
					ec9ea6a3c8 | ||
| 
						 | 
					7e6617611f | ||
| 
						 | 
					ca6dde5d3d | ||
| 
						 | 
					8e6cbcd7c0 | ||
| 
						 | 
					9335a5f7c0 | ||
| 
						 | 
					32bf74e30e | ||
| 
						 | 
					6643f275e2 | ||
| 
						 | 
					cd4c36adb8 | ||
| 
						 | 
					311e209931 | ||
| 
						 | 
					fe5eb6707f | ||
| 
						 | 
					f5db08e57a | ||
| 
						 | 
					8cfdb960f0 | ||
| 
						 | 
					ebccb429de | ||
| 
						 | 
					7dbed652fc | ||
| 
						 | 
					6789b41d86 | ||
| 
						 | 
					0487cb234c | ||
| 
						 | 
					80e1495b99 | ||
| 
						 | 
					041843e47e | ||
| 
						 | 
					c2aa4f2081 | ||
| 
						 | 
					b23f50e67e | ||
| 
						 | 
					7fe03ed3a3 | ||
| 
						 | 
					9466fa6750 | ||
| 
						 | 
					cead7f36da | ||
| 
						 | 
					cbecb3ac37 | ||
| 
						 | 
					5dbd3efce7 | ||
| 
						 | 
					876811e2af | ||
| 
						 | 
					b57c98df7b | ||
| 
						 | 
					c4da6dd38a | ||
| 
						 | 
					2edcb4ac71 | ||
| 
						 | 
					0c4d9b2fbc | ||
| 
						 | 
					5012158adf | ||
| 
						 | 
					5c9396e37c | ||
| 
						 | 
					7b63c0fa8c | ||
| 
						 | 
					063a8905bf | ||
| 
						 | 
					cd7562091d | ||
| 
						 | 
					d1d0be3cd2 | ||
| 
						 | 
					2c8ad4f1af | ||
| 
						 | 
					121dea3f85 | ||
| 
						 | 
					ea4f109c99 | ||
| 
						 | 
					7650934f21 | ||
| 
						 | 
					40c5cae24a | ||
| 
						 | 
					cce9396dc9 | ||
| 
						 | 
					47f3eafb8d | ||
| 
						 | 
					53fc93dda6 | ||
| 
						 | 
					17085b022c | ||
| 
						 | 
					4367eb8706 | ||
| 
						 | 
					0a8a99785b | ||
| 
						 | 
					a9d96b98cb | ||
| 
						 | 
					ae689b6b27 | ||
| 
						 | 
					60d160da2d | ||
| 
						 | 
					05086644c4 | ||
| 
						 | 
					fb96d9d90d | ||
| 
						 | 
					e1a32c1807 | ||
| 
						 | 
					5585f4eca4 | ||
| 
						 | 
					e8b4d05f61 | ||
| 
						 | 
					0df748e7e2 | ||
| 
						 | 
					1fbcfbe693 | ||
| 
						 | 
					34ab17b669 | ||
| 
						 | 
					4942ef6f0e | ||
| 
						 | 
					9ae08a9c04 | ||
| 
						 | 
					76f8a1f51d | ||
| 
						 | 
					9d358821e5 | ||
| 
						 | 
					a6c6874a1a | ||
| 
						 | 
					a947f2d2b6 | ||
| 
						 | 
					94e19e7111 | ||
| 
						 | 
					04677ce024 | ||
| 
						 | 
					407adb5b17 | ||
| 
						 | 
					da0616cd13 | ||
| 
						 | 
					1c02ca537a | ||
| 
						 | 
					3f2f3d4264 | ||
| 
						 | 
					c4c2c61e8c | ||
| 
						 | 
					5f3d6f70f6 | ||
| 
						 | 
					ece0bdf1fd | ||
| 
						 | 
					97e4b1883e | ||
| 
						 | 
					a2b38b3022 | ||
| 
						 | 
					d51092f42b | ||
| 
						 | 
					bdb6171334 | ||
| 
						 | 
					1d4547a43d | ||
| 
						 | 
					65ee74fbc7 | ||
| 
						 | 
					c21506ba02 | ||
| 
						 | 
					00f1628eac | ||
| 
						 | 
					c69d103956 | ||
| 
						 | 
					d56f92ee78 | ||
| 
						 | 
					d5492d9b47 | ||
| 
						 | 
					451dc18f10 | ||
| 
						 | 
					127dca46a0 | ||
| 
						 | 
					e888074bb4 | ||
| 
						 | 
					1ef5026ef9 | ||
| 
						 | 
					40889b9cd3 | ||
| 
						 | 
					99889b46c9 | ||
| 
						 | 
					82869b3c8d | ||
| 
						 | 
					e8233e699b | ||
| 
						 | 
					04cc76660a | ||
| 
						 | 
					e1f7ea25d2 | ||
| 
						 | 
					8586df1efb | ||
| 
						 | 
					b8e0e12399 | ||
| 
						 | 
					254ef80db1 | ||
| 
						 | 
					f9de8446a0 | ||
| 
						 | 
					d15711efc6 | ||
| 
						 | 
					25ace3ed25 | ||
| 
						 | 
					012c86ab74 | ||
| 
						 | 
					458c29175e | ||
| 
						 | 
					8a5dbb0a2e | ||
| 
						 | 
					532203cdb0 | ||
| 
						 | 
					870d3d5595 | ||
| 
						 | 
					c6c0e4cb32 | ||
| 
						 | 
					8f6f347848 | ||
| 
						 | 
					0f7b63c834 | ||
| 
						 | 
					345731731a | ||
| 
						 | 
					b2c04539a1 | ||
| 
						 | 
					d13363af60 | ||
| 
						 | 
					b6fc2386f0 | ||
| 
						 | 
					9f353dd662 | ||
| 
						 | 
					b49053cae2 | ||
| 
						 | 
					c8062c3a5e | ||
| 
						 | 
					05c08fc708 | ||
| 
						 | 
					0990a0851a | ||
| 
						 | 
					bb0db9c491 | ||
| 
						 | 
					966a753997 | ||
| 
						 | 
					0f829bd111 | ||
| 
						 | 
					a5200a1b8f | ||
| 
						 | 
					6631a7e7f1 | ||
| 
						 | 
					010da5c015 | ||
| 
						 | 
					fbb56e5b1d | ||
| 
						 | 
					78055aa6a5 | ||
| 
						 | 
					e6bd5e8a6d | ||
| 
						 | 
					94f1b50c0f | ||
| 
						 | 
					bd54d55c1d | ||
| 
						 | 
					09c70c3261 | ||
| 
						 | 
					1ed0c6621b | ||
| 
						 | 
					5f8453587e | ||
| 
						 | 
					d6e2d12c74 | ||
| 
						 | 
					305a1afcf7 | ||
| 
						 | 
					9cdf87f194 | ||
| 
						 | 
					a81e9d3dc4 | ||
| 
						 | 
					6b7e0a9987 | ||
| 
						 | 
					8b57fb1208 | ||
| 
						 | 
					2962243d19 | ||
| 
						 | 
					dbdc5d14d3 | ||
| 
						 | 
					6cbe638294 | ||
| 
						 | 
					07c08ed42c | ||
| 
						 | 
					17b226a672 | ||
| 
						 | 
					f33ca23e2f | ||
| 
						 | 
					6d79659dd7 | ||
| 
						 | 
					c56fb0f1a3 | ||
| 
						 | 
					08241a5814 | ||
| 
						 | 
					3d27b1fa85 | ||
| 
						 | 
					6298bf9073 | ||
| 
						 | 
					9a26adf598 | ||
| 
						 | 
					64ad04eb2d | ||
| 
						 | 
					349b293353 | ||
| 
						 | 
					fd91256316 | ||
| 
						 | 
					a9a025d08c | ||
| 
						 | 
					b605e3ada3 | ||
| 
						 | 
					02cbedc387 | ||
| 
						 | 
					e5d814d040 | ||
| 
						 | 
					b09f4fb271 | ||
| 
						 | 
					1f4eada3b4 | ||
| 
						 | 
					b935754cb0 | ||
| 
						 | 
					396bc53593 | ||
| 
						 | 
					7711de24f9 | ||
| 
						 | 
					eee6c81af8 | ||
| 
						 | 
					b89670ef0e | ||
| 
						 | 
					0fccb00b5b | ||
| 
						 | 
					72da660ddb | ||
| 
						 | 
					46ffee4792 | ||
| 
						 | 
					c0a953650b | ||
| 
						 | 
					0424fe1a8f | ||
| 
						 | 
					544a2aea4b | ||
| 
						 | 
					60e5f36d27 | ||
| 
						 | 
					2469361c0f | ||
| 
						 | 
					6fa865a325 | ||
| 
						 | 
					e9ba69631b | ||
| 
						 | 
					d80a8d1919 | ||
| 
						 | 
					d0ff2a237b | ||
| 
						 | 
					6e5dd63c77 | ||
| 
						 | 
					dc014d43af | ||
| 
						 | 
					2f9cf160e4 | ||
| 
						 | 
					336c35dc9e | ||
| 
						 | 
					72b5215645 | ||
| 
						 | 
					06bed64317 | ||
| 
						 | 
					c559759265 | ||
| 
						 | 
					b4000e8ad8 | ||
| 
						 | 
					21d5ed98d5 | ||
| 
						 | 
					e9a182fa30 | ||
| 
						 | 
					b6db386ffd | ||
| 
						 | 
					2c975b501d | ||
| 
						 | 
					279fe3b1c5 | ||
| 
						 | 
					98a9092af1 | ||
| 
						 | 
					87108f5af9 | ||
| 
						 | 
					f257d984b7 | ||
| 
						 | 
					b889d6a8e8 | ||
| 
						 | 
					47234cd3d2 | ||
| 
						 | 
					2c8d0dccfc | ||
| 
						 | 
					a4f576a378 | ||
| 
						 | 
					3def5a010e | ||
| 
						 | 
					294bd1e2f3 | ||
| 
						 | 
					253ef2187c | ||
| 
						 | 
					c0455cbb18 | ||
| 
						 | 
					17e2c77a77 | ||
| 
						 | 
					b52f3818f4 | ||
| 
						 | 
					cc12975514 | ||
| 
						 | 
					9738f395c6 | ||
| 
						 | 
					d4294c8984 | ||
| 
						 | 
					8df61b5011 | ||
| 
						 | 
					f1e6643751 | ||
| 
						 | 
					6991bf196c | ||
| 
						 | 
					822a4c1bdb | ||
| 
						 | 
					a5868b3fe2 | ||
| 
						 | 
					4edfacb983 | ||
| 
						 | 
					c6efe6f59e | ||
| 
						 | 
					35c2b3a9ac | ||
| 
						 | 
					af9675e75a | 
@@ -1,3 +1,4 @@
 | 
			
		||||
openssl.pc
 | 
			
		||||
Makefile.ssl
 | 
			
		||||
MINFO
 | 
			
		||||
makefile.one
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										469
									
								
								Configure
									
									
									
									
									
								
							
							
						
						
									
										469
									
								
								Configure
									
									
									
									
									
								
							@@ -10,7 +10,7 @@ use strict;
 | 
			
		||||
 | 
			
		||||
# see INSTALL for instructions.
 | 
			
		||||
 | 
			
		||||
my $usage="Usage: Configure [no-<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> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-engine] [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";
 | 
			
		||||
 | 
			
		||||
# Options:
 | 
			
		||||
#
 | 
			
		||||
@@ -38,6 +38,7 @@ my $usage="Usage: Configure [no-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-
 | 
			
		||||
# --test-sanity Make a number of sanity checks on the data in this file.
 | 
			
		||||
#               This is a debugging tool for OpenSSL developers.
 | 
			
		||||
#
 | 
			
		||||
# no-engine     do not compile in any engine code.
 | 
			
		||||
# no-hw-xxx     do not compile support for specific crypto hardware.
 | 
			
		||||
#               Generic OpenSSL-style methods relating to this support
 | 
			
		||||
#               are always compiled but return NULL if the hardware
 | 
			
		||||
@@ -107,7 +108,6 @@ my $tlib="-lnsl -lsocket";
 | 
			
		||||
my $bits1="THIRTY_TWO_BIT ";
 | 
			
		||||
my $bits2="SIXTY_FOUR_BIT ";
 | 
			
		||||
 | 
			
		||||
my $x86_sol_asm="asm/bn86-sol.o asm/co86-sol.o:asm/dx86-sol.o asm/yx86-sol.o:asm/bx86-sol.o:asm/mx86-sol.o:asm/sx86-sol.o:asm/cx86-sol.o:asm/rx86-sol.o:asm/rm86-sol.o:asm/r586-sol.o";
 | 
			
		||||
my $x86_elf_asm="asm/bn86-elf.o asm/co86-elf.o:asm/dx86-elf.o asm/yx86-elf.o:asm/bx86-elf.o:asm/mx86-elf.o:asm/sx86-elf.o:asm/cx86-elf.o:asm/rx86-elf.o:asm/rm86-elf.o:asm/r586-elf.o";
 | 
			
		||||
my $x86_out_asm="asm/bn86-out.o asm/co86-out.o:asm/dx86-out.o asm/yx86-out.o:asm/bx86-out.o:asm/mx86-out.o:asm/sx86-out.o:asm/cx86-out.o:asm/rx86-out.o:asm/rm86-out.o:asm/r586-out.o";
 | 
			
		||||
my $x86_bsdi_asm="asm/bn86bsdi.o asm/co86bsdi.o:asm/dx86bsdi.o asm/yx86bsdi.o:asm/bx86bsdi.o:asm/mx86bsdi.o:asm/sx86bsdi.o:asm/cx86bsdi.o:asm/rx86bsdi.o:asm/rm86bsdi.o:asm/r586bsdi.o";
 | 
			
		||||
@@ -120,7 +120,7 @@ my $alpha_asm="::::::::";
 | 
			
		||||
# -DB_ENDIAN slows things down on a sparc for md5, but helps sha1.
 | 
			
		||||
# So the md5_locl.h file has an undef B_ENDIAN if sun is defined
 | 
			
		||||
 | 
			
		||||
#config-string	$cc : $cflags : $unistd : $thread_cflag : $sys_id : $lflags : $bn_ops : $bn_obj : $des_obj : $bf_obj : $md5_obj : $sha1_obj : $cast_obj : $rc4_obj : $rmd160_obj : $rc5_obj : $dso_scheme : $shared_target : $shared_cflag : $shared_ldflag : $shared_extension : $ranlib
 | 
			
		||||
#config-string	$cc : $cflags : $unistd : $thread_cflag : $sys_id : $lflags : $bn_ops : $bn_obj : $des_obj : $bf_obj : $md5_obj : $sha1_obj : $cast_obj : $rc4_obj : $rmd160_obj : $rc5_obj : $dso_scheme : $shared_target : $shared_cflag : $shared_ldflag : $shared_extension : $ranlib : $arflags
 | 
			
		||||
 | 
			
		||||
my %table=(
 | 
			
		||||
# File 'TABLE' (created by 'make TABLE') contains the data from this list,
 | 
			
		||||
@@ -134,7 +134,7 @@ 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 -ggdb -g2 -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror::(unknown)::-lefence::::",
 | 
			
		||||
"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 -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::asm/bn86-elf.o asm/co86-elf.o",
 | 
			
		||||
"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)::::",
 | 
			
		||||
@@ -142,10 +142,14 @@ my %table=(
 | 
			
		||||
"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 -DBN_CTX_DEBUG -DBIO_PAIR_DEBUG -DPEDANTIC -g -m486 -pedantic -Wshadow -Wall::-D_REENTRANT:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
 | 
			
		||||
"debug-ulf",	"gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -g -O2 -m486 -Wall -Werror -Wshadow -pipe::-D_REENTRANT:::${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
 | 
			
		||||
"debug-steve",	"gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DPEDANTIC -g -mcpu=i486 -pedantic -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
 | 
			
		||||
"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wid-clash-31 -Wno-long-long -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_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wid-clash-31 -Wno-long-long -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"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::::win32:cygwin-shared:::.dll",
 | 
			
		||||
"debug-steve",	"gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DPEDANTIC -g -mcpu=i486 -pedantic -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared",
 | 
			
		||||
"debug-steve-linux-pseudo64",	"gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DOPENSSL_NO_ASM -g -mcpu=i486 -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:SIXTY_FOUR_BIT::dlfcn:linux-shared",
 | 
			
		||||
"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_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_CTX_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}::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_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_CTX_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}::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-geoff","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DBN_CTX_DEBUG -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -g -ggdb3 -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 ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"dist",		"cc:-O::(unknown)::::::",
 | 
			
		||||
 | 
			
		||||
# Basic configs that should work on any (32 and less bit) box
 | 
			
		||||
@@ -158,24 +162,24 @@ my %table=(
 | 
			
		||||
# surrounds it with #APP #NO_APP comment pair which (at least Solaris
 | 
			
		||||
# 7_x86) /usr/ccs/bin/as fails to assemble with "Illegal mnemonic"
 | 
			
		||||
# error message.
 | 
			
		||||
"solaris-x86-gcc","gcc:-O3 -fomit-frame-pointer -m486 -Wall -DL_ENDIAN -DOPENSSL_NO_INLINE_ASM::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_sol_asm}:dlfcn:solaris-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-x86-gcc","gcc:-O3 -fomit-frame-pointer -m486 -Wall -DL_ENDIAN -DOPENSSL_NO_INLINE_ASM::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#### 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::::::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#### SPARC Solaris with GNU C setups
 | 
			
		||||
"solaris-sparcv7-gcc","gcc:-O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::::::::::dlfcn:solaris-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-sparcv8-gcc","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8.o:::::::::dlfcn:solaris-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-sparcv7-gcc","gcc:-O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::::::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-sparcv8-gcc","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8.o:asm/des_enc-sparc.o fcrypt_b.o::::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# -m32 should be safe to add as long as driver recognizes -mcpu=ultrasparc
 | 
			
		||||
"solaris-sparcv9-gcc","gcc:-m32 -mcpu=ultrasparc -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-sparcv9-gcc","gcc:-m32 -mcpu=ultrasparc -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8plus.o:asm/des_enc-sparc.o fcrypt_b.o::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# gcc pre-2.8 doesn't understand -mcpu=ultrasparc, so fall down to -mv8
 | 
			
		||||
# but keep the assembler modules.
 | 
			
		||||
"solaris-sparcv9-gcc27","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8plus-gcc27.o:::asm/md5-sparcv8plus-gcc27.o::::::dlfcn:solaris-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris64-sparcv9-gcc","gcc:-m64 -mcpu=ultrasparc -O3 -Wall -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::asm/md5-sparcv9.o::::::dlfcn:solaris-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-sparcv9-gcc27","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8plus-gcc27.o:asm/des_enc-sparc.o fcrypt_b.o::asm/md5-sparcv8plus-gcc27.o::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris64-sparcv9-gcc","gcc:-m64 -mcpu=ultrasparc -O3 -Wall -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR::asm/des_enc-sparc.o fcrypt_b.o::asm/md5-sparcv9.o::::::dlfcn:solaris-shared:-fPIC:-m64 -shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
####
 | 
			
		||||
"debug-solaris-sparcv8-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -O -g -mv8 -Wall -DB_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8.o:::::::::dlfcn:solaris-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-solaris-sparcv9-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -O -g -mcpu=ultrasparc -Wall -DB_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8plus.o:::::::::dlfcn:solaris-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-solaris-sparcv8-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -O -g -mv8 -Wall -DB_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8.o:::::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-solaris-sparcv9-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -DPEDANTIC -O -g -mcpu=ultrasparc -pedantic -ansi -Wall -Wshadow -Wno-long-long -D__EXTENSIONS__ -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8plus.o:asm/des_enc-sparc.o fcrypt_b.o::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#### SPARC Solaris with Sun C setups
 | 
			
		||||
# DO NOT use /xO[34] on sparc with SC3.0.  It is broken, and will not pass the tests
 | 
			
		||||
@@ -184,9 +188,9 @@ my %table=(
 | 
			
		||||
# SC4.2 is ok, better than gcc even on bn as long as you tell it -xarch=v8
 | 
			
		||||
# SC5.0 note: Compiler common patch 107357-01 or later is required!
 | 
			
		||||
"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::::::::::dlfcn:solaris-shared:-KPIC::.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:asm/sparcv8.o:::::::::dlfcn:solaris-shared:-KPIC::.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:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-KPIC::.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:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::asm/md5-sparcv9.o::::::dlfcn:solaris-shared:-KPIC:-xarch=v9:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):/usr/ccs/bin/ar rs",
 | 
			
		||||
"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:asm/sparcv8.o:asm/des_enc-sparc.o fcrypt_b.o::::::::dlfcn:solaris-shared:-KPIC::.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:asm/sparcv8plus.o:asm/des_enc-sparc.o fcrypt_b.o::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-KPIC::.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:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR::asm/des_enc-sparc.o fcrypt_b.o::asm/md5-sparcv9.o::::::dlfcn:solaris-shared:-KPIC:-xarch=v9:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):/usr/ccs/bin/ar rs",
 | 
			
		||||
####
 | 
			
		||||
"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:asm/sparcv8.o:::::::::dlfcn:solaris-shared:-KPIC::.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:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
@@ -195,17 +199,16 @@ my %table=(
 | 
			
		||||
"linux-sparcv7","gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::",
 | 
			
		||||
# 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:::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8.o::::",
 | 
			
		||||
"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:asm/sparcv8.o:asm/des_enc-sparc.o fcrypt_b.o::::::::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:-mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -Wa,-Av8plus -DBN_DIV2W::-D_REENTRANT:ULTRASPARC::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o::::::dlfcn:linux-shared:-fPIC:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# !!!Folowing can't be even tested yet!!!
 | 
			
		||||
#    We have to wait till 64-bit glibc for SPARC is operational!!!
 | 
			
		||||
#"linux64-sparcv9","sparc64-linux-gcc:-m64 -mcpu=v9 -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT:ULTRASPARC::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::::asm/md5-sparcv9.o:",
 | 
			
		||||
"linux-sparcv9","gcc:-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:asm/sparcv8plus.o:asm/des_enc-sparc.o fcrypt_b.o::asm/md5-sparcv8plus.o::::::dlfcn:linux-shared:-fPIC::.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:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::asm/des_enc-sparc.o fcrypt_b.o::asm/md5-sparcv9.o::::::dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
# Sunos configs, assuming sparc for the gcc one.
 | 
			
		||||
##"sunos-cc", "cc:-O4 -DNOPROTO -DNOCONST::(unknown):::DES_UNROLL:::",
 | 
			
		||||
"sunos-gcc","gcc:-O3 -mv8 -Dssize_t=int::(unknown):::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL DES_PTR DES_RISC1:::",
 | 
			
		||||
##"sunos-cc", "cc:-O4 -DNOPROTO -DNOCONST::(unknown):SUNOS::DES_UNROLL:::",
 | 
			
		||||
"sunos-gcc","gcc:-O3 -mv8 -Dssize_t=int::(unknown):SUNOS::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL DES_PTR DES_RISC1:::",
 | 
			
		||||
 | 
			
		||||
#### IRIX 5.x configs
 | 
			
		||||
# -mips2 flag is added by ./config when appropriate.
 | 
			
		||||
@@ -213,13 +216,13 @@ my %table=(
 | 
			
		||||
"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::::::::::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-[g]cc' manually.
 | 
			
		||||
# './Configure irix-cc -o32' manually.
 | 
			
		||||
# -mips4 flag is added by ./config when appropriate.
 | 
			
		||||
"irix-mips3-gcc","gcc:-mabi=n32 -mmips-as -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_irix_asm}:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix-mips3-cc", "cc:-n32 -O2 -use_readonly_const -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_irix_asm}:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix-mips3-gcc","gcc:-mabi=n32 -mmips-as -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_irix_asm}:dlfcn:irix-shared::-mabi=n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix-mips3-cc", "cc:-n32 -mips3 -O2 -use_readonly_const -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_irix_asm}:dlfcn:irix-shared::-n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# N64 ABI builds.
 | 
			
		||||
"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -mmips-as -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips3_irix_asm}:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips3_irix_asm}:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -mmips-as -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips3_irix_asm}:dlfcn:irix-shared::-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips3_irix_asm}:dlfcn:irix-shared::-64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#### Unified HP-UX ANSI C configs.
 | 
			
		||||
# Special notes:
 | 
			
		||||
@@ -238,7 +241,7 @@ my %table=(
 | 
			
		||||
#   suitable for execution on the host you're currently compiling at.
 | 
			
		||||
#   If the toolkit is ment to be used on various PA-RISC processors
 | 
			
		||||
#   consider './config +DAportable'.
 | 
			
		||||
# - +DD64 is chosen in favour of +DA2.0W because it's ment to be
 | 
			
		||||
# - +DD64 is chosen in favour of +DA2.0W because it's meant to be
 | 
			
		||||
#   compatible with *future* releases.
 | 
			
		||||
# - If you run ./Configure hpux-parisc-[g]cc manually don't forget to
 | 
			
		||||
#   pass -D_REENTRANT on HP-UX 10 and later.
 | 
			
		||||
@@ -249,29 +252,35 @@ my %table=(
 | 
			
		||||
#   crypto/sha/sha_lcl.h.
 | 
			
		||||
#					<appro@fy.chalmers.se>
 | 
			
		||||
#
 | 
			
		||||
#!#"hpux-parisc-cc","cc:-Ae +O3 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
 | 
			
		||||
# 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::::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W::::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl:hpux-shared:-fPIC::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux64-parisc-cc","cc:-Ae +DD64 +O3 +ESlit -z -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dlfcn:hpux64-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
# IA-64 targets
 | 
			
		||||
# I have no idea if this one actually works, feedback needed. <appro>
 | 
			
		||||
"hpux-ia64-cc","cc:-Ae +DD32 +O3 +ESlit -z -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# Frank Geurts <frank.geurts@nl.abnamro.com> has patiently assisted with
 | 
			
		||||
# with debugging of the following config.
 | 
			
		||||
"hpux64-ia64-cc","cc:-Ae +DD64 +O3 +ESlit -z -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux64-shared:+Z::.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:asm/pa-risc2.o:::::::::dl:hpux-shared:-fPIC::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# 64bit PARISC for GCC without optimization, which seems to make problems.
 | 
			
		||||
# Submitted by <ross.alexander@uk.neceur.com>
 | 
			
		||||
"hpux64-parisc-gcc","gcc:-DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dlfcn:hpux64-shared:-fpic::.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:asm/pa-risc2W.o:::::::::dlfcn:hpux64-shared:-fpic::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
# 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 +Olibcalls -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::::::::::dl:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc2-cc","cc:+DA2.0 +DS2.0 +O3 +Optrs_strongly_typed +Olibcalls -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:asm/pa-risc2.o:::::::::dl:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux64-parisc2-cc","cc:+DD64 +O3 +Optrs_strongly_typed +Olibcalls -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:asm/pa-risc2W.o:::::::::dlfcn:hpux64-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"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::::::::::dl:hpux-shared:+Z::.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:asm/pa-risc2.o:::::::::dl:hpux-shared:+Z::.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:asm/pa-risc2W.o:::::::::dlfcn:hpux64-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# Isn't the line below meaningless? HP-UX cc optimizes for host by default.
 | 
			
		||||
# hpux-parisc1_0-cc with +DAportable flag would make more sense. <appro>
 | 
			
		||||
"hpux-parisc1_1-cc","cc:+DA1.1 +DS1.1 +O3 +Optrs_strongly_typed +Olibcalls -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-Wl,+s -ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dl:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc1_1-cc","cc:+DA1.1 +DS1.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::::::::::dl:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
# HP/UX IA-64 targets
 | 
			
		||||
"hpux-ia64-cc","cc:-Ae +DD32 +O3 +Olit=all -z -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# Frank Geurts <frank.geurts@nl.abnamro.com> has patiently assisted with
 | 
			
		||||
# with debugging of the following config.
 | 
			
		||||
"hpux64-ia64-cc","cc:-Ae +DD64 +O3 +Olit=all -z -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux64-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# GCC builds [not tested yet]...
 | 
			
		||||
# _ILP32 should have been defined by compiler driver, but it isn't...
 | 
			
		||||
"hpux-ia64-gcc","gcc:-O3 -DB_ENDIAN -D_ILP32::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64.o:::::::::dlfcn:hpux-shared:-fpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux64-ia64-gcc","gcc:-mlp64 -O3 -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64.o:::::::::dlfcn:hpux-shared:-fpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 
 | 
			
		||||
 | 
			
		||||
# HPUX 9.X config.
 | 
			
		||||
# Don't use the bundled cc.  It is broken.  Use HP ANSI C if possible, or
 | 
			
		||||
@@ -369,26 +378,31 @@ my %table=(
 | 
			
		||||
 | 
			
		||||
# The intel boxes :-), It would be worth seeing if bsdi-gcc can use the
 | 
			
		||||
# bn86-elf.o file file since it is hand tweaked assembler.
 | 
			
		||||
"linux-ia32-icc",	"icc:-DL_ENDIAN -DTERMIO -O2::-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 -m486 -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-pentium",	"gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -mcpu=pentium -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-ppro",	"gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -mcpu=pentiumpro -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-k6",	"gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -mcpu=k6 -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-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 -m486 -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","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -m486 -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 -m486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
 | 
			
		||||
"linux-aout",	"gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}",
 | 
			
		||||
"linux-mipsel",   "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::(unknown):::BN_LLONG:::",
 | 
			
		||||
"linux-mips",   "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::(unknown):::BN_LLONG:::",
 | 
			
		||||
"linux-mipsel",   "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-mips",   "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ppc",    "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-m68k",   "gcc:-DB_ENDIAN -DTERMIO -O2 -fomit-frame-pointer -Wall::-D_REENTRANT:::BN_LLONG::",
 | 
			
		||||
"linux-s390",	"gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:::BN_LLONG::",
 | 
			
		||||
"linux-s390x", "gcc:-DB_ENDIAN -DTERMIO -DNO_ASM -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG:::::::::::linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-s390",	"gcc:-DB_ENDIAN -DTERMIO -DNO_ASM -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-s390x",	"gcc:-DB_ENDIAN -DTERMIO -DNO_ASM -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia64",   "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR:asm/ia64.o:::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia64-ecc",   "ecc:-DL_ENDIAN -DTERMIO -O2 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR:asm/ia64.o:::::::::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 RC4_CHAR BF_PTR2 DES_INT DES_UNROLL:asm/x86_64-gcc.o:::::::::dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"NetBSD-sparc",	"gcc:-DTERMIOS -O3 -fomit-frame-pointer -mv8 -Wall -DB_ENDIAN::(unknown):::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"NetBSD-m68",	"gcc:-DTERMIOS -O3 -fomit-frame-pointer -Wall -DB_ENDIAN::(unknown):::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"NetBSD-x86",	"gcc:-DTERMIOS -O3 -fomit-frame-pointer -m486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"FreeBSD-elf",  "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::-pthread -D_REENTRANT -D_THREAD_SAFE -D_THREADSAFE:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"FreeBSD-sparc64","gcc:-DB_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer::-pthread -D_REENTRANT -D_THREAD_SAFE -D_THREADSAFE:::SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2 BF_PTR::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"FreeBSD-ia64","gcc:-DL_ENDIAN -DTERMIOS -O -fomit-frame-pointer::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR:asm/ia64-cpp.o:::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"FreeBSD",      "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}",
 | 
			
		||||
"bsdi-gcc",     "gcc:-O3 -ffast-math -DL_ENDIAN -DPERL5 -m486::(unknown):::RSA_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_bsdi_asm}",
 | 
			
		||||
"bsdi-elf-gcc",     "gcc:-DPERL5 -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown)::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
@@ -396,7 +410,7 @@ my %table=(
 | 
			
		||||
"nextstep3.3",	"cc:-O3 -Wall:<libc.h>:(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::",
 | 
			
		||||
 | 
			
		||||
# NCR MP-RAS UNIX ver 02.03.01
 | 
			
		||||
"ncr-scde","cc:-O6 -Xa -Hoff=BEHAVED -686 -Hwide -Hiw::(unknown)::-lsocket -lnsl:${x86_gcc_des} ${x86_gcc_opts}:::",
 | 
			
		||||
"ncr-scde","cc:-O6 -Xa -Hoff=BEHAVED -686 -Hwide -Hiw::(unknown)::-lsocket -lnsl -lc89:${x86_gcc_des} ${x86_gcc_opts}:::",
 | 
			
		||||
 | 
			
		||||
# QNX 4
 | 
			
		||||
"qnx4",	"cc:-DL_ENDIAN -DTERMIO::(unknown):::${x86_gcc_des} ${x86_gcc_opts}:",
 | 
			
		||||
@@ -407,32 +421,36 @@ my %table=(
 | 
			
		||||
# Linux on ARM
 | 
			
		||||
"linux-elf-arm","gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:::BN_LLONG::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
# UnixWare 2.0x fails destest with -O
 | 
			
		||||
"unixware-2.0","cc:-DFILIO_H::-Kthread::-lsocket -lnsl -lx:${x86_gcc_des} ${x86_gcc_opts}:::",
 | 
			
		||||
"unixware-2.0-pentium","cc:-DFILIO_H -Kpentium::-Kthread::-lsocket -lnsl -lx:MD2_CHAR RC4_INDEX ${x86_gcc_des}::",
 | 
			
		||||
# SCO/Caldera targets.
 | 
			
		||||
#
 | 
			
		||||
# Originally we had like unixware-*, unixware-*-pentium, unixware-*-p6, etc.
 | 
			
		||||
# Now we only have blended unixware-* as it's the only one used by ./config.
 | 
			
		||||
# If you want to optimize for particular microarchitecture, bypass ./config
 | 
			
		||||
# and './Configure unixware-7 -Kpentium_pro' or whatever appropriate.
 | 
			
		||||
# Note that not all targets include assembler support. Mostly because of
 | 
			
		||||
# lack of motivation to support out-of-date platforms with out-of-date
 | 
			
		||||
# compiler drivers and assemblers. Tim Rice <tim@multitalents.net> has
 | 
			
		||||
# patiently assisted to debug most of it.
 | 
			
		||||
#
 | 
			
		||||
# 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 -m486 -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)",
 | 
			
		||||
"OpenUNIX-8","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)",
 | 
			
		||||
"OpenUNIX-8-gcc","gcc:-O -DFILIO_H -fomit-frame-pointer::-pthread::-lsocket -lnsl:BN_LLONG MD2_CHAR RC4_INDEX ${x86_gcc_des}:${x86_elf_asm}:dlfcn:svr5-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"sco3-gcc",  "gcc:-O3 -fomit-frame-pointer -Dssize_t=int -DNO_SYS_UN_H::(unknown)::-lsocket:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::", # the SCO assembler doesn't seem to like our assembler files ...
 | 
			
		||||
# 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)",
 | 
			
		||||
 | 
			
		||||
# UnixWare 2.1
 | 
			
		||||
"unixware-2.1","cc:-O -DFILIO_H::-Kthread::-lsocket -lnsl -lx:${x86_gcc_des} ${x86_gcc_opts}:::",
 | 
			
		||||
"unixware-2.1-pentium","cc:-O -DFILIO_H -Kpentium::-Kthread::-lsocket -lnsl -lx:MD2_CHAR RC4_INDEX ${x86_gcc_des}::",
 | 
			
		||||
"unixware-2.1-p6","cc:-O -DFILIO_H -Kp6::-Kthread::-lsocket -lnsl -lx:MD2_CHAR RC4_INDEX ${x86_gcc_des}::",
 | 
			
		||||
 | 
			
		||||
# UnixWare 7
 | 
			
		||||
"unixware-7","cc:-O -DFILIO_H -Kalloca::-Kthread::-lsocket -lnsl:BN_LLONG MD2_CHAR RC4_INDEX ${x86_gcc_des}::::::::::dlfcn:svr5-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"unixware-7-pentium","cc:-O -DFILIO_H -Kalloca -Kpentium::-Kthread::-lsocket -lnsl:BN_LLONG MD2_CHAR RC4_INDEX ${x86_gcc_des}::::::::::dlfcn:svr5-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"unixware-7-pentium_pro","cc:-O -DFILIO_H -Kalloca -Kpentium_pro::-Kthread::-lsocket -lnsl:BN_LLONG MD2_CHAR RC4_INDEX ${x86_gcc_des}::::::::::dlfcn:svr5-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"unixware-7-gcc","gcc:-DL_ENDIAN -DFILIO_H -O3 -fomit-frame-pointer -m486 -Wall::-D_REENTRANT::-lsocket -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:gnu-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
# OpenUNIX 8
 | 
			
		||||
"OpenUNIX-8","cc:-O -DFILIO_H -Kalloca::-Kthread::-lsocket -lnsl:BN_LLONG MD2_CHAR RC4_INDEX ${x86_gcc_des}::::::::::dlfcn:svr5-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"OpenUNIX-8-gcc","gcc:-O -DFILIO_H -fomit-frame-pointer::-pthread::-lsocket -lnsl:BN_LLONG MD2_CHAR RC4_INDEX ${x86_gcc_des}::::::::::dlfcn:svr5-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"OpenUNIX-8-pentium","cc:-O -DFILIO_H -Kalloca -Kpentium::-Kthread::-lsocket -lnsl:BN_LLONG MD2_CHAR RC4_INDEX ${x86_gcc_des}::::::::::dlfcn:svr5-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"OpenUNIX-8-pentium_pro","cc:-O -DFILIO_H -Kalloca -Kpentium_pro::-Kthread::-lsocket -lnsl:BN_LLONG MD2_CHAR RC4_INDEX ${x86_gcc_des}::::::::::dlfcn:svr5-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
# IBM's AIX.
 | 
			
		||||
"aix-cc",   "cc:-O -DB_ENDIAN -qmaxmem=16384::(unknown):AIX::BN_LLONG RC4_CHAR:::",
 | 
			
		||||
"aix-gcc",  "gcc:-O3 -DB_ENDIAN::(unknown):AIX::BN_LLONG RC4_CHAR:::",
 | 
			
		||||
"aix43-cc",   "cc:-O -DAIX -DB_ENDIAN -qmaxmem=16384::(unknown):::BN_LLONG RC4_CHAR::::::::::dlfcn:",
 | 
			
		||||
"aix43-gcc",  "gcc:-O3 -DAIX -DB_ENDIAN::(unknown):::BN_LLONG RC4_CHAR::::::::::dlfcn:",
 | 
			
		||||
"aix43-cc",   "cc:-O -DAIX -DB_ENDIAN -qmaxmem=16384::(unknown):::BN_LLONG RC4_CHAR::::::::::dlfcn:aix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::",
 | 
			
		||||
"aix43-gcc",  "gcc:-O1 -DAIX -DB_ENDIAN::(unknown):::BN_LLONG RC4_CHAR::::::::::dlfcn:",
 | 
			
		||||
"aix64-cc",   "cc:-O -DAIX -DB_ENDIAN -qmaxmem=16384 -q64::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHAR::::::::::dlfcn:aix-shared::-q64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 64",
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Cray T90 and similar (SDSC)
 | 
			
		||||
@@ -465,18 +483,9 @@ my %table=(
 | 
			
		||||
"dgux-R4-gcc",	"gcc:-O3 -fomit-frame-pointer::(unknown)::-lnsl -lsocket:RC4_INDEX DES_UNROLL:::",
 | 
			
		||||
"dgux-R4-x86-gcc",	"gcc:-O3 -fomit-frame-pointer -DL_ENDIAN::(unknown)::-lnsl -lsocket:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
 | 
			
		||||
 | 
			
		||||
# SCO 3 - Tim Rice <tim@multitalents.net>
 | 
			
		||||
"sco3-gcc",  "gcc:-O3 -fomit-frame-pointer -Dssize_t=int -DNO_SYS_UN_H::(unknown)::-lsocket:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::", # the SCO assembler doesn't seem to like our assembler files ...
 | 
			
		||||
 | 
			
		||||
# SCO 5 - Ben Laurie <ben@algroup.co.uk> says the -O breaks the
 | 
			
		||||
# SCO cc.
 | 
			
		||||
"sco5-cc",  "cc:-belf::(unknown)::-lsocket -lresolv -lnsl:${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:svr3-shared:-Kpic", # des options?
 | 
			
		||||
"sco5-cc-pentium",  "cc:-Kpentium::(unknown)::-lsocket:${x86_gcc_des} ${x86_gcc_opts}:::", # des options?
 | 
			
		||||
"sco5-gcc",  "gcc:-O3 -fomit-frame-pointer::(unknown)::-lsocket -lresolv -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:svr3-shared:-fPIC", # the SCO assembler doesn't seem to like our assembler files ...
 | 
			
		||||
 | 
			
		||||
# Sinix/ReliantUNIX RM400
 | 
			
		||||
# NOTE: The CDS++ Compiler up to V2.0Bsomething has the IRIX_CC_BUG optimizer problem. Better use -g  */
 | 
			
		||||
"ReliantUNIX","cc:-KPIC -g -DTERMIOS -DB_ENDIAN::-Kthread:SNI:-lsocket -lnsl -lc -L/usr/ucblib -lucb:BN_LLONG DES_PTR DES_RISC2 DES_UNROLL BF_PTR::::::::::dlfcn:reliantunix-shared::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"ReliantUNIX","cc:-KPIC -g -DTERMIOS -DB_ENDIAN::-Kthread:SNI:-lsocket -lnsl -lc -L/usr/ucblib -lucb:BN_LLONG DES_PTR DES_RISC2 DES_UNROLL BF_PTR::::::::::dlfcn:reliantunix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"SINIX","cc:-O::(unknown):SNI:-lsocket -lnsl -lc -L/usr/ucblib -lucb:RC4_INDEX RC4_CHAR:::",
 | 
			
		||||
"SINIX-N","/usr/ucb/cc:-O2 -misaligned::(unknown)::-lucb:RC4_INDEX RC4_CHAR:::",
 | 
			
		||||
 | 
			
		||||
@@ -492,6 +501,7 @@ my %table=(
 | 
			
		||||
# Windows NT, Microsoft Visual C++ 4.0
 | 
			
		||||
 | 
			
		||||
"VC-NT","cl::::WINNT::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}::::::::::win32",
 | 
			
		||||
"VC-CE","cl::::WINCE::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}::::::::::win32",
 | 
			
		||||
"VC-WIN32","cl::::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}::::::::::win32",
 | 
			
		||||
"VC-WIN16","cl:::(unknown):WIN16::MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX THIRTY_TWO_BIT:::",
 | 
			
		||||
"VC-W31-16","cl:::(unknown):WIN16::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT:::",
 | 
			
		||||
@@ -499,20 +509,31 @@ my %table=(
 | 
			
		||||
"VC-MSDOS","cl:::(unknown):MSDOS::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT:::",
 | 
			
		||||
 | 
			
		||||
# Borland C++ 4.5
 | 
			
		||||
"BC-32","bcc32::::WIN32::BN_LLONG DES_PTR RC4_INDEX::::::::::win32",
 | 
			
		||||
"BC-32","bcc32::::WIN32::BN_LLONG DES_PTR RC4_INDEX EXPORT_VAR_AS_FN::::::::::win32",
 | 
			
		||||
"BC-16","bcc:::(unknown):WIN16::BN_LLONG DES_PTR RC4_INDEX SIXTEEN_BIT:::",
 | 
			
		||||
 | 
			
		||||
# Mingw32
 | 
			
		||||
# (Note: the real CFLAGS for Windows builds are defined by util/mk1mf.pl
 | 
			
		||||
# and its library files in util/pl/*)
 | 
			
		||||
"Mingw32", "gcc:-DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall:::::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::win32",
 | 
			
		||||
# MinGW
 | 
			
		||||
"mingw", "gcc:-DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -mno-cygwin -Wall:::MINGW32:-mno-cygwin -lwsock32 -lgdi32:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}:win32::::.dll",
 | 
			
		||||
 | 
			
		||||
# UWIN 
 | 
			
		||||
"UWIN", "cc:-DTERMIOS -DL_ENDIAN -O -Wall:::UWIN::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::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}::::::::::win32",
 | 
			
		||||
"Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall:::CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::win32:cygwin-shared:::.dll",
 | 
			
		||||
"Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall:::CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}:win32:cygwin-shared:::.dll",
 | 
			
		||||
"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::::win32:cygwin-shared:::.dll",
 | 
			
		||||
 | 
			
		||||
# NetWare from David Ward (dsward@novell.com) - requires MetroWerks NLM development tools
 | 
			
		||||
# netware-clib => legacy CLib c-runtime support
 | 
			
		||||
"netware-clib", "mwccnlm:::::${x86_gcc_opts}:::",
 | 
			
		||||
# netware-libc => LibC/NKS support
 | 
			
		||||
"netware-libc", "mwccnlm:::::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}::::::::::",
 | 
			
		||||
 | 
			
		||||
# Ultrix from Bernhard Simon <simon@zid.tuwien.ac.at>
 | 
			
		||||
"ultrix-cc","cc:-std1 -O -Olimit 1000 -DL_ENDIAN::(unknown):::::::",
 | 
			
		||||
"ultrix-cc","cc:-std1 -O -Olimit 2500 -DL_ENDIAN::(unknown):::::::",
 | 
			
		||||
"ultrix-gcc","gcc:-O3 -DL_ENDIAN::(unknown):::::::",
 | 
			
		||||
# K&R C is no longer supported; you need gcc on old Ultrix installations
 | 
			
		||||
##"ultrix","cc:-O2 -DNOPROTO -DNOCONST -DL_ENDIAN::(unknown):::::::",
 | 
			
		||||
@@ -525,15 +546,18 @@ my %table=(
 | 
			
		||||
"OpenBSD-m88k",		"gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"OpenBSD-mips",		"gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"OpenBSD-powerpc",	"gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"OpenBSD-sparc",	"gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"OpenBSD-sparc64",	"gcc:-DB_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer::(unknown):::SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2 BF_PTR::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"OpenBSD-sparc",	"gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL::asm/des_enc-sparc.o fcrypt_b.o::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"OpenBSD-sparc64",	"gcc:-DB_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer::(unknown):::SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2 BF_PTR::asm/des_enc-sparc.o fcrypt_b.o::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"OpenBSD-vax",		"gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"OpenBSD-hppa",		"gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"OpenBSD-hppa",		"gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
##### MacOS X (a.k.a. Rhapsody or Darwin) setup
 | 
			
		||||
"rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown):MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
 | 
			
		||||
"darwin-ppc-cc","cc:-O3 -nostdinc -I/System/Library/Frameworks/System.framework/Headers -I/System/Library/Frameworks/System.frameworks/Headers/bsd -I/usr/include -fomit-frame-pointer -Wall -DB_ENDIAN::(unknown):MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::::::::::darwin-shared:-fPIC:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin-i386-cc","cc:-O3 -nostdinc -I/System/Library/Frameworks/System.framework/Headers -I/System/Library/Frameworks/System.frameworks/Headers/bsd -I/usr/include -fomit-frame-pointer -Wall -DB_ENDIAN::(unknown):MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::::::::::::-fPIC",
 | 
			
		||||
"rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown):MACOSX_RHAPSODY::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
 | 
			
		||||
"darwin-ppc-cc","cc:-O3 -fomit-frame-pointer -fno-common -DB_ENDIAN::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::::::::::darwin-shared:-fPIC::.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin-i386-cc","cc:-O3 -fomit-frame-pointer -fno-common -DB_ENDIAN::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::::::::::darwin-shared:-fPIC::.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
 | 
			
		||||
##### A/UX
 | 
			
		||||
"aux3-gcc","gcc:-O2 -DTERMIO::(unknown):AUX:-lbsd:RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
 | 
			
		||||
 | 
			
		||||
##### Sony NEWS-OS 4.x
 | 
			
		||||
"newsos4-gcc","gcc:-O -DB_ENDIAN::(unknown):NEWS4:-lmld -liberty:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::",
 | 
			
		||||
@@ -546,11 +570,18 @@ my %table=(
 | 
			
		||||
 | 
			
		||||
##### VxWorks for various targets
 | 
			
		||||
"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::::::::::::::::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:::",
 | 
			
		||||
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
my @WinTargets=qw(VC-NT VC-WIN32 VC-WIN16 VC-W31-16 VC-W31-32 VC-MSDOS BC-32
 | 
			
		||||
	BC-16 Mingw32 OS2-EMX);
 | 
			
		||||
my @MK1MF_Builds=qw(VC-NT VC-CE VC-WIN32 VC-WIN16 VC-W31-16 VC-W31-32 VC-MSDOS
 | 
			
		||||
	BC-32 BC-16 Mingw32 OS2-EMX netware-clib netware-libc);
 | 
			
		||||
 | 
			
		||||
my $idx = 0;
 | 
			
		||||
my $idx_cc = $idx++;
 | 
			
		||||
@@ -575,6 +606,7 @@ my $idx_shared_cflag = $idx++;
 | 
			
		||||
my $idx_shared_ldflag = $idx++;
 | 
			
		||||
my $idx_shared_extension = $idx++;
 | 
			
		||||
my $idx_ranlib = $idx++;
 | 
			
		||||
my $idx_arflags = $idx++;
 | 
			
		||||
 | 
			
		||||
my $prefix="";
 | 
			
		||||
my $openssldir="";
 | 
			
		||||
@@ -632,9 +664,11 @@ my $openssl_thread_defines;
 | 
			
		||||
my $openssl_sys_defines="";
 | 
			
		||||
my $openssl_other_defines;
 | 
			
		||||
my $libs;
 | 
			
		||||
my $libkrb5="";
 | 
			
		||||
my $target;
 | 
			
		||||
my $options;
 | 
			
		||||
my $symlink;
 | 
			
		||||
my $make_depend=0;
 | 
			
		||||
my %withargs=();
 | 
			
		||||
 | 
			
		||||
my @argvcopy=@ARGV;
 | 
			
		||||
@@ -668,19 +702,24 @@ PROCESS_ARGS:
 | 
			
		||||
		elsif (/^no-asm$/)
 | 
			
		||||
		 	{
 | 
			
		||||
			$no_asm=1;
 | 
			
		||||
			$flags .= "-DOPENSSL_NO_ASM ";
 | 
			
		||||
			#$flags .= "-DOPENSSL_NO_ASM ";
 | 
			
		||||
			$openssl_other_defines .= "#define OPENSSL_NO_ASM\n";
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^no-err$/)
 | 
			
		||||
		 	{
 | 
			
		||||
			$flags .= "-DOPENSSL_NO_ERR ";
 | 
			
		||||
			$openssl_other_defines .= "#define OPENSSL_NO_ERR\n";
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^no-hw-(.+)$/)
 | 
			
		||||
			{
 | 
			
		||||
			my $hw=$1;
 | 
			
		||||
			$hw =~ tr/[a-z]/[A-Z]/;
 | 
			
		||||
			$flags .= "-DOPENSSL_NO_HW_$hw ";
 | 
			
		||||
			#$flags .= "-DOPENSSL_NO_HW_$hw ";
 | 
			
		||||
			$openssl_other_defines .= "#define OPENSSL_NO_HW_$hw\n";
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^no-hw$/)
 | 
			
		||||
			{
 | 
			
		||||
			$flags .= "-DOPENSSL_NO_HW ";
 | 
			
		||||
			#$flags .= "-DOPENSSL_NO_HW ";
 | 
			
		||||
			$openssl_other_defines .= "#define OPENSSL_NO_HW\n";
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^no-dso$/)
 | 
			
		||||
@@ -693,7 +732,7 @@ PROCESS_ARGS:
 | 
			
		||||
			{ $threads=1; }
 | 
			
		||||
		elsif (/^no-shared$/)
 | 
			
		||||
			{ $no_shared=1; }
 | 
			
		||||
		elsif (/^shared$/)
 | 
			
		||||
		elsif (/^shared$/ || /^-shared$/ || /^--shared$/)
 | 
			
		||||
			{ $no_shared=0; }
 | 
			
		||||
		elsif (/^no-zlib$/)
 | 
			
		||||
			{ $zlib=0; }
 | 
			
		||||
@@ -716,24 +755,38 @@ PROCESS_ARGS:
 | 
			
		||||
			my $algo=$1;
 | 
			
		||||
			push @skip,$algo;
 | 
			
		||||
			$algo =~ tr/[a-z]/[A-Z]/;
 | 
			
		||||
			$flags .= "-DOPENSSL_NO_$algo ";
 | 
			
		||||
			$depflags .= "-DOPENSSL_NO_$algo ";
 | 
			
		||||
			#$flags .= "-DOPENSSL_NO_$algo ";
 | 
			
		||||
			#$depflags .= "-DOPENSSL_NO_$algo ";
 | 
			
		||||
			$openssl_algorithm_defines .= "#define OPENSSL_NO_$algo\n";
 | 
			
		||||
			if ($algo eq "RIJNDAEL")
 | 
			
		||||
				{
 | 
			
		||||
				$flags .= "-DOPENSSL_NO_AES ";
 | 
			
		||||
				$depflags .= "-DOPENSSL_NO_AES ";
 | 
			
		||||
				push @skip, "aes";
 | 
			
		||||
				#$flags .= "-DOPENSSL_NO_AES ";
 | 
			
		||||
				#$depflags .= "-DOPENSSL_NO_AES ";
 | 
			
		||||
				$openssl_algorithm_defines .= "#define OPENSSL_NO_AES\n";
 | 
			
		||||
				}
 | 
			
		||||
			if ($algo eq "DES")
 | 
			
		||||
				{
 | 
			
		||||
				push @skip, "mdc2";
 | 
			
		||||
				$options .= " no-mdc2";
 | 
			
		||||
				$flags .= "-DOPENSSL_NO_MDC2 ";
 | 
			
		||||
				$depflags .= "-DOPENSSL_NO_MDC2 ";
 | 
			
		||||
				#$flags .= "-DOPENSSL_NO_MDC2 ";
 | 
			
		||||
				#$depflags .= "-DOPENSSL_NO_MDC2 ";
 | 
			
		||||
				$openssl_algorithm_defines .= "#define OPENSSL_NO_MDC2\n";
 | 
			
		||||
				}
 | 
			
		||||
			if ($algo eq "EC" || $algo eq "SHA" || $algo eq "SHA1")
 | 
			
		||||
			if ($algo eq "EC")
 | 
			
		||||
				{
 | 
			
		||||
				push @skip, "ecdsa";
 | 
			
		||||
				push @skip, "ecdh";
 | 
			
		||||
				$options .= " no-ecdsa";
 | 
			
		||||
				$options .= " no-ecdh";
 | 
			
		||||
				$flags .= "-DOPENSSL_NO_ECDSA ";
 | 
			
		||||
				$flags .= "-DOPENSSL_NO_ECDH ";
 | 
			
		||||
				$depflags .= "-DOPENSSL_NO_ECDSA ";
 | 
			
		||||
				$depflags .= "-DOPENSSL_NO_ECDH ";
 | 
			
		||||
				$openssl_algorithm_defines .= "#define OPENSSL_NO_ECDSA\n";
 | 
			
		||||
				$openssl_algorithm_defines .= "#define OPENSSL_NO_ECDH\n";
 | 
			
		||||
				}
 | 
			
		||||
			if ($algo eq "SHA" || $algo eq "SHA1")
 | 
			
		||||
				{
 | 
			
		||||
				push @skip, "ecdsa";
 | 
			
		||||
				$options .= " no-ecdsa";
 | 
			
		||||
@@ -853,24 +906,24 @@ $no_tls1=1 if ($no_dh);
 | 
			
		||||
if ($no_ssl2)
 | 
			
		||||
	{
 | 
			
		||||
	push @skip,"SSL2";
 | 
			
		||||
	$flags .= "-DOPENSSL_NO_SSL2 ";
 | 
			
		||||
	$depflags .= "-DOPENSSL_NO_SSL2 ";
 | 
			
		||||
	#$flags .= "-DOPENSSL_NO_SSL2 ";
 | 
			
		||||
	#$depflags .= "-DOPENSSL_NO_SSL2 ";
 | 
			
		||||
	$openssl_algorithm_defines .= "#define OPENSSL_NO_SSL2\n";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if ($no_ssl3)
 | 
			
		||||
	{
 | 
			
		||||
	push @skip,"SSL3";
 | 
			
		||||
	$flags .= "-DOPENSSL_NO_SSL3 ";
 | 
			
		||||
	$depflags .= "-DOPENSSL_NO_SSL3 ";
 | 
			
		||||
	#$flags .= "-DOPENSSL_NO_SSL3 ";
 | 
			
		||||
	#$depflags .= "-DOPENSSL_NO_SSL3 ";
 | 
			
		||||
	$openssl_algorithm_defines .= "#define OPENSSL_NO_SSL3\n";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if ($no_tls1)
 | 
			
		||||
	{
 | 
			
		||||
	push @skip,"TLS1";
 | 
			
		||||
	$flags .= "-DOPENSSL_NO_TLS1 ";
 | 
			
		||||
	$depflags .= "-DOPENSSL_NO_TLS1 ";
 | 
			
		||||
	#$flags .= "-DOPENSSL_NO_TLS1 ";
 | 
			
		||||
	#$depflags .= "-DOPENSSL_NO_TLS1 ";
 | 
			
		||||
	$openssl_algorithm_defines .= "#define OPENSSL_NO_TLS1\n";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -897,9 +950,10 @@ print "Configuring for $target\n";
 | 
			
		||||
 | 
			
		||||
&usage if (!defined($table{$target}));
 | 
			
		||||
 | 
			
		||||
my $IsWindows=scalar grep /^$target$/,@WinTargets;
 | 
			
		||||
my $IsMK1MF=scalar grep /^$target$/,@MK1MF_Builds;
 | 
			
		||||
 | 
			
		||||
$exe_ext=".exe" if ($target eq "Cygwin");
 | 
			
		||||
$exe_ext=".exe" if ($target eq "DJGPP");
 | 
			
		||||
$openssldir="/usr/local/ssl" if ($openssldir eq "" and $prefix eq "");
 | 
			
		||||
$prefix=$openssldir if $prefix eq "";
 | 
			
		||||
 | 
			
		||||
@@ -907,10 +961,10 @@ chop $openssldir if $openssldir =~ /\/$/;
 | 
			
		||||
chop $prefix if $prefix =~ /\/$/;
 | 
			
		||||
 | 
			
		||||
$openssldir=$prefix . "/ssl" if $openssldir eq "";
 | 
			
		||||
$openssldir=$prefix . "/" . $openssldir if $openssldir !~ /^\//;
 | 
			
		||||
$openssldir=$prefix . "/" . $openssldir if $openssldir !~ /(^\/|^[a-zA-Z]:[\\\/])/;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
print "IsWindows=$IsWindows\n";
 | 
			
		||||
print "IsMK1MF=$IsMK1MF\n";
 | 
			
		||||
 | 
			
		||||
my @fields = split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
 | 
			
		||||
my $cc = $fields[$idx_cc];
 | 
			
		||||
@@ -935,6 +989,9 @@ my $shared_cflag = $fields[$idx_shared_cflag];
 | 
			
		||||
my $shared_ldflag = $fields[$idx_shared_ldflag];
 | 
			
		||||
my $shared_extension = $fields[$idx_shared_extension];
 | 
			
		||||
my $ranlib = $fields[$idx_ranlib];
 | 
			
		||||
my $arflags = $fields[$idx_arflags];
 | 
			
		||||
 | 
			
		||||
my $no_shared_warn=0;
 | 
			
		||||
 | 
			
		||||
$cflags="$flags$cflags" if ($flags ne "");
 | 
			
		||||
 | 
			
		||||
@@ -944,7 +1001,7 @@ if ($no_krb5
 | 
			
		||||
	|| !defined($withargs{"krb5-flavor"})
 | 
			
		||||
	|| $withargs{"krb5-flavor"} eq "")
 | 
			
		||||
	{
 | 
			
		||||
	$cflags="-DOPENSSL_NO_KRB5 $cflags";
 | 
			
		||||
	#$cflags="-DOPENSSL_NO_KRB5 $cflags";
 | 
			
		||||
	$options.=" no-krb5" unless $no_krb5;
 | 
			
		||||
	$openssl_algorithm_defines .= "#define OPENSSL_NO_KRB5\n";
 | 
			
		||||
	}
 | 
			
		||||
@@ -953,6 +1010,17 @@ else
 | 
			
		||||
	my ($lresolv, $lpath, $lext);
 | 
			
		||||
	if ($withargs{"krb5-flavor"} =~ /^[Hh]eimdal$/)
 | 
			
		||||
		{
 | 
			
		||||
		die "Sorry, Heimdal is currently not supported\n";
 | 
			
		||||
		}
 | 
			
		||||
	##### HACK to force use of Heimdal.
 | 
			
		||||
	##### WARNING: Since we don't really have adequate support for Heimdal,
 | 
			
		||||
	#####          using this will break the build.  You'll have to make
 | 
			
		||||
	#####          changes to the source, and if you do, please send
 | 
			
		||||
	#####          patches to openssl-dev@openssl.org
 | 
			
		||||
	if ($withargs{"krb5-flavor"} =~ /^force-[Hh]eimdal$/)
 | 
			
		||||
		{
 | 
			
		||||
		warn "Heimdal isn't really supported.  Your build WILL break\n";
 | 
			
		||||
		warn "If you fix the problems, please send a patch to openssl-dev\@openssl.org\n";
 | 
			
		||||
		$withargs{"krb5-dir"} = "/usr/heimdal"
 | 
			
		||||
			if $withargs{"krb5-dir"} eq "";
 | 
			
		||||
		$withargs{"krb5-lib"} = "-L".$withargs{"krb5-dir"}.
 | 
			
		||||
@@ -985,7 +1053,7 @@ else
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	$withargs{"krb5-lib"} .= " -lresolv"
 | 
			
		||||
		if ("$lresolv");
 | 
			
		||||
		if ("$lresolv" ne "");
 | 
			
		||||
	$withargs{"krb5-include"} = "-I".$withargs{"krb5-dir"}."/include"
 | 
			
		||||
		if $withargs{"krb5-include"} eq "" &&
 | 
			
		||||
		   $withargs{"krb5-dir"} ne "";
 | 
			
		||||
@@ -1044,7 +1112,7 @@ else
 | 
			
		||||
#		}
 | 
			
		||||
	}	
 | 
			
		||||
 | 
			
		||||
$lflags="$libs$lflags"if ($libs ne "");
 | 
			
		||||
$lflags="$libs$lflags" if ($libs ne "");
 | 
			
		||||
 | 
			
		||||
if ($no_asm)
 | 
			
		||||
	{
 | 
			
		||||
@@ -1052,9 +1120,14 @@ if ($no_asm)
 | 
			
		||||
	$sha1_obj=$md5_obj=$rmd160_obj="";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if (!$no_shared)
 | 
			
		||||
	{
 | 
			
		||||
	$cast_obj="";	# CAST assembler is not PIC
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if ($threads)
 | 
			
		||||
	{
 | 
			
		||||
	$cflags=$thread_cflags;
 | 
			
		||||
	#$cflags=$thread_cflags;
 | 
			
		||||
	$openssl_thread_defines .= $thread_defines;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1062,30 +1135,38 @@ if ($zlib)
 | 
			
		||||
	{
 | 
			
		||||
	$cflags = "-DZLIB $cflags";
 | 
			
		||||
	$cflags = "-DZLIB_SHARED $cflags" if $zlib == 2;
 | 
			
		||||
	$lflags = "$lflags -lz" if $zlib == 2;
 | 
			
		||||
	$lflags = "$lflags -lz" if $zlib == 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# You will find shlib_mark1 and shlib_mark2 explained in Makefile.org
 | 
			
		||||
my $shared_mark = "";
 | 
			
		||||
if ($shared_target ne "")
 | 
			
		||||
if ($shared_target eq "")
 | 
			
		||||
	{
 | 
			
		||||
	$no_shared_warn = 1 if !$no_shared;
 | 
			
		||||
	$no_shared = 1;
 | 
			
		||||
	}
 | 
			
		||||
if (!$no_shared)
 | 
			
		||||
	{
 | 
			
		||||
	if ($shared_cflag ne "")
 | 
			
		||||
		{
 | 
			
		||||
		$cflags = "$shared_cflag $cflags";
 | 
			
		||||
		$cflags = "$shared_cflag -DOPENSSL_PIC $cflags";
 | 
			
		||||
		}
 | 
			
		||||
	if (!$no_shared)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if ($no_shared)
 | 
			
		||||
	{
 | 
			
		||||
		#$shared_mark = "\$(SHARED_LIBS)";
 | 
			
		||||
		}
 | 
			
		||||
	#$cflags="-DOPENSSL_NO_DYNAMIC_ENGINE $cflags";
 | 
			
		||||
	$openssl_other_defines.="#define OPENSSL_NO_DYNAMIC_ENGINE\n";
 | 
			
		||||
	}
 | 
			
		||||
else
 | 
			
		||||
	{
 | 
			
		||||
	$no_shared = 1;
 | 
			
		||||
	#$cflags="-DOPENSSL_NO_STATIC_ENGINE $cflags";
 | 
			
		||||
	$openssl_other_defines.="#define OPENSSL_NO_STATIC_ENGINE\n";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if ($sys_id ne "")
 | 
			
		||||
	{
 | 
			
		||||
	$cflags="-DOPENSSL_SYSNAME_$sys_id $cflags";
 | 
			
		||||
	#$cflags="-DOPENSSL_SYSNAME_$sys_id $cflags";
 | 
			
		||||
	$openssl_sys_defines="#define OPENSSL_SYSNAME_$sys_id\n";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1100,6 +1181,8 @@ if ($ranlib eq "")
 | 
			
		||||
#$bn_obj="$bn1";
 | 
			
		||||
 | 
			
		||||
$bn_obj = $bn_asm unless $bn_obj ne "";
 | 
			
		||||
# bn86* is the only one implementing bn_*_part_words
 | 
			
		||||
$cflags.=" -DOPENSSL_BN_ASM_PART_WORDS" if ($bn_obj =~ /bn86/);
 | 
			
		||||
 | 
			
		||||
$des_obj=$des_enc	unless ($des_obj =~ /\.o$/);
 | 
			
		||||
$bf_obj=$bf_enc		unless ($bf_obj =~ /\.o$/);
 | 
			
		||||
@@ -1122,7 +1205,12 @@ if ($rmd160_obj =~ /\.o$/)
 | 
			
		||||
	$cflags.=" -DRMD160_ASM";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# "Stringify" the C flags string.  This permits it to be made part of a string
 | 
			
		||||
# and works as well on command lines.
 | 
			
		||||
$cflags =~ s/([\\\"])/\\\1/g;
 | 
			
		||||
 | 
			
		||||
my $version = "unknown";
 | 
			
		||||
my $version_num = "unknown";
 | 
			
		||||
my $major = "unknown";
 | 
			
		||||
my $minor = "unknown";
 | 
			
		||||
my $shlib_version_number = "unknown";
 | 
			
		||||
@@ -1134,6 +1222,7 @@ open(IN,'<crypto/opensslv.h') || die "unable to read opensslv.h:$!\n";
 | 
			
		||||
while (<IN>)
 | 
			
		||||
	{
 | 
			
		||||
	$version=$1 if /OPENSSL.VERSION.TEXT.*OpenSSL (\S+) /;
 | 
			
		||||
	$version_num=$1 if /OPENSSL.VERSION.NUMBER.*0x(\S+)/;
 | 
			
		||||
	$shlib_version_number=$1 if /SHLIB_VERSION_NUMBER *"([^"]+)"/;
 | 
			
		||||
	$shlib_version_history=$1 if /SHLIB_VERSION_HISTORY *"([^"]*)"/;
 | 
			
		||||
	}
 | 
			
		||||
@@ -1153,7 +1242,8 @@ if ($shlib_version_number =~ /(^[0-9]*)\.([0-9\.]*)/)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
open(IN,'<Makefile.org') || die "unable to read Makefile.org:$!\n";
 | 
			
		||||
open(OUT,">$Makefile") || die "unable to create $Makefile:$!\n";
 | 
			
		||||
unlink("$Makefile.new") || die "unable to remove old $Makefile.new:$!\n" if -e "$Makefile.new";
 | 
			
		||||
open(OUT,">$Makefile.new") || die "unable to create $Makefile.new:$!\n";
 | 
			
		||||
print OUT "### Generated automatically from Makefile.org by Configure.\n\n";
 | 
			
		||||
my $sdirs=0;
 | 
			
		||||
while (<IN>)
 | 
			
		||||
@@ -1198,6 +1288,7 @@ while (<IN>)
 | 
			
		||||
	s/^RMD160_ASM_OBJ=.*$/RMD160_ASM_OBJ= $rmd160_obj/;
 | 
			
		||||
	s/^PROCESSOR=.*/PROCESSOR= $processor/;
 | 
			
		||||
	s/^RANLIB=.*/RANLIB= $ranlib/;
 | 
			
		||||
	s/^ARFLAGS=.*/ARFLAGS= $arflags/;
 | 
			
		||||
	s/^PERL=.*/PERL= $perl/;
 | 
			
		||||
	s/^KRB5_INCLUDES=.*/KRB5_INCLUDES=$withargs{"krb5-include"}/;
 | 
			
		||||
	s/^LIBKRB5=.*/LIBKRB5=$withargs{"krb5-lib"}/;
 | 
			
		||||
@@ -1207,18 +1298,28 @@ while (<IN>)
 | 
			
		||||
	if ($shared_extension ne "" && $shared_extension =~ /^\.s([ol])\.[^\.]*$/)
 | 
			
		||||
		{
 | 
			
		||||
		my $sotmp = $1;
 | 
			
		||||
		s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp/
 | 
			
		||||
		s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp/;
 | 
			
		||||
		}
 | 
			
		||||
	elsif ($shared_extension ne "" && $shared_extension =~ /^\.[^\.]*\.dylib$/)
 | 
			
		||||
		{
 | 
			
		||||
		s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.dylib/;
 | 
			
		||||
		}
 | 
			
		||||
	elsif ($shared_extension ne "" && $shared_extension =~ /^\.s([ol])\.[^\.]*\.[^\.]*$/)
 | 
			
		||||
		{
 | 
			
		||||
		my $sotmp = $1;
 | 
			
		||||
		s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp.\$(SHLIB_MAJOR) .s$sotmp/;
 | 
			
		||||
		}
 | 
			
		||||
	elsif ($shared_extension ne "" && $shared_extension =~ /^\.[^\.]*\.[^\.]*\.dylib$/)
 | 
			
		||||
		{
 | 
			
		||||
		s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.\$(SHLIB_MAJOR).dylib .dylib/;
 | 
			
		||||
		}
 | 
			
		||||
	s/^SHARED_LDFLAGS=.*/SHARED_LDFLAGS=$shared_ldflag/;
 | 
			
		||||
	print OUT $_."\n";
 | 
			
		||||
	}
 | 
			
		||||
close(IN);
 | 
			
		||||
close(OUT);
 | 
			
		||||
rename($Makefile,"$Makefile.bak") || die "unable to rename $Makefile\n" if -e $Makefile;
 | 
			
		||||
rename("$Makefile.new",$Makefile) || die "unable to rename $Makefile.new\n";
 | 
			
		||||
 | 
			
		||||
print "CC            =$cc\n";
 | 
			
		||||
print "CFLAG         =$cflags\n";
 | 
			
		||||
@@ -1234,11 +1335,10 @@ print "SHA1_OBJ_ASM  =$sha1_obj\n";
 | 
			
		||||
print "RMD160_OBJ_ASM=$rmd160_obj\n";
 | 
			
		||||
print "PROCESSOR     =$processor\n";
 | 
			
		||||
print "RANLIB        =$ranlib\n";
 | 
			
		||||
print "ARFLAGS       =$arflags\n";
 | 
			
		||||
print "PERL          =$perl\n";
 | 
			
		||||
print "KRB5_INCLUDES =",$withargs{"krb5-include"},"\n"
 | 
			
		||||
	if $withargs{"krb5-include"} ne "";
 | 
			
		||||
print "LIBKRB5       =",$withargs{"krb5-lib"},"\n"
 | 
			
		||||
	if $withargs{"krb5-lib"} ne "";
 | 
			
		||||
 | 
			
		||||
my $des_ptr=0;
 | 
			
		||||
my $des_risc1=0;
 | 
			
		||||
@@ -1289,7 +1389,8 @@ foreach (sort split(/\s+/,$bn_ops))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
open(IN,'<crypto/opensslconf.h.in') || die "unable to read crypto/opensslconf.h.in:$!\n";
 | 
			
		||||
open(OUT,'>crypto/opensslconf.h') || die "unable to create crypto/opensslconf.h:$!\n";
 | 
			
		||||
unlink("crypto/opensslconf.h.new") || die "unable to remove old crypto/opensslconf.h.new:$!\n" if -e "crypto/opensslconf.h.new";
 | 
			
		||||
open(OUT,'>crypto/opensslconf.h.new') || die "unable to create crypto/opensslconf.h.new:$!\n";
 | 
			
		||||
print OUT "/* opensslconf.h */\n";
 | 
			
		||||
print OUT "/* WARNING: Generated automatically from opensslconf.h.in by Configure. */\n\n";
 | 
			
		||||
 | 
			
		||||
@@ -1383,6 +1484,8 @@ while (<IN>)
 | 
			
		||||
	}
 | 
			
		||||
close(IN);
 | 
			
		||||
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";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Fix the date
 | 
			
		||||
@@ -1409,7 +1512,7 @@ print "RC2 uses u$type[$rc2_int]\n" if $rc2_int != $def_int;
 | 
			
		||||
print "BF_PTR used\n" if $bf_ptr == 1; 
 | 
			
		||||
print "BF_PTR2 used\n" if $bf_ptr == 2; 
 | 
			
		||||
 | 
			
		||||
if($IsWindows) {
 | 
			
		||||
if($IsMK1MF) {
 | 
			
		||||
	open (OUT,">crypto/buildinf.h") || die "Can't open buildinf.h";
 | 
			
		||||
	printf OUT <<EOF;
 | 
			
		||||
#ifndef MK1MF_BUILD
 | 
			
		||||
@@ -1422,11 +1525,13 @@ if($IsWindows) {
 | 
			
		||||
EOF
 | 
			
		||||
	close(OUT);
 | 
			
		||||
} else {
 | 
			
		||||
	(system "make -f Makefile.ssl PERL=\'$perl\' links") == 0 or exit $?
 | 
			
		||||
		if $symlink;
 | 
			
		||||
	### (system 'make depend') == 0 or exit $? if $depflags ne "";
 | 
			
		||||
	# Run "make depend" manually if you want to be able to delete
 | 
			
		||||
	# the source code files of ciphers you left out.
 | 
			
		||||
	my $make_command = "make -f Makefile.ssl PERL=\'$perl\'";
 | 
			
		||||
	my $make_targets = "";
 | 
			
		||||
	$make_targets .= " links" if $symlink;
 | 
			
		||||
	$make_targets .= " depend" if $depflags ne "" && $make_depend;
 | 
			
		||||
	$make_targets .= " gentests" if $symlink;
 | 
			
		||||
	(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("apps/der_chop",$perl,'^#!/', '#!%s');
 | 
			
		||||
@@ -1437,8 +1542,79 @@ EOF
 | 
			
		||||
	    &dofile("apps/der_chop",'/usr/local/bin/perl','^#!/', '#!%s');
 | 
			
		||||
	    &dofile("apps/CA.pl",'/usr/local/bin/perl','^#!/', '#!%s');
 | 
			
		||||
	}
 | 
			
		||||
	if ($depflags ne "" && !$make_depend) {
 | 
			
		||||
		print <<EOF;
 | 
			
		||||
 | 
			
		||||
Since you've disabled at least one algorithm, you need to do the following
 | 
			
		||||
before building:
 | 
			
		||||
 | 
			
		||||
	make depend
 | 
			
		||||
EOF
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# create the ms/version32.rc file if needed
 | 
			
		||||
if ($IsMK1MF) {
 | 
			
		||||
	my ($v1, $v2, $v3, $v4);
 | 
			
		||||
	if ($version_num =~ /(^[0-9a-f]{1})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i) {
 | 
			
		||||
		$v1=hex $1;
 | 
			
		||||
		$v2=hex $2;
 | 
			
		||||
		$v3=hex $3;
 | 
			
		||||
		$v4=hex $4;
 | 
			
		||||
	}
 | 
			
		||||
	open (OUT,">ms/version32.rc") || die "Can't open ms/version32.rc";
 | 
			
		||||
	print OUT <<EOF;
 | 
			
		||||
#include <winver.h>
 | 
			
		||||
 | 
			
		||||
LANGUAGE 0x09,0x01
 | 
			
		||||
 | 
			
		||||
1 VERSIONINFO
 | 
			
		||||
  FILEVERSION $v1,$v2,$v3,$v4
 | 
			
		||||
  PRODUCTVERSION $v1,$v2,$v3,$v4
 | 
			
		||||
  FILEFLAGSMASK 0x3fL
 | 
			
		||||
#ifdef _DEBUG
 | 
			
		||||
  FILEFLAGS 0x01L
 | 
			
		||||
#else
 | 
			
		||||
  FILEFLAGS 0x00L
 | 
			
		||||
#endif
 | 
			
		||||
  FILEOS VOS__WINDOWS32
 | 
			
		||||
  FILETYPE VFT_DLL
 | 
			
		||||
  FILESUBTYPE 0x0L
 | 
			
		||||
BEGIN
 | 
			
		||||
    BLOCK "StringFileInfo"
 | 
			
		||||
    BEGIN
 | 
			
		||||
	BLOCK "040904b0"
 | 
			
		||||
	BEGIN
 | 
			
		||||
	    // Required:	    
 | 
			
		||||
	    VALUE "CompanyName", "The OpenSSL Project, http://www.openssl.org/\\0"
 | 
			
		||||
	    VALUE "FileDescription", "OpenSSL Shared Library\\0"
 | 
			
		||||
	    VALUE "FileVersion", "$version\\0"
 | 
			
		||||
#if defined(CRYPTO)
 | 
			
		||||
	    VALUE "InternalName", "libeay32\\0"
 | 
			
		||||
	    VALUE "OriginalFilename", "libeay32.dll\\0"
 | 
			
		||||
#elif defined(SSL)
 | 
			
		||||
	    VALUE "InternalName", "ssleay32\\0"
 | 
			
		||||
	    VALUE "OriginalFilename", "ssleay32.dll\\0"
 | 
			
		||||
#endif
 | 
			
		||||
	    VALUE "ProductName", "The OpenSSL Toolkit\\0"
 | 
			
		||||
	    VALUE "ProductVersion", "$version\\0"
 | 
			
		||||
	    // Optional:
 | 
			
		||||
	    //VALUE "Comments", "\\0"
 | 
			
		||||
	    VALUE "LegalCopyright", "Copyright <20> 1998-2002 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"
 | 
			
		||||
	END
 | 
			
		||||
    END
 | 
			
		||||
    BLOCK "VarFileInfo"
 | 
			
		||||
    BEGIN
 | 
			
		||||
        VALUE "Translation", 0x409, 0x4b0
 | 
			
		||||
    END
 | 
			
		||||
END
 | 
			
		||||
EOF
 | 
			
		||||
	close(OUT);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
print <<EOF;
 | 
			
		||||
 | 
			
		||||
Configured for $target.
 | 
			
		||||
@@ -1451,6 +1627,16 @@ applications as the compiler options required on this system are not known.
 | 
			
		||||
See file INSTALL for details if you need multi-threading.
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
print <<\EOF if ($no_shared_warn);
 | 
			
		||||
 | 
			
		||||
You gave the option 'shared'.  Normally, that would give you shared libraries.
 | 
			
		||||
Unfortunately, the OpenSSL configuration doesn't include shared library support
 | 
			
		||||
for this platform yet, so it will pretend you gave the option 'no-shared'.  If
 | 
			
		||||
you can inform the developpers (openssl-dev\@openssl.org) how to support shared
 | 
			
		||||
libraries on this platform, they will at least look at it and try their best
 | 
			
		||||
(but please first make sure you have tried with a current version of OpenSSL).
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
exit(0);
 | 
			
		||||
 | 
			
		||||
sub usage
 | 
			
		||||
@@ -1527,7 +1713,7 @@ sub print_table_entry
 | 
			
		||||
	my $bn_ops,my $bn_obj,my $des_obj,my $bf_obj,
 | 
			
		||||
	my $md5_obj,my $sha1_obj,my $cast_obj,my $rc4_obj,my $rmd160_obj,
 | 
			
		||||
	my $rc5_obj,my $dso_scheme,my $shared_target,my $shared_cflag,
 | 
			
		||||
	my $shared_ldflag,my $shared_extension,my $ranlib)=
 | 
			
		||||
	my $shared_ldflag,my $shared_extension,my $ranlib,my $arflags)=
 | 
			
		||||
	split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
 | 
			
		||||
			
 | 
			
		||||
	print <<EOF
 | 
			
		||||
@@ -1555,6 +1741,7 @@ sub print_table_entry
 | 
			
		||||
\$shared_ldflag = $shared_ldflag
 | 
			
		||||
\$shared_extension = $shared_extension
 | 
			
		||||
\$ranlib       = $ranlib
 | 
			
		||||
\$arflags      = $arflags
 | 
			
		||||
EOF
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										219
									
								
								FAQ
									
									
									
									
									
								
							
							
						
						
									
										219
									
								
								FAQ
									
									
									
									
									
								
							@@ -9,6 +9,7 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* Where can I get a compiled version of OpenSSL?
 | 
			
		||||
* Why aren't tools like 'autoconf' and 'libtool' used?
 | 
			
		||||
* What is an 'engine' version?
 | 
			
		||||
* How do I check the authenticity of the OpenSSL distribution?
 | 
			
		||||
 | 
			
		||||
[LEGAL] Legal questions
 | 
			
		||||
 | 
			
		||||
@@ -29,15 +30,22 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* Why can't I use OpenSSL certificates with SSL client authentication?
 | 
			
		||||
* Why does my browser give a warning about a mismatched hostname?
 | 
			
		||||
* How do I install a CA certificate into a browser?
 | 
			
		||||
* Why is OpenSSL x509 DN output not conformant to RFC2253?
 | 
			
		||||
 | 
			
		||||
[BUILD] Questions about building and testing OpenSSL
 | 
			
		||||
 | 
			
		||||
* Why does the linker complain about undefined symbols?
 | 
			
		||||
* Why does the OpenSSL test fail with "bc: command not found"?
 | 
			
		||||
* Why does the OpenSSL test fail with "bc: 1 no implemented"?
 | 
			
		||||
* Why does the OpenSSL test fail with "bc: stack empty"?
 | 
			
		||||
* Why does the OpenSSL compilation fail on Alpha Tru64 Unix?
 | 
			
		||||
* Why does the OpenSSL compilation fail with "ar: command not found"?
 | 
			
		||||
* Why does the OpenSSL compilation fail on Win32 with VC++?
 | 
			
		||||
* What is special about OpenSSL on Redhat?
 | 
			
		||||
* Why does the OpenSSL compilation fail on MacOS X?
 | 
			
		||||
* Why does the OpenSSL test suite fail on MacOS X?
 | 
			
		||||
* Why does the OpenSSL test suite fail in BN_sqr test [on a 64-bit platform]?
 | 
			
		||||
* Why does OpenBSD-i386 build fail on des-586.s with "Unimplemented segment type"?
 | 
			
		||||
 | 
			
		||||
[PROG] Questions about programming with OpenSSL
 | 
			
		||||
 | 
			
		||||
@@ -51,6 +59,7 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* Why can't the OpenSSH configure script detect OpenSSL?
 | 
			
		||||
* Can I use OpenSSL's SSL library with non-blocking I/O?
 | 
			
		||||
* Why doesn't my server application receive a client certificate?
 | 
			
		||||
* Why does compilation fail due to an undefined symbol NID_uniqueIdentifier?
 | 
			
		||||
 | 
			
		||||
===============================================================================
 | 
			
		||||
 | 
			
		||||
@@ -59,7 +68,7 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* Which is the current version of OpenSSL?
 | 
			
		||||
 | 
			
		||||
The current version is available from <URL: http://www.openssl.org>.
 | 
			
		||||
OpenSSL 0.9.6c was released on December 21st, 2001.
 | 
			
		||||
OpenSSL 0.9.7c was released on September 30, 2003.
 | 
			
		||||
 | 
			
		||||
In addition to the current stable release, you can also access daily
 | 
			
		||||
snapshots of the OpenSSL development version at <URL:
 | 
			
		||||
@@ -107,11 +116,14 @@ 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 .
 | 
			
		||||
 | 
			
		||||
Some applications that use OpenSSL are distributed in binary form.
 | 
			
		||||
When using such an application, you don't need to install OpenSSL
 | 
			
		||||
yourself; the application will include the required parts (e.g. DLLs).
 | 
			
		||||
 | 
			
		||||
If you want to install OpenSSL on a Windows system and you don't have
 | 
			
		||||
If you want to build OpenSSL on a Windows system and you don't have
 | 
			
		||||
a C compiler, read the "Mingw32" section of INSTALL.W32 for information
 | 
			
		||||
on how to obtain and install the free GNU C compiler.
 | 
			
		||||
 | 
			
		||||
@@ -130,6 +142,19 @@ hardware. This was realized in a special release '0.9.6-engine'. With
 | 
			
		||||
version 0.9.7 (not yet released) the changes were merged into the main
 | 
			
		||||
development line, so that the special release is no longer necessary.
 | 
			
		||||
 | 
			
		||||
* How do I check the authenticity of the OpenSSL distribution?
 | 
			
		||||
 | 
			
		||||
We provide MD5 digests and ASC signatures of each tarball.
 | 
			
		||||
Use MD5 to check that a tarball from a mirror site is identical:
 | 
			
		||||
 | 
			
		||||
   md5sum TARBALL | awk '{print $1;}' | cmp - TARBALL.md5
 | 
			
		||||
 | 
			
		||||
You can check authenticity using pgp or gpg. You need the OpenSSL team
 | 
			
		||||
member public key used to sign it (download it from a key server). Then
 | 
			
		||||
just do:
 | 
			
		||||
 | 
			
		||||
   pgp TARBALL.asc
 | 
			
		||||
 | 
			
		||||
[LEGAL] =======================================================================
 | 
			
		||||
 | 
			
		||||
* Do I need patent licenses to use OpenSSL?
 | 
			
		||||
@@ -167,18 +192,30 @@ for permission to use their software with OpenSSL.
 | 
			
		||||
 | 
			
		||||
Cryptographic software needs a source of unpredictable data to work
 | 
			
		||||
correctly.  Many open source operating systems provide a "randomness
 | 
			
		||||
device" that serves this purpose.  On other systems, applications have
 | 
			
		||||
to call the RAND_add() or RAND_seed() function with appropriate data
 | 
			
		||||
before generating keys or performing public key encryption.
 | 
			
		||||
(These functions initialize the pseudo-random number generator, PRNG.)
 | 
			
		||||
device" (/dev/urandom or /dev/random) that serves this purpose.
 | 
			
		||||
All OpenSSL versions try to use /dev/urandom by default; starting with
 | 
			
		||||
version 0.9.7, OpenSSL also tries /dev/random if /dev/urandom is not
 | 
			
		||||
available.
 | 
			
		||||
 | 
			
		||||
Some broken applications do not do this.  As of version 0.9.5, the
 | 
			
		||||
OpenSSL functions that need randomness report an error if the random
 | 
			
		||||
number generator has not been seeded with at least 128 bits of
 | 
			
		||||
randomness.  If this error occurs, please contact the author of the
 | 
			
		||||
application you are using.  It is likely that it never worked
 | 
			
		||||
correctly.  OpenSSL 0.9.5 and later make the error visible by refusing
 | 
			
		||||
to perform potentially insecure encryption.
 | 
			
		||||
On other systems, applications have to call the RAND_add() or
 | 
			
		||||
RAND_seed() function with appropriate data before generating keys or
 | 
			
		||||
performing public key encryption. (These functions initialize the
 | 
			
		||||
pseudo-random number generator, PRNG.)  Some broken applications do
 | 
			
		||||
not do this.  As of version 0.9.5, the OpenSSL functions that need
 | 
			
		||||
randomness report an error if the random number generator has not been
 | 
			
		||||
seeded with at least 128 bits of randomness.  If this error occurs and
 | 
			
		||||
is not discussed in the documentation of the application you are
 | 
			
		||||
using, please contact the author of that application; it is likely
 | 
			
		||||
that it never worked correctly.  OpenSSL 0.9.5 and later make the
 | 
			
		||||
error visible by refusing to perform potentially insecure encryption.
 | 
			
		||||
 | 
			
		||||
If you are using Solaris 8, you can add /dev/urandom and /dev/random
 | 
			
		||||
devices by installing patch 112438 (Sparc) or 112439 (x86), which are
 | 
			
		||||
available via the Patchfinder at <URL: http://sunsolve.sun.com>
 | 
			
		||||
(Solaris 9 includes these devices by default). For /dev/random support
 | 
			
		||||
for earlier Solaris versions, see Sun's statement at
 | 
			
		||||
<URL: http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsrdb/27606&zone_32=SUNWski>
 | 
			
		||||
(the SUNWski package is available in patch 105710).
 | 
			
		||||
 | 
			
		||||
On systems without /dev/urandom and /dev/random, it is a good idea to
 | 
			
		||||
use the Entropy Gathering Demon (EGD); see the RAND_egd() manpage for
 | 
			
		||||
@@ -211,13 +248,6 @@ OpenSSL command line tools. Applications using the OpenSSL library
 | 
			
		||||
provide their own configuration options to specify the entropy source,
 | 
			
		||||
please check out the documentation coming the with application.
 | 
			
		||||
 | 
			
		||||
For Solaris 2.6, Tim Nibbe <tnibbe@sprint.net> and others have suggested
 | 
			
		||||
installing the SUNski package from Sun patch 105710-01 (Sparc) which
 | 
			
		||||
adds a /dev/random device and make sure it gets used, usually through
 | 
			
		||||
$RANDFILE.  There are probably similar patches for the other Solaris
 | 
			
		||||
versions.  However, be warned that /dev/random is usually a blocking
 | 
			
		||||
device, which may have some effects on OpenSSL.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why do I get an "unable to write 'random state'" error message?
 | 
			
		||||
 | 
			
		||||
@@ -343,6 +373,13 @@ DO NOT DO THIS! This command will give away your CAs private key and
 | 
			
		||||
reduces its security to zero: allowing anyone to forge certificates in
 | 
			
		||||
whatever name they choose.
 | 
			
		||||
 | 
			
		||||
* Why is OpenSSL x509 DN output not conformant to RFC2253?
 | 
			
		||||
 | 
			
		||||
The ways to print out the oneline format of the DN (Distinguished Name) have
 | 
			
		||||
been extended in version 0.9.7 of OpenSSL. Using the new X509_NAME_print_ex()
 | 
			
		||||
interface, the "-nameopt" option could be introduded. See the manual
 | 
			
		||||
page of the "openssl x509" commandline tool for details. The old behaviour
 | 
			
		||||
has however been left as default for the sake of compatibility.
 | 
			
		||||
 | 
			
		||||
[BUILD] =======================================================================
 | 
			
		||||
 | 
			
		||||
@@ -387,6 +424,17 @@ and compile/install it.  GNU bc (see http://www.gnu.org/software/software.html
 | 
			
		||||
for download instructions) can be safely used, for example.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does the OpenSSL test fail with "bc: stack empty"?
 | 
			
		||||
 | 
			
		||||
On some DG/ux versions, bc seems to have a too small stack for calculations
 | 
			
		||||
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
 | 
			
		||||
for download instructions) can be safely used, for example.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does the OpenSSL compilation fail on Alpha Tru64 Unix?
 | 
			
		||||
 | 
			
		||||
On some Alpha installations running Tru64 Unix and Compaq C, the compilation
 | 
			
		||||
@@ -445,12 +493,104 @@ and then redo the compilation.  What you should really do is make sure
 | 
			
		||||
Sometimes, you may get reports from VC++ command line (cl) that it
 | 
			
		||||
can't find standard include files like stdio.h and other weirdnesses.
 | 
			
		||||
One possible cause is that the environment isn't correctly set up.
 | 
			
		||||
To solve that problem, one should run VCVARS32.BAT which is found in
 | 
			
		||||
the 'bin' subdirectory of the VC++ installation directory (somewhere
 | 
			
		||||
under 'Program Files').  This needs to be done prior to running NMAKE,
 | 
			
		||||
and the changes are only valid for the current DOS session.
 | 
			
		||||
To solve that problem for VC++ versions up to 6, one should run
 | 
			
		||||
VCVARS32.BAT which is found in the 'bin' subdirectory of the VC++
 | 
			
		||||
installation directory (somewhere under 'Program Files').  For VC++
 | 
			
		||||
version 7 (and up?), which is also called VS.NET, the file is called
 | 
			
		||||
VSVARS32.BAT instead.
 | 
			
		||||
This needs to be done prior to running NMAKE, and the changes are only
 | 
			
		||||
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.
 | 
			
		||||
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
 | 
			
		||||
/usr/bin on your Red Hat machine. Several packages depend on this file,
 | 
			
		||||
including sendmail and ssh. /usr/local/bin is a good alternative choice. The
 | 
			
		||||
libraries that come with Red Hat 7.0 onwards have different names and so are
 | 
			
		||||
not affected. (eg For Red Hat 7.2 they are /lib/libssl.so.0.9.6b and
 | 
			
		||||
/lib/libcrypto.so.0.9.6b with symlinks /lib/libssl.so.2 and
 | 
			
		||||
/lib/libcrypto.so.2 respectively).
 | 
			
		||||
 | 
			
		||||
Please note that we have been advised by Red Hat attempting to recompile the
 | 
			
		||||
openssl rpm with all the cryptography enabled will not work. All other
 | 
			
		||||
packages depend on the original Red Hat supplied openssl package. It is also
 | 
			
		||||
worth noting that due to the way Red Hat supplies its packages, updates to
 | 
			
		||||
openssl on each distribution never change the package version, only the
 | 
			
		||||
build number. For example, on Red Hat 7.1, the latest openssl package has
 | 
			
		||||
version number 0.9.6 and build number 9 even though it contains all the
 | 
			
		||||
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?
 | 
			
		||||
 | 
			
		||||
If the failure happens when trying to build the "openssl" binary, with
 | 
			
		||||
a large number of undefined symbols, it's very probable that you have
 | 
			
		||||
OpenSSL 0.9.6b delivered with the operating system (you can find out by
 | 
			
		||||
running '/usr/bin/openssl version') and that you were trying to build
 | 
			
		||||
OpenSSL 0.9.7 or newer.  The problem is that the loader ('ld') in
 | 
			
		||||
MacOS X has a misfeature that's quite difficult to go around.
 | 
			
		||||
Look in the file PROBLEMS for a more detailed explanation and for possible
 | 
			
		||||
solutions.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does the OpenSSL test suite fail on MacOS X?
 | 
			
		||||
 | 
			
		||||
If the failure happens when running 'make test' and the RC4 test fails,
 | 
			
		||||
it's very probable that you have OpenSSL 0.9.6b delivered with the
 | 
			
		||||
operating system (you can find out by running '/usr/bin/openssl version')
 | 
			
		||||
and that you were trying to build OpenSSL 0.9.6d.  The problem is that
 | 
			
		||||
the loader ('ld') in MacOS X has a misfeature that's quite difficult to
 | 
			
		||||
go around and has linked the programs "openssl" and the test programs
 | 
			
		||||
with /usr/lib/libcrypto.dylib and /usr/lib/libssl.dylib instead of the
 | 
			
		||||
libraries you just built.
 | 
			
		||||
Look in the file PROBLEMS for a more detailed explanation and for possible
 | 
			
		||||
solutions.
 | 
			
		||||
 | 
			
		||||
* Why does the OpenSSL test suite fail in BN_sqr test [on a 64-bit platform]?
 | 
			
		||||
 | 
			
		||||
Failure in BN_sqr test is most likely caused by a failure to configure the
 | 
			
		||||
toolkit for current platform or lack of support for the platform in question.
 | 
			
		||||
Run './config -t' and './apps/openssl version -p'. Do these platform
 | 
			
		||||
identifiers match? If they don't, then you most likely failed to run
 | 
			
		||||
./config and you're hereby advised to do so before filing a bug report.
 | 
			
		||||
If ./config itself fails to run, then it's most likely problem with your
 | 
			
		||||
local environment and you should turn to your system administrator (or
 | 
			
		||||
similar). If identifiers match (and/or no alternative identifier is
 | 
			
		||||
suggested by ./config script), then the platform is unsupported. There might
 | 
			
		||||
or might not be a workaround. Most notably on SPARC64 platforms with GNU
 | 
			
		||||
C compiler you should be able to produce a working build by running
 | 
			
		||||
'./config -m32'. I understand that -m32 might not be what you want/need,
 | 
			
		||||
but the build should be operational. For further details turn to
 | 
			
		||||
<openssl-dev@openssl.org>.
 | 
			
		||||
 | 
			
		||||
* Why does OpenBSD-i386 build fail on des-586.s with "Unimplemented segment type"?
 | 
			
		||||
 | 
			
		||||
As of 0.9.7 assembler routines were overhauled for position independence
 | 
			
		||||
of the machine code, which is essential for shared library support. For
 | 
			
		||||
some reason OpenBSD is equipped with an out-of-date GNU assembler which
 | 
			
		||||
finds the new code offensive. To work around the problem, configure with
 | 
			
		||||
no-asm (and sacrifice a great deal of performance) or patch your assembler
 | 
			
		||||
according to <URL: http://www.openssl.org/~appro/gas-1.92.3.OpenBSD.patch>.
 | 
			
		||||
For your convenience a pre-compiled replacement binary is provided at
 | 
			
		||||
<URL: http://www.openssl.org/~appro/gas-1.92.3.static.aout.bin>.
 | 
			
		||||
Reportedly elder *BSD a.out platforms also suffer from this problem and
 | 
			
		||||
remedy should be same. Provided binary is statically linked and should be
 | 
			
		||||
working across wider range of *BSD branches, not just OpenBSD.
 | 
			
		||||
 | 
			
		||||
[PROG] ========================================================================
 | 
			
		||||
 | 
			
		||||
* Is OpenSSL thread-safe?
 | 
			
		||||
@@ -509,26 +649,26 @@ built OpenSSL with /MD your application must use /MD and cannot use /MDd.
 | 
			
		||||
* How do I read or write a DER encoded buffer using the ASN1 functions?
 | 
			
		||||
 | 
			
		||||
You have two options. You can either use a memory BIO in conjunction
 | 
			
		||||
with the i2d_XXX_bio() or d2i_XXX_bio() functions or you can use the
 | 
			
		||||
i2d_XXX(), d2i_XXX() functions directly. Since these are often the
 | 
			
		||||
with the i2d_*_bio() or d2i_*_bio() functions or you can use the
 | 
			
		||||
i2d_*(), d2i_*() functions directly. Since these are often the
 | 
			
		||||
cause of grief here are some code fragments using PKCS7 as an example:
 | 
			
		||||
 | 
			
		||||
unsigned char *buf, *p;
 | 
			
		||||
int len;
 | 
			
		||||
 unsigned char *buf, *p;
 | 
			
		||||
 int len;
 | 
			
		||||
 | 
			
		||||
len = i2d_PKCS7(p7, NULL);
 | 
			
		||||
buf = OPENSSL_malloc(len); /* or Malloc, error checking omitted */
 | 
			
		||||
p = buf;
 | 
			
		||||
i2d_PKCS7(p7, &p);
 | 
			
		||||
 len = i2d_PKCS7(p7, NULL);
 | 
			
		||||
 buf = OPENSSL_malloc(len); /* or Malloc, error checking omitted */
 | 
			
		||||
 p = buf;
 | 
			
		||||
 i2d_PKCS7(p7, &p);
 | 
			
		||||
 | 
			
		||||
At this point buf contains the len bytes of the DER encoding of
 | 
			
		||||
p7.
 | 
			
		||||
 | 
			
		||||
The opposite assumes we already have len bytes in buf:
 | 
			
		||||
 | 
			
		||||
unsigned char *p;
 | 
			
		||||
p = buf;
 | 
			
		||||
p7 = d2i_PKCS7(NULL, &p, len);
 | 
			
		||||
 unsigned char *p;
 | 
			
		||||
 p = buf;
 | 
			
		||||
 p7 = d2i_PKCS7(NULL, &p, len);
 | 
			
		||||
 | 
			
		||||
At this point p7 contains a valid PKCS7 structure of NULL if an error
 | 
			
		||||
occurred. If an error occurred ERR_print_errors(bio) should give more
 | 
			
		||||
@@ -595,6 +735,7 @@ The general answer is to check the config.log file generated when running
 | 
			
		||||
the OpenSSH configure script. It should contain the detailed information
 | 
			
		||||
on why the OpenSSL library was not detected or considered incompatible.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Can I use OpenSSL's SSL library with non-blocking I/O?
 | 
			
		||||
 | 
			
		||||
Yes; make sure to read the SSL_get_error(3) manual page!
 | 
			
		||||
@@ -616,5 +757,13 @@ if explicitly asked by the server. Use the SSL_VERIFY_PEER flag of the
 | 
			
		||||
SSL_CTX_set_verify() function to enable the use of client certificates.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does compilation fail due to an undefined symbol NID_uniqueIdentifier?
 | 
			
		||||
 | 
			
		||||
For OpenSSL 0.9.7 the OID table was extended and corrected. In earlier
 | 
			
		||||
versions, uniqueIdentifier was incorrectly used for X.509 certificates.
 | 
			
		||||
The correct name according to RFC2256 (LDAP) is x500UniqueIdentifier.
 | 
			
		||||
Change your code to use the new name when compiling against OpenSSL 0.9.7.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
===============================================================================
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										54
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								INSTALL
									
									
									
									
									
								
							@@ -2,8 +2,12 @@
 | 
			
		||||
 INSTALLATION ON THE UNIX PLATFORM
 | 
			
		||||
 ---------------------------------
 | 
			
		||||
 | 
			
		||||
 [Installation on Windows, OpenVMS and MacOS (before MacOS X) is described
 | 
			
		||||
  in INSTALL.W32, INSTALL.VMS and INSTALL.MacOS.]
 | 
			
		||||
 [Installation on DOS (with djgpp), Windows, OpenVMS, MacOS (before MacOS X)
 | 
			
		||||
  and NetWare is described in INSTALL.DJGPP, INSTALL.W32, INSTALL.VMS,
 | 
			
		||||
  INSTALL.MacOS and INSTALL.NW.
 | 
			
		||||
  
 | 
			
		||||
  This document describes installation on operating systems in the Unix
 | 
			
		||||
  family.]
 | 
			
		||||
 | 
			
		||||
 To install OpenSSL, you will need:
 | 
			
		||||
 | 
			
		||||
@@ -137,8 +141,11 @@
 | 
			
		||||
     the failure that aren't problems in OpenSSL itself (like missing
 | 
			
		||||
     standard headers).  If it is a problem with OpenSSL itself, please
 | 
			
		||||
     report the problem to <openssl-bugs@openssl.org> (note that your
 | 
			
		||||
     message will be forwarded to a public mailing list).  Include the
 | 
			
		||||
     output of "make report" in your message.
 | 
			
		||||
     message will be recorded in the request tracker publicly readable
 | 
			
		||||
     via http://www.openssl.org/support/rt2.html and will be forwarded to a
 | 
			
		||||
     public mailing list). Include the output of "make report" in your message.
 | 
			
		||||
     Please check out the request tracker. Maybe the bug was already
 | 
			
		||||
     reported or has already been fixed.
 | 
			
		||||
 | 
			
		||||
     [If you encounter assembler error messages, try the "no-asm"
 | 
			
		||||
     configuration option as an immediate fix.]
 | 
			
		||||
@@ -153,10 +160,11 @@
 | 
			
		||||
     If a test fails, look at the output.  There may be reasons for
 | 
			
		||||
     the failure that isn't a problem in OpenSSL itself (like a missing
 | 
			
		||||
     or malfunctioning bc).  If it is a problem with OpenSSL itself,
 | 
			
		||||
     try removing any compiler optimization flags from the CFLAGS line
 | 
			
		||||
     try removing any compiler optimization flags from the CFLAG line
 | 
			
		||||
     in Makefile.ssl and run "make clean; make". Please send a bug
 | 
			
		||||
     report to <openssl-bugs@openssl.org>, including the output of
 | 
			
		||||
     "make report".
 | 
			
		||||
     "make report" in order to be added to the request tracker at
 | 
			
		||||
     http://www.openssl.org/support/rt2.html.
 | 
			
		||||
 | 
			
		||||
  4. If everything tests ok, install OpenSSL with
 | 
			
		||||
 | 
			
		||||
@@ -290,3 +298,37 @@
 | 
			
		||||
 targets for shared library creation, like linux-shared.  Those targets
 | 
			
		||||
 can currently be used on their own just as well, but this is expected
 | 
			
		||||
 to change in future versions of OpenSSL.
 | 
			
		||||
 | 
			
		||||
 Note on random number generation
 | 
			
		||||
 --------------------------------
 | 
			
		||||
 | 
			
		||||
 Availability of cryptographically secure random numbers is required for
 | 
			
		||||
 secret key generation. OpenSSL provides several options to seed the
 | 
			
		||||
 internal PRNG. If not properly seeded, the internal PRNG will refuse
 | 
			
		||||
 to deliver random bytes and a "PRNG not seeded error" will occur.
 | 
			
		||||
 On systems without /dev/urandom (or similar) device, it may be necessary
 | 
			
		||||
 to install additional support software to obtain random seed.
 | 
			
		||||
 Please check out the manual pages for RAND_add(), RAND_bytes(), RAND_egd(),
 | 
			
		||||
 and the FAQ for more information.
 | 
			
		||||
 | 
			
		||||
 Note on support for multiple builds
 | 
			
		||||
 -----------------------------------
 | 
			
		||||
 | 
			
		||||
 OpenSSL is usually built in it's source tree.  Unfortunately, this doesn't
 | 
			
		||||
 support building for multiple platforms from the same source tree very well.
 | 
			
		||||
 It is however possible to build in a separate tree through the use of lots
 | 
			
		||||
 of symbolic links, which should be prepared like this:
 | 
			
		||||
 | 
			
		||||
	mkdir -p objtree/"`uname -s`-`uname -r`-`uname -m`"
 | 
			
		||||
	cd objtree/"`uname -s`-`uname -r`-`uname -m`"
 | 
			
		||||
	(cd $OPENSSL_SOURCE; find . -type f) | while read F; do
 | 
			
		||||
		mkdir -p `dirname $F`
 | 
			
		||||
		rm -f $F; ln -s $OPENSSL_SOURCE/$F $F
 | 
			
		||||
		echo $F '->' $OPENSSL_SOURCE/$F
 | 
			
		||||
	done
 | 
			
		||||
	make -f Makefile.org clean
 | 
			
		||||
 | 
			
		||||
 OPENSSL_SOURCE is an environment variable that contains the absolute (this
 | 
			
		||||
 is important!) path to the OpenSSL source tree.
 | 
			
		||||
 | 
			
		||||
 Also, operations like 'make update' should still be made in the source tree.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								INSTALL.DJGPP
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								INSTALL.DJGPP
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
 INSTALLATION ON THE DOS PLATFORM WITH DJGPP
 | 
			
		||||
 -------------------------------------------
 | 
			
		||||
 | 
			
		||||
 Openssl has been ported to DOS, but only with long filename support. If
 | 
			
		||||
 you wish to compile on native DOS with 8+3 filenames, you will have to
 | 
			
		||||
 tweak the installation yourself, including renaming files with illegal
 | 
			
		||||
 or duplicate names.
 | 
			
		||||
 | 
			
		||||
 You should have a full DJGPP environment installed, including the
 | 
			
		||||
 latest versions of DJGPP, GCC, BINUTILS, BASH, etc. This package
 | 
			
		||||
 requires that PERL and BC also be installed.
 | 
			
		||||
 | 
			
		||||
 All of these can be obtained from the usual DJGPP mirror sites, such
 | 
			
		||||
 as "ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp". You also need to
 | 
			
		||||
 have the WATT-32 networking package installed before you try to compile
 | 
			
		||||
 openssl. This can be obtained from "http://www.bgnett.no/~giva/".
 | 
			
		||||
 The Makefile assumes that the WATT-32 code is in the directory
 | 
			
		||||
 specified by the environment variable WATT_ROOT. If you have watt-32
 | 
			
		||||
 in directory "watt32" under your main DJGPP directory, specify
 | 
			
		||||
 WATT_ROOT="/dev/env/DJDIR/watt32".
 | 
			
		||||
 | 
			
		||||
 To compile openssl, start your BASH shell. Then configure for DOS by
 | 
			
		||||
 running "./Configure" with appropriate arguments. The basic syntax for
 | 
			
		||||
 DOS is:
 | 
			
		||||
 ./Configure no-threads --prefix=/dev/env/DJDIR DJGPP
 | 
			
		||||
 
 | 
			
		||||
 You may run out of DPMI selectors when running in a DOS box under
 | 
			
		||||
 Windows. If so, just close the BASH shell, go back to Windows, and
 | 
			
		||||
 restart BASH. Then run "make" again.
 | 
			
		||||
 | 
			
		||||
 Building openssl under DJGPP has been tested with DJGPP 2.03,
 | 
			
		||||
 GCC 2.952, GCC 2.953, perl 5.005_02 and perl 5.006_01.
 | 
			
		||||
							
								
								
									
										437
									
								
								INSTALL.NW
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										437
									
								
								INSTALL.NW
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,437 @@
 | 
			
		||||
 | 
			
		||||
INSTALLATION ON THE NETWARE PLATFORM
 | 
			
		||||
------------------------------------
 | 
			
		||||
 | 
			
		||||
Notes about building OpenSSL for NetWare.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD PLATFORM:
 | 
			
		||||
---------------
 | 
			
		||||
The build scripts (batch files, perl scripts, etc) have been developed and
 | 
			
		||||
tested on W2K.  The scripts should run fine on other Windows
 | 
			
		||||
platforms (NT, Win9x, WinXP) but they haven't been tested.  They may require 
 | 
			
		||||
some modifications.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Supported NetWare Platforms - NetWare 5.x, NetWare 6.x:
 | 
			
		||||
------------------------------------------
 | 
			
		||||
OpenSSL uses the WinSock interfaces introduced in NetWare 5.  Therefore,
 | 
			
		||||
previous versions of NetWare, 4.x and 3.x, are not supported.
 | 
			
		||||
 | 
			
		||||
On NetWare there are two c-runtime libraries.  There is the legacy CLIB 
 | 
			
		||||
interfaces and the newer LibC interfaces.  Being ANSI-C libraries, the 
 | 
			
		||||
functionality in CLIB and LibC is similar but the LibC interfaces are built 
 | 
			
		||||
using Novell Kernal Services (NKS) which is designed to leverage 
 | 
			
		||||
multi-processor environments.
 | 
			
		||||
 | 
			
		||||
The NetWare port of OpenSSL can configured to build using CLIB or LibC.  The 
 | 
			
		||||
CLIB build was developed and tested using NetWare 5.0 sp6.0a.  The LibC 
 | 
			
		||||
build was developed and tested using the NetWare 6.0 FCS.  
 | 
			
		||||
 | 
			
		||||
The necessary LibC functionality ships with NetWare 6.  However, earlier 
 | 
			
		||||
NetWare 5.x versions will require updates in order to run the OpenSSL LibC
 | 
			
		||||
build.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
REQUIRED TOOLS:
 | 
			
		||||
---------------
 | 
			
		||||
Based upon the configuration and build options used, some or all of the
 | 
			
		||||
following tools may be required:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Perl for Win32 - required (http://www.activestate.com/ActivePerl)
 | 
			
		||||
   Used to run the various perl scripts on the build platform.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Perl 5.8.0 for NetWare v3.20 (or later) - required 
 | 
			
		||||
   (http://developer.novell.com) Used to run the test script on NetWare 
 | 
			
		||||
   after building.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Metrowerks CodeWarrior PDK 2.1 (or later) for NetWare - required:
 | 
			
		||||
   Provides command line tools used for building.
 | 
			
		||||
 | 
			
		||||
   Tools:
 | 
			
		||||
   mwccnlm.exe  - C/C++ Compiler for NetWare
 | 
			
		||||
   mwldnlm.exe  - Linker for NetWare
 | 
			
		||||
   mwasmnlm.exe - x86 assembler for NetWare (if using assembly option)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Assemblers - optional:
 | 
			
		||||
   If you intend to build using the assembly options you will need an
 | 
			
		||||
   assembler.  Work has been completed to support two assemblers, Metrowerks
 | 
			
		||||
   and NASM.  However, during development, a bug was found in the Metrowerks
 | 
			
		||||
   assembler which generates incorrect code.  Until this problem is fixed,
 | 
			
		||||
   the Metrowerks assembler cannot be used.
 | 
			
		||||
 | 
			
		||||
   mwasmnlm.exe - Metrowerks x86 assembler - part of CodeWarrior tools.
 | 
			
		||||
         (version 2.2 Built Aug 23, 1999 - not useable due to code
 | 
			
		||||
          generation bug)
 | 
			
		||||
 | 
			
		||||
   nasmw.exe - Netwide Assembler NASM
 | 
			
		||||
         version 0.98 was used in development and testing
 | 
			
		||||
 | 
			
		||||
* Make Tool - required:
 | 
			
		||||
   In order to build you will need a make tool.  Two make tools are
 | 
			
		||||
   supported, GNU make (gmake.exe) or Microsoft nmake.exe.
 | 
			
		||||
 | 
			
		||||
   gmake.exe - GNU make for Windows (version 3.75 used for development)
 | 
			
		||||
         http://www.gnu.org/software/make/make.html
 | 
			
		||||
 | 
			
		||||
   nmake.exe - Microsoft make (Version 6.00.8168.0 used for development)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Novell Developer Kit (NDK) - required: (http://developer.novell.com)
 | 
			
		||||
 | 
			
		||||
   CLIB - BUILDS:
 | 
			
		||||
 | 
			
		||||
      WinSock2 Developer Components for NetWare:
 | 
			
		||||
         For initial development, the October 27, 2000 version was used.
 | 
			
		||||
         However, future versions should also work.
 | 
			
		||||
 | 
			
		||||
         NOTE:  The WinSock2 components include headers & import files for
 | 
			
		||||
         NetWare, but you will also need the winsock2.h and supporting
 | 
			
		||||
         headers (pshpack4.h, poppack.h, qos.h) delivered in the
 | 
			
		||||
         Microsoft SDK.  Note: The winsock2.h support headers may change
 | 
			
		||||
         with various versions of winsock2.h.  Check the dependencies
 | 
			
		||||
         section on the NDK WinSock2 download page for the latest
 | 
			
		||||
         information on dependencies.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      NLM and NetWare libraries for C (including CLIB and XPlat):
 | 
			
		||||
			If you are going to build a CLIB version of OpenSSL, you will
 | 
			
		||||
			need the CLIB headers and imports.  The March, 2001 NDK release or 
 | 
			
		||||
			later is recommended.
 | 
			
		||||
 | 
			
		||||
         Earlier versions should work but haven't been tested.  In recent
 | 
			
		||||
         versions the import files have been consolidated and function
 | 
			
		||||
         names moved.  This means you may run into link problems
 | 
			
		||||
         (undefined symbols) when using earlier versions.   The functions
 | 
			
		||||
         are available in earlier versions, but you will have to modifiy
 | 
			
		||||
         the make files to include additional import files (see
 | 
			
		||||
         openssl\util\pl\netware.pl).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   LIBC - BUILDS:
 | 
			
		||||
   
 | 
			
		||||
      Libraries for C (LibC) - LibC headers and import files
 | 
			
		||||
			If you are going to build a LibC version of OpenSSL, you will
 | 
			
		||||
			need the LibC headers and imports.  The March 14, 2002 NDK release or
 | 
			
		||||
			later is required.  
 | 
			
		||||
         
 | 
			
		||||
         NOTE: The LibC SDK includes the necessary WinSock2 support.  It
 | 
			
		||||
         It is not necessary to download the WinSock2 Developer when building
 | 
			
		||||
         for LibC.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILDING:
 | 
			
		||||
---------
 | 
			
		||||
Before building, you will need to set a few environment variables.  You can
 | 
			
		||||
set them manually or you can modify the "netware\set_env.bat" file.
 | 
			
		||||
 | 
			
		||||
The set_env.bat file is a template you can use to set up the path
 | 
			
		||||
and environment variables you will need to build.  Modify the
 | 
			
		||||
various lines to point to YOUR tools and run set_env.bat.
 | 
			
		||||
 | 
			
		||||
	netware\set_env.bat [target]
 | 
			
		||||
	
 | 
			
		||||
      target        - "netware-clib" - CLib NetWare build
 | 
			
		||||
                    - "netware-libc" - LibC NetWare build
 | 
			
		||||
 | 
			
		||||
If you don't use set_env.bat, you will need to set up the following
 | 
			
		||||
environment variables:
 | 
			
		||||
 | 
			
		||||
   path - Set path to point to the tools you will use.
 | 
			
		||||
 | 
			
		||||
   MWCIncludes - The location of the NDK include files.
 | 
			
		||||
         
 | 
			
		||||
			CLIB ex: set MWCIncludes=c:\ndk\nwsdk\include\nlm
 | 
			
		||||
			LibC ex: set MWCIncludes=c:\ndk\libc\include
 | 
			
		||||
 | 
			
		||||
   PRELUDE - The absolute path of the prelude object to link with.  For
 | 
			
		||||
			a CLIB build it is recommended you use the "nwpre.obj" file shipped
 | 
			
		||||
			with the Metrowerks PDK for NetWare.  For a LibC build you should 
 | 
			
		||||
			use the "libcpre.o" file delivered with the LibC NDK components.
 | 
			
		||||
         
 | 
			
		||||
			CLIB ex: set PRELUDE=c:\codewar\novell support\metrowerks support\
 | 
			
		||||
                               libraries\runtime\nwpre.obj
 | 
			
		||||
										 
 | 
			
		||||
			LibC ex: set PRELUDE=c:\ndk\libc\imports\libcpre.o
 | 
			
		||||
 | 
			
		||||
   IMPORTS - The locaton of the NDK import files.
 | 
			
		||||
         
 | 
			
		||||
			CLIB ex: set IMPORTS=c:\ndk\nwsdk\imports
 | 
			
		||||
			LibC ex: set IMPORTS=c:\ndk\libc\imports
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
In order to build, you need to run the Perl scripts to configure the build
 | 
			
		||||
process and generate a make file.  There is a batch file,
 | 
			
		||||
"netware\build.bat", to automate the process.
 | 
			
		||||
 | 
			
		||||
Build.bat runs the build configuration scripts and generates a make file.
 | 
			
		||||
If an assembly option is specified, it also runs the scripts to generate 
 | 
			
		||||
the assembly code.  Always run build.bat from the "openssl" directory.
 | 
			
		||||
 | 
			
		||||
   netware\build [target] [debug opts] [assembly opts] [configure opts]
 | 
			
		||||
	
 | 
			
		||||
      target        - "netware-clib" - CLib NetWare build
 | 
			
		||||
                    - "netware-libc" - LibC NetWare build
 | 
			
		||||
 
 | 
			
		||||
      debug opts    - "debug"  - build debug
 | 
			
		||||
 | 
			
		||||
      assembly opts - "nw-mwasm" - use Metrowerks assembler
 | 
			
		||||
                      "nw-nasm"  - use NASM assembler
 | 
			
		||||
                      "no-asm"   - don't use assembly
 | 
			
		||||
 | 
			
		||||
      configure opts- all unrecognized arguments are passed to the
 | 
			
		||||
                       perl configure script
 | 
			
		||||
 | 
			
		||||
   examples:
 | 
			
		||||
	
 | 
			
		||||
		CLIB build, debug, without assembly:
 | 
			
		||||
			netware\build.bat netware-clib debug no-asm
 | 
			
		||||
		
 | 
			
		||||
		LibC build, non-debug, using NASM assembly:
 | 
			
		||||
			netware\build.bat netware-libc nw-nasm
 | 
			
		||||
		
 | 
			
		||||
Running build.bat generates a make file to be processed by your make 
 | 
			
		||||
tool (gmake or nmake):
 | 
			
		||||
 | 
			
		||||
   CLIB ex: gmake -f netware\nlm_clib.mak 
 | 
			
		||||
   LibC ex: gmake -f netware\nlm_libc.mak 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
You can also run the build scripts manually if you do not want to use the
 | 
			
		||||
build.bat file.  Run the following scripts in the "\openssl"
 | 
			
		||||
subdirectory (in the order listed below):
 | 
			
		||||
 | 
			
		||||
   perl configure no-asm [other config opts] [netware-clib|netware-libc]
 | 
			
		||||
      configures no assembly build for specified netware environment
 | 
			
		||||
		(CLIB or LibC).
 | 
			
		||||
 | 
			
		||||
   perl util\mkfiles.pl >MINFO
 | 
			
		||||
      generates a listing of source files (used by mk1mf)
 | 
			
		||||
 | 
			
		||||
   perl util\mk1mf.pl no-asm [other config opts] [netware-clib|netware-libc >netware\nlm.mak
 | 
			
		||||
      generates the makefile for NetWare
 | 
			
		||||
 | 
			
		||||
   gmake -f netware\nlm.mak
 | 
			
		||||
      build with the make tool (nmake.exe also works)
 | 
			
		||||
 | 
			
		||||
NOTE:  If you are building using the assembly option, you must also run the
 | 
			
		||||
various Perl scripts to generate the assembly files.  See build.bat
 | 
			
		||||
for an example of running the various assembly scripts.  You must use the
 | 
			
		||||
"no-asm" option to build without assembly.  The configure and mk1mf scripts
 | 
			
		||||
also have various other options.  See the scripts for more information.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
The output from the build is placed in the following directories:
 | 
			
		||||
 | 
			
		||||
   CLIB Debug build:
 | 
			
		||||
      out_nw_clib.dbg     - static libs & test nlm(s)
 | 
			
		||||
      tmp_nw_clib.dbg     - temporary build files
 | 
			
		||||
      outinc_nw_clib      - necessary include files
 | 
			
		||||
 | 
			
		||||
   CLIB Non-debug build:
 | 
			
		||||
      out_nw_clib         - static libs & test nlm(s)
 | 
			
		||||
      tmp_nw_clib         - temporary build files
 | 
			
		||||
      outinc_nw_clib      - necesary include files
 | 
			
		||||
 | 
			
		||||
   LibC Debug build:
 | 
			
		||||
      out_nw_libc.dbg     - static libs & test nlm(s)
 | 
			
		||||
      tmp_nw_libc.dbg     - temporary build files
 | 
			
		||||
      outinc_nw_libc      - necessary include files
 | 
			
		||||
 | 
			
		||||
   LibC Non-debug build:
 | 
			
		||||
      out_nw_libc         - static libs & test nlm(s)
 | 
			
		||||
      tmp_nw_libc         - temporary build files
 | 
			
		||||
      outinc_nw_libc      - necesary include files
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TESTING:
 | 
			
		||||
--------
 | 
			
		||||
The build process creates the OpenSSL static libs ( crypto.lib, ssl.lib,
 | 
			
		||||
rsaglue.lib ) and several test programs.  You should copy the test programs
 | 
			
		||||
to your NetWare server and run the tests.
 | 
			
		||||
 | 
			
		||||
The batch file "netware\cpy_tests.bat" will copy all the necessary files
 | 
			
		||||
to your server for testing.  In order to run the batch file, you need a
 | 
			
		||||
drive mapped to your target server.  It will create an "OpenSSL" directory
 | 
			
		||||
on the drive and copy the test files to it.  CAUTION: If a directory with the
 | 
			
		||||
name of "OpenSSL" already exists, it will be deleted.
 | 
			
		||||
 | 
			
		||||
To run cpy_tests.bat:
 | 
			
		||||
 | 
			
		||||
   netware\cpy_tests [output directory] [NetWare drive]
 | 
			
		||||
 | 
			
		||||
      output directory - "out_nw_clib.dbg", "out_nw_libc", etc.
 | 
			
		||||
      NetWare drive    - drive letter of mapped drive
 | 
			
		||||
 | 
			
		||||
      CLIB ex: netware\cpy_tests out_nw_clib m:
 | 
			
		||||
      LibC ex: netware\cpy_tests out_nw_libc m:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
The Perl script, "do_tests.pl", in the "OpenSSL" directory on the server
 | 
			
		||||
should be used to execute the tests.  Before running the script, make sure
 | 
			
		||||
your SEARCH PATH includes the "OpenSSL" directory.  For example, if you
 | 
			
		||||
copied the files to the "sys:" volume you use the command:
 | 
			
		||||
 | 
			
		||||
   SEARCH ADD SYS:\OPENSSL
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
To run do_tests.pl type (at the console prompt):
 | 
			
		||||
 | 
			
		||||
   perl \openssl\do_tests.pl [options]
 | 
			
		||||
 | 
			
		||||
      options:
 | 
			
		||||
         -p    - pause after executing each test
 | 
			
		||||
 | 
			
		||||
The do_tests.pl script generates a log file "\openssl\test_out\tests.log"
 | 
			
		||||
which should be reviewed for errors.  Any errors will be denoted by the word
 | 
			
		||||
"ERROR" in the log.
 | 
			
		||||
 | 
			
		||||
NOTE:  Currently (11/2002), the LibC test nlms report an error while loading
 | 
			
		||||
       when launched from the perl script (do_tests.pl).  The problems are 
 | 
			
		||||
       being addressed by the LibC development team and should be fixed in the
 | 
			
		||||
       next release.  Until the problems are corrected, the LibC test nlms 
 | 
			
		||||
       will have to be executed manually.  
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DEVELOPING WITH THE OPENSSL SDK:
 | 
			
		||||
--------------------------------
 | 
			
		||||
Now that everything is built and tested, you are ready to use the OpenSSL
 | 
			
		||||
libraries in your development.
 | 
			
		||||
 | 
			
		||||
There is no real installation procedure, just copy the static libs and
 | 
			
		||||
headers to your build location.  The libs (crypto.lib & ssl.lib) are
 | 
			
		||||
located in the appropriate "out_nw_XXXX" directory 
 | 
			
		||||
(out_nw_clib, out_nw_libc, etc).  
 | 
			
		||||
 | 
			
		||||
The headers are located in the appropriate "outinc_nw_XXX" directory 
 | 
			
		||||
(outinc_nw_clib, outinc_nw_libc).  
 | 
			
		||||
 | 
			
		||||
One suggestion is to create the following directory 
 | 
			
		||||
structure for the OpenSSL SDK:
 | 
			
		||||
 | 
			
		||||
   \openssl
 | 
			
		||||
      |- bin
 | 
			
		||||
      |   |- openssl.nlm
 | 
			
		||||
      |   |- (other tests you want)
 | 
			
		||||
      |
 | 
			
		||||
      |- lib
 | 
			
		||||
      |   | - crypto.lib
 | 
			
		||||
      |   | - ssl.lib
 | 
			
		||||
      |
 | 
			
		||||
      |- include
 | 
			
		||||
      |   | - openssl
 | 
			
		||||
      |   |    | - (all the headers in "outinc_nw\openssl")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
The program "openssl.nlm" can be very useful.  It has dozens of
 | 
			
		||||
options and you may want to keep it handy for debugging, testing, etc.
 | 
			
		||||
 | 
			
		||||
When building your apps using OpenSSL, define "NETWARE".  It is needed by
 | 
			
		||||
some of the OpenSSL headers.  One way to do this is with a compile option,
 | 
			
		||||
for example "-DNETWARE".
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
NOTES:
 | 
			
		||||
------
 | 
			
		||||
 | 
			
		||||
Resource leaks in Tests
 | 
			
		||||
------------------------
 | 
			
		||||
Some OpenSSL tests do not clean up resources and NetWare reports
 | 
			
		||||
the resource leaks when the tests unload.  If this really bugs you,
 | 
			
		||||
you can stop the messages by setting the developer option off at the console
 | 
			
		||||
prompt (set developer option = off).  Or better yet, fix the tests to
 | 
			
		||||
clean up the resources!
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Multi-threaded Development
 | 
			
		||||
---------------------------
 | 
			
		||||
The NetWare version of OpenSSL is thread-safe however, multi-threaded
 | 
			
		||||
applications must provide the necessary locking function callbacks.  This
 | 
			
		||||
is described in doc\threads.doc.  The file "openssl\crypto\threads\mttest.c"
 | 
			
		||||
is a multi-threaded test program and demonstrates the locking functions.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
What is openssl2.nlm?
 | 
			
		||||
---------------------
 | 
			
		||||
The openssl program has numerous options and can be used for many different
 | 
			
		||||
things.  Many of the options operate in an interactive mode requiring the
 | 
			
		||||
user to enter data.  Because of this, a default screen is created for the
 | 
			
		||||
program.  However, when running the test script it is not desirable to
 | 
			
		||||
have a seperate screen.  Therefore, the build also creates openssl2.nlm.
 | 
			
		||||
Openssl2.nlm is functionally identical but uses the console screen.
 | 
			
		||||
Openssl2 can be used when a non-interactive mode is desired.
 | 
			
		||||
 | 
			
		||||
NOTE:  There are may other possibilities (command line options, etc)
 | 
			
		||||
which could have been used to address the screen issue.  The openssl2.nlm
 | 
			
		||||
option was chosen because it impacted only the build not the code.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Why only static libraries?
 | 
			
		||||
--------------------------
 | 
			
		||||
Globals, globals, and more globals.  The OpenSSL code uses many global
 | 
			
		||||
variables that are allocated and initialized when used for the first time.
 | 
			
		||||
 | 
			
		||||
On NetWare, most applications (at least historically) run in the kernel.
 | 
			
		||||
When running in the kernel, there is one instance of global variables.
 | 
			
		||||
For regular application type NLM(s) this isn't a problem because they are
 | 
			
		||||
the only ones using the globals.  However, for a library NLM (an NLM which
 | 
			
		||||
exposes functions and has no threads of execution), the globals cause
 | 
			
		||||
problems.  Applications could inadvertently step on each other if they
 | 
			
		||||
change some globals.  Even worse, the first application that triggers a
 | 
			
		||||
global to be allocated and initialized has the allocated memory charged to
 | 
			
		||||
itself.  Now when that application unloads, NetWare will clean up all the
 | 
			
		||||
applicaton's memory.  The global pointer variables inside OpenSSL now
 | 
			
		||||
point to freed memory.  An abend waiting to happen!
 | 
			
		||||
 | 
			
		||||
To work correctly in the kernel, library NLM(s) that use globals need to
 | 
			
		||||
provide a set of globals (instance data) for each application.  Another
 | 
			
		||||
option is to require the library only be loaded in a protected address
 | 
			
		||||
space along with the application using it.
 | 
			
		||||
 | 
			
		||||
Modifying the OpenSSL code to provide a set of globals (instance data) for
 | 
			
		||||
each application isn't technically difficult, but due to the large number
 | 
			
		||||
globals it would require substantial code changes and it wasn't done.  Hence,
 | 
			
		||||
the build currently only builds static libraries which are then linked
 | 
			
		||||
into each application.
 | 
			
		||||
 | 
			
		||||
NOTE:  If you are building a library NLM that uses the OpenSSL static
 | 
			
		||||
libraries, you will still have to deal with the global variable issue.
 | 
			
		||||
This is because when you link in the OpenSSL code you bring in all the
 | 
			
		||||
globals.  One possible solution for the global pointer variables is to
 | 
			
		||||
register memory functions with OpenSSL which allocate memory and charge it
 | 
			
		||||
to your library NLM (see the function CRYPTO_set_mem_functions).  However,
 | 
			
		||||
be aware that now all memory allocated by OpenSSL is charged to your NLM.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CodeWarrior Tools and W2K
 | 
			
		||||
---------------------------
 | 
			
		||||
There have been problems reported with the CodeWarrior Linker
 | 
			
		||||
(mwldnlm.exe) in the PDK 2.1 for NetWare when running on Windows 2000.  The
 | 
			
		||||
problems cause the link step to fail.  The only work around is to obtain an
 | 
			
		||||
updated linker from Metrowerks.  It is expected Metrowerks will release
 | 
			
		||||
PDK 3.0 (in beta testing at this time - May, 2001) in the near future which
 | 
			
		||||
will fix these problems.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Makefile "vclean"
 | 
			
		||||
------------------
 | 
			
		||||
The generated makefile has a "vclean" target which cleans up the build
 | 
			
		||||
directories.  If you have been building successfully and suddenly
 | 
			
		||||
experience problems, use "vclean" (gmake -f netware\nlm.mak vclean) and retry.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"Undefined Symbol" Linker errors
 | 
			
		||||
--------------------------------
 | 
			
		||||
There have been linker errors reported when doing a CLIB build.  The problems
 | 
			
		||||
occur because some versions of the CLIB SDK import files inadvertently 
 | 
			
		||||
left out some symbols.  One symbol in particular is "_lrotl".  The missing
 | 
			
		||||
functions are actually delivered in the binaries, but they were left out of
 | 
			
		||||
the import files.  The issues should be fixed in the September 2001 release 
 | 
			
		||||
of the NDK.  If you experience the problems you can temporarily
 | 
			
		||||
work around it by manually adding the missing symbols to your version of 
 | 
			
		||||
"clib.imp".  
 | 
			
		||||
@@ -20,3 +20,12 @@
 | 
			
		||||
 | 
			
		||||
 If that finishes successfully you will find the libraries and programs in the
 | 
			
		||||
 "out" directory.
 | 
			
		||||
 | 
			
		||||
 Alternatively, you can make a dynamic build that puts the library code into
 | 
			
		||||
 crypto.dll and ssl.dll by running
 | 
			
		||||
 | 
			
		||||
 > make -f os2-emx-dll.mak
 | 
			
		||||
 | 
			
		||||
 This will build the above mentioned dlls and a matching pair of import
 | 
			
		||||
 libraries in the "out_dll" directory along with the set of test programs
 | 
			
		||||
 and the openssl application.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										168
									
								
								INSTALL.W32
									
									
									
									
									
								
							
							
						
						
									
										168
									
								
								INSTALL.W32
									
									
									
									
									
								
							@@ -2,19 +2,28 @@
 | 
			
		||||
 INSTALLATION ON THE WIN32 PLATFORM
 | 
			
		||||
 ----------------------------------
 | 
			
		||||
 | 
			
		||||
 [Instructions for building for Windows CE can be found in INSTALL.WCE]
 | 
			
		||||
 | 
			
		||||
 Heres a few comments about building OpenSSL in Windows environments.  Most
 | 
			
		||||
 of this is tested on Win32 but it may also work in Win 3.1 with some
 | 
			
		||||
 modification.
 | 
			
		||||
 | 
			
		||||
 You need Perl for Win32.  Unless you will build on Cygwin, you will need
 | 
			
		||||
 ActiveState Perl, available from http://www.activestate.com/ActivePerl.
 | 
			
		||||
 For Cygwin users, there's more info in the Cygwin section.
 | 
			
		||||
 | 
			
		||||
 and one of the following C compilers:
 | 
			
		||||
 | 
			
		||||
  * Visual C++
 | 
			
		||||
  * Borland C
 | 
			
		||||
  * GNU C (Mingw32 or Cygwin)
 | 
			
		||||
  * GNU C (Cygwin or MinGW)
 | 
			
		||||
 | 
			
		||||
 If you are compiling from a tarball or a CVS snapshot then the Win32 files
 | 
			
		||||
 may well be not up to date. This may mean that some "tweaking" is required to
 | 
			
		||||
 get it all to work. See the trouble shooting section later on for if (when?)
 | 
			
		||||
 it goes wrong.
 | 
			
		||||
 | 
			
		||||
 Visual C++
 | 
			
		||||
 ----------
 | 
			
		||||
 | 
			
		||||
 If you want to compile in the assembly language routines with Visual C++ then
 | 
			
		||||
 you will need an assembler. This is worth doing because it will result in
 | 
			
		||||
@@ -24,26 +33,19 @@
 | 
			
		||||
  * Microsoft MASM (aka "ml")
 | 
			
		||||
  * Free Netwide Assembler NASM.
 | 
			
		||||
 | 
			
		||||
 MASM was at one point distributed with VC++. It is now distributed with some
 | 
			
		||||
 Microsoft DDKs, for example the Windows NT 4.0 DDK and the Windows 98 DDK. If
 | 
			
		||||
 you do not have either of these DDKs then you can just download the binaries
 | 
			
		||||
 for the Windows 98 DDK and extract and rename the two files XXXXXml.exe and
 | 
			
		||||
 XXXXXml.err, to ml.exe and ml.err and install somewhere on your PATH. Both
 | 
			
		||||
 DDKs can be downloaded from the Microsoft developers site www.msdn.com.
 | 
			
		||||
 MASM is distributed with most versions of VC++. For the versions where it is
 | 
			
		||||
 not included in VC++, it is also distributed with some Microsoft DDKs, for
 | 
			
		||||
 example the Windows NT 4.0 DDK and the Windows 98 DDK. If you do not have
 | 
			
		||||
 either of these DDKs then you can just download the binaries for the Windows
 | 
			
		||||
 98 DDK and extract and rename the two files XXXXXml.exe and XXXXXml.err, to
 | 
			
		||||
 ml.exe and ml.err and install somewhere on your PATH. Both DDKs can be
 | 
			
		||||
 downloaded from the Microsoft developers site www.msdn.com.
 | 
			
		||||
 | 
			
		||||
 NASM is freely available. Version 0.98 was used during testing: other versions
 | 
			
		||||
 may also work. It is available from many places, see for example:
 | 
			
		||||
 http://www.kernel.org/pub/software/devel/nasm/binaries/win32/
 | 
			
		||||
 The NASM binary nasmw.exe needs to be installed anywhere on your PATH.
 | 
			
		||||
 | 
			
		||||
 If you are compiling from a tarball or a CVS snapshot then the Win32 files
 | 
			
		||||
 may well be not up to date. This may mean that some "tweaking" is required to
 | 
			
		||||
 get it all to work. See the trouble shooting section later on for if (when?)
 | 
			
		||||
 it goes wrong.
 | 
			
		||||
 | 
			
		||||
 Visual C++
 | 
			
		||||
 ----------
 | 
			
		||||
 | 
			
		||||
 Firstly you should run Configure:
 | 
			
		||||
 | 
			
		||||
 > perl Configure VC-WIN32
 | 
			
		||||
@@ -82,7 +84,8 @@
 | 
			
		||||
 There are various changes you can make to the Win32 compile environment. By
 | 
			
		||||
 default the library is not compiled with debugging symbols. If you add 'debug'
 | 
			
		||||
 to the mk1mf.pl lines in the do_* batch file then debugging symbols will be
 | 
			
		||||
 compiled in.
 | 
			
		||||
 compiled in. Note that mk1mf.pl expects the platform to be the last argument
 | 
			
		||||
 on the command line, so 'debug' must appear before that, as all other options.
 | 
			
		||||
 | 
			
		||||
 The default Win32 environment is to leave out any Windows NT specific
 | 
			
		||||
 features.
 | 
			
		||||
@@ -94,6 +97,18 @@
 | 
			
		||||
 You can also build a static version of the library using the Makefile
 | 
			
		||||
 ms\nt.mak
 | 
			
		||||
 | 
			
		||||
 Borland C++ builder 5
 | 
			
		||||
 ---------------------
 | 
			
		||||
 | 
			
		||||
 * Configure for building with Borland Builder:
 | 
			
		||||
   > perl Configure BC-32
 | 
			
		||||
 | 
			
		||||
 * Create the appropriate makefile
 | 
			
		||||
   > ms\do_nasm
 | 
			
		||||
 | 
			
		||||
 * Build
 | 
			
		||||
   > make -f ms\bcb.mak
 | 
			
		||||
 | 
			
		||||
 Borland C++ builder 3 and 4
 | 
			
		||||
 ---------------------------
 | 
			
		||||
 | 
			
		||||
@@ -104,18 +119,72 @@
 | 
			
		||||
 * Run make:
 | 
			
		||||
   > make -f bcb.mak
 | 
			
		||||
 | 
			
		||||
 GNU C (Mingw32)
 | 
			
		||||
 ---------------
 | 
			
		||||
 GNU C (Cygwin)
 | 
			
		||||
 --------------
 | 
			
		||||
 | 
			
		||||
 To build OpenSSL, you need the Mingw32 package and GNU make.
 | 
			
		||||
 Cygwin provides a bash shell and GNU tools environment running
 | 
			
		||||
 on NT 4.0, Windows 9x, Windows ME, Windows 2000, and Windows XP.
 | 
			
		||||
 Consequently, a make of OpenSSL with Cygwin is closer to a GNU
 | 
			
		||||
 bash environment such as Linux than to other the other Win32
 | 
			
		||||
 makes.
 | 
			
		||||
 | 
			
		||||
 Cygwin implements a Posix/Unix runtime system (cygwin1.dll).
 | 
			
		||||
 It is also possible to create Win32 binaries that only use the
 | 
			
		||||
 Microsoft C runtime system (msvcrt.dll or crtdll.dll) using
 | 
			
		||||
 MinGW. MinGW can be used in the Cygwin development environment
 | 
			
		||||
 or in a standalone setup as described in the following section.
 | 
			
		||||
 | 
			
		||||
 To build OpenSSL using Cygwin:
 | 
			
		||||
 | 
			
		||||
 * Install Cygwin (see http://cygwin.com/)
 | 
			
		||||
 | 
			
		||||
 * Install Perl and ensure it is in the path. Both Cygwin perl
 | 
			
		||||
   (5.6.1-2 or newer) and ActivePerl work.
 | 
			
		||||
 | 
			
		||||
 * Run the Cygwin bash shell
 | 
			
		||||
 | 
			
		||||
 * $ tar zxvf openssl-x.x.x.tar.gz
 | 
			
		||||
   $ cd openssl-x.x.x
 | 
			
		||||
 | 
			
		||||
   To build the Cygwin version of OpenSSL:
 | 
			
		||||
 | 
			
		||||
   $ ./config
 | 
			
		||||
   [...]
 | 
			
		||||
   $ make
 | 
			
		||||
   [...]
 | 
			
		||||
   $ make test
 | 
			
		||||
   $ make install
 | 
			
		||||
 | 
			
		||||
   This will create a default install in /usr/local/ssl.
 | 
			
		||||
 | 
			
		||||
   To build the MinGW version (native Windows) in Cygwin:
 | 
			
		||||
 | 
			
		||||
   $ ./Configure mingw
 | 
			
		||||
   [...]
 | 
			
		||||
   $ make
 | 
			
		||||
   [...]
 | 
			
		||||
   $ make test
 | 
			
		||||
   $ make install
 | 
			
		||||
 | 
			
		||||
 Cygwin Notes:
 | 
			
		||||
 | 
			
		||||
 "make test" and normal file operations may fail in directories
 | 
			
		||||
 mounted as text (i.e. mount -t c:\somewhere /home) due to Cygwin
 | 
			
		||||
 stripping of carriage returns. To avoid this ensure that a binary
 | 
			
		||||
 mount is used, e.g. mount -b c:\somewhere /home.
 | 
			
		||||
 | 
			
		||||
 "bc" is not provided in older Cygwin distribution.  This causes a
 | 
			
		||||
 non-fatal error in "make test" but is otherwise harmless.  If
 | 
			
		||||
 desired and needed, GNU bc can be built with Cygwin without change.
 | 
			
		||||
 | 
			
		||||
 GNU C (MinGW)
 | 
			
		||||
 -------------
 | 
			
		||||
 | 
			
		||||
 * Compiler installation:
 | 
			
		||||
 | 
			
		||||
   Mingw32 is available from <ftp://ftp.xraylith.wisc.edu/pub/khan/
 | 
			
		||||
   gnu-win32/mingw32/gcc-2.95.2/gcc-2.95.2-msvcrt.exe>. GNU make is at
 | 
			
		||||
   <ftp://agnes.dida.physik.uni-essen.de/home/janjaap/mingw32/binaries/
 | 
			
		||||
   make-3.76.1.zip>. Install both of them in C:\egcs-1.1.2 and run
 | 
			
		||||
   C:\egcs-1.1.2\mingw32.bat to set the PATH.
 | 
			
		||||
   MinGW is available from http://www.mingw.org. Run the installer and
 | 
			
		||||
   set the MinGW bin directory to the PATH in "System Properties" or
 | 
			
		||||
   autoexec.bat.
 | 
			
		||||
 | 
			
		||||
 * Compile OpenSSL:
 | 
			
		||||
 | 
			
		||||
@@ -137,53 +206,6 @@
 | 
			
		||||
   > cd out
 | 
			
		||||
   > ..\ms\test
 | 
			
		||||
 | 
			
		||||
 GNU C (Cygwin)
 | 
			
		||||
 --------------
 | 
			
		||||
 | 
			
		||||
 Cygwin provides a bash shell and GNU tools environment running on
 | 
			
		||||
 NT 4.0, Windows 9x and Windows 2000. Consequently, a make of OpenSSL
 | 
			
		||||
 with Cygwin is closer to a GNU bash environment such as Linux rather
 | 
			
		||||
 than other W32 makes that are based on a single makefile approach.
 | 
			
		||||
 Cygwin implements Posix/Unix calls through cygwin1.dll, and is
 | 
			
		||||
 contrasted to Mingw32 which links dynamically to msvcrt.dll or
 | 
			
		||||
 crtdll.dll.
 | 
			
		||||
 | 
			
		||||
 To build OpenSSL using Cygwin:
 | 
			
		||||
 | 
			
		||||
 * Install Cygwin (see http://sourceware.cygnus.com/cygwin)
 | 
			
		||||
 | 
			
		||||
 * Install Perl and ensure it is in the path (recent Cygwin perl 
 | 
			
		||||
   (version 5.6.1-2 of the latter has been reported to work) or
 | 
			
		||||
   ActivePerl)
 | 
			
		||||
 | 
			
		||||
 * Run the Cygwin bash shell
 | 
			
		||||
 | 
			
		||||
 * $ tar zxvf openssl-x.x.x.tar.gz
 | 
			
		||||
   $ cd openssl-x.x.x
 | 
			
		||||
   $ ./config
 | 
			
		||||
   [...]
 | 
			
		||||
   $ make
 | 
			
		||||
   [...]
 | 
			
		||||
   $ make test
 | 
			
		||||
   $ make install
 | 
			
		||||
 | 
			
		||||
 This will create a default install in /usr/local/ssl.
 | 
			
		||||
 | 
			
		||||
 Cygwin Notes:
 | 
			
		||||
 | 
			
		||||
 "make test" and normal file operations may fail in directories
 | 
			
		||||
 mounted as text (i.e. mount -t c:\somewhere /home) due to Cygwin
 | 
			
		||||
 stripping of carriage returns. To avoid this ensure that a binary
 | 
			
		||||
 mount is used, e.g. mount -b c:\somewhere /home.
 | 
			
		||||
 | 
			
		||||
 As of version 1.1.1 Cygwin is relatively unstable in its handling
 | 
			
		||||
 of cr/lf issues. These make procedures succeeded with versions 1.1 and
 | 
			
		||||
 the snapshot 20000524 (Slow!).
 | 
			
		||||
 | 
			
		||||
 "bc" is not provided in the Cygwin distribution.  This causes a
 | 
			
		||||
 non-fatal error in "make test" but is otherwise harmless.  If
 | 
			
		||||
 desired, GNU bc can be built with Cygwin without change.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 Installation
 | 
			
		||||
 ------------
 | 
			
		||||
@@ -203,7 +225,7 @@
 | 
			
		||||
	$ md c:\openssl\lib
 | 
			
		||||
	$ md c:\openssl\include
 | 
			
		||||
	$ md c:\openssl\include\openssl
 | 
			
		||||
	$ copy /b inc32\*               c:\openssl\include\openssl
 | 
			
		||||
	$ copy /b inc32\openssl\*       c:\openssl\include\openssl
 | 
			
		||||
	$ copy /b out32dll\ssleay32.lib c:\openssl\lib
 | 
			
		||||
	$ copy /b out32dll\libeay32.lib c:\openssl\lib
 | 
			
		||||
	$ copy /b out32dll\ssleay32.dll c:\openssl\bin
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										71
									
								
								INSTALL.WCE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								INSTALL.WCE
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
 
 | 
			
		||||
 INSTALLATION FOR THE WINDOWS CE PLATFORM
 | 
			
		||||
 ----------------------------------------
 | 
			
		||||
 | 
			
		||||
 Building OpenSSL for Windows CE requires the following external tools:
 | 
			
		||||
 | 
			
		||||
  * Microsoft eMbedded Visual C++ 3.0
 | 
			
		||||
  * wcecompat compatibility library (www.essemer.com.au)
 | 
			
		||||
  * Optionally ceutils for running automated tests (www.essemer.com.au)
 | 
			
		||||
 | 
			
		||||
 You also need Perl for Win32.  You will need ActiveState Perl, available
 | 
			
		||||
 from http://www.activestate.com/ActivePerl.
 | 
			
		||||
 | 
			
		||||
 Windows CE support in OpenSSL relies on wcecompat.  All Windows CE specific
 | 
			
		||||
 issues should be directed to www.essemer.com.au.
 | 
			
		||||
 | 
			
		||||
 The C Runtime Library implementation for Windows CE that is included with
 | 
			
		||||
 Microsoft eMbedded Visual C++ 3.0 is incomplete and in some places
 | 
			
		||||
 incorrect.  wcecompat plugs the holes and tries to bring the Windows CE
 | 
			
		||||
 CRT to a level that is more compatible with ANSI C.  wcecompat goes further
 | 
			
		||||
 and provides low-level IO and stream IO support for stdin/stdout/stderr
 | 
			
		||||
 (which Windows CE does not provide).  This IO functionality is not needed
 | 
			
		||||
 by the OpenSSL library itself but is used for the tests and openssl.exe.
 | 
			
		||||
 More information is available at www.essemer.com.au.
 | 
			
		||||
 | 
			
		||||
 Building
 | 
			
		||||
 --------
 | 
			
		||||
 | 
			
		||||
 Setup the eMbedded Visual C++ environment.  There are batch files for doing
 | 
			
		||||
 this installed with eVC++.  For an ARM processor, for example, execute:
 | 
			
		||||
 | 
			
		||||
 > "C:\Program Files\Microsoft eMbedded Tools\EVC\WCE300\BIN\WCEARM.BAT"
 | 
			
		||||
 | 
			
		||||
 Next indicate where wcecompat is located:
 | 
			
		||||
 | 
			
		||||
 > set WCECOMPAT=C:\wcecompat
 | 
			
		||||
 | 
			
		||||
 Next you should run Configure:
 | 
			
		||||
 | 
			
		||||
 > perl Configure VC-CE
 | 
			
		||||
 | 
			
		||||
 Next you need to build the Makefiles:
 | 
			
		||||
 | 
			
		||||
 > ms\do_ms
 | 
			
		||||
 | 
			
		||||
 If you get errors about things not having numbers assigned then check the
 | 
			
		||||
 troubleshooting section in INSTALL.W32: you probably won't be able to compile
 | 
			
		||||
 it as it stands.
 | 
			
		||||
 | 
			
		||||
 Then from the VC++ environment at a prompt do:
 | 
			
		||||
 | 
			
		||||
 - to build static libraries:
 | 
			
		||||
 | 
			
		||||
   > nmake -f ms\ce.mak
 | 
			
		||||
 | 
			
		||||
 - or to build DLLs:
 | 
			
		||||
 | 
			
		||||
   > nmake -f ms\cedll.mak
 | 
			
		||||
 | 
			
		||||
 If all is well it should compile and you will have some static libraries and
 | 
			
		||||
 executables in out32, or some DLLs and executables in out32dll.  If you want
 | 
			
		||||
 to try the tests then make sure the ceutils are in the path and do:
 | 
			
		||||
 
 | 
			
		||||
 > cd out32
 | 
			
		||||
 > ..\ms\testce
 | 
			
		||||
 | 
			
		||||
 This will copy each of the test programs to the Windows CE device and execute
 | 
			
		||||
 them, displaying the output of the tests on this computer.  The output should
 | 
			
		||||
 look similar to the output produced by running the tests for a regular Windows
 | 
			
		||||
 build.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							@@ -12,7 +12,7 @@
 | 
			
		||||
  ---------------
 | 
			
		||||
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 * Copyright (c) 1998-2003 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1287,7 +1287,7 @@ EXITPOINT:
 | 
			
		||||
 | 
			
		||||
//	Send some bytes
 | 
			
		||||
 | 
			
		||||
int MacSocket_send(const int inSocketNum,void *inBuff,int inBuffLength)
 | 
			
		||||
int MacSocket_send(const int inSocketNum,const void *inBuff,int inBuffLength)
 | 
			
		||||
{
 | 
			
		||||
OSErr			errCode = noErr;
 | 
			
		||||
int				bytesSent = 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -62,7 +62,7 @@ int MacSocket_recv(const int inSocketNum,void *outBuff,int outBuffLength,const B
 | 
			
		||||
 | 
			
		||||
//	Call this to send data on a socket
 | 
			
		||||
 | 
			
		||||
int MacSocket_send(const int inSocketNum,void *inBuff,int inBuffLength);
 | 
			
		||||
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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										523
									
								
								Makefile.org
									
									
									
									
									
								
							
							
						
						
									
										523
									
								
								Makefile.org
									
									
									
									
									
								
							@@ -15,6 +15,11 @@ OPTIONS=
 | 
			
		||||
CONFIGURE_ARGS=
 | 
			
		||||
SHLIB_TARGET=
 | 
			
		||||
 | 
			
		||||
# HERE indicates where this Makefile lives.  This can be used to indicate
 | 
			
		||||
# where sub-Makefiles are expected to be.  Currently has very limited usage,
 | 
			
		||||
# and should probably not be bothered with at all.
 | 
			
		||||
HERE=.
 | 
			
		||||
 | 
			
		||||
# INSTALL_PREFIX is for package builders so that they can configure
 | 
			
		||||
# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
 | 
			
		||||
# Normally it is left empty.
 | 
			
		||||
@@ -59,13 +64,22 @@ DEPFLAG=
 | 
			
		||||
PEX_LIBS= 
 | 
			
		||||
EX_LIBS= 
 | 
			
		||||
EXE_EXT= 
 | 
			
		||||
AR=ar r
 | 
			
		||||
ARFLAGS=
 | 
			
		||||
AR=ar $(ARFLAGS) r
 | 
			
		||||
RANLIB= ranlib
 | 
			
		||||
PERL= perl
 | 
			
		||||
TAR= tar
 | 
			
		||||
TARFLAGS= --no-recursion
 | 
			
		||||
MAKEDEPPROG=makedepend
 | 
			
		||||
 | 
			
		||||
# We let the C compiler driver to take care of .s files. This is done in
 | 
			
		||||
# order to be excused from maintaining a separate set of architecture
 | 
			
		||||
# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
 | 
			
		||||
# gcc, then the driver will automatically translate it to -xarch=v8plus
 | 
			
		||||
# and pass it down to assembler.
 | 
			
		||||
AS=$(CC) -c
 | 
			
		||||
ASFLAG=$(CFLAG)
 | 
			
		||||
 | 
			
		||||
# Set BN_ASM to bn_asm.o if you want to use the C version
 | 
			
		||||
BN_ASM= bn_asm.o
 | 
			
		||||
#BN_ASM= bn_asm.o
 | 
			
		||||
@@ -155,31 +169,31 @@ RMD160_ASM_OBJ= asm/rm86-out.o
 | 
			
		||||
KRB5_INCLUDES=
 | 
			
		||||
LIBKRB5=
 | 
			
		||||
 | 
			
		||||
# When we're prepared to use shared libraries in the programs we link here
 | 
			
		||||
# we might set SHLIB_MARK to '$(SHARED_LIBS)'.
 | 
			
		||||
SHLIB_MARK=
 | 
			
		||||
 | 
			
		||||
DIRS=   crypto ssl $(SHLIB_MARK) apps test tools
 | 
			
		||||
DIRS=   crypto ssl engines apps test tools
 | 
			
		||||
SHLIBDIRS= crypto ssl
 | 
			
		||||
 | 
			
		||||
# dirs in crypto to build
 | 
			
		||||
SDIRS=  \
 | 
			
		||||
	objects \
 | 
			
		||||
	md2 md4 md5 sha mdc2 hmac ripemd \
 | 
			
		||||
	des rc2 rc4 rc5 idea bf cast \
 | 
			
		||||
	bn ec rsa dsa ecdsa dh dso engine aes \
 | 
			
		||||
	buffer bio stack lhash rand err objects \
 | 
			
		||||
	evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5
 | 
			
		||||
	bn ec rsa dsa ecdsa dh ecdh dso engine aes \
 | 
			
		||||
	buffer bio stack lhash rand err \
 | 
			
		||||
	evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 \
 | 
			
		||||
	store
 | 
			
		||||
 | 
			
		||||
# tests to perform.  "alltests" is a special word indicating that all tests
 | 
			
		||||
# should be performed.
 | 
			
		||||
TESTS = alltests
 | 
			
		||||
 | 
			
		||||
MAKEFILE= Makefile.ssl
 | 
			
		||||
MAKE=     make -f Makefile.ssl
 | 
			
		||||
NEWMAKE=  make
 | 
			
		||||
MAKE=     $(NEWMAKE) -f Makefile.ssl
 | 
			
		||||
 | 
			
		||||
MANDIR=$(OPENSSLDIR)/man
 | 
			
		||||
MAN1=1
 | 
			
		||||
MAN3=3
 | 
			
		||||
MANSUFFIX=
 | 
			
		||||
SHELL=/bin/sh
 | 
			
		||||
 | 
			
		||||
TOP=    .
 | 
			
		||||
@@ -201,21 +215,33 @@ WTARFILE=       $(NAME)-win.tar
 | 
			
		||||
EXHEADER=       e_os2.h
 | 
			
		||||
HEADER=         e_os.h
 | 
			
		||||
 | 
			
		||||
# When we're prepared to use shared libraries in the programs we link here
 | 
			
		||||
# we might remove 'clean-shared' from the targets to perform at this stage
 | 
			
		||||
all: Makefile.ssl build_all openssl.pc
 | 
			
		||||
 | 
			
		||||
all: Makefile.ssl sub_all
 | 
			
		||||
 | 
			
		||||
sub_all:
 | 
			
		||||
	@for i in $(DIRS); \
 | 
			
		||||
	do \
 | 
			
		||||
BUILD_CMD=if echo " $(DIRS) " | grep " $$i " >/dev/null 2>/dev/null; then \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i && echo "making all in $$i..." && \
 | 
			
		||||
		$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' all ) || exit 1; \
 | 
			
		||||
		$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' AS='${AS}' ASFLAG='${ASFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' all ) || exit 1; \
 | 
			
		||||
	else \
 | 
			
		||||
		$(MAKE) $$i; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	done;
 | 
			
		||||
	fi; fi
 | 
			
		||||
 | 
			
		||||
sub_all: build_all
 | 
			
		||||
build_all: build_libs build_apps build_tests build_tools
 | 
			
		||||
 | 
			
		||||
build_libs: build_crypto build_ssl build_engines
 | 
			
		||||
 | 
			
		||||
build_crypto:
 | 
			
		||||
	@i=crypto; $(BUILD_CMD)
 | 
			
		||||
build_ssl:
 | 
			
		||||
	@i=ssl; $(BUILD_CMD)
 | 
			
		||||
build_engines:
 | 
			
		||||
	@i=engines; $(BUILD_CMD)
 | 
			
		||||
build_apps:
 | 
			
		||||
	@i=apps; $(BUILD_CMD)
 | 
			
		||||
build_tests:
 | 
			
		||||
	@i=test; $(BUILD_CMD)
 | 
			
		||||
build_tools:
 | 
			
		||||
	@i=tools; $(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
libcrypto$(SHLIB_EXT): libcrypto.a
 | 
			
		||||
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
			
		||||
@@ -232,7 +258,7 @@ libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
clean-shared:
 | 
			
		||||
	@for i in $(SHLIBDIRS); do \
 | 
			
		||||
	@set -e; for i in $(SHLIBDIRS); do \
 | 
			
		||||
		if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
 | 
			
		||||
			tmp="$(SHARED_LIBS_LINK_EXTS)"; \
 | 
			
		||||
			for j in $${tmp:-x}; do \
 | 
			
		||||
@@ -246,271 +272,44 @@ clean-shared:
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
link-shared:
 | 
			
		||||
	@if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
 | 
			
		||||
		tmp="$(SHARED_LIBS_LINK_EXTS)"; \
 | 
			
		||||
		for i in $(SHLIBDIRS); do \
 | 
			
		||||
			prev=lib$$i$(SHLIB_EXT); \
 | 
			
		||||
			for j in $${tmp:-x}; do \
 | 
			
		||||
				( set -x; ln -f -s $$prev lib$$i$$j ); \
 | 
			
		||||
				prev=lib$$i$$j; \
 | 
			
		||||
			done; \
 | 
			
		||||
		done; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
build-shared: clean-shared do_$(SHLIB_TARGET) link-shared
 | 
			
		||||
 | 
			
		||||
do_bsd-gcc-shared: do_gnu-shared
 | 
			
		||||
do_linux-shared: do_gnu-shared
 | 
			
		||||
do_gnu-shared:
 | 
			
		||||
	libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
			
		||||
	( set -x; ${CC} ${SHARED_LDFLAGS} \
 | 
			
		||||
		-shared -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
		-Wl,-soname=lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
		-Wl,-Bsymbolic \
 | 
			
		||||
		-Wl,--whole-archive lib$$i.a \
 | 
			
		||||
		-Wl,--no-whole-archive $$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
			
		||||
	@ set -e; for i in ${SHLIBDIRS}; do \
 | 
			
		||||
		$(NEWMAKE) -f $(HERE)/Makefile.shared \
 | 
			
		||||
			LIBNAME=$$i LIBVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
			LIBCOMPATVERSIONS=";${SHLIB_VERSION_HISTORY}" \
 | 
			
		||||
			symlink.$(SHLIB_TARGET); \
 | 
			
		||||
		libs="$$libs -l$$i"; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
DETECT_GNU_LD=${CC} -v 2>&1 | grep '^gcc' >/dev/null 2>&1 && \
 | 
			
		||||
	collect2=`gcc -print-prog-name=collect2 2>&1` && \
 | 
			
		||||
	[ -n "$$collect2" ] && \
 | 
			
		||||
	my_ld=`$$collect2 --help 2>&1 | grep Usage: | sed 's/^Usage: *\([^ ][^ ]*\).*/\1/'` && \
 | 
			
		||||
	[ -n "$$my_ld" ] && \
 | 
			
		||||
	$$my_ld -v 2>&1 | grep 'GNU ld' >/dev/null 2>&1
 | 
			
		||||
build-shared: do_$(SHLIB_TARGET) link-shared
 | 
			
		||||
 | 
			
		||||
# For Darwin AKA Mac OS/X (dyld)
 | 
			
		||||
do_darwin-shared: 
 | 
			
		||||
	libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
			
		||||
	( set -x ; ${CC} --verbose -dynamiclib -o lib$$i${SHLIB_EXT} \
 | 
			
		||||
		lib$$i.a $$libs -all_load -current_version ${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
		-compatibility_version ${SHLIB_MAJOR}.`echo ${SHLIB_MINOR} | cut -d. -f1` \
 | 
			
		||||
		-install_name ${INSTALLTOP}/lib/lib$$i${SHLIB_EXT} ) || exit 1; \
 | 
			
		||||
	libs="$$libs -l`basename $$i${SHLIB_EXT} .dylib`"; \
 | 
			
		||||
	echo "" ; \
 | 
			
		||||
do_$(SHLIB_TARGET):
 | 
			
		||||
	@ set -e; libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
			
		||||
		if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
			
		||||
			libs="$(LIBKRB5) $$libs"; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		$(NEWMAKE) -f Makefile.shared \
 | 
			
		||||
			CC="$(CC)" LDFLAGS="$(LDFLAGS)" \
 | 
			
		||||
			SHARED_LDFLAGS="$(SHARED_LDFLAGS)" \
 | 
			
		||||
			LIBNAME=$$i LIBVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
			LIBCOMPATVERSIONS=";${SHLIB_VERSION_HISTORY}" \
 | 
			
		||||
			LIBDEPS="$$libs $(EX_LIBS)" \
 | 
			
		||||
			LIBRPATH="$(INSTALLTOP)/lib" \
 | 
			
		||||
			link_a.$(SHLIB_TARGET); \
 | 
			
		||||
		libs="-l$$i $$libs"; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
do_cygwin-shared:
 | 
			
		||||
	libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
			
		||||
	( set -x; ${CC}  -shared -o cyg$$i.dll \
 | 
			
		||||
		-Wl,-Bsymbolic \
 | 
			
		||||
		-Wl,--whole-archive lib$$i.a \
 | 
			
		||||
		-Wl,--out-implib,lib$$i.dll.a \
 | 
			
		||||
		-Wl,--no-whole-archive $$libs ) || exit 1; \
 | 
			
		||||
	libs="$$libs -l$$i"; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
# This assumes that GNU utilities are *not* used
 | 
			
		||||
do_alpha-osf1-shared:
 | 
			
		||||
	if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(MAKE) do_gnu-shared; \
 | 
			
		||||
	else \
 | 
			
		||||
		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
			
		||||
		( set -x; ${CC} ${SHARED_LDFLAGS} \
 | 
			
		||||
			-shared -o lib$$i.so \
 | 
			
		||||
			-set_version "${SHLIB_VERSION_HISTORY}${SHLIB_VERSION_NUMBER}" \
 | 
			
		||||
			-all lib$$i.a -none $$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
			
		||||
		libs="$$libs -l$$i"; \
 | 
			
		||||
		done; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
# This assumes that GNU utilities are *not* used
 | 
			
		||||
# The difference between alpha-osf1-shared and tru64-shared is the `-msym'
 | 
			
		||||
# option passed to the linker.
 | 
			
		||||
do_tru64-shared:
 | 
			
		||||
	if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(MAKE) do_gnu-shared; \
 | 
			
		||||
	else \
 | 
			
		||||
		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
			
		||||
		( set -x; ${CC} ${SHARED_LDFLAGS} \
 | 
			
		||||
			-shared -msym -o lib$$i.so \
 | 
			
		||||
			-set_version "${SHLIB_VERSION_HISTORY}${SHLIB_VERSION_NUMBER}" \
 | 
			
		||||
			-all lib$$i.a -none $$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
			
		||||
		libs="$$libs -l$$i"; \
 | 
			
		||||
		done; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
# This assumes that GNU utilities are *not* used
 | 
			
		||||
# The difference between tru64-shared and tru64-shared-rpath is the
 | 
			
		||||
# -rpath ${INSTALLTOP}/lib passed to the linker.
 | 
			
		||||
do_tru64-shared-rpath:
 | 
			
		||||
	if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(MAKE) do_gnu-shared; \
 | 
			
		||||
	else \
 | 
			
		||||
		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
			
		||||
		( set -x; ${CC} ${SHARED_LDFLAGS} \
 | 
			
		||||
			-shared -msym -o lib$$i.so \
 | 
			
		||||
			-rpath  ${INSTALLTOP}/lib \
 | 
			
		||||
			-set_version "${SHLIB_VERSION_HISTORY}${SHLIB_VERSION_NUMBER}" \
 | 
			
		||||
			-all lib$$i.a -none $$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
			
		||||
		libs="$$libs -l$$i"; \
 | 
			
		||||
		done; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# This assumes that GNU utilities are *not* used
 | 
			
		||||
do_solaris-shared:
 | 
			
		||||
	if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(MAKE) do_gnu-shared; \
 | 
			
		||||
	else \
 | 
			
		||||
		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
			
		||||
		( PATH=/usr/ccs/bin:$$PATH ; export PATH; \
 | 
			
		||||
		  set -x; ${CC} ${SHARED_LDFLAGS} \
 | 
			
		||||
			-G -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
			-h lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
			-z allextract lib$$i.a $$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
			
		||||
		libs="$$libs -l$$i"; \
 | 
			
		||||
		done; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
# OpenServer 5 native compilers used
 | 
			
		||||
do_svr3-shared:
 | 
			
		||||
	if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(MAKE) do_gnu-shared; \
 | 
			
		||||
	else \
 | 
			
		||||
		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
			
		||||
		( PATH=/usr/ccs/bin:$$PATH ; export PATH; \
 | 
			
		||||
		  find . -name "*.o" -print > allobjs ; \
 | 
			
		||||
		  OBJS= ; export OBJS ; \
 | 
			
		||||
		  for obj in `ar t lib$$i.a` ; do \
 | 
			
		||||
		    OBJS="$${OBJS} `grep $$obj allobjs`" ; \
 | 
			
		||||
		  done ; \
 | 
			
		||||
		  set -x; ${CC}  -G -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
			-h lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
			$${OBJS} $$libs ${EX_LIBS} ) || exit 1; \
 | 
			
		||||
		libs="$$libs -l$$i"; \
 | 
			
		||||
		done; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
# UnixWare 7 and OpenUNIX 8 native compilers used
 | 
			
		||||
do_svr5-shared:
 | 
			
		||||
	if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(MAKE) do_gnu-shared; \
 | 
			
		||||
	else \
 | 
			
		||||
		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
			
		||||
		( PATH=/usr/ccs/bin:$$PATH ; export PATH; \
 | 
			
		||||
		  find . -name "*.o" -print > allobjs ; \
 | 
			
		||||
		  OBJS= ; export OBJS ; \
 | 
			
		||||
		  for obj in `ar t lib$$i.a` ; do \
 | 
			
		||||
		    OBJS="$${OBJS} `grep $$obj allobjs`" ; \
 | 
			
		||||
		  done ; \
 | 
			
		||||
		  set -x; ${CC} ${SHARED_LDFLAGS} \
 | 
			
		||||
			-G -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
			-h lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
			$${OBJS} $$libs ${EX_LIBS} ) || exit 1; \
 | 
			
		||||
		libs="$$libs -l$$i"; \
 | 
			
		||||
		done; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
# This assumes that GNU utilities are *not* used
 | 
			
		||||
do_irix-shared:
 | 
			
		||||
	if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(MAKE) do_gnu-shared; \
 | 
			
		||||
	else \
 | 
			
		||||
		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
			
		||||
		( set -x; ${CC} ${SHARED_LDFLAGS} \
 | 
			
		||||
			-shared -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
			-Wl,-soname,lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
			-all lib$$i.a $$libs ${EX_LIBS} -lc) || exit 1; \
 | 
			
		||||
		libs="$$libs -l$$i"; \
 | 
			
		||||
		done; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
# This assumes that GNU utilities are *not* used
 | 
			
		||||
# HP-UX includes the full pathname of libs we depend on, so we would get
 | 
			
		||||
# ./libcrypto (with ./ as path information) compiled into libssl, hence
 | 
			
		||||
# we omit the SHLIBDEPS. Applications must be linked with -lssl -lcrypto
 | 
			
		||||
# anyway.
 | 
			
		||||
# The object modules are loaded from lib$i.a using the undocumented -Fl
 | 
			
		||||
# option.
 | 
			
		||||
#
 | 
			
		||||
# WARNING: Until DSO is fixed to support a search path, we support SHLIB_PATH
 | 
			
		||||
#          by temporarily specifying "+s"!
 | 
			
		||||
#
 | 
			
		||||
do_hpux-shared:
 | 
			
		||||
	for i in ${SHLIBDIRS}; do \
 | 
			
		||||
	( set -x; /usr/ccs/bin/ld ${SHARED_LDFLAGS} \
 | 
			
		||||
 		+vnocompatwarnings \
 | 
			
		||||
		-b -z +s \
 | 
			
		||||
		-o lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
		+h lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
		-Fl lib$$i.a -ldld -lc ) || exit 1; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
# This assumes that GNU utilities are *not* used
 | 
			
		||||
# HP-UX includes the full pathname of libs we depend on, so we would get
 | 
			
		||||
# ./libcrypto (with ./ as path information) compiled into libssl, hence
 | 
			
		||||
# we omit the SHLIBDEPS. Applications must be linked with -lssl -lcrypto
 | 
			
		||||
# anyway.
 | 
			
		||||
#
 | 
			
		||||
# HP-UX in 64bit mode has "+s" enabled by default; it will search for
 | 
			
		||||
# shared libraries along LD_LIBRARY_PATH _and_ SHLIB_PATH.
 | 
			
		||||
#
 | 
			
		||||
do_hpux64-shared:
 | 
			
		||||
	for i in ${SHLIBDIRS}; do \
 | 
			
		||||
	( set -x; /usr/ccs/bin/ld ${SHARED_LDFLAGS} \
 | 
			
		||||
 		-b -z \
 | 
			
		||||
		-o lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
		+h lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
		+forceload lib$$i.a -ldl -lc ) || exit 1; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
# The following method is said to work on all platforms.  Tests will
 | 
			
		||||
# determine if that's how it's gong to be used.
 | 
			
		||||
# This assumes that for all but GNU systems, GNU utilities are *not* used.
 | 
			
		||||
# ALLSYMSFLAGS would be:
 | 
			
		||||
#  GNU systems: --whole-archive
 | 
			
		||||
#  Tru64 Unix:  -all
 | 
			
		||||
#  Solaris:     -z allextract
 | 
			
		||||
#  Irix:        -all
 | 
			
		||||
#  HP/UX-32bit: -Fl
 | 
			
		||||
#  HP/UX-64bit: +forceload
 | 
			
		||||
#  AIX:		-bnogc
 | 
			
		||||
# SHAREDFLAGS would be:
 | 
			
		||||
#  GNU systems: -shared -Wl,-soname=lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
 | 
			
		||||
#  Tru64 Unix:  -shared \
 | 
			
		||||
#		-set_version "${SHLIB_VERSION_HISTORY}${SHLIB_VERSION_NUMBER}"
 | 
			
		||||
#  Solaris:     -G -h lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
 | 
			
		||||
#  Irix:        -shared -Wl,-soname,lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
 | 
			
		||||
#  HP/UX-32bit: +vnocompatwarnings -b -z +s \
 | 
			
		||||
#		+h lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR}
 | 
			
		||||
#  HP/UX-64bit: -b -z +h lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR}
 | 
			
		||||
#  AIX:		-G -bE:lib$$i.exp -bM:SRE
 | 
			
		||||
# SHAREDCMD would be:
 | 
			
		||||
#  GNU systems: $(CC)
 | 
			
		||||
#  Tru64 Unix:  $(CC)
 | 
			
		||||
#  Solaris:     $(CC)
 | 
			
		||||
#  Irix:        $(CC)
 | 
			
		||||
#  HP/UX-32bit: /usr/ccs/bin/ld
 | 
			
		||||
#  HP/UX-64bit: /usr/ccs/bin/ld
 | 
			
		||||
#  AIX:		$(CC)
 | 
			
		||||
ALLSYMSFLAG=-bnogc
 | 
			
		||||
SHAREDFLAGS=${SHARED_LDFLAGS} -G -bE:lib$$i.exp -bM:SRE
 | 
			
		||||
SHAREDCMD=$(CC)
 | 
			
		||||
do_aix-shared:
 | 
			
		||||
	libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
			
		||||
	( set -x; \
 | 
			
		||||
	  ld -r -o $$i.o $(ALLSYMSFLAG) lib$$i.a && \
 | 
			
		||||
	  ( nm -Pg lib$$i.o | grep ' [BD] ' | cut -f1 -d' ' > lib$$i.exp; \
 | 
			
		||||
	    $(SHAREDCMD) $(SHAREDFLAG) -o lib$$i.so lib$$i.o \
 | 
			
		||||
		$$libs ${EX_LIBS} ) ) \
 | 
			
		||||
	|| exit 1; \
 | 
			
		||||
	libs="$$libs -l$$i"; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
do_reliantunix-shared:
 | 
			
		||||
	libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
			
		||||
	tmpdir=/tmp/openssl.$$$$ ; rm -rf $$tmpdir ; \
 | 
			
		||||
	( set -x; \
 | 
			
		||||
	  ( Opwd=`pwd` ; mkdir $$tmpdir || exit 1; \
 | 
			
		||||
	    cd $$tmpdir || exit 1 ; ar x $$Opwd/lib$$i.a ; \
 | 
			
		||||
	    ${CC} -G -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} *.o \
 | 
			
		||||
	  ) || exit 1; \
 | 
			
		||||
	  cp $$tmpdir/lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} . ; \
 | 
			
		||||
	) || exit 1; \
 | 
			
		||||
	rm -rf $$tmpdir ; \
 | 
			
		||||
	libs="$$libs -l$$i"; \
 | 
			
		||||
	done
 | 
			
		||||
openssl.pc: Makefile.ssl
 | 
			
		||||
	@ ( echo 'prefix=$(INSTALLTOP)'; \
 | 
			
		||||
	    echo 'exec_prefix=$${prefix}'; \
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/lib'; \
 | 
			
		||||
	    echo 'includedir=$${prefix}/include'; \
 | 
			
		||||
	    echo ''; \
 | 
			
		||||
	    echo 'Name: OpenSSL'; \
 | 
			
		||||
	    echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
 | 
			
		||||
 | 
			
		||||
Makefile.ssl: Makefile.org
 | 
			
		||||
	@echo "Makefile.ssl is older than Makefile.org."
 | 
			
		||||
@@ -518,11 +317,11 @@ Makefile.ssl: Makefile.org
 | 
			
		||||
	@false
 | 
			
		||||
 | 
			
		||||
libclean:
 | 
			
		||||
	rm -f *.a */lib */*/lib
 | 
			
		||||
	rm -f *.map *.so *.so.* engines/*.so *.a */lib */*/lib
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f shlib/*.o *.o core a.out fluff *.map rehash.time testlog make.log cctest cctest.c
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
clean:	libclean
 | 
			
		||||
	rm -f shlib/*.o *.o core a.out fluff rehash.time testlog make.log cctest cctest.c
 | 
			
		||||
	@set -e; for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i && echo "making clean in $$i..." && \
 | 
			
		||||
@@ -530,9 +329,10 @@ clean:
 | 
			
		||||
		rm -f $(LIBS); \
 | 
			
		||||
	fi; \
 | 
			
		||||
	done;
 | 
			
		||||
	rm -f *.a *.o speed.* *.map *.so .pure core
 | 
			
		||||
	rm -f openssl.pc
 | 
			
		||||
	rm -f speed.* .pure
 | 
			
		||||
	rm -f $(TARFILE)
 | 
			
		||||
	@for i in $(ONEDIRS) ;\
 | 
			
		||||
	@set -e; for i in $(ONEDIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	rm -fr $$i/*; \
 | 
			
		||||
	done
 | 
			
		||||
@@ -543,7 +343,7 @@ makefile.one: files
 | 
			
		||||
 | 
			
		||||
files:
 | 
			
		||||
	$(PERL) $(TOP)/util/files.pl Makefile.ssl > $(TOP)/MINFO
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	@set -e; for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i && echo "making 'files' in $$i..." && \
 | 
			
		||||
@@ -555,16 +355,20 @@ links:
 | 
			
		||||
	@$(TOP)/util/point.sh Makefile.ssl Makefile
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
 | 
			
		||||
	@$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
 | 
			
		||||
	@for i in $(DIRS); do \
 | 
			
		||||
	@set -e; for i in $(DIRS); do \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i && echo "making links in $$i..." && \
 | 
			
		||||
		$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PERL='${PERL}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' links ) || exit 1; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
gentests:
 | 
			
		||||
	@(cd test && echo "generating dummy tests (if needed)..." && \
 | 
			
		||||
	$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' TESTS='${TESTS}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on generate );
 | 
			
		||||
 | 
			
		||||
dclean:
 | 
			
		||||
	rm -f *.bak
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	@set -e; for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i && echo "making dclean in $$i..." && \
 | 
			
		||||
@@ -576,8 +380,12 @@ rehash: rehash.time
 | 
			
		||||
rehash.time: certs
 | 
			
		||||
	@(OPENSSL="`pwd`/apps/openssl"; OPENSSL_DEBUG_MEMORY=on; \
 | 
			
		||||
		export OPENSSL OPENSSL_DEBUG_MEMORY; \
 | 
			
		||||
		LD_LIBRARY_PATH="`pwd`"; SHLIB_PATH="`pwd`"; LIBPATH="`pwd`"; \
 | 
			
		||||
		export LD_LIBRARY_PATH SHLIB_PATH LIBPATH; \
 | 
			
		||||
		LD_LIBRARY_PATH="`pwd`:$$LD_LIBRARY_PATH"; \
 | 
			
		||||
		DYLD_LIBRARY_PATH="`pwd`:$$DYLD_LIBRARY_PATH"; \
 | 
			
		||||
		SHLIB_PATH="`pwd`:$$SHLIB_PATH"; \
 | 
			
		||||
		LIBPATH="`pwd`:$$LIBPATH"; \
 | 
			
		||||
		if [ "$(PLATFORM)" = "Cygwin" ]; then PATH="`pwd`:$$PATH"; fi; \
 | 
			
		||||
		export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH LIBPATH PATH; \
 | 
			
		||||
		$(PERL) tools/c_rehash certs)
 | 
			
		||||
	touch rehash.time
 | 
			
		||||
 | 
			
		||||
@@ -585,25 +393,29 @@ test:   tests
 | 
			
		||||
 | 
			
		||||
tests: rehash
 | 
			
		||||
	@(cd test && echo "testing..." && \
 | 
			
		||||
	$(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SDIRS='${SDIRS}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PERL='${PERL}' TESTS='${TESTS}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' OPENSSL_DEBUG_MEMORY=on tests );
 | 
			
		||||
	@LD_LIBRARY_PATH="`pwd`"; SHLIB_PATH="`pwd`"; LIBPATH="`pwd`"; \
 | 
			
		||||
		export LD_LIBRARY_PATH SHLIB_PATH LIBPATH; \
 | 
			
		||||
	$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' TESTS='${TESTS}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on tests );
 | 
			
		||||
	@LD_LIBRARY_PATH="`pwd`:$$LD_LIBRARY_PATH"; \
 | 
			
		||||
	DYLD_LIBRARY_PATH="`pwd`:$$DYLD_LIBRARY_PATH"; \
 | 
			
		||||
	SHLIB_PATH="`pwd`:$$SHLIB_PATH"; \
 | 
			
		||||
	LIBPATH="`pwd`:$$LIBPATH"; \
 | 
			
		||||
	if [ "$(PLATFORM)" = "Cygwin" ]; then PATH="`pwd`:$$PATH"; fi; \
 | 
			
		||||
	export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH LIBPATH PATH; \
 | 
			
		||||
	apps/openssl version -a
 | 
			
		||||
 | 
			
		||||
report:
 | 
			
		||||
	@$(PERL) util/selftest.pl
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	@set -e; for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i && echo "making dependencies $$i..." && \
 | 
			
		||||
		$(MAKE) SDIRS='${SDIRS}' DEPFLAG='${DEPFLAG}' MAKEDEPPROG='${MAKEDEPPROG}' KRB5_INCLUDES='${KRB5_INCLUDES}' depend ) || exit 1; \
 | 
			
		||||
		$(MAKE) SDIRS='${SDIRS}' CFLAG='${CFLAG}' DEPFLAG='${DEPFLAG}' MAKEDEPPROG='${MAKEDEPPROG}' KRB5_INCLUDES='${KRB5_INCLUDES}' PERL='${PERL}' depend ) || exit 1; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
lint:
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	@set -e; for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i && echo "making lint $$i..." && \
 | 
			
		||||
@@ -612,7 +424,7 @@ lint:
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
tags:
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	@set -e; for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i && echo "making tags $$i..." && \
 | 
			
		||||
@@ -622,7 +434,7 @@ tags:
 | 
			
		||||
 | 
			
		||||
errors:
 | 
			
		||||
	$(PERL) util/mkerr.pl -recurse -write
 | 
			
		||||
	(cd crypto/engine; $(MAKE) PERL=$(PERL) errors)
 | 
			
		||||
	(cd engines; $(MAKE) PERL=$(PERL) errors)
 | 
			
		||||
 | 
			
		||||
stacks:
 | 
			
		||||
	$(PERL) util/mkstack.pl -write
 | 
			
		||||
@@ -644,13 +456,22 @@ TABLE: Configure
 | 
			
		||||
 | 
			
		||||
update: depend errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h TABLE
 | 
			
		||||
 | 
			
		||||
# Build distribution tar-file. As the list of files returned by "find" is
 | 
			
		||||
# pretty long, on several platforms a "too many arguments" error or similar
 | 
			
		||||
# would occur. Therefore the list of files is temporarily stored into a file
 | 
			
		||||
# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal
 | 
			
		||||
# tar does not support the --files-from option.
 | 
			
		||||
tar:
 | 
			
		||||
	@$(TAR) $(TARFLAGS) -cvf - \
 | 
			
		||||
		`find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE | sort` |\
 | 
			
		||||
	find . -type d -print | xargs chmod 755
 | 
			
		||||
	find . -type f -print | xargs chmod a+r
 | 
			
		||||
	find . -type f -perm -0100 -print | xargs chmod a+x
 | 
			
		||||
	find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE | sort > ../$(TARFILE).list; \
 | 
			
		||||
	$(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list -cvf - | \
 | 
			
		||||
	tardy --user_number=0  --user_name=openssl \
 | 
			
		||||
	      --group_number=0 --group_name=openssl \
 | 
			
		||||
	      --prefix=openssl-$(VERSION) - |\
 | 
			
		||||
	gzip --best >../$(TARFILE).gz; \
 | 
			
		||||
	rm -f ../$(TARFILE).list; \
 | 
			
		||||
	ls -l ../$(TARFILE).gz
 | 
			
		||||
 | 
			
		||||
tar-snap:
 | 
			
		||||
@@ -665,7 +486,7 @@ dist:
 | 
			
		||||
	$(PERL) Configure dist
 | 
			
		||||
	@$(MAKE) dist_pem_h
 | 
			
		||||
	@$(MAKE) SDIRS='${SDIRS}' clean
 | 
			
		||||
	@$(MAKE) tar
 | 
			
		||||
	@$(MAKE) TAR='${TAR}' TARFLAGS='${TARFLAGS}' tar
 | 
			
		||||
 | 
			
		||||
dist_pem_h:
 | 
			
		||||
	(cd crypto/pem; $(MAKE) CC='${CC}' SDIRS='${SDIRS}' CFLAG='${CFLAG}' pem.h; $(MAKE) clean)
 | 
			
		||||
@@ -673,54 +494,68 @@ dist_pem_h:
 | 
			
		||||
install: all install_docs
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/lib \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/engines \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/private \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/lib
 | 
			
		||||
	@for i in $(EXHEADER) ;\
 | 
			
		||||
	@set -e; for i in $(EXHEADER) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
 | 
			
		||||
	done;
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	@set -e; for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i; echo "installing $$i..."; \
 | 
			
		||||
		$(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' INSTALLTOP='${INSTALLTOP}' OPENSSLDIR='${OPENSSLDIR}' EX_LIBS='${EX_LIBS}' SDIRS='${SDIRS}' RANLIB='${RANLIB}' EXE_EXT='${EXE_EXT}' install ); \
 | 
			
		||||
		$(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' INSTALLTOP='${INSTALLTOP}' OPENSSLDIR='${OPENSSLDIR}' EX_LIBS='${EX_LIBS}' SDIRS='${SDIRS}' RANLIB='${RANLIB}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' install ); \
 | 
			
		||||
	fi; \
 | 
			
		||||
	done
 | 
			
		||||
	@for i in $(LIBS) ;\
 | 
			
		||||
	@set -e; for i in $(LIBS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
		if [ -f "$$i" ]; then \
 | 
			
		||||
		(       echo installing $$i; \
 | 
			
		||||
			cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
 | 
			
		||||
			$(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \
 | 
			
		||||
			chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i ); \
 | 
			
		||||
		fi \
 | 
			
		||||
	done
 | 
			
		||||
	@if [ -n "$(SHARED_LIBS)" ]; then \
 | 
			
		||||
			cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
 | 
			
		||||
			$(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
 | 
			
		||||
			chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
 | 
			
		||||
			mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i ); \
 | 
			
		||||
		fi; \
 | 
			
		||||
	done;
 | 
			
		||||
	@set -e; if [ -n "$(SHARED_LIBS)" ]; then \
 | 
			
		||||
		tmp="$(SHARED_LIBS)"; \
 | 
			
		||||
		for i in $${tmp:-x}; \
 | 
			
		||||
		do \
 | 
			
		||||
			if [ -f "$$i" -o -f "$$i.a" ]; then \
 | 
			
		||||
			(       echo installing $$i; \
 | 
			
		||||
				if [ "$(PLATFORM)" != "Cygwin" ]; then \
 | 
			
		||||
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
 | 
			
		||||
					chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \
 | 
			
		||||
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
 | 
			
		||||
					chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
 | 
			
		||||
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \
 | 
			
		||||
				else \
 | 
			
		||||
					c=`echo $$i | sed 's/^lib/cyg/'`; \
 | 
			
		||||
					cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \
 | 
			
		||||
					chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \
 | 
			
		||||
					cp $$i.a $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a; \
 | 
			
		||||
					chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a; \
 | 
			
		||||
					cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
 | 
			
		||||
					chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
 | 
			
		||||
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \
 | 
			
		||||
					cp $$i.a $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a.new; \
 | 
			
		||||
					chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a.new; \
 | 
			
		||||
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a.new $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a; \
 | 
			
		||||
				fi ); \
 | 
			
		||||
			fi \
 | 
			
		||||
			fi; \
 | 
			
		||||
		done; \
 | 
			
		||||
		(	here="`pwd`"; \
 | 
			
		||||
			cd $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
 | 
			
		||||
			make -f $$here/Makefile link-shared ); \
 | 
			
		||||
			$(NEWMAKE) -f $$here/Makefile HERE="$$here" link-shared ); \
 | 
			
		||||
		if [ "$(INSTALLTOP)" != "/usr" ]; then \
 | 
			
		||||
			echo 'OpenSSL shared libraries have been installed in:'; \
 | 
			
		||||
			echo '  $(INSTALLTOP)'; \
 | 
			
		||||
			echo ''; \
 | 
			
		||||
			sed -e '1,/^$$/d' doc/openssl-shared.txt; \
 | 
			
		||||
		fi; \
 | 
			
		||||
	fi
 | 
			
		||||
	cp openssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig/openssl.pc
 | 
			
		||||
 | 
			
		||||
install_docs:
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl \
 | 
			
		||||
@@ -728,23 +563,45 @@ install_docs:
 | 
			
		||||
		$(INSTALL_PREFIX)$(MANDIR)/man3 \
 | 
			
		||||
		$(INSTALL_PREFIX)$(MANDIR)/man5 \
 | 
			
		||||
		$(INSTALL_PREFIX)$(MANDIR)/man7
 | 
			
		||||
	@for i in doc/apps/*.pod; do \
 | 
			
		||||
	@pod2man="`cd util; ./pod2mantest $(PERL)`"; \
 | 
			
		||||
	here="`pwd`"; \
 | 
			
		||||
	filecase=; \
 | 
			
		||||
	if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" ]; then \
 | 
			
		||||
		filecase=-i; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	set -e; for i in doc/apps/*.pod; do \
 | 
			
		||||
		fn=`basename $$i .pod`; \
 | 
			
		||||
		if [ "$$fn" = "config" ]; then sec=5; else sec=1; fi; \
 | 
			
		||||
		echo "installing man$$sec/`basename $$i .pod`.$$sec"; \
 | 
			
		||||
		(cd `dirname $$i`; \
 | 
			
		||||
		$(PERL) ../../util/pod2man.pl --section=$$sec --center=OpenSSL \
 | 
			
		||||
			 --release=$(VERSION) `basename $$i`) \
 | 
			
		||||
			>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/`basename $$i .pod`.$$sec; \
 | 
			
		||||
	done
 | 
			
		||||
	@for i in doc/crypto/*.pod doc/ssl/*.pod; do \
 | 
			
		||||
		echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
 | 
			
		||||
		(cd `$(PERL) util/dirname.pl $$i`; \
 | 
			
		||||
		sh -c "$$pod2man \
 | 
			
		||||
			--section=$$sec --center=OpenSSL \
 | 
			
		||||
			--release=$(VERSION) `basename $$i`") \
 | 
			
		||||
			>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
 | 
			
		||||
		$(PERL) util/extract-names.pl < $$i | \
 | 
			
		||||
			grep -v $$filecase "^$$fn\$$" | \
 | 
			
		||||
			grep -v "[	]" | \
 | 
			
		||||
			(cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \
 | 
			
		||||
			 while read n; do \
 | 
			
		||||
				$$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \
 | 
			
		||||
			 done); \
 | 
			
		||||
	done; \
 | 
			
		||||
	set -e; for i in doc/crypto/*.pod doc/ssl/*.pod; do \
 | 
			
		||||
		fn=`basename $$i .pod`; \
 | 
			
		||||
		if [ "$$fn" = "des_modes" ]; then sec=7; else sec=3; fi; \
 | 
			
		||||
		echo "installing man$$sec/`basename $$i .pod`.$$sec"; \
 | 
			
		||||
		(cd `dirname $$i`; \
 | 
			
		||||
		$(PERL) ../../util/pod2man.pl --section=$$sec --center=OpenSSL \
 | 
			
		||||
			--release=$(VERSION) `basename $$i`) \
 | 
			
		||||
			>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/`basename $$i .pod`.$$sec; \
 | 
			
		||||
		echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
 | 
			
		||||
		(cd `$(PERL) util/dirname.pl $$i`; \
 | 
			
		||||
		sh -c "$$pod2man \
 | 
			
		||||
			--section=$$sec --center=OpenSSL \
 | 
			
		||||
			--release=$(VERSION) `basename $$i`") \
 | 
			
		||||
			>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
 | 
			
		||||
		$(PERL) util/extract-names.pl < $$i | \
 | 
			
		||||
			grep -v $$filecase "^$$fn\$$" | \
 | 
			
		||||
			grep -v "[	]" | \
 | 
			
		||||
			(cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \
 | 
			
		||||
			 while read n; do \
 | 
			
		||||
				$$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \
 | 
			
		||||
			 done); \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										786
									
								
								Makefile.shared
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										786
									
								
								Makefile.shared
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,786 @@
 | 
			
		||||
#
 | 
			
		||||
# Helper makefile to link shared libraries in a portable way.
 | 
			
		||||
# This is much simpler than libtool, and hopefully not too error-prone.
 | 
			
		||||
#
 | 
			
		||||
# The following variables need to be set on the command line to build
 | 
			
		||||
# properly
 | 
			
		||||
 | 
			
		||||
# CC contains the current compiler.  This one MUST be defined
 | 
			
		||||
CC=cc
 | 
			
		||||
# LDFLAGS contains flags to be used when temporary object files (when building
 | 
			
		||||
# shared libraries) are created, or when an application is linked.
 | 
			
		||||
# SHARED_LDFLAGS contains flags to be used when the shared library is created.
 | 
			
		||||
LDFLAGS=
 | 
			
		||||
SHARED_LDFLAGS=
 | 
			
		||||
 | 
			
		||||
# LIBNAME contains just the name of the library, without prefix ("lib"
 | 
			
		||||
# on Unix, "cyg" for certain forms under Cygwin...) or suffix (.a, .so,
 | 
			
		||||
# .dll, ...).  This one MUST have a value when using this makefile to
 | 
			
		||||
# build shared libraries.
 | 
			
		||||
# For example, to build libfoo.so, you need to do the following:
 | 
			
		||||
#LIBNAME=foo
 | 
			
		||||
LIBNAME=
 | 
			
		||||
 | 
			
		||||
# APPNAME contains just the name of the application, without suffix (""
 | 
			
		||||
# on Unix, ".exe" on Windows, ...).  This one MUST have a value when using
 | 
			
		||||
# this makefile to build applications.
 | 
			
		||||
# For example, to build foo, you need to do the following:
 | 
			
		||||
#APPNAME=foo
 | 
			
		||||
APPNAME=
 | 
			
		||||
 | 
			
		||||
# OBJECTS contains all the object files to link together into the application.
 | 
			
		||||
# This must contain at least one object file.
 | 
			
		||||
#OBJECTS=foo.o
 | 
			
		||||
OBJECTS=
 | 
			
		||||
 | 
			
		||||
# LIBEXTRAS contains extra modules to link together with the library.
 | 
			
		||||
# For example, if a second library, say libbar.a needs to be linked into
 | 
			
		||||
# libfoo.so, you need to do the following:
 | 
			
		||||
#LIBEXTRAS=libbar.a
 | 
			
		||||
# Note that this MUST be used when using the link_o targets, to hold the
 | 
			
		||||
# names of all object files that go into the target library.
 | 
			
		||||
LIBEXTRAS=
 | 
			
		||||
 | 
			
		||||
# LIBVERSION contains the current version of the library.
 | 
			
		||||
# For example, to build libfoo.so.1.2, you need to do the following:
 | 
			
		||||
#LIBVERSION=1.2
 | 
			
		||||
LIBVERSION=
 | 
			
		||||
 | 
			
		||||
# LIBCOMPATVERSIONS contains the compatibility versions (a list) of
 | 
			
		||||
# the library.  They MUST be in decreasing order.
 | 
			
		||||
# For example, if libfoo.so.1.2.1 is backward compatible with libfoo.so.1.2
 | 
			
		||||
# and libfoo.so.1, you need to do the following:
 | 
			
		||||
#LIBCOMPATVERSIONS=1.2 1
 | 
			
		||||
# Note that on systems that use sonames, the last number will appear as
 | 
			
		||||
# part of it.
 | 
			
		||||
# It's also possible, for systems that support it (Tru64, for example),
 | 
			
		||||
# to add extra compatibility info with more precision, by adding a second
 | 
			
		||||
# list of versions, separated from the first with a semicolon, like this:
 | 
			
		||||
#LIBCOMPATVERSIONS=1.2 1;1.2.0 1.1.2 1.1.1 1.1.0 1.0.0
 | 
			
		||||
LIBCOMPATVERSIONS=
 | 
			
		||||
 | 
			
		||||
# LIBDEPS contains all the flags necessary to cover all necessary
 | 
			
		||||
# dependencies to other libraries.
 | 
			
		||||
LIBDEPS=
 | 
			
		||||
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
# The rest is private to this makefile.
 | 
			
		||||
 | 
			
		||||
#DEBUG=:
 | 
			
		||||
DEBUG=set -x
 | 
			
		||||
 | 
			
		||||
top:
 | 
			
		||||
	echo "Trying to use this makefile interactively?  Don't."
 | 
			
		||||
 | 
			
		||||
CALC_VERSIONS=	\
 | 
			
		||||
	SHLIB_COMPAT=; SHLIB_SOVER=; \
 | 
			
		||||
	if [ -n "$(LIBVERSION)$(LIBCOMPATVERSIONS)" ]; then \
 | 
			
		||||
		prev=""; \
 | 
			
		||||
		for v in `echo "$(LIBVERSION) $(LIBCOMPATVERSIONS)" | cut -d';' -f1`; do \
 | 
			
		||||
			SHLIB_SOVER_NODOT=$$v; \
 | 
			
		||||
			SHLIB_SOVER=.$$v; \
 | 
			
		||||
			if [ -n "$$prev" ]; then \
 | 
			
		||||
				SHLIB_COMPAT="$$SHLIB_COMPAT .$$prev"; \
 | 
			
		||||
			fi; \
 | 
			
		||||
			prev=$$v; \
 | 
			
		||||
		done; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
LINK_APP=	\
 | 
			
		||||
  ( $(DEBUG);   \
 | 
			
		||||
    LIBPATH=`for x in $$LIBDEPS; do if echo $$x | grep '^ *-L' > /dev/null 2>&1; then echo $$x | sed -e 's/^ *-L//'; fi; done | uniq`; \
 | 
			
		||||
    LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
 | 
			
		||||
    LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
 | 
			
		||||
    $$LDCMD $(LDFLAGS) $$LDFLAGS -o $$APPNAME $(OBJECTS) $$LIBDEPS )
 | 
			
		||||
 | 
			
		||||
LINK_SO=	\
 | 
			
		||||
  ( $(DEBUG);   \
 | 
			
		||||
    nm -Pg $$SHOBJECTS | grep ' [BDT] ' | cut -f1 -d' ' > lib$(LIBNAME).exp; \
 | 
			
		||||
    LIBPATH=`for x in $$LIBDEPS; do if echo $$x | grep '^ *-L' > /dev/null 2>&1; then echo $$x | sed -e 's/^ *-L//'; fi; done | uniq`; \
 | 
			
		||||
    LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
 | 
			
		||||
    LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
 | 
			
		||||
    $$SHAREDCMD $(SHARED_LDFLAGS) $$SHAREDFLAGS -o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \
 | 
			
		||||
	$$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS ) && \
 | 
			
		||||
  $(SYMLINK_SO); ( $(DEBUG); rm -f lib$(LIBNAME).exp )
 | 
			
		||||
SYMLINK_SO=	\
 | 
			
		||||
	if [ -n "$$INHIBIT_SYMLINKS" ]; then :; else \
 | 
			
		||||
		prev=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \
 | 
			
		||||
		if [ -n "$$SHLIB_COMPAT" ]; then \
 | 
			
		||||
			for x in $$SHLIB_COMPAT; do \
 | 
			
		||||
				( $(DEBUG); rm -f $$SHLIB$$x$$SHLIB_SUFFIX; \
 | 
			
		||||
				  ln -s $$prev $$SHLIB$$x$$SHLIB_SUFFIX ); \
 | 
			
		||||
				prev=$$SHLIB$$x$$SHLIB_SUFFIX; \
 | 
			
		||||
			done; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		if [ -n "$$SHLIB_SOVER" ]; then \
 | 
			
		||||
			( $(DEBUG); rm -f $$SHLIB$$SHLIB_SUFFIX; \
 | 
			
		||||
			  ln -s $$prev $$SHLIB$$SHLIB_SUFFIX ); \
 | 
			
		||||
		fi; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
LINK_SO_A=	SHOBJECTS="lib$(LIBNAME).a $(LIBEXTRAS)"; $(LINK_SO)
 | 
			
		||||
LINK_SO_O=	SHOBJECTS="$(LIBEXTRAS)"; $(LINK_SO)
 | 
			
		||||
LINK_SO_A_VIA_O=	\
 | 
			
		||||
  SHOBJECTS=lib$(LIBNAME).o; \
 | 
			
		||||
  ALL=$$ALLSYMSFLAGS; ALLSYMSFLAGS=; NOALLSYMSFLAGS=; \
 | 
			
		||||
  ( $(DEBUG); \
 | 
			
		||||
    ld $(LDFLAGS) -r -o lib$(LIBNAME).o $$ALL lib$(LIBNAME).a $(LIBEXTRAS) ); \
 | 
			
		||||
  $(LINK_SO) && rm -f $(LIBNAME).o
 | 
			
		||||
LINK_SO_A_UNPACKED=	\
 | 
			
		||||
  UNPACKDIR=link_tmp.$$$$; rm -rf $$UNPACKDIR; mkdir $$UNPACKDIR; \
 | 
			
		||||
  (cd $$UNPACKDIR; ar x ../lib$(LIBNAME).a) && \
 | 
			
		||||
  ([ -z "$(LIBEXTRAS)" ] || cp $(LIBEXTRAS) $$UNPACKDIR) && \
 | 
			
		||||
  SHOBJECTS=$$UNPACKDIR/*.o; \
 | 
			
		||||
  $(LINK_SO) && rm -rf $$UNPACKDIR
 | 
			
		||||
 | 
			
		||||
DETECT_GNU_LD=(${CC} -Wl,-V /dev/null 2>&1 | grep '^GNU ld' )>/dev/null
 | 
			
		||||
 | 
			
		||||
DO_GNU_SO=$(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	ALLSYMSFLAGS='-Wl,--whole-archive'; \
 | 
			
		||||
	NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
 | 
			
		||||
	SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,-soname=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -Wl,-rpath,$(LIBRPATH)"; \
 | 
			
		||||
	SHAREDCMD='$(CC)'
 | 
			
		||||
DO_GNU_APP=LDCMD=$(CC);\
 | 
			
		||||
	LDFLAGS="-Wl,-rpath,$(LIBRPATH)"; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	APPNAME=$(APPNAME)
 | 
			
		||||
 | 
			
		||||
#This is rather special.  It's a special target with which one can link
 | 
			
		||||
#applications without bothering with any features that have anything to
 | 
			
		||||
#do with shared libraries, for example when linking against static
 | 
			
		||||
#libraries.  It's mostly here to avoid a lot of conditionals everywhere
 | 
			
		||||
#else...
 | 
			
		||||
link_app.:
 | 
			
		||||
	LDCMD=$(CC); \
 | 
			
		||||
	LDFLAGS=""; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS)"; \
 | 
			
		||||
	APPNAME="$(APPNAME)"; \
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
link_o.gnu:
 | 
			
		||||
	@ $(DO_GNU_SO); $(LINK_SO_O)
 | 
			
		||||
link_a.gnu:
 | 
			
		||||
	@ $(DO_GNU_SO); $(LINK_SO_A)
 | 
			
		||||
link_app.gnu:
 | 
			
		||||
	@ $(DO_GNU_APP); $(LINK_APP)
 | 
			
		||||
 | 
			
		||||
# For Darwin AKA Mac OS/X (dyld)
 | 
			
		||||
link_o.darwin:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME); \
 | 
			
		||||
	SHLIB_SUFFIX=.dylib; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	ALLSYMSFLAGS='-all_load'; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS="-dynamiclib"; \
 | 
			
		||||
	SHAREDCMD='$(CC)'; \
 | 
			
		||||
	if [ -n "$(LIBVERSION)" ]; then \
 | 
			
		||||
		SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	if [ -n "$$SHLIB_SOVER_NODOT" ]; then \
 | 
			
		||||
		SHAREDFLAGS="$$SHAREDFLAGS -compatibility_version $$SHLIB_SOVER_NODOT"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.darwin:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME); \
 | 
			
		||||
	SHLIB_SUFFIX=.dylib; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	ALLSYMSFLAGS='-all_load'; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS="-dynamiclib"; \
 | 
			
		||||
	SHAREDCMD='$(CC)'; \
 | 
			
		||||
	if [ -n "$(LIBVERSION)" ]; then \
 | 
			
		||||
		SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	if [ -n "$$SHLIB_SOVER_NODOT" ]; then \
 | 
			
		||||
		SHAREDFLAGS="$$SHAREDFLAGS -compatibility_version $$SHLIB_SOVER_NODOT"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_A)
 | 
			
		||||
link_app.darwin:
 | 
			
		||||
	LDCMD=$(CC);\
 | 
			
		||||
	LDFLAGS=""; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	APPNAME="$(APPNAME)"; \
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
link_o.cygwin:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	INHIBIT_SYMLINKS=yes; \
 | 
			
		||||
	SHLIB=cyg$(LIBNAME); \
 | 
			
		||||
	SHLIB_SUFFIX=.dll; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	SHLIB_SOVER=-$(LIBVERSION); \
 | 
			
		||||
	ALLSYMSFLAGS='-Wl,--whole-archive'; \
 | 
			
		||||
	NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
 | 
			
		||||
	SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
 | 
			
		||||
	SHAREDCMD='${CC}'; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.cygwin:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	INHIBIT_SYMLINKS=yes; \
 | 
			
		||||
	SHLIB=cyg$(LIBNAME); \
 | 
			
		||||
	SHLIB_SUFFIX=.dll; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	SHLIB_SOVER=; \
 | 
			
		||||
	ALLSYMSFLAGS='-Wl,--whole-archive'; \
 | 
			
		||||
	NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
 | 
			
		||||
	SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
 | 
			
		||||
	SHAREDCMD='${CC}'; \
 | 
			
		||||
	$(LINK_SO_A)
 | 
			
		||||
link_app.cygwin:
 | 
			
		||||
	LDCMD=$(CC);\
 | 
			
		||||
	LDFLAGS=""; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	APPNAME="$(APPNAME).exe"
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
link_o.alpha-osf1:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_SO); \
 | 
			
		||||
	else \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
		SHLIB_SUFFIX=; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
 | 
			
		||||
		else \
 | 
			
		||||
			SHLIB_HIST="$(LIBVERSION)"; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		SHLIB_SOVER=; \
 | 
			
		||||
		ALLSYMSFLAGS='-all'; \
 | 
			
		||||
		NOALLSYMSFLAGS='-none'; \
 | 
			
		||||
		SHAREDFLAGS="-shared"; \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHAREDFLAGS="$$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
 | 
			
		||||
		fi; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.alpha-osf1:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_SO); \
 | 
			
		||||
	else \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
		SHLIB_SUFFIX=; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
 | 
			
		||||
		else \
 | 
			
		||||
			SHLIB_HIST="$(LIBVERSION)"; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		SHLIB_SOVER=; \
 | 
			
		||||
		ALLSYMSFLAGS='-all'; \
 | 
			
		||||
		NOALLSYMSFLAGS='-none'; \
 | 
			
		||||
		SHAREDFLAGS="-shared"; \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHAREDFLAGS="$$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
 | 
			
		||||
		fi; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_A)
 | 
			
		||||
link_app.alpha-osf1:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_APP); \
 | 
			
		||||
	else \
 | 
			
		||||
		LDCMD=$(CC);\
 | 
			
		||||
		LDFLAGS=""; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		APPNAME="$(APPNAME)"
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
# The difference between alpha-osf1-shared and tru64-shared is the `-msym'
 | 
			
		||||
# option passed to the linker.
 | 
			
		||||
link_o.tru64:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_SO); \
 | 
			
		||||
	else \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
		SHLIB_SUFFIX=; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
 | 
			
		||||
		else \
 | 
			
		||||
			SHLIB_HIST="$(LIBVERSION)"; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		SHLIB_SOVER=; \
 | 
			
		||||
		ALLSYMSFLAGS='-all'; \
 | 
			
		||||
		NOALLSYMSFLAGS='-none'; \
 | 
			
		||||
		SHAREDFLAGS="-shared -msym -rpath $(LIBRPATH)"; \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHAREDFLAGS="$$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
 | 
			
		||||
		fi; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.tru64:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_SO); \
 | 
			
		||||
	else \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
		SHLIB_SUFFIX=; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
 | 
			
		||||
		else \
 | 
			
		||||
			SHLIB_HIST="$(LIBVERSION)"; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		SHLIB_SOVER=; \
 | 
			
		||||
		ALLSYMSFLAGS='-all'; \
 | 
			
		||||
		NOALLSYMSFLAGS='-none'; \
 | 
			
		||||
		SHAREDFLAGS="-shared -msym -rpath $(LIBRPATH)"; \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHAREDFLAGS="$$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
 | 
			
		||||
		fi; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_A)
 | 
			
		||||
link_app.tru64:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_APP); \
 | 
			
		||||
	else \
 | 
			
		||||
		LDCMD=$(CC);\
 | 
			
		||||
		LDFLAGS="-rpath $(LIBRPATH)"; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		APPNAME="$(APPNAME)"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
# The difference between tru64-shared and tru64-shared-rpath is the
 | 
			
		||||
# -rpath ${LIBRPATH} passed to the linker.
 | 
			
		||||
link_o.tru64-rpath:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_SO); \
 | 
			
		||||
	else \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
		SHLIB_SUFFIX=; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
 | 
			
		||||
		else \
 | 
			
		||||
			SHLIB_HIST="$(LIBVERSION)"; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		SHLIB_SOVER=; \
 | 
			
		||||
		ALLSYMSFLAGS='-all'; \
 | 
			
		||||
		NOALLSYMSFLAGS='-none'; \
 | 
			
		||||
		SHAREDFLAGS="-shared -msym -rpath $(LIBRPATH)"; \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHAREDFLAGS="$$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
 | 
			
		||||
		fi; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.tru64-rpath:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_SO); \
 | 
			
		||||
	else \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
		SHLIB_SUFFIX=; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
 | 
			
		||||
		else \
 | 
			
		||||
			SHLIB_HIST="$(LIBVERSION)"; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		SHLIB_SOVER=; \
 | 
			
		||||
		ALLSYMSFLAGS='-all'; \
 | 
			
		||||
		NOALLSYMSFLAGS='-none'; \
 | 
			
		||||
		SHAREDFLAGS="-shared -msym -rpath $(LIBRPATH)"; \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHAREDFLAGS="$$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
 | 
			
		||||
		fi; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_A)
 | 
			
		||||
link_app.tru64-rpath:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_APP); \
 | 
			
		||||
	else \
 | 
			
		||||
		LDCMD=$(CC);\
 | 
			
		||||
		LDFLAGS="-rpath $(LIBRPATH)"; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		APPNAME="$(APPNAME)"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
link_o.solaris:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_SO); \
 | 
			
		||||
	else \
 | 
			
		||||
		$(CALC_VERSIONS); \
 | 
			
		||||
		MINUSZ='-z '; \
 | 
			
		||||
		(${CC} -v 2>&1 | grep gcc) > /dev/null && MINUSZ='-Wl,-z,'; \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
		SHLIB_SUFFIX=; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		ALLSYMSFLAGS="$${MINUSZ}allextract"; \
 | 
			
		||||
		NOALLSYMSFLAGS="$${MINUSZ}defaultextract"; \
 | 
			
		||||
		SHAREDFLAGS="-G -dy -z text -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -R $(LIBRPATH)"; \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.solaris:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_SO); \
 | 
			
		||||
	else \
 | 
			
		||||
		$(CALC_VERSIONS); \
 | 
			
		||||
		MINUSZ='-z '; \
 | 
			
		||||
		(${CC} -v 2>&1 | grep gcc) > /dev/null && MINUSZ='-Wl,-z,'; \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
		SHLIB_SUFFIX=;\
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		ALLSYMSFLAGS="$${MINUSZ}allextract"; \
 | 
			
		||||
		NOALLSYMSFLAGS="$${MINUSZ}defaultextract"; \
 | 
			
		||||
		SHAREDFLAGS="-G -dy -z text -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -R $(LIBRPATH)"; \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_A)
 | 
			
		||||
link_app.solaris:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_APP); \
 | 
			
		||||
	else \
 | 
			
		||||
		LDCMD=$(CC);\
 | 
			
		||||
		LDFLAGS="-R $(LIBRPATH)"; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		APPNAME="$(APPNAME)"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
# OpenServer 5 native compilers used
 | 
			
		||||
link_o.svr3:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_SO); \
 | 
			
		||||
	else \
 | 
			
		||||
		$(CALC_VERSIONS); \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
		SHLIB_SUFFIX=; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		ALLSYMSFLAGS=''; \
 | 
			
		||||
		NOALLSYMSFLAGS=''; \
 | 
			
		||||
		SHAREDFLAGS="-G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.svr3:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_SO); \
 | 
			
		||||
	else \
 | 
			
		||||
		$(CALC_VERSIONS); \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
		SHLIB_SUFFIX=; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		ALLSYMSFLAGS=''; \
 | 
			
		||||
		NOALLSYMSFLAGS=''; \
 | 
			
		||||
		SHAREDFLAGS="-G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_A_UNPACKED)
 | 
			
		||||
link_app.svr3:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_APP); \
 | 
			
		||||
	else \
 | 
			
		||||
		LDCMD=$(CC);\
 | 
			
		||||
		LDFLAGS=""; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		APPNAME="$(APPNAME)"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
# UnixWare 7 and OpenUNIX 8 native compilers used
 | 
			
		||||
link_o.svr5:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_SO); \
 | 
			
		||||
	else \
 | 
			
		||||
		$(CALC_VERSIONS); \
 | 
			
		||||
		SHARE_FLAG='-G'; \
 | 
			
		||||
		(${CC} -v 2>&1 | grep gcc) > /dev/null && SHARE_FLAG='-shared'; \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
		SHLIB_SUFFIX=; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		ALLSYMSFLAGS=''; \
 | 
			
		||||
		NOALLSYMSFLAGS=''; \
 | 
			
		||||
		SHAREDFLAGS="$${SHARE_FLAG} -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.svr5:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_SO); \
 | 
			
		||||
	else \
 | 
			
		||||
		$(CALC_VERSIONS); \
 | 
			
		||||
		SHARE_FLAG='-G'; \
 | 
			
		||||
		(${CC} -v 2>&1 | grep gcc) > /dev/null && SHARE_FLAG='-shared'; \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
		SHLIB_SUFFIX=; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		ALLSYMSFLAGS=''; \
 | 
			
		||||
		NOALLSYMSFLAGS=''; \
 | 
			
		||||
		SHAREDFLAGS="$${SHARE_FLAG} -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_A_UNPACKED)
 | 
			
		||||
link_app.svr5:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_APP); \
 | 
			
		||||
	else \
 | 
			
		||||
		LDCMD=$(CC);\
 | 
			
		||||
		LDFLAGS=""; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		APPNAME="$(APPNAME)"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
link_o.irix:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_SO); \
 | 
			
		||||
	else \
 | 
			
		||||
		$(CALC_VERSIONS); \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
		SHLIB_SUFFIX=; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		MINUSWL=""; \
 | 
			
		||||
		($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSWL="-Wl,"; \
 | 
			
		||||
		ALLSYMSFLAGS="$${MINUSWL}-all"; \
 | 
			
		||||
		NOALLSYMSFLAGS="$${MINUSWL}-notall"; \
 | 
			
		||||
		SHAREDFLAGS="-shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -Wl,-rpath,$(LIBRPATH)"; \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.irix:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_SO); \
 | 
			
		||||
	else \
 | 
			
		||||
		$(CALC_VERSIONS); \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
		SHLIB_SUFFIX=; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		MINUSWL=""; \
 | 
			
		||||
		($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSWL="-Wl,"; \
 | 
			
		||||
		ALLSYMSFLAGS="$${MINUSWL}-all"; \
 | 
			
		||||
		NOALLSYMSFLAGS="$${MINUSWL}-notall"; \
 | 
			
		||||
		SHAREDFLAGS="-shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -Wl,-rpath,$(LIBRPATH)"; \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_A)
 | 
			
		||||
link_app.irix:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU_APP); \
 | 
			
		||||
	else \
 | 
			
		||||
		LDCMD=$(CC);\
 | 
			
		||||
		LDFLAGS="-Wl,-rpath,$(LIBRPATH)"; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		APPNAME="$(APPNAME)"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
# HP-UX includes the full pathname of libs we depend on, so we would get
 | 
			
		||||
# ./libcrypto (with ./ as path information) compiled into libssl, hence
 | 
			
		||||
# we omit the SHLIBDEPS. Applications must be linked with -lssl -lcrypto
 | 
			
		||||
# anyway.
 | 
			
		||||
# The object modules are loaded from lib$i.a using the undocumented -Fl
 | 
			
		||||
# option.
 | 
			
		||||
#
 | 
			
		||||
# WARNING: Until DSO is fixed to support a search path, we support SHLIB_PATH
 | 
			
		||||
#          by temporarily specifying "+s"!
 | 
			
		||||
#
 | 
			
		||||
link_o.hpux32:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).sl; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	ALLSYMSFLAGS='-Fl'; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS="+vnocompatwarnings -b -z +s +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX +b $(LIBRPATH)"; \
 | 
			
		||||
	SHAREDCMD='/usr/ccs/bin/ld'; \
 | 
			
		||||
	$(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
 | 
			
		||||
link_a.hpux32:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).sl; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	ALLSYMSFLAGS='-Fl'; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS="+vnocompatwarnings -b -z +s +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX +b $(LIBRPATH)"; \
 | 
			
		||||
	SHAREDCMD='/usr/ccs/bin/ld'; \
 | 
			
		||||
	$(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
 | 
			
		||||
link_app.hpux32:
 | 
			
		||||
	LDCMD=$(CC);\
 | 
			
		||||
	LDFLAGS="-Wl,+b,$(LIBRPATH)"; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	APPNAME="$(APPNAME)"
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
# HP-UX includes the full pathname of libs we depend on, so we would get
 | 
			
		||||
# ./libcrypto (with ./ as path information) compiled into libssl, hence
 | 
			
		||||
# we omit the SHLIBDEPS. Applications must be linked with -lssl -lcrypto
 | 
			
		||||
# anyway.
 | 
			
		||||
#
 | 
			
		||||
# HP-UX in 64bit mode has "+s" enabled by default; it will search for
 | 
			
		||||
# shared libraries along LD_LIBRARY_PATH _and_ SHLIB_PATH.
 | 
			
		||||
#
 | 
			
		||||
link_o.hpux64:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).sl; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	ALLSYMSFLAGS='+forceload'; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS="-b -z +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX +b $(LIBRPATH)"; \
 | 
			
		||||
	SHAREDCMD='/usr/ccs/bin/ld'; \
 | 
			
		||||
	$(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
 | 
			
		||||
link_a.hpux64:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).sl; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	ALLSYMSFLAGS='+forceload'; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS="-b -z +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX +b $(LIBRPATH)"; \
 | 
			
		||||
	SHAREDCMD='/usr/ccs/bin/ld'; \
 | 
			
		||||
	$(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
 | 
			
		||||
link_app.hpux64:
 | 
			
		||||
	LDCMD=$(CC);\
 | 
			
		||||
	LDFLAGS="-Wl,+b,$(LIBRPATH)"; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	APPNAME="$(APPNAME)"
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
link_o.aix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	ALLSYMSFLAGS='-bnogc'; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS='-G -bE:lib$(LIBNAME).exp -bM:SRE -blibpath:$(LIBRPATH)'; \
 | 
			
		||||
	SHAREDCMD='$(CC)'; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.aix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	ALLSYMSFLAGS='-bnogc'; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS='-G -bE:lib$(LIBNAME).exp -bM:SRE -blibpath:$(LIBRPATH)'; \
 | 
			
		||||
	SHAREDCMD='$(CC)'; \
 | 
			
		||||
	$(LINK_SO_A_VIA_O)
 | 
			
		||||
link_app.aix:
 | 
			
		||||
	LDCMD=$(CC);\
 | 
			
		||||
	LDFLAGS="-blibpath:$(LIBRPATH)"; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	APPNAME="$(APPNAME)"
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
link_o.reliantunix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	ALLSYMSFLAGS=; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS='-G'; \
 | 
			
		||||
	SHAREDCMD='$(CC)'; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.reliantunix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	ALLSYMSFLAGS=; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS='-G'; \
 | 
			
		||||
	SHAREDCMD='$(CC)'; \
 | 
			
		||||
	$(LINK_SO_A_UNPACKED)
 | 
			
		||||
link_app.reliantunix:
 | 
			
		||||
	LDCMD=$(CC);\
 | 
			
		||||
	LDFLAGS=""; \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
	APPNAME="$(APPNAME)"
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
# Targets to build symbolic links when needed
 | 
			
		||||
symlink.gnu symlink.solaris symlink.svr3 symlink.svr5 symlink.irix \
 | 
			
		||||
symlink.aix symlink.reliantunix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	$(SYMLINK_SO)
 | 
			
		||||
symlink.darwin:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME); \
 | 
			
		||||
	SHLIB_SUFFIX=.dylib; \
 | 
			
		||||
	$(SYMLINK_SO)
 | 
			
		||||
symlink.hpux32 symlink.hpux64:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).sl; \
 | 
			
		||||
	$(SYMLINK_SO)
 | 
			
		||||
# The following lines means those specific architectures do no symlinks
 | 
			
		||||
symlink.cygwin symlib.alpha-osf1 symlink.tru64 symlink.tru64-rpath:
 | 
			
		||||
 | 
			
		||||
# Compatibility targets
 | 
			
		||||
link_o.bsd-gcc-shared link_o.linux-shared link_o.gnu-shared: link_o.gnu
 | 
			
		||||
link_a.bsd-gcc-shared link_a.linux-shared link_a.gnu-shared: link_a.gnu
 | 
			
		||||
link_app.bsd-gcc-shared link_app.linux-shared link_app.gnu-shared: link_app.gnu
 | 
			
		||||
symlink.bsd-gcc-shared symlink.linux-shared symlink.gnu-shared: symlink.gnu
 | 
			
		||||
link_o.darwin-shared: link_o.darwin
 | 
			
		||||
link_a.darwin-shared: link_a.darwin
 | 
			
		||||
link_app.darwin-shared: link_app.darwin
 | 
			
		||||
symlink.darwin-shared: symlink.darwin
 | 
			
		||||
link_o.cygwin-shared: link_o.cygwin
 | 
			
		||||
link_a.cygwin-shared: link_a.cygwin
 | 
			
		||||
link_app.cygwin-shared: link_app.cygwin
 | 
			
		||||
symlink.cygwin-shared: symlink.cygwin
 | 
			
		||||
link_o.alpha-osf1-shared: link_o.alpha-osf1
 | 
			
		||||
link_a.alpha-osf1-shared: link_a.alpha-osf1
 | 
			
		||||
link_app.alpha-osf1-shared: link_app.alpha-osf1
 | 
			
		||||
symlink.alpha-osf1-shared: symlink.alpha-osf1
 | 
			
		||||
link_o.tru64-shared: link_o.tru64
 | 
			
		||||
link_a.tru64-shared: link_a.tru64
 | 
			
		||||
link_app.tru64-shared: link_app.tru64
 | 
			
		||||
symlink.tru64-shared: symlink.tru64
 | 
			
		||||
link_o.tru64-shared-rpath: link_o.tru64-rpath
 | 
			
		||||
link_a.tru64-shared-rpath: link_a.tru64-rpath
 | 
			
		||||
link_app.tru64-shared-rpath: link_app.tru64-rpath
 | 
			
		||||
symlink.tru64-shared-rpath: symlink.tru64-rpath
 | 
			
		||||
link_o.solaris-shared: link_o.solaris
 | 
			
		||||
link_a.solaris-shared: link_a.solaris
 | 
			
		||||
link_app.solaris-shared: link_app.solaris
 | 
			
		||||
symlink.solaris-shared: symlink.solaris
 | 
			
		||||
link_o.svr3-shared: link_o.svr3
 | 
			
		||||
link_a.svr3-shared: link_a.svr3
 | 
			
		||||
link_app.svr3-shared: link_app.svr3
 | 
			
		||||
symlink.svr3-shared: symlink.svr3
 | 
			
		||||
link_o.svr5-shared: link_o.svr5
 | 
			
		||||
link_a.svr5-shared: link_a.svr5
 | 
			
		||||
link_app.svr5-shared: link_app.svr5
 | 
			
		||||
symlink.svr5-shared: symlink.svr5
 | 
			
		||||
link_o.irix-shared: link_o.irix
 | 
			
		||||
link_a.irix-shared: link_a.irix
 | 
			
		||||
link_app.irix-shared: link_app.irix
 | 
			
		||||
symlink.irix-shared: symlink.irix
 | 
			
		||||
link_o.hpux-shared: link_o.hpux32
 | 
			
		||||
link_a.hpux-shared: link_a.hpux32
 | 
			
		||||
link_app.hpux-shared: link_app.hpux32
 | 
			
		||||
symlink.hpux-shared: symlink.hpux32
 | 
			
		||||
link_o.hpux64-shared: link_o.hpux64
 | 
			
		||||
link_a.hpux64-shared: link_a.hpux64
 | 
			
		||||
link_app.hpux64-shared: link_app.hpux64
 | 
			
		||||
symlink.hpux64-shared: symlink.hpux64
 | 
			
		||||
link_o.aix-shared: link_o.aix
 | 
			
		||||
link_a.aix-shared: link_a.aix
 | 
			
		||||
link_app.aix-shared: link_app.aix
 | 
			
		||||
symlink.aix-shared: symlink.aix
 | 
			
		||||
link_o.reliantunix-shared: link_o.reliantunix
 | 
			
		||||
link_a.reliantunix-shared: link_a.reliantunix
 | 
			
		||||
link_app.reliantunix-shared: link_app.reliantunix
 | 
			
		||||
symlink.reliantunix-shared: symlink.reliantunix
 | 
			
		||||
							
								
								
									
										92
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										92
									
								
								NEWS
									
									
									
									
									
								
							@@ -5,6 +5,35 @@
 | 
			
		||||
  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.7b and OpenSSL 0.9.7c:
 | 
			
		||||
 | 
			
		||||
      o Security: fix various ASN1 parsing bugs.
 | 
			
		||||
      o New -ignore_err option to OCSP utility.
 | 
			
		||||
      o Various interop and bug fixes in S/MIME code.
 | 
			
		||||
      o SSL/TLS protocol fix for unrequested client certificates.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b:
 | 
			
		||||
 | 
			
		||||
      o Security: counter the Klima-Pokorny-Rosa extension of
 | 
			
		||||
        Bleichbacher's attack 
 | 
			
		||||
      o Security: make RSA blinding default.
 | 
			
		||||
      o Configuration: Irix fixes, AIX fixes, better mingw support.
 | 
			
		||||
      o Support for new platforms: linux-ia64-ecc.
 | 
			
		||||
      o Build: shared library support fixes.
 | 
			
		||||
      o ASN.1: treat domainComponent correctly.
 | 
			
		||||
      o Documentation: fixes and additions.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a:
 | 
			
		||||
 | 
			
		||||
      o Security: Important security related bugfixes.
 | 
			
		||||
      o Enhanced compatibility with MIT Kerberos.
 | 
			
		||||
      o Can be built without the ENGINE framework.
 | 
			
		||||
      o IA32 assembler enhancements.
 | 
			
		||||
      o Support for new platforms: FreeBSD/IA64 and FreeBSD/Sparc64.
 | 
			
		||||
      o Configuration: the no-err option now works properly.
 | 
			
		||||
      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:
 | 
			
		||||
 | 
			
		||||
      o New library section OCSP.
 | 
			
		||||
@@ -17,13 +46,21 @@
 | 
			
		||||
        a separate distribution.
 | 
			
		||||
      o New elliptic curve library section.
 | 
			
		||||
      o New AES (Rijndael) library section.
 | 
			
		||||
      o Support for new platforms: Windows CE, Tandem OSS, A/UX, AIX 64-bit,
 | 
			
		||||
        Linux x86_64, Linux 64-bit on Sparc v9
 | 
			
		||||
      o Extended support for some platforms: VxWorks
 | 
			
		||||
      o Enhanced support for shared libraries.
 | 
			
		||||
      o Now only builds PIC code when shared library support is requested.
 | 
			
		||||
      o Support for pkg-config.
 | 
			
		||||
      o Lots of new manuals.
 | 
			
		||||
      o Makes symbolic links to or copies of manuals to cover all described
 | 
			
		||||
        functions.
 | 
			
		||||
      o Change DES API to clean up the namespace (some applications link also
 | 
			
		||||
        against libdes providing similar functions having the same name).
 | 
			
		||||
        Provide macros for backward compatibility (will be removed in the
 | 
			
		||||
        future).
 | 
			
		||||
      o Unifiy handling of cryptographic algorithms (software and
 | 
			
		||||
        engine) to be available via EVP routines for asymmetric and
 | 
			
		||||
        symmetric ciphers.
 | 
			
		||||
      o Unify handling of cryptographic algorithms (software and engine)
 | 
			
		||||
        to be available via EVP routines for asymmetric and symmetric ciphers.
 | 
			
		||||
      o NCONF: new configuration handling routines.
 | 
			
		||||
      o Change API to use more 'const' modifiers to improve error checking
 | 
			
		||||
        and help optimizers.
 | 
			
		||||
@@ -31,13 +68,60 @@
 | 
			
		||||
      o Reworked parts of the BIGNUM code.
 | 
			
		||||
      o Support for new engines: Broadcom ubsec, Accelerated Encryption
 | 
			
		||||
        Processing, IBM 4758.
 | 
			
		||||
      o A few new engines added in the demos area.
 | 
			
		||||
      o Extended and corrected OID (object identifier) table.
 | 
			
		||||
      o PRNG: query at more locations for a random device, automatic query for
 | 
			
		||||
        EGD style random sources at several locations.
 | 
			
		||||
      o SSL/TLS: allow optional cipher choice according to server's preference.
 | 
			
		||||
      o SSL/TLS: allow server to explicitly set new session ids.
 | 
			
		||||
      o SSL/TLS: support Kerberos cipher suites (RFC2712).
 | 
			
		||||
	Only supports MIT Kerberos for now.
 | 
			
		||||
      o SSL/TLS: allow more precise control of renegotiations and sessions.
 | 
			
		||||
      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:
 | 
			
		||||
 | 
			
		||||
      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:
 | 
			
		||||
 | 
			
		||||
      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:
 | 
			
		||||
 | 
			
		||||
      o Important security related bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h:
 | 
			
		||||
 | 
			
		||||
      o New configuration targets for Tandem OSS and A/UX.
 | 
			
		||||
      o New OIDs for Microsoft attributes.
 | 
			
		||||
      o Better handling of SSL session caching.
 | 
			
		||||
      o Better comparison of distinguished names.
 | 
			
		||||
      o Better handling of shared libraries in a mixed GNU/non-GNU environment.
 | 
			
		||||
      o Support assembler code with Borland C.
 | 
			
		||||
      o Fixes for length problems.
 | 
			
		||||
      o Fixes for uninitialised variables.
 | 
			
		||||
      o Fixes for memory leaks, some unusual crashes and some race conditions.
 | 
			
		||||
      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:
 | 
			
		||||
 | 
			
		||||
      o Important building fixes on Unix.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f:
 | 
			
		||||
 | 
			
		||||
      o Various important bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e:
 | 
			
		||||
 | 
			
		||||
      o Important security related bugfixes.
 | 
			
		||||
      o Various SSL/TLS library bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d:
 | 
			
		||||
 | 
			
		||||
@@ -90,7 +174,7 @@
 | 
			
		||||
      o Bug fixes for Win32, HP/UX and Irix.
 | 
			
		||||
      o Bug fixes in BIGNUM, SSL, PKCS#7, PKCS#12, X.509, CONF and
 | 
			
		||||
        memory checking routines.
 | 
			
		||||
      o Bug fixes for RSA operations in threaded enviroments.
 | 
			
		||||
      o Bug fixes for RSA operations in threaded environments.
 | 
			
		||||
      o Bug fixes in misc. openssl applications.
 | 
			
		||||
      o Remove a few potential memory leaks.
 | 
			
		||||
      o Add tighter checks of BIGNUM routines.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										204
									
								
								Netware/build.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										204
									
								
								Netware/build.bat
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,204 @@
 | 
			
		||||
@echo off
 | 
			
		||||
 | 
			
		||||
rem ========================================================================
 | 
			
		||||
rem   Batch file to automate building OpenSSL for NetWare.
 | 
			
		||||
rem
 | 
			
		||||
rem   usage:
 | 
			
		||||
rem      build [target] [debug opts] [assembly opts] [configure opts]
 | 
			
		||||
rem
 | 
			
		||||
rem      target        - "netware-clib" - CLib NetWare build
 | 
			
		||||
rem                    - "netware-libc" - LibC NKS NetWare build
 | 
			
		||||
rem 
 | 
			
		||||
rem      debug opts    - "debug"  - build debug
 | 
			
		||||
rem
 | 
			
		||||
rem      assembly opts - "nw-mwasm" - use Metrowerks assembler
 | 
			
		||||
rem      "nw-nasm"  - use NASM assembler
 | 
			
		||||
rem      "no-asm"   - don't use assembly
 | 
			
		||||
rem
 | 
			
		||||
rem      configure opts- all unrecognized arguments are passed to the
 | 
			
		||||
rem                       perl configure script
 | 
			
		||||
rem
 | 
			
		||||
rem   If no arguments are specified the default is to build non-debug with
 | 
			
		||||
rem   no assembly.  NOTE: there is no default BLD_TARGET.
 | 
			
		||||
rem
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
rem   No assembly is the default - Uncomment section below to change
 | 
			
		||||
rem   the assembler default
 | 
			
		||||
set ASM_MODE=
 | 
			
		||||
set ASSEMBLER=
 | 
			
		||||
set NO_ASM=no-asm
 | 
			
		||||
 | 
			
		||||
rem   Uncomment to default to the Metrowerks assembler
 | 
			
		||||
rem set ASM_MODE=nw-mwasm
 | 
			
		||||
rem set ASSEMBLER=Metrowerks
 | 
			
		||||
rem set NO_ASM=
 | 
			
		||||
 | 
			
		||||
rem   Uncomment to default to the NASM assembler
 | 
			
		||||
rem set ASM_MODE=nw-nasm
 | 
			
		||||
rem set ASSEMBLER=NASM
 | 
			
		||||
rem set NO_ASM=
 | 
			
		||||
 | 
			
		||||
rem   No default Bld target
 | 
			
		||||
set BLD_TARGET=no_target
 | 
			
		||||
rem set BLD_TARGET=netware-clib
 | 
			
		||||
rem set BLD_TARGET=netware-libc
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
rem   Default to build non-debug
 | 
			
		||||
set DEBUG=
 | 
			
		||||
                                    
 | 
			
		||||
rem   Uncomment to default to debug build
 | 
			
		||||
rem set DEBUG=debug
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
set CONFIG_OPTS=
 | 
			
		||||
set ARG_PROCESSED=NO
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
rem   Process command line args
 | 
			
		||||
:opts
 | 
			
		||||
if "a%1" == "a" goto endopt
 | 
			
		||||
if "%1" == "no-asm"   set NO_ASM=no-asm
 | 
			
		||||
if "%1" == "no-asm"   set ARG_PROCESSED=YES
 | 
			
		||||
if "%1" == "debug"    set DEBUG=debug
 | 
			
		||||
if "%1" == "debug"    set ARG_PROCESSED=YES
 | 
			
		||||
if "%1" == "nw-nasm"  set ASM_MODE=nw-nasm
 | 
			
		||||
if "%1" == "nw-nasm"  set ASSEMBLER=NASM
 | 
			
		||||
if "%1" == "nw-nasm"  set NO_ASM=
 | 
			
		||||
if "%1" == "nw-nasm"  set ARG_PROCESSED=YES
 | 
			
		||||
if "%1" == "nw-mwasm" set ASM_MODE=nw-mwasm
 | 
			
		||||
if "%1" == "nw-mwasm" set ASSEMBLER=Metrowerks
 | 
			
		||||
if "%1" == "nw-mwasm"  set NO_ASM=
 | 
			
		||||
if "%1" == "nw-mwasm" set ARG_PROCESSED=YES
 | 
			
		||||
if "%1" == "netware-clib" set BLD_TARGET=netware-clib
 | 
			
		||||
if "%1" == "netware-clib" set ARG_PROCESSED=YES
 | 
			
		||||
if "%1" == "netware-libc" set BLD_TARGET=netware-libc
 | 
			
		||||
if "%1" == "netware-libc" set ARG_PROCESSED=YES
 | 
			
		||||
 | 
			
		||||
rem   If we didn't recognize the argument, consider it an option for config
 | 
			
		||||
if "%ARG_PROCESSED%" == "NO" set CONFIG_OPTS=%CONFIG_OPTS% %1
 | 
			
		||||
if "%ARG_PROCESSED%" == "YES" set ARG_PROCESSED=NO
 | 
			
		||||
 | 
			
		||||
shift
 | 
			
		||||
goto opts
 | 
			
		||||
:endopt
 | 
			
		||||
 | 
			
		||||
rem make sure a valid BLD_TARGET was specified
 | 
			
		||||
if "%BLD_TARGET%" == "no_target" goto no_target
 | 
			
		||||
 | 
			
		||||
rem build the nlm make file name which includes target and debug info
 | 
			
		||||
set NLM_MAKE=
 | 
			
		||||
if "%BLD_TARGET%" == "netware-clib" set NLM_MAKE=netware\nlm_clib
 | 
			
		||||
if "%BLD_TARGET%" == "netware-libc" set NLM_MAKE=netware\nlm_libc
 | 
			
		||||
if "%DEBUG%" == "" set NLM_MAKE=%NLM_MAKE%.mak
 | 
			
		||||
if "%DEBUG%" == "debug" set NLM_MAKE=%NLM_MAKE%_dbg.mak
 | 
			
		||||
 | 
			
		||||
if "%NO_ASM%" == "no-asm" set ASM_MODE=
 | 
			
		||||
if "%NO_ASM%" == "no-asm" set ASSEMBLER=
 | 
			
		||||
if "%NO_ASM%" == "no-asm" set CONFIG_OPTS=%CONFIG_OPTS% no-asm
 | 
			
		||||
if "%NO_ASM%" == "no-asm" goto do_config
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
rem ==================================================
 | 
			
		||||
echo Generating x86 for %ASSEMBLER% assembler
 | 
			
		||||
 | 
			
		||||
echo Bignum
 | 
			
		||||
cd crypto\bn\asm
 | 
			
		||||
perl x86.pl %ASM_MODE% > bn-nw.asm
 | 
			
		||||
cd ..\..\..
 | 
			
		||||
 | 
			
		||||
echo DES
 | 
			
		||||
cd crypto\des\asm
 | 
			
		||||
perl des-586.pl %ASM_MODE% > d-nw.asm
 | 
			
		||||
cd ..\..\..
 | 
			
		||||
 | 
			
		||||
echo "crypt(3)"
 | 
			
		||||
 | 
			
		||||
cd crypto\des\asm
 | 
			
		||||
perl crypt586.pl %ASM_MODE% > y-nw.asm
 | 
			
		||||
cd ..\..\..
 | 
			
		||||
 | 
			
		||||
echo Blowfish
 | 
			
		||||
 | 
			
		||||
cd crypto\bf\asm
 | 
			
		||||
perl bf-586.pl %ASM_MODE% > b-nw.asm
 | 
			
		||||
cd ..\..\..
 | 
			
		||||
 | 
			
		||||
echo CAST5
 | 
			
		||||
cd crypto\cast\asm
 | 
			
		||||
perl cast-586.pl %ASM_MODE% > c-nw.asm
 | 
			
		||||
cd ..\..\..
 | 
			
		||||
 | 
			
		||||
echo RC4
 | 
			
		||||
cd crypto\rc4\asm
 | 
			
		||||
perl rc4-586.pl %ASM_MODE% > r4-nw.asm
 | 
			
		||||
cd ..\..\..
 | 
			
		||||
 | 
			
		||||
echo MD5
 | 
			
		||||
cd crypto\md5\asm
 | 
			
		||||
perl md5-586.pl %ASM_MODE% > m5-nw.asm
 | 
			
		||||
cd ..\..\..
 | 
			
		||||
 | 
			
		||||
echo SHA1
 | 
			
		||||
cd crypto\sha\asm
 | 
			
		||||
perl sha1-586.pl %ASM_MODE% > s1-nw.asm
 | 
			
		||||
cd ..\..\..
 | 
			
		||||
 | 
			
		||||
echo RIPEMD160
 | 
			
		||||
cd crypto\ripemd\asm
 | 
			
		||||
perl rmd-586.pl %ASM_MODE% > rm-nw.asm
 | 
			
		||||
cd ..\..\..
 | 
			
		||||
 | 
			
		||||
echo RC5\32
 | 
			
		||||
cd crypto\rc5\asm
 | 
			
		||||
perl rc5-586.pl %ASM_MODE% > r5-nw.asm
 | 
			
		||||
cd ..\..\..
 | 
			
		||||
 | 
			
		||||
rem ===============================================================
 | 
			
		||||
rem
 | 
			
		||||
:do_config
 | 
			
		||||
 | 
			
		||||
echo .
 | 
			
		||||
echo configure options: %CONFIG_OPTS% %BLD_TARGET%
 | 
			
		||||
echo .
 | 
			
		||||
perl configure %CONFIG_OPTS% %BLD_TARGET%
 | 
			
		||||
 | 
			
		||||
perl util\mkfiles.pl >MINFO
 | 
			
		||||
 | 
			
		||||
echo .
 | 
			
		||||
echo mk1mf.pl options: %DEBUG% %ASM_MODE% %CONFIG_OPTS% %BLD_TARGET%
 | 
			
		||||
echo .
 | 
			
		||||
perl util\mk1mf.pl %DEBUG% %ASM_MODE% %CONFIG_OPTS% %BLD_TARGET% >%NLM_MAKE%
 | 
			
		||||
 | 
			
		||||
echo The makefile "%NLM_MAKE%" has been created use your maketool to
 | 
			
		||||
echo build (ex: gmake -f %NLM_MAKE%)
 | 
			
		||||
goto end
 | 
			
		||||
 | 
			
		||||
rem ===============================================================
 | 
			
		||||
rem
 | 
			
		||||
:no_target
 | 
			
		||||
echo .
 | 
			
		||||
echo .  No build target specified!!!
 | 
			
		||||
echo .
 | 
			
		||||
echo .  usage: build [target] [debug opts] [assembly opts] [configure opts]
 | 
			
		||||
echo .
 | 
			
		||||
echo .     target        - "netware-clib" - CLib NetWare build
 | 
			
		||||
echo .                   - "netware-libc" - LibC NKS NetWare build
 | 
			
		||||
echo .
 | 
			
		||||
echo .     debug opts    - "debug"  - build debug
 | 
			
		||||
echo .
 | 
			
		||||
echo .     assembly opts - "nw-mwasm" - use Metrowerks assembler
 | 
			
		||||
echo .                     "nw-nasm"  - use NASM assembler
 | 
			
		||||
echo .                     "no-asm"   - don't use assembly
 | 
			
		||||
echo .
 | 
			
		||||
echo .     configure opts- all unrecognized arguments are passed to the
 | 
			
		||||
echo .                      perl configure script
 | 
			
		||||
echo .
 | 
			
		||||
echo .  If no debug or assembly opts are specified the default is to build
 | 
			
		||||
echo .  non-debug without assembly
 | 
			
		||||
echo .
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
:end        
 | 
			
		||||
							
								
								
									
										112
									
								
								Netware/cpy_tests.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								Netware/cpy_tests.bat
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,112 @@
 | 
			
		||||
@echo off
 | 
			
		||||
 | 
			
		||||
rem   Batch file to copy OpenSSL stuff to a NetWare server for testing
 | 
			
		||||
 | 
			
		||||
rem   This batch file will create an "opensssl" directory at the root of the
 | 
			
		||||
rem   specified NetWare drive and copy the required files to run the tests.
 | 
			
		||||
rem   It should be run from inside the "openssl\netware" subdirectory.
 | 
			
		||||
 | 
			
		||||
rem   Usage:
 | 
			
		||||
rem      cpy_tests.bat <test subdirectory> <NetWare drive>
 | 
			
		||||
rem          <test subdirectory> - out_nw.dbg | out_nw
 | 
			
		||||
rem          <NetWare drive> - any mapped drive letter
 | 
			
		||||
rem
 | 
			
		||||
rem      example ( copy from debug build to m: dirve ):
 | 
			
		||||
rem              cpy_tests.bat out_nw.dbg m:
 | 
			
		||||
rem
 | 
			
		||||
rem      CAUTION:  If a directory named OpenSSL exists on the target drive
 | 
			
		||||
rem                it will be deleted first.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if "%1" == "" goto usage
 | 
			
		||||
if "%2" == "" goto usage
 | 
			
		||||
 | 
			
		||||
rem   Assume running in \openssl directory unless cpy_tests.bat exists then
 | 
			
		||||
rem   it must be the \openssl\netware directory
 | 
			
		||||
set loc=.
 | 
			
		||||
if exist cpy_tests.bat set loc=..
 | 
			
		||||
 | 
			
		||||
rem   make sure the local build subdirectory specified is valid
 | 
			
		||||
if not exist %loc%\%1\NUL goto invalid_dir
 | 
			
		||||
 | 
			
		||||
rem   make sure target drive is valid
 | 
			
		||||
if not exist %2\NUL goto invalid_drive
 | 
			
		||||
 | 
			
		||||
rem   If an OpenSSL directory exists on the target drive, remove it
 | 
			
		||||
if exist %2\openssl\NUL goto remove_openssl
 | 
			
		||||
goto do_copy
 | 
			
		||||
 | 
			
		||||
:remove_openssl
 | 
			
		||||
echo .
 | 
			
		||||
echo OpenSSL directory exists on %2 - it will be removed!
 | 
			
		||||
pause
 | 
			
		||||
rmdir %2\openssl /s /q
 | 
			
		||||
 | 
			
		||||
:do_copy
 | 
			
		||||
rem   make an "openssl" directory and others at the root of the NetWare drive
 | 
			
		||||
mkdir %2\openssl
 | 
			
		||||
mkdir %2\openssl\test_out
 | 
			
		||||
mkdir %2\openssl\apps
 | 
			
		||||
mkdir %2\openssl\certs
 | 
			
		||||
mkdir %2\openssl\test
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
rem   copy the test nlms
 | 
			
		||||
copy %loc%\%1\*.nlm %2\openssl\
 | 
			
		||||
 | 
			
		||||
rem   copy the test perl script
 | 
			
		||||
copy %loc%\netware\do_tests.pl %2\openssl\
 | 
			
		||||
 | 
			
		||||
rem   copy the certs directory stuff
 | 
			
		||||
xcopy %loc%\certs\*.*         %2\openssl\certs\ /s
 | 
			
		||||
 | 
			
		||||
rem   copy the test directory stuff
 | 
			
		||||
copy %loc%\test\CAss.cnf      %2\openssl\test\
 | 
			
		||||
copy %loc%\test\Uss.cnf       %2\openssl\test\
 | 
			
		||||
copy %loc%\test\pkcs7.pem     %2\openssl\test\
 | 
			
		||||
copy %loc%\test\pkcs7-1.pem   %2\openssl\test\
 | 
			
		||||
copy %loc%\test\testcrl.pem   %2\openssl\test\
 | 
			
		||||
copy %loc%\test\testp7.pem    %2\openssl\test\
 | 
			
		||||
copy %loc%\test\testreq2.pem  %2\openssl\test\
 | 
			
		||||
copy %loc%\test\testrsa.pem   %2\openssl\test\
 | 
			
		||||
copy %loc%\test\testsid.pem   %2\openssl\test\
 | 
			
		||||
copy %loc%\test\testx509.pem  %2\openssl\test\
 | 
			
		||||
copy %loc%\test\v3-cert1.pem  %2\openssl\test\
 | 
			
		||||
copy %loc%\test\v3-cert2.pem  %2\openssl\test\
 | 
			
		||||
 | 
			
		||||
rem   copy the apps directory stuff
 | 
			
		||||
copy %loc%\apps\client.pem    %2\openssl\apps\
 | 
			
		||||
copy %loc%\apps\server.pem    %2\openssl\apps\
 | 
			
		||||
copy %loc%\apps\openssl.cnf   %2\openssl\apps\
 | 
			
		||||
 | 
			
		||||
echo .
 | 
			
		||||
echo Tests copied
 | 
			
		||||
echo Run the test script at the console by typing:
 | 
			
		||||
echo     "Perl \openssl\do_tests.pl"
 | 
			
		||||
echo .
 | 
			
		||||
echo Make sure the Search path includes the OpenSSL subdirectory
 | 
			
		||||
 | 
			
		||||
goto end
 | 
			
		||||
 | 
			
		||||
:invalid_dir
 | 
			
		||||
echo.
 | 
			
		||||
echo Invalid build directory specified: %1
 | 
			
		||||
echo.
 | 
			
		||||
goto usage
 | 
			
		||||
 | 
			
		||||
:invalid_drive
 | 
			
		||||
echo.
 | 
			
		||||
echo Invalid drive: %2
 | 
			
		||||
echo.
 | 
			
		||||
goto usage
 | 
			
		||||
 | 
			
		||||
:usage
 | 
			
		||||
echo.
 | 
			
		||||
echo usage: cpy_tests.bat [test subdirectory] [NetWare drive]
 | 
			
		||||
echo     [test subdirectory] - out_nw_clib.dbg, out_nw_libc.dbg, etc. 
 | 
			
		||||
echo     [NetWare drive]     - any mapped drive letter
 | 
			
		||||
echo.
 | 
			
		||||
echo example: cpy_test out_nw_clib.dbg M:
 | 
			
		||||
echo  (copy from clib debug build area to M: drive)
 | 
			
		||||
 | 
			
		||||
:end
 | 
			
		||||
							
								
								
									
										585
									
								
								Netware/do_tests.pl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										585
									
								
								Netware/do_tests.pl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,585 @@
 | 
			
		||||
# perl script to run OpenSSL tests
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
my $base_path      = "\\openssl";
 | 
			
		||||
 | 
			
		||||
my $output_path    = "$base_path\\test_out";
 | 
			
		||||
my $cert_path      = "$base_path\\certs";
 | 
			
		||||
my $test_path      = "$base_path\\test";
 | 
			
		||||
my $app_path       = "$base_path\\apps";
 | 
			
		||||
 | 
			
		||||
my $tmp_cert       = "$output_path\\cert.tmp";
 | 
			
		||||
my $OpenSSL_config = "$app_path\\openssl.cnf";
 | 
			
		||||
my $log_file       = "$output_path\\tests.log";
 | 
			
		||||
 | 
			
		||||
my $pause = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#  process the command line args to see if they wanted us to pause
 | 
			
		||||
#  between executing each command
 | 
			
		||||
foreach $i (@ARGV)
 | 
			
		||||
{
 | 
			
		||||
   if ($i =~ /^-p$/)
 | 
			
		||||
   { $pause=1; }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
main();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############################################################################
 | 
			
		||||
sub main()
 | 
			
		||||
{
 | 
			
		||||
   # delete all the output files in the output directory
 | 
			
		||||
   unlink <$output_path\\*.*>;
 | 
			
		||||
 | 
			
		||||
   # open the main log file 
 | 
			
		||||
   open(OUT, ">$log_file") || die "unable to open $log_file\n";
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
   algorithm_tests();
 | 
			
		||||
   encryption_tests();
 | 
			
		||||
   pem_tests();
 | 
			
		||||
   verify_tests();
 | 
			
		||||
   ssl_tests();
 | 
			
		||||
   ca_tests();
 | 
			
		||||
 | 
			
		||||
   close(OUT);
 | 
			
		||||
 | 
			
		||||
   print("\nCompleted running tests.\n\n");
 | 
			
		||||
   print("Check log file for errors: $log_file\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
############################################################################
 | 
			
		||||
sub algorithm_tests
 | 
			
		||||
{
 | 
			
		||||
   my $i;
 | 
			
		||||
   my $outFile;
 | 
			
		||||
   my @tests = ( rsa_test, destest, ideatest, bftest, shatest, sha1test,
 | 
			
		||||
                 md5test, dsatest, md2test, mdc2test, rc2test, rc4test, randtest,
 | 
			
		||||
                 dhtest, exptest );
 | 
			
		||||
 | 
			
		||||
   print( "\nRUNNING CRYPTO ALGORITHM TESTS:\n\n");
 | 
			
		||||
 | 
			
		||||
   print( OUT "\n========================================================\n");
 | 
			
		||||
   print( OUT "CRYPTO ALGORITHM TESTS:\n\n");
 | 
			
		||||
 | 
			
		||||
   foreach $i (@tests)
 | 
			
		||||
   {
 | 
			
		||||
      $outFile = "$output_path\\$i.out";
 | 
			
		||||
      system("$i > $outFile");
 | 
			
		||||
      log_desc("Test: $i\.nlm:");
 | 
			
		||||
      log_output("", $outFile );
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
############################################################################
 | 
			
		||||
sub encryption_tests
 | 
			
		||||
{
 | 
			
		||||
   my $i;
 | 
			
		||||
   my $outFile;
 | 
			
		||||
   my @enc_tests = ( "enc", "rc4", "des-cfb", "des-ede-cfb", "des-ede3-cfb",
 | 
			
		||||
                     "des-ofb", "des-ede-ofb", "des-ede3-ofb",
 | 
			
		||||
                     "des-ecb", "des-ede", "des-ede3", "des-cbc",
 | 
			
		||||
                     "des-ede-cbc", "des-ede3-cbc", "idea-ecb", "idea-cfb",
 | 
			
		||||
                     "idea-ofb", "idea-cbc", "rc2-ecb", "rc2-cfb",
 | 
			
		||||
                     "rc2-ofb", "rc2-cbc", "bf-ecb", "bf-cfb",
 | 
			
		||||
                     "bf-ofb", "bf-cbc" );
 | 
			
		||||
 | 
			
		||||
   my $input = "$base_path\\do_tests.pl";
 | 
			
		||||
   my $cipher = "$output_path\\cipher.out";
 | 
			
		||||
   my $clear = "$output_path\\clear.out";
 | 
			
		||||
 | 
			
		||||
   print( "\nRUNNING ENCRYPTION & DECRYPTION TESTS:\n\n");
 | 
			
		||||
 | 
			
		||||
   print( OUT "\n========================================================\n");
 | 
			
		||||
   print( OUT "FILE ENCRYPTION & DECRYPTION TESTS:\n\n");
 | 
			
		||||
 | 
			
		||||
   foreach $i (@enc_tests)
 | 
			
		||||
   {
 | 
			
		||||
      log_desc("Testing: $i");
 | 
			
		||||
 | 
			
		||||
      # do encryption
 | 
			
		||||
      $outFile = "$output_path\\enc.out";
 | 
			
		||||
      system("openssl2 $i -e -bufsize 113 -k test -in $input -out $cipher > $outFile" );
 | 
			
		||||
      log_output("Encrypting: $input --> $cipher", $outFile);
 | 
			
		||||
 | 
			
		||||
      # do decryption
 | 
			
		||||
      $outFile = "$output_path\\dec.out";
 | 
			
		||||
      system("openssl2 $i -d -bufsize 157 -k test -in $cipher -out $clear > $outFile");
 | 
			
		||||
      log_output("Decrypting: $cipher --> $clear", $outFile);
 | 
			
		||||
 | 
			
		||||
      # compare files
 | 
			
		||||
      $x = compare_files( $input, $clear, 1);
 | 
			
		||||
      if ( $x == 0 )
 | 
			
		||||
      {
 | 
			
		||||
         print( "SUCCESS - files match: $input, $clear\n");
 | 
			
		||||
         print( OUT "SUCCESS - files match: $input, $clear\n");
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
         print( "ERROR: files don't match\n");
 | 
			
		||||
         print( OUT "ERROR: files don't match\n");
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      do_wait();
 | 
			
		||||
 | 
			
		||||
      # Now do the same encryption but use Base64
 | 
			
		||||
 | 
			
		||||
      # do encryption B64
 | 
			
		||||
      $outFile = "$output_path\\B64enc.out";
 | 
			
		||||
      system("openssl2 $i -a -e -bufsize 113 -k test -in $input -out $cipher > $outFile");
 | 
			
		||||
      log_output("Encrypting(B64): $cipher --> $clear", $outFile);
 | 
			
		||||
 | 
			
		||||
      # do decryption B64
 | 
			
		||||
      $outFile = "$output_path\\B64dec.out";
 | 
			
		||||
      system("openssl2 $i -a -d -bufsize 157 -k test -in $cipher -out $clear > $outFile");
 | 
			
		||||
      log_output("Decrypting(B64): $cipher --> $clear", $outFile);
 | 
			
		||||
 | 
			
		||||
      # compare files
 | 
			
		||||
      $x = compare_files( $input, $clear, 1);
 | 
			
		||||
      if ( $x == 0 )
 | 
			
		||||
      {
 | 
			
		||||
         print( "SUCCESS - files match: $input, $clear\n");
 | 
			
		||||
         print( OUT "SUCCESS - files match: $input, $clear\n");
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
         print( "ERROR: files don't match\n");
 | 
			
		||||
         print( OUT "ERROR: files don't match\n");
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      do_wait();
 | 
			
		||||
 | 
			
		||||
   } # end foreach
 | 
			
		||||
 | 
			
		||||
   # delete the temporary files
 | 
			
		||||
   unlink($cipher);
 | 
			
		||||
   unlink($clear);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############################################################################
 | 
			
		||||
sub pem_tests
 | 
			
		||||
{
 | 
			
		||||
   my $i;
 | 
			
		||||
   my $tmp_out;
 | 
			
		||||
   my $outFile = "$output_path\\pem.out";
 | 
			
		||||
 | 
			
		||||
   my %pem_tests = (
 | 
			
		||||
         "crl"      => "testcrl.pem",
 | 
			
		||||
          "pkcs7"   => "testp7.pem",
 | 
			
		||||
          "req"     => "testreq2.pem",
 | 
			
		||||
          "rsa"     => "testrsa.pem",
 | 
			
		||||
          "x509"    => "testx509.pem",
 | 
			
		||||
          "x509"    => "v3-cert1.pem",
 | 
			
		||||
          "sess_id" => "testsid.pem"  );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   print( "\nRUNNING PEM TESTS:\n\n");
 | 
			
		||||
 | 
			
		||||
   print( OUT "\n========================================================\n");
 | 
			
		||||
   print( OUT "PEM TESTS:\n\n");
 | 
			
		||||
 | 
			
		||||
   foreach $i (keys(%pem_tests))
 | 
			
		||||
   {
 | 
			
		||||
      log_desc( "Testing: $i");
 | 
			
		||||
 | 
			
		||||
      my $input = "$test_path\\$pem_tests{$i}";
 | 
			
		||||
 | 
			
		||||
      $tmp_out = "$output_path\\$pem_tests{$i}";
 | 
			
		||||
 | 
			
		||||
      if ($i ne "req" )
 | 
			
		||||
      {
 | 
			
		||||
         system("openssl2 $i -in $input -out $tmp_out > $outFile");
 | 
			
		||||
         log_output( "openssl2 $i -in $input -out $tmp_out", $outFile);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
         system("openssl2 $i -in $input -out $tmp_out -config $OpenSSL_config > $outFile");
 | 
			
		||||
         log_output( "openssl2 $i -in $input -out $tmp_out -config $OpenSSL_config", $outFile );
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      $x = compare_files( $input, $tmp_out);
 | 
			
		||||
      if ( $x == 0 )
 | 
			
		||||
      {
 | 
			
		||||
         print( "SUCCESS - files match: $input, $tmp_out\n");
 | 
			
		||||
         print( OUT "SUCCESS - files match: $input, $tmp_out\n");
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
         print( "ERROR: files don't match\n");
 | 
			
		||||
         print( OUT "ERROR: files don't match\n");
 | 
			
		||||
      }
 | 
			
		||||
      do_wait();
 | 
			
		||||
 | 
			
		||||
   } # end foreach
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############################################################################
 | 
			
		||||
sub verify_tests
 | 
			
		||||
{
 | 
			
		||||
   my $i;
 | 
			
		||||
   my $outFile = "$output_path\\verify.out";
 | 
			
		||||
 | 
			
		||||
   my @cert_files = <$cert_path\\*.pem>;
 | 
			
		||||
 | 
			
		||||
   print( "\nRUNNING VERIFY TESTS:\n\n");
 | 
			
		||||
 | 
			
		||||
   print( OUT "\n========================================================\n");
 | 
			
		||||
   print( OUT "VERIFY TESTS:\n\n");
 | 
			
		||||
 | 
			
		||||
   make_tmp_cert_file();
 | 
			
		||||
 | 
			
		||||
   foreach $i (@cert_files)
 | 
			
		||||
   {
 | 
			
		||||
      system("openssl2 verify -CAfile $tmp_cert $i >$outFile");
 | 
			
		||||
      log_desc("Verifying cert: $i");
 | 
			
		||||
      log_output("openssl2 verify -CAfile $tmp_cert $i", $outFile);
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############################################################################
 | 
			
		||||
sub ssl_tests
 | 
			
		||||
{
 | 
			
		||||
   my $outFile = "$output_path\\ssl_tst.out";
 | 
			
		||||
 | 
			
		||||
   print( "\nRUNNING SSL TESTS:\n\n");
 | 
			
		||||
 | 
			
		||||
   print( OUT "\n========================================================\n");
 | 
			
		||||
   print( OUT "SSL TESTS:\n\n");
 | 
			
		||||
 | 
			
		||||
   make_tmp_cert_file();
 | 
			
		||||
 | 
			
		||||
   system("ssltest -ssl2 >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2:");
 | 
			
		||||
   log_output("ssltest -ssl2", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -ssl2 -server_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with server authentication:");
 | 
			
		||||
   log_output("ssltest -ssl2 -server_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -ssl2 -client_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with client authentication:");
 | 
			
		||||
   log_output("ssltest -ssl2 -client_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -ssl2 -server_auth -client_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with both client and server authentication:");
 | 
			
		||||
   log_output("ssltest -ssl2 -server_auth -client_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -ssl3 >$outFile");
 | 
			
		||||
   log_desc("Testing sslv3:");
 | 
			
		||||
   log_output("ssltest -ssl3", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -ssl3 -server_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv3 with server authentication:");
 | 
			
		||||
   log_output("ssltest -ssl3 -server_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -ssl3 -client_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv3 with client authentication:");
 | 
			
		||||
   log_output("ssltest -ssl3 -client_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -ssl3 -server_auth -client_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv3 with both client and server authentication:");
 | 
			
		||||
   log_output("ssltest -ssl3 -server_auth -client_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2/sslv3:");
 | 
			
		||||
   log_output("ssltest", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -server_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2/sslv3 with server authentication:");
 | 
			
		||||
   log_output("ssltest -server_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -client_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2/sslv3 with client authentication:");
 | 
			
		||||
   log_output("ssltest -client_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -server_auth -client_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2/sslv3 with both client and server authentication:");
 | 
			
		||||
   log_output("ssltest -server_auth -client_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -ssl2 >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -ssl2", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -dhe1024dsa -v >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2/sslv3 with 1024 bit DHE via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -dhe1024dsa -v", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -ssl2 -server_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with server authentication via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -ssl2 -server_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -ssl2 -client_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with client authentication via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -ssl2 -client_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -ssl2 -server_auth -client_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with both client and server authentication via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -ssl2 -server_auth -client_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -ssl3 >$outFile");
 | 
			
		||||
   log_desc("Testing sslv3 via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -ssl3", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -ssl3 -server_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv3 with server authentication via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -ssl3 -server_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -ssl3 -client_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv3 with client authentication  via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -ssl3 -client_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -ssl3 -server_auth -client_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv3 with both client and server authentication via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -ssl3 -server_auth -client_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2/sslv3 via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -server_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2/sslv3 with server authentication via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -server_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -client_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2/sslv3 with client authentication via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -client_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -server_auth -client_auth -CAfile $tmp_cert >$outFile");
 | 
			
		||||
   log_desc("Testing sslv2/sslv3 with both client and server authentication via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -server_auth -client_auth -CAfile $tmp_cert", $outFile);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############################################################################
 | 
			
		||||
sub ca_tests
 | 
			
		||||
{
 | 
			
		||||
   my $outFile = "$output_path\\ca_tst.out";
 | 
			
		||||
 | 
			
		||||
   my($CAkey)     = "$output_path\\keyCA.ss";
 | 
			
		||||
   my($CAcert)    = "$output_path\\certCA.ss";
 | 
			
		||||
   my($CAserial)  = "$output_path\\certCA.srl";
 | 
			
		||||
   my($CAreq)     = "$output_path\\reqCA.ss";
 | 
			
		||||
   my($CAreq2)    = "$output_path\\req2CA.ss";
 | 
			
		||||
 | 
			
		||||
   my($CAconf)    = "$test_path\\CAss.cnf";
 | 
			
		||||
 | 
			
		||||
   my($Uconf)     = "$test_path\\Uss.cnf";
 | 
			
		||||
 | 
			
		||||
   my($Ukey)      = "$output_path\\keyU.ss";
 | 
			
		||||
   my($Ureq)      = "$output_path\\reqU.ss";
 | 
			
		||||
   my($Ucert)     = "$output_path\\certU.ss";
 | 
			
		||||
 | 
			
		||||
   print( "\nRUNNING CA TESTS:\n\n");
 | 
			
		||||
 | 
			
		||||
   print( OUT "\n========================================================\n");
 | 
			
		||||
   print( OUT "CA TESTS:\n");
 | 
			
		||||
 | 
			
		||||
   system("openssl2 req -config $CAconf -out $CAreq -keyout $CAkey -new >$outFile");
 | 
			
		||||
   log_desc("Make a certificate request using req:");
 | 
			
		||||
   log_output("openssl2 req -config $CAconf -out $CAreq -keyout $CAkey -new", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("openssl2 x509 -CAcreateserial -in $CAreq -days 30 -req -out $CAcert -signkey $CAkey >$outFile");
 | 
			
		||||
   log_desc("Convert the certificate request into a self signed certificate using x509:");
 | 
			
		||||
   log_output("openssl2 x509 -CAcreateserial -in $CAreq -days 30 -req -out $CAcert -signkey $CAkey", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("openssl2 x509 -in $CAcert -x509toreq -signkey $CAkey -out $CAreq2 >$outFile");
 | 
			
		||||
   log_desc("Convert a certificate into a certificate request using 'x509':");
 | 
			
		||||
   log_output("openssl2 x509 -in $CAcert -x509toreq -signkey $CAkey -out $CAreq2", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("openssl2 req -config $OpenSSL_config -verify -in $CAreq -noout >$outFile");
 | 
			
		||||
   log_output("openssl2 req -config $OpenSSL_config -verify -in $CAreq -noout", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("openssl2 req -config $OpenSSL_config -verify -in $CAreq2 -noout >$outFile");
 | 
			
		||||
   log_output( "openssl2 req -config $OpenSSL_config -verify -in $CAreq2 -noout", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("openssl2 verify -CAfile $CAcert $CAcert >$outFile");
 | 
			
		||||
   log_output("openssl2 verify -CAfile $CAcert $CAcert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("openssl2 req -config $Uconf -out $Ureq -keyout $Ukey -new >$outFile");
 | 
			
		||||
   log_desc("Make another certificate request using req:");
 | 
			
		||||
   log_output("openssl2 req -config $Uconf -out $Ureq -keyout $Ukey -new", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("openssl2 x509 -CAcreateserial -in $Ureq -days 30 -req -out $Ucert -CA $CAcert -CAkey $CAkey -CAserial $CAserial >$outFile");
 | 
			
		||||
   log_desc("Sign certificate request with the just created CA via x509:");
 | 
			
		||||
   log_output("openssl2 x509 -CAcreateserial -in $Ureq -days 30 -req -out $Ucert -CA $CAcert -CAkey $CAkey -CAserial $CAserial", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("openssl2 verify -CAfile $CAcert $Ucert >$outFile");
 | 
			
		||||
   log_output("openssl2 verify -CAfile $CAcert $Ucert", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("openssl2 x509 -subject -issuer -startdate -enddate -noout -in $Ucert >$outFile");
 | 
			
		||||
   log_desc("Certificate details");
 | 
			
		||||
   log_output("openssl2 x509 -subject -issuer -startdate -enddate -noout -in $Ucert", $outFile);
 | 
			
		||||
 | 
			
		||||
   print(OUT "-- \n");
 | 
			
		||||
   print(OUT "The generated CA certificate is $CAcert\n");
 | 
			
		||||
   print(OUT "The generated CA private key is $CAkey\n");
 | 
			
		||||
   print(OUT "The current CA signing serial number is in $CAserial\n");
 | 
			
		||||
 | 
			
		||||
   print(OUT "The generated user certificate is $Ucert\n");
 | 
			
		||||
   print(OUT "The generated user private key is $Ukey\n");
 | 
			
		||||
   print(OUT "--\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
############################################################################
 | 
			
		||||
sub log_output( $ $ )
 | 
			
		||||
{
 | 
			
		||||
   my( $desc, $file ) = @_;
 | 
			
		||||
   my($error) = 0;
 | 
			
		||||
   my($key);
 | 
			
		||||
   my($msg);
 | 
			
		||||
 | 
			
		||||
   if ($desc)
 | 
			
		||||
   {
 | 
			
		||||
      print("$desc\n");
 | 
			
		||||
      print(OUT "$desc\n");
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
      # loop waiting for test program to complete
 | 
			
		||||
   while ( stat($file) == 0)
 | 
			
		||||
      { print(". "); sleep(1); }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      # copy test output to log file
 | 
			
		||||
   open(IN, "<$file");
 | 
			
		||||
   while (<IN>)
 | 
			
		||||
   { 
 | 
			
		||||
      print(OUT $_); 
 | 
			
		||||
      if ( $_ =~ /ERROR/ )
 | 
			
		||||
      {
 | 
			
		||||
         $error = 1;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
      # close and delete the temporary test output file
 | 
			
		||||
   close(IN);
 | 
			
		||||
   unlink($file);
 | 
			
		||||
 | 
			
		||||
   if ( $error == 0 )
 | 
			
		||||
   {
 | 
			
		||||
      $msg = "Test Succeeded";
 | 
			
		||||
   }
 | 
			
		||||
   else
 | 
			
		||||
   {
 | 
			
		||||
      $msg = "Test Failed";
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   print(OUT "$msg\n");
 | 
			
		||||
 | 
			
		||||
   if ($pause)
 | 
			
		||||
   {
 | 
			
		||||
      print("$msg - press ENTER to continue...");
 | 
			
		||||
      $key = getc;
 | 
			
		||||
      print("\n");
 | 
			
		||||
   }
 | 
			
		||||
      
 | 
			
		||||
      # Several of the testing scripts run a loop loading the 
 | 
			
		||||
      # same NLM with different options.
 | 
			
		||||
      # On slow NetWare machines there appears to be some delay in the 
 | 
			
		||||
      # OS actually unloading the test nlms and the OS complains about.
 | 
			
		||||
      # the NLM already being loaded.  This additional pause is to 
 | 
			
		||||
      # to help provide a little more time for unloading before trying to 
 | 
			
		||||
      # load again.
 | 
			
		||||
   sleep(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############################################################################
 | 
			
		||||
sub log_desc( $ )
 | 
			
		||||
{
 | 
			
		||||
   my( $desc ) = @_;
 | 
			
		||||
 | 
			
		||||
   print("\n");
 | 
			
		||||
   print("$desc\n");
 | 
			
		||||
 | 
			
		||||
   print(OUT "\n");
 | 
			
		||||
   print(OUT "$desc\n");
 | 
			
		||||
   print(OUT "======================================\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
############################################################################
 | 
			
		||||
sub compare_files( $ $ $ )
 | 
			
		||||
{
 | 
			
		||||
   my( $file1, $file2, $binary ) = @_;
 | 
			
		||||
   my( $n1, $n2, $b1, $b2 );
 | 
			
		||||
   my($ret) = 1;
 | 
			
		||||
 | 
			
		||||
   open(IN0, $file1) || die "\nunable to open $file1\n";
 | 
			
		||||
   open(IN1, $file2) || die "\nunable to open $file2\n";
 | 
			
		||||
 | 
			
		||||
  if ($binary)
 | 
			
		||||
  {
 | 
			
		||||
      binmode IN0;
 | 
			
		||||
      binmode IN1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
   for (;;)
 | 
			
		||||
   {
 | 
			
		||||
      $n1 = read(IN0, $b1, 512);
 | 
			
		||||
      $n2 = read(IN1, $b2, 512);
 | 
			
		||||
 | 
			
		||||
      if ($n1 != $n2) {last;}
 | 
			
		||||
      if ($b1 != $b2) {last;}
 | 
			
		||||
 | 
			
		||||
      if ($n1 == 0)
 | 
			
		||||
      {
 | 
			
		||||
         $ret = 0;
 | 
			
		||||
         last;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
   close(IN0);
 | 
			
		||||
   close(IN1);
 | 
			
		||||
   return($ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
############################################################################
 | 
			
		||||
sub do_wait()
 | 
			
		||||
{
 | 
			
		||||
   my($key);
 | 
			
		||||
 | 
			
		||||
   if ($pause)
 | 
			
		||||
   {
 | 
			
		||||
      print("Press ENTER to continue...");
 | 
			
		||||
      $key = getc;
 | 
			
		||||
      print("\n");
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############################################################################
 | 
			
		||||
sub make_tmp_cert_file()
 | 
			
		||||
{
 | 
			
		||||
   my @cert_files = <$cert_path\\*.pem>;
 | 
			
		||||
 | 
			
		||||
      # delete the file if it already exists
 | 
			
		||||
   unlink($tmp_cert);
 | 
			
		||||
 | 
			
		||||
   open( TMP_CERT, ">$tmp_cert") || die "\nunable to open $tmp_cert\n";
 | 
			
		||||
 | 
			
		||||
   print("building temporary cert file\n");
 | 
			
		||||
   
 | 
			
		||||
   # create a temporary cert file that contains all the certs
 | 
			
		||||
   foreach $i (@cert_files)
 | 
			
		||||
   {
 | 
			
		||||
      open( IN_CERT, $i ) || die "\nunable to open $i\n";
 | 
			
		||||
 | 
			
		||||
      for(;;)
 | 
			
		||||
      {
 | 
			
		||||
         $n = sysread(IN_CERT, $data, 1024);
 | 
			
		||||
 | 
			
		||||
         if ($n == 0)
 | 
			
		||||
         {
 | 
			
		||||
            close(IN_CERT);
 | 
			
		||||
            last;
 | 
			
		||||
         };
 | 
			
		||||
 | 
			
		||||
         syswrite(TMP_CERT, $data, $n);
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   close( TMP_CERT );
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										254
									
								
								Netware/globals.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										254
									
								
								Netware/globals.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,254 @@
 | 
			
		||||
An initial review of the OpenSSL code was done to determine how many 
 | 
			
		||||
global variables where present.  The idea was to determine the amount of 
 | 
			
		||||
work required to pull the globals into an instance data structure in 
 | 
			
		||||
order to build a Library NLM for NetWare.  This file contains the results 
 | 
			
		||||
of the review.  Each file is listed along with the globals in the file.  
 | 
			
		||||
The initial review was done very quickly so this list is probably
 | 
			
		||||
not a comprehensive list.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
cryptlib.c
 | 
			
		||||
===========================================
 | 
			
		||||
 | 
			
		||||
static STACK *app_locks=NULL;
 | 
			
		||||
 | 
			
		||||
static STACK_OF(CRYPTO_dynlock) *dyn_locks=NULL;
 | 
			
		||||
 | 
			
		||||
static void (MS_FAR *locking_callback)(int mode,int type,
 | 
			
		||||
   const char *file,int line)=NULL;
 | 
			
		||||
static int (MS_FAR *add_lock_callback)(int *pointer,int amount,
 | 
			
		||||
   int type,const char *file,int line)=NULL;
 | 
			
		||||
static unsigned long (MS_FAR *id_callback)(void)=NULL;
 | 
			
		||||
static struct CRYPTO_dynlock_value *(MS_FAR *dynlock_create_callback)
 | 
			
		||||
   (const char *file,int line)=NULL;
 | 
			
		||||
static void (MS_FAR *dynlock_lock_callback)(int mode,
 | 
			
		||||
   struct CRYPTO_dynlock_value *l, const char *file,int line)=NULL;
 | 
			
		||||
static void (MS_FAR *dynlock_destroy_callback)(struct CRYPTO_dynlock_value *l,
 | 
			
		||||
   const char *file,int line)=NULL;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
mem.c
 | 
			
		||||
===========================================
 | 
			
		||||
static int allow_customize = 1;      /* we provide flexible functions for */
 | 
			
		||||
static int allow_customize_debug = 1;/* exchanging memory-related functions at
 | 
			
		||||
 | 
			
		||||
/* may be changed as long as `allow_customize' is set */
 | 
			
		||||
static void *(*malloc_locked_func)(size_t)  = malloc;
 | 
			
		||||
static void (*free_locked_func)(void *)     = free;
 | 
			
		||||
static void *(*malloc_func)(size_t)         = malloc;
 | 
			
		||||
static void *(*realloc_func)(void *, size_t)= realloc;
 | 
			
		||||
static void (*free_func)(void *)            = free;
 | 
			
		||||
 | 
			
		||||
/* use default functions from mem_dbg.c */
 | 
			
		||||
static void (*malloc_debug_func)(void *,int,const char *,int,int)
 | 
			
		||||
   = CRYPTO_dbg_malloc;
 | 
			
		||||
static void (*realloc_debug_func)(void *,void *,int,const char *,int,int)
 | 
			
		||||
   = CRYPTO_dbg_realloc;
 | 
			
		||||
static void (*free_debug_func)(void *,int) = CRYPTO_dbg_free;
 | 
			
		||||
static void (*set_debug_options_func)(long) = CRYPTO_dbg_set_options;
 | 
			
		||||
static long (*get_debug_options_func)(void) = CRYPTO_dbg_get_options;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
mem_dbg.c
 | 
			
		||||
===========================================
 | 
			
		||||
static int mh_mode=CRYPTO_MEM_CHECK_OFF;
 | 
			
		||||
static unsigned long order = 0; /* number of memory requests */
 | 
			
		||||
static LHASH *mh=NULL; /* hash-table of memory requests (address as key) */
 | 
			
		||||
 | 
			
		||||
static LHASH *amih=NULL; /* hash-table with those app_mem_info_st's */
 | 
			
		||||
static long options =             /* extra information to be recorded */
 | 
			
		||||
static unsigned long disabling_thread = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
err.c
 | 
			
		||||
===========================================
 | 
			
		||||
static LHASH *error_hash=NULL;
 | 
			
		||||
static LHASH *thread_hash=NULL;
 | 
			
		||||
 | 
			
		||||
several files have routines with static "init" to track if error strings
 | 
			
		||||
   have been loaded ( may not want seperate error strings for each process )
 | 
			
		||||
   The "init" variable can't be left "global" because the error has is a ptr
 | 
			
		||||
   that is malloc'ed.  The malloc'ed error has is dependant on the "init"
 | 
			
		||||
   vars.
 | 
			
		||||
 | 
			
		||||
   files:
 | 
			
		||||
      pem_err.c
 | 
			
		||||
      cpt_err.c
 | 
			
		||||
      pk12err.c
 | 
			
		||||
      asn1_err.c
 | 
			
		||||
      bio_err.c
 | 
			
		||||
      bn_err.c
 | 
			
		||||
      buf_err.c
 | 
			
		||||
      comp_err.c
 | 
			
		||||
      conf_err.c
 | 
			
		||||
      cpt_err.c
 | 
			
		||||
      dh_err.c
 | 
			
		||||
      dsa_err.c
 | 
			
		||||
      dso_err.c
 | 
			
		||||
      evp_err.c
 | 
			
		||||
      obj_err.c
 | 
			
		||||
      pkcs7err.c
 | 
			
		||||
      rand_err.c
 | 
			
		||||
      rsa_err.c
 | 
			
		||||
      rsar_err.c
 | 
			
		||||
      ssl_err.c
 | 
			
		||||
      x509_err.c
 | 
			
		||||
      v3err.c
 | 
			
		||||
		err.c
 | 
			
		||||
 | 
			
		||||
These file have similar "init" globals but they are for other stuff not
 | 
			
		||||
error strings:
 | 
			
		||||
 | 
			
		||||
		bn_lib.c
 | 
			
		||||
		ecc_enc.c
 | 
			
		||||
		s23_clnt.c
 | 
			
		||||
		s23_meth.c
 | 
			
		||||
		s23_srvr.c
 | 
			
		||||
		s2_clnt.c
 | 
			
		||||
		s2_lib.c
 | 
			
		||||
		s2_meth.c
 | 
			
		||||
		s2_srvr.c
 | 
			
		||||
		s3_clnt.c
 | 
			
		||||
		s3_lib.c
 | 
			
		||||
		s3_srvr.c
 | 
			
		||||
		t1_clnt.c
 | 
			
		||||
		t1_meth.c
 | 
			
		||||
		t1_srvr.c
 | 
			
		||||
 | 
			
		||||
rand_lib.c
 | 
			
		||||
===========================================
 | 
			
		||||
static RAND_METHOD *rand_meth= &rand_ssleay_meth;
 | 
			
		||||
 | 
			
		||||
md_rand.c
 | 
			
		||||
===========================================
 | 
			
		||||
static int state_num=0,state_index=0;
 | 
			
		||||
static unsigned char state[STATE_SIZE+MD_DIGEST_LENGTH];
 | 
			
		||||
static unsigned char md[MD_DIGEST_LENGTH];
 | 
			
		||||
static long md_count[2]={0,0};
 | 
			
		||||
static double entropy=0;
 | 
			
		||||
static int initialized=0;
 | 
			
		||||
 | 
			
		||||
/* This should be set to 1 only when ssleay_rand_add() is called inside
 | 
			
		||||
   an already locked state, so it doesn't try to lock and thereby cause
 | 
			
		||||
   a hang.  And it should always be reset back to 0 before unlocking. */
 | 
			
		||||
static int add_do_not_lock=0;
 | 
			
		||||
 | 
			
		||||
obj_dat.c
 | 
			
		||||
============================================
 | 
			
		||||
static int new_nid=NUM_NID;
 | 
			
		||||
static LHASH *added=NULL;
 | 
			
		||||
 | 
			
		||||
b_sock.c
 | 
			
		||||
===========================================
 | 
			
		||||
static unsigned long BIO_ghbn_hits=0L;
 | 
			
		||||
static unsigned long BIO_ghbn_miss=0L;
 | 
			
		||||
static struct ghbn_cache_st
 | 
			
		||||
   {
 | 
			
		||||
   char name[129];
 | 
			
		||||
   struct hostent *ent;
 | 
			
		||||
   unsigned long order;
 | 
			
		||||
   } ghbn_cache[GHBN_NUM];
 | 
			
		||||
 | 
			
		||||
static int wsa_init_done=0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bio_lib.c
 | 
			
		||||
===========================================
 | 
			
		||||
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *bio_meth=NULL;
 | 
			
		||||
static int bio_meth_num=0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bn_lib.c
 | 
			
		||||
========================================
 | 
			
		||||
static int bn_limit_bits=0;
 | 
			
		||||
static int bn_limit_num=8;        /* (1<<bn_limit_bits) */
 | 
			
		||||
static int bn_limit_bits_low=0;
 | 
			
		||||
static int bn_limit_num_low=8;    /* (1<<bn_limit_bits_low) */
 | 
			
		||||
static int bn_limit_bits_high=0;
 | 
			
		||||
static int bn_limit_num_high=8;   /* (1<<bn_limit_bits_high) */
 | 
			
		||||
static int bn_limit_bits_mont=0;
 | 
			
		||||
static int bn_limit_num_mont=8;   /* (1<<bn_limit_bits_mont) */
 | 
			
		||||
 | 
			
		||||
conf_lib.c
 | 
			
		||||
========================================
 | 
			
		||||
static CONF_METHOD *default_CONF_method=NULL;
 | 
			
		||||
 | 
			
		||||
dh_lib.c
 | 
			
		||||
========================================
 | 
			
		||||
static DH_METHOD *default_DH_method;
 | 
			
		||||
static int dh_meth_num = 0;
 | 
			
		||||
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dh_meth = NULL;
 | 
			
		||||
 | 
			
		||||
dsa_lib.c
 | 
			
		||||
========================================
 | 
			
		||||
static DSA_METHOD *default_DSA_method;
 | 
			
		||||
static int dsa_meth_num = 0;
 | 
			
		||||
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dsa_meth = NULL;
 | 
			
		||||
 | 
			
		||||
dso_lib.c
 | 
			
		||||
========================================
 | 
			
		||||
static DSO_METHOD *default_DSO_meth = NULL;
 | 
			
		||||
 | 
			
		||||
rsa_lib.c
 | 
			
		||||
========================================
 | 
			
		||||
static RSA_METHOD *default_RSA_meth=NULL;
 | 
			
		||||
static int rsa_meth_num=0;
 | 
			
		||||
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *rsa_meth=NULL;
 | 
			
		||||
 | 
			
		||||
x509_trs.c
 | 
			
		||||
=======================================
 | 
			
		||||
static int (*default_trust)(int id, X509 *x, int flags) = obj_trust;
 | 
			
		||||
static STACK_OF(X509_TRUST) *trtable = NULL;
 | 
			
		||||
 | 
			
		||||
x509_req.c
 | 
			
		||||
=======================================
 | 
			
		||||
static int *ext_nids = ext_nid_list;
 | 
			
		||||
 | 
			
		||||
o_names.c
 | 
			
		||||
======================================
 | 
			
		||||
static LHASH *names_lh=NULL;
 | 
			
		||||
static STACK_OF(NAME_FUNCS) *name_funcs_stack;
 | 
			
		||||
static int free_type;
 | 
			
		||||
static int names_type_num=OBJ_NAME_TYPE_NUM;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
th-lock.c - NEED to add support for locking for NetWare
 | 
			
		||||
==============================================
 | 
			
		||||
static long *lock_count;
 | 
			
		||||
(other platform specific globals)
 | 
			
		||||
 | 
			
		||||
x_x509.c
 | 
			
		||||
==============================================
 | 
			
		||||
static int x509_meth_num = 0;
 | 
			
		||||
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *x509_meth = NULL;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
evp_pbe.c
 | 
			
		||||
============================================
 | 
			
		||||
static STACK *pbe_algs;
 | 
			
		||||
 | 
			
		||||
evp_key.c
 | 
			
		||||
============================================
 | 
			
		||||
static char prompt_string[80];
 | 
			
		||||
 | 
			
		||||
ssl_ciph.c
 | 
			
		||||
============================================
 | 
			
		||||
static STACK_OF(SSL_COMP) *ssl_comp_methods=NULL;
 | 
			
		||||
 | 
			
		||||
ssl_lib.c
 | 
			
		||||
=============================================
 | 
			
		||||
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *ssl_meth=NULL;
 | 
			
		||||
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *ssl_ctx_meth=NULL;
 | 
			
		||||
static int ssl_meth_num=0;
 | 
			
		||||
static int ssl_ctx_meth_num=0;
 | 
			
		||||
 | 
			
		||||
ssl_sess.c
 | 
			
		||||
=============================================
 | 
			
		||||
static int ssl_session_num=0;
 | 
			
		||||
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *ssl_session_meth=NULL;
 | 
			
		||||
 | 
			
		||||
x509_vfy.c
 | 
			
		||||
============================================
 | 
			
		||||
static STACK_OF(CRYPTO_EX_DATA_FUNCS) *x509_store_ctx_method=NULL;
 | 
			
		||||
static int x509_store_ctx_num=0;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										19
									
								
								Netware/readme.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								Netware/readme.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
 | 
			
		||||
Contents of the openssl\netware directory
 | 
			
		||||
==========================================
 | 
			
		||||
 | 
			
		||||
Regular files:
 | 
			
		||||
 | 
			
		||||
readme.txt     - this file
 | 
			
		||||
do_tests.pl    - perl script used to run the OpenSSL tests on NetWare
 | 
			
		||||
cpy_tests.bat  - batch to to copy test stuff to NetWare server
 | 
			
		||||
build.bat      - batch file to help with builds
 | 
			
		||||
set_env.bat    - batch file to help setup build environments
 | 
			
		||||
globals.txt    - results of initial code review to identify OpenSSL global variables
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
The following files are generated by the various scripts.  They are
 | 
			
		||||
recreated each time and it is okay to delete them.
 | 
			
		||||
 | 
			
		||||
*.def - command files used by Metrowerks linker
 | 
			
		||||
*.mak - make files generated by mk1mf.pl
 | 
			
		||||
							
								
								
									
										90
									
								
								Netware/set_env.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								Netware/set_env.bat
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,90 @@
 | 
			
		||||
@echo off
 | 
			
		||||
 | 
			
		||||
rem ========================================================================
 | 
			
		||||
rem   Batch file to assist in setting up the necessary enviroment for
 | 
			
		||||
rem   building OpenSSL for NetWare.
 | 
			
		||||
rem
 | 
			
		||||
rem   usage:
 | 
			
		||||
rem      set_env [target]
 | 
			
		||||
rem
 | 
			
		||||
rem      target      - "netware-clib" - Clib build
 | 
			
		||||
rem                  - "netware-libc" - LibC build
 | 
			
		||||
rem
 | 
			
		||||
rem
 | 
			
		||||
 | 
			
		||||
if "a%1" == "a" goto usage
 | 
			
		||||
               
 | 
			
		||||
set LIBC_BUILD=
 | 
			
		||||
set CLIB_BUILD=
 | 
			
		||||
 | 
			
		||||
if "%1" == "netware-clib" set CLIB_BUILD=Y
 | 
			
		||||
if "%1" == "netware-clib" set LIBC_BUILD=
 | 
			
		||||
 | 
			
		||||
if "%1" == "netware-libc"  set LIBC_BUILD=Y
 | 
			
		||||
if "%1" == "netware-libc"  set CLIB_BUILD=
 | 
			
		||||
 | 
			
		||||
rem   Location of tools (compiler, linker, etc)
 | 
			
		||||
set TOOLS=d:\i_drive\tools
 | 
			
		||||
 | 
			
		||||
rem   If Perl for Win32 is not already in your path, add it here
 | 
			
		||||
set PERL_PATH=
 | 
			
		||||
 | 
			
		||||
rem   Define path to the Metrowerks command line tools
 | 
			
		||||
rem   ( compiler, assembler, linker)
 | 
			
		||||
set METROWERKS_PATH=%TOOLS%\codewar\pdk_21\tools\command line tools
 | 
			
		||||
rem set METROWERKS_PATH=%TOOLS%\codewar\PDK_40\Other Metrowerks Tools\Command Line Tools
 | 
			
		||||
 | 
			
		||||
rem   If using gnu make define path to utility
 | 
			
		||||
set GNU_MAKE_PATH=%TOOLS%\gnu
 | 
			
		||||
 | 
			
		||||
rem   If using ms nmake define path to nmake
 | 
			
		||||
set MS_NMAKE_PATH=%TOOLS%\msvc\600\bin
 | 
			
		||||
 | 
			
		||||
rem   If using NASM assembler define path
 | 
			
		||||
set NASM_PATH=%TOOLS%\nasm
 | 
			
		||||
 | 
			
		||||
rem   Update path to include tool paths
 | 
			
		||||
set path=%path%;%METROWERKS_PATH%
 | 
			
		||||
if not "%GNU_MAKE_PATH%" == "" set path=%path%;%GNU_MAKE_PATH%
 | 
			
		||||
if not "%MS_NMAKE_PATH%" == "" set path=%path%;%MS_NMAKE_PATH%
 | 
			
		||||
if not "%NASM_PATH%"     == "" set path=%path%;%NASM_PATH%
 | 
			
		||||
if not "%PERL_PATH%"     == "" set path=%path%;%PERL_PATH%
 | 
			
		||||
 | 
			
		||||
rem   Set MWCIncludes to location of Novell NDK includes
 | 
			
		||||
if "%LIBC_BUILD%" == "Y" set MWCIncludes=%TOOLS%\ndk\libc\include;%TOOLS%\ndk\libc\include\winsock;.\engines
 | 
			
		||||
if "%CLIB_BUILD%" == "Y" set MWCIncludes=%TOOLS%\ndk\nwsdk\include\nlm;.\engines
 | 
			
		||||
set include=
 | 
			
		||||
 | 
			
		||||
rem   Set Imports to location of Novell NDK import files
 | 
			
		||||
if "%LIBC_BUILD%" == "Y" set IMPORTS=%TOOLS%\ndk\libc\imports
 | 
			
		||||
if "%CLIB_BUILD%" == "Y" set IMPORTS=%TOOLS%\ndk\nwsdk\imports
 | 
			
		||||
 | 
			
		||||
rem   Set PRELUDE to the absolute path of the prelude object to link with in
 | 
			
		||||
rem   the Metrowerks NetWare PDK - NOTE: for Clib builds "nwpre.obj" is 
 | 
			
		||||
rem   recommended, for LibC NKS builds libcpre.o must be used
 | 
			
		||||
if "%LIBC_BUILD%" == "Y" set PRELUDE=%TOOLS%\ndk\libc\imports\libcpre.o
 | 
			
		||||
if "%CLIB_BUILD%" == "Y" set PRELUDE=%TOOLS%\codewar\pdk_21\novell support\metrowerks support\libraries\runtime\nwpre.obj
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if "%LIBC_BUILD%" == "Y" echo Enviroment configured for LibC build
 | 
			
		||||
if "%LIBC_BUILD%" == "Y" echo use "netware\build.bat netware-libc ..." 
 | 
			
		||||
 | 
			
		||||
if "%CLIB_BUILD%" == "Y" echo Enviroment configured for CLib build
 | 
			
		||||
if "%CLIB_BUILD%" == "Y" echo use "netware\build.bat netware-clib ..." 
 | 
			
		||||
goto end
 | 
			
		||||
 | 
			
		||||
:usage
 | 
			
		||||
rem ===============================================================
 | 
			
		||||
echo .
 | 
			
		||||
echo . No target build specified!
 | 
			
		||||
echo .
 | 
			
		||||
echo . usage: set_env [target]
 | 
			
		||||
echo .
 | 
			
		||||
echo .   target      - "netware-clib" - Clib build
 | 
			
		||||
echo .               - "netware-libc" - LibC build
 | 
			
		||||
echo .
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
:end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										131
									
								
								PROBLEMS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								PROBLEMS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,131 @@
 | 
			
		||||
* System libcrypto.dylib and libssl.dylib are used by system ld on MacOS X.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    NOTE: The problem described here only applies when OpenSSL isn't built
 | 
			
		||||
    with shared library support (i.e. without the "shared" configuration
 | 
			
		||||
    option).  If you build with shared library support, you will have no
 | 
			
		||||
    problems as long as you set up DYLD_LIBRARY_PATH properly at all times.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
This is really a misfeature in ld, which seems to look for .dylib libraries
 | 
			
		||||
along the whole library path before it bothers looking for .a libraries.  This
 | 
			
		||||
means that -L switches won't matter unless OpenSSL is built with shared
 | 
			
		||||
library support.
 | 
			
		||||
 | 
			
		||||
The workaround may be to change the following lines in apps/Makefile.ssl and
 | 
			
		||||
test/Makefile.ssl:
 | 
			
		||||
 | 
			
		||||
  LIBCRYPTO=-L.. -lcrypto
 | 
			
		||||
  LIBSSL=-L.. -lssl
 | 
			
		||||
 | 
			
		||||
to:
 | 
			
		||||
 | 
			
		||||
  LIBCRYPTO=../libcrypto.a
 | 
			
		||||
  LIBSSL=../libssl.a
 | 
			
		||||
 | 
			
		||||
It's possible that something similar is needed for shared library support
 | 
			
		||||
as well.  That hasn't been well tested yet.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Another solution that many seem to recommend is to move the libraries
 | 
			
		||||
/usr/lib/libcrypto.0.9.dylib, /usr/lib/libssl.0.9.dylib to a different
 | 
			
		||||
directory, build and install OpenSSL and anything that depends on your
 | 
			
		||||
build, then move libcrypto.0.9.dylib and libssl.0.9.dylib back to their
 | 
			
		||||
original places.  Note that the version numbers on those two libraries
 | 
			
		||||
may differ on your machine.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
As long as Apple doesn't fix the problem with ld, this problem building
 | 
			
		||||
OpenSSL will remain as is.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Parallell make leads to errors
 | 
			
		||||
 | 
			
		||||
While running tests, running a parallell make is a bad idea.  Many test
 | 
			
		||||
scripts use the same name for output and input files, which means different
 | 
			
		||||
will interfere with each other and lead to test failure.
 | 
			
		||||
 | 
			
		||||
The solution is simple for now: don't run parallell make when testing.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Bugs in gcc 3.0 triggered
 | 
			
		||||
 | 
			
		||||
According to a problem report, there are bugs in gcc 3.0 that are
 | 
			
		||||
triggered by some of the code in OpenSSL, more specifically in
 | 
			
		||||
PEM_get_EVP_CIPHER_INFO().  The triggering code is the following:
 | 
			
		||||
 | 
			
		||||
	header+=11;
 | 
			
		||||
	if (*header != '4') return(0); header++;
 | 
			
		||||
	if (*header != ',') return(0); header++;
 | 
			
		||||
 | 
			
		||||
What happens is that gcc might optimize a little too agressively, and
 | 
			
		||||
you end up with an extra incrementation when *header != '4'.
 | 
			
		||||
 | 
			
		||||
We recommend that you upgrade gcc to as high a 3.x version as you can.
 | 
			
		||||
 | 
			
		||||
* solaris64-sparcv9-cc SHA-1 performance with WorkShop 6 compiler.
 | 
			
		||||
 | 
			
		||||
As subject suggests SHA-1 might perform poorly (4 times slower)
 | 
			
		||||
if compiled with WorkShop 6 compiler and -xarch=v9. The cause for
 | 
			
		||||
this seems to be the fact that compiler emits multiplication to
 | 
			
		||||
perform shift operations:-( To work the problem around configure
 | 
			
		||||
with './Configure solaris64-sparcv9-cc -DMD32_REG_T=int'.
 | 
			
		||||
 | 
			
		||||
* Problems with hp-parisc2-cc target when used with "no-asm" flag
 | 
			
		||||
 | 
			
		||||
When using the hp-parisc2-cc target, wrong bignum code is generated.
 | 
			
		||||
This is due to the SIXTY_FOUR_BIT build being compiled with the +O3
 | 
			
		||||
aggressive optimization.
 | 
			
		||||
The problem manifests itself by the BN_kronecker test hanging in an
 | 
			
		||||
endless loop. Reason: the BN_kronecker test calls BN_generate_prime()
 | 
			
		||||
which itself hangs. The reason could be tracked down to the bn_mul_comba8()
 | 
			
		||||
function in bn_asm.c. At some occasions the higher 32bit value of r[7]
 | 
			
		||||
is off by 1 (meaning: calculated=shouldbe+1). Further analysis failed,
 | 
			
		||||
as no debugger support possible at +O3 and additional fprintf()'s
 | 
			
		||||
introduced fixed the bug, therefore it is most likely a bug in the
 | 
			
		||||
optimizer.
 | 
			
		||||
The bug was found in the BN_kronecker test but may also lead to
 | 
			
		||||
failures in other parts of the code.
 | 
			
		||||
(See Ticket #426.)
 | 
			
		||||
 | 
			
		||||
Workaround: modify the target to +O2 when building with no-asm.
 | 
			
		||||
 | 
			
		||||
* Poor support for AIX shared builds.
 | 
			
		||||
 | 
			
		||||
do_aix-shared rule is not flexible enough to parameterize through a
 | 
			
		||||
config-line. './Configure aix43-cc shared' is working, but not
 | 
			
		||||
'./Configure aix64-gcc shared'. In latter case make fails to create shared
 | 
			
		||||
libraries. It's possible to build 64-bit shared libraries by running
 | 
			
		||||
'env OBJECT_MODE=64 make', but we need more elegant solution. Preferably one
 | 
			
		||||
supporting even gcc shared builds. See RT#463 for background information.
 | 
			
		||||
 | 
			
		||||
* Problems building shared libraries on SCO OpenServer Release 5.0.6
 | 
			
		||||
  with gcc 2.95.3
 | 
			
		||||
 | 
			
		||||
The symptoms appear when running the test suite, more specifically
 | 
			
		||||
test/ectest, with the following result:
 | 
			
		||||
 | 
			
		||||
OSSL_LIBPATH="`cd ..; pwd`"; LD_LIBRARY_PATH="$OSSL_LIBPATH:$LD_LIBRARY_PATH"; DYLD_LIBRARY_PATH="$OSSL_LIBPATH:$DYLD_LIBRARY_PATH"; SHLIB_PATH="$OSSL_LIBPATH:$SHLIB_PATH"; LIBPATH="$OSSL_LIBPATH:$LIBPATH"; if [ "debug-sco5-gcc" = "Cygwin" ]; then PATH="${LIBPATH}:$PATH"; fi; export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH LIBPATH PATH; ./ectest
 | 
			
		||||
ectest.c:186: ABORT
 | 
			
		||||
 | 
			
		||||
The cause of the problem seems to be that isxdigit(), called from
 | 
			
		||||
BN_hex2bn(), returns 0 on a perfectly legitimate hex digit.  Further
 | 
			
		||||
investigation shows that any of the isxxx() macros return 0 on any
 | 
			
		||||
input.  A direct look in the information array that the isxxx() use,
 | 
			
		||||
called __ctype, shows that it contains all zeroes...
 | 
			
		||||
 | 
			
		||||
Taking a look at the newly created libcrypto.so with nm, one can see
 | 
			
		||||
that the variable __ctype is defined in libcrypto's .bss (which
 | 
			
		||||
explains why it is filled with zeroes):
 | 
			
		||||
 | 
			
		||||
$ nm -Pg libcrypto.so | grep __ctype
 | 
			
		||||
__ctype B 0011659c
 | 
			
		||||
__ctype2 U         
 | 
			
		||||
 | 
			
		||||
Curiously, __ctype2 is undefined, in spite of being declared in
 | 
			
		||||
/usr/include/ctype.h in exactly the same way as __ctype.
 | 
			
		||||
 | 
			
		||||
Any information helping to solve this issue would be deeply
 | 
			
		||||
appreciated.
 | 
			
		||||
 | 
			
		||||
NOTE: building non-shared doesn't come with this problem.
 | 
			
		||||
							
								
								
									
										18
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								README
									
									
									
									
									
								
							@@ -122,6 +122,13 @@
 | 
			
		||||
 lists the functions; you will probably have to look at the code to work out
 | 
			
		||||
 how to use them. Look at the example programs.
 | 
			
		||||
 | 
			
		||||
 PROBLEMS
 | 
			
		||||
 --------
 | 
			
		||||
 | 
			
		||||
 For some platforms, there are some known problems that may affect the user
 | 
			
		||||
 or application author.  We try to collect those in doc/PROBLEMS, with current
 | 
			
		||||
 thoughts on how they should be solved in a future of OpenSSL.
 | 
			
		||||
 | 
			
		||||
 SUPPORT 
 | 
			
		||||
 -------
 | 
			
		||||
 | 
			
		||||
@@ -146,11 +153,13 @@
 | 
			
		||||
    - Problem Description (steps that will reproduce the problem, if known)
 | 
			
		||||
    - Stack Traceback (if the application dumps core)
 | 
			
		||||
 | 
			
		||||
 Report the bug to the OpenSSL project at:
 | 
			
		||||
 Report the bug to the OpenSSL project via the Request Tracker
 | 
			
		||||
 (http://www.openssl.org/rt2.html) by mail to:
 | 
			
		||||
 | 
			
		||||
    openssl-bugs@openssl.org
 | 
			
		||||
 | 
			
		||||
 Note that mail to openssl-bugs@openssl.org is forwarded to a public
 | 
			
		||||
 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).
 | 
			
		||||
 | 
			
		||||
@@ -164,7 +173,9 @@
 | 
			
		||||
 textual explanation of what your patch does.
 | 
			
		||||
 | 
			
		||||
 Note: For legal reasons, contributions from the US can be accepted only
 | 
			
		||||
 if a copy of the patch is sent to crypt@bxa.doc.gov
 | 
			
		||||
 if a TSA notification and a copy of the patch is sent to crypt@bis.doc.gov;
 | 
			
		||||
 see http://www.bis.doc.gov/Encryption/PubAvailEncSourceCodeNofify.html [sic]
 | 
			
		||||
 and http://w3.access.gpo.gov/bis/ear/pdf/740.pdf (EAR Section 740.13(e)).
 | 
			
		||||
 | 
			
		||||
 The preferred format for changes is "diff -u" output. You might
 | 
			
		||||
 generate it like this:
 | 
			
		||||
@@ -174,3 +185,4 @@
 | 
			
		||||
 # ./Configure dist; make clean
 | 
			
		||||
 # cd ..
 | 
			
		||||
 # diff -ur openssl-orig openssl-work > mydiffs.patch
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -154,7 +154,7 @@
 | 
			
		||||
    shared-library that contains the ENGINE implementation, and "NO_VCHECK"
 | 
			
		||||
    might possibly be useful if there is a minor version conflict and you
 | 
			
		||||
    (or a vendor helpdesk) is convinced you can safely ignore it.
 | 
			
		||||
    "ENGINE_ID" is probably only needed if a shared-library implements
 | 
			
		||||
    "ID" is probably only needed if a shared-library implements
 | 
			
		||||
    multiple ENGINEs, but if you know the engine id you expect to be using,
 | 
			
		||||
    it doesn't hurt to specify it (and this provides a sanity check if
 | 
			
		||||
    nothing else). "LIST_ADD" is only required if you actually wish the
 | 
			
		||||
@@ -174,7 +174,7 @@
 | 
			
		||||
 | 
			
		||||
       ENGINE *e = ENGINE_by_id("dynamic");
 | 
			
		||||
       ENGINE_ctrl_cmd_string(e, "SO_PATH", "/lib/libfoo.so", 0);
 | 
			
		||||
       ENGINE_ctrl_cmd_string(e, "ENGINE_ID", "foo", 0);
 | 
			
		||||
       ENGINE_ctrl_cmd_string(e, "ID", "foo", 0);
 | 
			
		||||
       ENGINE_ctrl_cmd_string(e, "LOAD", NULL, 0);
 | 
			
		||||
       ENGINE_ctrl_cmd_string(e, "CMD_FOO", "some input data", 0);
 | 
			
		||||
 | 
			
		||||
@@ -184,7 +184,7 @@
 | 
			
		||||
 | 
			
		||||
       openssl engine dynamic \
 | 
			
		||||
                 -pre SO_PATH:/lib/libfoo.so \
 | 
			
		||||
                 -pre ENGINE_ID:foo \
 | 
			
		||||
                 -pre ID:foo \
 | 
			
		||||
                 -pre LOAD \
 | 
			
		||||
                 -pre "CMD_FOO:some input data"
 | 
			
		||||
 | 
			
		||||
@@ -192,7 +192,7 @@
 | 
			
		||||
 | 
			
		||||
       openssl engine -vvvv dynamic \
 | 
			
		||||
                 -pre SO_PATH:/lib/libfoo.so \
 | 
			
		||||
                 -pre ENGINE_ID:foo \
 | 
			
		||||
                 -pre ID:foo \
 | 
			
		||||
                 -pre LOAD
 | 
			
		||||
 | 
			
		||||
    Applications that support the ENGINE API and more specifically, the
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										41
									
								
								STATUS
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								STATUS
									
									
									
									
									
								
							@@ -1,10 +1,18 @@
 | 
			
		||||
 | 
			
		||||
  OpenSSL STATUS                           Last modified at
 | 
			
		||||
  ______________                           $Date: 2002/04/13 22:47:04 $
 | 
			
		||||
  ______________                           $Date: 2003/02/28 15:17:45 $
 | 
			
		||||
 | 
			
		||||
  DEVELOPMENT STATE
 | 
			
		||||
 | 
			
		||||
    o  OpenSSL 0.9.7:  Under development...
 | 
			
		||||
    o  OpenSSL 0.9.8:  Under development...
 | 
			
		||||
    o  OpenSSL 0.9.7a: Released on February  19th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.7:  Released on December  31st, 2002
 | 
			
		||||
    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
 | 
			
		||||
@@ -17,23 +25,11 @@
 | 
			
		||||
    o  OpenSSL 0.9.2b: Released on March     22th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.1c: Released on December  23th, 1998
 | 
			
		||||
 | 
			
		||||
  [See also http://www.openssl.org/support/rt2.html]
 | 
			
		||||
 | 
			
		||||
  RELEASE SHOWSTOPPERS
 | 
			
		||||
 | 
			
		||||
    o BIGNUM library failures on 64-bit platforms (0.9.7-dev):
 | 
			
		||||
      - BN_mod_mul verificiation (bc) fails for solaris64-sparcv9-cc
 | 
			
		||||
        and other 64-bit platforms
 | 
			
		||||
 | 
			
		||||
	Checked on			Result
 | 
			
		||||
	alpha-cc (Tru64 version 4.0)	works
 | 
			
		||||
	linux-alpha+bwx-gcc		doesn't work. Reported by
 | 
			
		||||
					Sean O'Riordain <seanpor@acm.org>
 | 
			
		||||
	OpenBSD-sparc64			doesn't work.  BN_mod_mul breaks.
 | 
			
		||||
 | 
			
		||||
	Needs checked on
 | 
			
		||||
	[add platforms here]
 | 
			
		||||
 | 
			
		||||
      - BN_mod_mul verification fails for mips3-sgi-irix
 | 
			
		||||
        unless configured with no-asm
 | 
			
		||||
    o 
 | 
			
		||||
 | 
			
		||||
  AVAILABLE PATCHES
 | 
			
		||||
 | 
			
		||||
@@ -56,12 +52,19 @@
 | 
			
		||||
	UTIL (a new set of library functions to support some higher level
 | 
			
		||||
	      functionality that is currently missing).
 | 
			
		||||
	Shared library support for VMS.
 | 
			
		||||
	Kerberos 5 authentication
 | 
			
		||||
	Kerberos 5 authentication (Heimdal)
 | 
			
		||||
	Constification
 | 
			
		||||
	OCSP
 | 
			
		||||
	Compression
 | 
			
		||||
	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.
 | 
			
		||||
 
 | 
			
		||||
@@ -285,6 +285,7 @@ $       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 f$trnlnm("OPENSSL_NO_"+alg_entry) .nes. "" then goto loop
 | 
			
		||||
$	  goto loop2
 | 
			
		||||
$       endif
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,8 @@
 | 
			
		||||
# demoCA ... where everything is stored
 | 
			
		||||
 | 
			
		||||
$SSLEAY_CONFIG=$ENV{"SSLEAY_CONFIG"};
 | 
			
		||||
$DAYS="-days 365";
 | 
			
		||||
$DAYS="-days 365";	# 1 year
 | 
			
		||||
$CADAYS="-days 1095";	# 3 years
 | 
			
		||||
$REQ="openssl req $SSLEAY_CONFIG";
 | 
			
		||||
$CA="openssl ca $SSLEAY_CONFIG";
 | 
			
		||||
$VERIFY="openssl verify";
 | 
			
		||||
@@ -46,6 +47,7 @@ $PKCS12="openssl pkcs12";
 | 
			
		||||
 | 
			
		||||
$CATOP="./demoCA";
 | 
			
		||||
$CAKEY="cakey.pem";
 | 
			
		||||
$CAREQ="careq.pem";
 | 
			
		||||
$CACERT="cacert.pem";
 | 
			
		||||
 | 
			
		||||
$DIRMODE = 0777;
 | 
			
		||||
@@ -101,8 +103,11 @@ foreach (@ARGV) {
 | 
			
		||||
		    $RET=$?;
 | 
			
		||||
		} else {
 | 
			
		||||
		    print "Making CA certificate ...\n";
 | 
			
		||||
		    system ("$REQ -new -x509 -keyout " .
 | 
			
		||||
			"${CATOP}/private/$CAKEY -out ${CATOP}/$CACERT $DAYS");
 | 
			
		||||
		    system ("$REQ -new -keyout " .
 | 
			
		||||
			"${CATOP}/private/$CAKEY -out ${CATOP}/$CAREQ");
 | 
			
		||||
		    system ("$CA -out ${CATOP}/$CACERT $CADAYS -batch " . 
 | 
			
		||||
			"-keyfile ${CATOP}/private/$CAKEY -selfsign " .
 | 
			
		||||
			"-infiles ${CATOP}/$CAREQ ");
 | 
			
		||||
		    $RET=$?;
 | 
			
		||||
		}
 | 
			
		||||
	    }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								apps/CA.sh
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								apps/CA.sh
									
									
									
									
									
								
							@@ -30,7 +30,8 @@
 | 
			
		||||
# default openssl.cnf file has setup as per the following
 | 
			
		||||
# demoCA ... where everything is stored
 | 
			
		||||
 | 
			
		||||
DAYS="-days 365"
 | 
			
		||||
DAYS="-days 365"	# 1 year
 | 
			
		||||
CADAYS="-days 1095"	# 3 years
 | 
			
		||||
REQ="openssl req $SSLEAY_CONFIG"
 | 
			
		||||
CA="openssl ca $SSLEAY_CONFIG"
 | 
			
		||||
VERIFY="openssl verify"
 | 
			
		||||
@@ -38,6 +39,7 @@ X509="openssl x509"
 | 
			
		||||
 | 
			
		||||
CATOP=./demoCA
 | 
			
		||||
CAKEY=./cakey.pem
 | 
			
		||||
CAREQ=./careq.pem
 | 
			
		||||
CACERT=./cacert.pem
 | 
			
		||||
 | 
			
		||||
for i
 | 
			
		||||
@@ -70,7 +72,7 @@ case $i in
 | 
			
		||||
	mkdir ${CATOP}/crl 
 | 
			
		||||
	mkdir ${CATOP}/newcerts
 | 
			
		||||
	mkdir ${CATOP}/private
 | 
			
		||||
	echo "01" > ${CATOP}/serial
 | 
			
		||||
	echo "00" > ${CATOP}/serial
 | 
			
		||||
	touch ${CATOP}/index.txt
 | 
			
		||||
    fi
 | 
			
		||||
    if [ ! -f ${CATOP}/private/$CAKEY ]; then
 | 
			
		||||
@@ -83,8 +85,11 @@ case $i in
 | 
			
		||||
	    RET=$?
 | 
			
		||||
	else
 | 
			
		||||
	    echo "Making CA certificate ..."
 | 
			
		||||
	    $REQ -new -x509 -keyout ${CATOP}/private/$CAKEY \
 | 
			
		||||
			   -out ${CATOP}/$CACERT $DAYS
 | 
			
		||||
	    $REQ -new -keyout ${CATOP}/private/$CAKEY \
 | 
			
		||||
			   -out ${CATOP}/$CAREQ
 | 
			
		||||
	    $CA -out ${CATOP}/$CACERT $CADAYS -batch \
 | 
			
		||||
			   -keyfile ${CATOP}/private/$CAKEY -selfsign \
 | 
			
		||||
			   -infiles ${CATOP}/$CAREQ 
 | 
			
		||||
	    RET=$?
 | 
			
		||||
	fi
 | 
			
		||||
    fi
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										871
									
								
								apps/apps.c
									
									
									
									
									
								
							
							
						
						
									
										871
									
								
								apps/apps.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										84
									
								
								apps/apps.h
									
									
									
									
									
								
							
							
						
						
									
										84
									
								
								apps/apps.h
									
									
									
									
									
								
							@@ -121,7 +121,9 @@
 | 
			
		||||
#include <openssl/lhash.h>
 | 
			
		||||
#include <openssl/conf.h>
 | 
			
		||||
#include <openssl/txt_db.h>
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#include <openssl/engine.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <openssl/ossl_typ.h>
 | 
			
		||||
 | 
			
		||||
int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn);
 | 
			
		||||
@@ -134,10 +136,6 @@ long app_RAND_load_files(char *file); /* `file' is a list of files to read,
 | 
			
		||||
                                       * (see e_os.h).  The string is
 | 
			
		||||
                                       * destroyed! */
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_NO_STDIO
 | 
			
		||||
BIO_METHOD *BIO_s_file();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_SYS_WIN32
 | 
			
		||||
#define rename(from,to) WIN32_rename((from),(to))
 | 
			
		||||
int WIN32_rename(char *oldname,char *newname);
 | 
			
		||||
@@ -148,8 +146,10 @@ int WIN32_rename(char *oldname,char *newname);
 | 
			
		||||
#define MAIN(a,v)	main(a,v)
 | 
			
		||||
 | 
			
		||||
#ifndef NON_MAIN
 | 
			
		||||
CONF *config=NULL;
 | 
			
		||||
BIO *bio_err=NULL;
 | 
			
		||||
#else
 | 
			
		||||
extern CONF *config;
 | 
			
		||||
extern BIO *bio_err;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -162,7 +162,9 @@ extern BIO *bio_err;
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_SYS_NETWARE
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef SIGPIPE
 | 
			
		||||
#define do_pipe_sig()	signal(SIGPIPE,SIG_IGN)
 | 
			
		||||
@@ -175,6 +177,7 @@ extern BIO *bio_err;
 | 
			
		||||
		do_pipe_sig()
 | 
			
		||||
#  define apps_shutdown()
 | 
			
		||||
#else
 | 
			
		||||
#  ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#    if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WIN16) || \
 | 
			
		||||
     defined(OPENSSL_SYS_WIN32)
 | 
			
		||||
#      ifdef _O_BINARY
 | 
			
		||||
@@ -199,6 +202,32 @@ extern BIO *bio_err;
 | 
			
		||||
			EVP_cleanup(); ENGINE_cleanup(); \
 | 
			
		||||
			CRYPTO_cleanup_all_ex_data(); ERR_remove_state(0); \
 | 
			
		||||
			ERR_free_strings(); } while(0)
 | 
			
		||||
#  else
 | 
			
		||||
#    if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WIN16) || \
 | 
			
		||||
     defined(OPENSSL_SYS_WIN32)
 | 
			
		||||
#      ifdef _O_BINARY
 | 
			
		||||
#        define apps_startup() \
 | 
			
		||||
			do { _fmode=_O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
			
		||||
			ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
 | 
			
		||||
			setup_ui_method(); } while(0)
 | 
			
		||||
#      else
 | 
			
		||||
#        define apps_startup() \
 | 
			
		||||
			do { _fmode=O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
			
		||||
			ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
 | 
			
		||||
			setup_ui_method(); } while(0)
 | 
			
		||||
#      endif
 | 
			
		||||
#    else
 | 
			
		||||
#      define apps_startup() \
 | 
			
		||||
			do { do_pipe_sig(); OpenSSL_add_all_algorithms(); \
 | 
			
		||||
			ERR_load_crypto_strings(); \
 | 
			
		||||
			setup_ui_method(); } while(0)
 | 
			
		||||
#    endif
 | 
			
		||||
#    define apps_shutdown() \
 | 
			
		||||
			do { CONF_modules_unload(1); destroy_ui_method(); \
 | 
			
		||||
			EVP_cleanup(); \
 | 
			
		||||
			CRYPTO_cleanup_all_ex_data(); ERR_remove_state(0); \
 | 
			
		||||
			ERR_free_strings(); } while(0)
 | 
			
		||||
#  endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef struct args_st
 | 
			
		||||
@@ -217,8 +246,8 @@ typedef struct pw_cb_data
 | 
			
		||||
int password_callback(char *buf, int bufsiz, int verify,
 | 
			
		||||
	PW_CB_DATA *cb_data);
 | 
			
		||||
 | 
			
		||||
int setup_ui_method();
 | 
			
		||||
void destroy_ui_method();
 | 
			
		||||
int setup_ui_method(void);
 | 
			
		||||
void destroy_ui_method(void);
 | 
			
		||||
 | 
			
		||||
int should_retry(int i);
 | 
			
		||||
int args_from_file(char *file, int *argc, char **argv[]);
 | 
			
		||||
@@ -237,21 +266,58 @@ 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);
 | 
			
		||||
EVP_PKEY *load_key(BIO *err, const char *file, int format,
 | 
			
		||||
EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
 | 
			
		||||
	const char *pass, ENGINE *e, const char *key_descrip);
 | 
			
		||||
EVP_PKEY *load_pubkey(BIO *err, const char *file, int format,
 | 
			
		||||
EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin,
 | 
			
		||||
	const char *pass, ENGINE *e, const char *key_descrip);
 | 
			
		||||
STACK_OF(X509) *load_certs(BIO *err, const char *file, int format,
 | 
			
		||||
	const char *pass, ENGINE *e, const char *cert_descrip);
 | 
			
		||||
X509_STORE *setup_verify(BIO *bp, char *CAfile, char *CApath);
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
ENGINE *setup_engine(BIO *err, const char *engine, int debug);
 | 
			
		||||
#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, char *str);
 | 
			
		||||
int make_serial_index(TXT_DB *db);
 | 
			
		||||
 | 
			
		||||
#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'
 | 
			
		||||
 | 
			
		||||
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 rotate_serial(char *serialfile, char *new_suffix, char *old_suffix);
 | 
			
		||||
CA_DB *load_index(char *dbfile, DB_ATTR *dbattr);
 | 
			
		||||
int index_index(CA_DB *db);
 | 
			
		||||
int save_index(char *dbfile, char *suffix, CA_DB *db);
 | 
			
		||||
int rotate_index(char *dbfile, char *new_suffix, char *old_suffix);
 | 
			
		||||
void free_index(CA_DB *db);
 | 
			
		||||
int index_name_cmp(const char **a, const char **b);
 | 
			
		||||
int parse_yesno(char *str, int def);
 | 
			
		||||
 | 
			
		||||
X509_NAME *parse_name(char *str, long chtype, int multirdn);
 | 
			
		||||
 | 
			
		||||
#define FORMAT_UNDEF    0
 | 
			
		||||
#define FORMAT_ASN1     1
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										106
									
								
								apps/asn1pars.c
									
									
									
									
									
								
							
							
						
						
									
										106
									
								
								apps/asn1pars.c
									
									
									
									
									
								
							@@ -82,6 +82,8 @@
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
@@ -90,7 +92,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	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 *osk=NULL;
 | 
			
		||||
	ASN1_TYPE *at=NULL;
 | 
			
		||||
@@ -167,6 +171,16 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			sk_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);
 | 
			
		||||
@@ -184,7 +198,7 @@ bad:
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - one of DER TXT PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg       input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg      output 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");
 | 
			
		||||
@@ -195,7 +209,8 @@ bad:
 | 
			
		||||
		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," -out filename output DER encoding to file\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;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -249,6 +264,19 @@ bad:
 | 
			
		||||
	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;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
 | 
			
		||||
		if (informat == FORMAT_PEM)
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmp;
 | 
			
		||||
@@ -269,6 +297,7 @@ bad:
 | 
			
		||||
			if (i <= 0) break;
 | 
			
		||||
			num+=i;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	str=buf->data;
 | 
			
		||||
 | 
			
		||||
	/* If any structs to parse go through in sequence */
 | 
			
		||||
@@ -289,7 +318,8 @@ bad:
 | 
			
		||||
			tmpbuf+=j;
 | 
			
		||||
			tmplen-=j;
 | 
			
		||||
			atmp = at;
 | 
			
		||||
			at = d2i_ASN1_TYPE(NULL,&tmpbuf,tmplen);
 | 
			
		||||
			ctmpbuf = tmpbuf;
 | 
			
		||||
			at = d2i_ASN1_TYPE(NULL,&ctmpbuf,tmplen);
 | 
			
		||||
			ASN1_TYPE_free(atmp);
 | 
			
		||||
			if(!at)
 | 
			
		||||
				{
 | 
			
		||||
@@ -305,7 +335,15 @@ bad:
 | 
			
		||||
		num=tmplen;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (length == 0) length=(unsigned int)num;
 | 
			
		||||
	if (offset >= num)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error: offset too large\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	num -= offset;
 | 
			
		||||
 | 
			
		||||
	if ((length == 0) || ((long)length > num)) length=(unsigned int)num;
 | 
			
		||||
	if(derout) {
 | 
			
		||||
		if(BIO_write(derout, str + offset, length) != (int)length) {
 | 
			
		||||
			BIO_printf(bio_err, "Error writing output\n");
 | 
			
		||||
@@ -333,6 +371,64 @@ end:
 | 
			
		||||
	if (osk != NULL) sk_free(osk);
 | 
			
		||||
	OBJ_cleanup();
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf)
 | 
			
		||||
	{
 | 
			
		||||
	CONF *cnf = NULL;
 | 
			
		||||
	int len;
 | 
			
		||||
	long errline;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	ASN1_TYPE *atyp = NULL;
 | 
			
		||||
 | 
			
		||||
	if (genconf)
 | 
			
		||||
		{
 | 
			
		||||
		cnf = NCONF_new(NULL);
 | 
			
		||||
		if (!NCONF_load(cnf, genconf, &errline))
 | 
			
		||||
			goto conferr;
 | 
			
		||||
		if (!genstr)
 | 
			
		||||
			genstr = NCONF_get_string(cnf, "default", "asn1");
 | 
			
		||||
		if (!genstr)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio, "Can't find 'asn1' in '%s'\n", genconf);
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	atyp = ASN1_generate_nconf(genstr, cnf);
 | 
			
		||||
	NCONF_free(cnf);
 | 
			
		||||
 | 
			
		||||
	if (!atyp)
 | 
			
		||||
		return -1;
 | 
			
		||||
 | 
			
		||||
	len = i2d_ASN1_TYPE(atyp, NULL);
 | 
			
		||||
 | 
			
		||||
	if (len <= 0)
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	if (!BUF_MEM_grow(buf,len))
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	p=(unsigned char *)buf->data;
 | 
			
		||||
 | 
			
		||||
	i2d_ASN1_TYPE(atyp, &p);
 | 
			
		||||
 | 
			
		||||
	ASN1_TYPE_free(atyp);
 | 
			
		||||
	return len;
 | 
			
		||||
 | 
			
		||||
	conferr:
 | 
			
		||||
 | 
			
		||||
	if (errline > 0)
 | 
			
		||||
		BIO_printf(bio, "Error on line %ld of config file '%s'\n",
 | 
			
		||||
							errline, genconf);
 | 
			
		||||
	else
 | 
			
		||||
		BIO_printf(bio, "Error loading config file '%s'\n", genconf);
 | 
			
		||||
 | 
			
		||||
	err:
 | 
			
		||||
	NCONF_free(cnf);
 | 
			
		||||
	ASN1_TYPE_free(atyp);
 | 
			
		||||
 | 
			
		||||
	return -1;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -187,7 +187,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_puts(STDout,SSL_CIPHER_description(
 | 
			
		||||
				sk_SSL_CIPHER_value(sk,i),
 | 
			
		||||
				buf,512));
 | 
			
		||||
				buf,sizeof buf));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -203,6 +203,6 @@ end:
 | 
			
		||||
	if (ssl != NULL) SSL_free(ssl);
 | 
			
		||||
	if (STDout != NULL) BIO_free_all(STDout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								apps/crl.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								apps/crl.c
									
									
									
									
									
								
							@@ -81,12 +81,14 @@ static char *crl_usage[]={
 | 
			
		||||
" -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",
 | 
			
		||||
" -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
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -97,6 +99,7 @@ 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;
 | 
			
		||||
@@ -105,7 +108,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	char *infile=NULL,*outfile=NULL;
 | 
			
		||||
	int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0;
 | 
			
		||||
	int fingerprint = 0;
 | 
			
		||||
	char **pp,buf[256];
 | 
			
		||||
	char **pp;
 | 
			
		||||
	X509_STORE *store = NULL;
 | 
			
		||||
	X509_STORE_CTX ctx;
 | 
			
		||||
	X509_LOOKUP *lookup = NULL;
 | 
			
		||||
@@ -188,6 +191,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			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)
 | 
			
		||||
@@ -271,9 +279,7 @@ bad:
 | 
			
		||||
			{
 | 
			
		||||
			if (issuer == i)
 | 
			
		||||
				{
 | 
			
		||||
				X509_NAME_oneline(X509_CRL_get_issuer(x),
 | 
			
		||||
								buf,256);
 | 
			
		||||
				BIO_printf(bio_out,"issuer= %s\n",buf);
 | 
			
		||||
				print_name(bio_out, "issuer=", X509_CRL_get_issuer(x), nmflag);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			if (hash == i)
 | 
			
		||||
@@ -372,7 +378,7 @@ end:
 | 
			
		||||
		X509_STORE_free(store);
 | 
			
		||||
	}
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static X509_CRL *load_crl(char *infile, int format)
 | 
			
		||||
 
 | 
			
		||||
@@ -280,7 +280,7 @@ end:
 | 
			
		||||
	if (crl != NULL) X509_CRL_free(crl);
 | 
			
		||||
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										75
									
								
								apps/dgst.c
									
									
									
									
									
								
							
							
						
						
									
										75
									
								
								apps/dgst.c
									
									
									
									
									
								
							@@ -73,8 +73,9 @@
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dgst_main
 | 
			
		||||
 | 
			
		||||
void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
			
		||||
		EVP_PKEY *key, unsigned char *sigin, int siglen);
 | 
			
		||||
int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
			
		||||
	  EVP_PKEY *key, unsigned char *sigin, int siglen, const char *title,
 | 
			
		||||
	  const char *file);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
@@ -99,7 +100,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	EVP_PKEY *sigkey = NULL;
 | 
			
		||||
	unsigned char *sigbuf = NULL;
 | 
			
		||||
	int siglen = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
@@ -116,7 +119,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	/* first check the program name */
 | 
			
		||||
	program_name(argv[0],pname,PROG_NAME_SIZE);
 | 
			
		||||
	program_name(argv[0],pname,sizeof pname);
 | 
			
		||||
 | 
			
		||||
	md=EVP_get_digestbyname(pname);
 | 
			
		||||
 | 
			
		||||
@@ -165,11 +168,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			keyform=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-hex") == 0)
 | 
			
		||||
			out_bin = 0;
 | 
			
		||||
		else if (strcmp(*argv,"-binary") == 0)
 | 
			
		||||
@@ -207,7 +212,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf(bio_err,"-keyform arg    key file format (PEM or ENGINE)\n");
 | 
			
		||||
		BIO_printf(bio_err,"-signature file signature to verify\n");
 | 
			
		||||
		BIO_printf(bio_err,"-binary         output in binary form\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err,"-engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		BIO_printf(bio_err,"-%3s to use the %s message digest algorithm (default)\n",
 | 
			
		||||
			LN_md5,LN_md5);
 | 
			
		||||
@@ -227,7 +234,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	bmd=BIO_new(BIO_f_md());
 | 
			
		||||
@@ -276,10 +285,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if(keyfile)
 | 
			
		||||
		{
 | 
			
		||||
		if (want_pub)
 | 
			
		||||
			sigkey = load_pubkey(bio_err, keyfile, keyform, NULL,
 | 
			
		||||
			sigkey = load_pubkey(bio_err, keyfile, keyform, 0, NULL,
 | 
			
		||||
				e, "key file");
 | 
			
		||||
		else
 | 
			
		||||
			sigkey = load_key(bio_err, keyfile, keyform, NULL,
 | 
			
		||||
			sigkey = load_key(bio_err, keyfile, keyform, 0, NULL,
 | 
			
		||||
				e, "key file");
 | 
			
		||||
		if (!sigkey)
 | 
			
		||||
			{
 | 
			
		||||
@@ -319,29 +328,44 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if (argc == 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
		do_fp(out, buf,inp,separator, out_bin, sigkey, sigbuf, siglen);
 | 
			
		||||
		err=do_fp(out, buf,inp,separator, out_bin, sigkey, sigbuf,
 | 
			
		||||
			  siglen,"","(stdin)");
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		name=OBJ_nid2sn(md->type);
 | 
			
		||||
		for (i=0; i<argc; i++)
 | 
			
		||||
			{
 | 
			
		||||
			char *tmp,*tofree=NULL;
 | 
			
		||||
			int r;
 | 
			
		||||
 | 
			
		||||
			if (BIO_read_filename(in,argv[i]) <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				perror(argv[i]);
 | 
			
		||||
				err++;
 | 
			
		||||
				continue;
 | 
			
		||||
				}
 | 
			
		||||
			if(!out_bin) BIO_printf(out, "%s(%s)= ",name,argv[i]);
 | 
			
		||||
			do_fp(out, buf,inp,separator, out_bin, sigkey, 
 | 
			
		||||
								sigbuf, siglen);
 | 
			
		||||
			if(!out_bin)
 | 
			
		||||
				{
 | 
			
		||||
				size_t len = strlen(name)+strlen(argv[i])+5;
 | 
			
		||||
				tmp=tofree=OPENSSL_malloc(len);
 | 
			
		||||
				BIO_snprintf(tmp,len,"%s(%s)= ",name,argv[i]);
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				tmp="";
 | 
			
		||||
			r=do_fp(out,buf,inp,separator,out_bin,sigkey,sigbuf,
 | 
			
		||||
				siglen,tmp,argv[i]);
 | 
			
		||||
			if(r)
 | 
			
		||||
			    err=r;
 | 
			
		||||
			if(tofree)
 | 
			
		||||
				OPENSSL_free(tofree);
 | 
			
		||||
			(void)BIO_reset(bmd);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
end:
 | 
			
		||||
	if (buf != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		memset(buf,0,BUFSIZE);
 | 
			
		||||
		OPENSSL_cleanse(buf,BUFSIZE);
 | 
			
		||||
		OPENSSL_free(buf);
 | 
			
		||||
		}
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
@@ -350,11 +374,12 @@ end:
 | 
			
		||||
	if(sigbuf) OPENSSL_free(sigbuf);
 | 
			
		||||
	if (bmd != NULL) BIO_free(bmd);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(err);
 | 
			
		||||
	OPENSSL_EXIT(err);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
			
		||||
			EVP_PKEY *key, unsigned char *sigin, int siglen)
 | 
			
		||||
int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
			
		||||
	  EVP_PKEY *key, unsigned char *sigin, int siglen, const char *title,
 | 
			
		||||
	  const char *file)
 | 
			
		||||
	{
 | 
			
		||||
	int len;
 | 
			
		||||
	int i;
 | 
			
		||||
@@ -362,21 +387,33 @@ void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		i=BIO_read(bp,(char *)buf,BUFSIZE);
 | 
			
		||||
		if (i <= 0) break;
 | 
			
		||||
		if(i < 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Read Error in %s\n",file);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			return 1;
 | 
			
		||||
			}
 | 
			
		||||
		if (i == 0) break;
 | 
			
		||||
		}
 | 
			
		||||
	if(sigin)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_MD_CTX *ctx;
 | 
			
		||||
		BIO_get_md_ctx(bp, &ctx);
 | 
			
		||||
		i = EVP_VerifyFinal(ctx, sigin, (unsigned int)siglen, key); 
 | 
			
		||||
		if(i > 0) BIO_printf(out, "Verified OK\n");
 | 
			
		||||
		else if(i == 0) BIO_printf(out, "Verification Failure\n");
 | 
			
		||||
		if(i > 0)
 | 
			
		||||
			BIO_printf(out, "Verified OK\n");
 | 
			
		||||
		else if(i == 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(out, "Verification Failure\n");
 | 
			
		||||
			return 1;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error Verifying Data\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			return 1;
 | 
			
		||||
			}
 | 
			
		||||
		return;
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
	if(key)
 | 
			
		||||
		{
 | 
			
		||||
@@ -386,7 +423,7 @@ void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error Signing Data\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			return;
 | 
			
		||||
			return 1;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
@@ -395,6 +432,7 @@ void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
			
		||||
	if(binout) BIO_write(out, buf, len);
 | 
			
		||||
	else 
 | 
			
		||||
		{
 | 
			
		||||
		BIO_write(out,title,strlen(title));
 | 
			
		||||
		for (i=0; i<len; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if (sep && (i != 0))
 | 
			
		||||
@@ -403,5 +441,6 @@ void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
			
		||||
			}
 | 
			
		||||
		BIO_printf(out, "\n");
 | 
			
		||||
		}
 | 
			
		||||
	return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								apps/dh.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								apps/dh.c
									
									
									
									
									
								
							@@ -87,12 +87,17 @@ 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,*engine;
 | 
			
		||||
	char *infile,*outfile,*prog;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
@@ -103,7 +108,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
@@ -134,11 +141,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			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)
 | 
			
		||||
@@ -170,13 +179,17 @@ bad:
 | 
			
		||||
		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();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
@@ -333,6 +346,6 @@ end:
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dh != NULL) DH_free(dh);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -142,13 +142,15 @@
 | 
			
		||||
 * -C
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static void MS_CALLBACK dh_cb(int p, int n, void *arg);
 | 
			
		||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	DH *dh=NULL;
 | 
			
		||||
	int i,badops=0,text=0;
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
@@ -157,7 +159,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat,check=0,noout=0,C=0,ret=1;
 | 
			
		||||
	char *infile,*outfile,*prog;
 | 
			
		||||
	char *inrand=NULL,*engine=NULL;
 | 
			
		||||
	char *inrand=NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int num = 0, g = 0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
@@ -199,11 +204,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			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)
 | 
			
		||||
@@ -249,7 +256,9 @@ bad:
 | 
			
		||||
		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");
 | 
			
		||||
@@ -259,7 +268,9 @@ bad:
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (g && !num)
 | 
			
		||||
		num = DEFBITS;
 | 
			
		||||
@@ -283,6 +294,8 @@ bad:
 | 
			
		||||
 | 
			
		||||
	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");
 | 
			
		||||
@@ -294,12 +307,13 @@ bad:
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
		if (dsaparam)
 | 
			
		||||
			{
 | 
			
		||||
			DSA *dsa;
 | 
			
		||||
			DSA *dsa = DSA_new();
 | 
			
		||||
			
 | 
			
		||||
			BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
 | 
			
		||||
			dsa = DSA_generate_parameters(num, NULL, 0, NULL, NULL, dh_cb, bio_err);
 | 
			
		||||
			if (dsa == NULL)
 | 
			
		||||
			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;
 | 
			
		||||
				}
 | 
			
		||||
@@ -315,12 +329,12 @@ bad:
 | 
			
		||||
		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");
 | 
			
		||||
			dh=DH_generate_parameters(num,g,dh_cb,bio_err);
 | 
			
		||||
			
 | 
			
		||||
			if (dh == NULL)
 | 
			
		||||
			if(!dh || !DH_generate_parameters_ex(dh, num, g, &cb))
 | 
			
		||||
				{
 | 
			
		||||
				if(dh) DH_free(dh);
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
@@ -519,11 +533,11 @@ end:
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dh != NULL) DH_free(dh);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/* dh_cb is identical to dsa_cb in apps/dsaparam.c */
 | 
			
		||||
static void MS_CALLBACK dh_cb(int p, int n, void *arg)
 | 
			
		||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
 | 
			
		||||
@@ -531,11 +545,12 @@ static void MS_CALLBACK dh_cb(int p, int n, void *arg)
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write((BIO *)arg,&c,1);
 | 
			
		||||
	(void)BIO_flush((BIO *)arg);
 | 
			
		||||
	BIO_write(cb->arg,&c,1);
 | 
			
		||||
	(void)BIO_flush(cb->arg);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								apps/dsa.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								apps/dsa.c
									
									
									
									
									
								
							@@ -90,7 +90,9 @@ int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	DSA *dsa=NULL;
 | 
			
		||||
	int i,badops=0;
 | 
			
		||||
@@ -98,7 +100,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat,text=0,noout=0;
 | 
			
		||||
	int pubin = 0, pubout = 0;
 | 
			
		||||
	char *infile,*outfile,*prog,*engine;
 | 
			
		||||
	char *infile,*outfile,*prog;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine;
 | 
			
		||||
#endif
 | 
			
		||||
	char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
	char *passin = NULL, *passout = NULL;
 | 
			
		||||
	int modulus=0;
 | 
			
		||||
@@ -112,7 +117,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
@@ -153,11 +160,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			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,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
@@ -189,7 +198,9 @@ bad:
 | 
			
		||||
		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
 | 
			
		||||
@@ -207,7 +218,9 @@ bad:
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#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");
 | 
			
		||||
@@ -314,6 +327,6 @@ end:
 | 
			
		||||
	if(passin) OPENSSL_free(passin);
 | 
			
		||||
	if(passout) OPENSSL_free(passout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -56,6 +56,12 @@
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code */
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
@@ -82,15 +88,31 @@
 | 
			
		||||
 * -C
 | 
			
		||||
 * -noout
 | 
			
		||||
 * -genkey
 | 
			
		||||
 *  #ifdef GENCB_TEST
 | 
			
		||||
 * -timebomb n  - interrupt keygen after <n> seconds
 | 
			
		||||
 *  #endif
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static void MS_CALLBACK dsa_cb(int p, int n, void *arg);
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
 | 
			
		||||
static int stop_keygen_flag = 0;
 | 
			
		||||
 | 
			
		||||
static void timebomb_sigalarm(int foo)
 | 
			
		||||
	{
 | 
			
		||||
	stop_keygen_flag = 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int 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;
 | 
			
		||||
@@ -98,7 +120,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	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();
 | 
			
		||||
 | 
			
		||||
@@ -139,11 +166,20 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			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)
 | 
			
		||||
@@ -186,12 +222,17 @@ bad:
 | 
			
		||||
		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 the key in text\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;
 | 
			
		||||
		}
 | 
			
		||||
@@ -235,7 +276,9 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (need_rand)
 | 
			
		||||
		{
 | 
			
		||||
@@ -247,10 +290,47 @@ bad:
 | 
			
		||||
 | 
			
		||||
	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");
 | 
			
		||||
	        dsa=DSA_generate_parameters(num,NULL,0,NULL,NULL, dsa_cb,bio_err);
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
		if(timebomb > 0)
 | 
			
		||||
	{
 | 
			
		||||
		struct sigaction act;
 | 
			
		||||
		act.sa_handler = timebomb_sigalarm;
 | 
			
		||||
		act.sa_flags = 0;
 | 
			
		||||
		BIO_printf(bio_err,"(though I'll stop it if not done within %d secs)\n",
 | 
			
		||||
				timebomb);
 | 
			
		||||
		if(sigaction(SIGALRM, &act, NULL) != 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"Error, couldn't set SIGALRM handler\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		alarm(timebomb);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
	        if(!DSA_generate_parameters_ex(dsa,num,NULL,0,NULL,NULL, &cb))
 | 
			
		||||
			{
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
			if(stop_keygen_flag)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"DSA key generation time-stopped\n");
 | 
			
		||||
				/* This is an asked-for behaviour! */
 | 
			
		||||
				ret = 0;
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
#endif
 | 
			
		||||
			BIO_printf(bio_err,"Error, DSA key generation failed\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else if	(informat == FORMAT_ASN1)
 | 
			
		||||
		dsa=d2i_DSAparams_bio(in,NULL);
 | 
			
		||||
@@ -372,10 +452,10 @@ end:
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dsa != NULL) DSA_free(dsa);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
 | 
			
		||||
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
 | 
			
		||||
@@ -383,10 +463,15 @@ static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write(arg,&c,1);
 | 
			
		||||
	(void)BIO_flush(arg);
 | 
			
		||||
	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;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										395
									
								
								apps/ec.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										395
									
								
								apps/ec.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,395 @@
 | 
			
		||||
/* apps/ec.c */
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Nils Larsch for the OpenSSL project.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
 *    the documentation and/or other materials provided with the
 | 
			
		||||
 *    distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this
 | 
			
		||||
 *    software must display the following acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
			
		||||
 *    endorse or promote products derived from this software without
 | 
			
		||||
 *    prior written permission. For written permission, please contact
 | 
			
		||||
 *    openssl-core@openssl.org.
 | 
			
		||||
 *
 | 
			
		||||
 * 5. Products derived from this software may not be called "OpenSSL"
 | 
			
		||||
 *    nor may "OpenSSL" appear in their names without prior written
 | 
			
		||||
 *    permission of the OpenSSL Project.
 | 
			
		||||
 *
 | 
			
		||||
 * 6. Redistributions of any form whatsoever must retain the following
 | 
			
		||||
 *    acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
			
		||||
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
			
		||||
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
			
		||||
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
			
		||||
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 * ====================================================================
 | 
			
		||||
 *
 | 
			
		||||
 * This product includes cryptographic software written by Eric Young
 | 
			
		||||
 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_EC
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	ec_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg    - input format - default PEM (one of DER, NET or PEM)
 | 
			
		||||
 * -outform arg   - output format - default PEM
 | 
			
		||||
 * -in arg        - input file - default stdin
 | 
			
		||||
 * -out arg       - output file - default stdout
 | 
			
		||||
 * -des           - encrypt output if PEM format with DES in cbc mode
 | 
			
		||||
 * -text          - print a text version
 | 
			
		||||
 * -param_out     - print the elliptic curve parameters
 | 
			
		||||
 * -conv_form arg - specifies the point encoding form
 | 
			
		||||
 * -param_enc arg - specifies the parameter encoding
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	ENGINE 	*e = NULL;
 | 
			
		||||
	int 	ret = 1;
 | 
			
		||||
	EC_KEY 	*eckey = 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, param_out = 0;
 | 
			
		||||
	char 	*infile, *outfile, *prog, *engine;
 | 
			
		||||
	char 	*passargin = NULL, *passargout = NULL;
 | 
			
		||||
	char 	*passin = NULL, *passout = NULL;
 | 
			
		||||
	point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
 | 
			
		||||
	int	new_form = 0;
 | 
			
		||||
	int	asn1_flag = OPENSSL_EC_NAMED_CURVE;
 | 
			
		||||
	int 	new_asn1_flag = 0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	engine = NULL;
 | 
			
		||||
	infile = NULL;
 | 
			
		||||
	outfile = NULL;
 | 
			
		||||
	informat = FORMAT_PEM;
 | 
			
		||||
	outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog = argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if (strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
			noout = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
			text = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-conv_form") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
			new_form = 1;
 | 
			
		||||
			if (strcmp(*argv, "compressed") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_COMPRESSED;
 | 
			
		||||
			else if (strcmp(*argv, "uncompressed") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_UNCOMPRESSED;
 | 
			
		||||
			else if (strcmp(*argv, "hybrid") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_HYBRID;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-param_enc") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
			new_asn1_flag = 1;
 | 
			
		||||
			if (strcmp(*argv, "named_curve") == 0)
 | 
			
		||||
				asn1_flag = OPENSSL_EC_NAMED_CURVE;
 | 
			
		||||
			else if (strcmp(*argv, "explicit") == 0)
 | 
			
		||||
				asn1_flag = 0;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-param_out") == 0)
 | 
			
		||||
			param_out = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-pubin") == 0)
 | 
			
		||||
			pubin=1;
 | 
			
		||||
		else if (strcmp(*argv, "-pubout") == 0)
 | 
			
		||||
			pubout=1;
 | 
			
		||||
		else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
		BIO_printf(bio_err, " -inform arg     input format - "
 | 
			
		||||
				"DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err, " -outform arg    output format - "
 | 
			
		||||
				"DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err, " -in arg         input file\n");
 | 
			
		||||
		BIO_printf(bio_err, " -passin arg     input file pass "
 | 
			
		||||
				"phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err, " -out arg        output file\n");
 | 
			
		||||
		BIO_printf(bio_err, " -passout arg    output file pass "
 | 
			
		||||
				"phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err, " -engine e       use engine e, "
 | 
			
		||||
				"possibly a hardware device.\n");
 | 
			
		||||
		BIO_printf(bio_err, " -des            encrypt PEM output, "
 | 
			
		||||
				"instead of 'des' every other \n"
 | 
			
		||||
				"                 cipher "
 | 
			
		||||
				"supported by OpenSSL can be used\n");
 | 
			
		||||
		BIO_printf(bio_err, " -text           print the key\n");
 | 
			
		||||
		BIO_printf(bio_err, " -noout          don't print key out\n");
 | 
			
		||||
		BIO_printf(bio_err, " -param_out      print the elliptic "
 | 
			
		||||
				"curve parameters\n");
 | 
			
		||||
		BIO_printf(bio_err, " -conv_form arg  specifies the "
 | 
			
		||||
				"point conversion form \n");
 | 
			
		||||
		BIO_printf(bio_err, "                 possible values:"
 | 
			
		||||
				" compressed\n");
 | 
			
		||||
		BIO_printf(bio_err, "                                 "
 | 
			
		||||
				" uncompressed (default)\n");
 | 
			
		||||
		BIO_printf(bio_err, "                                  "
 | 
			
		||||
				" hybrid\n");
 | 
			
		||||
		BIO_printf(bio_err, " -param_enc arg  specifies the way"
 | 
			
		||||
				" the ec parameters are encoded\n");
 | 
			
		||||
		BIO_printf(bio_err, "                 in the asn1 der "
 | 
			
		||||
				"encoding\n");
 | 
			
		||||
		BIO_printf(bio_err, "                 possilbe values:"
 | 
			
		||||
				" named_curve (default)\n");
 | 
			
		||||
		BIO_printf(bio_err,"                                  "
 | 
			
		||||
				"explicit\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) 
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	in = BIO_new(BIO_s_file());
 | 
			
		||||
	out = BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in, infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err, "read EC key\n");
 | 
			
		||||
	if (informat == FORMAT_ASN1) 
 | 
			
		||||
		{
 | 
			
		||||
		if (pubin) 
 | 
			
		||||
			eckey = d2i_EC_PUBKEY_bio(in, NULL);
 | 
			
		||||
		else 
 | 
			
		||||
			eckey = d2i_ECPrivateKey_bio(in, NULL);
 | 
			
		||||
		} 
 | 
			
		||||
	else if (informat == FORMAT_PEM) 
 | 
			
		||||
		{
 | 
			
		||||
		if (pubin) 
 | 
			
		||||
			eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL, 
 | 
			
		||||
				NULL);
 | 
			
		||||
		else 
 | 
			
		||||
			eckey = PEM_read_bio_ECPrivateKey(in, NULL, NULL,
 | 
			
		||||
				passin);
 | 
			
		||||
		} 
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "bad input format specified for key\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (eckey == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load Key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out, outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (new_form)
 | 
			
		||||
		{
 | 
			
		||||
		EC_GROUP_set_point_conversion_form(eckey->group, form);
 | 
			
		||||
		eckey->conv_form = form;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (new_asn1_flag)
 | 
			
		||||
		EC_GROUP_set_asn1_flag(eckey->group, asn1_flag);
 | 
			
		||||
 | 
			
		||||
	if (text) 
 | 
			
		||||
		if (!EC_KEY_print(out, eckey, 0))
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
	if (noout) 
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err, "writing EC key\n");
 | 
			
		||||
	if (outformat == FORMAT_ASN1) 
 | 
			
		||||
		{
 | 
			
		||||
		if (param_out)
 | 
			
		||||
			i = i2d_ECPKParameters_bio(out, eckey->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, eckey->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);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										445
									
								
								apps/ecdsa.c
									
									
									
									
									
								
							
							
						
						
									
										445
									
								
								apps/ecdsa.c
									
									
									
									
									
								
							@@ -1,445 +0,0 @@
 | 
			
		||||
/* apps/ecdsa.c */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
 *    the documentation and/or other materials provided with the
 | 
			
		||||
 *    distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this
 | 
			
		||||
 *    software must display the following acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
			
		||||
 *    endorse or promote products derived from this software without
 | 
			
		||||
 *    prior written permission. For written permission, please contact
 | 
			
		||||
 *    openssl-core@openssl.org.
 | 
			
		||||
 *
 | 
			
		||||
 * 5. Products derived from this software may not be called "OpenSSL"
 | 
			
		||||
 *    nor may "OpenSSL" appear in their names without prior written
 | 
			
		||||
 *    permission of the OpenSSL Project.
 | 
			
		||||
 *
 | 
			
		||||
 * 6. Redistributions of any form whatsoever must retain the following
 | 
			
		||||
 *    acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
			
		||||
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
			
		||||
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
			
		||||
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
			
		||||
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 * ====================================================================
 | 
			
		||||
 *
 | 
			
		||||
 * This product includes cryptographic software written by Eric Young
 | 
			
		||||
 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * 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:
 | 
			
		||||
 * 1. Redistributions of source code must retain the 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 acknowledgement:
 | 
			
		||||
 *    "This product includes cryptographic software written by
 | 
			
		||||
 *     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 
 | 
			
		||||
 *    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
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR 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.
 | 
			
		||||
 * 
 | 
			
		||||
 * 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.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
#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/ecdsa.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	ecdsa_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (one of DER, NET or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
 * -des		- encrypt output if PEM format with DES in cbc mode
 | 
			
		||||
 * -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
 | 
			
		||||
 * -text	- print a text version
 | 
			
		||||
 * -pub		- print the ECDSA public key
 | 
			
		||||
 * -compressed  - print the public key in compressed form ( default )   
 | 
			
		||||
 * -hybrid 	- print the public key in hybrid form
 | 
			
		||||
 * -uncompressed - print the public key in uncompressed form
 | 
			
		||||
 *		  the last three options ( compressed, hybrid and uncompressed )
 | 
			
		||||
 *		  are only used if the "-pub" option is also selected.
 | 
			
		||||
 *	  	  For a precise description of the the meaning of compressed,
 | 
			
		||||
 *		  hybrid and uncompressed please refer to the X9.62 standart.
 | 
			
		||||
 *		  All three forms represents ways to express the ecdsa public
 | 
			
		||||
 *		  key ( a point on a elliptic curve ) as octet string. Let len be
 | 
			
		||||
 *		  the length ( in bytes ) of an element of the field over which
 | 
			
		||||
 *		  the curve is defined, then a compressed octet string has the form
 | 
			
		||||
 *		  0x02 + result of BN_bn2bin() of the x coordinate of the public key
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	ENGINE 	*e = NULL;
 | 
			
		||||
	int 	ret = 1;
 | 
			
		||||
	ECDSA 	*ecdsa = 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, *engine;
 | 
			
		||||
	char 	*passargin = NULL, *passargout = NULL;
 | 
			
		||||
	char 	*passin = NULL, *passout = NULL;
 | 
			
		||||
	int 	pub = 0, point_form = 0;
 | 
			
		||||
	unsigned char *buffer = NULL;
 | 
			
		||||
	unsigned int  buf_len = 0;
 | 
			
		||||
	BIGNUM	*tmp_bn = NULL;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	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, "-pub") == 0)
 | 
			
		||||
		{
 | 
			
		||||
			pub = 1;
 | 
			
		||||
			buffer = (unsigned char *)(*(argv+1));
 | 
			
		||||
			if (strcmp((char *)buffer, "compressed") == 0)
 | 
			
		||||
				point_form = POINT_CONVERSION_COMPRESSED;
 | 
			
		||||
			else if (strcmp((char *)buffer, "hybrid") == 0)
 | 
			
		||||
				point_form = POINT_CONVERSION_HYBRID;
 | 
			
		||||
			else if (strcmp((char *)buffer, "uncompressed") == 0)
 | 
			
		||||
				point_form = POINT_CONVERSION_UNCOMPRESSED;
 | 
			
		||||
			if (point_form)
 | 
			
		||||
			{
 | 
			
		||||
				argc--;
 | 
			
		||||
				argv++;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		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 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
 | 
			
		||||
		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, " -pub [compressed | hybrid | uncompressed] \n");
 | 
			
		||||
		BIO_printf(bio_err, "         compressed     print the public key in compressed form ( default )\n");   
 | 
			
		||||
		BIO_printf(bio_err, "         hybrid         print the public key in hybrid form\n");
 | 
			
		||||
 		BIO_printf(bio_err, "         uncompressed   print the public key in uncompressed form\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) 
 | 
			
		||||
	{
 | 
			
		||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	in = BIO_new(BIO_s_file());
 | 
			
		||||
	out = BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
	{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
		{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err,"read ECDSA key\n");
 | 
			
		||||
	if (informat == FORMAT_ASN1) 
 | 
			
		||||
	{
 | 
			
		||||
		if (pubin) 
 | 
			
		||||
			ecdsa = d2i_ECDSA_PUBKEY_bio(in, NULL);
 | 
			
		||||
		else 
 | 
			
		||||
			ecdsa = d2i_ECDSAPrivateKey_bio(in, NULL);
 | 
			
		||||
	} else if (informat == FORMAT_PEM) 
 | 
			
		||||
	{
 | 
			
		||||
		if (pubin) 
 | 
			
		||||
			ecdsa = PEM_read_bio_ECDSA_PUBKEY(in, NULL, NULL, NULL);
 | 
			
		||||
		else 
 | 
			
		||||
			ecdsa = PEM_read_bio_ECDSAPrivateKey(in, NULL, NULL, passin);
 | 
			
		||||
	} else
 | 
			
		||||
	{
 | 
			
		||||
		BIO_printf(bio_err, "bad input format specified for key\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
	if (ecdsa == 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 (text) 
 | 
			
		||||
		if (!ECDSA_print(out, ecdsa, 0))
 | 
			
		||||
		{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (pub)
 | 
			
		||||
	{
 | 
			
		||||
		fprintf(stdout, "Public Key (");
 | 
			
		||||
		if (point_form == POINT_CONVERSION_COMPRESSED)
 | 
			
		||||
			fprintf(stdout, "COMPRESSED");
 | 
			
		||||
		else if (point_form == POINT_CONVERSION_UNCOMPRESSED)
 | 
			
		||||
			fprintf(stdout, "UNCOMPRESSED");
 | 
			
		||||
		else if (point_form == POINT_CONVERSION_HYBRID)
 | 
			
		||||
			fprintf(stdout, "HYBRID");
 | 
			
		||||
		fprintf(stdout, ")=");
 | 
			
		||||
		buf_len = EC_POINT_point2oct(ecdsa->group, EC_GROUP_get0_generator(ecdsa->group),
 | 
			
		||||
					     point_form, NULL, 0, NULL);
 | 
			
		||||
		if (!buf_len)
 | 
			
		||||
		{
 | 
			
		||||
			BIO_printf(bio_err,"invalid public key length\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		if ((tmp_bn = BN_new()) == NULL ||
 | 
			
		||||
		    (buffer = OPENSSL_malloc(buf_len)) == NULL) goto end;
 | 
			
		||||
		if (!EC_POINT_point2oct(ecdsa->group, EC_GROUP_get0_generator(ecdsa->group),
 | 
			
		||||
					     point_form, buffer, buf_len, NULL) ||
 | 
			
		||||
		    !BN_bin2bn(buffer, buf_len, tmp_bn))
 | 
			
		||||
		{
 | 
			
		||||
			BIO_printf(bio_err,"can not encode public key\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			OPENSSL_free(buffer);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		BN_print(out, tmp_bn);
 | 
			
		||||
		fprintf(stdout,"\n");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (noout) 
 | 
			
		||||
		goto end;
 | 
			
		||||
	BIO_printf(bio_err, "writing ECDSA key\n");
 | 
			
		||||
	if (outformat == FORMAT_ASN1) 
 | 
			
		||||
	{
 | 
			
		||||
		if(pubin || pubout) 
 | 
			
		||||
			i = i2d_ECDSA_PUBKEY_bio(out, ecdsa);
 | 
			
		||||
		else 
 | 
			
		||||
			i = i2d_ECDSAPrivateKey_bio(out, ecdsa);
 | 
			
		||||
	} else if (outformat == FORMAT_PEM) 
 | 
			
		||||
	{
 | 
			
		||||
		if(pubin || pubout)
 | 
			
		||||
			i = PEM_write_bio_ECDSA_PUBKEY(out, ecdsa);
 | 
			
		||||
		else 
 | 
			
		||||
			i = PEM_write_bio_ECDSAPrivateKey(out, ecdsa, 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 (ecdsa) 	ECDSA_free(ecdsa);
 | 
			
		||||
	if (tmp_bn)	BN_free(tmp_bn);
 | 
			
		||||
	if (passin) 	OPENSSL_free(passin);
 | 
			
		||||
	if (passout) 	OPENSSL_free(passout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1,660 +0,0 @@
 | 
			
		||||
/* apps/ecdsaparam.c */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
 *    the documentation and/or other materials provided with the
 | 
			
		||||
 *    distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this
 | 
			
		||||
 *    software must display the following acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
			
		||||
 *    endorse or promote products derived from this software without
 | 
			
		||||
 *    prior written permission. For written permission, please contact
 | 
			
		||||
 *    openssl-core@openssl.org.
 | 
			
		||||
 *
 | 
			
		||||
 * 5. Products derived from this software may not be called "OpenSSL"
 | 
			
		||||
 *    nor may "OpenSSL" appear in their names without prior written
 | 
			
		||||
 *    permission of the OpenSSL Project.
 | 
			
		||||
 *
 | 
			
		||||
 * 6. Redistributions of any form whatsoever must retain the following
 | 
			
		||||
 *    acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
			
		||||
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
			
		||||
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
			
		||||
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
			
		||||
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 * ====================================================================
 | 
			
		||||
 *
 | 
			
		||||
 * This product includes cryptographic software written by Eric Young
 | 
			
		||||
 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * 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:
 | 
			
		||||
 * 1. Redistributions of source code must retain the 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 acknowledgement:
 | 
			
		||||
 *    "This product includes cryptographic software written by
 | 
			
		||||
 *     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 
 | 
			
		||||
 *    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
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR 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.
 | 
			
		||||
 * 
 | 
			
		||||
 * 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.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/ec.h>
 | 
			
		||||
#include <openssl/ecdsa.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	ecdsaparam_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg	  	- input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg 	- output format - default PEM
 | 
			
		||||
 * -in arg		- input file  - default stdin
 | 
			
		||||
 * -out arg		- output file - default stdout
 | 
			
		||||
 * -noout
 | 
			
		||||
 * -text
 | 
			
		||||
 * -check               - validate the ec parameters
 | 
			
		||||
 * -C
 | 
			
		||||
 * -noout
 | 
			
		||||
 * -genkey		- generate a private public keypair based on the supplied curve
 | 
			
		||||
 * -named_curve		- use the curve oid instead of the parameters
 | 
			
		||||
 * -NIST_192		- use the NIST recommended curve parameters over a 192 bit prime field
 | 
			
		||||
 * -NIST_224		- use the NIST recommended curve parameters over a 224 bit prime field
 | 
			
		||||
 * -NIST_256		- use the NIST recommended curve parameters over a 256 bit prime field
 | 
			
		||||
 * -NIST_384		- use the NIST recommended curve parameters over a 384 bit prime field
 | 
			
		||||
 * -NIST_521		- use the NIST recommended curve parameters over a 521 bit prime field
 | 
			
		||||
 * -X9_62_192v1		- use the X9_62 192v1 example curve over a 192 bit prime field
 | 
			
		||||
 * -X9_62_192v2		- use the X9_62 192v2 example curve over a 192 bit prime field
 | 
			
		||||
 * -X9_62_192v3		- use the X9_62 192v3 example curve over a 192 bit prime field
 | 
			
		||||
 * -X9_62_239v1		- use the X9_62 239v1 example curve over a 239 bit prime field
 | 
			
		||||
 * -X9_62_239v2		- use the X9_62 239v2 example curve over a 239 bit prime field
 | 
			
		||||
 * -X9_62_239v3		- use the X9_62 239v3 example curve over a 239 bit prime field
 | 
			
		||||
 * -X9_62_256v1		- use the X9_62 239v1 example curve over a 256 bit prime field
 | 
			
		||||
 * -SECG_PRIME_112R1    - use the SECG 112r1 recommended curve over a 112 bit prime field
 | 
			
		||||
 * -SECG_PRIME_112R2    - use the SECG 112r2 recommended curve over a 112 bit prime field
 | 
			
		||||
 * -SECG_PRIME_128R1    - use the SECG 128r1 recommended curve over a 128 bit prime field
 | 
			
		||||
 * -SECG_PRIME_128R2    - use the SECG 128r2 recommended curve over a 128 bit prime field
 | 
			
		||||
 * -SECG_PRIME_160K1    - use the SECG 160k1 recommended curve over a 160 bit prime field
 | 
			
		||||
 * -SECG_PRIME_160R1    - use the SECG 160r1 recommended curve over a 160 bit prime field
 | 
			
		||||
 * -SECG_PRIME_160R2    - use the SECG 160r2 recommended curve over a 160 bit prime field
 | 
			
		||||
 * -SECG_PRIME_192K1    - use the SECG 192k1 recommended curve over a 192 bit prime field
 | 
			
		||||
 * -SECG_PRIME_192R1    - use the SECG 192r1 recommended curve over a 192 bit prime field
 | 
			
		||||
 * -SECG_PRIME_224K1    - use the SECG 224k1 recommended curve over a 224 bit prime field
 | 
			
		||||
 * -SECG_PRIME_224R1    - use the SECG 224r1 recommended curve over a 224 bit prime field
 | 
			
		||||
 * -SECG_PRIME_256K1    - use the SECG 256k1 recommended curve over a 256 bit prime field
 | 
			
		||||
 * -SECG_PRIME_256R1    - use the SECG 256r1 recommended curve over a 256 bit prime field
 | 
			
		||||
 * -SECG_PRIME_384R1    - use the SECG 384r1 recommended curve over a 384 bit prime field
 | 
			
		||||
 * -SECG_PRIME_521R1    - use the SECG 521r1 recommended curve over a 521 bit prime field
 | 
			
		||||
 * -WTLS_6              - use the WAP/WTLS recommended curve number 6 over a 112 bit field
 | 
			
		||||
 * -WTLS_8              - use the WAP/WTLS recommended curve number 8 over a 112 bit field
 | 
			
		||||
 * -WTLS_9              - use the WAP/WTLS recommended curve number 9 over a 160 bit field
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	ENGINE 	*e = NULL;
 | 
			
		||||
	ECDSA 	*ecdsa = 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 	genkey = 0;
 | 
			
		||||
	int	check = 0;
 | 
			
		||||
	int 	need_rand = 0;
 | 
			
		||||
	char 	*engine=NULL;
 | 
			
		||||
	int	curve_type = EC_GROUP_NO_CURVE;
 | 
			
		||||
	int	named_curve = 0;
 | 
			
		||||
	BIGNUM	*tmp_1 = NULL, *tmp_2 = NULL, *tmp_3 = NULL, *tmp_4 = NULL, *tmp_5 = NULL,
 | 
			
		||||
		*tmp_6 = NULL, *tmp_7 = NULL;
 | 
			
		||||
	BN_CTX	*ctx = NULL;
 | 
			
		||||
	EC_POINT *point = NULL;
 | 
			
		||||
	unsigned char *data = NULL;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	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, "-engine") == 0)
 | 
			
		||||
		{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine = *(++argv);
 | 
			
		||||
		}
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-C") == 0)
 | 
			
		||||
			C = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-check") == 0)
 | 
			
		||||
			check = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-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, "-named_curve") == 0)
 | 
			
		||||
			named_curve = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-NIST_192") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_NIST_PRIME_192;
 | 
			
		||||
		else if (strcmp(*argv, "-NIST_224") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_NIST_PRIME_224;
 | 
			
		||||
		else if (strcmp(*argv, "-NIST_256") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_NIST_PRIME_256;
 | 
			
		||||
		else if (strcmp(*argv, "-NIST_384") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_NIST_PRIME_384;
 | 
			
		||||
		else if (strcmp(*argv, "-NIST_521") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_NIST_PRIME_521;
 | 
			
		||||
		else if (strcmp(*argv, "-X9_62_192v1") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_X9_62_PRIME_192V1;
 | 
			
		||||
		else if (strcmp(*argv, "-X9_62_192v2") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_X9_62_PRIME_192V2;
 | 
			
		||||
		else if (strcmp(*argv, "-X9_62_192v3") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_X9_62_PRIME_192V3;
 | 
			
		||||
		else if (strcmp(*argv, "-X9_62_239v1") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_X9_62_PRIME_239V1;
 | 
			
		||||
		else if (strcmp(*argv, "-X9_62_239v2") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_X9_62_PRIME_239V2;
 | 
			
		||||
		else if (strcmp(*argv, "-X9_62_239v3") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_X9_62_PRIME_239V3;
 | 
			
		||||
		else if (strcmp(*argv, "-X9_62_256v1") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_X9_62_PRIME_256V1;
 | 
			
		||||
		else if (strcmp(*argv, "-SECG_PRIME_112R1") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_SECG_PRIME_112R1;
 | 
			
		||||
		else if (strcmp(*argv, "-SECG_PRIME_112R2") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_SECG_PRIME_112R2;
 | 
			
		||||
		else if (strcmp(*argv, "-SECG_PRIME_128R1") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_SECG_PRIME_128R1;
 | 
			
		||||
		else if (strcmp(*argv, "-SECG_PRIME_128R2") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_SECG_PRIME_128R2;
 | 
			
		||||
		else if (strcmp(*argv, "-SECG_PRIME_160K1") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_SECG_PRIME_160K1;
 | 
			
		||||
		else if (strcmp(*argv, "-SECG_PRIME_160R1") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_SECG_PRIME_160R1;
 | 
			
		||||
		else if (strcmp(*argv, "-SECG_PRIME_160R2") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_SECG_PRIME_160R2;
 | 
			
		||||
		else if (strcmp(*argv, "-SECG_PRIME_192K1") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_SECG_PRIME_192K1;
 | 
			
		||||
		else if (strcmp(*argv, "-SECG_PRIME_192R1") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_SECG_PRIME_192R1;
 | 
			
		||||
		else if (strcmp(*argv, "-SECG_PRIME_224K1") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_SECG_PRIME_224K1;
 | 
			
		||||
		else if (strcmp(*argv, "-SECG_PRIME_224R1") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_SECG_PRIME_224R1;
 | 
			
		||||
		else if (strcmp(*argv, "-SECG_PRIME_256K1") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_SECG_PRIME_256K1;
 | 
			
		||||
		else if (strcmp(*argv, "-SECG_PRIME_256R1") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_SECG_PRIME_256R1;
 | 
			
		||||
		else if (strcmp(*argv, "-SECG_PRIME_384R1") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_SECG_PRIME_384R1;
 | 
			
		||||
		else if (strcmp(*argv, "-SECG_PRIME_521R1") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_SECG_PRIME_521R1;
 | 
			
		||||
		else if (strcmp(*argv, "-WTLS_6") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_WTLS_6;
 | 
			
		||||
		else if (strcmp(*argv, "-WTLS_8") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_WTLS_8;
 | 
			
		||||
		else if (strcmp(*argv, "-WTLS_9") == 0)
 | 
			
		||||
			curve_type = EC_GROUP_WTLS_9;
 | 
			
		||||
		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] [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 the key in text\n");
 | 
			
		||||
		BIO_printf(bio_err," -C                 Output C code\n");
 | 
			
		||||
		BIO_printf(bio_err," -check             validate the ec parameters\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout             no output\n");
 | 
			
		||||
		BIO_printf(bio_err," -rand              files to use for random number input\n");
 | 
			
		||||
		BIO_printf(bio_err," -engine e          use engine e, possibly a hardware device.\n");
 | 
			
		||||
		BIO_printf(bio_err," -named_curve       use the curve oid instead of the parameters\n");
 | 
			
		||||
		BIO_printf(bio_err," -NIST_192          use the NIST recommended curve parameters over a 192 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -NIST_224          use the NIST recommended curve parameters over a 224 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -NIST_256          use the NIST recommended curve parameters over a 256 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -NIST_384          use the NIST recommended curve parameters over a 384 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -NIST_521          use the NIST recommended curve parameters over a 521 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -X9_62_192v1       use the X9_62 192v1 example curve over a 192 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -X9_62_192v2       use the X9_62 192v2 example curve over a 192 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -X9_62_192v3       use the X9_62 192v3 example curve over a 192 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -X9_62_239v1       use the X9_62 239v1 example curve over a 239 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -X9_62_239v2       use the X9_62 239v2 example curve over a 239 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -X9_62_239v3       use the X9_62 239v3 example curve over a 239 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -X9_62_256v1       use the X9_62 239v1 example curve over a 256 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -SECG_PRIME_112R1  use the SECG 112r1 recommended curve over a 112 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -SECG_PRIME_112R2  use the SECG 112r2 recommended curve over a 112 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -SECG_PRIME_128R1  use the SECG 128r1 recommended curve over a 128 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -SECG_PRIME_128R2  use the SECG 128r2 recommended curve over a 128 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -SECG_PRIME_160K1  use the SECG 160k1 recommended curve over a 160 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -SECG_PRIME_160R1  use the SECG 160r1 recommended curve over a 160 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -SECG_PRIME_160R2  use the SECG 160r2 recommended curve over a 160 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -SECG_PRIME_192K1  use the SECG 192k1 recommended curve over a 192 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -SECG_PRIME_192R1  use the SECG 192r1 recommended curve over a 192 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -SECG_PRIME_224K1  use the SECG 224k1 recommended curve over a 224 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -SECG_PRIME_224R1  use the SECG 224r1 recommended curve over a 224 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -SECG_PRIME_256K1  use the SECG 256k1 recommended curve over a 256 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -SECG_PRIME_256R1  use the SECG 256r1 recommended curve over a 256 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -SECG_PRIME_384R1  use the SECG 384r1 recommended curve over a 384 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -SECG_PRIME_521R1  use the SECG 521r1 recommended curve over a 521 bit prime field\n");
 | 
			
		||||
		BIO_printf(bio_err," -WTLS_6            use the WAP/WTLS recommended curve number 6 over a 112 bit field\n");
 | 
			
		||||
		BIO_printf(bio_err," -WTLS_8            use the WAP/WTLS recommended curve number 8 over a 112 bit field\n");
 | 
			
		||||
		BIO_printf(bio_err," -WTLS_9            use the WAP/WTLS recommended curve number 9 over a 112 bit field\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
	{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
		{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
	{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
		{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
 | 
			
		||||
	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 (curve_type != EC_GROUP_NO_CURVE)
 | 
			
		||||
	{
 | 
			
		||||
		if ((ecdsa = ECDSA_new()) == NULL)
 | 
			
		||||
			goto end;
 | 
			
		||||
		ecdsa->group = EC_GROUP_new_by_name(curve_type);
 | 
			
		||||
		if (named_curve)
 | 
			
		||||
			ECDSA_set_parameter_flags(ecdsa, ECDSA_FLAG_NAMED_CURVE);
 | 
			
		||||
	}
 | 
			
		||||
	else if (informat == FORMAT_ASN1)
 | 
			
		||||
		ecdsa = d2i_ECDSAParameters_bio(in,NULL);
 | 
			
		||||
	else if (informat == FORMAT_PEM)
 | 
			
		||||
		ecdsa = PEM_read_bio_ECDSAParameters(in, NULL, NULL, NULL);
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		BIO_printf(bio_err, "bad input format specified\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
	if (ecdsa == NULL)
 | 
			
		||||
	{
 | 
			
		||||
		BIO_printf(bio_err, "unable to load ECDSA parameters\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAParameters_print(out, ecdsa);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check)
 | 
			
		||||
	{
 | 
			
		||||
		if (ecdsa == NULL)
 | 
			
		||||
			BIO_printf(bio_err, "no elliptic curve parameters\n");
 | 
			
		||||
		BIO_printf(bio_err, "checking elliptic curve parameters: ");
 | 
			
		||||
		if (!EC_GROUP_check(ecdsa->group, NULL))
 | 
			
		||||
		{
 | 
			
		||||
			BIO_printf(bio_err, "failed\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
			BIO_printf(bio_err, "ok\n");
 | 
			
		||||
			
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (C)
 | 
			
		||||
	{	/* TODO: characteristic two */
 | 
			
		||||
		int 	l, len, bits_p;
 | 
			
		||||
		if ((tmp_1 = BN_new()) == NULL || (tmp_2 = BN_new()) == NULL ||
 | 
			
		||||
		    (tmp_3 = BN_new()) == NULL || (tmp_4 = BN_new()) == NULL ||
 | 
			
		||||
		    (tmp_5 = BN_new()) == NULL || (tmp_6 = BN_new()) == NULL ||
 | 
			
		||||
                    (tmp_7 = BN_new()) == NULL || (ctx = BN_CTX_new()) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		if (!EC_GROUP_get_curve_GFp(ecdsa->group, tmp_1, tmp_2, tmp_3, ctx))
 | 
			
		||||
			goto end;
 | 
			
		||||
		if ((point = EC_GROUP_get0_generator(ecdsa->group)) == NULL)
 | 
			
		||||
			goto end;
 | 
			
		||||
		if (!EC_POINT_get_affine_coordinates_GFp(ecdsa->group, point, tmp_4, tmp_5, ctx))
 | 
			
		||||
			goto end;
 | 
			
		||||
		if (!EC_GROUP_get_order(ecdsa->group, tmp_6, ctx))
 | 
			
		||||
			goto end;
 | 
			
		||||
		if (!EC_GROUP_get_cofactor(ecdsa->group, tmp_7, ctx))
 | 
			
		||||
			goto end;
 | 
			
		||||
		
 | 
			
		||||
		len    = BN_num_bytes(tmp_1);
 | 
			
		||||
		bits_p = BN_num_bits(tmp_1);
 | 
			
		||||
		data=(unsigned char *)OPENSSL_malloc(len+20);
 | 
			
		||||
		if (data == NULL)
 | 
			
		||||
		{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		l = BN_bn2bin(tmp_1, data);
 | 
			
		||||
		printf("static unsigned char ecdsa%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\n");
 | 
			
		||||
 | 
			
		||||
		l = BN_bn2bin(tmp_2, data);
 | 
			
		||||
		printf("static unsigned char ecdsa%d_a[]={",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(tmp_3, data);
 | 
			
		||||
		printf("static unsigned char ecdsa%d_b[]={", 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(tmp_4, data);
 | 
			
		||||
		printf("static unsigned char ecdsa%d_x[]={", 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(tmp_5, data);
 | 
			
		||||
		printf("static unsigned char ecdsa%d_y[]={", 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(tmp_6, data);
 | 
			
		||||
		printf("static unsigned char ecdsa%d_o[]={", 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(tmp_7, data);
 | 
			
		||||
		printf("static unsigned char ecdsa%d_c[]={", 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");
 | 
			
		||||
 | 
			
		||||
		/* FIXME:
 | 
			
		||||
		 * generated code should check for errors
 | 
			
		||||
		 */
 | 
			
		||||
 | 
			
		||||
		printf("ECDSA *get_ecdsa%d(void)\n\t{\n",bits_p);
 | 
			
		||||
		printf("\tint ok=0;\n");
 | 
			
		||||
		printf("\tECDSA    *ecdsa=NULL;\n");
 | 
			
		||||
		printf("\tEC_POINT *point=NULL;\n");
 | 
			
		||||
		printf("\tBIGNUM   *tmp_1=NULL,*tmp_2=NULL,*tmp_3=NULL;\n\n");
 | 
			
		||||
		printf("\tif ((ecdsa=ECDSA_new()) == NULL)\n");
 | 
			
		||||
		printf("\t\treturn(NULL);\n\n");
 | 
			
		||||
		printf("\t/* generate EC_GROUP structure */\n");
 | 
			
		||||
		printf("\tif ((tmp_1 = BN_bin2bn(ecdsa%d_p, sizeof(ecdsa%d_p), NULL)) == NULL) goto err;\n", bits_p, bits_p);
 | 
			
		||||
		printf("\tif ((tmp_2 = BN_bin2bn(ecdsa%d_a, sizeof(ecdsa%d_a), NULL)) == NULL) goto err;\n", bits_p, bits_p);
 | 
			
		||||
		printf("\tif ((tmp_3 = BN_bin2bn(ecdsa%d_b, sizeof(ecdsa%d_b), NULL)) == NULL) goto err;\n", bits_p, bits_p);
 | 
			
		||||
		printf("\tif ((ecdsa->group = EC_GROUP_new_curve_GFp(tmp_1, tmp_2, tmp_3, NULL)) == NULL) goto err;\n\n");
 | 
			
		||||
		printf("\t/* build generator */\n");
 | 
			
		||||
		printf("\tif (!BN_bin2bn(ecdsa%d_x, sizeof(ecdsa%d_x), tmp_1)) goto err;\n", bits_p, bits_p);
 | 
			
		||||
		printf("\tif (!BN_bin2bn(ecdsa%d_y, sizeof(ecdsa%d_y), tmp_2)) goto err;\n", bits_p, bits_p);
 | 
			
		||||
		printf("\tif ((point = EC_POINT_new(ecdsa->group)) == NULL) goto err;\n");
 | 
			
		||||
		printf("\tif (!EC_POINT_set_affine_coordinates_GFp(ecdsa->group, point, tmp_1, tmp_2, NULL)) goto err;\n");
 | 
			
		||||
		printf("\t/* set generator, order and cofactor */\n");
 | 
			
		||||
		printf("\tif (!BN_bin2bn(ecdsa%d_o, sizeof(ecdsa%d_o), tmp_1)) goto err;\n", bits_p, bits_p);
 | 
			
		||||
		printf("\tif (!BN_bin2bn(ecdsa%d_c, sizeof(ecdsa%d_c), tmp_2)) goto err;\n", bits_p, bits_p);
 | 
			
		||||
		printf("\tif (!EC_GROUP_set_generator(ecdsa->group, point, tmp_1, tmp_2)) goto err;\n");
 | 
			
		||||
		printf("\n\tok=1;\n");
 | 
			
		||||
		printf("err:\n");
 | 
			
		||||
		printf("\tif (tmp_1) BN_free(tmp_1);\n");
 | 
			
		||||
		printf("\tif (tmp_2) BN_free(tmp_2);\n");
 | 
			
		||||
		printf("\tif (tmp_3) BN_free(tmp_3);\n");
 | 
			
		||||
		printf("\tif (point) EC_POINT_free(point);\n");
 | 
			
		||||
		printf("\tif (!ok)\n");
 | 
			
		||||
		printf("\t\t{\n");
 | 
			
		||||
		printf("\t\tECDSA_free(ecdsa);\n");
 | 
			
		||||
		printf("\t\tecdsa = NULL;\n");
 | 
			
		||||
		printf("\t\t}\n");
 | 
			
		||||
		printf("\treturn(ecdsa);\n\t}\n");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if (!noout)
 | 
			
		||||
	{
 | 
			
		||||
		if (outformat == FORMAT_ASN1)
 | 
			
		||||
			i = i2d_ECDSAParameters_bio(out, ecdsa);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i = PEM_write_bio_ECDSAParameters(out, ecdsa);
 | 
			
		||||
		else	
 | 
			
		||||
		{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		if (!i)
 | 
			
		||||
		{
 | 
			
		||||
			BIO_printf(bio_err, "unable to write ECDSA parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (genkey)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSA *ecdsakey;
 | 
			
		||||
 | 
			
		||||
		assert(need_rand);
 | 
			
		||||
		if ((ecdsakey = ECDSAParameters_dup(ecdsa)) == NULL) goto end;
 | 
			
		||||
		if (!ECDSA_generate_key(ecdsakey)) goto end;
 | 
			
		||||
		if (outformat == FORMAT_ASN1)
 | 
			
		||||
			i = i2d_ECDSAPrivateKey_bio(out, ecdsakey);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i = PEM_write_bio_ECDSAPrivateKey(out, ecdsakey, NULL, NULL, 0, NULL, NULL);
 | 
			
		||||
		else	
 | 
			
		||||
		{
 | 
			
		||||
			BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		ECDSA_free(ecdsakey);
 | 
			
		||||
	}
 | 
			
		||||
	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 (ecdsa != NULL) 	ECDSA_free(ecdsa);
 | 
			
		||||
	if (tmp_1)		BN_free(tmp_1);
 | 
			
		||||
	if (tmp_2)		BN_free(tmp_2);
 | 
			
		||||
	if (tmp_3)		BN_free(tmp_3);
 | 
			
		||||
	if (tmp_3)		BN_free(tmp_4);
 | 
			
		||||
	if (tmp_3)		BN_free(tmp_5);
 | 
			
		||||
	if (tmp_3)		BN_free(tmp_6);
 | 
			
		||||
	if (tmp_3)		BN_free(tmp_7);
 | 
			
		||||
	if (ctx)		BN_CTX_free(ctx);
 | 
			
		||||
	if (data)		OPENSSL_free(data);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										728
									
								
								apps/ecparam.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										728
									
								
								apps/ecparam.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,728 @@
 | 
			
		||||
/* apps/ecparam.c */
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Nils Larsch for the OpenSSL project.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
 *    the documentation and/or other materials provided with the
 | 
			
		||||
 *    distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this
 | 
			
		||||
 *    software must display the following acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
			
		||||
 *    endorse or promote products derived from this software without
 | 
			
		||||
 *    prior written permission. For written permission, please contact
 | 
			
		||||
 *    openssl-core@openssl.org.
 | 
			
		||||
 *
 | 
			
		||||
 * 5. Products derived from this software may not be called "OpenSSL"
 | 
			
		||||
 *    nor may "OpenSSL" appear in their names without prior written
 | 
			
		||||
 *    permission of the OpenSSL Project.
 | 
			
		||||
 *
 | 
			
		||||
 * 6. Redistributions of any form whatsoever must retain the following
 | 
			
		||||
 *    acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
			
		||||
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
			
		||||
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
			
		||||
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
			
		||||
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 * ====================================================================
 | 
			
		||||
 *
 | 
			
		||||
 * This product includes cryptographic software written by Eric Young
 | 
			
		||||
 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
 | 
			
		||||
 *
 | 
			
		||||
 * Portions of the attached software ("Contribution") are developed by 
 | 
			
		||||
 * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
 | 
			
		||||
 *
 | 
			
		||||
 * The Contribution is licensed pursuant to the OpenSSL open source
 | 
			
		||||
 * license provided above.
 | 
			
		||||
 *
 | 
			
		||||
 * The elliptic curve binary polynomial software is originally written by 
 | 
			
		||||
 * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#ifndef OPENSSL_NO_EC
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/ec.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	ecparam_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg      - input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg     - output format - default PEM
 | 
			
		||||
 * -in  arg         - input file  - default stdin
 | 
			
		||||
 * -out arg         - output file - default stdout
 | 
			
		||||
 * -noout           - do not print the ec parameter
 | 
			
		||||
 * -text            - print the ec parameters in text form
 | 
			
		||||
 * -check           - validate the ec parameters
 | 
			
		||||
 * -C               - print a 'C' function creating the parameters
 | 
			
		||||
 * -name arg        - use the ec parameters with 'short name' name
 | 
			
		||||
 * -list_curves     - prints a list of all currently available curve 'short names'
 | 
			
		||||
 * -conv_form arg   - specifies the point conversion form 
 | 
			
		||||
 *                  - possible values: compressed
 | 
			
		||||
 *                                     uncompressed (default)
 | 
			
		||||
 *                                     hybrid
 | 
			
		||||
 * -param_enc arg   - specifies the way the ec parameters are encoded
 | 
			
		||||
 *                    in the asn1 der encoding
 | 
			
		||||
 *                    possible values: named_curve (default)
 | 
			
		||||
 *                                     explicit
 | 
			
		||||
 * -no_seed         - if 'explicit' parameters are choosen do not use the seed
 | 
			
		||||
 * -genkey          - generate ec key
 | 
			
		||||
 * -rand file       - files to use for random number input
 | 
			
		||||
 * -engine e        - use engine e, possibly a hardware device
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int ecparam_print_var(BIO *,BIGNUM *,const char *,int,unsigned char *);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	EC_GROUP *group = NULL;
 | 
			
		||||
	point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED; 
 | 
			
		||||
	int 	new_form = 0;
 | 
			
		||||
	int 	asn1_flag = OPENSSL_EC_NAMED_CURVE;
 | 
			
		||||
	int 	new_asn1_flag = 0;
 | 
			
		||||
	char 	*curve_name = NULL, *inrand = NULL;
 | 
			
		||||
	int	list_curves = 0, no_seed = 0, check = 0,
 | 
			
		||||
		badops = 0, text = 0, i, need_rand = 0, genkey = 0;
 | 
			
		||||
	char	*infile = NULL, *outfile = NULL, *prog;
 | 
			
		||||
	BIO 	*in = NULL, *out = NULL;
 | 
			
		||||
	int 	informat, outformat, noout = 0, C = 0, ret = 1;
 | 
			
		||||
	ENGINE	*e = NULL;
 | 
			
		||||
	char	*engine = NULL;
 | 
			
		||||
 | 
			
		||||
	BIGNUM	*ec_p = NULL, *ec_a = NULL, *ec_b = NULL,
 | 
			
		||||
		*ec_gen = NULL, *ec_order = NULL, *ec_cofactor = NULL;
 | 
			
		||||
	unsigned char *buffer = NULL;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-C") == 0)
 | 
			
		||||
			C = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-check") == 0)
 | 
			
		||||
			check = 1;
 | 
			
		||||
		else if (strcmp (*argv, "-name") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			curve_name = *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-list_curves") == 0)
 | 
			
		||||
			list_curves = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-conv_form") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
			new_form = 1;
 | 
			
		||||
			if (strcmp(*argv, "compressed") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_COMPRESSED;
 | 
			
		||||
			else if (strcmp(*argv, "uncompressed") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_UNCOMPRESSED;
 | 
			
		||||
			else if (strcmp(*argv, "hybrid") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_HYBRID;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-param_enc") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
			new_asn1_flag = 1;
 | 
			
		||||
			if (strcmp(*argv, "named_curve") == 0)
 | 
			
		||||
				asn1_flag = OPENSSL_EC_NAMED_CURVE;
 | 
			
		||||
			else if (strcmp(*argv, "explicit") == 0)
 | 
			
		||||
				asn1_flag = 0;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-no_seed") == 0)
 | 
			
		||||
			no_seed = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-genkey") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			genkey=1;
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if(strcmp(*argv, "-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine = *(++argv);
 | 
			
		||||
			}	
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err, "%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
		BIO_printf(bio_err, " -inform arg       input format - "
 | 
			
		||||
				"default PEM (DER or PEM)\n");
 | 
			
		||||
		BIO_printf(bio_err, " -outform arg      output format - "
 | 
			
		||||
				"default PEM\n");
 | 
			
		||||
		BIO_printf(bio_err, " -in  arg          input file  - "
 | 
			
		||||
				"default stdin\n");
 | 
			
		||||
		BIO_printf(bio_err, " -out arg          output file - "
 | 
			
		||||
				"default stdout\n");
 | 
			
		||||
		BIO_printf(bio_err, " -noout            do not print the "
 | 
			
		||||
				"ec parameter\n");
 | 
			
		||||
		BIO_printf(bio_err, " -text             print the ec "
 | 
			
		||||
				"parameters in text form\n");
 | 
			
		||||
		BIO_printf(bio_err, " -check            validate the ec "
 | 
			
		||||
				"parameters\n");
 | 
			
		||||
		BIO_printf(bio_err, " -C                print a 'C' "
 | 
			
		||||
				"function creating the parameters\n");
 | 
			
		||||
		BIO_printf(bio_err, " -name arg         use the "
 | 
			
		||||
				"ec parameters with 'short name' name\n");
 | 
			
		||||
		BIO_printf(bio_err, " -list_curves      prints a list of "
 | 
			
		||||
				"all currently available curve 'short names'\n");
 | 
			
		||||
		BIO_printf(bio_err, " -conv_form arg    specifies the "
 | 
			
		||||
				"point conversion form \n");
 | 
			
		||||
		BIO_printf(bio_err, "                   possible values:"
 | 
			
		||||
				" compressed\n");
 | 
			
		||||
		BIO_printf(bio_err, "                                   "
 | 
			
		||||
				" uncompressed (default)\n");
 | 
			
		||||
		BIO_printf(bio_err, "                                   "
 | 
			
		||||
				" hybrid\n");
 | 
			
		||||
		BIO_printf(bio_err, " -param_enc arg    specifies the way"
 | 
			
		||||
				" the ec parameters are encoded\n");
 | 
			
		||||
		BIO_printf(bio_err, "                   in the asn1 der "
 | 
			
		||||
				"encoding\n");
 | 
			
		||||
		BIO_printf(bio_err, "                   possible values:"
 | 
			
		||||
				" named_curve (default)\n");
 | 
			
		||||
		BIO_printf(bio_err, "                                   "
 | 
			
		||||
				" explicit\n");
 | 
			
		||||
		BIO_printf(bio_err, " -no_seed          if 'explicit'"
 | 
			
		||||
				" parameters are choosen do not"
 | 
			
		||||
				" use the seed\n");
 | 
			
		||||
		BIO_printf(bio_err, " -genkey           generate ec"
 | 
			
		||||
				" key\n");
 | 
			
		||||
		BIO_printf(bio_err, " -rand file        files to use for"
 | 
			
		||||
				" random number input\n");
 | 
			
		||||
		BIO_printf(bio_err, " -engine e         use engine e, "
 | 
			
		||||
				"possibly a hardware device\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
 | 
			
		||||
	if (list_curves)
 | 
			
		||||
		{
 | 
			
		||||
		EC_builtin_curve *curves = NULL;
 | 
			
		||||
		size_t crv_len = 0;
 | 
			
		||||
		size_t n = 0;
 | 
			
		||||
		size_t len;
 | 
			
		||||
 | 
			
		||||
		crv_len = EC_get_builtin_curves(NULL, 0);
 | 
			
		||||
 | 
			
		||||
		curves = OPENSSL_malloc(sizeof(EC_builtin_curve) * crv_len);
 | 
			
		||||
 | 
			
		||||
		if (curves == NULL)
 | 
			
		||||
			goto end;
 | 
			
		||||
 | 
			
		||||
		if (!EC_get_builtin_curves(curves, crv_len))
 | 
			
		||||
			{
 | 
			
		||||
			OPENSSL_free(curves);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		
 | 
			
		||||
		for (n = 0; n < crv_len; n++)
 | 
			
		||||
			{
 | 
			
		||||
			const char *comment;
 | 
			
		||||
			const char *sname;
 | 
			
		||||
			comment = curves[n].comment;
 | 
			
		||||
			sname   = OBJ_nid2sn(curves[n].nid);
 | 
			
		||||
			if (comment == NULL)
 | 
			
		||||
				comment = "CURVE DESCRIPTION NOT AVAILABLE";
 | 
			
		||||
			if (sname == NULL)
 | 
			
		||||
				sname = "";
 | 
			
		||||
 | 
			
		||||
			len = BIO_printf(out, "  %-10s: ", sname);
 | 
			
		||||
			if (len + strlen(comment) > 80)
 | 
			
		||||
				BIO_printf(out, "\n%80s\n", comment);
 | 
			
		||||
			else
 | 
			
		||||
				BIO_printf(out, "%s\n", comment);
 | 
			
		||||
			} 
 | 
			
		||||
 | 
			
		||||
		OPENSSL_free(curves);
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (curve_name != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		int nid;
 | 
			
		||||
 | 
			
		||||
		/* workaround for the SECG curve names secp192r1
 | 
			
		||||
		 * and secp256r1 (which are the same as the curves
 | 
			
		||||
		 * prime192v1 and prime256v1 defined in X9.62)
 | 
			
		||||
		 */
 | 
			
		||||
		if (!strcmp(curve_name, "secp192r1"))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "using curve name prime192v1 "
 | 
			
		||||
				"instead of secp192r1\n");
 | 
			
		||||
			nid = NID_X9_62_prime192v1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(curve_name, "secp256r1"))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "using curve name prime256v1 "
 | 
			
		||||
				"instead of secp256r1\n");
 | 
			
		||||
			nid = NID_X9_62_prime256v1;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			nid = OBJ_sn2nid(curve_name);
 | 
			
		||||
	
 | 
			
		||||
		if (nid == 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "unknown curve name (%s)\n", 
 | 
			
		||||
				curve_name);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		group = EC_GROUP_new_by_nid(nid);
 | 
			
		||||
		if (group == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "unable to create curve (%s)\n", 
 | 
			
		||||
				curve_name);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		EC_GROUP_set_asn1_flag(group, asn1_flag);
 | 
			
		||||
		EC_GROUP_set_point_conversion_form(group, form);
 | 
			
		||||
		}
 | 
			
		||||
	else if (informat == FORMAT_ASN1)
 | 
			
		||||
		{
 | 
			
		||||
		group = d2i_ECPKParameters_bio(in, NULL);
 | 
			
		||||
		}
 | 
			
		||||
	else if (informat == FORMAT_PEM)
 | 
			
		||||
		{
 | 
			
		||||
		group = PEM_read_bio_ECPKParameters(in,NULL,NULL,NULL);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "bad input format specified\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (group == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, 
 | 
			
		||||
			"unable to load elliptic curve parameters\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (new_form)
 | 
			
		||||
		EC_GROUP_set_point_conversion_form(group, form);
 | 
			
		||||
 | 
			
		||||
	if (new_asn1_flag)
 | 
			
		||||
		EC_GROUP_set_asn1_flag(group, asn1_flag);
 | 
			
		||||
 | 
			
		||||
	if (no_seed)
 | 
			
		||||
		{
 | 
			
		||||
		EC_GROUP_set_seed(group, NULL, 0);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		if (!ECPKParameters_print(out, group, 0))
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (check)
 | 
			
		||||
		{
 | 
			
		||||
		if (group == NULL)
 | 
			
		||||
			BIO_printf(bio_err, "no elliptic curve parameters\n");
 | 
			
		||||
		BIO_printf(bio_err, "checking elliptic curve parameters: ");
 | 
			
		||||
		if (!EC_GROUP_check(group, NULL))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "failed\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			BIO_printf(bio_err, "ok\n");
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (C)
 | 
			
		||||
		{
 | 
			
		||||
		size_t	buf_len = 0, tmp_len = 0;
 | 
			
		||||
		const EC_POINT *point;
 | 
			
		||||
		int	is_prime, len = 0;
 | 
			
		||||
		const EC_METHOD *meth = EC_GROUP_method_of(group);
 | 
			
		||||
 | 
			
		||||
		if ((ec_p = BN_new()) == NULL || (ec_a = BN_new()) == NULL ||
 | 
			
		||||
		    (ec_b = BN_new()) == NULL || (ec_gen = BN_new()) == NULL ||
 | 
			
		||||
		    (ec_order = BN_new()) == NULL || 
 | 
			
		||||
		    (ec_cofactor = BN_new()) == NULL )
 | 
			
		||||
			{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		is_prime = (EC_METHOD_get_field_type(meth) == 
 | 
			
		||||
			NID_X9_62_prime_field);
 | 
			
		||||
 | 
			
		||||
		if (is_prime)
 | 
			
		||||
			{
 | 
			
		||||
			if (!EC_GROUP_get_curve_GFp(group, ec_p, ec_a,
 | 
			
		||||
				ec_b, NULL))
 | 
			
		||||
				goto end;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			/* TODO */
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if ((point = EC_GROUP_get0_generator(group)) == NULL)
 | 
			
		||||
			goto end;
 | 
			
		||||
		if (!EC_POINT_point2bn(group, point, 
 | 
			
		||||
			EC_GROUP_get_point_conversion_form(group), ec_gen, 
 | 
			
		||||
			NULL))
 | 
			
		||||
			goto end;
 | 
			
		||||
		if (!EC_GROUP_get_order(group, ec_order, NULL))
 | 
			
		||||
			goto end;
 | 
			
		||||
		if (!EC_GROUP_get_cofactor(group, ec_cofactor, NULL))
 | 
			
		||||
			goto end;
 | 
			
		||||
 | 
			
		||||
		if (!ec_p || !ec_a || !ec_b || !ec_gen || 
 | 
			
		||||
			!ec_order || !ec_cofactor)
 | 
			
		||||
			goto end;
 | 
			
		||||
 | 
			
		||||
		len = BN_num_bits(ec_order);
 | 
			
		||||
 | 
			
		||||
		if ((tmp_len = (size_t)BN_num_bytes(ec_p)) > buf_len)
 | 
			
		||||
			buf_len = tmp_len;
 | 
			
		||||
		if ((tmp_len = (size_t)BN_num_bytes(ec_a)) > buf_len)
 | 
			
		||||
			buf_len = tmp_len;
 | 
			
		||||
		if ((tmp_len = (size_t)BN_num_bytes(ec_b)) > buf_len)
 | 
			
		||||
			buf_len = tmp_len;
 | 
			
		||||
		if ((tmp_len = (size_t)BN_num_bytes(ec_gen)) > buf_len)
 | 
			
		||||
			buf_len = tmp_len;
 | 
			
		||||
		if ((tmp_len = (size_t)BN_num_bytes(ec_order)) > buf_len)
 | 
			
		||||
			buf_len = tmp_len;
 | 
			
		||||
		if ((tmp_len = (size_t)BN_num_bytes(ec_cofactor)) > buf_len)
 | 
			
		||||
			buf_len = tmp_len;
 | 
			
		||||
 | 
			
		||||
		buffer = (unsigned char *)OPENSSL_malloc(buf_len);
 | 
			
		||||
 | 
			
		||||
		if (buffer == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		ecparam_print_var(out, ec_p, "ec_p", len, buffer);
 | 
			
		||||
		ecparam_print_var(out, ec_a, "ec_a", len, buffer);
 | 
			
		||||
		ecparam_print_var(out, ec_b, "ec_b", len, buffer);
 | 
			
		||||
		ecparam_print_var(out, ec_gen, "ec_gen", len, buffer);
 | 
			
		||||
		ecparam_print_var(out, ec_order, "ec_order", len, buffer);
 | 
			
		||||
		ecparam_print_var(out, ec_cofactor, "ec_cofactor", len, 
 | 
			
		||||
			buffer);
 | 
			
		||||
 | 
			
		||||
		BIO_printf(out, "\n\n");
 | 
			
		||||
 | 
			
		||||
		BIO_printf(out, "EC_GROUP *get_ec_group_%d(void)\n\t{\n", len);
 | 
			
		||||
		BIO_printf(out, "\tint ok=0;\n");
 | 
			
		||||
		BIO_printf(out, "\tEC_GROUP *group = NULL;\n");
 | 
			
		||||
		BIO_printf(out, "\tEC_POINT *point = NULL;\n");
 | 
			
		||||
		BIO_printf(out, "\tBIGNUM   *tmp_1 = NULL, *tmp_2 = NULL, "
 | 
			
		||||
				"*tmp_3 = NULL;\n\n");
 | 
			
		||||
		BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_p_%d, "
 | 
			
		||||
				"sizeof(ec_p_%d), NULL)) == NULL)\n\t\t"
 | 
			
		||||
				"goto err;\n", len, len);
 | 
			
		||||
		BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_a_%d, "
 | 
			
		||||
				"sizeof(ec_a_%d), NULL)) == NULL)\n\t\t"
 | 
			
		||||
				"goto err;\n", len, len);
 | 
			
		||||
		BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_b_%d, "
 | 
			
		||||
				"sizeof(ec_b_%d), NULL)) == NULL)\n\t\t"
 | 
			
		||||
				"goto err;\n", len, len);
 | 
			
		||||
		if (is_prime)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(out, "\tif ((group = EC_GROUP_new_curve_"
 | 
			
		||||
				"GFp(tmp_1, tmp_2, tmp_3, NULL)) == NULL)"
 | 
			
		||||
				"\n\t\tgoto err;\n\n");
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			/* TODO */
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		BIO_printf(out, "\t/* build generator */\n");
 | 
			
		||||
		BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_gen_%d, "
 | 
			
		||||
				"sizeof(ec_gen_%d), tmp_1)) == NULL)"
 | 
			
		||||
				"\n\t\tgoto err;\n", len, len);
 | 
			
		||||
		BIO_printf(out, "\tpoint = EC_POINT_bn2point(group, tmp_1, "
 | 
			
		||||
				"NULL, NULL);\n");
 | 
			
		||||
		BIO_printf(out, "\tif (point == NULL)\n\t\tgoto err;\n");
 | 
			
		||||
		BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_order_%d, "
 | 
			
		||||
				"sizeof(ec_order_%d), tmp_2)) == NULL)"
 | 
			
		||||
				"\n\t\tgoto err;\n", len, len);
 | 
			
		||||
		BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_cofactor_%d, "
 | 
			
		||||
				"sizeof(ec_cofactor_%d), tmp_3)) == NULL)"
 | 
			
		||||
				"\n\t\tgoto err;\n", len, len);
 | 
			
		||||
		BIO_printf(out, "\tif (!EC_GROUP_set_generator(group, point,"
 | 
			
		||||
				" tmp_2, tmp_3))\n\t\tgoto err;\n");
 | 
			
		||||
		BIO_printf(out, "\n\tok=1;\n");
 | 
			
		||||
		BIO_printf(out, "err:\n");
 | 
			
		||||
		BIO_printf(out, "\tif (tmp_1)\n\t\tBN_free(tmp_1);\n");
 | 
			
		||||
		BIO_printf(out, "\tif (tmp_2)\n\t\tBN_free(tmp_2);\n");
 | 
			
		||||
		BIO_printf(out, "\tif (tmp_3)\n\t\tBN_free(tmp_3);\n");
 | 
			
		||||
		BIO_printf(out, "\tif (point)\n\t\tEC_POINT_free(point);\n");
 | 
			
		||||
		BIO_printf(out, "\tif (!ok)\n");
 | 
			
		||||
		BIO_printf(out, "\t\t{\n");
 | 
			
		||||
		BIO_printf(out, "\t\tEC_GROUP_free(group);\n");
 | 
			
		||||
		BIO_printf(out, "\t\tgroup = NULL;\n");
 | 
			
		||||
		BIO_printf(out, "\t\t}\n");
 | 
			
		||||
		BIO_printf(out, "\treturn(group);\n\t}\n");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!noout)
 | 
			
		||||
		{
 | 
			
		||||
		if (outformat == FORMAT_ASN1)
 | 
			
		||||
			i = i2d_ECPKParameters_bio(out, group);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i = PEM_write_bio_ECPKParameters(out, group);
 | 
			
		||||
		else	
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for"
 | 
			
		||||
				" outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "unable to write elliptic "
 | 
			
		||||
				"curve parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if (need_rand)
 | 
			
		||||
		{
 | 
			
		||||
		app_RAND_load_file(NULL, bio_err, (inrand != NULL));
 | 
			
		||||
		if (inrand != NULL)
 | 
			
		||||
			BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
				app_RAND_load_files(inrand));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (genkey)
 | 
			
		||||
		{
 | 
			
		||||
		EC_KEY *eckey = EC_KEY_new();
 | 
			
		||||
 | 
			
		||||
		if (eckey == NULL)
 | 
			
		||||
			goto end;
 | 
			
		||||
 | 
			
		||||
		assert(need_rand);
 | 
			
		||||
 | 
			
		||||
		eckey->group = group;
 | 
			
		||||
		
 | 
			
		||||
		if (!EC_KEY_generate_key(eckey))
 | 
			
		||||
			{
 | 
			
		||||
			eckey->group = NULL;
 | 
			
		||||
			EC_KEY_free(eckey);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (outformat == FORMAT_ASN1)
 | 
			
		||||
			i = i2d_ECPrivateKey_bio(out, eckey);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i = PEM_write_bio_ECPrivateKey(out, eckey, NULL,
 | 
			
		||||
				NULL, 0, NULL, NULL);
 | 
			
		||||
		else	
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "bad output format specified "
 | 
			
		||||
				"for outfile\n");
 | 
			
		||||
			eckey->group = NULL;
 | 
			
		||||
			EC_KEY_free(eckey);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		eckey->group = NULL;
 | 
			
		||||
		EC_KEY_free(eckey);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (need_rand)
 | 
			
		||||
		app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (ec_p)
 | 
			
		||||
		BN_free(ec_p);
 | 
			
		||||
	if (ec_a)
 | 
			
		||||
		BN_free(ec_a);
 | 
			
		||||
	if (ec_b)
 | 
			
		||||
		BN_free(ec_b);
 | 
			
		||||
	if (ec_gen)
 | 
			
		||||
		BN_free(ec_gen);
 | 
			
		||||
	if (ec_order)
 | 
			
		||||
		BN_free(ec_order);
 | 
			
		||||
	if (ec_cofactor)
 | 
			
		||||
		BN_free(ec_cofactor);
 | 
			
		||||
	if (buffer)
 | 
			
		||||
		OPENSSL_free(buffer);
 | 
			
		||||
	if (in != NULL)
 | 
			
		||||
		BIO_free(in);
 | 
			
		||||
	if (out != NULL)
 | 
			
		||||
		BIO_free_all(out);
 | 
			
		||||
	if (group != NULL)
 | 
			
		||||
		EC_GROUP_free(group);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int ecparam_print_var(BIO *out, BIGNUM *in, const char *var,
 | 
			
		||||
	int len, unsigned char *buffer)
 | 
			
		||||
	{
 | 
			
		||||
	BIO_printf(out, "static unsigned char %s_%d[] = {", var, len);
 | 
			
		||||
	if (BN_is_zero(in))
 | 
			
		||||
		BIO_printf(out, "\n\t0x00");
 | 
			
		||||
	else 
 | 
			
		||||
		{
 | 
			
		||||
		int i, l;
 | 
			
		||||
 | 
			
		||||
		l = BN_bn2bin(in, buffer);
 | 
			
		||||
		for (i=0; i<l-1; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) 
 | 
			
		||||
				BIO_printf(out, "\n\t");
 | 
			
		||||
			BIO_printf(out, "0x%02X,", buffer[i]);
 | 
			
		||||
			}
 | 
			
		||||
		if ((i%12) == 0) 
 | 
			
		||||
			BIO_printf(out, "\n\t");
 | 
			
		||||
		BIO_printf(out, "0x%02X", buffer[i]);
 | 
			
		||||
		}
 | 
			
		||||
	BIO_printf(out, "\n\t};\n\n");
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										36
									
								
								apps/enc.c
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								apps/enc.c
									
									
									
									
									
								
							@@ -78,7 +78,7 @@ int set_hex(char *in,unsigned char *out,int size);
 | 
			
		||||
#define BSIZE	(8*1024)
 | 
			
		||||
#define	PROG	enc_main
 | 
			
		||||
 | 
			
		||||
void show_ciphers(const OBJ_NAME *name,void *bio_)
 | 
			
		||||
static void show_ciphers(const OBJ_NAME *name,void *bio_)
 | 
			
		||||
	{
 | 
			
		||||
	BIO *bio=bio_;
 | 
			
		||||
	static int n;
 | 
			
		||||
@@ -100,9 +100,11 @@ int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	static const char magic[]="Salted__";
 | 
			
		||||
	char mbuf[8];	/* should be 1 smaller than magic */
 | 
			
		||||
	char mbuf[sizeof magic-1];
 | 
			
		||||
	char *strbuf=NULL;
 | 
			
		||||
	unsigned char *buff=NULL,*bufsize=NULL;
 | 
			
		||||
	int bsize=BSIZE,verbose=0;
 | 
			
		||||
@@ -119,7 +121,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	BIO *in=NULL,*out=NULL,*b64=NULL,*benc=NULL,*rbio=NULL,*wbio=NULL;
 | 
			
		||||
#define PROG_NAME_SIZE  39
 | 
			
		||||
	char pname[PROG_NAME_SIZE+1];
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
@@ -131,7 +135,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	/* first check the program name */
 | 
			
		||||
	program_name(argv[0],pname,PROG_NAME_SIZE);
 | 
			
		||||
	program_name(argv[0],pname,sizeof pname);
 | 
			
		||||
	if (strcmp(pname,"base64") == 0)
 | 
			
		||||
		base64=1;
 | 
			
		||||
 | 
			
		||||
@@ -163,11 +167,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passarg= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if	(strcmp(*argv,"-d") == 0)
 | 
			
		||||
			enc=0;
 | 
			
		||||
		else if	(strcmp(*argv,"-p") == 0)
 | 
			
		||||
@@ -216,7 +222,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				goto bad;
 | 
			
		||||
				}
 | 
			
		||||
			buf[0]='\0';
 | 
			
		||||
			fgets(buf,128,infile);
 | 
			
		||||
			fgets(buf,sizeof buf,infile);
 | 
			
		||||
			fclose(infile);
 | 
			
		||||
			i=strlen(buf);
 | 
			
		||||
			if ((i > 0) &&
 | 
			
		||||
@@ -270,7 +276,9 @@ bad:
 | 
			
		||||
			BIO_printf(bio_err,"%-14s key/iv in hex is the next argument\n","-K/-iv");
 | 
			
		||||
			BIO_printf(bio_err,"%-14s print the iv/key (then exit if -P)\n","-[pP]");
 | 
			
		||||
			BIO_printf(bio_err,"%-14s buffer size\n","-bufsize <n>");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
			BIO_printf(bio_err,"%-14s use engine e, possibly a hardware device.\n","-engine e");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
			BIO_printf(bio_err,"Cipher Types\n");
 | 
			
		||||
			OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH,
 | 
			
		||||
@@ -284,7 +292,9 @@ bad:
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (bufsize != NULL)
 | 
			
		||||
		{
 | 
			
		||||
@@ -363,7 +373,7 @@ bad:
 | 
			
		||||
			{
 | 
			
		||||
			char buf[200];
 | 
			
		||||
 | 
			
		||||
			sprintf(buf,"enter %s %s password:",
 | 
			
		||||
			BIO_snprintf(buf,sizeof buf,"enter %s %s password:",
 | 
			
		||||
				     OBJ_nid2ln(EVP_CIPHER_nid(cipher)),
 | 
			
		||||
				     (enc)?"encryption":"decryption");
 | 
			
		||||
			strbuf[0]='\0';
 | 
			
		||||
@@ -442,12 +452,12 @@ bad:
 | 
			
		||||
			else {
 | 
			
		||||
				if(enc) {
 | 
			
		||||
					if(hsalt) {
 | 
			
		||||
						if(!set_hex(hsalt,salt,PKCS5_SALT_LEN)) {
 | 
			
		||||
						if(!set_hex(hsalt,salt,sizeof salt)) {
 | 
			
		||||
							BIO_printf(bio_err,
 | 
			
		||||
								"invalid hex salt value\n");
 | 
			
		||||
							goto end;
 | 
			
		||||
						}
 | 
			
		||||
					} else if (RAND_pseudo_bytes(salt, PKCS5_SALT_LEN) < 0)
 | 
			
		||||
					} else if (RAND_pseudo_bytes(salt, sizeof salt) < 0)
 | 
			
		||||
						goto end;
 | 
			
		||||
					/* If -P option then don't bother writing */
 | 
			
		||||
					if((printkey != 2)
 | 
			
		||||
@@ -455,14 +465,14 @@ bad:
 | 
			
		||||
							 sizeof magic-1) != sizeof magic-1
 | 
			
		||||
					       || BIO_write(wbio,
 | 
			
		||||
							    (char *)salt,
 | 
			
		||||
							    PKCS5_SALT_LEN) != PKCS5_SALT_LEN)) {
 | 
			
		||||
							    sizeof salt) != sizeof salt)) {
 | 
			
		||||
						BIO_printf(bio_err,"error writing output file\n");
 | 
			
		||||
						goto end;
 | 
			
		||||
					}
 | 
			
		||||
				} else if(BIO_read(rbio,mbuf,sizeof mbuf) != sizeof mbuf
 | 
			
		||||
					  || BIO_read(rbio,
 | 
			
		||||
						      (unsigned char *)salt,
 | 
			
		||||
				    PKCS5_SALT_LEN) != PKCS5_SALT_LEN) {
 | 
			
		||||
				    sizeof salt) != sizeof salt) {
 | 
			
		||||
					BIO_printf(bio_err,"error reading input file\n");
 | 
			
		||||
					goto end;
 | 
			
		||||
				} else if(memcmp(mbuf,magic,sizeof magic-1)) {
 | 
			
		||||
@@ -481,9 +491,9 @@ bad:
 | 
			
		||||
			 * bug picked up by
 | 
			
		||||
			 * Larry J. Hughes Jr. <hughes@indiana.edu> */
 | 
			
		||||
			if (str == strbuf)
 | 
			
		||||
				memset(str,0,SIZE);
 | 
			
		||||
				OPENSSL_cleanse(str,SIZE);
 | 
			
		||||
			else
 | 
			
		||||
				memset(str,0,strlen(str));
 | 
			
		||||
				OPENSSL_cleanse(str,strlen(str));
 | 
			
		||||
			}
 | 
			
		||||
		if ((hiv != NULL) && !set_hex(hiv,iv,sizeof iv))
 | 
			
		||||
			{
 | 
			
		||||
@@ -524,7 +534,7 @@ bad:
 | 
			
		||||
			if (!nosalt)
 | 
			
		||||
				{
 | 
			
		||||
				printf("salt=");
 | 
			
		||||
				for (i=0; i<PKCS5_SALT_LEN; i++)
 | 
			
		||||
				for (i=0; i<(int)sizeof(salt); i++)
 | 
			
		||||
					printf("%02X",salt[i]);
 | 
			
		||||
				printf("\n");
 | 
			
		||||
				}
 | 
			
		||||
@@ -586,7 +596,7 @@ end:
 | 
			
		||||
	if (b64 != NULL) BIO_free(b64);
 | 
			
		||||
	if(pass) OPENSSL_free(pass);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int set_hex(char *in, unsigned char *out, int size)
 | 
			
		||||
 
 | 
			
		||||
@@ -56,6 +56,8 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@@ -77,7 +79,8 @@ static char *engine_usage[]={
 | 
			
		||||
"               -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          - for each engine, check that they are really available\n",
 | 
			
		||||
" -t[t]       - for each engine, check that they are really available\n",
 | 
			
		||||
"               -tt will display error trace for unavailable engines\n",
 | 
			
		||||
" -pre <cmd>  - runs command 'cmd' against the ENGINE before any attempts\n",
 | 
			
		||||
"               to load it (if -t is used)\n",
 | 
			
		||||
" -post <cmd> - runs command 'cmd' against the ENGINE after loading it\n",
 | 
			
		||||
@@ -120,8 +123,8 @@ static int append_buf(char **buf, const char *s, int *size, int step)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (**buf != '\0')
 | 
			
		||||
		strcat(*buf, ", ");
 | 
			
		||||
	strcat(*buf, s);
 | 
			
		||||
		BUF_strlcat(*buf, ", ", *size);
 | 
			
		||||
	BUF_strlcat(*buf, s, *size);
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
@@ -342,7 +345,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int ret=1,i;
 | 
			
		||||
	char **pp;
 | 
			
		||||
	int verbose=0, list_cap=0, test_avail=0;
 | 
			
		||||
	int verbose=0, list_cap=0, test_avail=0, test_avail_noise = 0;
 | 
			
		||||
	ENGINE *e;
 | 
			
		||||
	STACK *engines = sk_new_null();
 | 
			
		||||
	STACK *pre_cmds = sk_new_null();
 | 
			
		||||
@@ -380,8 +383,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-c") == 0)
 | 
			
		||||
			list_cap=1;
 | 
			
		||||
		else if (strcmp(*argv,"-t") == 0)
 | 
			
		||||
		else if (strncmp(*argv,"-t",2) == 0)
 | 
			
		||||
			{
 | 
			
		||||
			test_avail=1;
 | 
			
		||||
			if(strspn(*argv + 1, "t") < strlen(*argv + 1))
 | 
			
		||||
				goto skip_arg_loop;
 | 
			
		||||
			if((test_avail_noise = strlen(*argv + 1) - 1) > 1)
 | 
			
		||||
				goto skip_arg_loop;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-pre") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			argc--; argv++;
 | 
			
		||||
@@ -496,6 +505,7 @@ skip_digests:
 | 
			
		||||
				else
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_out, "[ unavailable ]\n");
 | 
			
		||||
					if(test_avail_noise)
 | 
			
		||||
						ERR_print_errors_fp(stdout);
 | 
			
		||||
					ERR_clear_error();
 | 
			
		||||
					}
 | 
			
		||||
@@ -510,11 +520,19 @@ skip_digests:
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
 | 
			
		||||
	ERR_print_errors(bio_err);
 | 
			
		||||
	sk_pop_free(engines, identity);
 | 
			
		||||
	sk_pop_free(pre_cmds, identity);
 | 
			
		||||
	sk_pop_free(post_cmds, identity);
 | 
			
		||||
	if (bio_out != NULL) BIO_free_all(bio_out);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -122,5 +122,5 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										33
									
								
								apps/gendh.c
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								apps/gendh.c
									
									
									
									
									
								
							@@ -57,6 +57,12 @@
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code */
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@@ -75,23 +81,29 @@
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG gendh_main
 | 
			
		||||
 | 
			
		||||
static void MS_CALLBACK dh_cb(int p, int n, void *arg);
 | 
			
		||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int 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;
 | 
			
		||||
 | 
			
		||||
	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);
 | 
			
		||||
@@ -115,11 +127,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			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;
 | 
			
		||||
@@ -138,14 +152,18 @@ bad:
 | 
			
		||||
		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
 | 
			
		||||
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
@@ -183,9 +201,9 @@ bad:
 | 
			
		||||
 | 
			
		||||
	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");
 | 
			
		||||
	dh=DH_generate_parameters(num,g,dh_cb,bio_err);
 | 
			
		||||
 | 
			
		||||
	if (dh == NULL) goto end;
 | 
			
		||||
	if(((dh = DH_new()) == NULL) || !DH_generate_parameters_ex(dh, num, g, &cb))
 | 
			
		||||
		goto end;
 | 
			
		||||
		
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 | 
			
		||||
@@ -198,10 +216,10 @@ end:
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dh != NULL) DH_free(dh);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void MS_CALLBACK dh_cb(int p, int n, void *arg)
 | 
			
		||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
 | 
			
		||||
@@ -209,10 +227,11 @@ static void MS_CALLBACK dh_cb(int p, int n, void *arg)
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write((BIO *)arg,&c,1);
 | 
			
		||||
	(void)BIO_flush((BIO *)arg);
 | 
			
		||||
	BIO_write(cb->arg,&c,1);
 | 
			
		||||
	(void)BIO_flush(cb->arg);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -77,7 +77,9 @@ 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;
 | 
			
		||||
@@ -85,7 +87,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	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();
 | 
			
		||||
 | 
			
		||||
@@ -111,11 +115,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			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;
 | 
			
		||||
@@ -167,7 +173,9 @@ bad:
 | 
			
		||||
		BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc aes\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");
 | 
			
		||||
@@ -176,7 +184,9 @@ bad:
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#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");
 | 
			
		||||
@@ -246,6 +256,6 @@ end:
 | 
			
		||||
	if (dsa != NULL) DSA_free(dsa);
 | 
			
		||||
	if(passout) OPENSSL_free(passout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -56,6 +56,12 @@
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code */
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@@ -75,13 +81,16 @@
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG genrsa_main
 | 
			
		||||
 | 
			
		||||
static void MS_CALLBACK genrsa_cb(int p, int n, void *arg);
 | 
			
		||||
static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	BN_GENCB cb;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	RSA *rsa=NULL;
 | 
			
		||||
	int i,num=DEFBITS;
 | 
			
		||||
@@ -90,11 +99,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	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;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
	BN_GENCB_set(&cb, genrsa_cb, bio_err);
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
@@ -122,11 +134,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			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;
 | 
			
		||||
@@ -177,7 +191,9 @@ bad:
 | 
			
		||||
		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");
 | 
			
		||||
@@ -191,7 +207,9 @@ bad:
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
@@ -223,7 +241,9 @@ bad:
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err,"Generating RSA private key, %d bit long modulus\n",
 | 
			
		||||
		num);
 | 
			
		||||
	rsa=RSA_generate_key(num,f4,genrsa_cb,bio_err);
 | 
			
		||||
 | 
			
		||||
	if(((rsa = RSA_new()) == NULL) || !RSA_generate_key_ex(rsa, num, f4, &cb))
 | 
			
		||||
		goto err;
 | 
			
		||||
		
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 | 
			
		||||
@@ -258,10 +278,10 @@ err:
 | 
			
		||||
	if (ret != 0)
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void MS_CALLBACK genrsa_cb(int p, int n, void *arg)
 | 
			
		||||
static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
 | 
			
		||||
@@ -269,11 +289,12 @@ static void MS_CALLBACK genrsa_cb(int p, int n, void *arg)
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write((BIO *)arg,&c,1);
 | 
			
		||||
	(void)BIO_flush((BIO *)arg);
 | 
			
		||||
	BIO_write(cb->arg,&c,1);
 | 
			
		||||
	(void)BIO_flush(cb->arg);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_RSA */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,22 +15,10 @@ $!
 | 
			
		||||
$!  It was written so it would try to determine what "C" compiler to
 | 
			
		||||
$!  use or you can specify which "C" compiler to use.
 | 
			
		||||
$!
 | 
			
		||||
$!  Specify RSAREF as P1 to compile with the RSAREF library instead of
 | 
			
		||||
$!  the regular one.  If you specify NORSAREF it will compile with the
 | 
			
		||||
$!  regular RSAREF routines.  (Note: If you are in the United States
 | 
			
		||||
$!  you MUST compile with RSAREF unless you have a license from RSA).
 | 
			
		||||
$!
 | 
			
		||||
$!  Note: The RSAREF libraries are NOT INCLUDED and you have to
 | 
			
		||||
$!        download it from "ftp://ftp.rsa.com/rsaref".  You have to
 | 
			
		||||
$!        get the ".tar-Z" file as the ".zip" file dosen't have the
 | 
			
		||||
$!        directory structure stored.  You have to extract the file
 | 
			
		||||
$!        into the [.RSAREF] directory under the root directory as that
 | 
			
		||||
$!        is where the scripts will look for the files.
 | 
			
		||||
$!
 | 
			
		||||
$!  Specify DEBUG or NODEBUG as P2 to compile with or without debugger
 | 
			
		||||
$!  Specify DEBUG or NODEBUG as P1 to compile with or without debugger
 | 
			
		||||
$!  information.
 | 
			
		||||
$!
 | 
			
		||||
$!  Specify which compiler at P3 to try to compile under.
 | 
			
		||||
$!  Specify which compiler at P2 to try to compile under.
 | 
			
		||||
$!
 | 
			
		||||
$!	   VAXC	 For VAX C.
 | 
			
		||||
$!	   DECC	 For DEC C.
 | 
			
		||||
@@ -39,15 +27,16 @@ $!
 | 
			
		||||
$!  If you don't speficy a compiler, it will try to determine which
 | 
			
		||||
$!  "C" compiler to use.
 | 
			
		||||
$!
 | 
			
		||||
$!  P4, if defined, sets a TCP/IP library to use, through one of the following
 | 
			
		||||
$!  P3, if defined, sets a TCP/IP library to use, through one of the following
 | 
			
		||||
$!  keywords:
 | 
			
		||||
$!
 | 
			
		||||
$!	UCX		for UCX
 | 
			
		||||
$!	SOCKETSHR	for SOCKETSHR+NETLIB
 | 
			
		||||
$!	TCPIP		for TCPIP (post UCX)
 | 
			
		||||
$!
 | 
			
		||||
$!  P5, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
 | 
			
		||||
$!  P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
 | 
			
		||||
$!
 | 
			
		||||
$!  P6, if defined, sets a choice of programs to compile.
 | 
			
		||||
$!  P5, if defined, sets a choice of programs to compile.
 | 
			
		||||
$!
 | 
			
		||||
$!
 | 
			
		||||
$! Define A TCP/IP Library That We Will Need To Link To.
 | 
			
		||||
@@ -100,10 +89,6 @@ $! Define The CRYPTO Library.
 | 
			
		||||
$!
 | 
			
		||||
$ CRYPTO_LIB := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]LIBCRYPTO.OLB
 | 
			
		||||
$!
 | 
			
		||||
$! Define The RSAREF Library.
 | 
			
		||||
$!
 | 
			
		||||
$ RSAREF_LIB := SYS$DISK:[-.'ARCH'.EXE.RSAREF]LIBRSAGLUE.OLB
 | 
			
		||||
$!
 | 
			
		||||
$! Define The SSL Library.
 | 
			
		||||
$!
 | 
			
		||||
$ SSL_LIB := SYS$DISK:[-.'ARCH'.EXE.SSL]LIBSSL.OLB
 | 
			
		||||
@@ -154,13 +139,13 @@ $! Define The Application Files.
 | 
			
		||||
$!
 | 
			
		||||
$ LIB_FILES = "VERIFY;ASN1PARS;REQ;DGST;DH;DHPARAM;ENC;PASSWD;GENDH;ERRSTR;"+-
 | 
			
		||||
	      "CA;PKCS7;CRL2P7;CRL;"+-
 | 
			
		||||
	      "RSA;RSAUTL;DSA;DSAPARAM;"+-
 | 
			
		||||
	      "RSA;RSAUTL;DSA;DSAPARAM;EC;ECPARAM;"+-
 | 
			
		||||
	      "X509;GENRSA;GENDSA;S_SERVER;S_CLIENT;SPEED;"+-
 | 
			
		||||
	      "S_TIME;APPS;S_CB;S_SOCKET;APP_RAND;VERSION;SESS_ID;"+-
 | 
			
		||||
	      "CIPHERS;NSEQ;PKCS12;PKCS8;SPKAC;SMIME;RAND;ENGINE;OCSP"
 | 
			
		||||
$ APP_FILES := OPENSSL,'OBJ_DIR'VERIFY.OBJ,ASN1PARS.OBJ,REQ.OBJ,DGST.OBJ,DH.OBJ,DHPARAM.OBJ,ENC.OBJ,PASSWD.OBJ,GENDH.OBJ,ERRSTR.OBJ,-
 | 
			
		||||
	       CA.OBJ,PKCS7.OBJ,CRL2P7.OBJ,CRL.OBJ,-
 | 
			
		||||
	       RSA.OBJ,RSAUTL.OBJ,DSA.OBJ,DSAPARAM.OBJ,-
 | 
			
		||||
	       RSA.OBJ,RSAUTL.OBJ,DSA.OBJ,DSAPARAM.OBJ,EC.OBJ,ECPARAM.OBJ,-
 | 
			
		||||
	       X509.OBJ,GENRSA.OBJ,GENDSA.OBJ,S_SERVER.OBJ,S_CLIENT.OBJ,SPEED.OBJ,-
 | 
			
		||||
	       S_TIME.OBJ,APPS.OBJ,S_CB.OBJ,S_SOCKET.OBJ,APP_RAND.OBJ,VERSION.OBJ,SESS_ID.OBJ,-
 | 
			
		||||
	       CIPHERS.OBJ,NSEQ.OBJ,PKCS12.OBJ,PKCS8.OBJ,SPKAC.OBJ,SMIME.OBJ,RAND.OBJ,ENGINE.OBJ,OCSP.OBJ
 | 
			
		||||
@@ -181,7 +166,7 @@ $!     TCPIP_PROGRAMS = ",S_SERVER,S_CLIENT,SESS_ID,CIPHERS,S_TIME,"
 | 
			
		||||
$!
 | 
			
		||||
$! Setup exceptional compilations
 | 
			
		||||
$!
 | 
			
		||||
$ COMPILEWITH_CC2 = ",S_SOCKET,S_SERVER,S_CLIENT,"
 | 
			
		||||
$ COMPILEWITH_CC2 = ",S_SERVER,S_CLIENT,"
 | 
			
		||||
$!
 | 
			
		||||
$ PHASE := LIB
 | 
			
		||||
$!
 | 
			
		||||
@@ -292,45 +277,7 @@ $   WRITE SYS$OUTPUT FILE_NAME," needs a TCP/IP library.  Can't link.  Skipping.
 | 
			
		||||
$   GOTO NEXT_FILE
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Link The Program, Check To See If We Need To Link With RSAREF Or Not.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (RSAREF.EQS."TRUE")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Are To Link With A Specific TCP/IP Library.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (TCPIP_LIB.NES."")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Link With The RSAREF Library And A Specific TCP/IP Library.
 | 
			
		||||
$!
 | 
			
		||||
$     LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
 | 
			
		||||
	  'OBJECT_FILE''EXTRA_OBJ', -
 | 
			
		||||
          'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY,'RSAREF_LIB'/LIBRARY, -
 | 
			
		||||
          'TCPIP_LIB','OPT_FILE'/OPTION
 | 
			
		||||
$!
 | 
			
		||||
$!  Else...
 | 
			
		||||
$!
 | 
			
		||||
$   ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!    Link With The RSAREF Library And NO TCP/IP Library.
 | 
			
		||||
$!
 | 
			
		||||
$     LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
 | 
			
		||||
	  'OBJECT_FILE''EXTRA_OBJ', -
 | 
			
		||||
          'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY,'RSAREF_LIB'/LIBRARY, -
 | 
			
		||||
          'OPT_FILE'/OPTION
 | 
			
		||||
$!
 | 
			
		||||
$!  End The TCP/IP Library Check.
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Else...
 | 
			
		||||
$!
 | 
			
		||||
$ ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!  Don't Link With The RSAREF Routines.
 | 
			
		||||
$!
 | 
			
		||||
$!
 | 
			
		||||
$! Link The Program.
 | 
			
		||||
$! Check To See If We Are To Link With A Specific TCP/IP Library.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (TCPIP_LIB.NES."")
 | 
			
		||||
@@ -358,10 +305,6 @@ $!  End The TCP/IP Library Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! End The RSAREF Link Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Go Back And Do It Again.
 | 
			
		||||
$!
 | 
			
		||||
$ GOTO NEXT_FILE
 | 
			
		||||
@@ -525,32 +468,6 @@ $! End The Crypto Library Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! See If We Need The RSAREF Library.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (RSAREF.EQS."TRUE")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Look For The Library LIBRSAGLUE.OLB.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (F$SEARCH(RSAREF_LIB).EQS."")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Tell The User We Can't Find The LIBRSAGLUE.OLB Library.
 | 
			
		||||
$!
 | 
			
		||||
$     WRITE SYS$OUTPUT ""
 | 
			
		||||
$     WRITE SYS$OUTPUT "Can't Find The Library ",RSAREF_LIB,"."
 | 
			
		||||
$     WRITE SYS$OUTPUT "We Can't Link Without It."
 | 
			
		||||
$     WRITE SYS$OUTPUT ""
 | 
			
		||||
$!
 | 
			
		||||
$!    Since We Can't Link Without It, Exit.
 | 
			
		||||
$!
 | 
			
		||||
$     EXIT
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! End The RSAREF Library Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Look For The Library LIBSSL.OLB.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (F$SEARCH(SSL_LIB).EQS."")
 | 
			
		||||
@@ -581,87 +498,10 @@ $ CHECK_OPTIONS:
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If P1 Is Blank.
 | 
			
		||||
$!
 | 
			
		||||
$ P1 = "NORSAREF"
 | 
			
		||||
$ IF (P1.EQS."NORSAREF")
 | 
			
		||||
$ IF (P1.EQS."NODEBUG")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!   P1 Is NORSAREF, So Compile With The Regular RSA Libraries.
 | 
			
		||||
$!
 | 
			
		||||
$    RSAREF = "FALSE"
 | 
			
		||||
$!
 | 
			
		||||
$! Else...
 | 
			
		||||
$!
 | 
			
		||||
$ ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Are To Use The RSAREF Library.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (P1.EQS."RSAREF")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Check To Make Sure We Have The RSAREF Source Code Directory.
 | 
			
		||||
$!
 | 
			
		||||
$     IF (F$SEARCH("SYS$DISK:[-.RSAREF]SOURCE.DIR").EQS."")
 | 
			
		||||
$     THEN
 | 
			
		||||
$!
 | 
			
		||||
$!      We Don't Have The RSAREF Souce Code Directory, So Tell The
 | 
			
		||||
$!      User This.
 | 
			
		||||
$!
 | 
			
		||||
$       WRITE SYS$OUTPUT ""
 | 
			
		||||
$       WRITE SYS$OUTPUT "It appears that you don't have the RSAREF Souce Code."
 | 
			
		||||
$       WRITE SYS$OUTPUT "You need to go to 'ftp://ftp.rsa.com/rsaref'.  You have to"
 | 
			
		||||
$       WRITE SYS$OUTPUT "get the '.tar-Z' file as the '.zip' file dosen't have the"
 | 
			
		||||
$       WRITE SYS$OUTPUT "directory structure stored.  You have to extract the file"
 | 
			
		||||
$       WRITE SYS$OUTPUT "into the [.RSAREF] directory under the root directory"
 | 
			
		||||
$       WRITE SYS$OUTPUT "as that is where the scripts will look for the files."
 | 
			
		||||
$       WRITE SYS$OUTPUT ""
 | 
			
		||||
$!
 | 
			
		||||
$!      Time To Exit.
 | 
			
		||||
$!
 | 
			
		||||
$       EXIT
 | 
			
		||||
$!
 | 
			
		||||
$!    Else...
 | 
			
		||||
$!
 | 
			
		||||
$     ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!      Compile Using The RSAREF Library.
 | 
			
		||||
$!
 | 
			
		||||
$       RSAREF = "TRUE"
 | 
			
		||||
$!
 | 
			
		||||
$!    End The RSAREF Soure Directory Check.
 | 
			
		||||
$!
 | 
			
		||||
$     ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Else...
 | 
			
		||||
$!
 | 
			
		||||
$   ELSE 
 | 
			
		||||
$!
 | 
			
		||||
$!    They Entered An Invalid Option..
 | 
			
		||||
$!
 | 
			
		||||
$     WRITE SYS$OUTPUT ""
 | 
			
		||||
$     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
 | 
			
		||||
$     WRITE SYS$OUTPUT ""
 | 
			
		||||
$     WRITE SYS$OUTPUT "     RSAREF   :  Compile With The RSAREF Library."
 | 
			
		||||
$     WRITE SYS$OUTPUT "     NORSAREF :  Compile With The Regular RSA Library."
 | 
			
		||||
$     WRITE SYS$OUTPUT ""
 | 
			
		||||
$!
 | 
			
		||||
$!    Time To EXIT.
 | 
			
		||||
$!
 | 
			
		||||
$     EXIT
 | 
			
		||||
$!
 | 
			
		||||
$!  End The Valid Arguement Check.
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! End P1 Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If P2 Is Blank.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (P2.EQS."NODEBUG")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!   P2 Is NODEBUG, So Compile Without Debugger Information.
 | 
			
		||||
$!   P1 Is NODEBUG, So Compile Without Debugger Information.
 | 
			
		||||
$!
 | 
			
		||||
$    DEBUGGER  = "NODEBUG"
 | 
			
		||||
$    TRACEBACK = "NOTRACEBACK" 
 | 
			
		||||
@@ -676,7 +516,7 @@ $ ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Are To Compile With Debugger Information.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (P2.EQS."DEBUG")
 | 
			
		||||
$   IF (P1.EQS."DEBUG")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Compile With Debugger Information.
 | 
			
		||||
@@ -692,7 +532,7 @@ $!
 | 
			
		||||
$!    Tell The User Entered An Invalid Option..
 | 
			
		||||
$!
 | 
			
		||||
$     WRITE SYS$OUTPUT ""
 | 
			
		||||
$     WRITE SYS$OUTPUT "The Option ",P2," Is Invalid.  The Valid Options Are:"
 | 
			
		||||
$     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
 | 
			
		||||
$     WRITE SYS$OUTPUT ""
 | 
			
		||||
$     WRITE SYS$OUTPUT "    DEBUG    :  Compile With The Debugger Information."
 | 
			
		||||
$     WRITE SYS$OUTPUT "    NODEBUG  :  Compile Without The Debugger Information."
 | 
			
		||||
@@ -706,13 +546,13 @@ $!  End The Valid Arguement Check.
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! End The P2 Check.
 | 
			
		||||
$! End The P1 Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If P3 Is Blank.
 | 
			
		||||
$! Check To See If P2 Is Blank.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (P3.EQS."")
 | 
			
		||||
$ IF (P2.EQS."")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  O.K., The User Didn't Specify A Compiler, Let's Try To
 | 
			
		||||
@@ -725,7 +565,7 @@ $   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Looks Like GNUC, Set To Use GNUC.
 | 
			
		||||
$!
 | 
			
		||||
$     P3 = "GNUC"
 | 
			
		||||
$     P2 = "GNUC"
 | 
			
		||||
$!
 | 
			
		||||
$!  Else...
 | 
			
		||||
$!
 | 
			
		||||
@@ -738,7 +578,7 @@ $     THEN
 | 
			
		||||
$!
 | 
			
		||||
$!      Looks Like DECC, Set To Use DECC.
 | 
			
		||||
$!
 | 
			
		||||
$       P3 = "DECC"
 | 
			
		||||
$       P2 = "DECC"
 | 
			
		||||
$!
 | 
			
		||||
$!    Else...
 | 
			
		||||
$!
 | 
			
		||||
@@ -746,7 +586,7 @@ $     ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!      Looks Like VAXC, Set To Use VAXC.
 | 
			
		||||
$!
 | 
			
		||||
$       P3 = "VAXC"
 | 
			
		||||
$       P2 = "VAXC"
 | 
			
		||||
$!
 | 
			
		||||
$!    End The VAXC Compiler Check.
 | 
			
		||||
$!
 | 
			
		||||
@@ -760,9 +600,9 @@ $!  End The Compiler Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If We Have A Option For P4.
 | 
			
		||||
$! Check To See If We Have A Option For P3.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (P4.EQS."")
 | 
			
		||||
$ IF (P3.EQS."")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Find out what socket library we have available
 | 
			
		||||
@@ -772,7 +612,7 @@ $   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    We have SOCKETSHR, and it is my opinion that it's the best to use.
 | 
			
		||||
$!
 | 
			
		||||
$     P4 = "SOCKETSHR"
 | 
			
		||||
$     P3 = "SOCKETSHR"
 | 
			
		||||
$!
 | 
			
		||||
$!    Tell the user
 | 
			
		||||
$!
 | 
			
		||||
@@ -792,7 +632,7 @@ $     THEN
 | 
			
		||||
$!
 | 
			
		||||
$!	Last resort: a UCX or UCX-compatible library
 | 
			
		||||
$!
 | 
			
		||||
$	P4 = "UCX"
 | 
			
		||||
$	P3 = "UCX"
 | 
			
		||||
$!
 | 
			
		||||
$!      Tell the user
 | 
			
		||||
$!
 | 
			
		||||
@@ -816,12 +656,12 @@ $ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If The User Entered A Valid Paramter.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC")
 | 
			
		||||
$ IF (P2.EQS."VAXC").OR.(P2.EQS."DECC").OR.(P2.EQS."GNUC")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If The User Wanted DECC.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (P3.EQS."DECC")
 | 
			
		||||
$   IF (P2.EQS."DECC")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Looks Like DECC, Set To Use DECC.
 | 
			
		||||
@@ -851,7 +691,7 @@ $   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Are To Use VAXC.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (P3.EQS."VAXC")
 | 
			
		||||
$   IF (P2.EQS."VAXC")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Looks Like VAXC, Set To Use VAXC.
 | 
			
		||||
@@ -888,7 +728,7 @@ $   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Are To Use GNU C.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (P3.EQS."GNUC")
 | 
			
		||||
$   IF (P2.EQS."GNUC")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Looks Like GNUC, Set To Use GNUC.
 | 
			
		||||
@@ -917,31 +757,6 @@ $!  Set up default defines
 | 
			
		||||
$!
 | 
			
		||||
$   CCDEFS = """FLAT_INC=1""," + CCDEFS
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Are To Compile With RSAREF Routines.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (RSAREF.EQS."TRUE")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Compile With RSAREF.
 | 
			
		||||
$!
 | 
			
		||||
$     CCDEFS = CCDEFS + ",""RSAref=1"""
 | 
			
		||||
$!
 | 
			
		||||
$!    Tell The User This.
 | 
			
		||||
$!
 | 
			
		||||
$     WRITE SYS$OUTPUT "Compiling With RSAREF Routines."
 | 
			
		||||
$!
 | 
			
		||||
$!    Else, We Don't Care.  Compile Without The RSAREF Library.
 | 
			
		||||
$!
 | 
			
		||||
$   ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!    Tell The User We Are Compile Without The RSAREF Routines.
 | 
			
		||||
$!
 | 
			
		||||
$     WRITE SYS$OUTPUT "Compiling Without The RSAREF Routines.
 | 
			
		||||
$!
 | 
			
		||||
$!  End The RSAREF Check.
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Else The User Entered An Invalid Arguement.
 | 
			
		||||
$!
 | 
			
		||||
$ ELSE
 | 
			
		||||
@@ -949,7 +764,7 @@ $!
 | 
			
		||||
$!  Tell The User We Don't Know What They Want.
 | 
			
		||||
$!
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$   WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
 | 
			
		||||
$   WRITE SYS$OUTPUT "The Option ",P2," Is Invalid.  The Valid Options Are:"
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
 | 
			
		||||
$   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
 | 
			
		||||
@@ -963,17 +778,18 @@ $ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Time to check the contents, and to make sure we get the correct library.
 | 
			
		||||
$!
 | 
			
		||||
$ IF P4.EQS."SOCKETSHR" .OR. P4.EQS."MULTINET" .OR. P4.EQS."UCX"
 | 
			
		||||
$ IF P3.EQS."SOCKETSHR" .OR. P3.EQS."MULTINET" .OR. P3.EQS."UCX" -
 | 
			
		||||
     .OR. P3.EQS."TCPIP" .OR. P3.EQS."NONE"
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Check to see if SOCKETSHR was chosen
 | 
			
		||||
$!
 | 
			
		||||
$   IF P4.EQS."SOCKETSHR"
 | 
			
		||||
$   IF P3.EQS."SOCKETSHR"
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Set the library to use SOCKETSHR
 | 
			
		||||
$!
 | 
			
		||||
$     TCPIP_LIB = "[-.VMS]SOCKETSHR_SHR.OPT/OPT"
 | 
			
		||||
$     TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT"
 | 
			
		||||
$!
 | 
			
		||||
$!    Done with SOCKETSHR
 | 
			
		||||
$!
 | 
			
		||||
@@ -981,12 +797,12 @@ $   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check to see if MULTINET was chosen
 | 
			
		||||
$!
 | 
			
		||||
$   IF P4.EQS."MULTINET"
 | 
			
		||||
$   IF P3.EQS."MULTINET"
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Set the library to use UCX emulation.
 | 
			
		||||
$!
 | 
			
		||||
$     P4 = "UCX"
 | 
			
		||||
$     P3 = "UCX"
 | 
			
		||||
$!
 | 
			
		||||
$!    Done with MULTINET
 | 
			
		||||
$!
 | 
			
		||||
@@ -994,27 +810,53 @@ $   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check to see if UCX was chosen
 | 
			
		||||
$!
 | 
			
		||||
$   IF P4.EQS."UCX"
 | 
			
		||||
$   IF P3.EQS."UCX"
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Set the library to use UCX.
 | 
			
		||||
$!
 | 
			
		||||
$     TCPIP_LIB = "[-.VMS]UCX_SHR_DECC.OPT/OPT"
 | 
			
		||||
$     TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT/OPT"
 | 
			
		||||
$     IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
 | 
			
		||||
$     THEN
 | 
			
		||||
$       TCPIP_LIB = "[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT"
 | 
			
		||||
$       TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT"
 | 
			
		||||
$     ELSE
 | 
			
		||||
$       IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
 | 
			
		||||
	  TCPIP_LIB = "[-.VMS]UCX_SHR_VAXC.OPT/OPT"
 | 
			
		||||
	  TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT/OPT"
 | 
			
		||||
$     ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!    Done with UCX
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check to see if TCPIP (post UCX) was chosen
 | 
			
		||||
$!
 | 
			
		||||
$   IF P3.EQS."TCPIP"
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Set the library to use TCPIP.
 | 
			
		||||
$!
 | 
			
		||||
$     TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT"
 | 
			
		||||
$!
 | 
			
		||||
$!    Done with TCPIP
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check to see if NONE was chosen
 | 
			
		||||
$!
 | 
			
		||||
$   IF P3.EQS."NONE"
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Do not use TCPIP.
 | 
			
		||||
$!
 | 
			
		||||
$     TCPIP_LIB = ""
 | 
			
		||||
$!
 | 
			
		||||
$!    Done with TCPIP
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Add TCP/IP type to CC definitions.
 | 
			
		||||
$!
 | 
			
		||||
$   CCDEFS = CCDEFS + ",TCPIP_TYPE_''P4'"
 | 
			
		||||
$   CCDEFS = CCDEFS + ",TCPIP_TYPE_''P3'"
 | 
			
		||||
$!
 | 
			
		||||
$!  Print info
 | 
			
		||||
$!
 | 
			
		||||
@@ -1027,10 +869,11 @@ $!
 | 
			
		||||
$!  Tell The User We Don't Know What They Want.
 | 
			
		||||
$!
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$   WRITE SYS$OUTPUT "The Option ",P4," Is Invalid.  The Valid Options Are:"
 | 
			
		||||
$   WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$   WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
 | 
			
		||||
$   WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
 | 
			
		||||
$   WRITE SYS$OUTPUT "    TCPIP      :  To link with TCPIP (post UCX) TCP/IP library."
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$!
 | 
			
		||||
$!  Time To EXIT.
 | 
			
		||||
@@ -1057,7 +900,7 @@ $ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
 | 
			
		||||
$!
 | 
			
		||||
$! Show user the result
 | 
			
		||||
$!
 | 
			
		||||
$ WRITE SYS$OUTPUT "Main Compiling Command: ",CC
 | 
			
		||||
$ WRITE/SYMBOL SYS$OUTPUT "Main Compiling Command: ",CC
 | 
			
		||||
$!
 | 
			
		||||
$! Special Threads For OpenVMS v7.1 Or Later
 | 
			
		||||
$!
 | 
			
		||||
@@ -1065,9 +908,9 @@ $! Written By:  Richard Levitte
 | 
			
		||||
$!              richard@levitte.org
 | 
			
		||||
$!
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If We Have A Option For P5.
 | 
			
		||||
$! Check To See If We Have A Option For P4.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (P5.EQS."")
 | 
			
		||||
$ IF (P4.EQS."")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Get The Version Of VMS We Are Using.
 | 
			
		||||
@@ -1089,15 +932,15 @@ $!  End The VMS Version Check.
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! End The P5 Check.
 | 
			
		||||
$! End The P4 Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Check if the user wanted to compile just a subset of all the programs.
 | 
			
		||||
$!
 | 
			
		||||
$ IF P6 .NES. ""
 | 
			
		||||
$ IF P5 .NES. ""
 | 
			
		||||
$ THEN
 | 
			
		||||
$   PROGRAMS = P6
 | 
			
		||||
$   PROGRAMS = P5
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Time To RETURN...
 | 
			
		||||
 
 | 
			
		||||
@@ -58,9 +58,9 @@
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG nseq_main
 | 
			
		||||
@@ -102,7 +102,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf (bio_err, "-in file  input file\n");
 | 
			
		||||
		BIO_printf (bio_err, "-out file output file\n");
 | 
			
		||||
		BIO_printf (bio_err, "-toseq    output NS Sequence file\n");
 | 
			
		||||
		EXIT(1);
 | 
			
		||||
		OPENSSL_EXIT(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (infile) {
 | 
			
		||||
@@ -162,6 +162,6 @@ end:
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	NETSCAPE_CERT_SEQUENCE_free(seq);
 | 
			
		||||
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										116
									
								
								apps/ocsp.c
									
									
									
									
									
								
							
							
						
						
									
										116
									
								
								apps/ocsp.c
									
									
									
									
									
								
							@@ -55,31 +55,19 @@
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#ifndef OPENSSL_NO_OCSP
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/ocsp.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
 | 
			
		||||
/* Maximum leeway in validity period: default 5 minutes */
 | 
			
		||||
#define MAX_VALIDITY_PERIOD	(5 * 60)
 | 
			
		||||
 | 
			
		||||
/* CA index.txt definitions */
 | 
			
		||||
#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 for active */
 | 
			
		||||
#define DB_NUMBER       6
 | 
			
		||||
 | 
			
		||||
#define DB_TYPE_REV	'R'
 | 
			
		||||
#define DB_TYPE_EXP	'E'
 | 
			
		||||
#define DB_TYPE_VAL	'V'
 | 
			
		||||
 | 
			
		||||
static int add_ocsp_cert(OCSP_REQUEST **req, X509 *cert, X509 *issuer,
 | 
			
		||||
				STACK_OF(OCSP_CERTID) *ids);
 | 
			
		||||
static int add_ocsp_serial(OCSP_REQUEST **req, char *serial, X509 *issuer,
 | 
			
		||||
@@ -88,12 +76,12 @@ static int print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req,
 | 
			
		||||
				STACK *names, STACK_OF(OCSP_CERTID) *ids,
 | 
			
		||||
				long nsec, long maxage);
 | 
			
		||||
 | 
			
		||||
static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, TXT_DB *db,
 | 
			
		||||
static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, CA_DB *db,
 | 
			
		||||
			X509 *ca, X509 *rcert, EVP_PKEY *rkey,
 | 
			
		||||
			STACK_OF(X509) *rother, unsigned long flags,
 | 
			
		||||
			int nmin, int ndays);
 | 
			
		||||
 | 
			
		||||
static char **lookup_serial(TXT_DB *db, ASN1_INTEGER *ser);
 | 
			
		||||
static char **lookup_serial(CA_DB *db, ASN1_INTEGER *ser);
 | 
			
		||||
static BIO *init_responder(char *port);
 | 
			
		||||
static int do_responder(OCSP_REQUEST **preq, BIO **pcbio, BIO *acbio, char *port);
 | 
			
		||||
static int send_ocsp_response(BIO *cbio, OCSP_RESPONSE *resp);
 | 
			
		||||
@@ -135,13 +123,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	int accept_count = -1;
 | 
			
		||||
	int badarg = 0;
 | 
			
		||||
	int i;
 | 
			
		||||
	int ignore_err = 0;
 | 
			
		||||
	STACK *reqnames = NULL;
 | 
			
		||||
	STACK_OF(OCSP_CERTID) *ids = NULL;
 | 
			
		||||
 | 
			
		||||
	X509 *rca_cert = NULL;
 | 
			
		||||
	char *ridx_filename = NULL;
 | 
			
		||||
	char *rca_filename = NULL;
 | 
			
		||||
	TXT_DB *rdb = NULL;
 | 
			
		||||
	CA_DB *rdb = NULL;
 | 
			
		||||
	int nmin = 0, ndays = -1;
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
@@ -194,6 +183,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args, "-ignore_err"))
 | 
			
		||||
			ignore_err = 1;
 | 
			
		||||
		else if (!strcmp(*args, "-noverify"))
 | 
			
		||||
			noverify = 1;
 | 
			
		||||
		else if (!strcmp(*args, "-nonce"))
 | 
			
		||||
@@ -523,7 +514,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf (bio_err, "-serial n          serial number to check\n");
 | 
			
		||||
		BIO_printf (bio_err, "-signer file       certificate to sign OCSP request with\n");
 | 
			
		||||
		BIO_printf (bio_err, "-signkey file      private key to sign OCSP request with\n");
 | 
			
		||||
		BIO_printf (bio_err, "-sign_certs file   additional certificates to include in signed request\n");
 | 
			
		||||
		BIO_printf (bio_err, "-sign_other file   additional certificates to include in signed request\n");
 | 
			
		||||
		BIO_printf (bio_err, "-no_certs          don't include any certificates in signed request\n");
 | 
			
		||||
		BIO_printf (bio_err, "-req_text          print text form of request\n");
 | 
			
		||||
		BIO_printf (bio_err, "-resp_text         print text form of response\n");
 | 
			
		||||
@@ -543,18 +534,18 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf (bio_err, "-validity_period n maximum validity discrepancy in seconds\n");
 | 
			
		||||
		BIO_printf (bio_err, "-status_age n      maximum status age in seconds\n");
 | 
			
		||||
		BIO_printf (bio_err, "-noverify          don't verify response at all\n");
 | 
			
		||||
		BIO_printf (bio_err, "-verify_certs file additional certificates to search for signer\n");
 | 
			
		||||
		BIO_printf (bio_err, "-verify_other file additional certificates to search for signer\n");
 | 
			
		||||
		BIO_printf (bio_err, "-trust_other       don't verify additional certificates\n");
 | 
			
		||||
		BIO_printf (bio_err, "-no_intern         don't search certificates contained in response for signer\n");
 | 
			
		||||
		BIO_printf (bio_err, "-no_sig_verify     don't check signature on response\n");
 | 
			
		||||
		BIO_printf (bio_err, "-no_signature_verify don't check signature on response\n");
 | 
			
		||||
		BIO_printf (bio_err, "-no_cert_verify    don't check signing certificate\n");
 | 
			
		||||
		BIO_printf (bio_err, "-no_chain          don't chain verify response\n");
 | 
			
		||||
		BIO_printf (bio_err, "-no_cert_checks    don't do additional checks on signing certificate\n");
 | 
			
		||||
		BIO_printf (bio_err, "-port num		 port to run responder on\n");
 | 
			
		||||
		BIO_printf (bio_err, "-index file	 certificate status index file\n");
 | 
			
		||||
		BIO_printf (bio_err, "-CA file		 CA certificate\n");
 | 
			
		||||
		BIO_printf (bio_err, "-rsigner file	 responder certificate to sign requests with\n");
 | 
			
		||||
		BIO_printf (bio_err, "-rkey file	 responder key to sign requests with\n");
 | 
			
		||||
		BIO_printf (bio_err, "-rsigner file	 responder certificate to sign responses with\n");
 | 
			
		||||
		BIO_printf (bio_err, "-rkey file	 responder key to sign responses with\n");
 | 
			
		||||
		BIO_printf (bio_err, "-rother file	 other certificates to include in response\n");
 | 
			
		||||
		BIO_printf (bio_err, "-resp_no_certs     don't include any certificates in response\n");
 | 
			
		||||
		BIO_printf (bio_err, "-nmin n	 	 number of minutes before next update\n");
 | 
			
		||||
@@ -613,11 +604,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			NULL, e, "CA certificate");
 | 
			
		||||
		if (rcertfile)
 | 
			
		||||
			{
 | 
			
		||||
			rother = load_certs(bio_err, sign_certfile, FORMAT_PEM,
 | 
			
		||||
			rother = load_certs(bio_err, rcertfile, FORMAT_PEM,
 | 
			
		||||
				NULL, e, "responder other certificates");
 | 
			
		||||
			if (!sign_other) goto end;
 | 
			
		||||
			if (!rother) goto end;
 | 
			
		||||
			}
 | 
			
		||||
		rkey = load_key(bio_err, rkeyfile, FORMAT_PEM, NULL, NULL,
 | 
			
		||||
		rkey = load_key(bio_err, rkeyfile, FORMAT_PEM, 0, NULL, NULL,
 | 
			
		||||
			"responder private key");
 | 
			
		||||
		if (!rkey)
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -663,7 +654,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				NULL, e, "signer certificates");
 | 
			
		||||
			if (!sign_other) goto end;
 | 
			
		||||
			}
 | 
			
		||||
		key = load_key(bio_err, keyfile, FORMAT_PEM, NULL, NULL,
 | 
			
		||||
		key = load_key(bio_err, keyfile, FORMAT_PEM, 0, NULL, NULL,
 | 
			
		||||
			"signer private key");
 | 
			
		||||
		if (!key)
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -676,6 +667,18 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	if (req_text && req) OCSP_REQUEST_print(out, req, 0);
 | 
			
		||||
 | 
			
		||||
	if (reqout)
 | 
			
		||||
		{
 | 
			
		||||
		derbio = BIO_new_file(reqout, "wb");
 | 
			
		||||
		if(!derbio)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error opening file %s\n", reqout);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		i2d_OCSP_REQUEST_bio(derbio, req);
 | 
			
		||||
		BIO_free(derbio);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (ridx_filename && (!rkey || !rsigner || !rca_cert))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Need a responder certificate, key and CA for this operation!\n");
 | 
			
		||||
@@ -684,22 +687,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	if (ridx_filename && !rdb)
 | 
			
		||||
		{
 | 
			
		||||
		BIO *db_bio = NULL;
 | 
			
		||||
		db_bio = BIO_new_file(ridx_filename, "r");
 | 
			
		||||
		if (!db_bio)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error opening index file %s\n", ridx_filename);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		rdb = TXT_DB_read(db_bio, DB_NUMBER);
 | 
			
		||||
		BIO_free(db_bio);
 | 
			
		||||
		if (!rdb)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error reading index file %s\n", ridx_filename);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (!make_serial_index(rdb))
 | 
			
		||||
			goto end;
 | 
			
		||||
		rdb = load_index(ridx_filename, NULL);
 | 
			
		||||
		if (!rdb) goto end;
 | 
			
		||||
		if (!index_index(rdb)) goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (rdb)
 | 
			
		||||
@@ -710,7 +700,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
	else if (host)
 | 
			
		||||
		{
 | 
			
		||||
#ifndef OPENSSL_NO_SOCK
 | 
			
		||||
		cbio = BIO_new_connect(host);
 | 
			
		||||
#else
 | 
			
		||||
		BIO_printf(bio_err, "Error creating connect BIO - sockets not supported.\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
#endif
 | 
			
		||||
		if (!cbio)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error creating connect BIO\n");
 | 
			
		||||
@@ -720,7 +715,16 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		if (use_ssl == 1)
 | 
			
		||||
			{
 | 
			
		||||
			BIO *sbio;
 | 
			
		||||
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
			ctx = SSL_CTX_new(SSLv23_client_method());
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
			ctx = SSL_CTX_new(SSLv3_client_method());
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL2)
 | 
			
		||||
			ctx = SSL_CTX_new(SSLv2_client_method());
 | 
			
		||||
#else
 | 
			
		||||
			BIO_printf(bio_err, "SSL is disabled\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
#endif
 | 
			
		||||
			SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY);
 | 
			
		||||
			sbio = BIO_new_ssl(ctx, 1);
 | 
			
		||||
			cbio = BIO_push(sbio, cbio);
 | 
			
		||||
@@ -780,8 +784,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	if (i != OCSP_RESPONSE_STATUS_SUCCESSFUL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(out, "Responder Error: %s (%ld)\n",
 | 
			
		||||
		BIO_printf(out, "Responder Error: %s (%d)\n",
 | 
			
		||||
				OCSP_response_status_str(i), i);
 | 
			
		||||
		if (ignore_err)
 | 
			
		||||
			goto redo_accept;
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -809,6 +815,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	if (!store)
 | 
			
		||||
		store = setup_verify(bio_err, CAfile, CApath);
 | 
			
		||||
	if (!store)
 | 
			
		||||
		goto end;
 | 
			
		||||
	if (verify_certfile)
 | 
			
		||||
		{
 | 
			
		||||
		verify_other = load_certs(bio_err, verify_certfile, FORMAT_PEM,
 | 
			
		||||
@@ -842,7 +850,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
		if(i <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Response Verify Failure\n", i);
 | 
			
		||||
			BIO_printf(bio_err, "Response Verify Failure\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
@@ -865,7 +873,7 @@ end:
 | 
			
		||||
	X509_free(cert);
 | 
			
		||||
	X509_free(rsigner);
 | 
			
		||||
	X509_free(rca_cert);
 | 
			
		||||
	TXT_DB_free(rdb);
 | 
			
		||||
	free_index(rdb);
 | 
			
		||||
	BIO_free_all(cbio);
 | 
			
		||||
	BIO_free_all(acbio);
 | 
			
		||||
	BIO_free(out);
 | 
			
		||||
@@ -885,7 +893,7 @@ end:
 | 
			
		||||
		SSL_CTX_free(ctx);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int add_ocsp_cert(OCSP_REQUEST **req, X509 *cert, X509 *issuer,
 | 
			
		||||
@@ -1007,7 +1015,7 @@ static int print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, TXT_DB *db,
 | 
			
		||||
static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, CA_DB *db,
 | 
			
		||||
			X509 *ca, X509 *rcert, EVP_PKEY *rkey,
 | 
			
		||||
			STACK_OF(X509) *rother, unsigned long flags,
 | 
			
		||||
			int nmin, int ndays)
 | 
			
		||||
@@ -1099,17 +1107,20 @@ static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, TXT_DB *d
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static char **lookup_serial(TXT_DB *db, ASN1_INTEGER *ser)
 | 
			
		||||
static char **lookup_serial(CA_DB *db, ASN1_INTEGER *ser)
 | 
			
		||||
	{
 | 
			
		||||
	int i;
 | 
			
		||||
	BIGNUM *bn = NULL;
 | 
			
		||||
	char *itmp, *row[DB_NUMBER],**rrow;
 | 
			
		||||
	for (i = 0; i < DB_NUMBER; i++) row[i] = NULL;
 | 
			
		||||
	bn = ASN1_INTEGER_to_BN(ser,NULL);
 | 
			
		||||
	if (BN_is_zero(bn))
 | 
			
		||||
		itmp = BUF_strdup("00");
 | 
			
		||||
	else
 | 
			
		||||
		itmp = BN_bn2hex(bn);
 | 
			
		||||
	row[DB_serial] = itmp;
 | 
			
		||||
	BN_free(bn);
 | 
			
		||||
	rrow=TXT_DB_get_by_index(db,DB_serial,row);
 | 
			
		||||
	rrow=TXT_DB_get_by_index(db->db,DB_serial,row);
 | 
			
		||||
	OPENSSL_free(itmp);
 | 
			
		||||
	return rrow;
 | 
			
		||||
	}
 | 
			
		||||
@@ -1122,7 +1133,11 @@ static BIO *init_responder(char *port)
 | 
			
		||||
	bufbio = BIO_new(BIO_f_buffer());
 | 
			
		||||
	if (!bufbio) 
 | 
			
		||||
		goto err;
 | 
			
		||||
#ifndef OPENSSL_NO_SOCK
 | 
			
		||||
	acbio = BIO_new_accept(port);
 | 
			
		||||
#else
 | 
			
		||||
	BIO_printf(bio_err, "Error setting up accept BIO - sockets not supported.\n");
 | 
			
		||||
#endif
 | 
			
		||||
	if (!acbio)
 | 
			
		||||
		goto err;
 | 
			
		||||
	BIO_set_accept_bios(acbio, bufbio);
 | 
			
		||||
@@ -1162,7 +1177,7 @@ static int do_responder(OCSP_REQUEST **preq, BIO **pcbio, BIO *acbio, char *port
 | 
			
		||||
 | 
			
		||||
	for(;;)
 | 
			
		||||
		{
 | 
			
		||||
		len = BIO_gets(cbio, inbuf, 1024);
 | 
			
		||||
		len = BIO_gets(cbio, inbuf, sizeof inbuf);
 | 
			
		||||
		if (len <= 0)
 | 
			
		||||
			return 1;
 | 
			
		||||
		/* Look for "POST" signalling start of query */
 | 
			
		||||
@@ -1209,3 +1224,4 @@ static int send_ocsp_response(BIO *cbio, OCSP_RESPONSE *resp)
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -114,6 +114,7 @@
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#define OPENSSL_C /* tells apps.h to use complete apps_startup() */
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/crypto.h>
 | 
			
		||||
#include <openssl/lhash.h>
 | 
			
		||||
@@ -121,9 +122,10 @@
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#include <openssl/engine.h>
 | 
			
		||||
#endif
 | 
			
		||||
#define USE_SOCKETS /* needed for the _O_BINARY defs in the MS world */
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include "progs.h"
 | 
			
		||||
#include "s_apps.h"
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
@@ -139,11 +141,11 @@ static unsigned long MS_CALLBACK hash(const void *a_void);
 | 
			
		||||
static int MS_CALLBACK cmp(const void *a_void,const void *b_void);
 | 
			
		||||
static LHASH *prog_init(void );
 | 
			
		||||
static int do_cmd(LHASH *prog,int argc,char *argv[]);
 | 
			
		||||
CONF *config=NULL;
 | 
			
		||||
char *default_config_file=NULL;
 | 
			
		||||
 | 
			
		||||
/* Make sure there is only one when MONOLITH is defined */
 | 
			
		||||
#ifdef MONOLITH
 | 
			
		||||
CONF *config=NULL;
 | 
			
		||||
BIO *bio_err=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -161,7 +163,7 @@ static void lock_dbg_cb(int mode, int type, const char *file, int line)
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (type < 0 || type > CRYPTO_NUM_LOCKS)
 | 
			
		||||
	if (type < 0 || type >= CRYPTO_NUM_LOCKS)
 | 
			
		||||
		{
 | 
			
		||||
		errstr = "type out of bounds";
 | 
			
		||||
		goto err;
 | 
			
		||||
@@ -218,7 +220,8 @@ int main(int Argc, char *Argv[])
 | 
			
		||||
#define PROG_NAME_SIZE	39
 | 
			
		||||
	char pname[PROG_NAME_SIZE+1];
 | 
			
		||||
	FUNCTION f,*fp;
 | 
			
		||||
	MS_STATIC char *prompt,buf[1024],config_name[256];
 | 
			
		||||
	MS_STATIC char *prompt,buf[1024];
 | 
			
		||||
	char *to_free=NULL;
 | 
			
		||||
	int n,i,ret=0;
 | 
			
		||||
	int argc;
 | 
			
		||||
	char **argv,*p;
 | 
			
		||||
@@ -228,6 +231,10 @@ int main(int Argc, char *Argv[])
 | 
			
		||||
	arg.data=NULL;
 | 
			
		||||
	arg.count=0;
 | 
			
		||||
 | 
			
		||||
	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 (getenv("OPENSSL_DEBUG_MEMORY") != NULL) /* if not defined, use compiled-in library defaults */
 | 
			
		||||
		{
 | 
			
		||||
		if (!(0 == strcmp(getenv("OPENSSL_DEBUG_MEMORY"), "off")))
 | 
			
		||||
@@ -252,23 +259,12 @@ int main(int Argc, char *Argv[])
 | 
			
		||||
 | 
			
		||||
	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);
 | 
			
		||||
 | 
			
		||||
	/* Lets load up our environment a little */
 | 
			
		||||
	p=getenv("OPENSSL_CONF");
 | 
			
		||||
	if (p == NULL)
 | 
			
		||||
		p=getenv("SSLEAY_CONF");
 | 
			
		||||
	if (p == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		strcpy(config_name,X509_get_default_cert_area());
 | 
			
		||||
#ifndef OPENSSL_SYS_VMS
 | 
			
		||||
		strcat(config_name,"/");
 | 
			
		||||
#endif
 | 
			
		||||
		strcat(config_name,OPENSSL_CONF);
 | 
			
		||||
		p=config_name;
 | 
			
		||||
		}
 | 
			
		||||
		p=to_free=make_config_name();
 | 
			
		||||
 | 
			
		||||
	default_config_file=p;
 | 
			
		||||
 | 
			
		||||
@@ -284,7 +280,7 @@ int main(int Argc, char *Argv[])
 | 
			
		||||
	prog=prog_init();
 | 
			
		||||
 | 
			
		||||
	/* first check the program name */
 | 
			
		||||
	program_name(Argv[0],pname,PROG_NAME_SIZE);
 | 
			
		||||
	program_name(Argv[0],pname,sizeof pname);
 | 
			
		||||
 | 
			
		||||
	f.name=pname;
 | 
			
		||||
	fp=(FUNCTION *)lh_retrieve(prog,&f);
 | 
			
		||||
@@ -312,7 +308,7 @@ int main(int Argc, char *Argv[])
 | 
			
		||||
		{
 | 
			
		||||
		ret=0;
 | 
			
		||||
		p=buf;
 | 
			
		||||
		n=1024;
 | 
			
		||||
		n=sizeof buf;
 | 
			
		||||
		i=0;
 | 
			
		||||
		for (;;)
 | 
			
		||||
			{
 | 
			
		||||
@@ -346,6 +342,8 @@ int main(int Argc, char *Argv[])
 | 
			
		||||
	BIO_printf(bio_err,"bad exit\n");
 | 
			
		||||
	ret=1;
 | 
			
		||||
end:
 | 
			
		||||
	if (to_free)
 | 
			
		||||
		OPENSSL_free(to_free);
 | 
			
		||||
	if (config != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		NCONF_free(config);
 | 
			
		||||
@@ -362,7 +360,7 @@ end:
 | 
			
		||||
		BIO_free(bio_err);
 | 
			
		||||
		bio_err=NULL;
 | 
			
		||||
		}
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#define LIST_STANDARD_COMMANDS "list-standard-commands"
 | 
			
		||||
 
 | 
			
		||||
@@ -38,10 +38,14 @@ dir		= ./demoCA		# Where everything is kept
 | 
			
		||||
certs		= $dir/certs		# Where the issued certs are kept
 | 
			
		||||
crl_dir		= $dir/crl		# Where the issued crl are kept
 | 
			
		||||
database	= $dir/index.txt	# database index file.
 | 
			
		||||
#unique_subject	= no			# Set to 'no' to allow creation of
 | 
			
		||||
					# several ctificates with same subject.
 | 
			
		||||
new_certs_dir	= $dir/newcerts		# default place for new certs.
 | 
			
		||||
 | 
			
		||||
certificate	= $dir/cacert.pem 	# The CA certificate
 | 
			
		||||
serial		= $dir/serial 		# The current serial number
 | 
			
		||||
crlnumber	= $dir/crlnumber	# the current crl number
 | 
			
		||||
					# must be commented out to leave a V1 CRL
 | 
			
		||||
crl		= $dir/crl.pem 		# The current CRL
 | 
			
		||||
private_key	= $dir/private/cakey.pem# The private key
 | 
			
		||||
RANDFILE	= $dir/private/.rand	# private random number file
 | 
			
		||||
@@ -58,6 +62,7 @@ cert_opt 	= ca_default		# Certificate field options
 | 
			
		||||
 | 
			
		||||
# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
 | 
			
		||||
# so this is commented out by default to leave a V1 CRL.
 | 
			
		||||
# crlnumber must also be commented out to leave a V1 CRL.
 | 
			
		||||
# crl_extensions	= crl_ext
 | 
			
		||||
 | 
			
		||||
default_days	= 365			# how long to certify for
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,6 @@
 | 
			
		||||
# include <openssl/des.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef NO_MD5CRYPT_1
 | 
			
		||||
# include <openssl/evp.h>
 | 
			
		||||
# include <openssl/md5.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -293,7 +292,7 @@ err:
 | 
			
		||||
	if (out)
 | 
			
		||||
		BIO_free_all(out);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -313,7 +312,8 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt)
 | 
			
		||||
	static char out_buf[6 + 9 + 24 + 2]; /* "$apr1$..salt..$.......md5hash..........\0" */
 | 
			
		||||
	unsigned char buf[MD5_DIGEST_LENGTH];
 | 
			
		||||
	char *salt_out;
 | 
			
		||||
	int n, i;
 | 
			
		||||
	int n;
 | 
			
		||||
	unsigned int i;
 | 
			
		||||
	EVP_MD_CTX md,md2;
 | 
			
		||||
	size_t passwd_len, salt_len;
 | 
			
		||||
 | 
			
		||||
@@ -506,6 +506,6 @@ err:
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	fputs("Program not available.\n", stderr)
 | 
			
		||||
	EXIT(1);
 | 
			
		||||
	OPENSSL_EXIT(1);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										257
									
								
								apps/pkcs12.c
									
									
									
									
									
								
							
							
						
						
									
										257
									
								
								apps/pkcs12.c
									
									
									
									
									
								
							@@ -2,10 +2,10 @@
 | 
			
		||||
#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1)
 | 
			
		||||
 | 
			
		||||
/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
 | 
			
		||||
 * project 1999.
 | 
			
		||||
 * project.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 * Copyright (c) 1999-2002 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
 | 
			
		||||
@@ -120,7 +120,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    char *passin = NULL, *passout = NULL;
 | 
			
		||||
    char *inrand = NULL;
 | 
			
		||||
    char *CApath = NULL, *CAfile = NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
@@ -164,10 +166,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
					 maciter = PKCS12_DEFAULT_ITER;
 | 
			
		||||
		else if (!strcmp (*args, "-nomaciter"))
 | 
			
		||||
					 maciter = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-nomac"))
 | 
			
		||||
					 maciter = -1;
 | 
			
		||||
		else if (!strcmp (*args, "-nodes")) enc=NULL;
 | 
			
		||||
		else if (!strcmp (*args, "-certpbe")) {
 | 
			
		||||
			if (args[1]) {
 | 
			
		||||
				args++;
 | 
			
		||||
				if (!strcmp(*args, "NONE"))
 | 
			
		||||
					cert_pbe = -1;
 | 
			
		||||
				cert_pbe=OBJ_txt2nid(*args);
 | 
			
		||||
				if(cert_pbe == NID_undef) {
 | 
			
		||||
					BIO_printf(bio_err,
 | 
			
		||||
@@ -178,6 +184,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		} else if (!strcmp (*args, "-keypbe")) {
 | 
			
		||||
			if (args[1]) {
 | 
			
		||||
				args++;
 | 
			
		||||
				if (!strcmp(*args, "NONE"))
 | 
			
		||||
					key_pbe = -1;
 | 
			
		||||
				else
 | 
			
		||||
					key_pbe=OBJ_txt2nid(*args);
 | 
			
		||||
				if(key_pbe == NID_undef) {
 | 
			
		||||
					BIO_printf(bio_err,
 | 
			
		||||
@@ -252,11 +261,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			args++;	
 | 
			
		||||
			CAfile = *args;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		} else if (!strcmp(*args,"-engine")) {
 | 
			
		||||
		    if (args[1]) {
 | 
			
		||||
			args++;	
 | 
			
		||||
			engine = *args;
 | 
			
		||||
		    } else badarg = 1;
 | 
			
		||||
#endif
 | 
			
		||||
		} else badarg = 1;
 | 
			
		||||
 | 
			
		||||
	} else badarg = 1;
 | 
			
		||||
@@ -304,14 +315,18 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	BIO_printf (bio_err, "-password p   set import/export password source\n");
 | 
			
		||||
	BIO_printf (bio_err, "-passin p     input file pass phrase source\n");
 | 
			
		||||
	BIO_printf (bio_err, "-passout p    output file pass phrase source\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	BIO_printf (bio_err, "-engine e     use engine e, possibly a hardware device.\n");
 | 
			
		||||
#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
 | 
			
		||||
 | 
			
		||||
    if(passarg) {
 | 
			
		||||
	if(export_cert) passargout = passarg;
 | 
			
		||||
@@ -357,24 +372,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	    goto end;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
   if (certfile) {
 | 
			
		||||
    	if(!(certsin = BIO_new_file(certfile, "r"))) {
 | 
			
		||||
	    BIO_printf(bio_err, "Can't open certificate file %s\n", certfile);
 | 
			
		||||
	    perror (certfile);
 | 
			
		||||
	    goto end;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (keyname) {
 | 
			
		||||
    	if(!(inkey = BIO_new_file(keyname, "r"))) {
 | 
			
		||||
	    BIO_printf(bio_err, "Can't key certificate file %s\n", keyname);
 | 
			
		||||
	    perror (keyname);
 | 
			
		||||
	    goto end;
 | 
			
		||||
	}
 | 
			
		||||
     }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
    CRYPTO_pop_info();
 | 
			
		||||
    CRYPTO_push_info("write files");
 | 
			
		||||
@@ -399,7 +396,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
    CRYPTO_push_info("read MAC password");
 | 
			
		||||
#endif
 | 
			
		||||
	if(EVP_read_pw_string (macpass, 50, "Enter MAC Password:", export_cert))
 | 
			
		||||
	if(EVP_read_pw_string (macpass, sizeof macpass, "Enter MAC Password:", export_cert))
 | 
			
		||||
	{
 | 
			
		||||
    	    BIO_printf (bio_err, "Can't read Password\n");
 | 
			
		||||
    	    goto end;
 | 
			
		||||
@@ -411,25 +408,29 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
    if (export_cert) {
 | 
			
		||||
	EVP_PKEY *key = NULL;
 | 
			
		||||
	STACK_OF(PKCS12_SAFEBAG) *bags = NULL;
 | 
			
		||||
	STACK_OF(PKCS7) *safes = NULL;
 | 
			
		||||
	PKCS12_SAFEBAG *bag = NULL;
 | 
			
		||||
	PKCS8_PRIV_KEY_INFO *p8 = NULL;
 | 
			
		||||
	PKCS7 *authsafe = NULL;
 | 
			
		||||
	X509 *ucert = NULL;
 | 
			
		||||
	X509 *ucert = NULL, *x = NULL;
 | 
			
		||||
	STACK_OF(X509) *certs=NULL;
 | 
			
		||||
	char *catmp = NULL;
 | 
			
		||||
	unsigned char *catmp = NULL;
 | 
			
		||||
	int i;
 | 
			
		||||
	unsigned char keyid[EVP_MAX_MD_SIZE];
 | 
			
		||||
	unsigned int keyidlen = 0;
 | 
			
		||||
 | 
			
		||||
	if ((options & (NOCERTS|NOKEYS)) == (NOCERTS|NOKEYS))
 | 
			
		||||
		{	
 | 
			
		||||
		BIO_printf(bio_err, "Nothing to do!\n");
 | 
			
		||||
		goto export_end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (options & NOCERTS)
 | 
			
		||||
		chain = 0;
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
	CRYPTO_push_info("process -export_cert");
 | 
			
		||||
	CRYPTO_push_info("reading private key");
 | 
			
		||||
#endif
 | 
			
		||||
	key = load_key(bio_err, keyname ? keyname : infile, FORMAT_PEM,
 | 
			
		||||
		passin, e, "private key");
 | 
			
		||||
	if (!key) {
 | 
			
		||||
	if (!(options & NOKEYS))
 | 
			
		||||
		{
 | 
			
		||||
		key = load_key(bio_err, keyname ? keyname : infile,
 | 
			
		||||
				FORMAT_PEM, 1, passin, e, "private key");
 | 
			
		||||
		if (!key)
 | 
			
		||||
			goto export_end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -439,9 +440,37 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	/* Load in all certs in input file */
 | 
			
		||||
	if(!(certs = load_certs(bio_err, infile, FORMAT_PEM, NULL, e,
 | 
			
		||||
		"certificates"))) {
 | 
			
		||||
	if(!(options & NOCERTS))
 | 
			
		||||
		{
 | 
			
		||||
		certs = load_certs(bio_err, infile, FORMAT_PEM, NULL, e,
 | 
			
		||||
							"certificates");
 | 
			
		||||
		if (!certs)
 | 
			
		||||
			goto export_end;
 | 
			
		||||
 | 
			
		||||
		if (key)
 | 
			
		||||
			{
 | 
			
		||||
			/* Look for matching private key */
 | 
			
		||||
			for(i = 0; i < sk_X509_num(certs); i++)
 | 
			
		||||
				{
 | 
			
		||||
				x = sk_X509_value(certs, i);
 | 
			
		||||
				if(X509_check_private_key(x, key))
 | 
			
		||||
					{
 | 
			
		||||
					ucert = x;
 | 
			
		||||
					/* Zero keyid and alias */
 | 
			
		||||
					X509_keyid_set1(ucert, NULL, 0);
 | 
			
		||||
					X509_alias_set1(ucert, NULL, 0);
 | 
			
		||||
					/* Remove from list */
 | 
			
		||||
					sk_X509_delete(certs, i);
 | 
			
		||||
					break;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			if (!ucert)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "No certificate matches private key\n");
 | 
			
		||||
				goto export_end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
@@ -449,17 +478,17 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	CRYPTO_push_info("reading certs from input 2");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for(i = 0; i < sk_X509_num(certs); i++) {
 | 
			
		||||
		ucert = sk_X509_value(certs, i);
 | 
			
		||||
		if(X509_check_private_key(ucert, key)) {
 | 
			
		||||
			X509_digest(ucert, EVP_sha1(), keyid, &keyidlen);
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if(!keyidlen) {
 | 
			
		||||
		ucert = NULL;
 | 
			
		||||
		BIO_printf(bio_err, "No certificate matches private key\n");
 | 
			
		||||
	/* Add any more certificates asked for */
 | 
			
		||||
	if(certfile)
 | 
			
		||||
		{
 | 
			
		||||
		STACK_OF(X509) *morecerts=NULL;
 | 
			
		||||
		if(!(morecerts = load_certs(bio_err, certfile, FORMAT_PEM,
 | 
			
		||||
					    NULL, e,
 | 
			
		||||
					    "certificates from certfile")))
 | 
			
		||||
			goto export_end;
 | 
			
		||||
		while(sk_X509_num(morecerts) > 0)
 | 
			
		||||
			sk_X509_push(certs, sk_X509_shift(morecerts));
 | 
			
		||||
		sk_X509_free(morecerts);
 | 
			
		||||
 		}
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
@@ -467,22 +496,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	CRYPTO_push_info("reading certs from certfile");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	bags = sk_PKCS12_SAFEBAG_new_null ();
 | 
			
		||||
 | 
			
		||||
	/* Add any more certificates asked for */
 | 
			
		||||
	if (certfile) {
 | 
			
		||||
		STACK_OF(X509) *morecerts=NULL;
 | 
			
		||||
		if(!(morecerts = load_certs(bio_err, certfile, FORMAT_PEM,
 | 
			
		||||
					    NULL, e,
 | 
			
		||||
					    "certificates from certfile"))) {
 | 
			
		||||
			goto export_end;
 | 
			
		||||
		}
 | 
			
		||||
		while(sk_X509_num(morecerts) > 0) {
 | 
			
		||||
			sk_X509_push(certs, sk_X509_shift(morecerts));
 | 
			
		||||
		}
 | 
			
		||||
		sk_X509_free(morecerts);
 | 
			
		||||
 	}
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
	CRYPTO_pop_info();
 | 
			
		||||
	CRYPTO_push_info("building chain");
 | 
			
		||||
@@ -508,111 +521,61 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		    /* Exclude verified certificate */
 | 
			
		||||
		    for (i = 1; i < sk_X509_num (chain2) ; i++) 
 | 
			
		||||
			sk_X509_push(certs, sk_X509_value (chain2, i));
 | 
			
		||||
		}
 | 
			
		||||
		    /* Free first certificate */
 | 
			
		||||
		    X509_free(sk_X509_value(chain2, 0));
 | 
			
		||||
		    sk_X509_free(chain2);
 | 
			
		||||
		if (vret) {
 | 
			
		||||
		} else {
 | 
			
		||||
			BIO_printf (bio_err, "Error %s getting chain.\n",
 | 
			
		||||
					X509_verify_cert_error_string(vret));
 | 
			
		||||
			goto export_end;
 | 
			
		||||
		}			
 | 
			
		||||
    	}
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
	CRYPTO_pop_info();
 | 
			
		||||
	CRYPTO_push_info("building bags");
 | 
			
		||||
#endif
 | 
			
		||||
	/* Add any CA names */
 | 
			
		||||
 | 
			
		||||
	/* We now have loads of certificates: include them all */
 | 
			
		||||
	for(i = 0; i < sk_X509_num(certs); i++) {
 | 
			
		||||
		X509 *cert = NULL;
 | 
			
		||||
		cert = sk_X509_value(certs, i);
 | 
			
		||||
		bag = PKCS12_x5092certbag(cert);
 | 
			
		||||
		/* If it matches private key set id */
 | 
			
		||||
		if(cert == ucert) {
 | 
			
		||||
			if(name) PKCS12_add_friendlyname(bag, name, -1);
 | 
			
		||||
			PKCS12_add_localkeyid(bag, keyid, keyidlen);
 | 
			
		||||
		} else if((catmp = sk_shift(canames))) 
 | 
			
		||||
				PKCS12_add_friendlyname(bag, catmp, -1);
 | 
			
		||||
		sk_PKCS12_SAFEBAG_push(bags, bag);
 | 
			
		||||
	for (i = 0; i < sk_num(canames); i++)
 | 
			
		||||
		{
 | 
			
		||||
		catmp = (unsigned char *)sk_value(canames, i);
 | 
			
		||||
		X509_alias_set1(sk_X509_value(certs, i), catmp, -1);
 | 
			
		||||
		}
 | 
			
		||||
	sk_X509_pop_free(certs, X509_free);
 | 
			
		||||
	certs = NULL;
 | 
			
		||||
	/* ucert is part of certs so it is already freed */
 | 
			
		||||
	ucert = NULL;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
	CRYPTO_pop_info();
 | 
			
		||||
	CRYPTO_push_info("encrypting bags");
 | 
			
		||||
	CRYPTO_push_info("reading password");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if(!noprompt &&
 | 
			
		||||
		EVP_read_pw_string(pass, 50, "Enter Export Password:", 1)) {
 | 
			
		||||
		EVP_read_pw_string(pass, sizeof pass, "Enter Export Password:", 1))
 | 
			
		||||
		{
 | 
			
		||||
	    	BIO_printf (bio_err, "Can't read Password\n");
 | 
			
		||||
	    	goto export_end;
 | 
			
		||||
        	}
 | 
			
		||||
	if (!twopass) strcpy(macpass, pass);
 | 
			
		||||
	/* Turn certbags into encrypted authsafe */
 | 
			
		||||
	authsafe = PKCS12_pack_p7encdata(cert_pbe, cpass, -1, NULL, 0,
 | 
			
		||||
								 iter, bags);
 | 
			
		||||
	sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free);
 | 
			
		||||
	bags = NULL;
 | 
			
		||||
	if (!twopass) BUF_strlcpy(macpass, pass, sizeof macpass);
 | 
			
		||||
 | 
			
		||||
	if (!authsafe) {
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
	CRYPTO_pop_info();
 | 
			
		||||
	CRYPTO_push_info("creating PKCS#12 structure");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	p12 = PKCS12_create(cpass, name, key, ucert, certs,
 | 
			
		||||
				key_pbe, cert_pbe, iter, -1, keytype);
 | 
			
		||||
 | 
			
		||||
	if (!p12)
 | 
			
		||||
		{
 | 
			
		||||
	    	ERR_print_errors (bio_err);
 | 
			
		||||
		goto export_end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	safes = sk_PKCS7_new_null ();
 | 
			
		||||
	sk_PKCS7_push (safes, authsafe);
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
	CRYPTO_pop_info();
 | 
			
		||||
	CRYPTO_push_info("building shrouded key bag");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	/* Make a shrouded key bag */
 | 
			
		||||
	p8 = EVP_PKEY2PKCS8 (key);
 | 
			
		||||
	if(keytype) PKCS8_add_keyusage(p8, keytype);
 | 
			
		||||
	bag = PKCS12_MAKE_SHKEYBAG(key_pbe, cpass, -1, NULL, 0, iter, p8);
 | 
			
		||||
	PKCS8_PRIV_KEY_INFO_free(p8);
 | 
			
		||||
	p8 = NULL;
 | 
			
		||||
        if (name) PKCS12_add_friendlyname (bag, name, -1);
 | 
			
		||||
	if(csp_name) PKCS12_add_CSPName_asc(bag, csp_name, -1);
 | 
			
		||||
	PKCS12_add_localkeyid (bag, keyid, keyidlen);
 | 
			
		||||
	bags = sk_PKCS12_SAFEBAG_new_null();
 | 
			
		||||
	sk_PKCS12_SAFEBAG_push (bags, bag);
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
	CRYPTO_pop_info();
 | 
			
		||||
	CRYPTO_push_info("encrypting shrouded key bag");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	/* Turn it into unencrypted safe bag */
 | 
			
		||||
	authsafe = PKCS12_pack_p7data (bags);
 | 
			
		||||
	sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free);
 | 
			
		||||
	bags = NULL;
 | 
			
		||||
	sk_PKCS7_push (safes, authsafe);
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
	CRYPTO_pop_info();
 | 
			
		||||
	CRYPTO_push_info("building pkcs12");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	p12 = PKCS12_init(NID_pkcs7_data);
 | 
			
		||||
 | 
			
		||||
	PKCS12_pack_authsafes(p12, safes);
 | 
			
		||||
 | 
			
		||||
	sk_PKCS7_pop_free(safes, PKCS7_free);
 | 
			
		||||
	safes = NULL;
 | 
			
		||||
 | 
			
		||||
	PKCS12_set_mac (p12, mpass, -1, NULL, 0, maciter, NULL);
 | 
			
		||||
	if (maciter != -1)
 | 
			
		||||
		PKCS12_set_mac(p12, mpass, -1, NULL, 0, maciter, NULL);
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
	CRYPTO_pop_info();
 | 
			
		||||
	CRYPTO_push_info("writing pkcs12");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	i2d_PKCS12_bio (out, p12);
 | 
			
		||||
	i2d_PKCS12_bio(out, p12);
 | 
			
		||||
 | 
			
		||||
	ret = 0;
 | 
			
		||||
 | 
			
		||||
@@ -625,8 +588,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	if (key) EVP_PKEY_free(key);
 | 
			
		||||
	if (certs) sk_X509_pop_free(certs, X509_free);
 | 
			
		||||
	if (safes) sk_PKCS7_pop_free(safes, PKCS7_free);
 | 
			
		||||
	if (bags) sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free);
 | 
			
		||||
	if (ucert) X509_free(ucert);
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
@@ -644,7 +605,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
    CRYPTO_push_info("read import password");
 | 
			
		||||
#endif
 | 
			
		||||
    if(!noprompt && EVP_read_pw_string(pass, 50, "Enter Import Password:", 0)) {
 | 
			
		||||
    if(!noprompt && EVP_read_pw_string(pass, sizeof pass, "Enter Import Password:", 0)) {
 | 
			
		||||
	BIO_printf (bio_err, "Can't read Password\n");
 | 
			
		||||
	goto end;
 | 
			
		||||
    }
 | 
			
		||||
@@ -652,7 +613,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    CRYPTO_pop_info();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (!twopass) strcpy(macpass, pass);
 | 
			
		||||
    if (!twopass) BUF_strlcpy(macpass, pass, sizeof macpass);
 | 
			
		||||
 | 
			
		||||
    if (options & INFO) BIO_printf (bio_err, "MAC Iteration %ld\n", p12->mac->iter ? ASN1_INTEGER_get (p12->mac->iter) : 1);
 | 
			
		||||
    if(macver) {
 | 
			
		||||
@@ -698,7 +659,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    if(passin) OPENSSL_free(passin);
 | 
			
		||||
    if(passout) OPENSSL_free(passout);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    EXIT(ret);
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int dump_certs_keys_p12 (BIO *out, PKCS12 *p12, char *pass,
 | 
			
		||||
@@ -779,7 +740,10 @@ int dump_certs_pkeys_bag (BIO *out, PKCS12_SAFEBAG *bag, char *pass,
 | 
			
		||||
		print_attribs (out, bag->attrib, "Bag Attributes");
 | 
			
		||||
		if (!(p8 = PKCS12_decrypt_skey(bag, pass, passlen)))
 | 
			
		||||
				return 0;
 | 
			
		||||
		if (!(pkey = EVP_PKCS82PKEY (p8))) return 0;
 | 
			
		||||
		if (!(pkey = EVP_PKCS82PKEY (p8))) {
 | 
			
		||||
			PKCS8_PRIV_KEY_INFO_free(p8);
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
		print_attribs (out, p8->attributes, "Key Attributes");
 | 
			
		||||
		PKCS8_PRIV_KEY_INFO_free(p8);
 | 
			
		||||
		PEM_write_bio_PrivateKey (out, pkey, enc, NULL, 0, NULL, pempass);
 | 
			
		||||
@@ -847,11 +811,12 @@ err:
 | 
			
		||||
int alg_print (BIO *x, X509_ALGOR *alg)
 | 
			
		||||
{
 | 
			
		||||
	PBEPARAM *pbe;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	p = alg->parameter->value.sequence->data;
 | 
			
		||||
	pbe = d2i_PBEPARAM (NULL, &p, alg->parameter->value.sequence->length);
 | 
			
		||||
	BIO_printf (bio_err, "%s, Iteration %d\n", 
 | 
			
		||||
	OBJ_nid2ln(OBJ_obj2nid(alg->algorithm)), ASN1_INTEGER_get(pbe->iter));
 | 
			
		||||
	BIO_printf (bio_err, "%s, Iteration %ld\n", 
 | 
			
		||||
		OBJ_nid2ln(OBJ_obj2nid(alg->algorithm)),
 | 
			
		||||
		ASN1_INTEGER_get(pbe->iter));
 | 
			
		||||
	PBEPARAM_free (pbe);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								apps/pkcs7.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								apps/pkcs7.c
									
									
									
									
									
								
							@@ -82,15 +82,19 @@ int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
#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;
 | 
			
		||||
	int ret=0;
 | 
			
		||||
	int ret=1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
@@ -98,6 +102,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
@@ -134,11 +141,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			text=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);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
@@ -161,14 +170,18 @@ bad:
 | 
			
		||||
		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");
 | 
			
		||||
#endif
 | 
			
		||||
		ret = 1;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
@@ -301,5 +314,5 @@ end:
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								apps/pkcs8.c
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								apps/pkcs8.c
									
									
									
									
									
								
							@@ -63,7 +63,6 @@
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/pkcs12.h>
 | 
			
		||||
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#define PROG pkcs8_main
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
@@ -86,7 +85,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	EVP_PKEY *pkey=NULL;
 | 
			
		||||
	char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL;
 | 
			
		||||
	int badarg = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
@@ -146,11 +147,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			passargout= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*args,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			engine= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (!strcmp (*args, "-in")) {
 | 
			
		||||
			if (args[1]) {
 | 
			
		||||
				args++;
 | 
			
		||||
@@ -183,11 +186,15 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		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");
 | 
			
		||||
#endif
 | 
			
		||||
		return (1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
@@ -222,13 +229,17 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if (topk8)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_free(in); /* Not needed in this section */
 | 
			
		||||
		pkey = load_key(bio_err, infile, informat, passin, e, "key");
 | 
			
		||||
		pkey = load_key(bio_err, infile, informat, 1,
 | 
			
		||||
			passin, e, "key");
 | 
			
		||||
		if (!pkey) {
 | 
			
		||||
			BIO_free_all(out);
 | 
			
		||||
			return (1);
 | 
			
		||||
		}
 | 
			
		||||
		if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken))) {
 | 
			
		||||
			BIO_printf(bio_err, "Error converting key\n", outfile);
 | 
			
		||||
			BIO_printf(bio_err, "Error converting key\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			EVP_PKEY_free(pkey);
 | 
			
		||||
			BIO_free_all(out);
 | 
			
		||||
			return (1);
 | 
			
		||||
		}
 | 
			
		||||
		if(nocrypt) {
 | 
			
		||||
@@ -238,21 +249,32 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf);
 | 
			
		||||
			else {
 | 
			
		||||
				BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
				PKCS8_PRIV_KEY_INFO_free(p8inf);
 | 
			
		||||
				EVP_PKEY_free(pkey);
 | 
			
		||||
				BIO_free_all(out);
 | 
			
		||||
				return (1);
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			if(passout) p8pass = passout;
 | 
			
		||||
			else {
 | 
			
		||||
				p8pass = pass;
 | 
			
		||||
				EVP_read_pw_string(pass, 50, "Enter Encryption Password:", 1);
 | 
			
		||||
				if (EVP_read_pw_string(pass, sizeof pass, "Enter Encryption Password:", 1))
 | 
			
		||||
				{
 | 
			
		||||
					PKCS8_PRIV_KEY_INFO_free(p8inf);
 | 
			
		||||
					EVP_PKEY_free(pkey);
 | 
			
		||||
					BIO_free_all(out);
 | 
			
		||||
					return (1);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			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",
 | 
			
		||||
								 outfile);
 | 
			
		||||
				BIO_printf(bio_err, "Error encrypting key\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				PKCS8_PRIV_KEY_INFO_free(p8inf);
 | 
			
		||||
				EVP_PKEY_free(pkey);
 | 
			
		||||
				BIO_free_all(out);
 | 
			
		||||
				return (1);
 | 
			
		||||
			}
 | 
			
		||||
			app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
@@ -262,6 +284,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				i2d_PKCS8_bio(out, p8);
 | 
			
		||||
			else {
 | 
			
		||||
				BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
				PKCS8_PRIV_KEY_INFO_free(p8inf);
 | 
			
		||||
				EVP_PKEY_free(pkey);
 | 
			
		||||
				BIO_free_all(out);
 | 
			
		||||
				return (1);
 | 
			
		||||
			}
 | 
			
		||||
			X509_SIG_free(p8);
 | 
			
		||||
@@ -294,27 +319,27 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!p8) {
 | 
			
		||||
			BIO_printf (bio_err, "Error reading key\n", outfile);
 | 
			
		||||
			BIO_printf (bio_err, "Error reading key\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			return (1);
 | 
			
		||||
		}
 | 
			
		||||
		if(passin) p8pass = passin;
 | 
			
		||||
		else {
 | 
			
		||||
			p8pass = pass;
 | 
			
		||||
			EVP_read_pw_string(pass, 50, "Enter Password:", 0);
 | 
			
		||||
			EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0);
 | 
			
		||||
		}
 | 
			
		||||
		p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass));
 | 
			
		||||
		X509_SIG_free(p8);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!p8inf) {
 | 
			
		||||
		BIO_printf(bio_err, "Error decrypting key\n", outfile);
 | 
			
		||||
		BIO_printf(bio_err, "Error decrypting key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		return (1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(pkey = EVP_PKCS82PKEY(p8inf))) {
 | 
			
		||||
		BIO_printf(bio_err, "Error converting key\n", outfile);
 | 
			
		||||
		BIO_printf(bio_err, "Error converting key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		return (1);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								apps/progs.h
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								apps/progs.h
									
									
									
									
									
								
							@@ -17,8 +17,8 @@ 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 ecdsa_main(int argc,char *argv[]);
 | 
			
		||||
extern int ecdsaparam_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[]);
 | 
			
		||||
@@ -37,7 +37,9 @@ extern int pkcs8_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[]);
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
extern int engine_main(int argc,char *argv[]);
 | 
			
		||||
#endif
 | 
			
		||||
extern int ocsp_main(int argc,char *argv[]);
 | 
			
		||||
 | 
			
		||||
#define FUNC_TYPE_GENERAL	1
 | 
			
		||||
@@ -81,11 +83,11 @@ FUNCTION functions[] = {
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"dsaparam",dsaparam_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ecdsa",ecdsa_main},
 | 
			
		||||
#ifndef OPENSSL_NO_EC
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ec",ec_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ecdsaparam",ecdsaparam_main},
 | 
			
		||||
#ifndef OPENSSL_NO_EC
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ecparam",ecparam_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"x509",x509_main},
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
@@ -100,7 +102,9 @@ FUNCTION functions[] = {
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"s_client",s_client_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SPEED
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"speed",speed_main},
 | 
			
		||||
#endif
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"s_time",s_time_main},
 | 
			
		||||
#endif
 | 
			
		||||
@@ -119,7 +123,9 @@ FUNCTION functions[] = {
 | 
			
		||||
	{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},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ocsp",ocsp_main},
 | 
			
		||||
#ifndef OPENSSL_NO_MD2
 | 
			
		||||
	{FUNC_TYPE_MD,"md2",dgst_main},
 | 
			
		||||
 
 | 
			
		||||
@@ -33,8 +33,8 @@ foreach (@ARGV)
 | 
			
		||||
		{ print "#ifndef OPENSSL_NO_RSA\n${str}#endif\n";  }
 | 
			
		||||
	elsif ( ($_ =~ /^dsa$/) || ($_ =~ /^gendsa$/) || ($_ =~ /^dsaparam$/))
 | 
			
		||||
		{ print "#ifndef OPENSSL_NO_DSA\n${str}#endif\n"; }
 | 
			
		||||
	elsif ( ($_ =~ /^ecdsa$/) || ($_ =~ /^ecdsaparam$/))
 | 
			
		||||
		{ print "#ifndef OPENSSL_NO_ECDSA\n${str}#endif\n";}
 | 
			
		||||
	elsif ( ($_ =~ /^ec$/) || ($_ =~ /^ecparam$/))
 | 
			
		||||
		{ print "#ifndef OPENSSL_NO_EC\n${str}#endif\n";}
 | 
			
		||||
	elsif ( ($_ =~ /^dh$/) || ($_ =~ /^gendh$/) || ($_ =~ /^dhparam$/))
 | 
			
		||||
		{ print "#ifndef OPENSSL_NO_DH\n${str}#endif\n"; }
 | 
			
		||||
	elsif ( ($_ =~ /^pkcs12$/))
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								apps/rand.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								apps/rand.c
									
									
									
									
									
								
							@@ -76,7 +76,9 @@ int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int i, r, ret = 1;
 | 
			
		||||
	int badopt;
 | 
			
		||||
	char *outfile = NULL;
 | 
			
		||||
@@ -84,7 +86,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	int base64 = 0;
 | 
			
		||||
	BIO *out = NULL;
 | 
			
		||||
	int num = -1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
@@ -106,6 +110,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(argv[i], "-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if ((argv[i+1] != NULL) && (engine == NULL))
 | 
			
		||||
@@ -113,6 +118,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(argv[i], "-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if ((argv[i+1] != NULL) && (inrand == NULL))
 | 
			
		||||
@@ -150,13 +156,17 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		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");
 | 
			
		||||
#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               - encode output\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	app_RAND_load_file(NULL, bio_err, (inrand != NULL));
 | 
			
		||||
	if (inrand != NULL)
 | 
			
		||||
@@ -195,7 +205,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		int chunk;
 | 
			
		||||
 | 
			
		||||
		chunk = num;
 | 
			
		||||
		if (chunk > sizeof buf)
 | 
			
		||||
		if (chunk > (int)sizeof(buf))
 | 
			
		||||
			chunk = sizeof buf;
 | 
			
		||||
		r = RAND_bytes(buf, chunk);
 | 
			
		||||
		if (r <= 0)
 | 
			
		||||
@@ -213,5 +223,5 @@ err:
 | 
			
		||||
	if (out)
 | 
			
		||||
		BIO_free_all(out);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										310
									
								
								apps/req.c
									
									
									
									
									
								
							
							
						
						
									
										310
									
								
								apps/req.c
									
									
									
									
									
								
							@@ -56,6 +56,12 @@
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code */
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
@@ -73,6 +79,7 @@
 | 
			
		||||
#include <openssl/x509v3.h>
 | 
			
		||||
#include <openssl/objects.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include "../crypto/cryptlib.h"
 | 
			
		||||
 | 
			
		||||
#define SECTION		"req"
 | 
			
		||||
 | 
			
		||||
@@ -112,9 +119,10 @@
 | 
			
		||||
 *		  require.  This format is wrong
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static int make_REQ(X509_REQ *req,EVP_PKEY *pkey,char *dn,int attribs,
 | 
			
		||||
		unsigned long chtype);
 | 
			
		||||
static int build_subject(X509_REQ *req, char *subj, unsigned long chtype);
 | 
			
		||||
static int make_REQ(X509_REQ *req,EVP_PKEY *pkey,char *dn,int mutlirdn,
 | 
			
		||||
		int attribs,unsigned long chtype);
 | 
			
		||||
static int build_subject(X509_REQ *req, char *subj, unsigned long chtype,
 | 
			
		||||
		int multirdn);
 | 
			
		||||
static int prompt_info(X509_REQ *req,
 | 
			
		||||
		STACK_OF(CONF_VALUE) *dn_sk, char *dn_sect,
 | 
			
		||||
		STACK_OF(CONF_VALUE) *attr_sk, char *attr_sect, int attribs,
 | 
			
		||||
@@ -126,15 +134,14 @@ static int add_attribute_object(X509_REQ *req, char *text,
 | 
			
		||||
				char *def, char *value, int nid, int n_min,
 | 
			
		||||
				int n_max, unsigned long chtype);
 | 
			
		||||
static int add_DN_object(X509_NAME *n, char *text, char *def, char *value,
 | 
			
		||||
	int nid,int n_min,int n_max, unsigned long chtype);
 | 
			
		||||
	int nid,int n_min,int n_max, unsigned long chtype, int mval);
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
static void MS_CALLBACK req_cb(int p,int n,void *arg);
 | 
			
		||||
static int MS_CALLBACK req_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
#endif
 | 
			
		||||
static int req_check_len(int len,int n_min,int n_max);
 | 
			
		||||
static int check_end(char *str, char *end);
 | 
			
		||||
#ifndef MONOLITH
 | 
			
		||||
static char *default_config_file=NULL;
 | 
			
		||||
static CONF *config=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
static CONF *req_conf=NULL;
 | 
			
		||||
static int batch=0;
 | 
			
		||||
@@ -142,7 +149,7 @@ static int batch=0;
 | 
			
		||||
#define TYPE_RSA	1
 | 
			
		||||
#define TYPE_DSA	2
 | 
			
		||||
#define TYPE_DH		3
 | 
			
		||||
#define TYPE_ECDSA	4
 | 
			
		||||
#define TYPE_EC		4
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
@@ -153,9 +160,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	DSA *dsa_params=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
	ECDSA *ecdsa_params = NULL;
 | 
			
		||||
	EC_KEY *ec_params = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	unsigned long nmflag = 0;
 | 
			
		||||
	unsigned long nmflag = 0, reqflag = 0;
 | 
			
		||||
	int ex=1,x509=0,days=30;
 | 
			
		||||
	X509 *x509ss=NULL;
 | 
			
		||||
	X509_REQ *req=NULL;
 | 
			
		||||
@@ -166,7 +173,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	int informat,outformat,verify=0,noout=0,text=0,keyform=FORMAT_PEM;
 | 
			
		||||
	int nodes=0,kludge=0,newhdr=0,subject=0,pubkey=0;
 | 
			
		||||
	char *infile,*outfile,*prog,*keyfile=NULL,*template=NULL,*keyout=NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	char *extensions = NULL;
 | 
			
		||||
	char *req_exts = NULL;
 | 
			
		||||
	const EVP_CIPHER *cipher=NULL;
 | 
			
		||||
@@ -177,10 +186,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	char *passin = NULL, *passout = NULL;
 | 
			
		||||
	char *p;
 | 
			
		||||
	char *subj = NULL;
 | 
			
		||||
	int multirdn = 0;
 | 
			
		||||
	const EVP_MD *md_alg=NULL,*digest=EVP_md5();
 | 
			
		||||
	unsigned long chtype = MBSTRING_ASC;
 | 
			
		||||
#ifndef MONOLITH
 | 
			
		||||
	MS_STATIC char config_name[256];
 | 
			
		||||
	char *to_free;
 | 
			
		||||
	long errline;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -214,11 +224,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-key") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
@@ -328,36 +340,41 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			else 
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
				if (strncmp("ecdsa:",p,4) == 0)
 | 
			
		||||
				if (strncmp("ec:",p,3) == 0)
 | 
			
		||||
				{
 | 
			
		||||
				X509 *xtmp=NULL;
 | 
			
		||||
				EVP_PKEY *dtmp;
 | 
			
		||||
 | 
			
		||||
				pkey_type=TYPE_ECDSA;
 | 
			
		||||
				p+=6;
 | 
			
		||||
				pkey_type=TYPE_EC;
 | 
			
		||||
				p+=3;
 | 
			
		||||
				if ((in=BIO_new_file(p,"r")) == NULL)
 | 
			
		||||
					{
 | 
			
		||||
					perror(p);
 | 
			
		||||
					goto end;
 | 
			
		||||
					}
 | 
			
		||||
				if ((ecdsa_params = PEM_read_bio_ECDSAParameters(in, NULL, NULL, NULL)) == NULL)
 | 
			
		||||
				if ((ec_params = EC_KEY_new()) == NULL)
 | 
			
		||||
					goto end;
 | 
			
		||||
				if ((ec_params->group = PEM_read_bio_ECPKParameters(in, NULL, NULL, NULL)) == NULL)
 | 
			
		||||
					{
 | 
			
		||||
					if (ec_params)
 | 
			
		||||
						EC_KEY_free(ec_params);
 | 
			
		||||
					ERR_clear_error();
 | 
			
		||||
					(void)BIO_reset(in);
 | 
			
		||||
					if ((xtmp=PEM_read_bio_X509(in,NULL,NULL,NULL)) == NULL)
 | 
			
		||||
						{	
 | 
			
		||||
						BIO_printf(bio_err,"unable to load ECDSA parameters from file\n");
 | 
			
		||||
						BIO_printf(bio_err,"unable to load EC parameters from file\n");
 | 
			
		||||
						goto end;
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
					if ((dtmp=X509_get_pubkey(xtmp)) == NULL) goto end;
 | 
			
		||||
					if (dtmp->type == EVP_PKEY_ECDSA)
 | 
			
		||||
						ecdsa_params = ECDSAParameters_dup(dtmp->pkey.ecdsa);
 | 
			
		||||
					if ((dtmp=X509_get_pubkey(xtmp))==NULL)
 | 
			
		||||
						goto end;
 | 
			
		||||
					if (dtmp->type == EVP_PKEY_EC)
 | 
			
		||||
						ec_params = ECParameters_dup(dtmp->pkey.eckey);
 | 
			
		||||
					EVP_PKEY_free(dtmp);
 | 
			
		||||
					X509_free(xtmp);
 | 
			
		||||
					if (ecdsa_params == NULL)
 | 
			
		||||
					if (ec_params == NULL)
 | 
			
		||||
						{
 | 
			
		||||
						BIO_printf(bio_err,"Certificate does not contain ECDSA parameters\n");
 | 
			
		||||
						BIO_printf(bio_err,"Certificate does not contain EC parameters\n");
 | 
			
		||||
						goto end;
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
@@ -365,16 +382,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				BIO_free(in);
 | 
			
		||||
				in=NULL;
 | 
			
		||||
				
 | 
			
		||||
				{
 | 
			
		||||
				BIGNUM *order = BN_new();
 | 
			
		||||
				
 | 
			
		||||
				if (!order)
 | 
			
		||||
					goto end;
 | 
			
		||||
				if (!EC_GROUP_get_order(ecdsa_params->group, order, NULL))
 | 
			
		||||
					goto end;
 | 
			
		||||
				newkey = BN_num_bits(order);
 | 
			
		||||
				BN_free(order);
 | 
			
		||||
				}
 | 
			
		||||
				newkey = EC_GROUP_get_degree(ec_params->group);
 | 
			
		||||
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
@@ -387,7 +395,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
#endif
 | 
			
		||||
				pkey_type=TYPE_RSA;
 | 
			
		||||
				{
 | 
			
		||||
				goto bad;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			newreq=1;
 | 
			
		||||
			}
 | 
			
		||||
@@ -412,6 +422,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			if (!set_name_ex(&nmflag, *(++argv))) goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-reqopt") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			if (!set_cert_ex(&reqflag, *(++argv))) goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-subject") == 0)
 | 
			
		||||
			subject=1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
@@ -427,6 +442,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			subj= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-multivalue-rdn") == 0)
 | 
			
		||||
			multirdn=1;
 | 
			
		||||
		else if (strcmp(*argv,"-days") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
@@ -479,7 +496,9 @@ bad:
 | 
			
		||||
		BIO_printf(bio_err," -verify        verify signature on REQ\n");
 | 
			
		||||
		BIO_printf(bio_err," -modulus       RSA modulus\n");
 | 
			
		||||
		BIO_printf(bio_err," -nodes         don't encrypt the output key\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," -engine e      use engine e, possibly a hardware device\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -subject       output the request's subject\n");
 | 
			
		||||
		BIO_printf(bio_err," -passin        private key password source\n");
 | 
			
		||||
		BIO_printf(bio_err," -key file      use the private key contained in file\n");
 | 
			
		||||
@@ -490,10 +509,13 @@ bad:
 | 
			
		||||
		BIO_printf(bio_err,"                the random number generator\n");
 | 
			
		||||
		BIO_printf(bio_err," -newkey rsa:bits generate a new RSA key of 'bits' in size\n");
 | 
			
		||||
		BIO_printf(bio_err," -newkey dsa:file generate a new DSA key, parameters taken from CA in 'file'\n");
 | 
			
		||||
		BIO_printf(bio_err," -newkey ecdsa:file generate a new ECDSA key, parameters taken from CA in 'file'\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
		BIO_printf(bio_err," -newkey ec:file generate a new EC key, parameters taken from CA in 'file'\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -[digest]      Digest to sign with (md5, sha1, md2, mdc2, md4)\n");
 | 
			
		||||
		BIO_printf(bio_err," -config file   request template file.\n");
 | 
			
		||||
		BIO_printf(bio_err," -subj arg      set or modify request subject\n");
 | 
			
		||||
		BIO_printf(bio_err," -multivalue-rdn enable support for multivalued RDNs\n");
 | 
			
		||||
		BIO_printf(bio_err," -new           new request.\n");
 | 
			
		||||
		BIO_printf(bio_err," -batch         do not ask anything during request generation\n");
 | 
			
		||||
		BIO_printf(bio_err," -x509          output a x509 structure instead of a cert. req.\n");
 | 
			
		||||
@@ -505,6 +527,8 @@ bad:
 | 
			
		||||
		BIO_printf(bio_err," -extensions .. specify certificate extension section (override value in config file)\n");
 | 
			
		||||
		BIO_printf(bio_err," -reqexts ..    specify request extension section (override value in config file)\n");
 | 
			
		||||
		BIO_printf(bio_err," -utf8          input characters are UTF8 (default ASCII)\n");
 | 
			
		||||
		BIO_printf(bio_err," -nameopt arg    - various certificate name options\n");
 | 
			
		||||
		BIO_printf(bio_err," -reqopt arg    - various request text options\n\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -520,14 +544,7 @@ bad:
 | 
			
		||||
	if (p == NULL)
 | 
			
		||||
		p=getenv("SSLEAY_CONF");
 | 
			
		||||
	if (p == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		strcpy(config_name,X509_get_default_cert_area());
 | 
			
		||||
#ifndef OPENSSL_SYS_VMS
 | 
			
		||||
		strcat(config_name,"/");
 | 
			
		||||
#endif
 | 
			
		||||
		strcat(config_name,OPENSSL_CONF);
 | 
			
		||||
		p=config_name;
 | 
			
		||||
		}
 | 
			
		||||
		p=to_free=make_config_name();
 | 
			
		||||
	default_config_file=p;
 | 
			
		||||
	config=NCONF_new(NULL);
 | 
			
		||||
	i=NCONF_load(config, p, &errline);
 | 
			
		||||
@@ -535,7 +552,7 @@ bad:
 | 
			
		||||
 | 
			
		||||
	if (template != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		long errline;
 | 
			
		||||
		long errline = -1;
 | 
			
		||||
 | 
			
		||||
		if( verbose )
 | 
			
		||||
			BIO_printf(bio_err,"Using configuration from %s\n",template);
 | 
			
		||||
@@ -674,11 +691,13 @@ bad:
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (keyfile != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		pkey = load_key(bio_err, keyfile, keyform, passin, e,
 | 
			
		||||
		pkey = load_key(bio_err, keyfile, keyform, 0, passin, e,
 | 
			
		||||
			"Private Key");
 | 
			
		||||
		if (!pkey)
 | 
			
		||||
			{
 | 
			
		||||
@@ -686,7 +705,8 @@ bad:
 | 
			
		||||
			   message */
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (EVP_PKEY_type(pkey->type) == EVP_PKEY_DSA || EVP_PKEY_type(pkey->type) == EVP_PKEY_ECDSA)
 | 
			
		||||
		if (EVP_PKEY_type(pkey->type) == EVP_PKEY_DSA || 
 | 
			
		||||
			EVP_PKEY_type(pkey->type) == EVP_PKEY_EC)
 | 
			
		||||
			{
 | 
			
		||||
			char *randfile = NCONF_get_string(req_conf,SECTION,"RANDFILE");
 | 
			
		||||
			if (randfile == NULL)
 | 
			
		||||
@@ -697,6 +717,7 @@ bad:
 | 
			
		||||
 | 
			
		||||
	if (newreq && (pkey == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		BN_GENCB cb;
 | 
			
		||||
		char *randfile = NCONF_get_string(req_conf,SECTION,"RANDFILE");
 | 
			
		||||
		if (randfile == NULL)
 | 
			
		||||
			ERR_clear_error();
 | 
			
		||||
@@ -711,25 +732,29 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if (newkey < MIN_KEY_LENGTH && (pkey_type == TYPE_RSA || pkey_type == TYPE_DSA))
 | 
			
		||||
		/* TODO: appropriate minimal keylength for the different algorithm (esp. ECDSA) */
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"private key length is too short,\n");
 | 
			
		||||
			BIO_printf(bio_err,"it needs to be at least %d bits, not %d\n",MIN_KEY_LENGTH,newkey);
 | 
			
		||||
			BIO_printf(bio_err,"it needs to be at least %d bits, not %ld\n",MIN_KEY_LENGTH,newkey);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		BIO_printf(bio_err,"Generating a %d bit %s private key\n",
 | 
			
		||||
			newkey,(pkey_type == TYPE_RSA)?"RSA":(pkey_type == TYPE_DSA)?"DSA":"ECDSA");
 | 
			
		||||
		BIO_printf(bio_err,"Generating a %ld bit %s private key\n",
 | 
			
		||||
			newkey,(pkey_type == TYPE_RSA)?"RSA":
 | 
			
		||||
			(pkey_type == TYPE_DSA)?"DSA":"EC");
 | 
			
		||||
 | 
			
		||||
		if ((pkey=EVP_PKEY_new()) == NULL) goto end;
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
		BN_GENCB_set(&cb, req_cb, bio_err);
 | 
			
		||||
		if (pkey_type == TYPE_RSA)
 | 
			
		||||
			{
 | 
			
		||||
			if (!EVP_PKEY_assign_RSA(pkey,
 | 
			
		||||
				RSA_generate_key(newkey,0x10001,
 | 
			
		||||
					req_cb,bio_err)))
 | 
			
		||||
			RSA *rsa = RSA_new();
 | 
			
		||||
			if(!rsa || !RSA_generate_key_ex(rsa, newkey, 0x10001, &cb) ||
 | 
			
		||||
					!EVP_PKEY_assign_RSA(pkey, rsa))
 | 
			
		||||
				{
 | 
			
		||||
				if(rsa) RSA_free(rsa);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
@@ -741,11 +766,12 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
			if (pkey_type == TYPE_ECDSA)
 | 
			
		||||
			if (pkey_type == TYPE_EC)
 | 
			
		||||
			{
 | 
			
		||||
			if (!ECDSA_generate_key(ecdsa_params)) goto end;
 | 
			
		||||
			if (!EVP_PKEY_assign_ECDSA(pkey, ecdsa_params)) goto end;
 | 
			
		||||
			ecdsa_params = NULL;
 | 
			
		||||
			if (!EC_KEY_generate_key(ec_params)) goto end;
 | 
			
		||||
			if (!EVP_PKEY_assign_EC_KEY(pkey, ec_params)) 
 | 
			
		||||
				goto end;
 | 
			
		||||
			ec_params = NULL;
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -855,7 +881,7 @@ loop:
 | 
			
		||||
			digest=EVP_dss1();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
		if (pkey->type == EVP_PKEY_ECDSA)
 | 
			
		||||
		if (pkey->type == EVP_PKEY_EC)
 | 
			
		||||
			digest=EVP_ecdsa();
 | 
			
		||||
#endif
 | 
			
		||||
		if (req == NULL)
 | 
			
		||||
@@ -866,7 +892,7 @@ loop:
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			i=make_REQ(req,pkey,subj,!x509, chtype);
 | 
			
		||||
			i=make_REQ(req,pkey,subj,multirdn,!x509, chtype);
 | 
			
		||||
			subj=NULL; /* done processing '-subj' option */
 | 
			
		||||
			if ((kludge > 0) && !sk_X509_ATTRIBUTE_num(req->req_info->attributes))
 | 
			
		||||
				{
 | 
			
		||||
@@ -886,7 +912,7 @@ loop:
 | 
			
		||||
			if ((x509ss=X509_new()) == NULL) goto end;
 | 
			
		||||
 | 
			
		||||
			/* Set version to V3 */
 | 
			
		||||
			if(!X509_set_version(x509ss, 2)) goto end;
 | 
			
		||||
			if(extensions && !X509_set_version(x509ss, 2)) goto end;
 | 
			
		||||
			if (serial)
 | 
			
		||||
				{
 | 
			
		||||
				if (!X509_set_serialNumber(x509ss, serial)) goto end;
 | 
			
		||||
@@ -959,7 +985,7 @@ loop:
 | 
			
		||||
			print_name(bio_err, "old subject=", X509_REQ_get_subject_name(req), nmflag);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if (build_subject(req, subj, chtype) == 0)
 | 
			
		||||
		if (build_subject(req, subj, chtype, multirdn) == 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "ERROR: cannot modify subject\n");
 | 
			
		||||
			ex=1;
 | 
			
		||||
@@ -1050,9 +1076,9 @@ loop:
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		if (x509)
 | 
			
		||||
			X509_print(out,x509ss);
 | 
			
		||||
			X509_print_ex(out, x509ss, nmflag, reqflag);
 | 
			
		||||
		else	
 | 
			
		||||
			X509_REQ_print(out,req);
 | 
			
		||||
			X509_REQ_print_ex(out, req, nmflag, reqflag);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if(subject) 
 | 
			
		||||
@@ -1122,6 +1148,10 @@ loop:
 | 
			
		||||
		}
 | 
			
		||||
	ex=0;
 | 
			
		||||
end:
 | 
			
		||||
#ifndef MONOLITH
 | 
			
		||||
	if(to_free)
 | 
			
		||||
		OPENSSL_free(to_free);
 | 
			
		||||
#endif
 | 
			
		||||
	if (ex)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
@@ -1140,14 +1170,14 @@ end:
 | 
			
		||||
	if (dsa_params != NULL) DSA_free(dsa_params);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
	if (ecdsa_params != NULL) ECDSA_free(ecdsa_params);
 | 
			
		||||
	if (ec_params != NULL) EC_KEY_free(ec_params);
 | 
			
		||||
#endif
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ex);
 | 
			
		||||
	OPENSSL_EXIT(ex);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int make_REQ(X509_REQ *req, EVP_PKEY *pkey, char *subj, int attribs,
 | 
			
		||||
			unsigned long chtype)
 | 
			
		||||
static int make_REQ(X509_REQ *req, EVP_PKEY *pkey, char *subj, int multirdn,
 | 
			
		||||
			int attribs, unsigned long chtype)
 | 
			
		||||
	{
 | 
			
		||||
	int ret=0,i;
 | 
			
		||||
	char no_prompt = 0;
 | 
			
		||||
@@ -1197,7 +1227,7 @@ static int make_REQ(X509_REQ *req, EVP_PKEY *pkey, char *subj, int attribs,
 | 
			
		||||
	else 
 | 
			
		||||
		{
 | 
			
		||||
		if (subj)
 | 
			
		||||
			i = build_subject(req, subj, chtype);
 | 
			
		||||
			i = build_subject(req, subj, chtype, multirdn);
 | 
			
		||||
		else
 | 
			
		||||
			i = prompt_info(req, dn_sk, dn_sect, attr_sk, attr_sect, attribs, chtype);
 | 
			
		||||
		}
 | 
			
		||||
@@ -1210,64 +1240,22 @@ err:
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int build_subject(X509_REQ *req, char *subject, unsigned long chtype)
 | 
			
		||||
/*
 | 
			
		||||
 * subject is expected to be in the format /type0=value0/type1=value1/type2=...
 | 
			
		||||
 * where characters may be escaped by \
 | 
			
		||||
 */
 | 
			
		||||
static int build_subject(X509_REQ *req, char *subject, unsigned long chtype, int multirdn)
 | 
			
		||||
	{
 | 
			
		||||
	X509_NAME *n = NULL;
 | 
			
		||||
	X509_NAME *n;
 | 
			
		||||
 | 
			
		||||
	int i, nid, ne_num=0;
 | 
			
		||||
	if (!(n = parse_name(subject, chtype, multirdn)))
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	char *ne_name = NULL;
 | 
			
		||||
	char *ne_value = NULL;
 | 
			
		||||
 | 
			
		||||
	char *tmp = NULL;
 | 
			
		||||
	char *p[2];
 | 
			
		||||
 | 
			
		||||
	char *str_list[256];
 | 
			
		||||
       
 | 
			
		||||
	p[0] = ",/";
 | 
			
		||||
        p[1] = "=";
 | 
			
		||||
 | 
			
		||||
	n = X509_NAME_new();
 | 
			
		||||
 | 
			
		||||
	tmp = strtok(subject, p[0]);
 | 
			
		||||
	while((tmp != NULL) && (ne_num < (sizeof str_list/sizeof *str_list)))
 | 
			
		||||
		{
 | 
			
		||||
		char *token = tmp;
 | 
			
		||||
 | 
			
		||||
		while (token[0] == ' ')
 | 
			
		||||
			token++;
 | 
			
		||||
		str_list[ne_num] = token;
 | 
			
		||||
 | 
			
		||||
		tmp = strtok(NULL, p[0]);
 | 
			
		||||
		ne_num++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	for(i = 0; i < ne_num; i++)
 | 
			
		||||
		{
 | 
			
		||||
		ne_name  = strtok(str_list[i], p[1]);
 | 
			
		||||
		ne_value = strtok(NULL, p[1]);
 | 
			
		||||
 | 
			
		||||
		if ((nid=OBJ_txt2nid(ne_name)) == NID_undef)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Subject Attribute %s has no known NID, skipped\n", ne_name);
 | 
			
		||||
			continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if (ne_value == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "No value provided for Subject Attribute %s, skipped\n", ne_name);
 | 
			
		||||
			continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if (!X509_NAME_add_entry_by_NID(n, nid, chtype, (unsigned char*)ne_value, -1,-1,0))
 | 
			
		||||
	if (!X509_REQ_set_subject_name(req, n))
 | 
			
		||||
		{
 | 
			
		||||
		X509_NAME_free(n);
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (!X509_REQ_set_subject_name(req, n))
 | 
			
		||||
		return 0;
 | 
			
		||||
	X509_NAME_free(n);
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
@@ -1281,7 +1269,7 @@ static int prompt_info(X509_REQ *req,
 | 
			
		||||
	int i;
 | 
			
		||||
	char *p,*q;
 | 
			
		||||
	char buf[100];
 | 
			
		||||
	int nid;
 | 
			
		||||
	int nid, mval;
 | 
			
		||||
	long n_min,n_max;
 | 
			
		||||
	char *type,*def,*value;
 | 
			
		||||
	CONF_VALUE *v;
 | 
			
		||||
@@ -1324,32 +1312,51 @@ start:		for (;;)
 | 
			
		||||
					if(*p) type = p;
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			if (*type == '+')
 | 
			
		||||
				{
 | 
			
		||||
				mval = -1;
 | 
			
		||||
				type++;
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				mval = 0;
 | 
			
		||||
			/* If OBJ not recognised ignore it */
 | 
			
		||||
			if ((nid=OBJ_txt2nid(type)) == NID_undef) goto start;
 | 
			
		||||
			sprintf(buf,"%s_default",v->name);
 | 
			
		||||
			if (BIO_snprintf(buf,sizeof buf,"%s_default",v->name)
 | 
			
		||||
				>= (int)sizeof(buf))
 | 
			
		||||
			   {
 | 
			
		||||
			   BIO_printf(bio_err,"Name '%s' too long\n",v->name);
 | 
			
		||||
			   return 0;
 | 
			
		||||
			   }
 | 
			
		||||
 | 
			
		||||
			if ((def=NCONF_get_string(req_conf,dn_sect,buf)) == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				ERR_clear_error();
 | 
			
		||||
				def="";
 | 
			
		||||
				}
 | 
			
		||||
				
 | 
			
		||||
			sprintf(buf,"%s_value",v->name);
 | 
			
		||||
			BIO_snprintf(buf,sizeof buf,"%s_value",v->name);
 | 
			
		||||
			if ((value=NCONF_get_string(req_conf,dn_sect,buf)) == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				ERR_clear_error();
 | 
			
		||||
				value=NULL;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			sprintf(buf,"%s_min",v->name);
 | 
			
		||||
			BIO_snprintf(buf,sizeof buf,"%s_min",v->name);
 | 
			
		||||
			if (!NCONF_get_number(req_conf,dn_sect,buf, &n_min))
 | 
			
		||||
				{
 | 
			
		||||
				ERR_clear_error();
 | 
			
		||||
				n_min = -1;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			sprintf(buf,"%s_max",v->name);
 | 
			
		||||
			BIO_snprintf(buf,sizeof buf,"%s_max",v->name);
 | 
			
		||||
			if (!NCONF_get_number(req_conf,dn_sect,buf, &n_max))
 | 
			
		||||
				{
 | 
			
		||||
				ERR_clear_error();
 | 
			
		||||
				n_max = -1;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			if (!add_DN_object(subj,v->value,def,value,nid,
 | 
			
		||||
				n_min,n_max, chtype))
 | 
			
		||||
				n_min,n_max, chtype, mval))
 | 
			
		||||
				return 0;
 | 
			
		||||
			}
 | 
			
		||||
		if (X509_NAME_entry_count(subj) == 0)
 | 
			
		||||
@@ -1379,7 +1386,13 @@ start2:			for (;;)
 | 
			
		||||
				if ((nid=OBJ_txt2nid(type)) == NID_undef)
 | 
			
		||||
					goto start2;
 | 
			
		||||
 | 
			
		||||
				sprintf(buf,"%s_default",type);
 | 
			
		||||
				if (BIO_snprintf(buf,sizeof buf,"%s_default",type)
 | 
			
		||||
					>= (int)sizeof(buf))
 | 
			
		||||
				   {
 | 
			
		||||
				   BIO_printf(bio_err,"Name '%s' too long\n",v->name);
 | 
			
		||||
				   return 0;
 | 
			
		||||
				   }
 | 
			
		||||
 | 
			
		||||
				if ((def=NCONF_get_string(req_conf,attr_sect,buf))
 | 
			
		||||
					== NULL)
 | 
			
		||||
					{
 | 
			
		||||
@@ -1388,7 +1401,7 @@ start2:			for (;;)
 | 
			
		||||
					}
 | 
			
		||||
				
 | 
			
		||||
				
 | 
			
		||||
				sprintf(buf,"%s_value",type);
 | 
			
		||||
				BIO_snprintf(buf,sizeof buf,"%s_value",type);
 | 
			
		||||
				if ((value=NCONF_get_string(req_conf,attr_sect,buf))
 | 
			
		||||
					== NULL)
 | 
			
		||||
					{
 | 
			
		||||
@@ -1396,11 +1409,11 @@ start2:			for (;;)
 | 
			
		||||
					value=NULL;
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
				sprintf(buf,"%s_min",type);
 | 
			
		||||
				BIO_snprintf(buf,sizeof buf,"%s_min",type);
 | 
			
		||||
				if (!NCONF_get_number(req_conf,attr_sect,buf, &n_min))
 | 
			
		||||
					n_min = -1;
 | 
			
		||||
 | 
			
		||||
				sprintf(buf,"%s_max",type);
 | 
			
		||||
				BIO_snprintf(buf,sizeof buf,"%s_max",type);
 | 
			
		||||
				if (!NCONF_get_number(req_conf,attr_sect,buf, &n_max))
 | 
			
		||||
					n_max = -1;
 | 
			
		||||
 | 
			
		||||
@@ -1433,6 +1446,7 @@ static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *dn_sk,
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < sk_CONF_VALUE_num(dn_sk); i++)
 | 
			
		||||
		{
 | 
			
		||||
		int mval;
 | 
			
		||||
		v=sk_CONF_VALUE_value(dn_sk,i);
 | 
			
		||||
		p=q=NULL;
 | 
			
		||||
		type=v->name;
 | 
			
		||||
@@ -1449,8 +1463,19 @@ static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *dn_sk,
 | 
			
		||||
				if(*p) type = p;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
#ifndef CHARSET_EBCDIC
 | 
			
		||||
		if (*p == '+')
 | 
			
		||||
#else
 | 
			
		||||
		if (*p == os_toascii['+'])
 | 
			
		||||
#endif
 | 
			
		||||
			{
 | 
			
		||||
			p++;
 | 
			
		||||
			mval = -1;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			mval = 0;
 | 
			
		||||
		if (!X509_NAME_add_entry_by_txt(subj,type, chtype,
 | 
			
		||||
				(unsigned char *) v->value,-1,-1,0)) return 0;
 | 
			
		||||
				(unsigned char *) v->value,-1,-1,mval)) return 0;
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -1473,7 +1498,7 @@ static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *dn_sk,
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int add_DN_object(X509_NAME *n, char *text, char *def, char *value,
 | 
			
		||||
	     int nid, int n_min, int n_max, unsigned long chtype)
 | 
			
		||||
	     int nid, int n_min, int n_max, unsigned long chtype, int mval)
 | 
			
		||||
	{
 | 
			
		||||
	int i,ret=0;
 | 
			
		||||
	MS_STATIC char buf[1024];
 | 
			
		||||
@@ -1482,8 +1507,8 @@ start:
 | 
			
		||||
	(void)BIO_flush(bio_err);
 | 
			
		||||
	if(value != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		strcpy(buf,value);
 | 
			
		||||
		strcat(buf,"\n");
 | 
			
		||||
		BUF_strlcpy(buf,value,sizeof buf);
 | 
			
		||||
		BUF_strlcat(buf,"\n",sizeof buf);
 | 
			
		||||
		BIO_printf(bio_err,"%s\n",value);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
@@ -1491,7 +1516,7 @@ start:
 | 
			
		||||
		buf[0]='\0';
 | 
			
		||||
		if (!batch)
 | 
			
		||||
			{
 | 
			
		||||
			fgets(buf,1024,stdin);
 | 
			
		||||
			fgets(buf,sizeof buf,stdin);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
@@ -1505,8 +1530,8 @@ start:
 | 
			
		||||
		{
 | 
			
		||||
		if ((def == NULL) || (def[0] == '\0'))
 | 
			
		||||
			return(1);
 | 
			
		||||
		strcpy(buf,def);
 | 
			
		||||
		strcat(buf,"\n");
 | 
			
		||||
		BUF_strlcpy(buf,def,sizeof buf);
 | 
			
		||||
		BUF_strlcat(buf,"\n",sizeof buf);
 | 
			
		||||
		}
 | 
			
		||||
	else if ((buf[0] == '.') && (buf[1] == '\n')) return(1);
 | 
			
		||||
 | 
			
		||||
@@ -1522,7 +1547,7 @@ start:
 | 
			
		||||
#endif
 | 
			
		||||
	if(!req_check_len(i, n_min, n_max)) goto start;
 | 
			
		||||
	if (!X509_NAME_add_entry_by_NID(n,nid, chtype,
 | 
			
		||||
				(unsigned char *) buf, -1,-1,0)) goto err;
 | 
			
		||||
				(unsigned char *) buf, -1,-1,mval)) goto err;
 | 
			
		||||
	ret=1;
 | 
			
		||||
err:
 | 
			
		||||
	return(ret);
 | 
			
		||||
@@ -1540,8 +1565,8 @@ start:
 | 
			
		||||
	(void)BIO_flush(bio_err);
 | 
			
		||||
	if (value != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		strcpy(buf,value);
 | 
			
		||||
		strcat(buf,"\n");
 | 
			
		||||
		BUF_strlcpy(buf,value,sizeof buf);
 | 
			
		||||
		BUF_strlcat(buf,"\n",sizeof buf);
 | 
			
		||||
		BIO_printf(bio_err,"%s\n",value);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
@@ -1549,7 +1574,7 @@ start:
 | 
			
		||||
		buf[0]='\0';
 | 
			
		||||
		if (!batch)
 | 
			
		||||
			{
 | 
			
		||||
			fgets(buf,1024,stdin);
 | 
			
		||||
			fgets(buf,sizeof buf,stdin);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
@@ -1563,8 +1588,8 @@ start:
 | 
			
		||||
		{
 | 
			
		||||
		if ((def == NULL) || (def[0] == '\0'))
 | 
			
		||||
			return(1);
 | 
			
		||||
		strcpy(buf,def);
 | 
			
		||||
		strcat(buf,"\n");
 | 
			
		||||
		BUF_strlcpy(buf,def,sizeof buf);
 | 
			
		||||
		BUF_strlcat(buf,"\n",sizeof buf);
 | 
			
		||||
		}
 | 
			
		||||
	else if ((buf[0] == '.') && (buf[1] == '\n')) return(1);
 | 
			
		||||
 | 
			
		||||
@@ -1593,7 +1618,7 @@ err:
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
static void MS_CALLBACK req_cb(int p, int n, void *arg)
 | 
			
		||||
static int MS_CALLBACK req_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
 | 
			
		||||
@@ -1601,11 +1626,12 @@ static void MS_CALLBACK req_cb(int p, int n, void *arg)
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write((BIO *)arg,&c,1);
 | 
			
		||||
	(void)BIO_flush((BIO *)arg);
 | 
			
		||||
	BIO_write(cb->arg,&c,1);
 | 
			
		||||
	(void)BIO_flush(cb->arg);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								apps/rsa.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								apps/rsa.c
									
									
									
									
									
								
							@@ -104,7 +104,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	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;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
@@ -156,11 +158,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			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)
 | 
			
		||||
@@ -212,13 +216,17 @@ bad:
 | 
			
		||||
		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();
 | 
			
		||||
 | 
			
		||||
#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");
 | 
			
		||||
@@ -238,12 +246,12 @@ bad:
 | 
			
		||||
		if (pubin)
 | 
			
		||||
			pkey = load_pubkey(bio_err, infile,
 | 
			
		||||
				(informat == FORMAT_NETSCAPE && sgckey ?
 | 
			
		||||
					FORMAT_IISSGC : informat),
 | 
			
		||||
					FORMAT_IISSGC : informat), 1,
 | 
			
		||||
				passin, e, "Public Key");
 | 
			
		||||
		else
 | 
			
		||||
			pkey = load_key(bio_err, infile,
 | 
			
		||||
				(informat == FORMAT_NETSCAPE && sgckey ?
 | 
			
		||||
					FORMAT_IISSGC : informat),
 | 
			
		||||
					FORMAT_IISSGC : informat), 1,
 | 
			
		||||
				passin, e, "Private Key");
 | 
			
		||||
 | 
			
		||||
		if (pkey != NULL)
 | 
			
		||||
@@ -369,7 +377,7 @@ end:
 | 
			
		||||
	if(passin) OPENSSL_free(passin);
 | 
			
		||||
	if(passout) OPENSSL_free(passout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_RSA */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -85,7 +85,9 @@ 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;
 | 
			
		||||
@@ -95,6 +97,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	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;
 | 
			
		||||
 | 
			
		||||
@@ -122,12 +125,17 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		} else if(!strcmp(*argv, "-inkey")) {
 | 
			
		||||
			if (--argc < 1) badarg = 1;
 | 
			
		||||
			keyfile = *(++argv);
 | 
			
		||||
		} else if (!strcmp(*argv,"-passin")) {
 | 
			
		||||
			if (--argc < 1) badarg = 1;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
		} else if (strcmp(*argv,"-keyform") == 0) {
 | 
			
		||||
			if (--argc < 1) badarg = 1;
 | 
			
		||||
			keyform=str2fmt(*(++argv));
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		} else if(!strcmp(*argv, "-engine")) {
 | 
			
		||||
			if (--argc < 1) badarg = 1;
 | 
			
		||||
			engine = *(++argv);
 | 
			
		||||
#endif
 | 
			
		||||
		} else if(!strcmp(*argv, "-pubin")) {
 | 
			
		||||
			key_type = KEY_PUBKEY;
 | 
			
		||||
		} else if(!strcmp(*argv, "-certin")) {
 | 
			
		||||
@@ -162,19 +170,25 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		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,
 | 
			
		||||
			NULL, e, "Private Key");
 | 
			
		||||
		pkey = load_key(bio_err, keyfile, keyform, 0,
 | 
			
		||||
			passin, e, "Private Key");
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
		case KEY_PUBKEY:
 | 
			
		||||
		pkey = load_pubkey(bio_err, keyfile, keyform,
 | 
			
		||||
		pkey = load_pubkey(bio_err, keyfile, keyform, 0,
 | 
			
		||||
			NULL, e, "Public Key");
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
@@ -284,6 +298,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -305,7 +320,10 @@ static void usage()
 | 
			
		||||
	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
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -108,10 +108,19 @@
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if !defined(OPENSSL_SYS_NETWARE)  /* conflicts with winsock2 stuff on netware */
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
 | 
			
		||||
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
 | 
			
		||||
#include <conio.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_SYS_MSDOS
 | 
			
		||||
#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 */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								apps/s_cb.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								apps/s_cb.c
									
									
									
									
									
								
							@@ -134,7 +134,7 @@ int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
	err=	X509_STORE_CTX_get_error(ctx);
 | 
			
		||||
	depth=	X509_STORE_CTX_get_error_depth(ctx);
 | 
			
		||||
 | 
			
		||||
	X509_NAME_oneline(X509_get_subject_name(err_cert),buf,256);
 | 
			
		||||
	X509_NAME_oneline(X509_get_subject_name(err_cert),buf,sizeof buf);
 | 
			
		||||
	BIO_printf(bio_err,"depth=%d %s\n",depth,buf);
 | 
			
		||||
	if (!ok)
 | 
			
		||||
		{
 | 
			
		||||
@@ -154,7 +154,7 @@ int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
	switch (ctx->error)
 | 
			
		||||
		{
 | 
			
		||||
	case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
 | 
			
		||||
		X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert),buf,256);
 | 
			
		||||
		X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert),buf,sizeof buf);
 | 
			
		||||
		BIO_printf(bio_err,"issuer= %s\n",buf);
 | 
			
		||||
		break;
 | 
			
		||||
	case X509_V_ERR_CERT_NOT_YET_VALID:
 | 
			
		||||
@@ -239,15 +239,15 @@ long MS_CALLBACK bio_dump_cb(BIO *bio, int cmd, const char *argp, int argi,
 | 
			
		||||
 | 
			
		||||
	if (cmd == (BIO_CB_READ|BIO_CB_RETURN))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(out,"read from %08X [%08lX] (%d bytes => %ld (0x%X))\n",
 | 
			
		||||
			bio,argp,argi,ret,ret);
 | 
			
		||||
		BIO_printf(out,"read from %p [%p] (%d bytes => %ld (0x%lX))\n",
 | 
			
		||||
 			(void *)bio,argp,argi,ret,ret);
 | 
			
		||||
		BIO_dump(out,argp,(int)ret);
 | 
			
		||||
		return(ret);
 | 
			
		||||
		}
 | 
			
		||||
	else if (cmd == (BIO_CB_WRITE|BIO_CB_RETURN))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(out,"write to %08X [%08lX] (%d bytes => %ld (0x%X))\n",
 | 
			
		||||
			bio,argp,argi,ret,ret);
 | 
			
		||||
		BIO_printf(out,"write to %p [%p] (%d bytes => %ld (0x%lX))\n",
 | 
			
		||||
			(void *)bio,argp,argi,ret,ret);
 | 
			
		||||
		BIO_dump(out,argp,(int)ret);
 | 
			
		||||
		}
 | 
			
		||||
	return(ret);
 | 
			
		||||
 
 | 
			
		||||
@@ -136,8 +136,12 @@ typedef unsigned int u_int;
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
#include "s_apps.h"
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
#include <conio.h>
 | 
			
		||||
#ifdef OPENSSL_SYS_WINCE
 | 
			
		||||
/* Windows CE incorrectly defines fileno as returning void*, so to avoid problems below... */
 | 
			
		||||
#ifdef fileno
 | 
			
		||||
#undef fileno
 | 
			
		||||
#endif
 | 
			
		||||
#define fileno(a) (int)_fileno(a)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -213,8 +217,10 @@ static void sc_usage(void)
 | 
			
		||||
	BIO_printf(bio_err," -starttls prot - use the STARTTLS command before starting TLS\n");
 | 
			
		||||
	BIO_printf(bio_err,"                 for those protocols that support it, where\n");
 | 
			
		||||
	BIO_printf(bio_err,"                 'prot' defines which one to assume.  Currently,\n");
 | 
			
		||||
	BIO_printf(bio_err,"                 only \"smtp\" is supported.\n");
 | 
			
		||||
	BIO_printf(bio_err,"                 only \"smtp\" and \"pop3\" are supported.\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	BIO_printf(bio_err," -engine id    - Initialise and use the specified engine\n");
 | 
			
		||||
#endif
 | 
			
		||||
	BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
@@ -241,14 +247,16 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	int write_tty,read_tty,write_ssl,read_ssl,tty_on,ssl_pending;
 | 
			
		||||
	SSL_CTX *ctx=NULL;
 | 
			
		||||
	int ret=1,in_init=1,i,nbio_test=0;
 | 
			
		||||
	int smtp_starttls = 0;
 | 
			
		||||
	int starttls_proto = 0;
 | 
			
		||||
	int prexit = 0, vflags = 0;
 | 
			
		||||
	SSL_METHOD *meth=NULL;
 | 
			
		||||
	BIO *sbio;
 | 
			
		||||
	char *inrand=NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine_id=NULL;
 | 
			
		||||
	ENGINE *e=NULL;
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
	struct timeval tv;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -403,15 +411,19 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
			if (strcmp(*argv,"smtp") == 0)
 | 
			
		||||
				smtp_starttls = 1;
 | 
			
		||||
				starttls_proto = 1;
 | 
			
		||||
			else if (strcmp(*argv,"pop3") == 0)
 | 
			
		||||
				starttls_proto = 2;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if	(strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine_id = *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
@@ -433,6 +445,13 @@ bad:
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	OpenSSL_add_ssl_algorithms();
 | 
			
		||||
	SSL_load_error_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine_id, 1);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
 | 
			
		||||
		&& !RAND_status())
 | 
			
		||||
		{
 | 
			
		||||
@@ -455,11 +474,6 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	OpenSSL_add_ssl_algorithms();
 | 
			
		||||
	SSL_load_error_strings();
 | 
			
		||||
 | 
			
		||||
        e = setup_engine(bio_err, engine_id, 1);
 | 
			
		||||
 | 
			
		||||
	ctx=SSL_CTX_new(meth);
 | 
			
		||||
	if (ctx == NULL)
 | 
			
		||||
		{
 | 
			
		||||
@@ -571,12 +585,18 @@ re_start:
 | 
			
		||||
	sbuf_off=0;
 | 
			
		||||
 | 
			
		||||
	/* This is an ugly hack that does a lot of assumptions */
 | 
			
		||||
	if (smtp_starttls)
 | 
			
		||||
	if (starttls_proto == 1)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_read(sbio,mbuf,BUFSIZZ);
 | 
			
		||||
		BIO_printf(sbio,"STARTTLS\r\n");
 | 
			
		||||
		BIO_read(sbio,sbuf,BUFSIZZ);
 | 
			
		||||
		}
 | 
			
		||||
	if (starttls_proto == 2)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_read(sbio,mbuf,BUFSIZZ);
 | 
			
		||||
		BIO_printf(sbio,"STLS\r\n");
 | 
			
		||||
		BIO_read(sbio,sbuf,BUFSIZZ);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
@@ -597,11 +617,11 @@ re_start:
 | 
			
		||||
				print_stuff(bio_c_out,con,full_log);
 | 
			
		||||
				if (full_log > 0) full_log--;
 | 
			
		||||
 | 
			
		||||
				if (smtp_starttls)
 | 
			
		||||
				if (starttls_proto)
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,"%s",mbuf);
 | 
			
		||||
					/* We don't need to know any more */
 | 
			
		||||
					smtp_starttls = 0;
 | 
			
		||||
					starttls_proto = 0;
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
				if (reconnect)
 | 
			
		||||
@@ -620,7 +640,7 @@ re_start:
 | 
			
		||||
 | 
			
		||||
		if (!ssl_pending)
 | 
			
		||||
			{
 | 
			
		||||
#ifndef OPENSSL_SYS_WINDOWS
 | 
			
		||||
#if !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
			if (tty_on)
 | 
			
		||||
				{
 | 
			
		||||
				if (read_tty)  FD_SET(fileno(stdin),&readfds);
 | 
			
		||||
@@ -647,8 +667,8 @@ re_start:
 | 
			
		||||
			 * will choke the compiler: if you do have a cast then
 | 
			
		||||
			 * you can either go for (int *) or (void *).
 | 
			
		||||
			 */
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
			/* Under Windows we make the assumption that we can
 | 
			
		||||
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
 | 
			
		||||
                        /* Under Windows/DOS we make the assumption that we can
 | 
			
		||||
			 * always write to the tty: therefore if we need to
 | 
			
		||||
			 * write to the tty we just fall through. Otherwise
 | 
			
		||||
			 * we timeout the select every second and see if there
 | 
			
		||||
@@ -662,7 +682,11 @@ re_start:
 | 
			
		||||
					tv.tv_usec = 0;
 | 
			
		||||
					i=select(width,(void *)&readfds,(void *)&writefds,
 | 
			
		||||
						 NULL,&tv);
 | 
			
		||||
#if defined(OPENSSL_SYS_WINCE) || defined(OPENSSL_SYS_MSDOS)
 | 
			
		||||
					if(!i && (!_kbhit() || !read_tty) ) continue;
 | 
			
		||||
#else
 | 
			
		||||
					if(!i && (!((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0))) || !read_tty) ) continue;
 | 
			
		||||
#endif
 | 
			
		||||
				} else 	i=select(width,(void *)&readfds,(void *)&writefds,
 | 
			
		||||
					 NULL,NULL);
 | 
			
		||||
			}
 | 
			
		||||
@@ -746,8 +770,8 @@ re_start:
 | 
			
		||||
				goto shut;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
		/* Assume Windows can always write */
 | 
			
		||||
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
		/* Assume Windows/DOS can always write */
 | 
			
		||||
		else if (!ssl_pending && write_tty)
 | 
			
		||||
#else
 | 
			
		||||
		else if (!ssl_pending && FD_ISSET(fileno(stdout),&writefds))
 | 
			
		||||
@@ -827,8 +851,14 @@ printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
 | 
			
		||||
#if defined(OPENSSL_SYS_WINCE) || defined(OPENSSL_SYS_MSDOS)
 | 
			
		||||
		else if (_kbhit())
 | 
			
		||||
#else
 | 
			
		||||
		else if ((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0)))
 | 
			
		||||
#endif
 | 
			
		||||
#elif defined (OPENSSL_SYS_NETWARE)
 | 
			
		||||
        else if (_kbhit())
 | 
			
		||||
#else
 | 
			
		||||
		else if (FD_ISSET(fileno(stdin),&readfds))
 | 
			
		||||
#endif
 | 
			
		||||
@@ -892,16 +922,16 @@ end:
 | 
			
		||||
	if (con != NULL) SSL_free(con);
 | 
			
		||||
	if (con2 != NULL) SSL_free(con2);
 | 
			
		||||
	if (ctx != NULL) SSL_CTX_free(ctx);
 | 
			
		||||
	if (cbuf != NULL) { memset(cbuf,0,BUFSIZZ); OPENSSL_free(cbuf); }
 | 
			
		||||
	if (sbuf != NULL) { memset(sbuf,0,BUFSIZZ); OPENSSL_free(sbuf); }
 | 
			
		||||
	if (mbuf != NULL) { memset(mbuf,0,BUFSIZZ); OPENSSL_free(mbuf); }
 | 
			
		||||
	if (cbuf != NULL) { OPENSSL_cleanse(cbuf,BUFSIZZ); OPENSSL_free(cbuf); }
 | 
			
		||||
	if (sbuf != NULL) { OPENSSL_cleanse(sbuf,BUFSIZZ); OPENSSL_free(sbuf); }
 | 
			
		||||
	if (mbuf != NULL) { OPENSSL_cleanse(mbuf,BUFSIZZ); OPENSSL_free(mbuf); }
 | 
			
		||||
	if (bio_c_out != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_free(bio_c_out);
 | 
			
		||||
		bio_c_out=NULL;
 | 
			
		||||
		}
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -916,6 +946,7 @@ static void print_stuff(BIO *bio, SSL *s, int full)
 | 
			
		||||
	SSL_CIPHER *c;
 | 
			
		||||
	X509_NAME *xn;
 | 
			
		||||
	int j,i;
 | 
			
		||||
	const COMP_METHOD *comp, *expansion;
 | 
			
		||||
 | 
			
		||||
	if (full)
 | 
			
		||||
		{
 | 
			
		||||
@@ -930,10 +961,10 @@ static void print_stuff(BIO *bio, SSL *s, int full)
 | 
			
		||||
			for (i=0; i<sk_X509_num(sk); i++)
 | 
			
		||||
				{
 | 
			
		||||
				X509_NAME_oneline(X509_get_subject_name(
 | 
			
		||||
					sk_X509_value(sk,i)),buf,BUFSIZ);
 | 
			
		||||
					sk_X509_value(sk,i)),buf,sizeof buf);
 | 
			
		||||
				BIO_printf(bio,"%2d s:%s\n",i,buf);
 | 
			
		||||
				X509_NAME_oneline(X509_get_issuer_name(
 | 
			
		||||
					sk_X509_value(sk,i)),buf,BUFSIZ);
 | 
			
		||||
					sk_X509_value(sk,i)),buf,sizeof buf);
 | 
			
		||||
				BIO_printf(bio,"   i:%s\n",buf);
 | 
			
		||||
				if (c_showcerts)
 | 
			
		||||
					PEM_write_bio_X509(bio,sk_X509_value(sk,i));
 | 
			
		||||
@@ -948,10 +979,10 @@ static void print_stuff(BIO *bio, SSL *s, int full)
 | 
			
		||||
			if (!(c_showcerts && got_a_chain)) /* Redundant if we showed the whole chain */
 | 
			
		||||
				PEM_write_bio_X509(bio,peer);
 | 
			
		||||
			X509_NAME_oneline(X509_get_subject_name(peer),
 | 
			
		||||
				buf,BUFSIZ);
 | 
			
		||||
				buf,sizeof buf);
 | 
			
		||||
			BIO_printf(bio,"subject=%s\n",buf);
 | 
			
		||||
			X509_NAME_oneline(X509_get_issuer_name(peer),
 | 
			
		||||
				buf,BUFSIZ);
 | 
			
		||||
				buf,sizeof buf);
 | 
			
		||||
			BIO_printf(bio,"issuer=%s\n",buf);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
@@ -973,7 +1004,7 @@ static void print_stuff(BIO *bio, SSL *s, int full)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio,"---\nNo client certificate CA names sent\n");
 | 
			
		||||
			}
 | 
			
		||||
		p=SSL_get_shared_ciphers(s,buf,BUFSIZ);
 | 
			
		||||
		p=SSL_get_shared_ciphers(s,buf,sizeof buf);
 | 
			
		||||
		if (p != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			/* This works only for SSL 2.  In later protocol
 | 
			
		||||
@@ -1018,6 +1049,12 @@ static void print_stuff(BIO *bio, SSL *s, int full)
 | 
			
		||||
							 EVP_PKEY_bits(pktmp));
 | 
			
		||||
		EVP_PKEY_free(pktmp);
 | 
			
		||||
	}
 | 
			
		||||
	comp=SSL_get_current_compression(s);
 | 
			
		||||
	expansion=SSL_get_current_expansion(s);
 | 
			
		||||
	BIO_printf(bio,"Compression: %s\n",
 | 
			
		||||
		comp ? SSL_COMP_get_name(comp) : "NONE");
 | 
			
		||||
	BIO_printf(bio,"Expansion: %s\n",
 | 
			
		||||
		expansion ? SSL_COMP_get_name(expansion) : "NONE");
 | 
			
		||||
	SSL_SESSION_print(bio,SSL_get_session(s));
 | 
			
		||||
	BIO_printf(bio,"---\n");
 | 
			
		||||
	if (peer != NULL)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										195
									
								
								apps/s_server.c
									
									
									
									
									
								
							
							
						
						
									
										195
									
								
								apps/s_server.c
									
									
									
									
									
								
							@@ -108,18 +108,33 @@
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
 | 
			
		||||
 * ECC cipher suite support in OpenSSL originally developed by 
 | 
			
		||||
 * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code */
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <openssl/e_os2.h>
 | 
			
		||||
#ifdef OPENSSL_NO_STDIO
 | 
			
		||||
#define APPS_WIN16
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if !defined(OPENSSL_SYS_NETWARE)  /* conflicts with winsock2 stuff on netware */
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* With IPv6, it looks like Digital has mixed up the proper order of
 | 
			
		||||
   recursive header file inclusion, resulting in the compiler complaining
 | 
			
		||||
   that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which
 | 
			
		||||
@@ -140,8 +155,12 @@ typedef unsigned int u_int;
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
#include "s_apps.h"
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
#include <conio.h>
 | 
			
		||||
#ifdef OPENSSL_SYS_WINCE
 | 
			
		||||
/* Windows CE incorrectly defines fileno as returning void*, so to avoid problems below... */
 | 
			
		||||
#ifdef fileno
 | 
			
		||||
#undef fileno
 | 
			
		||||
#endif
 | 
			
		||||
#define fileno(a) (int)_fileno(a)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if (defined(OPENSSL_SYS_VMS) && __VMS_VER < 70000000)
 | 
			
		||||
@@ -164,6 +183,7 @@ static int generate_session_id(const SSL *ssl, unsigned char *id,
 | 
			
		||||
static DH *load_dh_param(char *dhfile);
 | 
			
		||||
static DH *get_dh512(void);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef MONOLITH
 | 
			
		||||
static void s_server_init(void);
 | 
			
		||||
#endif
 | 
			
		||||
@@ -202,6 +222,7 @@ static DH *get_dh512(void)
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* static int load_CA(SSL_CTX *ctx, char *file);*/
 | 
			
		||||
 | 
			
		||||
#undef BUFSIZZ
 | 
			
		||||
@@ -234,7 +255,9 @@ static int s_msg=0;
 | 
			
		||||
static int s_quiet=0;
 | 
			
		||||
 | 
			
		||||
static int hack=0;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
static char *engine_id=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
static const char *session_id_prefix=NULL;
 | 
			
		||||
 | 
			
		||||
#ifdef MONOLITH
 | 
			
		||||
@@ -259,7 +282,9 @@ static void s_server_init(void)
 | 
			
		||||
	s_msg=0;
 | 
			
		||||
	s_quiet=0;
 | 
			
		||||
	hack=0;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	engine_id=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -279,6 +304,11 @@ static void sv_usage(void)
 | 
			
		||||
	BIO_printf(bio_err," -dkey arg     - second private key file to use (usually for DSA)\n");
 | 
			
		||||
	BIO_printf(bio_err," -dhparam arg  - DH parameter file to use, in cert file if not specified\n");
 | 
			
		||||
	BIO_printf(bio_err,"                 or a default set of parameters is used\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH
 | 
			
		||||
	BIO_printf(bio_err," -named_curve arg  - Elliptic curve name to use for ephemeral ECDH keys.\n" \
 | 
			
		||||
	                   "                 Use \"openssl ecparam -list_curves\" for all names\n" \
 | 
			
		||||
	                   "                 (default is sect163r2).\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef FIONBIO
 | 
			
		||||
	BIO_printf(bio_err," -nbio         - Run with non-blocking IO\n");
 | 
			
		||||
#endif
 | 
			
		||||
@@ -302,13 +332,18 @@ static void sv_usage(void)
 | 
			
		||||
	BIO_printf(bio_err," -no_tls1      - Just disable TLSv1\n");
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
	BIO_printf(bio_err," -no_dhe       - Disable ephemeral DH\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH
 | 
			
		||||
	BIO_printf(bio_err," -no_ecdhe     - Disable ephemeral ECDH\n");
 | 
			
		||||
#endif
 | 
			
		||||
	BIO_printf(bio_err," -bugs         - Turn on SSL bug compatibility\n");
 | 
			
		||||
	BIO_printf(bio_err," -www          - Respond to a 'GET /' with a status page\n");
 | 
			
		||||
	BIO_printf(bio_err," -WWW          - Respond to a 'GET /<path> HTTP/1.0' with file ./<path>\n");
 | 
			
		||||
	BIO_printf(bio_err," -HTTP         - Respond to a 'GET /<path> HTTP/1.0' with file ./<path>\n");
 | 
			
		||||
        BIO_printf(bio_err,"                 with the assumption it contains a complete HTTP response.\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	BIO_printf(bio_err," -engine id    - Initialise and use the specified engine\n");
 | 
			
		||||
#endif
 | 
			
		||||
	BIO_printf(bio_err," -id_prefix arg - Generate SSL/TLS session IDs prefixed by 'arg'\n");
 | 
			
		||||
	BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
	}
 | 
			
		||||
@@ -320,10 +355,10 @@ static char **local_argv;
 | 
			
		||||
static int ebcdic_new(BIO *bi);
 | 
			
		||||
static int ebcdic_free(BIO *a);
 | 
			
		||||
static int ebcdic_read(BIO *b, char *out, int outl);
 | 
			
		||||
static int ebcdic_write(BIO *b, char *in, int inl);
 | 
			
		||||
static long ebcdic_ctrl(BIO *b, int cmd, long num, char *ptr);
 | 
			
		||||
static int ebcdic_write(BIO *b, const char *in, int inl);
 | 
			
		||||
static long ebcdic_ctrl(BIO *b, int cmd, long num, void *ptr);
 | 
			
		||||
static int ebcdic_gets(BIO *bp, char *buf, int size);
 | 
			
		||||
static int ebcdic_puts(BIO *bp, char *str);
 | 
			
		||||
static int ebcdic_puts(BIO *bp, const char *str);
 | 
			
		||||
 | 
			
		||||
#define BIO_TYPE_EBCDIC_FILTER	(18|0x0200)
 | 
			
		||||
static BIO_METHOD methods_ebcdic=
 | 
			
		||||
@@ -388,7 +423,7 @@ static int ebcdic_read(BIO *b, char *out, int outl)
 | 
			
		||||
	return(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int ebcdic_write(BIO *b, char *in, int inl)
 | 
			
		||||
static int ebcdic_write(BIO *b, const char *in, int inl)
 | 
			
		||||
{
 | 
			
		||||
	EBCDIC_OUTBUFF *wbuf;
 | 
			
		||||
	int ret=0;
 | 
			
		||||
@@ -421,7 +456,7 @@ static int ebcdic_write(BIO *b, char *in, int inl)
 | 
			
		||||
	return(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static long ebcdic_ctrl(BIO *b, int cmd, long num, char *ptr)
 | 
			
		||||
static long ebcdic_ctrl(BIO *b, int cmd, long num, void *ptr)
 | 
			
		||||
{
 | 
			
		||||
	long ret;
 | 
			
		||||
 | 
			
		||||
@@ -440,7 +475,7 @@ static long ebcdic_ctrl(BIO *b, int cmd, long num, char *ptr)
 | 
			
		||||
 | 
			
		||||
static int ebcdic_gets(BIO *bp, char *buf, int size)
 | 
			
		||||
{
 | 
			
		||||
	int i, ret;
 | 
			
		||||
	int i, ret=0;
 | 
			
		||||
	if (bp->next_bio == NULL) return(0);
 | 
			
		||||
/*	return(BIO_gets(bp->next_bio,buf,size));*/
 | 
			
		||||
	for (i=0; i<size-1; ++i)
 | 
			
		||||
@@ -459,7 +494,7 @@ static int ebcdic_gets(BIO *bp, char *buf, int size)
 | 
			
		||||
	return (ret < 0 && i == 0) ? ret : i;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int ebcdic_puts(BIO *bp, char *str)
 | 
			
		||||
static int ebcdic_puts(BIO *bp, const char *str)
 | 
			
		||||
{
 | 
			
		||||
	if (bp->next_bio == NULL) return(0);
 | 
			
		||||
	return ebcdic_write(bp, str, strlen(str));
 | 
			
		||||
@@ -476,13 +511,16 @@ int MAIN(int argc, char *argv[])
 | 
			
		||||
	char *CApath=NULL,*CAfile=NULL;
 | 
			
		||||
	char *context = NULL;
 | 
			
		||||
	char *dhfile = NULL;
 | 
			
		||||
	char *named_curve = NULL;
 | 
			
		||||
	int badop=0,bugs=0;
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	int off=0;
 | 
			
		||||
	int no_tmp_rsa=0,no_dhe=0,nocert=0;
 | 
			
		||||
	int no_tmp_rsa=0,no_dhe=0,no_ecdhe=0,nocert=0;
 | 
			
		||||
	int state=0;
 | 
			
		||||
	SSL_METHOD *meth=NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	char *inrand=NULL;
 | 
			
		||||
 | 
			
		||||
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
@@ -560,6 +598,13 @@ int MAIN(int argc, char *argv[])
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			dhfile = *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH		
 | 
			
		||||
		else if	(strcmp(*argv,"-named_curve") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			named_curve = *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if	(strcmp(*argv,"-dcert") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
@@ -628,6 +673,8 @@ int MAIN(int argc, char *argv[])
 | 
			
		||||
			{ no_tmp_rsa=1; }
 | 
			
		||||
		else if	(strcmp(*argv,"-no_dhe") == 0)
 | 
			
		||||
			{ no_dhe=1; }
 | 
			
		||||
		else if	(strcmp(*argv,"-no_ecdhe") == 0)
 | 
			
		||||
			{ no_ecdhe=1; }
 | 
			
		||||
		else if	(strcmp(*argv,"-www") == 0)
 | 
			
		||||
			{ www=1; }
 | 
			
		||||
		else if	(strcmp(*argv,"-WWW") == 0)
 | 
			
		||||
@@ -657,11 +704,13 @@ int MAIN(int argc, char *argv[])
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			session_id_prefix = *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine_id= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
@@ -683,6 +732,13 @@ bad:
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	SSL_load_error_strings();
 | 
			
		||||
	OpenSSL_add_ssl_algorithms();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine_id, 1);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
 | 
			
		||||
		&& !RAND_status())
 | 
			
		||||
		{
 | 
			
		||||
@@ -715,11 +771,6 @@ bad:
 | 
			
		||||
		s_dkey_file=NULL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	SSL_load_error_strings();
 | 
			
		||||
	OpenSSL_add_ssl_algorithms();
 | 
			
		||||
 | 
			
		||||
        e = setup_engine(bio_err, engine_id, 1);
 | 
			
		||||
 | 
			
		||||
	ctx=SSL_CTX_new(meth);
 | 
			
		||||
	if (ctx == NULL)
 | 
			
		||||
		{
 | 
			
		||||
@@ -799,6 +850,59 @@ bad:
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH
 | 
			
		||||
	if (!no_ecdhe)
 | 
			
		||||
		{
 | 
			
		||||
		EC_KEY *ecdh=NULL;
 | 
			
		||||
 | 
			
		||||
		ecdh = EC_KEY_new();
 | 
			
		||||
		if (ecdh == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"Could not create ECDH struct.\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if (named_curve)
 | 
			
		||||
			{
 | 
			
		||||
			int nid = OBJ_sn2nid(named_curve);
 | 
			
		||||
 | 
			
		||||
			if (nid == 0)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "unknown curve name (%s)\n", 
 | 
			
		||||
					named_curve);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			ecdh->group = EC_GROUP_new_by_nid(nid);
 | 
			
		||||
			if (ecdh->group == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "unable to create curve (%s)\n", 
 | 
			
		||||
					named_curve);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if (ecdh->group != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_s_out,"Setting temp ECDH parameters\n");
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_s_out,"Using default temp ECDH parameters\n");
 | 
			
		||||
			ecdh->group=EC_GROUP_new_by_nid(NID_sect163r2);
 | 
			
		||||
			if (ecdh->group == NULL) 
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "unable to create curve (sect163r2)\n");
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		(void)BIO_flush(bio_s_out);
 | 
			
		||||
 | 
			
		||||
		SSL_CTX_set_tmp_ecdh(ctx,ecdh);
 | 
			
		||||
		EC_KEY_free(ecdh);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	
 | 
			
		||||
	if (!set_cert_stuff(ctx,s_cert_file,s_key_file))
 | 
			
		||||
		goto end;
 | 
			
		||||
	if (s_dcert_file != NULL)
 | 
			
		||||
@@ -860,30 +964,30 @@ end:
 | 
			
		||||
		bio_s_out=NULL;
 | 
			
		||||
		}
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void print_stats(BIO *bio, SSL_CTX *ssl_ctx)
 | 
			
		||||
	{
 | 
			
		||||
	BIO_printf(bio,"%4ld items in the session cache\n",
 | 
			
		||||
		SSL_CTX_sess_number(ssl_ctx));
 | 
			
		||||
	BIO_printf(bio,"%4d client connects (SSL_connect())\n",
 | 
			
		||||
	BIO_printf(bio,"%4ld client connects (SSL_connect())\n",
 | 
			
		||||
		SSL_CTX_sess_connect(ssl_ctx));
 | 
			
		||||
	BIO_printf(bio,"%4d client renegotiates (SSL_connect())\n",
 | 
			
		||||
	BIO_printf(bio,"%4ld client renegotiates (SSL_connect())\n",
 | 
			
		||||
		SSL_CTX_sess_connect_renegotiate(ssl_ctx));
 | 
			
		||||
	BIO_printf(bio,"%4d client connects that finished\n",
 | 
			
		||||
	BIO_printf(bio,"%4ld client connects that finished\n",
 | 
			
		||||
		SSL_CTX_sess_connect_good(ssl_ctx));
 | 
			
		||||
	BIO_printf(bio,"%4d server accepts (SSL_accept())\n",
 | 
			
		||||
	BIO_printf(bio,"%4ld server accepts (SSL_accept())\n",
 | 
			
		||||
		SSL_CTX_sess_accept(ssl_ctx));
 | 
			
		||||
	BIO_printf(bio,"%4d server renegotiates (SSL_accept())\n",
 | 
			
		||||
	BIO_printf(bio,"%4ld server renegotiates (SSL_accept())\n",
 | 
			
		||||
		SSL_CTX_sess_accept_renegotiate(ssl_ctx));
 | 
			
		||||
	BIO_printf(bio,"%4d server accepts that finished\n",
 | 
			
		||||
	BIO_printf(bio,"%4ld server accepts that finished\n",
 | 
			
		||||
		SSL_CTX_sess_accept_good(ssl_ctx));
 | 
			
		||||
	BIO_printf(bio,"%4d session cache hits\n",SSL_CTX_sess_hits(ssl_ctx));
 | 
			
		||||
	BIO_printf(bio,"%4d session cache misses\n",SSL_CTX_sess_misses(ssl_ctx));
 | 
			
		||||
	BIO_printf(bio,"%4d session cache timeouts\n",SSL_CTX_sess_timeouts(ssl_ctx));
 | 
			
		||||
	BIO_printf(bio,"%4d callback cache hits\n",SSL_CTX_sess_cb_hits(ssl_ctx));
 | 
			
		||||
	BIO_printf(bio,"%4d cache full overflows (%d allowed)\n",
 | 
			
		||||
	BIO_printf(bio,"%4ld session cache hits\n",SSL_CTX_sess_hits(ssl_ctx));
 | 
			
		||||
	BIO_printf(bio,"%4ld session cache misses\n",SSL_CTX_sess_misses(ssl_ctx));
 | 
			
		||||
	BIO_printf(bio,"%4ld session cache timeouts\n",SSL_CTX_sess_timeouts(ssl_ctx));
 | 
			
		||||
	BIO_printf(bio,"%4ld callback cache hits\n",SSL_CTX_sess_cb_hits(ssl_ctx));
 | 
			
		||||
	BIO_printf(bio,"%4ld cache full overflows (%ld allowed)\n",
 | 
			
		||||
		SSL_CTX_sess_cache_full(ssl_ctx),
 | 
			
		||||
		SSL_CTX_sess_get_cache_size(ssl_ctx));
 | 
			
		||||
	}
 | 
			
		||||
@@ -897,7 +1001,7 @@ static int sv_body(char *hostname, int s, unsigned char *context)
 | 
			
		||||
	unsigned long l;
 | 
			
		||||
	SSL *con=NULL;
 | 
			
		||||
	BIO *sbio;
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
	struct timeval tv;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -971,7 +1075,7 @@ static int sv_body(char *hostname, int s, unsigned char *context)
 | 
			
		||||
		if (!read_from_sslcon)
 | 
			
		||||
			{
 | 
			
		||||
			FD_ZERO(&readfds);
 | 
			
		||||
#ifndef OPENSSL_SYS_WINDOWS
 | 
			
		||||
#if !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
			FD_SET(fileno(stdin),&readfds);
 | 
			
		||||
#endif
 | 
			
		||||
			FD_SET(s,&readfds);
 | 
			
		||||
@@ -981,8 +1085,8 @@ static int sv_body(char *hostname, int s, unsigned char *context)
 | 
			
		||||
			 * the compiler: if you do have a cast then you can either
 | 
			
		||||
			 * go for (int *) or (void *).
 | 
			
		||||
			 */
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
			/* Under Windows we can't select on stdin: only
 | 
			
		||||
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
                        /* Under DOS (non-djgpp) and Windows we can't select on stdin: only
 | 
			
		||||
			 * on sockets. As a workaround we timeout the select every
 | 
			
		||||
			 * second and check for any keypress. In a proper Windows
 | 
			
		||||
			 * application we wouldn't do this because it is inefficient.
 | 
			
		||||
@@ -1176,7 +1280,7 @@ err:
 | 
			
		||||
	BIO_printf(bio_s_out,"CONNECTION CLOSED\n");
 | 
			
		||||
	if (buf != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		memset(buf,0,bufsize);
 | 
			
		||||
		OPENSSL_cleanse(buf,bufsize);
 | 
			
		||||
		OPENSSL_free(buf);
 | 
			
		||||
		}
 | 
			
		||||
	if (ret >= 0)
 | 
			
		||||
@@ -1228,14 +1332,14 @@ static int init_ssl_connection(SSL *con)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_s_out,"Client certificate\n");
 | 
			
		||||
		PEM_write_bio_X509(bio_s_out,peer);
 | 
			
		||||
		X509_NAME_oneline(X509_get_subject_name(peer),buf,BUFSIZ);
 | 
			
		||||
		X509_NAME_oneline(X509_get_subject_name(peer),buf,sizeof buf);
 | 
			
		||||
		BIO_printf(bio_s_out,"subject=%s\n",buf);
 | 
			
		||||
		X509_NAME_oneline(X509_get_issuer_name(peer),buf,BUFSIZ);
 | 
			
		||||
		X509_NAME_oneline(X509_get_issuer_name(peer),buf,sizeof buf);
 | 
			
		||||
		BIO_printf(bio_s_out,"issuer=%s\n",buf);
 | 
			
		||||
		X509_free(peer);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (SSL_get_shared_ciphers(con,buf,BUFSIZ) != NULL)
 | 
			
		||||
	if (SSL_get_shared_ciphers(con,buf,sizeof buf) != NULL)
 | 
			
		||||
		BIO_printf(bio_s_out,"Shared ciphers:%s\n",buf);
 | 
			
		||||
	str=SSL_CIPHER_get_name(SSL_get_current_cipher(con));
 | 
			
		||||
	BIO_printf(bio_s_out,"CIPHER is %s\n",(str != NULL)?str:"(NONE)");
 | 
			
		||||
@@ -1243,7 +1347,13 @@ static int init_ssl_connection(SSL *con)
 | 
			
		||||
	if (SSL_ctrl(con,SSL_CTRL_GET_FLAGS,0,NULL) &
 | 
			
		||||
		TLS1_FLAGS_TLS_PADDING_BUG)
 | 
			
		||||
		BIO_printf(bio_s_out,"Peer has incorrect TLSv1 block padding\n");
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_KRB5
 | 
			
		||||
	if (con->kssl_ctx->client_princ != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_s_out,"Kerberos peer principal is %s\n",
 | 
			
		||||
			con->kssl_ctx->client_princ);
 | 
			
		||||
		}
 | 
			
		||||
#endif /* OPENSSL_NO_KRB5 */
 | 
			
		||||
	return(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1395,7 +1505,9 @@ static int www_body(char *hostname, int s, unsigned char *context)
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_s_out,"read R BLOCK\n");
 | 
			
		||||
#ifndef OPENSSL_SYS_MSDOS
 | 
			
		||||
#if defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
            delay(1000);
 | 
			
		||||
#elif !defined(OPENSSL_SYS_MSDOS) && !defined(__DJGPP__)
 | 
			
		||||
				sleep(1);
 | 
			
		||||
#endif
 | 
			
		||||
				continue;
 | 
			
		||||
@@ -1679,7 +1791,12 @@ static RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int is_export, int keylength)
 | 
			
		||||
			BIO_printf(bio_err,"Generating temp (%d bit) RSA key...",keylength);
 | 
			
		||||
			(void)BIO_flush(bio_err);
 | 
			
		||||
			}
 | 
			
		||||
		rsa_tmp=RSA_generate_key(keylength,RSA_F4,NULL,NULL);
 | 
			
		||||
		if(((rsa_tmp = RSA_new()) == NULL) || !RSA_generate_key_ex(
 | 
			
		||||
					rsa_tmp, keylength,RSA_F4,NULL))
 | 
			
		||||
			{
 | 
			
		||||
			if(rsa_tmp) RSA_free(rsa_tmp);
 | 
			
		||||
			rsa_tmp = NULL;
 | 
			
		||||
			}
 | 
			
		||||
		if (!s_quiet)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"\n");
 | 
			
		||||
 
 | 
			
		||||
@@ -62,8 +62,6 @@
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
 | 
			
		||||
#include <openssl/e_os2.h>
 | 
			
		||||
 | 
			
		||||
/* With IPv6, it looks like Digital has mixed up the proper order of
 | 
			
		||||
   recursive header file inclusion, resulting in the compiler complaining
 | 
			
		||||
   that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which
 | 
			
		||||
@@ -81,11 +79,19 @@ typedef unsigned int u_int;
 | 
			
		||||
#include "s_apps.h"
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
 | 
			
		||||
static struct hostent *GetHostByName(char *name);
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
static void sock_cleanup(void);
 | 
			
		||||
#ifdef FLAT_INC
 | 
			
		||||
#include "e_os.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "../e_os.h"
 | 
			
		||||
#endif
 | 
			
		||||
static int sock_init(void);
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_SOCK
 | 
			
		||||
 | 
			
		||||
static struct hostent *GetHostByName(char *name);
 | 
			
		||||
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
static void ssl_sock_cleanup(void);
 | 
			
		||||
#endif
 | 
			
		||||
static int ssl_sock_init(void);
 | 
			
		||||
static int init_client_ip(int *sock,unsigned char ip[4], int port);
 | 
			
		||||
static int init_server(int *sock, int port);
 | 
			
		||||
static int init_server_long(int *sock, int port,char *ip);
 | 
			
		||||
@@ -98,6 +104,10 @@ static int host_ip(char *str, unsigned char ip[4]);
 | 
			
		||||
#define SOCKET_PROTOCOL	IPPROTO_TCP
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_SYS_NETWARE
 | 
			
		||||
static int wsa_init_done=0;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
static struct WSAData wsa_state;
 | 
			
		||||
static int wsa_init_done=0;
 | 
			
		||||
@@ -118,7 +128,7 @@ static LONG FAR PASCAL topHookProc(HWND hwnd, UINT message, WPARAM wParam,
 | 
			
		||||
		case WM_DESTROY:
 | 
			
		||||
		case WM_CLOSE:
 | 
			
		||||
			SetWindowLong(topWnd,GWL_WNDPROC,(LONG)lpTopWndProc);
 | 
			
		||||
			sock_cleanup();
 | 
			
		||||
			ssl_sock_cleanup();
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@@ -135,26 +145,43 @@ static BOOL CALLBACK enumproc(HWND hwnd,LPARAM lParam)
 | 
			
		||||
#endif /* OPENSSL_SYS_WINDOWS */
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
static void ssl_sock_cleanup(void)
 | 
			
		||||
	{
 | 
			
		||||
	if (wsa_init_done)
 | 
			
		||||
		{
 | 
			
		||||
		wsa_init_done=0;
 | 
			
		||||
#ifndef OPENSSL_SYS_WINCE
 | 
			
		||||
		WSACancelBlockingCall();
 | 
			
		||||
#endif
 | 
			
		||||
		WSACleanup();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
#elif defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
static void sock_cleanup(void)
 | 
			
		||||
    {
 | 
			
		||||
    if (wsa_init_done)
 | 
			
		||||
        {
 | 
			
		||||
        wsa_init_done=0;
 | 
			
		||||
		WSACancelBlockingCall();
 | 
			
		||||
		WSACleanup();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static int sock_init(void)
 | 
			
		||||
static int ssl_sock_init(void)
 | 
			
		||||
	{
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
	extern int _watt_do_exit;
 | 
			
		||||
	_watt_do_exit = 0;
 | 
			
		||||
	dbug_init();
 | 
			
		||||
	if (sock_init())
 | 
			
		||||
		return (0);
 | 
			
		||||
#elif defined(OPENSSL_SYS_WINDOWS)
 | 
			
		||||
	if (!wsa_init_done)
 | 
			
		||||
		{
 | 
			
		||||
		int err;
 | 
			
		||||
	  
 | 
			
		||||
#ifdef SIGINT
 | 
			
		||||
		signal(SIGINT,(void (*)(int))sock_cleanup);
 | 
			
		||||
		signal(SIGINT,(void (*)(int))ssl_sock_cleanup);
 | 
			
		||||
#endif
 | 
			
		||||
		wsa_init_done=1;
 | 
			
		||||
		memset(&wsa_state,0,sizeof(wsa_state));
 | 
			
		||||
@@ -173,6 +200,27 @@ static int sock_init(void)
 | 
			
		||||
		SetWindowLong(topWnd,GWL_WNDPROC,(LONG)lpTopHookProc);
 | 
			
		||||
#endif /* OPENSSL_SYS_WIN16 */
 | 
			
		||||
		}
 | 
			
		||||
#elif defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
   WORD wVerReq;
 | 
			
		||||
   WSADATA wsaData;
 | 
			
		||||
   int err;
 | 
			
		||||
 | 
			
		||||
   if (!wsa_init_done)
 | 
			
		||||
      {
 | 
			
		||||
   
 | 
			
		||||
# ifdef SIGINT
 | 
			
		||||
      signal(SIGINT,(void (*)(int))sock_cleanup);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
      wsa_init_done=1;
 | 
			
		||||
      wVerReq = MAKEWORD( 2, 0 );
 | 
			
		||||
      err = WSAStartup(wVerReq,&wsaData);
 | 
			
		||||
      if (err != 0)
 | 
			
		||||
         {
 | 
			
		||||
         BIO_printf(bio_err,"unable to start WINSOCK2, error code=%d\n",err);
 | 
			
		||||
         return(0);
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
#endif /* OPENSSL_SYS_WINDOWS */
 | 
			
		||||
	return(1);
 | 
			
		||||
	}
 | 
			
		||||
@@ -196,7 +244,7 @@ static int init_client_ip(int *sock, unsigned char ip[4], int port)
 | 
			
		||||
	struct sockaddr_in them;
 | 
			
		||||
	int s,i;
 | 
			
		||||
 | 
			
		||||
	if (!sock_init()) return(0);
 | 
			
		||||
	if (!ssl_sock_init()) return(0);
 | 
			
		||||
 | 
			
		||||
	memset((char *)&them,0,sizeof(them));
 | 
			
		||||
	them.sin_family=AF_INET;
 | 
			
		||||
@@ -261,7 +309,7 @@ static int init_server_long(int *sock, int port, char *ip)
 | 
			
		||||
	struct sockaddr_in server;
 | 
			
		||||
	int s= -1,i;
 | 
			
		||||
 | 
			
		||||
	if (!sock_init()) return(0);
 | 
			
		||||
	if (!ssl_sock_init()) return(0);
 | 
			
		||||
 | 
			
		||||
	memset((char *)&server,0,sizeof(server));
 | 
			
		||||
	server.sin_family=AF_INET;
 | 
			
		||||
@@ -318,7 +366,7 @@ static int do_accept(int acc_sock, int *sock, char **host)
 | 
			
		||||
	int len;
 | 
			
		||||
/*	struct linger ling; */
 | 
			
		||||
 | 
			
		||||
	if (!sock_init()) return(0);
 | 
			
		||||
	if (!ssl_sock_init()) return(0);
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_SYS_WINDOWS
 | 
			
		||||
redoit:
 | 
			
		||||
@@ -334,7 +382,7 @@ redoit:
 | 
			
		||||
	ret=accept(acc_sock,(struct sockaddr *)&from,(void *)&len);
 | 
			
		||||
	if (ret == INVALID_SOCKET)
 | 
			
		||||
		{
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
		i=WSAGetLastError();
 | 
			
		||||
		BIO_printf(bio_err,"accept error %d\n",i);
 | 
			
		||||
#else
 | 
			
		||||
@@ -381,7 +429,7 @@ redoit:
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			return(0);
 | 
			
		||||
			}
 | 
			
		||||
		strcpy(*host,h1->h_name);
 | 
			
		||||
		BUF_strlcpy(*host,h1->h_name,strlen(h1->h_name)+1);
 | 
			
		||||
 | 
			
		||||
		h2=GetHostByName(*host);
 | 
			
		||||
		if (h2 == NULL)
 | 
			
		||||
@@ -448,7 +496,7 @@ static int host_ip(char *str, unsigned char ip[4])
 | 
			
		||||
		{ /* do a gethostbyname */
 | 
			
		||||
		struct hostent *he;
 | 
			
		||||
 | 
			
		||||
		if (!sock_init()) return(0);
 | 
			
		||||
		if (!ssl_sock_init()) return(0);
 | 
			
		||||
 | 
			
		||||
		he=GetHostByName(str);
 | 
			
		||||
		if (he == NULL)
 | 
			
		||||
@@ -529,9 +577,12 @@ static struct hostent *GetHostByName(char *name)
 | 
			
		||||
		ret=gethostbyname(name);
 | 
			
		||||
		if (ret == NULL) return(NULL);
 | 
			
		||||
		/* else add to cache */
 | 
			
		||||
		strncpy(ghbn_cache[lowi].name,name,128);
 | 
			
		||||
		if(strlen(name) < sizeof ghbn_cache[0].name)
 | 
			
		||||
			{
 | 
			
		||||
			strcpy(ghbn_cache[lowi].name,name);
 | 
			
		||||
			memcpy((char *)&(ghbn_cache[lowi].ent),ret,sizeof(struct hostent));
 | 
			
		||||
			ghbn_cache[lowi].order=ghbn_miss+ghbn_hits;
 | 
			
		||||
			}
 | 
			
		||||
		return(ret);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
@@ -542,3 +593,5 @@ static struct hostent *GetHostByName(char *name)
 | 
			
		||||
		return(ret);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -85,7 +85,7 @@
 | 
			
		||||
#include OPENSSL_UNISTD
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VXWORKS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC)) && !defined(OPENSSL_SYS_MACOSX)
 | 
			
		||||
#if !defined(OPENSSL_SYS_NETWARE) && !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VXWORKS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC))
 | 
			
		||||
#define TIMES
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -105,14 +105,10 @@
 | 
			
		||||
#undef TIMES
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if !defined(TIMES) && !defined(OPENSSL_SYS_VXWORKS)
 | 
			
		||||
#if !defined(TIMES) && !defined(OPENSSL_SYS_VXWORKS) && !defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
#include <sys/timeb.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _AIX
 | 
			
		||||
#include <sys/select.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(sun) || defined(__ultrix)
 | 
			
		||||
#define _POSIX_SOURCE
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
@@ -150,6 +146,8 @@
 | 
			
		||||
#undef BUFSIZZ
 | 
			
		||||
#define BUFSIZZ 1024*10
 | 
			
		||||
 | 
			
		||||
#define MYBUFSIZ 1024*8
 | 
			
		||||
 | 
			
		||||
#undef min
 | 
			
		||||
#undef max
 | 
			
		||||
#define min(a,b) (((a) < (b)) ? (a) : (b))
 | 
			
		||||
@@ -324,6 +322,11 @@ static int parseArgs(int argc, char **argv)
 | 
			
		||||
		{
 | 
			
		||||
		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;
 | 
			
		||||
@@ -381,6 +384,20 @@ static double tm_Time_F(int s)
 | 
			
		||||
		ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
 | 
			
		||||
		return((ret == 0.0)?1e-6:ret);
 | 
			
		||||
	}
 | 
			
		||||
#elif defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
    static clock_t tstart,tend;
 | 
			
		||||
 | 
			
		||||
    if (s == START)
 | 
			
		||||
    {
 | 
			
		||||
        tstart=clock();
 | 
			
		||||
        return(0);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        tend=clock();
 | 
			
		||||
        ret=(double)((double)(tend)-(double)(tstart));
 | 
			
		||||
        return((ret < 0.001)?0.001:ret);
 | 
			
		||||
    }
 | 
			
		||||
#elif defined(OPENSSL_SYS_VXWORKS)
 | 
			
		||||
        {
 | 
			
		||||
	static unsigned long tick_start, tick_end;
 | 
			
		||||
@@ -484,7 +501,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	tm_Time_F(START);
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (finishtime < time(NULL)) break;
 | 
			
		||||
		if (finishtime < (long)time(NULL)) break;
 | 
			
		||||
#ifdef WIN32_STUFF
 | 
			
		||||
 | 
			
		||||
		if( flushWinMsgs(0) == -1 )
 | 
			
		||||
@@ -499,7 +516,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
		if (s_www_path != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			sprintf(buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
			
		||||
			BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
			
		||||
			SSL_write(scon,buf,strlen(buf));
 | 
			
		||||
			while ((i=SSL_read(scon,buf,sizeof(buf))) > 0)
 | 
			
		||||
				bytes_read+=i;
 | 
			
		||||
@@ -535,9 +552,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
	totalTime += tm_Time_F(STOP); /* Add the time for this iteration */
 | 
			
		||||
 | 
			
		||||
	i=(int)(time(NULL)-finishtime+maxTime);
 | 
			
		||||
	i=(int)((long)time(NULL)-finishtime+maxTime);
 | 
			
		||||
	printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read);
 | 
			
		||||
	printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,time(NULL)-finishtime+maxTime,bytes_read/nConn);
 | 
			
		||||
	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 */
 | 
			
		||||
 | 
			
		||||
@@ -554,7 +571,7 @@ next:
 | 
			
		||||
 | 
			
		||||
	if (s_www_path != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		sprintf(buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
			
		||||
		BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
			
		||||
		SSL_write(scon,buf,strlen(buf));
 | 
			
		||||
		while (SSL_read(scon,buf,sizeof(buf)) > 0)
 | 
			
		||||
			;
 | 
			
		||||
@@ -569,7 +586,7 @@ next:
 | 
			
		||||
	nConn = 0;
 | 
			
		||||
	totalTime = 0.0;
 | 
			
		||||
 | 
			
		||||
	finishtime=time(NULL)+maxTime;
 | 
			
		||||
	finishtime=(long)time(NULL)+maxTime;
 | 
			
		||||
 | 
			
		||||
	printf( "starting\n" );
 | 
			
		||||
	bytes_read=0;
 | 
			
		||||
@@ -577,7 +594,7 @@ next:
 | 
			
		||||
		
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (finishtime < time(NULL)) break;
 | 
			
		||||
		if (finishtime < (long)time(NULL)) break;
 | 
			
		||||
 | 
			
		||||
#ifdef WIN32_STUFF
 | 
			
		||||
		if( flushWinMsgs(0) == -1 )
 | 
			
		||||
@@ -592,7 +609,7 @@ next:
 | 
			
		||||
 | 
			
		||||
		if (s_www_path)
 | 
			
		||||
			{
 | 
			
		||||
			sprintf(buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
			
		||||
			BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
			
		||||
			SSL_write(scon,buf,strlen(buf));
 | 
			
		||||
			while ((i=SSL_read(scon,buf,sizeof(buf))) > 0)
 | 
			
		||||
				bytes_read+=i;
 | 
			
		||||
@@ -627,7 +644,7 @@ next:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	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,time(NULL)-finishtime+maxTime,bytes_read/nConn);
 | 
			
		||||
	printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn);
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
@@ -639,7 +656,7 @@ end:
 | 
			
		||||
		tm_ctx=NULL;
 | 
			
		||||
		}
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
 
 | 
			
		||||
@@ -273,7 +273,7 @@ end:
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (x != NULL) SSL_SESSION_free(x);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static SSL_SESSION *load_sess_id(char *infile, int format)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								apps/smime.c
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								apps/smime.c
									
									
									
									
									
								
							@@ -1,9 +1,9 @@
 | 
			
		||||
/* smime.c */
 | 
			
		||||
/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
 | 
			
		||||
 * project 1999.
 | 
			
		||||
 * project.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 * Copyright (c) 1999-2003 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
 | 
			
		||||
@@ -104,11 +104,19 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	int need_rand = 0;
 | 
			
		||||
	int informat = FORMAT_SMIME, outformat = FORMAT_SMIME;
 | 
			
		||||
        int keyform = FORMAT_PEM;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	args = argv + 1;
 | 
			
		||||
	ret = 1;
 | 
			
		||||
 | 
			
		||||
	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;
 | 
			
		||||
 | 
			
		||||
@@ -160,6 +168,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				flags |= PKCS7_BINARY;
 | 
			
		||||
		else if (!strcmp (*args, "-nosigs"))
 | 
			
		||||
				flags |= PKCS7_NOSIGS;
 | 
			
		||||
		else if (!strcmp (*args, "-nooldmime"))
 | 
			
		||||
				flags |= PKCS7_NOOLDMIMETYPE;
 | 
			
		||||
		else if (!strcmp (*args, "-crlfeol"))
 | 
			
		||||
				flags |= PKCS7_CRLFEOL;
 | 
			
		||||
		else if (!strcmp (*args, "-crl_check"))
 | 
			
		||||
				store_flags |= X509_V_FLAG_CRL_CHECK;
 | 
			
		||||
		else if (!strcmp (*args, "-crl_check_all"))
 | 
			
		||||
@@ -170,11 +182,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				inrand = *args;
 | 
			
		||||
			} else badarg = 1;
 | 
			
		||||
			need_rand = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		} else if (!strcmp(*args,"-engine")) {
 | 
			
		||||
			if (args[1]) {
 | 
			
		||||
				args++;
 | 
			
		||||
				engine = *args;
 | 
			
		||||
			} else badarg = 1;
 | 
			
		||||
#endif
 | 
			
		||||
		} else if (!strcmp(*args,"-passin")) {
 | 
			
		||||
			if (args[1]) {
 | 
			
		||||
				args++;
 | 
			
		||||
@@ -324,7 +338,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf (bio_err, "-CAfile file   trusted certificates file\n");
 | 
			
		||||
		BIO_printf (bio_err, "-crl_check     check revocation status of signer's certificate using CRLs\n");
 | 
			
		||||
		BIO_printf (bio_err, "-crl_check_all check revocation status of signer's certificate chain using CRLs\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf (bio_err, "-engine e      use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf (bio_err, "-passin arg    input file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err,  "-rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,  "               load the file (or the files in the directory) into\n");
 | 
			
		||||
@@ -333,7 +349,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		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");
 | 
			
		||||
@@ -422,7 +440,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	} else keyfile = NULL;
 | 
			
		||||
 | 
			
		||||
	if(keyfile) {
 | 
			
		||||
		key = load_key(bio_err, keyfile, keyform, passin, e,
 | 
			
		||||
		key = load_key(bio_err, keyfile, keyform, 0, passin, e,
 | 
			
		||||
			       "signing key file");
 | 
			
		||||
		if (!key) {
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -464,8 +482,17 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if(operation == SMIME_ENCRYPT) {
 | 
			
		||||
		p7 = PKCS7_encrypt(encerts, in, cipher, flags);
 | 
			
		||||
	} else if(operation == SMIME_SIGN) {
 | 
			
		||||
		/* If detached data and SMIME output enable partial
 | 
			
		||||
		 * signing.
 | 
			
		||||
		 */
 | 
			
		||||
		if ((flags & PKCS7_DETACHED) && (outformat == FORMAT_SMIME))
 | 
			
		||||
			flags |= PKCS7_STREAM;
 | 
			
		||||
		p7 = PKCS7_sign(signer, key, other, in, flags);
 | 
			
		||||
		BIO_reset(in);
 | 
			
		||||
		/* Don't need to rewind for partial signing */
 | 
			
		||||
		if (!(flags & PKCS7_STREAM) && (BIO_reset(in) != 0)) {
 | 
			
		||||
		  BIO_printf(bio_err, "Can't rewind input file\n");
 | 
			
		||||
		  goto end;
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		if(informat == FORMAT_SMIME) 
 | 
			
		||||
			p7 = SMIME_read_PKCS7(in, &indata);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										756
									
								
								apps/speed.c
									
									
									
									
									
								
							
							
						
						
									
										756
									
								
								apps/speed.c
									
									
									
									
									
								
							@@ -55,13 +55,30 @@
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
 | 
			
		||||
 *
 | 
			
		||||
 * Portions of the attached software ("Contribution") are developed by 
 | 
			
		||||
 * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
 | 
			
		||||
 *
 | 
			
		||||
 * The Contribution is licensed pursuant to the OpenSSL open source
 | 
			
		||||
 * license provided above.
 | 
			
		||||
 *
 | 
			
		||||
 * The ECDH and ECDSA speed test software is originally written by 
 | 
			
		||||
 * Sumit Gupta of Sun Microsystems Laboratories.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* most of this code has been pilfered from my libdes speed.c program */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_SPEED
 | 
			
		||||
 | 
			
		||||
#undef SECONDS
 | 
			
		||||
#define SECONDS		3	
 | 
			
		||||
#define RSA_SECONDS	10
 | 
			
		||||
#define DSA_SECONDS	10
 | 
			
		||||
#define ECDSA_SECONDS   10
 | 
			
		||||
#define ECDH_SECONDS    10
 | 
			
		||||
 | 
			
		||||
/* 11-Sep-92 Andrew Daviel   Support for Silicon Graphics IRIX added */
 | 
			
		||||
/* 06-Apr-92 Luke Brennan    Support for VMS and add extra signal calls */
 | 
			
		||||
@@ -71,7 +88,7 @@
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
@@ -87,6 +104,10 @@
 | 
			
		||||
#include OPENSSL_UNISTD
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_SYS_NETWARE
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(OPENSSL_SYS_MACOSX)
 | 
			
		||||
# define USE_TOD
 | 
			
		||||
#elif !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VXWORKS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC))
 | 
			
		||||
@@ -96,6 +117,12 @@
 | 
			
		||||
# define TIMEB
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
#undef TIMES
 | 
			
		||||
#undef TIMEB
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef _IRIX
 | 
			
		||||
# include <time.h>
 | 
			
		||||
#endif
 | 
			
		||||
@@ -120,7 +147,7 @@
 | 
			
		||||
#include <sys/timeb.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if !defined(TIMES) && !defined(TIMEB) && !defined(USE_TOD) && !defined(OPENSSL_SYS_VXWORKS)
 | 
			
		||||
#if !defined(TIMES) && !defined(TIMEB) && !defined(USE_TOD) && !defined(OPENSSL_SYS_VXWORKS) && !defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
#error "It seems neither struct tms nor struct timeb is supported in this platform!"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -184,11 +211,28 @@
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
#include "./testdsa.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
#include <openssl/ecdsa.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH
 | 
			
		||||
#include <openssl/ecdh.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The following "HZ" timing stuff should be sync'd up with the code in
 | 
			
		||||
 * crypto/tmdiff.[ch]. That appears to try to do the same job, though I think
 | 
			
		||||
 * this code is more up to date than libcrypto's so there may be features to
 | 
			
		||||
 * migrate over first. This is used in two places further down AFAICS. 
 | 
			
		||||
 * The point is that nothing in openssl actually *uses* that tmdiff stuff, so
 | 
			
		||||
 * either speed.c should be using it or it should go because it's obviously not
 | 
			
		||||
 * useful enough. Anyone want to do a janitorial job on this?
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* The following if from times(3) man page.  It may need to be changed */
 | 
			
		||||
#ifndef HZ
 | 
			
		||||
# ifdef _SC_CLK_TCK
 | 
			
		||||
#  define HZ ((double)sysconf(_SC_CLK_TCK))
 | 
			
		||||
# if defined(_SC_CLK_TCK) \
 | 
			
		||||
     && (!defined(OPENSSL_SYS_VMS) || __CTRL_VER >= 70000000)
 | 
			
		||||
#  define HZ sysconf(_SC_CLK_TCK)
 | 
			
		||||
# else
 | 
			
		||||
#  ifndef CLK_TCK
 | 
			
		||||
#   ifndef _BSD_CLK_TCK_ /* FreeBSD hack */
 | 
			
		||||
@@ -202,7 +246,7 @@
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(OPENSSL_SYS_OS2)
 | 
			
		||||
#if !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(OPENSSL_SYS_OS2) && !defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
# define HAVE_FORK 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -226,6 +270,10 @@ static int do_multi(int multi);
 | 
			
		||||
#define SIZE_NUM	5
 | 
			
		||||
#define RSA_NUM		4
 | 
			
		||||
#define DSA_NUM		3
 | 
			
		||||
 | 
			
		||||
#define EC_NUM       16
 | 
			
		||||
#define MAX_ECDH_SIZE 256
 | 
			
		||||
 | 
			
		||||
static const char *names[ALGOR_NUM]={
 | 
			
		||||
  "md2","mdc2","md4","md5","hmac(md5)","sha1","rmd160","rc4",
 | 
			
		||||
  "des cbc","des ede3","idea cbc",
 | 
			
		||||
@@ -235,6 +283,9 @@ static double results[ALGOR_NUM][SIZE_NUM];
 | 
			
		||||
static int lengths[SIZE_NUM]={16,64,256,1024,8*1024};
 | 
			
		||||
static double rsa_results[RSA_NUM][2];
 | 
			
		||||
static double dsa_results[DSA_NUM][2];
 | 
			
		||||
static double ecdsa_results[EC_NUM][2];
 | 
			
		||||
static double ecdh_results[EC_NUM][1];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef SIGALRM
 | 
			
		||||
#if defined(__STDC__) || defined(sgi) || defined(_AIX)
 | 
			
		||||
@@ -257,6 +308,32 @@ static SIGRETTYPE sig_done(int sig)
 | 
			
		||||
#define START	0
 | 
			
		||||
#define STOP	1
 | 
			
		||||
 | 
			
		||||
#if defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
 | 
			
		||||
   /* for NetWare the best we can do is use clock() which returns the
 | 
			
		||||
    * time, in hundredths of a second, since the NLM began executing
 | 
			
		||||
   */
 | 
			
		||||
static double Time_F(int s)
 | 
			
		||||
	{
 | 
			
		||||
	double ret;
 | 
			
		||||
 | 
			
		||||
   static clock_t tstart,tend;
 | 
			
		||||
 | 
			
		||||
   if (s == START)
 | 
			
		||||
   {
 | 
			
		||||
      tstart=clock();
 | 
			
		||||
      return(0);
 | 
			
		||||
   }
 | 
			
		||||
   else
 | 
			
		||||
   {
 | 
			
		||||
      tend=clock();
 | 
			
		||||
      ret=(double)((double)(tend)-(double)(tstart));
 | 
			
		||||
      return((ret < 0.001)?0.001:ret);
 | 
			
		||||
   }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
static double Time_F(int s)
 | 
			
		||||
	{
 | 
			
		||||
	double ret;
 | 
			
		||||
@@ -318,7 +395,8 @@ static double Time_F(int s)
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			times(&tend);
 | 
			
		||||
			ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
 | 
			
		||||
			ret = HZ;
 | 
			
		||||
			ret=(double)(tend.tms_utime-tstart.tms_utime) / ret;
 | 
			
		||||
			return((ret < 1e-3)?1e-3:ret);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@@ -364,12 +442,29 @@ static double Time_F(int s)
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
#endif /* if defined(OPENSSL_SYS_NETWARE) */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static const int KDF1_SHA1_len = 20;
 | 
			
		||||
static void *KDF1_SHA1(void *in, size_t inlen, void *out, size_t outlen)
 | 
			
		||||
	{
 | 
			
		||||
#ifndef OPENSSL_NO_SHA
 | 
			
		||||
	if (outlen != SHA_DIGEST_LENGTH)
 | 
			
		||||
		return NULL;
 | 
			
		||||
	return SHA1(in, inlen, out);
 | 
			
		||||
#else
 | 
			
		||||
	return NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	unsigned char *buf=NULL,*buf2=NULL;
 | 
			
		||||
	int mret=1;
 | 
			
		||||
	long count=0,save_count=0;
 | 
			
		||||
@@ -477,6 +572,24 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#define	R_RSA_1024	1
 | 
			
		||||
#define	R_RSA_2048	2
 | 
			
		||||
#define	R_RSA_4096	3
 | 
			
		||||
 | 
			
		||||
#define R_EC_P160    0
 | 
			
		||||
#define R_EC_P192    1	
 | 
			
		||||
#define R_EC_P224    2
 | 
			
		||||
#define R_EC_P256    3
 | 
			
		||||
#define R_EC_P384    4
 | 
			
		||||
#define R_EC_P521    5
 | 
			
		||||
#define R_EC_K163    6
 | 
			
		||||
#define R_EC_K233    7
 | 
			
		||||
#define R_EC_K283    8
 | 
			
		||||
#define R_EC_K409    9
 | 
			
		||||
#define R_EC_K571    10
 | 
			
		||||
#define R_EC_B163    11
 | 
			
		||||
#define R_EC_B233    12
 | 
			
		||||
#define R_EC_B283    13
 | 
			
		||||
#define R_EC_B409    14
 | 
			
		||||
#define R_EC_B571    15
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
	RSA *rsa_key[RSA_NUM];
 | 
			
		||||
	long rsa_c[RSA_NUM][2];
 | 
			
		||||
@@ -492,8 +605,83 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	long dsa_c[DSA_NUM][2];
 | 
			
		||||
	static unsigned int dsa_bits[DSA_NUM]={512,1024,2048};
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_EC
 | 
			
		||||
	/* We only test over the following curves as they are representative, 
 | 
			
		||||
	 * To add tests over more curves, simply add the curve NID
 | 
			
		||||
	 * and curve name to the following arrays and increase the 
 | 
			
		||||
	 * EC_NUM value accordingly. 
 | 
			
		||||
	 */
 | 
			
		||||
	static unsigned int test_curves[EC_NUM] = 
 | 
			
		||||
	{	
 | 
			
		||||
	/* Prime Curves */
 | 
			
		||||
	NID_secp160r1,
 | 
			
		||||
	NID_X9_62_prime192v1,
 | 
			
		||||
	NID_secp224r1,
 | 
			
		||||
	NID_X9_62_prime256v1,
 | 
			
		||||
	NID_secp384r1,
 | 
			
		||||
	NID_secp521r1,
 | 
			
		||||
	/* Binary Curves */
 | 
			
		||||
	NID_sect163k1,
 | 
			
		||||
	NID_sect233k1,
 | 
			
		||||
	NID_sect283k1,
 | 
			
		||||
	NID_sect409k1,
 | 
			
		||||
	NID_sect571k1,
 | 
			
		||||
	NID_sect163r2,
 | 
			
		||||
	NID_sect233r1,
 | 
			
		||||
	NID_sect283r1,
 | 
			
		||||
	NID_sect409r1,
 | 
			
		||||
	NID_sect571r1
 | 
			
		||||
	}; 
 | 
			
		||||
	static char * test_curves_names[EC_NUM] = 
 | 
			
		||||
	{
 | 
			
		||||
	/* Prime Curves */
 | 
			
		||||
	"secp160r1",
 | 
			
		||||
	"nistp192",
 | 
			
		||||
	"nistp224",
 | 
			
		||||
	"nistp256",
 | 
			
		||||
	"nistp384",
 | 
			
		||||
	"nistp521",
 | 
			
		||||
	/* Binary Curves */
 | 
			
		||||
	"nistk163",
 | 
			
		||||
	"nistk233",
 | 
			
		||||
	"nistk283",
 | 
			
		||||
	"nistk409",
 | 
			
		||||
	"nistk571",
 | 
			
		||||
	"nistb163",
 | 
			
		||||
	"nistb233",
 | 
			
		||||
	"nistb283",
 | 
			
		||||
	"nistb409",
 | 
			
		||||
	"nistb571"
 | 
			
		||||
	};
 | 
			
		||||
	static int test_curves_bits[EC_NUM] =
 | 
			
		||||
        {
 | 
			
		||||
        160, 192, 224, 256, 384, 521,
 | 
			
		||||
        163, 233, 283, 409, 571,
 | 
			
		||||
        163, 233, 283, 409, 571
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
        unsigned char ecdsasig[256];
 | 
			
		||||
        unsigned int ecdsasiglen;
 | 
			
		||||
        EC_KEY *ecdsa[EC_NUM];
 | 
			
		||||
        long ecdsa_c[EC_NUM][2];
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH
 | 
			
		||||
        EC_KEY *ecdh_a[EC_NUM], *ecdh_b[EC_NUM];
 | 
			
		||||
        unsigned char secret_a[MAX_ECDH_SIZE], secret_b[MAX_ECDH_SIZE];
 | 
			
		||||
        int secret_size_a, secret_size_b;
 | 
			
		||||
        int ecdh_checks = 0;
 | 
			
		||||
        int secret_idx = 0;
 | 
			
		||||
        long ecdh_c[EC_NUM][2];
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	int rsa_doit[RSA_NUM];
 | 
			
		||||
	int dsa_doit[DSA_NUM];
 | 
			
		||||
	int ecdsa_doit[EC_NUM];
 | 
			
		||||
        int ecdh_doit[EC_NUM];
 | 
			
		||||
	int doit[ALGOR_NUM];
 | 
			
		||||
	int pr_header=0;
 | 
			
		||||
	const EVP_CIPHER *evp_cipher=NULL;
 | 
			
		||||
@@ -512,6 +700,17 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
	memset(dsa_key,0,sizeof(dsa_key));
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
	for (i=0; i<EC_NUM; i++) ecdsa[i] = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH
 | 
			
		||||
	for (i=0; i<EC_NUM; i++)
 | 
			
		||||
		{
 | 
			
		||||
		ecdh_a[i] = NULL;
 | 
			
		||||
		ecdh_b[i] = NULL;
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
@@ -550,6 +749,15 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		rsa_doit[i]=0;
 | 
			
		||||
	for (i=0; i<DSA_NUM; i++)
 | 
			
		||||
		dsa_doit[i]=0;
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
	for (i=0; i<EC_NUM; i++)
 | 
			
		||||
		ecdsa_doit[i]=0;
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH
 | 
			
		||||
	for (i=0; i<EC_NUM; i++)
 | 
			
		||||
		ecdh_doit[i]=0;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	j=0;
 | 
			
		||||
	argc--;
 | 
			
		||||
@@ -589,6 +797,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			j--;	/* Otherwise, -elapsed gets confused with
 | 
			
		||||
				   an algorithm. */
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if	((argc > 0) && (strcmp(*argv,"-engine") == 0))
 | 
			
		||||
			{
 | 
			
		||||
			argc--;
 | 
			
		||||
@@ -605,6 +814,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			   means all of them should be run) */
 | 
			
		||||
			j--;
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_FORK
 | 
			
		||||
		else if	((argc > 0) && (strcmp(*argv,"-multi") == 0))
 | 
			
		||||
			{
 | 
			
		||||
@@ -766,6 +976,53 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			{
 | 
			
		||||
			dsa_doit[R_DSA_512]=1;
 | 
			
		||||
			dsa_doit[R_DSA_1024]=1;
 | 
			
		||||
			dsa_doit[R_DSA_2048]=1;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
		     if (strcmp(*argv,"ecdsap160") == 0) ecdsa_doit[R_EC_P160]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdsap224") == 0) ecdsa_doit[R_EC_P224]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdsap256") == 0) ecdsa_doit[R_EC_P256]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdsap384") == 0) ecdsa_doit[R_EC_P384]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdsap521") == 0) ecdsa_doit[R_EC_P521]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdsak163") == 0) ecdsa_doit[R_EC_K163]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdsak233") == 0) ecdsa_doit[R_EC_K233]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdsak283") == 0) ecdsa_doit[R_EC_K283]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdsak409") == 0) ecdsa_doit[R_EC_K409]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdsak571") == 0) ecdsa_doit[R_EC_K571]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdsab163") == 0) ecdsa_doit[R_EC_B163]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdsab233") == 0) ecdsa_doit[R_EC_B233]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdsab283") == 0) ecdsa_doit[R_EC_B283]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdsab409") == 0) ecdsa_doit[R_EC_B409]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdsab571") == 0) ecdsa_doit[R_EC_B571]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdsa") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			for (i=0; i < EC_NUM; i++)
 | 
			
		||||
				ecdsa_doit[i]=1;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH
 | 
			
		||||
		     if (strcmp(*argv,"ecdhp160") == 0) ecdh_doit[R_EC_P160]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdhp224") == 0) ecdh_doit[R_EC_P224]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdhp256") == 0) ecdh_doit[R_EC_P256]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdhp384") == 0) ecdh_doit[R_EC_P384]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdhp521") == 0) ecdh_doit[R_EC_P521]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdhk163") == 0) ecdh_doit[R_EC_K163]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdhk233") == 0) ecdh_doit[R_EC_K233]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdhk283") == 0) ecdh_doit[R_EC_K283]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdhk409") == 0) ecdh_doit[R_EC_K409]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdhk571") == 0) ecdh_doit[R_EC_K571]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdhb163") == 0) ecdh_doit[R_EC_B163]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdhb233") == 0) ecdh_doit[R_EC_B233]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdhb283") == 0) ecdh_doit[R_EC_B283]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdhb409") == 0) ecdh_doit[R_EC_B409]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdhb571") == 0) ecdh_doit[R_EC_B571]=2;
 | 
			
		||||
		else if (strcmp(*argv,"ecdh") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			for (i=0; i < EC_NUM; i++)
 | 
			
		||||
				ecdh_doit[i]=1;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
#endif
 | 
			
		||||
@@ -834,6 +1091,18 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
			BIO_printf(bio_err,"dsa512   dsa1024  dsa2048\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
			BIO_printf(bio_err,"ecdsap160 ecdsap224 ecdsap256 ecdsap384 ecdsap521\n");
 | 
			
		||||
			BIO_printf(bio_err,"ecdsak163 ecdsak233 ecdsak283 ecdsak409 ecdsak571\n");
 | 
			
		||||
			BIO_printf(bio_err,"ecdsab163 ecdsab233 ecdsab283 ecdsab409 ecdsab571\n");
 | 
			
		||||
			BIO_printf(bio_err,"ecdsa\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH
 | 
			
		||||
			BIO_printf(bio_err,"ecdhp160  ecdhp224  ecdhp256  ecdhp384  ecdhp521\n");
 | 
			
		||||
			BIO_printf(bio_err,"ecdhk163  ecdhk233  ecdhk283  ecdhk409  ecdhk571\n");
 | 
			
		||||
			BIO_printf(bio_err,"ecdhb163  ecdhb233  ecdhb283  ecdhb409  ecdhb571\n");
 | 
			
		||||
			BIO_printf(bio_err,"ecdh\n");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
			BIO_printf(bio_err,"idea     ");
 | 
			
		||||
@@ -861,10 +1130,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
			BIO_printf(bio_err,"\n");
 | 
			
		||||
			BIO_printf(bio_err,"Available options:\n");
 | 
			
		||||
#ifdef TIMES
 | 
			
		||||
#if defined(TIMES) || defined(USE_TOD)
 | 
			
		||||
			BIO_printf(bio_err,"-elapsed        measure time in real time instead of CPU user time.\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,"-evp e          use EVP e.\n");
 | 
			
		||||
			BIO_printf(bio_err,"-decrypt        time decryption instead of encryption (only EVP).\n");
 | 
			
		||||
			BIO_printf(bio_err,"-mr             produce machine readable output.\n");
 | 
			
		||||
@@ -997,6 +1268,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	c[D_CBC_RC5][0]=count;
 | 
			
		||||
	c[D_CBC_BF][0]=count;
 | 
			
		||||
	c[D_CBC_CAST][0]=count;
 | 
			
		||||
	c[D_CBC_128_AES][0]=count;
 | 
			
		||||
	c[D_CBC_192_AES][0]=count;
 | 
			
		||||
	c[D_CBC_256_AES][0]=count;
 | 
			
		||||
 | 
			
		||||
	for (i=1; i<SIZE_NUM; i++)
 | 
			
		||||
		{
 | 
			
		||||
@@ -1022,6 +1296,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		c[D_CBC_RC5][i]=c[D_CBC_RC5][i-1]*l0/l1;
 | 
			
		||||
		c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1;
 | 
			
		||||
		c[D_CBC_CAST][i]=c[D_CBC_CAST][i-1]*l0/l1;
 | 
			
		||||
		c[D_CBC_128_AES][i]=c[D_CBC_128_AES][i-1]*l0/l1;
 | 
			
		||||
		c[D_CBC_192_AES][i]=c[D_CBC_192_AES][i-1]*l0/l1;
 | 
			
		||||
		c[D_CBC_256_AES][i]=c[D_CBC_256_AES][i-1]*l0/l1;
 | 
			
		||||
		}
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
	rsa_c[R_RSA_512][0]=count/2000;
 | 
			
		||||
@@ -1063,6 +1340,114 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
	ecdsa_c[R_EC_P160][0]=count/1000;
 | 
			
		||||
	ecdsa_c[R_EC_P160][1]=count/1000/2;
 | 
			
		||||
	for (i=R_EC_P224; i<=R_EC_P521; i++)
 | 
			
		||||
		{
 | 
			
		||||
		ecdsa_c[i][0]=ecdsa_c[i-1][0]/2;
 | 
			
		||||
		ecdsa_c[i][1]=ecdsa_c[i-1][1]/2;
 | 
			
		||||
		if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
 | 
			
		||||
			ecdsa_doit[i]=0;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (ecdsa_c[i] == 0)
 | 
			
		||||
				{
 | 
			
		||||
				ecdsa_c[i][0]=1;
 | 
			
		||||
				ecdsa_c[i][1]=1;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	ecdsa_c[R_EC_K163][0]=count/1000;
 | 
			
		||||
	ecdsa_c[R_EC_K163][1]=count/1000/2;
 | 
			
		||||
	for (i=R_EC_K233; i<=R_EC_K571; i++)
 | 
			
		||||
		{
 | 
			
		||||
		ecdsa_c[i][0]=ecdsa_c[i-1][0]/2;
 | 
			
		||||
		ecdsa_c[i][1]=ecdsa_c[i-1][1]/2;
 | 
			
		||||
		if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
 | 
			
		||||
			ecdsa_doit[i]=0;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (ecdsa_c[i] == 0)
 | 
			
		||||
				{
 | 
			
		||||
				ecdsa_c[i][0]=1;
 | 
			
		||||
				ecdsa_c[i][1]=1;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	ecdsa_c[R_EC_B163][0]=count/1000;
 | 
			
		||||
	ecdsa_c[R_EC_B163][1]=count/1000/2;
 | 
			
		||||
	for (i=R_EC_B233; i<=R_EC_B571; i++)
 | 
			
		||||
		{
 | 
			
		||||
		ecdsa_c[i][0]=ecdsa_c[i-1][0]/2;
 | 
			
		||||
		ecdsa_c[i][1]=ecdsa_c[i-1][1]/2;
 | 
			
		||||
		if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
 | 
			
		||||
			ecdsa_doit[i]=0;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (ecdsa_c[i] == 0)
 | 
			
		||||
				{
 | 
			
		||||
				ecdsa_c[i][0]=1;
 | 
			
		||||
				ecdsa_c[i][1]=1;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH
 | 
			
		||||
	ecdh_c[R_EC_P160][0]=count/1000;
 | 
			
		||||
	ecdh_c[R_EC_P160][1]=count/1000;
 | 
			
		||||
	for (i=R_EC_P224; i<=R_EC_P521; i++)
 | 
			
		||||
		{
 | 
			
		||||
		ecdh_c[i][0]=ecdh_c[i-1][0]/2;
 | 
			
		||||
		ecdh_c[i][1]=ecdh_c[i-1][1]/2;
 | 
			
		||||
		if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
 | 
			
		||||
			ecdh_doit[i]=0;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (ecdh_c[i] == 0)
 | 
			
		||||
				{
 | 
			
		||||
				ecdh_c[i][0]=1;
 | 
			
		||||
				ecdh_c[i][1]=1;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	ecdh_c[R_EC_K163][0]=count/1000;
 | 
			
		||||
	ecdh_c[R_EC_K163][1]=count/1000;
 | 
			
		||||
	for (i=R_EC_K233; i<=R_EC_K571; i++)
 | 
			
		||||
		{
 | 
			
		||||
		ecdh_c[i][0]=ecdh_c[i-1][0]/2;
 | 
			
		||||
		ecdh_c[i][1]=ecdh_c[i-1][1]/2;
 | 
			
		||||
		if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
 | 
			
		||||
			ecdh_doit[i]=0;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (ecdh_c[i] == 0)
 | 
			
		||||
				{
 | 
			
		||||
				ecdh_c[i][0]=1;
 | 
			
		||||
				ecdh_c[i][1]=1;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	ecdh_c[R_EC_B163][0]=count/1000;
 | 
			
		||||
	ecdh_c[R_EC_B163][1]=count/1000;
 | 
			
		||||
	for (i=R_EC_B233; i<=R_EC_B571; i++)
 | 
			
		||||
		{
 | 
			
		||||
		ecdh_c[i][0]=ecdh_c[i-1][0]/2;
 | 
			
		||||
		ecdh_c[i][1]=ecdh_c[i-1][1]/2;
 | 
			
		||||
		if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
 | 
			
		||||
			ecdh_doit[i]=0;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (ecdh_c[i] == 0)
 | 
			
		||||
				{
 | 
			
		||||
				ecdh_c[i][0]=1;
 | 
			
		||||
				ecdh_c[i][1]=1;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define COND(d)	(count < (d))
 | 
			
		||||
#define COUNT(d) (d)
 | 
			
		||||
#else
 | 
			
		||||
@@ -1392,6 +1777,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				else
 | 
			
		||||
					EVP_EncryptFinal_ex(&ctx,buf,&outl);
 | 
			
		||||
				d=Time_F(STOP);
 | 
			
		||||
				EVP_CIPHER_CTX_cleanup(&ctx);
 | 
			
		||||
				}
 | 
			
		||||
			if (evp_md)
 | 
			
		||||
				{
 | 
			
		||||
@@ -1587,6 +1973,239 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
	if (rnd_fake) RAND_cleanup();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
	if (RAND_status() != 1) 
 | 
			
		||||
		{
 | 
			
		||||
		RAND_seed(rnd_seed, sizeof rnd_seed);
 | 
			
		||||
		rnd_fake = 1;
 | 
			
		||||
		}
 | 
			
		||||
	for (j=0; j<EC_NUM; j++) 
 | 
			
		||||
		{
 | 
			
		||||
		int ret;
 | 
			
		||||
 | 
			
		||||
		if (!ecdsa_doit[j]) continue; /* Ignore Curve */ 
 | 
			
		||||
		ecdsa[j] = EC_KEY_new();
 | 
			
		||||
		if (ecdsa[j] == NULL) 
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"ECDSA failure.\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			rsa_count=1;
 | 
			
		||||
			} 
 | 
			
		||||
		else 
 | 
			
		||||
			{
 | 
			
		||||
			ecdsa[j]->group = EC_GROUP_new_by_nid(test_curves[j]);
 | 
			
		||||
			/* Could not obtain group information */
 | 
			
		||||
			if (ecdsa[j]->group == NULL) 
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"ECDSA failure.Could not obtain group information\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				rsa_count=1;
 | 
			
		||||
				} 
 | 
			
		||||
			else 
 | 
			
		||||
				{
 | 
			
		||||
#if 1
 | 
			
		||||
				EC_GROUP_precompute_mult(ecdsa[j]->group, NULL);
 | 
			
		||||
#endif
 | 
			
		||||
				/* Perform ECDSA signature test */
 | 
			
		||||
				EC_KEY_generate_key(ecdsa[j]);
 | 
			
		||||
				ret = ECDSA_sign(0, buf, 20, ecdsasig, 
 | 
			
		||||
					&ecdsasiglen, ecdsa[j]);
 | 
			
		||||
				if (ret == 0) 
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,"ECDSA sign failure.  No ECDSA sign will be done.\n");
 | 
			
		||||
					ERR_print_errors(bio_err);
 | 
			
		||||
					rsa_count=1;
 | 
			
		||||
					} 
 | 
			
		||||
				else 
 | 
			
		||||
					{
 | 
			
		||||
					pkey_print_message("sign","ecdsa",
 | 
			
		||||
						ecdsa_c[j][0], 
 | 
			
		||||
						test_curves_bits[j],
 | 
			
		||||
						ECDSA_SECONDS);
 | 
			
		||||
 | 
			
		||||
					Time_F(START);
 | 
			
		||||
					for (count=0,run=1; COND(ecdsa_c[j][0]);
 | 
			
		||||
						count++) 
 | 
			
		||||
						{
 | 
			
		||||
						ret=ECDSA_sign(0, buf, 20, 
 | 
			
		||||
							ecdsasig, &ecdsasiglen,
 | 
			
		||||
							ecdsa[j]);
 | 
			
		||||
						if (ret == 0) 
 | 
			
		||||
							{
 | 
			
		||||
							BIO_printf(bio_err, "ECDSA sign failure\n");
 | 
			
		||||
							ERR_print_errors(bio_err);
 | 
			
		||||
							count=1;
 | 
			
		||||
							break;
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
						d=Time_F(STOP);
 | 
			
		||||
 | 
			
		||||
						BIO_printf(bio_err, mr ? "+R5:%ld:%d:%.2f\n" :
 | 
			
		||||
						"%ld %d bit ECDSA signs in %.2fs \n", 
 | 
			
		||||
						count, test_curves_bits[j], d);
 | 
			
		||||
						ecdsa_results[j][0]=d/(double)count;
 | 
			
		||||
						rsa_count=count;
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
				/* Perform ECDSA verification test */
 | 
			
		||||
				ret=ECDSA_verify(0, buf, 20, ecdsasig, 
 | 
			
		||||
					ecdsasiglen, ecdsa[j]);
 | 
			
		||||
				if (ret != 1) 
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,"ECDSA verify failure.  No ECDSA verify will be done.\n");
 | 
			
		||||
					ERR_print_errors(bio_err);
 | 
			
		||||
					ecdsa_doit[j] = 0;
 | 
			
		||||
					} 
 | 
			
		||||
				else 
 | 
			
		||||
					{
 | 
			
		||||
					pkey_print_message("verify","ecdsa",
 | 
			
		||||
					ecdsa_c[j][1],
 | 
			
		||||
					test_curves_bits[j],
 | 
			
		||||
					ECDSA_SECONDS);
 | 
			
		||||
					Time_F(START);
 | 
			
		||||
					for (count=0,run=1; COND(ecdsa_c[j][1]); count++) 
 | 
			
		||||
						{
 | 
			
		||||
						ret=ECDSA_verify(0, buf, 20, ecdsasig, ecdsasiglen, ecdsa[j]);
 | 
			
		||||
						if (ret != 1) 
 | 
			
		||||
							{
 | 
			
		||||
							BIO_printf(bio_err, "ECDSA verify failure\n");
 | 
			
		||||
							ERR_print_errors(bio_err);
 | 
			
		||||
							count=1;
 | 
			
		||||
							break;
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
						d=Time_F(STOP);
 | 
			
		||||
						BIO_printf(bio_err, mr? "+R6:%ld:%d:%.2f\n"
 | 
			
		||||
							: "%ld %d bit ECDSA verify in %.2fs\n",
 | 
			
		||||
						count, test_curves_bits[j], d);
 | 
			
		||||
						ecdsa_results[j][1]=d/(double)count;
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
				if (rsa_count <= 1) 
 | 
			
		||||
					{
 | 
			
		||||
					/* if longer than 10s, don't do any more */
 | 
			
		||||
					for (j++; j<EC_NUM; j++)
 | 
			
		||||
					ecdsa_doit[j]=0;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (rnd_fake) RAND_cleanup();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH
 | 
			
		||||
	if (RAND_status() != 1)
 | 
			
		||||
		{
 | 
			
		||||
		RAND_seed(rnd_seed, sizeof rnd_seed);
 | 
			
		||||
		rnd_fake = 1;
 | 
			
		||||
		}
 | 
			
		||||
	for (j=0; j<EC_NUM; j++)
 | 
			
		||||
		{
 | 
			
		||||
		if (!ecdh_doit[j]) continue;
 | 
			
		||||
		ecdh_a[j] = EC_KEY_new();
 | 
			
		||||
		ecdh_b[j] = EC_KEY_new();
 | 
			
		||||
		if ((ecdh_a[j] == NULL) || (ecdh_b[j] == NULL))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"ECDH failure.\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			rsa_count=1;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			ecdh_a[j]->group = EC_GROUP_new_by_nid(test_curves[j]);
 | 
			
		||||
			if (ecdh_a[j]->group == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"ECDH failure.\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				rsa_count=1;
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				ecdh_b[j]->group = EC_GROUP_dup(ecdh_a[j]->group);
 | 
			
		||||
 | 
			
		||||
				/* generate two ECDH key pairs */
 | 
			
		||||
				if (!EC_KEY_generate_key(ecdh_a[j]) ||
 | 
			
		||||
					!EC_KEY_generate_key(ecdh_b[j]))
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,"ECDH key generation failure.\n");
 | 
			
		||||
					ERR_print_errors(bio_err);
 | 
			
		||||
					rsa_count=1;		
 | 
			
		||||
					}
 | 
			
		||||
				else
 | 
			
		||||
					{
 | 
			
		||||
					/* If field size is not more than 24 octets, then use SHA-1 hash of result;
 | 
			
		||||
					 * otherwise, use result (see section 4.8 of draft-ietf-tls-ecc-03.txt).
 | 
			
		||||
					 */
 | 
			
		||||
					int field_size, outlen;
 | 
			
		||||
					void *(*kdf)(void *in, size_t inlen, void *out, size_t xoutlen);
 | 
			
		||||
					field_size = EC_GROUP_get_degree(ecdh_a[j]->group);
 | 
			
		||||
					if (field_size <= 24 * 8)
 | 
			
		||||
						{
 | 
			
		||||
						outlen = KDF1_SHA1_len;
 | 
			
		||||
						kdf = KDF1_SHA1;
 | 
			
		||||
						}
 | 
			
		||||
					else
 | 
			
		||||
						{
 | 
			
		||||
						outlen = (field_size+7)/8;
 | 
			
		||||
						kdf = NULL;
 | 
			
		||||
						}
 | 
			
		||||
					secret_size_a = ECDH_compute_key(secret_a, outlen,
 | 
			
		||||
						ecdh_b[j]->pub_key,
 | 
			
		||||
						ecdh_a[j], kdf);
 | 
			
		||||
					secret_size_b = ECDH_compute_key(secret_b, outlen,
 | 
			
		||||
						ecdh_a[j]->pub_key,
 | 
			
		||||
						ecdh_b[j], kdf);
 | 
			
		||||
					if (secret_size_a != secret_size_b) 
 | 
			
		||||
						ecdh_checks = 0;
 | 
			
		||||
					else
 | 
			
		||||
						ecdh_checks = 1;
 | 
			
		||||
 | 
			
		||||
					for (secret_idx = 0; 
 | 
			
		||||
					    (secret_idx < secret_size_a)
 | 
			
		||||
						&& (ecdh_checks == 1);
 | 
			
		||||
					    secret_idx++)
 | 
			
		||||
						{
 | 
			
		||||
						if (secret_a[secret_idx] != secret_b[secret_idx])
 | 
			
		||||
						ecdh_checks = 0;
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
					if (ecdh_checks == 0)
 | 
			
		||||
						{
 | 
			
		||||
						BIO_printf(bio_err,"ECDH computations don't match.\n");
 | 
			
		||||
						ERR_print_errors(bio_err);
 | 
			
		||||
						rsa_count=1;		
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
					pkey_print_message("","ecdh",
 | 
			
		||||
					ecdh_c[j][0], 
 | 
			
		||||
					test_curves_bits[j],
 | 
			
		||||
					ECDH_SECONDS);
 | 
			
		||||
					Time_F(START);
 | 
			
		||||
					for (count=0,run=1; COND(ecdh_c[j][0]); count++)
 | 
			
		||||
						{
 | 
			
		||||
						ECDH_compute_key(secret_a, outlen,
 | 
			
		||||
						ecdh_b[j]->pub_key,
 | 
			
		||||
						ecdh_a[j], kdf);
 | 
			
		||||
						}
 | 
			
		||||
					d=Time_F(STOP);
 | 
			
		||||
					BIO_printf(bio_err, mr ? "+R7:%ld:%d:%.2f\n" :"%ld %d-bit ECDH ops in %.2fs\n",
 | 
			
		||||
					count, test_curves_bits[j], d);
 | 
			
		||||
					ecdh_results[j][0]=d/(double)count;
 | 
			
		||||
					rsa_count=count;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if (rsa_count <= 1)
 | 
			
		||||
			{
 | 
			
		||||
			/* if longer than 10s, don't do any more */
 | 
			
		||||
			for (j++; j<EC_NUM; j++)
 | 
			
		||||
			ecdh_doit[j]=0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (rnd_fake) RAND_cleanup();
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_FORK
 | 
			
		||||
show_res:
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1627,7 +2246,10 @@ show_res:
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HZ
 | 
			
		||||
#define as_string(s) (#s)
 | 
			
		||||
		printf("HZ=%g", (double)HZ);
 | 
			
		||||
		{
 | 
			
		||||
		double dbl = HZ;
 | 
			
		||||
		printf("HZ=%g", dbl);
 | 
			
		||||
		}
 | 
			
		||||
# ifdef _SC_CLK_TCK
 | 
			
		||||
		printf(" [sysconf value]");
 | 
			
		||||
# endif
 | 
			
		||||
@@ -1712,7 +2334,57 @@ show_res:
 | 
			
		||||
				1.0/dsa_results[k][0],1.0/dsa_results[k][1]);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
	j=1;
 | 
			
		||||
	for (k=0; k<EC_NUM; k++)
 | 
			
		||||
		{
 | 
			
		||||
		if (!ecdsa_doit[k]) continue;
 | 
			
		||||
		if (j && !mr)
 | 
			
		||||
			{
 | 
			
		||||
			printf("%30ssign    verify    sign/s verify/s\n"," ");
 | 
			
		||||
			j=0;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if (mr)
 | 
			
		||||
			fprintf(stdout,"+F4:%u:%u:%f:%f\n", 
 | 
			
		||||
				k, test_curves_bits[k],
 | 
			
		||||
				ecdsa_results[k][0],ecdsa_results[k][1]);
 | 
			
		||||
		else
 | 
			
		||||
			fprintf(stdout,
 | 
			
		||||
				"%4u bit ecdsa (%s) %8.4fs %8.4fs %8.1f %8.1f\n", 
 | 
			
		||||
				test_curves_bits[k],
 | 
			
		||||
				test_curves_names[k],
 | 
			
		||||
				ecdsa_results[k][0],ecdsa_results[k][1], 
 | 
			
		||||
				1.0/ecdsa_results[k][0],1.0/ecdsa_results[k][1]);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH
 | 
			
		||||
	j=1;
 | 
			
		||||
	for (k=0; k<EC_NUM; k++)
 | 
			
		||||
		{
 | 
			
		||||
		if (!ecdh_doit[k]) continue;
 | 
			
		||||
		if (j && !mr)
 | 
			
		||||
			{
 | 
			
		||||
			printf("%30sop      op/s\n"," ");
 | 
			
		||||
			j=0;
 | 
			
		||||
			}
 | 
			
		||||
		if (mr)
 | 
			
		||||
			fprintf(stdout,"+F5:%u:%u:%f:%f\n",
 | 
			
		||||
				k, test_curves_bits[k],
 | 
			
		||||
				ecdh_results[k][0], 1.0/ecdh_results[k][0]);
 | 
			
		||||
 | 
			
		||||
		else
 | 
			
		||||
			fprintf(stdout,"%4u bit ecdh (%s) %8.4fs %8.1f\n",
 | 
			
		||||
				test_curves_bits[k],
 | 
			
		||||
				test_curves_names[k],
 | 
			
		||||
				ecdh_results[k][0], 1.0/ecdh_results[k][0]);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	mret=0;
 | 
			
		||||
 | 
			
		||||
end:
 | 
			
		||||
	ERR_print_errors(bio_err);
 | 
			
		||||
	if (buf != NULL) OPENSSL_free(buf);
 | 
			
		||||
@@ -1727,8 +2399,24 @@ end:
 | 
			
		||||
		if (dsa_key[i] != NULL)
 | 
			
		||||
			DSA_free(dsa_key[i]);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
	for (i=0; i<EC_NUM; i++)
 | 
			
		||||
		if (ecdsa[i] != NULL)
 | 
			
		||||
			EC_KEY_free(ecdsa[i]);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH
 | 
			
		||||
	for (i=0; i<EC_NUM; i++)
 | 
			
		||||
	{
 | 
			
		||||
		if (ecdh_a[i] != NULL)
 | 
			
		||||
			EC_KEY_free(ecdh_a[i]);
 | 
			
		||||
		if (ecdh_b[i] != NULL)
 | 
			
		||||
			EC_KEY_free(ecdh_b[i]);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(mret);
 | 
			
		||||
	OPENSSL_EXIT(mret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void print_message(const char *s, long num, int length)
 | 
			
		||||
@@ -1768,8 +2456,8 @@ static void pkey_print_message(char *str, char *str2, long num, int bits,
 | 
			
		||||
 | 
			
		||||
static void print_result(int alg,int run_no,int count,double time_used)
 | 
			
		||||
	{
 | 
			
		||||
	BIO_printf(bio_err,mr ? "+R:%ld:%s:%f\n"
 | 
			
		||||
		   : "%ld %s's in %.2fs\n",count,names[alg],time_used);
 | 
			
		||||
	BIO_printf(bio_err,mr ? "+R:%d:%s:%f\n"
 | 
			
		||||
		   : "%d %s's in %.2fs\n",count,names[alg],time_used);
 | 
			
		||||
	results[alg][run_no]=((double)count)/time_used*lengths[run_no];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1781,7 +2469,7 @@ static char *sstrsep(char **string, const char *delim)
 | 
			
		||||
    if (**string == 0)
 | 
			
		||||
        return NULL;
 | 
			
		||||
 | 
			
		||||
    memset(isdelim, 0, 256);
 | 
			
		||||
    memset(isdelim, 0, sizeof isdelim);
 | 
			
		||||
    isdelim[0] = 1;
 | 
			
		||||
 | 
			
		||||
    while (*delim)
 | 
			
		||||
@@ -1928,6 +2616,49 @@ static int do_multi(int multi)
 | 
			
		||||
				else
 | 
			
		||||
					dsa_results[k][1]=d;
 | 
			
		||||
				}
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
			else if(!strncmp(buf,"+F4:",4))
 | 
			
		||||
				{
 | 
			
		||||
				int k;
 | 
			
		||||
				double d;
 | 
			
		||||
				
 | 
			
		||||
				p=buf+4;
 | 
			
		||||
				k=atoi(sstrsep(&p,sep));
 | 
			
		||||
				sstrsep(&p,sep);
 | 
			
		||||
 | 
			
		||||
				d=atof(sstrsep(&p,sep));
 | 
			
		||||
				if(n)
 | 
			
		||||
					ecdsa_results[k][0]=1/(1/ecdsa_results[k][0]+1/d);
 | 
			
		||||
				else
 | 
			
		||||
					ecdsa_results[k][0]=d;
 | 
			
		||||
 | 
			
		||||
				d=atof(sstrsep(&p,sep));
 | 
			
		||||
				if(n)
 | 
			
		||||
					ecdsa_results[k][1]=1/(1/ecdsa_results[k][1]+1/d);
 | 
			
		||||
				else
 | 
			
		||||
					ecdsa_results[k][1]=d;
 | 
			
		||||
				}
 | 
			
		||||
#endif 
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH
 | 
			
		||||
			else if(!strncmp(buf,"+F5:",4))
 | 
			
		||||
				{
 | 
			
		||||
				int k;
 | 
			
		||||
				double d;
 | 
			
		||||
				
 | 
			
		||||
				p=buf+4;
 | 
			
		||||
				k=atoi(sstrsep(&p,sep));
 | 
			
		||||
				sstrsep(&p,sep);
 | 
			
		||||
 | 
			
		||||
				d=atof(sstrsep(&p,sep));
 | 
			
		||||
				if(n)
 | 
			
		||||
					ecdh_results[k][0]=1/(1/ecdh_results[k][0]+1/d);
 | 
			
		||||
				else
 | 
			
		||||
					ecdh_results[k][0]=d;
 | 
			
		||||
 | 
			
		||||
				}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
			else if(!strncmp(buf,"+H:",3))
 | 
			
		||||
				{
 | 
			
		||||
				}
 | 
			
		||||
@@ -1938,3 +2669,4 @@ static int do_multi(int multi)
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								apps/spkac.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								apps/spkac.c
									
									
									
									
									
								
							@@ -92,7 +92,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	CONF *conf = NULL;
 | 
			
		||||
	NETSCAPE_SPKI *spki = NULL;
 | 
			
		||||
	EVP_PKEY *pkey = NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
@@ -141,11 +143,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			spksect= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		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)
 | 
			
		||||
@@ -171,7 +175,9 @@ bad:
 | 
			
		||||
		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");
 | 
			
		||||
#endif
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -181,12 +187,14 @@ bad:
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if(keyfile) {
 | 
			
		||||
		pkey = load_key(bio_err,
 | 
			
		||||
				strcmp(keyfile, "-") ? keyfile : NULL,
 | 
			
		||||
				FORMAT_PEM, passin, e, "private key");
 | 
			
		||||
				FORMAT_PEM, 1, passin, e, "private key");
 | 
			
		||||
		if(!pkey) {
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -295,5 +303,5 @@ end:
 | 
			
		||||
	EVP_PKEY_free(pkey);
 | 
			
		||||
	if(passin) OPENSSL_free(passin);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -86,7 +86,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	STACK_OF(X509) *untrusted = NULL, *trusted = NULL;
 | 
			
		||||
	X509_STORE *cert_ctx=NULL;
 | 
			
		||||
	X509_LOOKUP *lookup=NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	cert_ctx=X509_STORE_new();
 | 
			
		||||
	if (cert_ctx == NULL) goto end;
 | 
			
		||||
@@ -142,11 +144,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				if (argc-- < 1) goto end;
 | 
			
		||||
				trustfile= *(++argv);
 | 
			
		||||
				}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
			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,"-ignore_critical") == 0)
 | 
			
		||||
@@ -170,7 +174,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_file());
 | 
			
		||||
	if (lookup == NULL) abort();
 | 
			
		||||
@@ -219,7 +225,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (ret == 1) {
 | 
			
		||||
		BIO_printf(bio_err,"usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check] [-engine e] cert1 cert2 ...\n");
 | 
			
		||||
		BIO_printf(bio_err,"usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check]");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," [-engine e]");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," cert1 cert2 ...\n");
 | 
			
		||||
		BIO_printf(bio_err,"recognized usages:\n");
 | 
			
		||||
		for(i = 0; i < X509_PURPOSE_get_count(); i++) {
 | 
			
		||||
			X509_PURPOSE *ptmp;
 | 
			
		||||
@@ -232,7 +242,7 @@ end:
 | 
			
		||||
	sk_X509_pop_free(untrusted, X509_free);
 | 
			
		||||
	sk_X509_pop_free(trusted, X509_free);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain, STACK_OF(X509) *tchain, int purpose, ENGINE *e)
 | 
			
		||||
@@ -330,7 +340,8 @@ static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
	if (!ok)
 | 
			
		||||
		{
 | 
			
		||||
		X509_NAME_oneline(
 | 
			
		||||
				X509_get_subject_name(ctx->current_cert),buf,256);
 | 
			
		||||
				X509_get_subject_name(ctx->current_cert),buf,
 | 
			
		||||
				sizeof buf);
 | 
			
		||||
		printf("%s\n",buf);
 | 
			
		||||
		printf("error %d at %d depth lookup:%s\n",ctx->error,
 | 
			
		||||
			ctx->error_depth,
 | 
			
		||||
 
 | 
			
		||||
@@ -172,7 +172,19 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (version) printf("%s\n",SSLeay_version(SSLEAY_VERSION));
 | 
			
		||||
	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) 
 | 
			
		||||
@@ -200,5 +212,5 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	if (dir)  printf("%s\n",SSLeay_version(SSLEAY_DIR));
 | 
			
		||||
end:
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -118,7 +118,6 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
 | 
			
		||||
        HDC hdc;
 | 
			
		||||
	PAINTSTRUCT ps;
 | 
			
		||||
        RECT rect;
 | 
			
		||||
        char buffer[200];
 | 
			
		||||
        static int seeded = 0;
 | 
			
		||||
 | 
			
		||||
	switch (iMsg)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										162
									
								
								apps/x509.c
									
									
									
									
									
								
							
							
						
						
									
										162
									
								
								apps/x509.c
									
									
									
									
									
								
							@@ -92,7 +92,9 @@ static char *x509_usage[]={
 | 
			
		||||
" -out arg        - output file - default stdout\n",
 | 
			
		||||
" -passin arg     - private key password source\n",
 | 
			
		||||
" -serial         - print serial number value\n",
 | 
			
		||||
" -hash           - print hash value\n",
 | 
			
		||||
" -subject_hash   - print subject hash value\n",
 | 
			
		||||
" -issuer_hash    - print issuer hash value\n",
 | 
			
		||||
" -hash           - synonym for -subject_hash\n",
 | 
			
		||||
" -subject        - print subject DN\n",
 | 
			
		||||
" -issuer         - print issuer DN\n",
 | 
			
		||||
" -email          - print email address(es)\n",
 | 
			
		||||
@@ -122,7 +124,7 @@ static char *x509_usage[]={
 | 
			
		||||
" -CAkey arg      - set the CA key, must be PEM format\n",
 | 
			
		||||
"                   missing, it is assumed to be in the CA file.\n",
 | 
			
		||||
" -CAcreateserial - create serial number file if it does not exist\n",
 | 
			
		||||
" -CAserial       - serial file\n",
 | 
			
		||||
" -CAserial arg   - serial file\n",
 | 
			
		||||
" -set_serial     - serial number to use\n",
 | 
			
		||||
" -text           - print the certificate in text form\n",
 | 
			
		||||
" -C              - print out C code forms\n",
 | 
			
		||||
@@ -131,7 +133,9 @@ static char *x509_usage[]={
 | 
			
		||||
" -extensions     - section from config file with X509V3 extensions to add\n",
 | 
			
		||||
" -clrext         - delete extensions before signing and input certificate\n",
 | 
			
		||||
" -nameopt arg    - various certificate name options\n",
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
" -engine e       - use engine e, possibly a hardware device.\n",
 | 
			
		||||
#endif
 | 
			
		||||
" -certopt arg    - various certificate text options\n",
 | 
			
		||||
NULL
 | 
			
		||||
};
 | 
			
		||||
@@ -165,8 +169,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	char *infile=NULL,*outfile=NULL,*keyfile=NULL,*CAfile=NULL;
 | 
			
		||||
	char *CAkeyfile=NULL,*CAserial=NULL;
 | 
			
		||||
	char *alias=NULL;
 | 
			
		||||
	int text=0,serial=0,hash=0,subject=0,issuer=0,startdate=0,enddate=0;
 | 
			
		||||
	int ocspid=0;
 | 
			
		||||
	int text=0,serial=0,subject=0,issuer=0,startdate=0,enddate=0;
 | 
			
		||||
	int subject_hash=0,issuer_hash=0,ocspid=0;
 | 
			
		||||
	int noout=0,sign_flag=0,CA_flag=0,CA_createserial=0,email=0;
 | 
			
		||||
	int trustout=0,clrtrust=0,clrreject=0,aliasout=0,clrext=0;
 | 
			
		||||
	int C=0;
 | 
			
		||||
@@ -183,7 +187,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	int need_rand = 0;
 | 
			
		||||
	int checkend=0,checkoffset=0;
 | 
			
		||||
	unsigned long nmflag = 0, certflag = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	reqfile=0;
 | 
			
		||||
 | 
			
		||||
@@ -245,7 +251,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		else if (strcmp(*argv,"-CAkeyform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			CAformat=str2fmt(*(++argv));
 | 
			
		||||
			CAkeyformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-days") == 0)
 | 
			
		||||
			{
 | 
			
		||||
@@ -354,17 +360,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			if (!set_name_ex(&nmflag, *(++argv))) goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-setalias") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			alias= *(++argv);
 | 
			
		||||
			trustout = 1;
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-C") == 0)
 | 
			
		||||
			C= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-email") == 0)
 | 
			
		||||
@@ -379,8 +381,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			x509req= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-hash") == 0)
 | 
			
		||||
			hash= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-hash") == 0
 | 
			
		||||
			|| strcmp(*argv,"-subject_hash") == 0)
 | 
			
		||||
			subject_hash= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-issuer_hash") == 0)
 | 
			
		||||
			issuer_hash= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-subject") == 0)
 | 
			
		||||
			subject= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-issuer") == 0)
 | 
			
		||||
@@ -450,7 +455,9 @@ bad:
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (need_rand)
 | 
			
		||||
		app_RAND_load_file(NULL, bio_err, 0);
 | 
			
		||||
@@ -479,7 +486,7 @@ bad:
 | 
			
		||||
 | 
			
		||||
	if (extfile)
 | 
			
		||||
		{
 | 
			
		||||
		long errorline;
 | 
			
		||||
		long errorline = -1;
 | 
			
		||||
		X509V3_CTX ctx2;
 | 
			
		||||
		extconf = NCONF_new(NULL);
 | 
			
		||||
		if (!NCONF_load(extconf, extfile,&errorline))
 | 
			
		||||
@@ -705,10 +712,14 @@ bad:
 | 
			
		||||
				if (alstr) BIO_printf(STDout,"%s\n", alstr);
 | 
			
		||||
				else BIO_puts(STDout,"<No Alias>\n");
 | 
			
		||||
				}
 | 
			
		||||
			else if (hash == i)
 | 
			
		||||
			else if (subject_hash == i)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(STDout,"%08lx\n",X509_subject_name_hash(x));
 | 
			
		||||
				}
 | 
			
		||||
			else if (issuer_hash == i)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(STDout,"%08lx\n",X509_issuer_name_hash(x));
 | 
			
		||||
				}
 | 
			
		||||
			else if (pprint == i)
 | 
			
		||||
				{
 | 
			
		||||
				X509_PURPOSE *ptmp;
 | 
			
		||||
@@ -770,10 +781,11 @@ bad:
 | 
			
		||||
				int y,z;
 | 
			
		||||
 | 
			
		||||
				X509_NAME_oneline(X509_get_subject_name(x),
 | 
			
		||||
					buf,256);
 | 
			
		||||
					buf,sizeof buf);
 | 
			
		||||
				BIO_printf(STDout,"/* subject:%s */\n",buf);
 | 
			
		||||
				m=X509_NAME_oneline(
 | 
			
		||||
					X509_get_issuer_name(x),buf,256);
 | 
			
		||||
					X509_get_issuer_name(x),buf,
 | 
			
		||||
					sizeof buf);
 | 
			
		||||
				BIO_printf(STDout,"/* issuer :%s */\n",buf);
 | 
			
		||||
 | 
			
		||||
				z=i2d_X509(x,NULL);
 | 
			
		||||
@@ -861,8 +873,8 @@ bad:
 | 
			
		||||
				if (Upkey == NULL)
 | 
			
		||||
					{
 | 
			
		||||
					Upkey=load_key(bio_err,
 | 
			
		||||
						keyfile,keyformat, passin, e,
 | 
			
		||||
						"Private key");
 | 
			
		||||
						keyfile, keyformat, 0,
 | 
			
		||||
						passin, e, "Private key");
 | 
			
		||||
					if (Upkey == NULL) goto end;
 | 
			
		||||
					}
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
@@ -870,7 +882,7 @@ bad:
 | 
			
		||||
		                        digest=EVP_dss1();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
				if (Upkey->type == EVP_PKEY_ECDSA)
 | 
			
		||||
				if (Upkey->type == EVP_PKEY_EC)
 | 
			
		||||
					digest=EVP_ecdsa();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -884,8 +896,9 @@ bad:
 | 
			
		||||
				if (CAkeyfile != NULL)
 | 
			
		||||
					{
 | 
			
		||||
					CApkey=load_key(bio_err,
 | 
			
		||||
						CAkeyfile,CAkeyformat, passin,
 | 
			
		||||
						e, "CA Private Key");
 | 
			
		||||
						CAkeyfile, CAkeyformat,
 | 
			
		||||
						0, passin, e,
 | 
			
		||||
						"CA Private Key");
 | 
			
		||||
					if (CApkey == NULL) goto end;
 | 
			
		||||
					}
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
@@ -893,7 +906,7 @@ bad:
 | 
			
		||||
		                        digest=EVP_dss1();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
				if (CApkey->type == EVP_PKEY_ECDSA)
 | 
			
		||||
				if (CApkey->type == EVP_PKEY_EC)
 | 
			
		||||
					digest = EVP_ecdsa();
 | 
			
		||||
#endif
 | 
			
		||||
				
 | 
			
		||||
@@ -916,17 +929,21 @@ bad:
 | 
			
		||||
				else
 | 
			
		||||
					{
 | 
			
		||||
					pk=load_key(bio_err,
 | 
			
		||||
						keyfile,FORMAT_PEM, passin, e,
 | 
			
		||||
						"request key");
 | 
			
		||||
						keyfile, FORMAT_PEM, 0,
 | 
			
		||||
						passin, e, "request key");
 | 
			
		||||
					if (pk == NULL) goto end;
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
				BIO_printf(bio_err,"Generating certificate request\n");
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
		                if (pk->type == EVP_PKEY_DSA)
 | 
			
		||||
		                        digest=EVP_dss1();
 | 
			
		||||
				else if (pk->type == EVP_PKEY_ECDSA)
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
				if (pk->type == EVP_PKEY_EC)
 | 
			
		||||
					digest=EVP_ecdsa();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
				rq=X509_to_X509_REQ(x,pk,digest);
 | 
			
		||||
				EVP_PKEY_free(pk);
 | 
			
		||||
@@ -1023,108 +1040,47 @@ end:
 | 
			
		||||
	sk_ASN1_OBJECT_pop_free(reject, ASN1_OBJECT_free);
 | 
			
		||||
	if (passin) OPENSSL_free(passin);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static ASN1_INTEGER *load_serial(char *CAfile, char *serialfile, int create)
 | 
			
		||||
static ASN1_INTEGER *x509_load_serial(char *CAfile, char *serialfile, int create)
 | 
			
		||||
	{
 | 
			
		||||
	char *buf = NULL, *p;
 | 
			
		||||
	MS_STATIC char buf2[1024];
 | 
			
		||||
	ASN1_INTEGER *bs = NULL, *bs2 = NULL;
 | 
			
		||||
	BIO *io = NULL;
 | 
			
		||||
	ASN1_INTEGER *bs = NULL;
 | 
			
		||||
	BIGNUM *serial = NULL;
 | 
			
		||||
	size_t len;
 | 
			
		||||
 | 
			
		||||
	buf=OPENSSL_malloc( ((serialfile == NULL)
 | 
			
		||||
	len = ((serialfile == NULL)
 | 
			
		||||
		?(strlen(CAfile)+strlen(POSTFIX)+1)
 | 
			
		||||
			:(strlen(serialfile)))+1);
 | 
			
		||||
		:(strlen(serialfile)))+1;
 | 
			
		||||
	buf=OPENSSL_malloc(len);
 | 
			
		||||
	if (buf == NULL) { BIO_printf(bio_err,"out of mem\n"); goto end; }
 | 
			
		||||
	if (serialfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		strcpy(buf,CAfile);
 | 
			
		||||
		BUF_strlcpy(buf,CAfile,len);
 | 
			
		||||
		for (p=buf; *p; p++)
 | 
			
		||||
			if (*p == '.')
 | 
			
		||||
				{
 | 
			
		||||
				*p='\0';
 | 
			
		||||
				break;
 | 
			
		||||
				}
 | 
			
		||||
		strcat(buf,POSTFIX);
 | 
			
		||||
		BUF_strlcat(buf,POSTFIX,len);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		strcpy(buf,serialfile);
 | 
			
		||||
	serial=BN_new();
 | 
			
		||||
	bs=ASN1_INTEGER_new();
 | 
			
		||||
	if ((serial == NULL) || (bs == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
		BUF_strlcpy(buf,serialfile,len);
 | 
			
		||||
 | 
			
		||||
	io=BIO_new(BIO_s_file());
 | 
			
		||||
	if (io == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if (BIO_read_filename(io,buf) <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (!create)
 | 
			
		||||
			{
 | 
			
		||||
			perror(buf);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			ASN1_INTEGER_set(bs,1);
 | 
			
		||||
			BN_one(serial);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else 
 | 
			
		||||
		{
 | 
			
		||||
		if (!a2i_ASN1_INTEGER(io,bs,buf2,1024))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to load serial number from %s\n",buf);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			serial=BN_bin2bn(bs->data,bs->length,serial);
 | 
			
		||||
			if (serial == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"error converting bin 2 bn");
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	serial = load_serial(buf, create, NULL);
 | 
			
		||||
	if (serial == NULL) goto end;
 | 
			
		||||
 | 
			
		||||
	if (!BN_add_word(serial,1))
 | 
			
		||||
		{ BIO_printf(bio_err,"add_word failure\n"); goto end; }
 | 
			
		||||
	if (!(bs2 = BN_to_ASN1_INTEGER(serial, NULL)))
 | 
			
		||||
		{ BIO_printf(bio_err,"error converting bn 2 asn1_integer\n"); goto end; }
 | 
			
		||||
	if (BIO_write_filename(io,buf) <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"error attempting to write serial number file\n");
 | 
			
		||||
		perror(buf);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	i2a_ASN1_INTEGER(io,bs2);
 | 
			
		||||
	BIO_puts(io,"\n");
 | 
			
		||||
 | 
			
		||||
	BIO_free(io);
 | 
			
		||||
	if (buf) OPENSSL_free(buf);
 | 
			
		||||
	ASN1_INTEGER_free(bs2);
 | 
			
		||||
	BN_free(serial);
 | 
			
		||||
	io=NULL;
 | 
			
		||||
	return bs;
 | 
			
		||||
	if (!save_serial(buf, NULL, serial, &bs)) goto end;
 | 
			
		||||
 | 
			
		||||
 end:
 | 
			
		||||
	if (buf) OPENSSL_free(buf);
 | 
			
		||||
	BIO_free(io);
 | 
			
		||||
	ASN1_INTEGER_free(bs);
 | 
			
		||||
	BN_free(serial);
 | 
			
		||||
	return NULL;
 | 
			
		||||
 | 
			
		||||
	return bs;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
 | 
			
		||||
@@ -1146,10 +1102,10 @@ static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (sno) bs = sno;
 | 
			
		||||
	else if (!(bs = load_serial(CAfile, serialfile, create)))
 | 
			
		||||
	else if (!(bs = x509_load_serial(CAfile, serialfile, create)))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	if (!X509_STORE_add_cert(ctx,x)) goto end;
 | 
			
		||||
/*	if (!X509_STORE_add_cert(ctx,x)) goto end;*/
 | 
			
		||||
 | 
			
		||||
	/* NOTE: this certificate can/should be self signed, unless it was
 | 
			
		||||
	 * a certificate request in which case it is not. */
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ RC4-MD5, but a re-connect tries to use DES-CBC-SHA.  So netscape, when
 | 
			
		||||
doing a re-connect, always takes the first cipher in the cipher list.
 | 
			
		||||
 | 
			
		||||
If we accept a netscape connection, demand a client cert, have a
 | 
			
		||||
non-self-sighed CA which does not have it's CA in netscape, and the
 | 
			
		||||
non-self-signed CA which does not have it's CA in netscape, and the
 | 
			
		||||
browser has a cert, it will crash/hang.  Works for 3.x and 4.xbeta
 | 
			
		||||
 | 
			
		||||
Netscape browsers do not really notice the server sending a
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								certs/expired/vsign3.pem
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								certs/expired/vsign3.pem
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
subject=/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
			
		||||
notBefore=Jan 29 00:00:00 1996 GMT
 | 
			
		||||
notAfter=Jan  7 23:59:59 2004 GMT
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICPTCCAaYCEQDknv3zOugOz6URPhmkJAIyMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
 | 
			
		||||
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
 | 
			
		||||
c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
 | 
			
		||||
NjAxMjkwMDAwMDBaFw0wNDAxMDcyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
 | 
			
		||||
VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJp
 | 
			
		||||
bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
 | 
			
		||||
jQAwgYkCgYEAyVxZnvIbigEUtBDfBEDb41evakVAj4QMC9Ez2dkRz+4CWB8l9yqo
 | 
			
		||||
RAWq7AMfeH+ek7maAKojfdashaJjRcdyJ8z0TMZ1cdI5709C8HXfCpDGjiBvmA/4
 | 
			
		||||
rCNfcCk2pMmG57GaIMtTpYXnPb59mv4kRTPcdhXtD6JxZExlLoFoRacCAwEAATAN
 | 
			
		||||
BgkqhkiG9w0BAQIFAAOBgQBhcOwvP579K+ZoVCGwZ3kIDCCWMYoNer62Jt95LCJp
 | 
			
		||||
STbjl3diYaIy13pUITa6Ask05yXaRDWw0lyAXbOU+Pms7qRgdSoflUkjsUp89LNH
 | 
			
		||||
ciFbfperVKxi513srpvSybIk+4Kt6WcVS7qqpvCXoPawl1cAyAw8CaCCBLpB2veZ
 | 
			
		||||
pA==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
@@ -1,18 +1,17 @@
 | 
			
		||||
subject=/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
			
		||||
notBefore=Jan 29 00:00:00 1996 GMT
 | 
			
		||||
notAfter=Jan  7 23:59:59 2004 GMT
 | 
			
		||||
notAfter=Aug  1 23:59:59 2028 GMT
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICPTCCAaYCEQDknv3zOugOz6URPhmkJAIyMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
 | 
			
		||||
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
 | 
			
		||||
c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
 | 
			
		||||
NjAxMjkwMDAwMDBaFw0wNDAxMDcyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
 | 
			
		||||
VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJp
 | 
			
		||||
bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
 | 
			
		||||
jQAwgYkCgYEAyVxZnvIbigEUtBDfBEDb41evakVAj4QMC9Ez2dkRz+4CWB8l9yqo
 | 
			
		||||
RAWq7AMfeH+ek7maAKojfdashaJjRcdyJ8z0TMZ1cdI5709C8HXfCpDGjiBvmA/4
 | 
			
		||||
rCNfcCk2pMmG57GaIMtTpYXnPb59mv4kRTPcdhXtD6JxZExlLoFoRacCAwEAATAN
 | 
			
		||||
BgkqhkiG9w0BAQIFAAOBgQBhcOwvP579K+ZoVCGwZ3kIDCCWMYoNer62Jt95LCJp
 | 
			
		||||
STbjl3diYaIy13pUITa6Ask05yXaRDWw0lyAXbOU+Pms7qRgdSoflUkjsUp89LNH
 | 
			
		||||
ciFbfperVKxi513srpvSybIk+4Kt6WcVS7qqpvCXoPawl1cAyAw8CaCCBLpB2veZ
 | 
			
		||||
pA==
 | 
			
		||||
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
 | 
			
		||||
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
 | 
			
		||||
cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
 | 
			
		||||
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
 | 
			
		||||
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
 | 
			
		||||
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
 | 
			
		||||
ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
 | 
			
		||||
BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
 | 
			
		||||
I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
 | 
			
		||||
CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
 | 
			
		||||
lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
 | 
			
		||||
AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										127
									
								
								config
									
									
									
									
									
								
							
							
						
						
									
										127
									
								
								config
									
									
									
									
									
								
							@@ -74,34 +74,27 @@ if [ "x$XREL" != "x" ]; then
 | 
			
		||||
		echo "whatever-whatever-sco5"; exit 0
 | 
			
		||||
		;;
 | 
			
		||||
	    4.2MP)
 | 
			
		||||
		if [ "x$VERSION" = "x2.01" ]; then
 | 
			
		||||
		    echo "${MACHINE}-whatever-unixware201"; exit 0
 | 
			
		||||
		elif [ "x$VERSION" = "x2.02" ]; then
 | 
			
		||||
		    echo "${MACHINE}-whatever-unixware202"; exit 0
 | 
			
		||||
		elif [ "x$VERSION" = "x2.03" ]; then
 | 
			
		||||
		    echo "${MACHINE}-whatever-unixware203"; exit 0
 | 
			
		||||
		elif [ "x$VERSION" = "x2.1.1" ]; then
 | 
			
		||||
		    echo "${MACHINE}-whatever-unixware211"; exit 0
 | 
			
		||||
		elif [ "x$VERSION" = "x2.1.2" ]; then
 | 
			
		||||
		    echo "${MACHINE}-whatever-unixware212"; exit 0
 | 
			
		||||
		elif [ "x$VERSION" = "x2.1.3" ]; then
 | 
			
		||||
		    echo "${MACHINE}-whatever-unixware213"; exit 0
 | 
			
		||||
		else
 | 
			
		||||
		    echo "${MACHINE}-whatever-unixware2"; exit 0
 | 
			
		||||
		fi
 | 
			
		||||
		case "x${VERSION}" in
 | 
			
		||||
		    x2.0*) echo "whatever-whatever-unixware20"; exit 0 ;;
 | 
			
		||||
		    x2.1*) echo "whatever-whatever-unixware21"; exit 0 ;;
 | 
			
		||||
		    x2*)   echo "whatever-whatever-unixware2";  exit 0 ;;
 | 
			
		||||
		esac
 | 
			
		||||
		;;
 | 
			
		||||
	    4.2)
 | 
			
		||||
		echo "whatever-whatever-unixware1"; exit 0
 | 
			
		||||
		;;
 | 
			
		||||
	    OpenUNIX)
 | 
			
		||||
		if [ "`echo x$VERSION | sed -e 's/\..*//'`" = "x8" ]; then
 | 
			
		||||
		    echo "${MACHINE}-unknown-OpenUNIX${VERSION}"; exit 0
 | 
			
		||||
		fi
 | 
			
		||||
		;;
 | 
			
		||||
	    5)
 | 
			
		||||
		if [ "`echo x$VERSION | sed -e 's/\..*//'`" = "x7" ]; then
 | 
			
		||||
		    echo "${MACHINE}-sco-unixware7"; exit 0
 | 
			
		||||
		fi
 | 
			
		||||
		case "x${VERSION}" in
 | 
			
		||||
		    # We hardcode i586 in place of ${MACHINE} for the
 | 
			
		||||
		    # following reason. The catch is that even though Pentium
 | 
			
		||||
		    # is minimum requirement for platforms in question,
 | 
			
		||||
		    # ${MACHINE} gets always assigned to i386. Now, problem
 | 
			
		||||
		    # with i386 is that it makes ./config pass 386 to
 | 
			
		||||
		    # ./Configure, which in turn makes make generate
 | 
			
		||||
		    # inefficient SHA-1 (for this moment) code.
 | 
			
		||||
		    x7*)  echo "i586-sco-unixware7";           exit 0 ;;
 | 
			
		||||
		    x8*)  echo "i586-unkn-OpenUNIX${VERSION}"; exit 0 ;;
 | 
			
		||||
		esac
 | 
			
		||||
		;;
 | 
			
		||||
	esac
 | 
			
		||||
    fi
 | 
			
		||||
@@ -141,7 +134,7 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
			
		||||
	HPUXVER=`echo ${RELEASE}|sed -e 's/[^.]*.[0B]*//'`
 | 
			
		||||
	case "$HPUXVER" in
 | 
			
		||||
	    1[0-9].*)	# HPUX 10 and 11 targets are unified
 | 
			
		||||
		echo "${MACHINE}-hp-hpux10"; exit 0
 | 
			
		||||
		echo "${MACHINE}-hp-hpux1x"; exit 0
 | 
			
		||||
		;;
 | 
			
		||||
	    *)
 | 
			
		||||
		echo "${MACHINE}-hp-hpux"; exit 0
 | 
			
		||||
@@ -196,7 +189,7 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
			
		||||
	echo "${MACHINE}-whatever-bsdi"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    FreeBSD:*)
 | 
			
		||||
    FreeBSD:*:*:*386*)
 | 
			
		||||
        VERS=`echo ${RELEASE} | sed -e 's/[-(].*//'`
 | 
			
		||||
        MACH=`sysctl -n hw.model`
 | 
			
		||||
        ARCH='whatever'
 | 
			
		||||
@@ -205,7 +198,6 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
			
		||||
           *486*       ) MACH="i486"     ;;
 | 
			
		||||
           Pentium\ II*) MACH="i686"     ;;
 | 
			
		||||
           Pentium*    ) MACH="i586"     ;;
 | 
			
		||||
           Alpha*      ) MACH="alpha"    ;;
 | 
			
		||||
           *           ) MACH="$MACHINE" ;;
 | 
			
		||||
        esac
 | 
			
		||||
        case ${MACH} in
 | 
			
		||||
@@ -214,6 +206,10 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
			
		||||
        echo "${MACH}-${ARCH}-freebsd${VERS}"; exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
 | 
			
		||||
    FreeBSD:*)
 | 
			
		||||
	echo "${MACHINE}-whatever-freebsd"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    NetBSD:*:*:*386*)
 | 
			
		||||
        echo "`(/usr/sbin/sysctl -n hw.model || /sbin/sysctl -n hw.model) | sed 's,.*\(.\)86-class.*,i\186,'`-whatever-netbsd"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
@@ -351,6 +347,10 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
			
		||||
    *CRAY*)
 | 
			
		||||
       echo "j90-cray-unicos"; exit 0;
 | 
			
		||||
       ;;
 | 
			
		||||
 | 
			
		||||
    NONSTOP_KERNEL*)
 | 
			
		||||
       echo "nsr-tandem-nsk"; exit 0;
 | 
			
		||||
       ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
@@ -390,18 +390,34 @@ exit 0
 | 
			
		||||
 | 
			
		||||
# figure out if gcc is available and if so we use it otherwise
 | 
			
		||||
# we fallback to whatever cc does on the system
 | 
			
		||||
GCCVER=`(gcc --version) 2>/dev/null`
 | 
			
		||||
GCCVER=`(gcc -dumpversion) 2>/dev/null`
 | 
			
		||||
if [ "$GCCVER" != "" ]; then
 | 
			
		||||
  CC=gcc
 | 
			
		||||
  # then strip off whatever prefix Cygnus prepends the number with...
 | 
			
		||||
  GCCVER=`echo $GCCVER | sed 's/^[a-z]*\-//'`
 | 
			
		||||
  # then strip off whatever prefix egcs prepends the number with...
 | 
			
		||||
  # Hopefully, this will work for any future prefixes as well.
 | 
			
		||||
  GCCVER=`echo $GCCVER | sed 's/^[a-zA-Z]*\-//'`
 | 
			
		||||
  # Since gcc 3.1 gcc --version behaviour has changed.  gcc -dumpversion
 | 
			
		||||
  # does give us what we want though, so we use that.  We just just the
 | 
			
		||||
  # major and minor version numbers.
 | 
			
		||||
  # peak single digit before and after first dot, e.g. 2.95.1 gives 29
 | 
			
		||||
  GCCVER=`echo $GCCVER | sed 's/\([0-9]\)\.\([0-9]\).*/\1\2/'`
 | 
			
		||||
else
 | 
			
		||||
  CC=cc
 | 
			
		||||
fi
 | 
			
		||||
GCCVER=${GCCVER:-0}
 | 
			
		||||
 | 
			
		||||
if [ "$SYSTEM" = "HP-UX" ];then
 | 
			
		||||
  # By default gcc is a ILP32 compiler (with long long == 64).
 | 
			
		||||
  GCC_BITS="32"
 | 
			
		||||
  if [ $GCCVER -ge 30 ]; then
 | 
			
		||||
    # PA64 support only came in with gcc 3.0.x.
 | 
			
		||||
    # We check if the preprocessor symbol __LP64__ is defined...
 | 
			
		||||
    if echo "__LP64__" | gcc -v -E -x c - 2>/dev/null | grep "^__LP64__" 2>&1 > /dev/null; then
 | 
			
		||||
      : # __LP64__ has slipped through, it therefore is not defined
 | 
			
		||||
    else
 | 
			
		||||
      GCC_BITS="64"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
if [ "$SYSTEM" = "SunOS" ]; then
 | 
			
		||||
  if [ $GCCVER -ge 30 ]; then
 | 
			
		||||
    # 64-bit ABI isn't officially supported in gcc 3.0, but it appears
 | 
			
		||||
@@ -442,6 +458,10 @@ if [ "${SYSTEM}-${MACHINE}" = "Linux-alpha" ]; then
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ "${SYSTEM}" = "AIX" ]; then	# favor vendor cc over gcc
 | 
			
		||||
    (cc) 2>&1 | grep -iv "not found" > /dev/null && CC=cc
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
CCVER=${CCVER:-0}
 | 
			
		||||
 | 
			
		||||
# read the output of the embedded GuessOS 
 | 
			
		||||
@@ -454,7 +474,7 @@ echo Operating system: $GUESSOS
 | 
			
		||||
# more time that I want to waste at the moment
 | 
			
		||||
case "$GUESSOS" in
 | 
			
		||||
  mips2-sgi-irix)
 | 
			
		||||
	CPU=`(hinv -t cpu) 2>/dev/null | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'`
 | 
			
		||||
	CPU=`(hinv -t cpu) 2>/dev/null | head -1 | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'`
 | 
			
		||||
	CPU=${CPU:-0}
 | 
			
		||||
	if [ $CPU -ge 4000 ]; then
 | 
			
		||||
		options="$options -mips2"
 | 
			
		||||
@@ -462,7 +482,7 @@ case "$GUESSOS" in
 | 
			
		||||
	OUT="irix-$CC"
 | 
			
		||||
	;;
 | 
			
		||||
  mips3-sgi-irix)
 | 
			
		||||
	CPU=`(hinv -t cpu) 2>/dev/null | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'`
 | 
			
		||||
	CPU=`(hinv -t cpu) 2>/dev/null | head -1 | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'`
 | 
			
		||||
	CPU=${CPU:-0}
 | 
			
		||||
	if [ $CPU -ge 5000 ]; then
 | 
			
		||||
		options="$options -mips4"
 | 
			
		||||
@@ -478,7 +498,7 @@ case "$GUESSOS" in
 | 
			
		||||
	  echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
	  (stty -icanon min 0 time 50; read waste) < /dev/tty
 | 
			
		||||
	fi
 | 
			
		||||
        CPU=`(hinv -t cpu) 2>/dev/null | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'`
 | 
			
		||||
        CPU=`(hinv -t cpu) 2>/dev/null | head -1 | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'`
 | 
			
		||||
        CPU=${CPU:-0}
 | 
			
		||||
        if [ $CPU -ge 5000 ]; then
 | 
			
		||||
                options="$options -mips4"
 | 
			
		||||
@@ -517,6 +537,10 @@ EOF
 | 
			
		||||
	${CC} -o dummy dummy.c && OUT=`./dummy ${MACHINE}`
 | 
			
		||||
	rm dummy dummy.c
 | 
			
		||||
	;;
 | 
			
		||||
  ppc64-*-linux2)
 | 
			
		||||
	#Use the standard target for PPC architecture until we create a
 | 
			
		||||
	#special one for the 64bit architecture.
 | 
			
		||||
	OUT="linux-ppc" ;;
 | 
			
		||||
  ppc-*-linux2) OUT="linux-ppc" ;;
 | 
			
		||||
  m68k-*-linux*) OUT="linux-m68k" ;;
 | 
			
		||||
  ia64-*-linux?) OUT="linux-ia64" ;;
 | 
			
		||||
@@ -524,12 +548,13 @@ EOF
 | 
			
		||||
  ppc-apple-darwin*) OUT="darwin-ppc-cc" ;;
 | 
			
		||||
  i386-apple-darwin*) OUT="darwin-i386-cc" ;;
 | 
			
		||||
  sparc64-*-linux2)
 | 
			
		||||
	#Before we can uncomment following lines we have to wait at least
 | 
			
		||||
	#till 64-bit glibc for SPARC is operational:-(
 | 
			
		||||
	#echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
			
		||||
	#echo "         invoke './Configure linux64-sparcv9' *manually*."
 | 
			
		||||
	#echo "         Type return if you want to continue, Ctrl-C to abort."
 | 
			
		||||
	#read waste < /dev/tty
 | 
			
		||||
	echo "WARNING! If you *know* that your GNU C supports 64-bit/V9 ABI"
 | 
			
		||||
	echo "         and wish to build 64-bit library, then you have to"
 | 
			
		||||
	echo "         invoke './Configure linux64-sparcv9' *manually*."
 | 
			
		||||
	if [ "$TEST" = "false" ]; then
 | 
			
		||||
	  echo "          You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
	  (stty -icanon min 0 time 50; read waste) < /dev/tty
 | 
			
		||||
	fi
 | 
			
		||||
	OUT="linux-sparcv9" ;;
 | 
			
		||||
  sparc-*-linux2)
 | 
			
		||||
	KARCH=`awk '/^type/{print$3}' /proc/cpuinfo`
 | 
			
		||||
@@ -562,6 +587,7 @@ EOF
 | 
			
		||||
  arm*-*-linux2) OUT="linux-elf-arm" ;;
 | 
			
		||||
  s390-*-linux2) OUT="linux-s390" ;;
 | 
			
		||||
  s390x-*-linux?) OUT="linux-s390x" ;;
 | 
			
		||||
  x86_64-*-linux?) OUT="linux-x86_64" ;;
 | 
			
		||||
  *-*-linux2) OUT="linux-elf"
 | 
			
		||||
	if [ "$GCCVER" -gt 28 ]; then
 | 
			
		||||
          if grep '^model.*Pentium' /proc/cpuinfo >/dev/null ; then
 | 
			
		||||
@@ -615,6 +641,8 @@ EOF
 | 
			
		||||
  *86*-*-solaris2) OUT="solaris-x86-$CC" ;;
 | 
			
		||||
  *-*-sunos4) OUT="sunos-$CC" ;;
 | 
			
		||||
  alpha*-*-freebsd*) OUT="FreeBSD-alpha" ;;
 | 
			
		||||
  sparc64-*-freebsd*) OUT="FreeBSD-sparc64" ;;
 | 
			
		||||
  ia64-*-freebsd*) OUT="FreeBSD-ia64" ;;
 | 
			
		||||
  *-freebsd[3-9]*) OUT="FreeBSD-elf" ;;
 | 
			
		||||
  *-freebsd[1-2]*) OUT="FreeBSD" ;;
 | 
			
		||||
  *86*-*-netbsd) OUT="NetBSD-x86" ;;
 | 
			
		||||
@@ -655,23 +683,25 @@ EOF
 | 
			
		||||
  RM*-siemens-sysv4) OUT="ReliantUNIX" ;;
 | 
			
		||||
  *-siemens-sysv4) OUT="SINIX" ;;
 | 
			
		||||
  *-hpux1*)
 | 
			
		||||
	OUT="hpux-parisc-$CC"
 | 
			
		||||
	if [ $CC = "gcc" -a $GCC_BITS = "64" ]; then
 | 
			
		||||
	    OUT="hpux64-parisc2-gcc"
 | 
			
		||||
	fi
 | 
			
		||||
	KERNEL_BITS=`(getconf KERNEL_BITS) 2>/dev/null`
 | 
			
		||||
	KERNEL_BITS=${KERNEL_BITS:-32}
 | 
			
		||||
	CPU_VERSION=`(getconf CPU_VERSION) 2>/dev/null`
 | 
			
		||||
	CPU_VERSION=${CPU_VERSION:-0}
 | 
			
		||||
	# See <sys/unistd.h> for further info on CPU_VERSION.
 | 
			
		||||
	if   [ $CPU_VERSION -ge 768 ]; then	# IA-64 CPU
 | 
			
		||||
	     echo "NOTICE! 64-bit is the only ABI currently operational on HP-UXi."
 | 
			
		||||
	     echo "        Post request to openssl-dev@openssl.org for 32-bit support."
 | 
			
		||||
	     echo "WARNING! 64-bit ABI is the default configured ABI on HP-UXi."
 | 
			
		||||
	     echo "         If you wish to build 32-bit library, the you have to"
 | 
			
		||||
	     echo "         invoke './Configure hpux-ia64-cc' *manually*."
 | 
			
		||||
	     if [ "$TEST" = "false" ]; then
 | 
			
		||||
		echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
		(stty -icanon min 0 time 50; read waste) < /dev/tty
 | 
			
		||||
	     fi
 | 
			
		||||
	     OUT="hpux64-ia64-cc"
 | 
			
		||||
	elif [ $CPU_VERSION -ge 532 ]; then	# PA-RISC 2.x CPU
 | 
			
		||||
	     if [ "$CC" = "cc" ]; then
 | 
			
		||||
		OUT="hpux-parisc2-cc" # can't we have hpux-parisc2-gcc?
 | 
			
		||||
	     fi
 | 
			
		||||
	     OUT=${OUT:-"hpux-parisc2-${CC}"}
 | 
			
		||||
	     if [ $KERNEL_BITS -eq 64 -a "$CC" = "cc" ]; then
 | 
			
		||||
		echo "WARNING! If you wish to build 64-bit library then you have to"
 | 
			
		||||
		echo "         invoke './Configure hpux64-parisc2-cc' *manually*."
 | 
			
		||||
@@ -681,9 +711,9 @@ EOF
 | 
			
		||||
		fi
 | 
			
		||||
	     fi
 | 
			
		||||
	elif [ $CPU_VERSION -ge 528 ]; then	# PA-RISC 1.1+ CPU
 | 
			
		||||
	     :
 | 
			
		||||
	     OUT="hpux-parisc-${CC}
 | 
			
		||||
	elif [ $CPU_VERSION -ge 523 ]; then	# PA-RISC 1.0 CPU
 | 
			
		||||
	     :
 | 
			
		||||
	     OUT="hpux-parisc-${CC}
 | 
			
		||||
	else					# Motorola(?) CPU
 | 
			
		||||
	     OUT="hpux-$CC"
 | 
			
		||||
	fi
 | 
			
		||||
@@ -697,6 +727,7 @@ EOF
 | 
			
		||||
  *-*-cygwin) OUT="Cygwin" ;;
 | 
			
		||||
  t3e-cray-unicosmk) OUT="cray-t3e" ;;
 | 
			
		||||
  j90-cray-unicos) OUT="cray-j90" ;;
 | 
			
		||||
  nsr-tandem-nsk) OUT="tandem-c89" ;;
 | 
			
		||||
  *) OUT=`echo $GUESSOS | awk -F- '{print $3}'`;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
@@ -731,7 +762,7 @@ case "$GUESSOS" in
 | 
			
		||||
  i386-*) options="$options 386" ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
for i in bf cast des dh dsa ec hmac idea md2 md5 mdc2 rc2 rc4 rc5 rijndael ripemd rsa sha
 | 
			
		||||
for i in bf cast des dh dsa ec hmac idea md2 md5 mdc2 rc2 rc4 rc5 aes ripemd rsa sha
 | 
			
		||||
do
 | 
			
		||||
  if [ ! -d crypto/$i ]
 | 
			
		||||
  then
 | 
			
		||||
 
 | 
			
		||||
@@ -26,39 +26,41 @@ CFLAGS= $(INCLUDE) $(CFLAG)
 | 
			
		||||
 | 
			
		||||
LIBS=
 | 
			
		||||
 | 
			
		||||
SDIRS=	md2 md5 sha mdc2 hmac ripemd \
 | 
			
		||||
SDIRS=	objects \
 | 
			
		||||
	md2 md4 md5 sha mdc2 hmac ripemd \
 | 
			
		||||
	des rc2 rc4 rc5 idea bf cast \
 | 
			
		||||
	bn ec rsa dsa ecdsa dh dso engine aes \
 | 
			
		||||
	buffer bio stack lhash rand err objects \
 | 
			
		||||
	evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5
 | 
			
		||||
	bn ec rsa dsa ecdsa ecdh dh dso engine aes \
 | 
			
		||||
	buffer bio stack lhash rand err \
 | 
			
		||||
	evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 \
 | 
			
		||||
	store
 | 
			
		||||
 | 
			
		||||
GENERAL=Makefile README crypto-lib.com install.com
 | 
			
		||||
 | 
			
		||||
LIB= $(TOP)/libcrypto.a
 | 
			
		||||
SHARED_LIB= libcrypto$(SHLIB_EXT)
 | 
			
		||||
LIBSRC=	cryptlib.c mem.c mem_dbg.c cversion.c ex_data.c tmdiff.c cpt_err.c ebcdic.c uid.c o_time.c
 | 
			
		||||
LIBOBJ= cryptlib.o mem.o mem_dbg.o cversion.o ex_data.o tmdiff.o cpt_err.o ebcdic.o uid.o o_time.o
 | 
			
		||||
LIBSRC=	cryptlib.c mem.c mem_clr.c mem_dbg.c cversion.c ex_data.c tmdiff.c cpt_err.c ebcdic.c uid.c o_time.c o_str.c
 | 
			
		||||
LIBOBJ= cryptlib.o mem.o mem_clr.o mem_dbg.o cversion.o ex_data.o tmdiff.o cpt_err.o ebcdic.o uid.o o_time.o o_str.o
 | 
			
		||||
 | 
			
		||||
SRC= $(LIBSRC)
 | 
			
		||||
 | 
			
		||||
EXHEADER= crypto.h tmdiff.h opensslv.h opensslconf.h ebcdic.h symhacks.h \
 | 
			
		||||
	ossl_typ.h
 | 
			
		||||
HEADER=	cryptlib.h buildinf.h md32_common.h o_time.h $(EXHEADER)
 | 
			
		||||
HEADER=	cryptlib.h buildinf.h md32_common.h o_time.h o_str.h $(EXHEADER)
 | 
			
		||||
 | 
			
		||||
ALL=    $(GENERAL) $(SRC) $(HEADER)
 | 
			
		||||
 | 
			
		||||
top:
 | 
			
		||||
	@(cd ..; $(MAKE) DIRS=$(DIR) all)
 | 
			
		||||
 | 
			
		||||
all: buildinf.h lib subdirs shared
 | 
			
		||||
all: shared
 | 
			
		||||
 | 
			
		||||
buildinf.h: ../Makefile.ssl
 | 
			
		||||
	( echo "#ifndef MK1MF_BUILD"; \
 | 
			
		||||
	echo "  /* auto-generated by crypto/Makefile.ssl for crypto/cversion.c */"; \
 | 
			
		||||
	echo "  #define CFLAGS \"$(CC) $(CFLAG)\""; \
 | 
			
		||||
	echo "  #define PLATFORM \"$(PLATFORM)\""; \
 | 
			
		||||
	echo "  #define DATE \"`date`\""; \
 | 
			
		||||
	echo "#endif" ) >buildinf.h
 | 
			
		||||
	echo '  /* auto-generated by crypto/Makefile.ssl for crypto/cversion.c */'; \
 | 
			
		||||
	echo '  #define CFLAGS "$(CC) $(CFLAG)"'; \
 | 
			
		||||
	echo '  #define PLATFORM "$(PLATFORM)"'; \
 | 
			
		||||
	echo "  #define DATE \"`LC_ALL=C LC_TIME=C date`\""; \
 | 
			
		||||
	echo '#endif' ) >buildinf.h
 | 
			
		||||
 | 
			
		||||
testapps:
 | 
			
		||||
	if echo ${SDIRS} | fgrep ' des '; \
 | 
			
		||||
@@ -81,11 +83,11 @@ files:
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
links:
 | 
			
		||||
	@$(TOP)/util/point.sh Makefile.ssl Makefile
 | 
			
		||||
	@sh $(TOP)/util/point.sh Makefile.ssl Makefile
 | 
			
		||||
	@$(PERL) $(TOP)/util/mklink.pl ../include/openssl $(EXHEADER)
 | 
			
		||||
	@$(PERL) $(TOP)/util/mklink.pl ../test $(TEST)
 | 
			
		||||
	@$(PERL) $(TOP)/util/mklink.pl ../apps $(APPS)
 | 
			
		||||
	@$(TOP)/util/point.sh Makefile.ssl Makefile
 | 
			
		||||
	@sh $(TOP)/util/point.sh Makefile.ssl Makefile
 | 
			
		||||
	@for i in $(SDIRS); do \
 | 
			
		||||
	(cd $$i && echo "making links in crypto/$$i..." && \
 | 
			
		||||
	$(MAKE) CC='$(CC)' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' AR='${AR}' PERL='${PERL}' links ); \
 | 
			
		||||
@@ -96,9 +98,9 @@ lib:	$(LIBOBJ)
 | 
			
		||||
	$(RANLIB) $(LIB) || echo Never mind.
 | 
			
		||||
	@touch lib
 | 
			
		||||
 | 
			
		||||
shared:
 | 
			
		||||
shared: buildinf.h lib subdirs
 | 
			
		||||
	if [ -n "$(SHARED_LIBS)" ]; then \
 | 
			
		||||
		(cd ..; make $(SHARED_LIB)); \
 | 
			
		||||
		(cd ..; $(MAKE) $(SHARED_LIB)); \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
libs:
 | 
			
		||||
@@ -136,12 +138,12 @@ lint:
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	if [ ! -f buildinf.h ]; then touch buildinf.h; fi # fake buildinf.h if it does not exist
 | 
			
		||||
	$(MAKEDEPEND) $(INCLUDE) $(DEPFLAG) $(PROGS) $(LIBSRC)
 | 
			
		||||
	$(MAKEDEPEND) -- $(CFLAG) $(INCLUDE) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
 | 
			
		||||
	if [ ! -s buildinf.h ]; then rm buildinf.h; fi
 | 
			
		||||
	@for i in $(SDIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cd $$i && echo "making depend in crypto/$$i..." && \
 | 
			
		||||
	$(MAKE) MAKEFILE='${MAKEFILE}' INCLUDES='${INCLUDES}' DEPFLAG='${DEPFLAG}' depend ); \
 | 
			
		||||
	$(MAKE) MAKEFILE='${MAKEFILE}' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' DEPFLAG='${DEPFLAG}' MAKEDEPPROG='${MAKEDEPPROG}' KRB5_INCLUDES='${KRB5_INCLUDES}' PERL='${PERL}' depend ); \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
@@ -180,7 +182,7 @@ cversion.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
			
		||||
cversion.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
cversion.o: ../include/openssl/safestack.h ../include/openssl/stack.h
 | 
			
		||||
cversion.o: ../include/openssl/symhacks.h buildinf.h cryptlib.h cversion.c
 | 
			
		||||
ebcdic.o: ../include/openssl/opensslconf.h ebcdic.c
 | 
			
		||||
ebcdic.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h ebcdic.c
 | 
			
		||||
ex_data.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
			
		||||
ex_data.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
ex_data.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
			
		||||
@@ -193,12 +195,18 @@ mem.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
			
		||||
mem.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
mem.o: ../include/openssl/safestack.h ../include/openssl/stack.h
 | 
			
		||||
mem.o: ../include/openssl/symhacks.h cryptlib.h mem.c
 | 
			
		||||
mem_clr.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
mem_clr.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
mem_clr.o: ../include/openssl/safestack.h ../include/openssl/stack.h
 | 
			
		||||
mem_clr.o: ../include/openssl/symhacks.h mem_clr.c
 | 
			
		||||
mem_dbg.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
			
		||||
mem_dbg.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
mem_dbg.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
			
		||||
mem_dbg.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
mem_dbg.o: ../include/openssl/safestack.h ../include/openssl/stack.h
 | 
			
		||||
mem_dbg.o: ../include/openssl/symhacks.h cryptlib.h mem_dbg.c
 | 
			
		||||
o_str.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h o_str.c
 | 
			
		||||
o_str.o: o_str.h
 | 
			
		||||
o_time.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h o_time.c
 | 
			
		||||
o_time.o: o_time.h
 | 
			
		||||
tmdiff.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
			
		||||
 
 | 
			
		||||
@@ -52,7 +52,7 @@ files:
 | 
			
		||||
	$(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
 | 
			
		||||
 | 
			
		||||
links:
 | 
			
		||||
	@$(TOP)/util/point.sh Makefile.ssl Makefile
 | 
			
		||||
	@sh $(TOP)/util/point.sh Makefile.ssl Makefile
 | 
			
		||||
	@$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
 | 
			
		||||
	@$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
 | 
			
		||||
	@$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
 | 
			
		||||
@@ -75,7 +75,7 @@ lint:
 | 
			
		||||
	lint -DLINT $(INCLUDES) $(SRC)>fluff
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 | 
			
		||||
	$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
 | 
			
		||||
 | 
			
		||||
dclean:
 | 
			
		||||
	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
 | 
			
		||||
 
 | 
			
		||||
@@ -52,12 +52,15 @@
 | 
			
		||||
#ifndef HEADER_AES_H
 | 
			
		||||
#define HEADER_AES_H
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_NO_AES
 | 
			
		||||
#error AES is disabled.
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static const int AES_DECRYPT = 0;
 | 
			
		||||
static const int AES_ENCRYPT = 1;
 | 
			
		||||
#define AES_ENCRYPT	1
 | 
			
		||||
#define AES_DECRYPT	0
 | 
			
		||||
 | 
			
		||||
/* Because array size can't be a const in C, the following two are macros.
 | 
			
		||||
   Both sizes are in bytes. */
 | 
			
		||||
#define AES_MAXNR 14
 | 
			
		||||
@@ -94,12 +97,23 @@ void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
	const unsigned long length, const AES_KEY *key,
 | 
			
		||||
	unsigned char *ivec, int *num, const int enc);
 | 
			
		||||
void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
	const unsigned long length, const AES_KEY *key,
 | 
			
		||||
	unsigned char *ivec, int *num, const int enc);
 | 
			
		||||
void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
	const unsigned long length, const AES_KEY *key,
 | 
			
		||||
	unsigned char *ivec, int *num, const int enc);
 | 
			
		||||
void AES_cfbr_encrypt_block(const unsigned char *in,unsigned char *out,
 | 
			
		||||
			    const int nbits,const AES_KEY *key,
 | 
			
		||||
			    unsigned char *ivec,const int enc);
 | 
			
		||||
void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
	const unsigned long length, const AES_KEY *key,
 | 
			
		||||
	unsigned char *ivec, int *num);
 | 
			
		||||
void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
	const unsigned long length, const AES_KEY *key,
 | 
			
		||||
	unsigned char *counter, unsigned int *num);
 | 
			
		||||
	unsigned char ivec[AES_BLOCK_SIZE],
 | 
			
		||||
	unsigned char ecount_buf[AES_BLOCK_SIZE],
 | 
			
		||||
	unsigned int *num);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,13 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef AES_DEBUG
 | 
			
		||||
# ifndef NDEBUG
 | 
			
		||||
#  define NDEBUG
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
 | 
			
		||||
#include <openssl/aes.h>
 | 
			
		||||
#include "aes_locl.h"
 | 
			
		||||
 | 
			
		||||
@@ -57,33 +63,49 @@ void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
		     const unsigned long length, const AES_KEY *key,
 | 
			
		||||
		     unsigned char *ivec, const int enc) {
 | 
			
		||||
 | 
			
		||||
	int n;
 | 
			
		||||
	unsigned long n;
 | 
			
		||||
	unsigned long len = length;
 | 
			
		||||
	unsigned char tmp[16];
 | 
			
		||||
	unsigned char tmp[AES_BLOCK_SIZE];
 | 
			
		||||
 | 
			
		||||
	assert(in && out && key && ivec);
 | 
			
		||||
	assert(length % AES_BLOCK_SIZE == 0);
 | 
			
		||||
	assert((AES_ENCRYPT == enc)||(AES_DECRYPT == enc));
 | 
			
		||||
 | 
			
		||||
	if (AES_ENCRYPT == enc)
 | 
			
		||||
		while (len > 0) {
 | 
			
		||||
			for(n=0; n < 16; ++n)
 | 
			
		||||
	if (AES_ENCRYPT == enc) {
 | 
			
		||||
		while (len >= AES_BLOCK_SIZE) {
 | 
			
		||||
			for(n=0; n < AES_BLOCK_SIZE; ++n)
 | 
			
		||||
				tmp[n] = in[n] ^ ivec[n];
 | 
			
		||||
			AES_encrypt(tmp, out, key);
 | 
			
		||||
			memcpy(ivec, out, 16);
 | 
			
		||||
			len -= 16;
 | 
			
		||||
			in += 16;
 | 
			
		||||
			out += 16;
 | 
			
		||||
			memcpy(ivec, out, AES_BLOCK_SIZE);
 | 
			
		||||
			len -= AES_BLOCK_SIZE;
 | 
			
		||||
			in += AES_BLOCK_SIZE;
 | 
			
		||||
			out += AES_BLOCK_SIZE;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		while (len > 0) {
 | 
			
		||||
			memcpy(tmp, in, 16);
 | 
			
		||||
		if (len) {
 | 
			
		||||
			for(n=0; n < len; ++n)
 | 
			
		||||
				tmp[n] = in[n] ^ ivec[n];
 | 
			
		||||
			for(n=len; n < AES_BLOCK_SIZE; ++n)
 | 
			
		||||
				tmp[n] = ivec[n];
 | 
			
		||||
			AES_encrypt(tmp, tmp, key);
 | 
			
		||||
			memcpy(out, tmp, AES_BLOCK_SIZE);
 | 
			
		||||
			memcpy(ivec, tmp, AES_BLOCK_SIZE);
 | 
			
		||||
		}			
 | 
			
		||||
	} else {
 | 
			
		||||
		while (len >= AES_BLOCK_SIZE) {
 | 
			
		||||
			memcpy(tmp, in, AES_BLOCK_SIZE);
 | 
			
		||||
			AES_decrypt(in, out, key);
 | 
			
		||||
			for(n=0; n < 16; ++n)
 | 
			
		||||
			for(n=0; n < AES_BLOCK_SIZE; ++n)
 | 
			
		||||
				out[n] ^= ivec[n];
 | 
			
		||||
			memcpy(ivec, tmp, 16);
 | 
			
		||||
			len -= 16;
 | 
			
		||||
			in += 16;
 | 
			
		||||
			out += 16;
 | 
			
		||||
			memcpy(ivec, tmp, AES_BLOCK_SIZE);
 | 
			
		||||
			len -= AES_BLOCK_SIZE;
 | 
			
		||||
			in += AES_BLOCK_SIZE;
 | 
			
		||||
			out += AES_BLOCK_SIZE;
 | 
			
		||||
		}
 | 
			
		||||
		if (len) {
 | 
			
		||||
			memcpy(tmp, in, AES_BLOCK_SIZE);
 | 
			
		||||
			AES_decrypt(tmp, tmp, key);
 | 
			
		||||
			for(n=0; n < len; ++n)
 | 
			
		||||
				out[n] = tmp[n] ^ ivec[n];
 | 
			
		||||
			memcpy(ivec, tmp, AES_BLOCK_SIZE);
 | 
			
		||||
		}			
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -105,7 +105,13 @@
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef AES_DEBUG
 | 
			
		||||
# ifndef NDEBUG
 | 
			
		||||
#  define NDEBUG
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
 | 
			
		||||
#include <openssl/aes.h>
 | 
			
		||||
#include "aes_locl.h"
 | 
			
		||||
 | 
			
		||||
@@ -137,7 +143,7 @@ void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
	} else {
 | 
			
		||||
		while (l--) {
 | 
			
		||||
			if (n == 0) {
 | 
			
		||||
				AES_decrypt(ivec, ivec, key);
 | 
			
		||||
				AES_encrypt(ivec, ivec, key);
 | 
			
		||||
			}
 | 
			
		||||
			c = *(in);
 | 
			
		||||
			*(out++) = *(in++) ^ ivec[n];
 | 
			
		||||
@@ -149,3 +155,96 @@ void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
	*num=n;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* This expects a single block of size nbits for both in and out. Note that
 | 
			
		||||
   it corrupts any extra bits in the last byte of out */
 | 
			
		||||
/* Untested, once it is working, it will be optimised */
 | 
			
		||||
void AES_cfbr_encrypt_block(const unsigned char *in,unsigned char *out,
 | 
			
		||||
			    const int nbits,const AES_KEY *key,
 | 
			
		||||
			    unsigned char *ivec,const int enc)
 | 
			
		||||
    {
 | 
			
		||||
    int n;
 | 
			
		||||
    unsigned char ovec[AES_BLOCK_SIZE*2];
 | 
			
		||||
 | 
			
		||||
    assert(in && out && key && ivec);
 | 
			
		||||
    if(enc)
 | 
			
		||||
	{
 | 
			
		||||
	/* construct the new IV */
 | 
			
		||||
	AES_encrypt(ivec,ovec,key);
 | 
			
		||||
	/* encrypt the input */
 | 
			
		||||
	for(n=0 ; n < (nbits+7)/8 ; ++n)
 | 
			
		||||
	    out[n]=in[n]^ovec[n];
 | 
			
		||||
	/* fill in the first half of the new IV with the current IV */
 | 
			
		||||
	memcpy(ovec,ivec,AES_BLOCK_SIZE);
 | 
			
		||||
	/* and put the ciphertext in the second half */
 | 
			
		||||
	memcpy(ovec+AES_BLOCK_SIZE,out,(nbits+7)/8);
 | 
			
		||||
	/* shift ovec left most of the bits... */
 | 
			
		||||
	memmove(ovec,ovec+nbits/8,AES_BLOCK_SIZE+(nbits%8 ? 1 : 0));
 | 
			
		||||
	/* now the remaining bits */
 | 
			
		||||
	if(nbits%8 != 0)
 | 
			
		||||
	    for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
 | 
			
		||||
		{
 | 
			
		||||
		ovec[n]<<=nbits%8;
 | 
			
		||||
		ovec[n]|=ovec[n+1]>>(8-nbits%8);
 | 
			
		||||
		}
 | 
			
		||||
	/* finally, move it back into place */
 | 
			
		||||
	memcpy(ivec,ovec,AES_BLOCK_SIZE);
 | 
			
		||||
	}
 | 
			
		||||
    else
 | 
			
		||||
	{
 | 
			
		||||
	/* construct the new IV in the first half of ovec */
 | 
			
		||||
	AES_encrypt(ivec,ovec,key);
 | 
			
		||||
	/* decrypt the input */
 | 
			
		||||
	for(n=0 ; n < (nbits+7)/8 ; ++n)
 | 
			
		||||
	    out[n]=in[n]^ovec[n];
 | 
			
		||||
	/* fill in the first half of the new IV with the current IV */
 | 
			
		||||
	memcpy(ovec,ivec,AES_BLOCK_SIZE);
 | 
			
		||||
	/* append the ciphertext */
 | 
			
		||||
	memcpy(ovec+AES_BLOCK_SIZE,in,(nbits+7)/8);
 | 
			
		||||
	/* shift ovec left most of the bits... */
 | 
			
		||||
	memmove(ovec,ovec+nbits/8,AES_BLOCK_SIZE+(nbits%8 ? 1 : 0));
 | 
			
		||||
	/* now the remaining bits */
 | 
			
		||||
	if(nbits%8 != 0)
 | 
			
		||||
	    for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
 | 
			
		||||
		{
 | 
			
		||||
		ovec[n]<<=nbits%8;
 | 
			
		||||
		ovec[n]|=ovec[n+1]>>(8-nbits%8);
 | 
			
		||||
		}
 | 
			
		||||
	/* finally, move it back into place */
 | 
			
		||||
	memcpy(ivec,ovec,AES_BLOCK_SIZE);
 | 
			
		||||
	}
 | 
			
		||||
    /* it is not necessary to cleanse ovec, since the IV is not secret */
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
/* N.B. This expects the input to be packed, MS bit first */
 | 
			
		||||
void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
		      const unsigned long length, const AES_KEY *key,
 | 
			
		||||
		      unsigned char *ivec, int *num, const int enc)
 | 
			
		||||
    {
 | 
			
		||||
    unsigned int n;
 | 
			
		||||
    unsigned char c[1],d[1];
 | 
			
		||||
 | 
			
		||||
    assert(in && out && key && ivec && num);
 | 
			
		||||
    assert(*num == 0);
 | 
			
		||||
 | 
			
		||||
    memset(out,0,(length+7)/8);
 | 
			
		||||
    for(n=0 ; n < length ; ++n)
 | 
			
		||||
	{
 | 
			
		||||
	c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0;
 | 
			
		||||
	AES_cfbr_encrypt_block(c,d,1,key,ivec,enc);
 | 
			
		||||
	out[n/8]=(out[n/8]&~(1 << (7-n%8)))|((d[0]&0x80) >> (n%8));
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
		      const unsigned long length, const AES_KEY *key,
 | 
			
		||||
		      unsigned char *ivec, int *num, const int enc)
 | 
			
		||||
    {
 | 
			
		||||
    unsigned int n;
 | 
			
		||||
 | 
			
		||||
    assert(in && out && key && ivec && num);
 | 
			
		||||
    assert(*num == 0);
 | 
			
		||||
 | 
			
		||||
    for(n=0 ; n < length ; ++n)
 | 
			
		||||
	AES_cfbr_encrypt_block(&in[n],&out[n],8,key,ivec,enc);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,13 @@
 | 
			
		||||
/* Note: rewritten a little bit to provide error control and an OpenSSL-
 | 
			
		||||
   compatible API */
 | 
			
		||||
 | 
			
		||||
#ifndef AES_DEBUG
 | 
			
		||||
# ifndef NDEBUG
 | 
			
		||||
#  define NDEBUG
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <openssl/aes.h>
 | 
			
		||||
#include "aes_locl.h"
 | 
			
		||||
@@ -744,7 +750,7 @@ int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 | 
			
		||||
	rk[2] = GETU32(userKey +  8);
 | 
			
		||||
	rk[3] = GETU32(userKey + 12);
 | 
			
		||||
	if (bits == 128) {
 | 
			
		||||
		for (;;) {
 | 
			
		||||
		while (1) {
 | 
			
		||||
			temp  = rk[3];
 | 
			
		||||
			rk[4] = rk[0] ^
 | 
			
		||||
				(Te4[(temp >> 16) & 0xff] & 0xff000000) ^
 | 
			
		||||
@@ -764,7 +770,7 @@ int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 | 
			
		||||
	rk[4] = GETU32(userKey + 16);
 | 
			
		||||
	rk[5] = GETU32(userKey + 20);
 | 
			
		||||
	if (bits == 192) {
 | 
			
		||||
		for (;;) {
 | 
			
		||||
		while (1) {
 | 
			
		||||
			temp = rk[ 5];
 | 
			
		||||
			rk[ 6] = rk[ 0] ^
 | 
			
		||||
				(Te4[(temp >> 16) & 0xff] & 0xff000000) ^
 | 
			
		||||
@@ -786,7 +792,7 @@ int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 | 
			
		||||
	rk[6] = GETU32(userKey + 24);
 | 
			
		||||
	rk[7] = GETU32(userKey + 28);
 | 
			
		||||
	if (bits == 256) {
 | 
			
		||||
		for (;;) {
 | 
			
		||||
		while (1) {
 | 
			
		||||
			temp = rk[ 7];
 | 
			
		||||
			rk[ 8] = rk[ 0] ^
 | 
			
		||||
				(Te4[(temp >> 16) & 0xff] & 0xff000000) ^
 | 
			
		||||
 
 | 
			
		||||
@@ -49,67 +49,89 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef AES_DEBUG
 | 
			
		||||
# ifndef NDEBUG
 | 
			
		||||
#  define NDEBUG
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
 | 
			
		||||
#include <openssl/aes.h>
 | 
			
		||||
#include "aes_locl.h"
 | 
			
		||||
 | 
			
		||||
/* NOTE: CTR mode is big-endian.  The rest of the AES code
 | 
			
		||||
/* NOTE: the IV/counter CTR mode is big-endian.  The rest of the AES code
 | 
			
		||||
 * is endian-neutral. */
 | 
			
		||||
 | 
			
		||||
/* increment counter (128-bit int) by 2^64 */
 | 
			
		||||
/* increment counter (128-bit int) by 1 */
 | 
			
		||||
static void AES_ctr128_inc(unsigned char *counter) {
 | 
			
		||||
	unsigned long c;
 | 
			
		||||
 | 
			
		||||
	/* Grab 3rd dword of counter and increment */
 | 
			
		||||
#ifdef L_ENDIAN
 | 
			
		||||
	/* Grab bottom dword of counter and increment */
 | 
			
		||||
	c = GETU32(counter + 12);
 | 
			
		||||
	c++;
 | 
			
		||||
	PUTU32(counter + 12, c);
 | 
			
		||||
 | 
			
		||||
	/* if no overflow, we're done */
 | 
			
		||||
	if (c)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	/* Grab 1st dword of counter and increment */
 | 
			
		||||
	c = GETU32(counter +  8);
 | 
			
		||||
	c++;
 | 
			
		||||
	PUTU32(counter +  8, c);
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
	/* if no overflow, we're done */
 | 
			
		||||
	if (c)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	/* Grab 2nd dword of counter and increment */
 | 
			
		||||
	c = GETU32(counter +  4);
 | 
			
		||||
	c++;
 | 
			
		||||
	PUTU32(counter +  4, c);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	/* if no overflow, we're done */
 | 
			
		||||
	if (c)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	/* Grab top dword of counter and increment */
 | 
			
		||||
#ifdef L_ENDIAN
 | 
			
		||||
	c = GETU32(counter + 12);
 | 
			
		||||
	c++;
 | 
			
		||||
	PUTU32(counter + 12, c);
 | 
			
		||||
#else
 | 
			
		||||
	c = GETU32(counter +  0);
 | 
			
		||||
	c++;
 | 
			
		||||
	PUTU32(counter +  0, c);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* The input encrypted as though 128bit counter mode is being
 | 
			
		||||
 * used.  The extra state information to record how much of the
 | 
			
		||||
 * 128bit block we have used is contained in *num;
 | 
			
		||||
 * 128bit block we have used is contained in *num, and the
 | 
			
		||||
 * encrypted counter is kept in ecount_buf.  Both *num and
 | 
			
		||||
 * ecount_buf must be initialised with zeros before the first
 | 
			
		||||
 * call to AES_ctr128_encrypt().
 | 
			
		||||
 *
 | 
			
		||||
 * This algorithm assumes that the counter is in the x lower bits
 | 
			
		||||
 * of the IV (ivec), and that the application has full control over
 | 
			
		||||
 * overflow and the rest of the IV.  This implementation takes NO
 | 
			
		||||
 * responsability for checking that the counter doesn't overflow
 | 
			
		||||
 * into the rest of the IV when incremented.
 | 
			
		||||
 */
 | 
			
		||||
void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
	const unsigned long length, const AES_KEY *key,
 | 
			
		||||
	unsigned char *counter, unsigned int *num) {
 | 
			
		||||
	unsigned char ivec[AES_BLOCK_SIZE],
 | 
			
		||||
	unsigned char ecount_buf[AES_BLOCK_SIZE],
 | 
			
		||||
	unsigned int *num) {
 | 
			
		||||
 | 
			
		||||
	unsigned int n;
 | 
			
		||||
	unsigned long l=length;
 | 
			
		||||
	unsigned char tmp[AES_BLOCK_SIZE];
 | 
			
		||||
 | 
			
		||||
	assert(in && out && key && counter && num);
 | 
			
		||||
	assert(*num < AES_BLOCK_SIZE);
 | 
			
		||||
 | 
			
		||||
	n = *num;
 | 
			
		||||
 | 
			
		||||
	while (l--) {
 | 
			
		||||
		if (n == 0) {
 | 
			
		||||
			AES_ctr128_inc(counter);
 | 
			
		||||
			AES_encrypt(counter, tmp, key);
 | 
			
		||||
			AES_encrypt(ivec, ecount_buf, key);
 | 
			
		||||
 			AES_ctr128_inc(ivec);
 | 
			
		||||
		}
 | 
			
		||||
		*(out++) = *(in++) ^ tmp[n];
 | 
			
		||||
		*(out++) = *(in++) ^ ecount_buf[n];
 | 
			
		||||
		n = (n+1) % AES_BLOCK_SIZE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,13 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef AES_DEBUG
 | 
			
		||||
# ifndef NDEBUG
 | 
			
		||||
#  define NDEBUG
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
 | 
			
		||||
#include <openssl/aes.h>
 | 
			
		||||
#include "aes_locl.h"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -60,12 +60,9 @@
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#if defined(__STDC__) || defined(OPENSSL_SYS_VMS) || defined(M_XENIX) || defined(OPENSSL_SYS_MSDOS)
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
#if defined(_MSC_VER) && !defined(OPENSSL_SYS_WINCE)
 | 
			
		||||
# define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00)
 | 
			
		||||
# define GETU32(p) SWAP(*((u32 *)(p)))
 | 
			
		||||
# define PUTU32(ct, st) { *((u32 *)(ct)) = SWAP((st)); }
 | 
			
		||||
 
 | 
			
		||||
@@ -105,7 +105,13 @@
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef AES_DEBUG
 | 
			
		||||
# ifndef NDEBUG
 | 
			
		||||
#  define NDEBUG
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
 | 
			
		||||
#include <openssl/aes.h>
 | 
			
		||||
#include "aes_locl.h"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@ LIBSRC=	a_object.c a_bitstr.c a_utctm.c a_gentm.c a_time.c a_int.c a_octet.c \
 | 
			
		||||
	tasn_new.c tasn_fre.c tasn_enc.c tasn_dec.c tasn_utl.c tasn_typ.c \
 | 
			
		||||
	f_int.c f_string.c n_pkey.c \
 | 
			
		||||
	f_enum.c a_hdr.c x_pkey.c a_bool.c x_exten.c \
 | 
			
		||||
	asn1_par.c asn1_lib.c asn1_err.c a_meth.c a_bytes.c a_strnid.c \
 | 
			
		||||
	asn1_gen.c asn1_par.c asn1_lib.c asn1_err.c a_meth.c a_bytes.c a_strnid.c \
 | 
			
		||||
	evp_asn1.c asn_pack.c p5_pbe.c p5_pbev2.c p8_pkey.c asn_moid.c
 | 
			
		||||
LIBOBJ= a_object.o a_bitstr.o a_utctm.o a_gentm.o a_time.o a_int.o a_octet.o \
 | 
			
		||||
	a_print.o a_type.o a_set.o a_dup.o a_d2i_fp.o a_i2d_fp.o \
 | 
			
		||||
@@ -45,7 +45,7 @@ LIBOBJ= a_object.o a_bitstr.o a_utctm.o a_gentm.o a_time.o a_int.o a_octet.o \
 | 
			
		||||
	tasn_new.o tasn_fre.o tasn_enc.o tasn_dec.o tasn_utl.o tasn_typ.o \
 | 
			
		||||
	f_int.o f_string.o n_pkey.o \
 | 
			
		||||
	f_enum.o a_hdr.o x_pkey.o a_bool.o x_exten.o \
 | 
			
		||||
	asn1_par.o asn1_lib.o asn1_err.o a_meth.o a_bytes.o a_strnid.o \
 | 
			
		||||
	asn1_gen.o asn1_par.o asn1_lib.o asn1_err.o a_meth.o a_bytes.o a_strnid.o \
 | 
			
		||||
	evp_asn1.o asn_pack.o p5_pbe.o p5_pbev2.o p8_pkey.o asn_moid.o
 | 
			
		||||
 | 
			
		||||
SRC= $(LIBSRC)
 | 
			
		||||
@@ -77,7 +77,7 @@ files:
 | 
			
		||||
	$(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
 | 
			
		||||
 | 
			
		||||
links:
 | 
			
		||||
	@$(TOP)/util/point.sh Makefile.ssl Makefile
 | 
			
		||||
	@sh $(TOP)/util/point.sh Makefile.ssl Makefile
 | 
			
		||||
	@$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
 | 
			
		||||
	@$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
 | 
			
		||||
	@$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
 | 
			
		||||
@@ -98,7 +98,7 @@ lint:
 | 
			
		||||
	lint -DLINT $(INCLUDES) $(SRC)>fluff
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 | 
			
		||||
	$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
 | 
			
		||||
 | 
			
		||||
dclean:
 | 
			
		||||
	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
 | 
			
		||||
@@ -145,11 +145,11 @@ a_d2i_fp.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
a_d2i_fp.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
a_d2i_fp.o: ../../include/openssl/symhacks.h ../cryptlib.h a_d2i_fp.c
 | 
			
		||||
a_digest.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
a_digest.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
a_digest.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
a_digest.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
a_digest.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
a_digest.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
a_digest.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
a_digest.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
a_digest.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 | 
			
		||||
a_digest.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
a_digest.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
a_digest.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
a_digest.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
a_digest.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
@@ -258,27 +258,27 @@ a_set.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
a_set.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
 | 
			
		||||
a_set.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
a_set.o: ../cryptlib.h a_set.c
 | 
			
		||||
a_sign.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
a_sign.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
a_sign.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
a_sign.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
a_sign.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
a_sign.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
a_sign.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
a_sign.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
a_sign.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
a_sign.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
a_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
a_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
a_sign.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
a_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
a_sign.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
a_sign.o: ../cryptlib.h a_sign.c
 | 
			
		||||
a_strex.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
 | 
			
		||||
a_sign.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
a_sign.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
a_sign.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
a_sign.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
a_sign.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
a_sign.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
a_sign.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
a_sign.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
a_sign.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
a_sign.o: ../../include/openssl/x509_vfy.h ../cryptlib.h a_sign.c
 | 
			
		||||
a_strex.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
a_strex.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
a_strex.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
a_strex.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 | 
			
		||||
a_strex.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
a_strex.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h
 | 
			
		||||
a_strex.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
a_strex.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
a_strex.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
a_strex.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
a_strex.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
@@ -286,7 +286,7 @@ a_strex.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
a_strex.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
a_strex.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
a_strex.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
a_strex.o: a_strex.c charmap.h
 | 
			
		||||
a_strex.o: ../cryptlib.h a_strex.c charmap.h
 | 
			
		||||
a_strnid.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
a_strnid.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
a_strnid.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
@@ -331,11 +331,11 @@ a_utf8.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
 | 
			
		||||
a_utf8.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
a_utf8.o: ../cryptlib.h a_utf8.c
 | 
			
		||||
a_verify.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
a_verify.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
a_verify.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
a_verify.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
a_verify.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
a_verify.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
a_verify.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
a_verify.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
a_verify.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 | 
			
		||||
a_verify.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
a_verify.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
a_verify.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
a_verify.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
a_verify.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
@@ -352,11 +352,28 @@ asn1_err.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
 | 
			
		||||
asn1_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
asn1_err.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
asn1_err.o: ../../include/openssl/symhacks.h asn1_err.c
 | 
			
		||||
asn1_gen.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/x509v3.h ../cryptlib.h asn1_gen.c
 | 
			
		||||
asn1_lib.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
asn1_lib.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
asn1_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
asn1_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 | 
			
		||||
asn1_lib.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
 | 
			
		||||
asn1_lib.o: ../../include/openssl/asn1_mac.h ../../include/openssl/bio.h
 | 
			
		||||
asn1_lib.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
asn1_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
 | 
			
		||||
asn1_lib.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
 | 
			
		||||
asn1_lib.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
asn1_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
asn1_lib.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
asn1_lib.o: ../../include/openssl/symhacks.h ../cryptlib.h asn1_lib.c
 | 
			
		||||
@@ -370,12 +387,12 @@ asn1_par.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
asn1_par.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
asn1_par.o: ../../include/openssl/symhacks.h ../cryptlib.h asn1_par.c
 | 
			
		||||
asn_moid.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/dsa.h ../../include/openssl/dso.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
@@ -393,32 +410,28 @@ asn_pack.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
 | 
			
		||||
asn_pack.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
asn_pack.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
asn_pack.o: ../../include/openssl/symhacks.h ../cryptlib.h asn_pack.c
 | 
			
		||||
d2i_pr.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
d2i_pr.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
d2i_pr.o: ../cryptlib.h d2i_pr.c
 | 
			
		||||
d2i_pu.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/ec.h ../../include/openssl/err.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/symhacks.h ../cryptlib.h d2i_pr.c
 | 
			
		||||
d2i_pu.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
d2i_pu.o: ../cryptlib.h d2i_pu.c
 | 
			
		||||
d2i_pu.o: ../../include/openssl/ec.h ../../include/openssl/err.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/symhacks.h ../cryptlib.h d2i_pu.c
 | 
			
		||||
evp_asn1.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
evp_asn1.o: ../../include/openssl/asn1_mac.h ../../include/openssl/bio.h
 | 
			
		||||
evp_asn1.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
@@ -452,84 +465,84 @@ f_string.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
 | 
			
		||||
f_string.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
f_string.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
f_string.o: ../../include/openssl/symhacks.h ../cryptlib.h f_string.c
 | 
			
		||||
i2d_pr.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
i2d_pr.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
i2d_pr.o: ../cryptlib.h i2d_pr.c
 | 
			
		||||
i2d_pu.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/ec.h ../../include/openssl/err.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/symhacks.h ../cryptlib.h i2d_pr.c
 | 
			
		||||
i2d_pu.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
i2d_pu.o: ../cryptlib.h i2d_pu.c
 | 
			
		||||
i2d_pu.o: ../../include/openssl/ec.h ../../include/openssl/err.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/symhacks.h ../cryptlib.h i2d_pu.c
 | 
			
		||||
n_pkey.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/asn1_mac.h ../../include/openssl/asn1t.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/x509_vfy.h ../cryptlib.h n_pkey.c
 | 
			
		||||
n_pkey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
n_pkey.o: ../cryptlib.h n_pkey.c
 | 
			
		||||
nsseq.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
 | 
			
		||||
nsseq.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
nsseq.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
nsseq.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 | 
			
		||||
nsseq.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
nsseq.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h
 | 
			
		||||
nsseq.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
nsseq.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
nsseq.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
nsseq.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
nsseq.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
nsseq.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
nsseq.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h nsseq.c
 | 
			
		||||
nsseq.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
nsseq.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
nsseq.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
nsseq.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
nsseq.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
nsseq.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
nsseq.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
nsseq.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
nsseq.o: ../../include/openssl/x509_vfy.h nsseq.c
 | 
			
		||||
p5_pbe.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p5_pbe.c
 | 
			
		||||
p5_pbe.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/rand.h ../../include/openssl/rsa.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
p5_pbe.o: ../cryptlib.h p5_pbe.c
 | 
			
		||||
p5_pbev2.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
@@ -541,22 +554,22 @@ p8_pkey.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
p8_pkey.o: ../cryptlib.h p8_pkey.c
 | 
			
		||||
p8_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p8_pkey.c
 | 
			
		||||
t_bitst.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
@@ -567,86 +580,82 @@ t_bitst.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
 | 
			
		||||
t_bitst.o: ../cryptlib.h t_bitst.c
 | 
			
		||||
t_crl.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
t_crl.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
t_crl.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
t_crl.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
t_crl.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
 | 
			
		||||
t_crl.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 | 
			
		||||
t_crl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
t_crl.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
t_crl.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
t_crl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
t_crl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
t_crl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
t_crl.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
t_crl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
t_crl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
t_crl.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
 | 
			
		||||
t_crl.o: ../cryptlib.h t_crl.c
 | 
			
		||||
t_pkey.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
t_crl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
t_crl.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
t_crl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
t_crl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
t_crl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
t_crl.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
t_crl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
t_crl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
t_crl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
t_crl.o: ../../include/openssl/x509v3.h ../cryptlib.h t_crl.c
 | 
			
		||||
t_pkey.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/symhacks.h ../cryptlib.h t_pkey.c
 | 
			
		||||
t_req.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
t_req.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/ec.h ../../include/openssl/err.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
t_pkey.o: ../cryptlib.h t_pkey.c
 | 
			
		||||
t_req.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
t_req.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
t_req.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
 | 
			
		||||
t_req.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 | 
			
		||||
t_req.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
t_req.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
t_req.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
t_req.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
t_req.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
t_req.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
t_req.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
t_req.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
t_req.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
t_req.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
 | 
			
		||||
t_req.o: ../cryptlib.h t_req.c
 | 
			
		||||
t_spki.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
t_spki.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
t_req.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
t_req.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
t_req.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
t_req.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
t_req.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
t_req.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
t_req.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
t_req.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
t_req.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
t_req.o: ../../include/openssl/x509v3.h ../cryptlib.h t_req.c
 | 
			
		||||
t_spki.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
t_spki.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
t_spki.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
t_spki.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
t_spki.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
t_spki.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
t_spki.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
t_spki.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
t_spki.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
t_spki.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
t_spki.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
t_spki.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
t_spki.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
t_spki.o: ../cryptlib.h t_spki.c
 | 
			
		||||
t_x509.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
t_x509.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
t_spki.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
t_spki.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
t_spki.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
t_spki.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
t_spki.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
t_spki.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
t_spki.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
t_spki.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
t_spki.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
t_spki.o: ../../include/openssl/x509_vfy.h ../cryptlib.h t_spki.c
 | 
			
		||||
t_x509.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
t_x509.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
t_x509.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
 | 
			
		||||
t_x509.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 | 
			
		||||
t_x509.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
t_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
t_x509.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
t_x509.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
t_x509.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
t_x509.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
t_x509.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
t_x509.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
t_x509.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
t_x509.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
 | 
			
		||||
t_x509.o: ../cryptlib.h t_x509.c
 | 
			
		||||
t_x509.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
t_x509.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
t_x509.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
t_x509.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
t_x509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
t_x509.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
t_x509.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
t_x509.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
t_x509.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
t_x509.o: ../../include/openssl/x509v3.h ../cryptlib.h t_x509.c
 | 
			
		||||
t_x509a.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
@@ -711,24 +720,25 @@ x_algor.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
x_algor.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
x_algor.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 | 
			
		||||
x_algor.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
x_algor.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h
 | 
			
		||||
x_algor.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_algor.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_algor.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_algor.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
x_algor.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_algor.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_algor.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_algor.o: x_algor.c
 | 
			
		||||
x_algor.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_algor.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
x_algor.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_algor.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_algor.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_algor.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
x_algor.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_algor.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_algor.o: ../../include/openssl/x509_vfy.h x_algor.c
 | 
			
		||||
x_attrib.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
@@ -749,45 +759,44 @@ x_crl.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_crl.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
x_crl.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
x_crl.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
x_crl.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_crl.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_crl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_crl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_crl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_crl.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
x_crl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_crl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_crl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_crl.o: ../cryptlib.h x_crl.c
 | 
			
		||||
x_crl.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
x_crl.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
x_crl.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
x_crl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_crl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_crl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_crl.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
x_crl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_crl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_crl.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_crl.c
 | 
			
		||||
x_exten.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
 | 
			
		||||
x_exten.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
x_exten.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
x_exten.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 | 
			
		||||
x_exten.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
x_exten.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h
 | 
			
		||||
x_exten.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_exten.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_exten.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_exten.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
x_exten.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_exten.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_exten.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_exten.o: x_exten.c
 | 
			
		||||
x_info.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_info.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_exten.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_exten.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
x_exten.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_exten.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_exten.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_exten.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
x_exten.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_exten.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_exten.o: ../../include/openssl/x509_vfy.h x_exten.c
 | 
			
		||||
x_info.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
x_info.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
x_info.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
x_info.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
x_info.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_info.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_info.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_info.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_info.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_info.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
x_info.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_info.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_info.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_info.o: ../cryptlib.h x_info.c
 | 
			
		||||
x_info.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
x_info.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
x_info.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
x_info.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_info.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_info.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_info.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
x_info.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_info.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_info.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_info.c
 | 
			
		||||
x_long.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_long.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_long.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
@@ -802,22 +811,22 @@ x_name.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_name.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
x_name.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
x_name.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
x_name.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_name.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_name.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_name.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_name.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_name.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
x_name.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_name.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_name.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_name.o: ../cryptlib.h x_name.c
 | 
			
		||||
x_name.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
x_name.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
x_name.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
x_name.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_name.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_name.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_name.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
x_name.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_name.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_name.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_name.c
 | 
			
		||||
x_pkey.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/asn1_mac.h ../../include/openssl/asn1t.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/asn1_mac.h ../../include/openssl/bio.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
@@ -832,10 +841,11 @@ x_pubkey.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
@@ -847,89 +857,89 @@ x_req.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_req.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
x_req.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
x_req.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
x_req.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_req.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_req.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_req.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_req.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_req.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
x_req.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_req.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_req.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_req.o: ../cryptlib.h x_req.c
 | 
			
		||||
x_req.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
x_req.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
x_req.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
x_req.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_req.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_req.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_req.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
x_req.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_req.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_req.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_req.c
 | 
			
		||||
x_sig.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_sig.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_sig.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
x_sig.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
x_sig.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
x_sig.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_sig.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_sig.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_sig.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_sig.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_sig.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
x_sig.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_sig.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_sig.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_sig.o: ../cryptlib.h x_sig.c
 | 
			
		||||
x_sig.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
x_sig.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
x_sig.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
x_sig.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_sig.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_sig.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_sig.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
x_sig.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_sig.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_sig.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_sig.c
 | 
			
		||||
x_spki.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_spki.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_spki.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
x_spki.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
x_spki.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
x_spki.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_spki.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_spki.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_spki.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_spki.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_spki.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
x_spki.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_spki.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_spki.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_spki.o: ../cryptlib.h x_spki.c
 | 
			
		||||
x_spki.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
x_spki.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
x_spki.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
x_spki.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_spki.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_spki.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_spki.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
x_spki.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_spki.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_spki.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_spki.c
 | 
			
		||||
x_val.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_val.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_val.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
x_val.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
x_val.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
x_val.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_val.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_val.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_val.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_val.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_val.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
x_val.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_val.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_val.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_val.o: ../cryptlib.h x_val.c
 | 
			
		||||
x_val.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
x_val.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
x_val.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
x_val.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_val.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_val.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_val.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
x_val.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_val.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_val.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_val.c
 | 
			
		||||
x_x509.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_x509.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_x509.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
x_x509.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
 | 
			
		||||
x_x509.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 | 
			
		||||
x_x509.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
x_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
x_x509.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
x_x509.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_x509.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_x509.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_x509.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
x_x509.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_x509.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_x509.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
 | 
			
		||||
x_x509.o: ../cryptlib.h x_x509.c
 | 
			
		||||
x_x509.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_x509.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_x509.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_x509.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_x509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_x509.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
x_x509.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_x509.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_x509.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_x509.o: ../../include/openssl/x509v3.h ../cryptlib.h x_x509.c
 | 
			
		||||
x_x509a.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/ec.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_x509a.o: ../cryptlib.h x_x509a.c
 | 
			
		||||
x_x509a.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_x509a.c
 | 
			
		||||
 
 | 
			
		||||
@@ -71,8 +71,6 @@ int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp)
 | 
			
		||||
	if (a == NULL) return(0);
 | 
			
		||||
 | 
			
		||||
	len=a->length;
 | 
			
		||||
	ret=1+len;
 | 
			
		||||
	if (pp == NULL) return(ret);
 | 
			
		||||
 | 
			
		||||
	if (len > 0)
 | 
			
		||||
		{
 | 
			
		||||
@@ -100,6 +98,10 @@ int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp)
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		bits=0;
 | 
			
		||||
 | 
			
		||||
	ret=1+len;
 | 
			
		||||
	if (pp == NULL) return(ret);
 | 
			
		||||
 | 
			
		||||
	p= *pp;
 | 
			
		||||
 | 
			
		||||
	*(p++)=(unsigned char)bits;
 | 
			
		||||
@@ -111,13 +113,20 @@ int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp)
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, unsigned char **pp,
 | 
			
		||||
	     long len)
 | 
			
		||||
ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,
 | 
			
		||||
	const unsigned char **pp, long len)
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_BIT_STRING *ret=NULL;
 | 
			
		||||
	unsigned char *p,*s;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	unsigned char *s;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	if (len < 1)
 | 
			
		||||
		{
 | 
			
		||||
		i=ASN1_R_STRING_TOO_SHORT;
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if ((a == NULL) || ((*a) == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		if ((ret=M_ASN1_BIT_STRING_new()) == NULL) return(NULL);
 | 
			
		||||
@@ -183,7 +192,9 @@ int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value)
 | 
			
		||||
		if (a->data == NULL)
 | 
			
		||||
			c=(unsigned char *)OPENSSL_malloc(w+1);
 | 
			
		||||
		else
 | 
			
		||||
			c=(unsigned char *)OPENSSL_realloc(a->data,w+1);
 | 
			
		||||
			c=(unsigned char *)OPENSSL_realloc_clean(a->data,
 | 
			
		||||
								 a->length,
 | 
			
		||||
								 w+1);
 | 
			
		||||
		if (c == NULL) return(0);
 | 
			
		||||
		if (w+1-a->length > 0) memset(c+a->length, 0, w+1-a->length);
 | 
			
		||||
		a->data=c;
 | 
			
		||||
 
 | 
			
		||||
@@ -75,10 +75,10 @@ int i2d_ASN1_BOOLEAN(int a, unsigned char **pp)
 | 
			
		||||
	return(r);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int d2i_ASN1_BOOLEAN(int *a, unsigned char **pp, long length)
 | 
			
		||||
int d2i_ASN1_BOOLEAN(int *a, const unsigned char **pp, long length)
 | 
			
		||||
	{
 | 
			
		||||
	int ret= -1;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	long len;
 | 
			
		||||
	int inf,tag,xclass;
 | 
			
		||||
	int i=0;
 | 
			
		||||
 
 | 
			
		||||
@@ -60,14 +60,15 @@
 | 
			
		||||
#include "cryptlib.h"
 | 
			
		||||
#include <openssl/asn1.h>
 | 
			
		||||
 | 
			
		||||
static int asn1_collate_primitive(ASN1_STRING *a, ASN1_CTX *c);
 | 
			
		||||
static int asn1_collate_primitive(ASN1_STRING *a, ASN1_const_CTX *c);
 | 
			
		||||
/* type is a 'bitmap' of acceptable string types.
 | 
			
		||||
 */
 | 
			
		||||
ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a, unsigned char **pp,
 | 
			
		||||
ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a, const unsigned char **pp,
 | 
			
		||||
	     long length, int type)
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_STRING *ret=NULL;
 | 
			
		||||
	unsigned char *p,*s;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	unsigned char *s;
 | 
			
		||||
	long len;
 | 
			
		||||
	int inf,tag,xclass;
 | 
			
		||||
	int i=0;
 | 
			
		||||
@@ -153,11 +154,12 @@ int i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass)
 | 
			
		||||
	return(r);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, unsigned char **pp, long length,
 | 
			
		||||
	     int Ptag, int Pclass)
 | 
			
		||||
ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, const unsigned char **pp,
 | 
			
		||||
	     long length, int Ptag, int Pclass)
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_STRING *ret=NULL;
 | 
			
		||||
	unsigned char *p,*s;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	unsigned char *s;
 | 
			
		||||
	long len;
 | 
			
		||||
	int inf,tag,xclass;
 | 
			
		||||
	int i=0;
 | 
			
		||||
@@ -185,7 +187,7 @@ ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, unsigned char **pp, long length,
 | 
			
		||||
 | 
			
		||||
	if (inf & V_ASN1_CONSTRUCTED)
 | 
			
		||||
		{
 | 
			
		||||
		ASN1_CTX c;
 | 
			
		||||
		ASN1_const_CTX c;
 | 
			
		||||
 | 
			
		||||
		c.pp=pp;
 | 
			
		||||
		c.p=p;
 | 
			
		||||
@@ -247,7 +249,7 @@ err:
 | 
			
		||||
 * them into the one structure that is then returned */
 | 
			
		||||
/* There have been a few bug fixes for this function from
 | 
			
		||||
 * Paul Keogh <paul.keogh@sse.ie>, many thanks to him */
 | 
			
		||||
static int asn1_collate_primitive(ASN1_STRING *a, ASN1_CTX *c)
 | 
			
		||||
static int asn1_collate_primitive(ASN1_STRING *a, ASN1_const_CTX *c)
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_STRING *os=NULL;
 | 
			
		||||
	BUF_MEM b;
 | 
			
		||||
@@ -268,7 +270,7 @@ static int asn1_collate_primitive(ASN1_STRING *a, ASN1_CTX *c)
 | 
			
		||||
		{
 | 
			
		||||
		if (c->inf & 1)
 | 
			
		||||
			{
 | 
			
		||||
			c->eos=ASN1_check_infinite_end(&c->p,
 | 
			
		||||
			c->eos=ASN1_const_check_infinite_end(&c->p,
 | 
			
		||||
				(long)(c->max-c->p));
 | 
			
		||||
			if (c->eos) break;
 | 
			
		||||
			}
 | 
			
		||||
@@ -285,7 +287,7 @@ static int asn1_collate_primitive(ASN1_STRING *a, ASN1_CTX *c)
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if (!BUF_MEM_grow(&b,num+os->length))
 | 
			
		||||
		if (!BUF_MEM_grow_clean(&b,num+os->length))
 | 
			
		||||
			{
 | 
			
		||||
			c->error=ERR_R_BUF_LIB;
 | 
			
		||||
			goto err;
 | 
			
		||||
@@ -296,7 +298,7 @@ static int asn1_collate_primitive(ASN1_STRING *a, ASN1_CTX *c)
 | 
			
		||||
		num+=os->length;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (!asn1_Finish(c)) goto err;
 | 
			
		||||
	if (!asn1_const_Finish(c)) goto err;
 | 
			
		||||
 | 
			
		||||
	a->length=num;
 | 
			
		||||
	if (a->data != NULL) OPENSSL_free(a->data);
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user