Compare commits
	
		
			820 Commits
		
	
	
		
			OpenSSL_0_
			...
			OpenSSL_0_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					b873409efe | ||
| 
						 | 
					f89250f2f2 | ||
| 
						 | 
					1dc6a5441a | ||
| 
						 | 
					a4aa188799 | ||
| 
						 | 
					50befdb659 | ||
| 
						 | 
					46bf0ba876 | ||
| 
						 | 
					4b4c0a1921 | ||
| 
						 | 
					df70302441 | ||
| 
						 | 
					9c6c664041 | ||
| 
						 | 
					11f719da38 | ||
| 
						 | 
					72f1815391 | ||
| 
						 | 
					e42a2abadc | ||
| 
						 | 
					ec2fede946 | ||
| 
						 | 
					63f3c9e715 | ||
| 
						 | 
					c22e2dd6e5 | ||
| 
						 | 
					7fae32f6d6 | ||
| 
						 | 
					5260f1a483 | ||
| 
						 | 
					1cb10d9c7d | ||
| 
						 | 
					62abc80540 | ||
| 
						 | 
					722fa14271 | ||
| 
						 | 
					a2ca66f37c | ||
| 
						 | 
					6a04b0d5a4 | ||
| 
						 | 
					1acca28263 | ||
| 
						 | 
					d510c6489e | ||
| 
						 | 
					b82924741b | ||
| 
						 | 
					cbb6ccabb0 | ||
| 
						 | 
					e369af3600 | ||
| 
						 | 
					15b7f5bf88 | ||
| 
						 | 
					9880f63038 | ||
| 
						 | 
					af32df0a8e | ||
| 
						 | 
					bfb7bf1a28 | ||
| 
						 | 
					f33636faf7 | ||
| 
						 | 
					94f735cade | ||
| 
						 | 
					36216218ca | ||
| 
						 | 
					115eaf4886 | ||
| 
						 | 
					53ce5647d4 | ||
| 
						 | 
					4d2efa29f6 | ||
| 
						 | 
					cd332a0750 | ||
| 
						 | 
					2ed80d14d7 | ||
| 
						 | 
					d286606301 | ||
| 
						 | 
					3f4d81e88b | ||
| 
						 | 
					dc5dfe431c | ||
| 
						 | 
					c6a876473c | ||
| 
						 | 
					5a7fc89394 | ||
| 
						 | 
					116fd3732a | ||
| 
						 | 
					1bb01b1b5f | ||
| 
						 | 
					699d78ce98 | ||
| 
						 | 
					43d613ec18 | ||
| 
						 | 
					96e1015eec | ||
| 
						 | 
					cf4b01a766 | ||
| 
						 | 
					45d129511f | ||
| 
						 | 
					0976adac8f | ||
| 
						 | 
					db5b0d9309 | ||
| 
						 | 
					aeeedc8acc | ||
| 
						 | 
					c903866420 | ||
| 
						 | 
					9b208659aa | ||
| 
						 | 
					f54fab0fef | ||
| 
						 | 
					b30aaafbe5 | ||
| 
						 | 
					fee8d86d7a | ||
| 
						 | 
					bf3e53a7fa | ||
| 
						 | 
					44a8fced97 | ||
| 
						 | 
					4ff07f4c71 | ||
| 
						 | 
					1c5f396d36 | ||
| 
						 | 
					9fcaaef34f | ||
| 
						 | 
					b9a73f5481 | ||
| 
						 | 
					bff5319d90 | ||
| 
						 | 
					fc4bd2f287 | ||
| 
						 | 
					4c836c96c4 | ||
| 
						 | 
					6e14e7fc19 | ||
| 
						 | 
					fc15c44049 | ||
| 
						 | 
					445598b35e | ||
| 
						 | 
					338a5e7e54 | ||
| 
						 | 
					6a431cd293 | ||
| 
						 | 
					1b7024fb69 | ||
| 
						 | 
					5021f6314e | ||
| 
						 | 
					21d24dd38a | ||
| 
						 | 
					681d11b6fd | ||
| 
						 | 
					8c387e62b2 | ||
| 
						 | 
					a117329c5a | ||
| 
						 | 
					f39dbff498 | ||
| 
						 | 
					f6fefb0cb6 | ||
| 
						 | 
					febfaa53f4 | ||
| 
						 | 
					cfed221c2d | ||
| 
						 | 
					c2014ae252 | ||
| 
						 | 
					c3d317b4de | ||
| 
						 | 
					a214feb26b | ||
| 
						 | 
					7a3a82dbbd | ||
| 
						 | 
					02fef91630 | ||
| 
						 | 
					0b8cd5acd6 | ||
| 
						 | 
					97f4e235a1 | ||
| 
						 | 
					cfd2aeeb7c | ||
| 
						 | 
					a0fdc4c6d6 | ||
| 
						 | 
					b5def0243e | ||
| 
						 | 
					357f6d8add | ||
| 
						 | 
					19a71e8c16 | ||
| 
						 | 
					7faa66433f | ||
| 
						 | 
					1a0498769f | ||
| 
						 | 
					a4dde82423 | ||
| 
						 | 
					eba0aa995d | ||
| 
						 | 
					c9e6fffa53 | ||
| 
						 | 
					85dcce7c63 | ||
| 
						 | 
					2ed29615cb | ||
| 
						 | 
					d7080d624b | ||
| 
						 | 
					5d7c8a48db | ||
| 
						 | 
					00e86a74bd | ||
| 
						 | 
					9e6857a358 | ||
| 
						 | 
					715258486c | ||
| 
						 | 
					2daec41e25 | ||
| 
						 | 
					8519635923 | ||
| 
						 | 
					d0bdfdd830 | ||
| 
						 | 
					4b98488eb0 | ||
| 
						 | 
					0e2458e187 | ||
| 
						 | 
					326de18955 | ||
| 
						 | 
					1fcfd61ee7 | ||
| 
						 | 
					121f386ec7 | ||
| 
						 | 
					9fb10cfe6b | ||
| 
						 | 
					a20a6366c8 | ||
| 
						 | 
					54985b5061 | ||
| 
						 | 
					b09db677d5 | ||
| 
						 | 
					cdc596567d | ||
| 
						 | 
					70d923fb03 | ||
| 
						 | 
					def1490717 | ||
| 
						 | 
					7697d9b587 | ||
| 
						 | 
					0345354fe0 | ||
| 
						 | 
					90aef4431b | ||
| 
						 | 
					602689074a | ||
| 
						 | 
					810d2c7f6e | ||
| 
						 | 
					0a9b8dd1b4 | ||
| 
						 | 
					bfce4e5d6e | ||
| 
						 | 
					4a1190beca | ||
| 
						 | 
					047ec5d196 | ||
| 
						 | 
					bb59889305 | ||
| 
						 | 
					141a5482fd | ||
| 
						 | 
					de2422affb | ||
| 
						 | 
					897169fdf0 | ||
| 
						 | 
					410a49a4fa | ||
| 
						 | 
					82ba68c42d | ||
| 
						 | 
					4b258e73ae | ||
| 
						 | 
					6ac2f67882 | ||
| 
						 | 
					bea1d1cbd8 | ||
| 
						 | 
					61e6e80fe5 | ||
| 
						 | 
					2ce540743e | ||
| 
						 | 
					8e928aab02 | ||
| 
						 | 
					105e52bf23 | ||
| 
						 | 
					492a5010a4 | ||
| 
						 | 
					53b0b0a330 | ||
| 
						 | 
					677c117419 | ||
| 
						 | 
					bb50d30f35 | ||
| 
						 | 
					8323996d99 | ||
| 
						 | 
					ee14e33c35 | ||
| 
						 | 
					1bcb94a721 | ||
| 
						 | 
					9658c634a2 | ||
| 
						 | 
					7ee8b27267 | ||
| 
						 | 
					e4ea6f0c76 | ||
| 
						 | 
					a2c00fb210 | ||
| 
						 | 
					d06ae0fff7 | ||
| 
						 | 
					afa2ea204e | ||
| 
						 | 
					0b6394c738 | ||
| 
						 | 
					70ddf8ecca | ||
| 
						 | 
					9febee0272 | ||
| 
						 | 
					a721216f0f | ||
| 
						 | 
					47f689ac09 | ||
| 
						 | 
					f51f374199 | ||
| 
						 | 
					3c1128f43f | ||
| 
						 | 
					8185c9457e | ||
| 
						 | 
					c61f0cbffb | ||
| 
						 | 
					d90605dd00 | ||
| 
						 | 
					e56334998c | ||
| 
						 | 
					9ad5c5e4f9 | ||
| 
						 | 
					4bc24cf01d | ||
| 
						 | 
					79f57768ff | ||
| 
						 | 
					d79eb9299a | ||
| 
						 | 
					fff69a7d8c | ||
| 
						 | 
					a375025e4d | ||
| 
						 | 
					d471adf351 | ||
| 
						 | 
					2fb8642eea | ||
| 
						 | 
					c44d95c1a7 | ||
| 
						 | 
					0da40f0ffc | ||
| 
						 | 
					7f722c95f8 | ||
| 
						 | 
					4268216005 | ||
| 
						 | 
					17540b77e0 | ||
| 
						 | 
					b70e4d3e90 | ||
| 
						 | 
					d9519a4032 | ||
| 
						 | 
					5ac9786807 | ||
| 
						 | 
					0b05204c4e | ||
| 
						 | 
					a4bfeff254 | ||
| 
						 | 
					43433b3852 | ||
| 
						 | 
					020a4782bd | ||
| 
						 | 
					cadbbd51c8 | ||
| 
						 | 
					ff7b021040 | ||
| 
						 | 
					e7e4d506d6 | ||
| 
						 | 
					9204e7ef0d | ||
| 
						 | 
					257df40f00 | ||
| 
						 | 
					a44c9b9c33 | ||
| 
						 | 
					1cbd7456aa | ||
| 
						 | 
					e1e39a2451 | ||
| 
						 | 
					01de6e21cc | ||
| 
						 | 
					05689a132c | ||
| 
						 | 
					1643edc63c | ||
| 
						 | 
					1546fb780b | ||
| 
						 | 
					b7d222c519 | ||
| 
						 | 
					a93cc7c573 | ||
| 
						 | 
					8988407a0b | ||
| 
						 | 
					b2afc0a9dc | ||
| 
						 | 
					a8655eb21a | ||
| 
						 | 
					f751dc4759 | ||
| 
						 | 
					fbe621d08f | ||
| 
						 | 
					2e9fd4301f | ||
| 
						 | 
					1638ce7212 | ||
| 
						 | 
					7ecd974f5f | ||
| 
						 | 
					db731da802 | ||
| 
						 | 
					5864fd2061 | ||
| 
						 | 
					ff58eaa4b6 | ||
| 
						 | 
					76c61a5d1a | ||
| 
						 | 
					4ea7019165 | ||
| 
						 | 
					59b1129e0a | ||
| 
						 | 
					fb092ef4fc | ||
| 
						 | 
					6351adecb4 | ||
| 
						 | 
					8964efc413 | ||
| 
						 | 
					430b637bd5 | ||
| 
						 | 
					ca3b81c858 | ||
| 
						 | 
					031cbecf86 | ||
| 
						 | 
					1213e6c3c2 | ||
| 
						 | 
					32619893b4 | ||
| 
						 | 
					40e0de0395 | ||
| 
						 | 
					5f9345a2f0 | ||
| 
						 | 
					33ccde59a1 | ||
| 
						 | 
					1909df070f | ||
| 
						 | 
					c23a745820 | ||
| 
						 | 
					924b117422 | ||
| 
						 | 
					24b2806097 | ||
| 
						 | 
					99f5093347 | ||
| 
						 | 
					be88529753 | ||
| 
						 | 
					b3a959a337 | ||
| 
						 | 
					2928cb4c82 | ||
| 
						 | 
					a33e6702a0 | ||
| 
						 | 
					35a65e814b | ||
| 
						 | 
					7ad132b133 | ||
| 
						 | 
					2708813166 | ||
| 
						 | 
					affe98998a | ||
| 
						 | 
					66e8211c0b | ||
| 
						 | 
					dd2dee60f3 | ||
| 
						 | 
					6495179af6 | ||
| 
						 | 
					61b8c79d15 | ||
| 
						 | 
					42aa3ec4f2 | ||
| 
						 | 
					bb152dae8f | ||
| 
						 | 
					c42ab44087 | ||
| 
						 | 
					42e10c3fd6 | ||
| 
						 | 
					c571a3e984 | ||
| 
						 | 
					e55988bb60 | ||
| 
						 | 
					34b5ba3b60 | ||
| 
						 | 
					629ac4b4ca | ||
| 
						 | 
					75f0bc4f44 | ||
| 
						 | 
					71a2440ee5 | ||
| 
						 | 
					04e40739f7 | ||
| 
						 | 
					48bcdad0d5 | ||
| 
						 | 
					f7d2402cab | ||
| 
						 | 
					808f55351a | ||
| 
						 | 
					c06271bc35 | ||
| 
						 | 
					92e5882aca | ||
| 
						 | 
					afa0580cd5 | ||
| 
						 | 
					4baee3031c | ||
| 
						 | 
					db7a72b224 | ||
| 
						 | 
					b71e69ad8e | ||
| 
						 | 
					f856173c43 | ||
| 
						 | 
					d742f9ebbd | ||
| 
						 | 
					36dd4cba3d | ||
| 
						 | 
					3978429ad5 | ||
| 
						 | 
					885945d6e1 | ||
| 
						 | 
					e22e770147 | ||
| 
						 | 
					e0c0203341 | ||
| 
						 | 
					e1eec61e26 | ||
| 
						 | 
					296fa128c9 | ||
| 
						 | 
					6dde222aae | ||
| 
						 | 
					391ac37018 | ||
| 
						 | 
					8d038a08fb | ||
| 
						 | 
					747c6ffda4 | ||
| 
						 | 
					d4cddc54f0 | ||
| 
						 | 
					eb7112c18e | ||
| 
						 | 
					fef9e07930 | ||
| 
						 | 
					8ab27e6ef7 | ||
| 
						 | 
					6415055590 | ||
| 
						 | 
					556e27b14f | ||
| 
						 | 
					af0c009d70 | ||
| 
						 | 
					0b1cf4a139 | ||
| 
						 | 
					a9101cdcaa | ||
| 
						 | 
					e351e2a7cf | ||
| 
						 | 
					215276243d | ||
| 
						 | 
					ddb7832852 | ||
| 
						 | 
					2fad41d155 | ||
| 
						 | 
					b9c3d9168f | ||
| 
						 | 
					4f2fc3c2dd | ||
| 
						 | 
					48819f4d54 | ||
| 
						 | 
					b0cbdd3eba | ||
| 
						 | 
					5016107550 | ||
| 
						 | 
					25d5d15fd5 | ||
| 
						 | 
					725713f74a | ||
| 
						 | 
					73eb0972cf | ||
| 
						 | 
					6720779c7e | ||
| 
						 | 
					b2a2c6af2a | ||
| 
						 | 
					272993bac4 | ||
| 
						 | 
					58532ae047 | ||
| 
						 | 
					4e7f6d380d | ||
| 
						 | 
					f0be325f88 | ||
| 
						 | 
					b66af23aa9 | ||
| 
						 | 
					29d0c13e97 | ||
| 
						 | 
					8a4e81a269 | ||
| 
						 | 
					843fc7b681 | ||
| 
						 | 
					6dcb6bf1c1 | ||
| 
						 | 
					1061c3cb3c | ||
| 
						 | 
					0d0f15d8d1 | ||
| 
						 | 
					a72ce94213 | ||
| 
						 | 
					f71d59c70e | ||
| 
						 | 
					3309f8313c | ||
| 
						 | 
					6cc5f194a7 | ||
| 
						 | 
					096327a99a | ||
| 
						 | 
					cc10bcf25e | ||
| 
						 | 
					875ac0ec00 | ||
| 
						 | 
					bf240f063a | ||
| 
						 | 
					dd016b0570 | ||
| 
						 | 
					244788464a | ||
| 
						 | 
					a95808334e | ||
| 
						 | 
					b3cebd5acf | ||
| 
						 | 
					7b775145e4 | ||
| 
						 | 
					7183aa6b9d | ||
| 
						 | 
					eebefe35e7 | ||
| 
						 | 
					1db0bbdc76 | ||
| 
						 | 
					e643112dd8 | ||
| 
						 | 
					21c4b25959 | ||
| 
						 | 
					41cf2c3aef | ||
| 
						 | 
					0e3a930fb4 | ||
| 
						 | 
					0c214e0153 | ||
| 
						 | 
					6c61cfbe03 | ||
| 
						 | 
					2ee77d36a0 | ||
| 
						 | 
					24f441e0bb | ||
| 
						 | 
					740da44f20 | ||
| 
						 | 
					72033fde7b | ||
| 
						 | 
					9adf3fcf9a | ||
| 
						 | 
					65f7456652 | ||
| 
						 | 
					8794569a08 | ||
| 
						 | 
					f8731bc2fd | ||
| 
						 | 
					195d6bf760 | ||
| 
						 | 
					dacd94b9c8 | ||
| 
						 | 
					8070cb5f87 | ||
| 
						 | 
					f7d514f449 | ||
| 
						 | 
					6d50bce79f | ||
| 
						 | 
					3cf0a38b3e | ||
| 
						 | 
					91a1d08a4c | ||
| 
						 | 
					85e776885b | ||
| 
						 | 
					fc4015329f | ||
| 
						 | 
					6ec9ff83f3 | ||
| 
						 | 
					db45308477 | ||
| 
						 | 
					1c7c69a8a5 | ||
| 
						 | 
					24ad061037 | ||
| 
						 | 
					92f96fa721 | ||
| 
						 | 
					0d1e362363 | ||
| 
						 | 
					a0bf2c86ab | ||
| 
						 | 
					6a662a45f3 | ||
| 
						 | 
					24d0524f31 | ||
| 
						 | 
					c081817c95 | ||
| 
						 | 
					46a1f2487e | ||
| 
						 | 
					ac02a4b68a | ||
| 
						 | 
					4ba063d3c5 | ||
| 
						 | 
					e0e0818e4b | ||
| 
						 | 
					82a5049f6a | ||
| 
						 | 
					d027b75b73 | ||
| 
						 | 
					87421d3fc5 | ||
| 
						 | 
					87d14a3625 | ||
| 
						 | 
					cc0931e36b | ||
| 
						 | 
					22152d6885 | ||
| 
						 | 
					102bcbce8d | ||
| 
						 | 
					8655de423d | ||
| 
						 | 
					c4b2eb24b3 | ||
| 
						 | 
					03e3fbb702 | ||
| 
						 | 
					bc7ee385f5 | ||
| 
						 | 
					1e368ab08f | ||
| 
						 | 
					2c77c5c8db | ||
| 
						 | 
					1eb38c563f | ||
| 
						 | 
					fa657871ed | ||
| 
						 | 
					09dac71a45 | ||
| 
						 | 
					be70b3adce | ||
| 
						 | 
					6d12b1f82b | ||
| 
						 | 
					7116a41129 | ||
| 
						 | 
					7143acab25 | ||
| 
						 | 
					11d4086d8e | ||
| 
						 | 
					32cd1da62e | ||
| 
						 | 
					d430f56de6 | ||
| 
						 | 
					957ebe98fb | ||
| 
						 | 
					9d09fc8485 | ||
| 
						 | 
					8ea4531718 | ||
| 
						 | 
					881611678e | ||
| 
						 | 
					a3dc628d86 | ||
| 
						 | 
					3c159fc1a5 | ||
| 
						 | 
					6056afd223 | ||
| 
						 | 
					54db796991 | ||
| 
						 | 
					119e912a83 | ||
| 
						 | 
					f4a4a0fdc7 | ||
| 
						 | 
					9ad765173f | ||
| 
						 | 
					c8e3c1a9b5 | ||
| 
						 | 
					ae378b769a | ||
| 
						 | 
					4de4e35459 | ||
| 
						 | 
					5537a83e56 | ||
| 
						 | 
					c850d322a6 | ||
| 
						 | 
					b8be571868 | ||
| 
						 | 
					acd43bf38c | ||
| 
						 | 
					5eaf173647 | ||
| 
						 | 
					7890b562bc | ||
| 
						 | 
					7258d33794 | ||
| 
						 | 
					263979a2a3 | ||
| 
						 | 
					2c6d83354d | ||
| 
						 | 
					a188fc01fe | ||
| 
						 | 
					1948f9e042 | ||
| 
						 | 
					f7ffc3a6c9 | ||
| 
						 | 
					4d6af5c5d2 | ||
| 
						 | 
					efed63d783 | ||
| 
						 | 
					7e351bb560 | ||
| 
						 | 
					0067580321 | ||
| 
						 | 
					82e0073624 | ||
| 
						 | 
					7e541b1a7f | ||
| 
						 | 
					2ae47ddbc2 | ||
| 
						 | 
					3e8b8b8990 | ||
| 
						 | 
					05bbbe9204 | ||
| 
						 | 
					a073129293 | ||
| 
						 | 
					93fc0e0e40 | ||
| 
						 | 
					84f1c14396 | ||
| 
						 | 
					f10986bab4 | ||
| 
						 | 
					6cb5746b65 | ||
| 
						 | 
					0061aa9f32 | ||
| 
						 | 
					3926bbcf6d | ||
| 
						 | 
					b5cee977c2 | ||
| 
						 | 
					ae3b60ba99 | ||
| 
						 | 
					d4ba6424a1 | ||
| 
						 | 
					92a97e52a0 | ||
| 
						 | 
					78dcaa0609 | ||
| 
						 | 
					65b4c34d86 | ||
| 
						 | 
					d8486c312c | ||
| 
						 | 
					8d4baaf2f0 | ||
| 
						 | 
					50fb940f05 | ||
| 
						 | 
					63e3676e68 | ||
| 
						 | 
					1dac2cae68 | ||
| 
						 | 
					d886975835 | ||
| 
						 | 
					22872a5363 | ||
| 
						 | 
					82b6b541b1 | ||
| 
						 | 
					60a989a76e | ||
| 
						 | 
					18394ed50f | ||
| 
						 | 
					3416d11926 | ||
| 
						 | 
					c1f1a03d0c | ||
| 
						 | 
					278a447ee8 | ||
| 
						 | 
					8ceee689c7 | ||
| 
						 | 
					356f164f52 | ||
| 
						 | 
					203ef9988c | ||
| 
						 | 
					9f51bdae00 | ||
| 
						 | 
					59c4f46f0f | ||
| 
						 | 
					f9ab6255e7 | ||
| 
						 | 
					a89b665b9b | ||
| 
						 | 
					a7949b8da3 | ||
| 
						 | 
					b0b4adc3af | ||
| 
						 | 
					6e19895972 | ||
| 
						 | 
					d24f1cbf35 | ||
| 
						 | 
					b8febed96a | ||
| 
						 | 
					82687bb4c3 | ||
| 
						 | 
					6506b7754a | ||
| 
						 | 
					2eb8e5e62a | ||
| 
						 | 
					c713a4c04d | ||
| 
						 | 
					0cefa0f942 | ||
| 
						 | 
					834c85ef0c | ||
| 
						 | 
					0c8c8eab58 | ||
| 
						 | 
					bc06baca76 | ||
| 
						 | 
					9eeb779e8f | ||
| 
						 | 
					fe171f9c3e | ||
| 
						 | 
					5e613d5411 | ||
| 
						 | 
					56e930eb03 | ||
| 
						 | 
					4a052f0bb9 | ||
| 
						 | 
					f34e79f27b | ||
| 
						 | 
					ef1fe9094c | ||
| 
						 | 
					c25e8ee9b3 | ||
| 
						 | 
					4525a048ec | ||
| 
						 | 
					f421a52f56 | ||
| 
						 | 
					17a79eec0c | ||
| 
						 | 
					1eda14b44f | ||
| 
						 | 
					aa9b502619 | ||
| 
						 | 
					aaf45e6464 | ||
| 
						 | 
					be83c31cdd | ||
| 
						 | 
					76a41eec2b | ||
| 
						 | 
					ab9c0ec9fc | ||
| 
						 | 
					cf6a1dea19 | ||
| 
						 | 
					ea5b3f5e62 | ||
| 
						 | 
					c3c658e1c0 | ||
| 
						 | 
					5d013b6b32 | ||
| 
						 | 
					ee91323f52 | ||
| 
						 | 
					4fae868811 | ||
| 
						 | 
					354f92d66a | ||
| 
						 | 
					c3484e0268 | ||
| 
						 | 
					6b0be9c73d | ||
| 
						 | 
					02312a91ca | ||
| 
						 | 
					744f6b648e | ||
| 
						 | 
					f1502a491e | ||
| 
						 | 
					b70871b675 | ||
| 
						 | 
					9de450b545 | ||
| 
						 | 
					cc53036744 | ||
| 
						 | 
					4610d8dc00 | ||
| 
						 | 
					5d7dfefe82 | ||
| 
						 | 
					5e8e7054f7 | ||
| 
						 | 
					9a542ea01d | ||
| 
						 | 
					1939f83709 | ||
| 
						 | 
					b7c114f044 | ||
| 
						 | 
					ede1351997 | ||
| 
						 | 
					7786ed6a64 | ||
| 
						 | 
					bdd08277b8 | ||
| 
						 | 
					2bf4faa7e4 | ||
| 
						 | 
					2e5e604b0c | ||
| 
						 | 
					ed4cd027f3 | ||
| 
						 | 
					bab19a2ac2 | ||
| 
						 | 
					582eb96d15 | ||
| 
						 | 
					2649ce1ebc | ||
| 
						 | 
					7070cdba4e | ||
| 
						 | 
					e885de28b1 | ||
| 
						 | 
					3038649ab2 | ||
| 
						 | 
					3e4da3f7cb | ||
| 
						 | 
					53b5d04715 | ||
| 
						 | 
					defede6080 | ||
| 
						 | 
					1472f1427e | ||
| 
						 | 
					00d1ecb1da | ||
| 
						 | 
					739e0e934a | ||
| 
						 | 
					6ae9770d34 | ||
| 
						 | 
					bec7184768 | ||
| 
						 | 
					442ac8d259 | ||
| 
						 | 
					657b02d0cf | ||
| 
						 | 
					b50ef8b216 | ||
| 
						 | 
					1b690c1a8b | ||
| 
						 | 
					2873a53f5f | ||
| 
						 | 
					04a781e844 | ||
| 
						 | 
					68be98d1a6 | ||
| 
						 | 
					0bbbadf3f5 | ||
| 
						 | 
					c0c1ce125a | ||
| 
						 | 
					105861186f | ||
| 
						 | 
					4a9d335bb4 | ||
| 
						 | 
					162f1e08f8 | ||
| 
						 | 
					0484ff5ec1 | ||
| 
						 | 
					4acc2fed6c | ||
| 
						 | 
					0369804ffa | ||
| 
						 | 
					33d7b5ec07 | ||
| 
						 | 
					4b38f35e72 | ||
| 
						 | 
					82c2773423 | ||
| 
						 | 
					ded27f709c | ||
| 
						 | 
					30dc3e112b | ||
| 
						 | 
					371b262f96 | ||
| 
						 | 
					b3fb2492d5 | ||
| 
						 | 
					93b810637b | ||
| 
						 | 
					cc62974182 | ||
| 
						 | 
					9413788571 | ||
| 
						 | 
					e8387db0c4 | ||
| 
						 | 
					81f28ca567 | ||
| 
						 | 
					1b32943215 | ||
| 
						 | 
					a231d99d4c | ||
| 
						 | 
					714044cc03 | ||
| 
						 | 
					5598b99fb3 | ||
| 
						 | 
					6899d9bbf6 | ||
| 
						 | 
					cf876a9893 | ||
| 
						 | 
					8b8a2928af | ||
| 
						 | 
					031774468c | ||
| 
						 | 
					dd28d12add | ||
| 
						 | 
					6c61ee8fe3 | ||
| 
						 | 
					b86ebb55ff | ||
| 
						 | 
					66956eaba3 | ||
| 
						 | 
					444ff35029 | ||
| 
						 | 
					ff2549be1d | ||
| 
						 | 
					2557c6a812 | ||
| 
						 | 
					aae48de0f7 | ||
| 
						 | 
					766708f24b | ||
| 
						 | 
					fbeb4a9d15 | ||
| 
						 | 
					24fc4f656c | ||
| 
						 | 
					c3c3b28818 | ||
| 
						 | 
					06e2670a57 | ||
| 
						 | 
					3798a4d059 | ||
| 
						 | 
					5b8246d6eb | ||
| 
						 | 
					2e24bc421d | ||
| 
						 | 
					f244ed3ed2 | ||
| 
						 | 
					50a095ed16 | ||
| 
						 | 
					37aff2199e | ||
| 
						 | 
					309aa5fbf3 | ||
| 
						 | 
					5f40948714 | ||
| 
						 | 
					c22050be29 | ||
| 
						 | 
					54ca55fd81 | ||
| 
						 | 
					d0e79d7e2c | ||
| 
						 | 
					c1003dfd15 | ||
| 
						 | 
					98809a1458 | ||
| 
						 | 
					ccc3df8c33 | ||
| 
						 | 
					593a6dbe19 | ||
| 
						 | 
					efbe446f1a | ||
| 
						 | 
					725745d105 | ||
| 
						 | 
					c0e94f8292 | ||
| 
						 | 
					ef4bd0167c | ||
| 
						 | 
					7a8a3ef4f6 | ||
| 
						 | 
					98c7b0367d | ||
| 
						 | 
					9e5dea0ffd | ||
| 
						 | 
					cb4823fdd6 | ||
| 
						 | 
					17bb051628 | ||
| 
						 | 
					59f44e810b | ||
| 
						 | 
					7a014dceb6 | ||
| 
						 | 
					1ff44a99a4 | ||
| 
						 | 
					6cf61614e4 | ||
| 
						 | 
					82e448b92b | ||
| 
						 | 
					b172352b52 | ||
| 
						 | 
					95b14fd803 | ||
| 
						 | 
					553d2e3280 | ||
| 
						 | 
					82fb4ee89d | ||
| 
						 | 
					389fef6c9c | ||
| 
						 | 
					b6622f9623 | ||
| 
						 | 
					7f5448e3a8 | ||
| 
						 | 
					5d965f0783 | ||
| 
						 | 
					b14713c231 | ||
| 
						 | 
					637e0ba420 | ||
| 
						 | 
					9ac37cb018 | ||
| 
						 | 
					fb7751b44f | ||
| 
						 | 
					e333a8d673 | ||
| 
						 | 
					89a6daac00 | ||
| 
						 | 
					7e42945918 | ||
| 
						 | 
					b61a87b26c | ||
| 
						 | 
					2c6b141931 | ||
| 
						 | 
					af13c50d51 | ||
| 
						 | 
					65c2397fce | ||
| 
						 | 
					16e7efe3c8 | ||
| 
						 | 
					c2b78c31d6 | ||
| 
						 | 
					a1dc0336dd | ||
| 
						 | 
					d99a35f275 | ||
| 
						 | 
					949fbf073a | ||
| 
						 | 
					6156be4da3 | ||
| 
						 | 
					d7d4325655 | ||
| 
						 | 
					9f81ffe433 | ||
| 
						 | 
					8164930816 | ||
| 
						 | 
					2a8834cf89 | ||
| 
						 | 
					e6e11f4ec3 | ||
| 
						 | 
					452e41562c | ||
| 
						 | 
					8c6dd96aed | ||
| 
						 | 
					23a4ccd178 | ||
| 
						 | 
					2b4d877a27 | ||
| 
						 | 
					d916f92d6f | ||
| 
						 | 
					b9b5134e19 | ||
| 
						 | 
					9ef6fdab63 | ||
| 
						 | 
					3a0b6de4d0 | ||
| 
						 | 
					08896dc0bd | ||
| 
						 | 
					ef62799783 | ||
| 
						 | 
					8196257f00 | ||
| 
						 | 
					ac923d3377 | ||
| 
						 | 
					0ec529ac82 | ||
| 
						 | 
					d5b0c872d8 | ||
| 
						 | 
					2e8026b65a | ||
| 
						 | 
					381a9f04a0 | ||
| 
						 | 
					d7050b4424 | ||
| 
						 | 
					91ca332058 | ||
| 
						 | 
					ff095a8ac8 | ||
| 
						 | 
					ae37f9f3a2 | ||
| 
						 | 
					95d66bd867 | ||
| 
						 | 
					6d73e9d8e8 | ||
| 
						 | 
					fb5a4bbaa7 | ||
| 
						 | 
					d402f6b66f | ||
| 
						 | 
					36a38a7a27 | ||
| 
						 | 
					2a4dc7e505 | ||
| 
						 | 
					4e92353d23 | ||
| 
						 | 
					0badc909ae | ||
| 
						 | 
					3cc52ee97a | ||
| 
						 | 
					822da9ccc3 | ||
| 
						 | 
					96e20179e4 | ||
| 
						 | 
					1dfa26bd84 | ||
| 
						 | 
					9e6c97703c | ||
| 
						 | 
					a0f6e0c1e7 | ||
| 
						 | 
					edaa7a599a | ||
| 
						 | 
					3b95629db1 | ||
| 
						 | 
					afff063a14 | ||
| 
						 | 
					e1246e1ad7 | ||
| 
						 | 
					df0b451d91 | ||
| 
						 | 
					07cb0a82d1 | ||
| 
						 | 
					f2671f8ac4 | ||
| 
						 | 
					43e9e1a160 | ||
| 
						 | 
					d0969d24cf | ||
| 
						 | 
					cf51a0dccb | ||
| 
						 | 
					48b30bf0e2 | ||
| 
						 | 
					17b08b6a64 | ||
| 
						 | 
					197ab47bdd | ||
| 
						 | 
					e8cce0babe | ||
| 
						 | 
					11d655ef40 | ||
| 
						 | 
					1da61e8051 | ||
| 
						 | 
					da6ce18279 | ||
| 
						 | 
					98f43a173b | ||
| 
						 | 
					c202eda634 | ||
| 
						 | 
					f78bcb8945 | ||
| 
						 | 
					2a918d4cc0 | ||
| 
						 | 
					2c83b24cad | ||
| 
						 | 
					e75445f688 | ||
| 
						 | 
					df51d79ec4 | ||
| 
						 | 
					c21a427a14 | ||
| 
						 | 
					c6e4ef2c6e | ||
| 
						 | 
					6450908a35 | ||
| 
						 | 
					a91cb2103d | ||
| 
						 | 
					3acd3158e9 | ||
| 
						 | 
					8a04c6f894 | ||
| 
						 | 
					745565c69f | ||
| 
						 | 
					fbc4a24633 | ||
| 
						 | 
					4775a89760 | ||
| 
						 | 
					3008a7d819 | ||
| 
						 | 
					233f758523 | ||
| 
						 | 
					3af16cf694 | ||
| 
						 | 
					985b5ee735 | ||
| 
						 | 
					4df7ade829 | ||
| 
						 | 
					932858d5f9 | ||
| 
						 | 
					c4b3503b4b | ||
| 
						 | 
					f871545f7f | ||
| 
						 | 
					136b5dc7c7 | ||
| 
						 | 
					759b287f15 | ||
| 
						 | 
					5fffb5b3d9 | ||
| 
						 | 
					17620eec4c | ||
| 
						 | 
					059230b320 | ||
| 
						 | 
					19dac35e5f | ||
| 
						 | 
					f5fe2a9f6c | ||
| 
						 | 
					d36e9d160b | ||
| 
						 | 
					e58e78cab2 | ||
| 
						 | 
					b0080e3817 | ||
| 
						 | 
					4d67d79273 | ||
| 
						 | 
					83ece9f028 | ||
| 
						 | 
					cec136c30d | ||
| 
						 | 
					ded8aff2c8 | ||
| 
						 | 
					76a268a43f | ||
| 
						 | 
					6563b02980 | ||
| 
						 | 
					32d4496c1e | ||
| 
						 | 
					0b26e53c59 | ||
| 
						 | 
					7cf69ed544 | ||
| 
						 | 
					8b634ba029 | ||
| 
						 | 
					526228b78e | ||
| 
						 | 
					34d01a3b20 | ||
| 
						 | 
					856f3005de | ||
| 
						 | 
					6e2a14002e | ||
| 
						 | 
					7852c6b075 | ||
| 
						 | 
					2c5f3606d1 | ||
| 
						 | 
					1649489834 | ||
| 
						 | 
					b51291cba8 | ||
| 
						 | 
					b29b576957 | ||
| 
						 | 
					abe389fd28 | ||
| 
						 | 
					e7e7f5de4b | ||
| 
						 | 
					3dfa7416cd | ||
| 
						 | 
					d733ef7a69 | ||
| 
						 | 
					17e01d24bb | ||
| 
						 | 
					f67f815624 | ||
| 
						 | 
					ab8fe43fa2 | ||
| 
						 | 
					5e4c2225ed | ||
| 
						 | 
					167d2a1411 | ||
| 
						 | 
					3f4802a14e | ||
| 
						 | 
					9aecc3e5ff | ||
| 
						 | 
					b8a4a5bcba | ||
| 
						 | 
					6daac534d7 | ||
| 
						 | 
					79649d380e | ||
| 
						 | 
					51ebaa9f82 | ||
| 
						 | 
					efaa569c3b | ||
| 
						 | 
					15684f58c2 | ||
| 
						 | 
					0e6c24ae4b | ||
| 
						 | 
					0dc1b3c1fb | ||
| 
						 | 
					1e53b797f6 | ||
| 
						 | 
					1ddf691244 | ||
| 
						 | 
					78074baadd | ||
| 
						 | 
					7457642b8c | ||
| 
						 | 
					d1e107702b | ||
| 
						 | 
					19503ca653 | ||
| 
						 | 
					14089b1d0f | ||
| 
						 | 
					0b8eca58b9 | ||
| 
						 | 
					c2f425a06a | ||
| 
						 | 
					4930f8bbd9 | ||
| 
						 | 
					a5668db68b | ||
| 
						 | 
					996b80f990 | ||
| 
						 | 
					1998f60546 | ||
| 
						 | 
					13a4808ca4 | ||
| 
						 | 
					a176be48a2 | ||
| 
						 | 
					f47bce27e3 | ||
| 
						 | 
					f86d65110d | ||
| 
						 | 
					4730ea8a38 | ||
| 
						 | 
					3e82dfdf2d | ||
| 
						 | 
					b7d0d35a13 | ||
| 
						 | 
					e12ceb2c92 | ||
| 
						 | 
					e8d23950a0 | ||
| 
						 | 
					d7c86198d9 | ||
| 
						 | 
					76428da729 | ||
| 
						 | 
					6bf4ca0840 | ||
| 
						 | 
					efa59b8d59 | ||
| 
						 | 
					e1a2bfaaa6 | ||
| 
						 | 
					48f48d96ce | ||
| 
						 | 
					085cb7cac0 | ||
| 
						 | 
					9874ff33c3 | ||
| 
						 | 
					73cfd9cce9 | ||
| 
						 | 
					3166d16f06 | ||
| 
						 | 
					26b82246b1 | ||
| 
						 | 
					277ba3ebd2 | ||
| 
						 | 
					3e9b2042d9 | ||
| 
						 | 
					5d577d7eb0 | ||
| 
						 | 
					05ee0523c1 | ||
| 
						 | 
					43f392c9a1 | ||
| 
						 | 
					01cb2049e3 | ||
| 
						 | 
					a224fe14e9 | ||
| 
						 | 
					00d5a5ff55 | ||
| 
						 | 
					420312cec5 | ||
| 
						 | 
					3c17fa3325 | ||
| 
						 | 
					e3424084a0 | ||
| 
						 | 
					d9a55422c7 | ||
| 
						 | 
					374941f727 | ||
| 
						 | 
					caeb429055 | ||
| 
						 | 
					b00c36e366 | ||
| 
						 | 
					1f9a128519 | ||
| 
						 | 
					18df6b30b1 | ||
| 
						 | 
					0d399f97dd | ||
| 
						 | 
					3fdc2c906d | ||
| 
						 | 
					a78ded0b61 | ||
| 
						 | 
					0a629ddbd6 | ||
| 
						 | 
					353cb367e4 | ||
| 
						 | 
					6252f3bc7c | ||
| 
						 | 
					4e319926d7 | ||
| 
						 | 
					e4f456918f | ||
| 
						 | 
					c342341ea1 | ||
| 
						 | 
					9d396bee8e | ||
| 
						 | 
					a9427c2536 | ||
| 
						 | 
					7a746ecf3e | ||
| 
						 | 
					aca8bf43ce | ||
| 
						 | 
					7de0df694f | 
							
								
								
									
										77
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,77 @@
 | 
			
		||||
# Object files
 | 
			
		||||
*.o
 | 
			
		||||
 | 
			
		||||
# editor artefacts
 | 
			
		||||
*.swp
 | 
			
		||||
.#*
 | 
			
		||||
#*#
 | 
			
		||||
*~
 | 
			
		||||
 | 
			
		||||
# Top level excludes
 | 
			
		||||
/Makefile.bak
 | 
			
		||||
/Makefile
 | 
			
		||||
/*.a
 | 
			
		||||
/include
 | 
			
		||||
/*.pc
 | 
			
		||||
/rehash.time
 | 
			
		||||
 | 
			
		||||
# Most *.c files under test/ are symlinks
 | 
			
		||||
/test/*.c
 | 
			
		||||
# Apart from these
 | 
			
		||||
!/test/asn1test.c
 | 
			
		||||
!/test/methtest.c
 | 
			
		||||
!/test/dummytest.c
 | 
			
		||||
!/test/igetest.c
 | 
			
		||||
!/test/r160test.c
 | 
			
		||||
!/test/fips_algvs.c
 | 
			
		||||
 | 
			
		||||
/test/*.ss
 | 
			
		||||
/test/*.srl
 | 
			
		||||
/test/.rnd
 | 
			
		||||
/test/test*.pem
 | 
			
		||||
/test/newkey.pem
 | 
			
		||||
 | 
			
		||||
# Certificate symbolic links
 | 
			
		||||
*.0
 | 
			
		||||
 | 
			
		||||
# Links under apps
 | 
			
		||||
/apps/CA.pl
 | 
			
		||||
/apps/md4.c
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Auto generated headers
 | 
			
		||||
/crypto/buildinf.h
 | 
			
		||||
/crypto/opensslconf.h
 | 
			
		||||
 | 
			
		||||
# Auto generated assembly language source files
 | 
			
		||||
*.s
 | 
			
		||||
!/crypto/bn/asm/pa-risc2.s
 | 
			
		||||
!/crypto/bn/asm/pa-risc2W.s
 | 
			
		||||
 | 
			
		||||
# Executables
 | 
			
		||||
/apps/openssl
 | 
			
		||||
/test/sha256t
 | 
			
		||||
/test/sha512t
 | 
			
		||||
/test/*test
 | 
			
		||||
/test/fips_aesavs
 | 
			
		||||
/test/fips_desmovs
 | 
			
		||||
/test/fips_dhvs
 | 
			
		||||
/test/fips_drbgvs
 | 
			
		||||
/test/fips_dssvs
 | 
			
		||||
/test/fips_ecdhvs
 | 
			
		||||
/test/fips_ecdsavs
 | 
			
		||||
/test/fips_rngvs
 | 
			
		||||
/test/fips_test_suite
 | 
			
		||||
*.so*
 | 
			
		||||
*.dylib*
 | 
			
		||||
*.dll*
 | 
			
		||||
# Exceptions
 | 
			
		||||
!/test/bctest
 | 
			
		||||
!/crypto/des/times/486-50.sol
 | 
			
		||||
 | 
			
		||||
# Misc auto generated files
 | 
			
		||||
/tools/c_rehash
 | 
			
		||||
/test/evptests.txt
 | 
			
		||||
lib
 | 
			
		||||
Makefile.save
 | 
			
		||||
*.bak
 | 
			
		||||
							
								
								
									
										30
									
								
								ACKNOWLEDGMENTS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								ACKNOWLEDGMENTS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
The OpenSSL project depends on volunteer efforts and financial support from
 | 
			
		||||
the end user community. That support comes in the form of donations and paid
 | 
			
		||||
sponsorships, software support contracts, paid consulting services
 | 
			
		||||
and commissioned software development.
 | 
			
		||||
 | 
			
		||||
Since all these activities support the continued development and improvement
 | 
			
		||||
of OpenSSL we consider all these clients and customers as sponsors of the
 | 
			
		||||
OpenSSL project.
 | 
			
		||||
 | 
			
		||||
We would like to identify and thank the following such sponsors for their past
 | 
			
		||||
or current significant support of the OpenSSL project:
 | 
			
		||||
 | 
			
		||||
Major support:
 | 
			
		||||
 | 
			
		||||
	Qualys		http://www.qualys.com/
 | 
			
		||||
 | 
			
		||||
Very significant support:
 | 
			
		||||
 | 
			
		||||
	OpenGear:	http://www.opengear.com/
 | 
			
		||||
 | 
			
		||||
Significant support:
 | 
			
		||||
 | 
			
		||||
	PSW Group:	http://www.psw.net/
 | 
			
		||||
	Acano Ltd.	http://acano.com/
 | 
			
		||||
 | 
			
		||||
Please note that we ask permission to identify sponsors and that some sponsors
 | 
			
		||||
we consider eligible for inclusion here have requested to remain anonymous.
 | 
			
		||||
 | 
			
		||||
Additional sponsorship or financial support is always welcome: for more
 | 
			
		||||
information please contact the OpenSSL Software Foundation.
 | 
			
		||||
							
								
								
									
										647
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										647
									
								
								CHANGES
									
									
									
									
									
								
							@@ -2,6 +2,636 @@
 | 
			
		||||
 OpenSSL CHANGES
 | 
			
		||||
 _______________
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8zc and 0.9.8zd [8 Jan 2015]
 | 
			
		||||
 | 
			
		||||
  *) Fix DTLS segmentation fault in dtls1_get_record. A carefully crafted DTLS
 | 
			
		||||
     message can cause a segmentation fault in OpenSSL due to a NULL pointer
 | 
			
		||||
     dereference. This could lead to a Denial Of Service attack. Thanks to
 | 
			
		||||
     Markus Stenberg of Cisco Systems, Inc. for reporting this issue.
 | 
			
		||||
     (CVE-2014-3571)
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Fix issue where no-ssl3 configuration sets method to NULL. When openssl is
 | 
			
		||||
     built with the no-ssl3 option and a SSL v3 ClientHello is received the ssl
 | 
			
		||||
     method would be set to NULL which could later result in a NULL pointer
 | 
			
		||||
     dereference. Thanks to Frank Schmirler for reporting this issue.
 | 
			
		||||
     (CVE-2014-3569)
 | 
			
		||||
     [Kurt Roeckx]
 | 
			
		||||
 | 
			
		||||
  *) Abort handshake if server key exchange message is omitted for ephemeral
 | 
			
		||||
     ECDH ciphersuites.
 | 
			
		||||
 | 
			
		||||
     Thanks to Karthikeyan Bhargavan of the PROSECCO team at INRIA for
 | 
			
		||||
     reporting this issue.
 | 
			
		||||
     (CVE-2014-3572)
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Remove non-export ephemeral RSA code on client and server. This code
 | 
			
		||||
     violated the TLS standard by allowing the use of temporary RSA keys in
 | 
			
		||||
     non-export ciphersuites and could be used by a server to effectively
 | 
			
		||||
     downgrade the RSA key length used to a value smaller than the server
 | 
			
		||||
     certificate. Thanks for Karthikeyan Bhargavan of the PROSECCO team at
 | 
			
		||||
     INRIA or reporting this issue.
 | 
			
		||||
     (CVE-2015-0204)
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Fix various certificate fingerprint issues.
 | 
			
		||||
 | 
			
		||||
     By using non-DER or invalid encodings outside the signed portion of a
 | 
			
		||||
     certificate the fingerprint can be changed without breaking the signature.
 | 
			
		||||
     Although no details of the signed portion of the certificate can be changed
 | 
			
		||||
     this can cause problems with some applications: e.g. those using the
 | 
			
		||||
     certificate fingerprint for blacklists.
 | 
			
		||||
 | 
			
		||||
     1. Reject signatures with non zero unused bits.
 | 
			
		||||
 | 
			
		||||
     If the BIT STRING containing the signature has non zero unused bits reject
 | 
			
		||||
     the signature. All current signature algorithms require zero unused bits.
 | 
			
		||||
 | 
			
		||||
     2. Check certificate algorithm consistency.
 | 
			
		||||
 | 
			
		||||
     Check the AlgorithmIdentifier inside TBS matches the one in the
 | 
			
		||||
     certificate signature. NB: this will result in signature failure
 | 
			
		||||
     errors for some broken certificates.
 | 
			
		||||
 | 
			
		||||
     Thanks to Konrad Kraszewski from Google for reporting this issue.
 | 
			
		||||
 | 
			
		||||
     3. Check DSA/ECDSA signatures use DER.
 | 
			
		||||
 | 
			
		||||
     Reencode DSA/ECDSA signatures and compare with the original received
 | 
			
		||||
     signature. Return an error if there is a mismatch.
 | 
			
		||||
 | 
			
		||||
     This will reject various cases including garbage after signature
 | 
			
		||||
     (thanks to Antti Karjalainen and Tuomo Untinen from the Codenomicon CROSS
 | 
			
		||||
     program for discovering this case) and use of BER or invalid ASN.1 INTEGERs
 | 
			
		||||
     (negative or with leading zeroes).
 | 
			
		||||
 | 
			
		||||
     Further analysis was conducted and fixes were developed by Stephen Henson
 | 
			
		||||
     of the OpenSSL core team.
 | 
			
		||||
 | 
			
		||||
     (CVE-2014-8275)
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
   *) Correct Bignum squaring. Bignum squaring (BN_sqr) may produce incorrect
 | 
			
		||||
      results on some platforms, including x86_64. This bug occurs at random
 | 
			
		||||
      with a very low probability, and is not known to be exploitable in any
 | 
			
		||||
      way, though its exact impact is difficult to determine. Thanks to Pieter
 | 
			
		||||
      Wuille (Blockstream) who reported this issue and also suggested an initial
 | 
			
		||||
      fix. Further analysis was conducted by the OpenSSL development team and
 | 
			
		||||
      Adam Langley of Google. The final fix was developed by Andy Polyakov of
 | 
			
		||||
      the OpenSSL core team.
 | 
			
		||||
      (CVE-2014-3570)
 | 
			
		||||
      [Andy Polyakov]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8zb and 0.9.8zc [15 Oct 2014]
 | 
			
		||||
 | 
			
		||||
  *) Session Ticket Memory Leak.
 | 
			
		||||
 | 
			
		||||
     When an OpenSSL SSL/TLS/DTLS server receives a session ticket the
 | 
			
		||||
     integrity of that ticket is first verified. In the event of a session
 | 
			
		||||
     ticket integrity check failing, OpenSSL will fail to free memory
 | 
			
		||||
     causing a memory leak. By sending a large number of invalid session
 | 
			
		||||
     tickets an attacker could exploit this issue in a Denial Of Service
 | 
			
		||||
     attack.
 | 
			
		||||
     (CVE-2014-3567)
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Build option no-ssl3 is incomplete.
 | 
			
		||||
 | 
			
		||||
     When OpenSSL is configured with "no-ssl3" as a build option, servers
 | 
			
		||||
     could accept and complete a SSL 3.0 handshake, and clients could be
 | 
			
		||||
     configured to send them.
 | 
			
		||||
     (CVE-2014-3568)
 | 
			
		||||
     [Akamai and the OpenSSL team]
 | 
			
		||||
 | 
			
		||||
  *) Add support for TLS_FALLBACK_SCSV.
 | 
			
		||||
     Client applications doing fallback retries should call
 | 
			
		||||
     SSL_set_mode(s, SSL_MODE_SEND_FALLBACK_SCSV).
 | 
			
		||||
     (CVE-2014-3566)
 | 
			
		||||
     [Adam Langley, Bodo Moeller]
 | 
			
		||||
 | 
			
		||||
  *) Add additional DigestInfo checks.
 | 
			
		||||
 
 | 
			
		||||
     Reencode DigestInto in DER and check against the original when
 | 
			
		||||
     verifying RSA signature: this will reject any improperly encoded
 | 
			
		||||
     DigestInfo structures.
 | 
			
		||||
 | 
			
		||||
     Note: this is a precautionary measure and no attacks are currently known.
 | 
			
		||||
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8za and 0.9.8zb [6 Aug 2014]
 | 
			
		||||
 | 
			
		||||
  *) OpenSSL DTLS clients enabling anonymous (EC)DH ciphersuites are subject
 | 
			
		||||
     to a denial of service attack. A malicious server can crash the client
 | 
			
		||||
     with a null pointer dereference (read) by specifying an anonymous (EC)DH
 | 
			
		||||
     ciphersuite and sending carefully crafted handshake messages.
 | 
			
		||||
 | 
			
		||||
     Thanks to Felix Gr<47>bert (Google) for discovering and researching this
 | 
			
		||||
     issue.
 | 
			
		||||
     (CVE-2014-3510)
 | 
			
		||||
     [Emilia K<>sper]
 | 
			
		||||
 | 
			
		||||
  *) By sending carefully crafted DTLS packets an attacker could cause openssl
 | 
			
		||||
     to leak memory. This can be exploited through a Denial of Service attack.
 | 
			
		||||
     Thanks to Adam Langley for discovering and researching this issue.
 | 
			
		||||
     (CVE-2014-3507)
 | 
			
		||||
     [Adam Langley]
 | 
			
		||||
 | 
			
		||||
  *) An attacker can force openssl to consume large amounts of memory whilst
 | 
			
		||||
     processing DTLS handshake messages. This can be exploited through a
 | 
			
		||||
     Denial of Service attack.
 | 
			
		||||
     Thanks to Adam Langley for discovering and researching this issue.
 | 
			
		||||
     (CVE-2014-3506)
 | 
			
		||||
     [Adam Langley]
 | 
			
		||||
 | 
			
		||||
  *) An attacker can force an error condition which causes openssl to crash
 | 
			
		||||
     whilst processing DTLS packets due to memory being freed twice. This
 | 
			
		||||
     can be exploited through a Denial of Service attack.
 | 
			
		||||
     Thanks to Adam Langley and Wan-Teh Chang for discovering and researching
 | 
			
		||||
     this issue.
 | 
			
		||||
     (CVE-2014-3505)
 | 
			
		||||
     [Adam Langley]
 | 
			
		||||
 | 
			
		||||
  *) A flaw in OBJ_obj2txt may cause pretty printing functions such as
 | 
			
		||||
     X509_name_oneline, X509_name_print_ex et al. to leak some information
 | 
			
		||||
     from the stack. Applications may be affected if they echo pretty printing
 | 
			
		||||
     output to the attacker.
 | 
			
		||||
 | 
			
		||||
     Thanks to Ivan Fratric (Google) for discovering this issue.
 | 
			
		||||
     (CVE-2014-3508)
 | 
			
		||||
     [Emilia K<>sper, and Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Fix ec_GFp_simple_points_make_affine (thus, EC_POINTs_mul etc.)
 | 
			
		||||
     for corner cases. (Certain input points at infinity could lead to
 | 
			
		||||
     bogus results, with non-infinity inputs mapped to infinity too.)
 | 
			
		||||
     [Bodo Moeller]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8y and 0.9.8za [5 Jun 2014]
 | 
			
		||||
 | 
			
		||||
  *) Fix for SSL/TLS MITM flaw. An attacker using a carefully crafted
 | 
			
		||||
     handshake can force the use of weak keying material in OpenSSL
 | 
			
		||||
     SSL/TLS clients and servers.
 | 
			
		||||
 | 
			
		||||
     Thanks to KIKUCHI Masashi (Lepidum Co. Ltd.) for discovering and
 | 
			
		||||
     researching this issue. (CVE-2014-0224)
 | 
			
		||||
     [KIKUCHI Masashi, Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Fix DTLS recursion flaw. By sending an invalid DTLS handshake to an
 | 
			
		||||
     OpenSSL DTLS client the code can be made to recurse eventually crashing
 | 
			
		||||
     in a DoS attack.
 | 
			
		||||
 | 
			
		||||
     Thanks to Imre Rad (Search-Lab Ltd.) for discovering this issue.
 | 
			
		||||
     (CVE-2014-0221)
 | 
			
		||||
     [Imre Rad, Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Fix DTLS invalid fragment vulnerability. A buffer overrun attack can
 | 
			
		||||
     be triggered by sending invalid DTLS fragments to an OpenSSL DTLS
 | 
			
		||||
     client or server. This is potentially exploitable to run arbitrary
 | 
			
		||||
     code on a vulnerable client or server.
 | 
			
		||||
 | 
			
		||||
     Thanks to J<>ri Aedla for reporting this issue. (CVE-2014-0195)
 | 
			
		||||
     [J<>ri Aedla, Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Fix bug in TLS code where clients enable anonymous ECDH ciphersuites
 | 
			
		||||
     are subject to a denial of service attack.
 | 
			
		||||
 | 
			
		||||
     Thanks to Felix Gr<47>bert and Ivan Fratric at Google for discovering
 | 
			
		||||
     this issue. (CVE-2014-3470)
 | 
			
		||||
     [Felix Gr<47>bert, Ivan Fratric, Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Fix for the attack described in the paper "Recovering OpenSSL
 | 
			
		||||
     ECDSA Nonces Using the FLUSH+RELOAD Cache Side-channel Attack"
 | 
			
		||||
     by Yuval Yarom and Naomi Benger. Details can be obtained from:
 | 
			
		||||
     http://eprint.iacr.org/2014/140
 | 
			
		||||
 | 
			
		||||
     Thanks to Yuval Yarom and Naomi Benger for discovering this
 | 
			
		||||
     flaw and to Yuval Yarom for supplying a fix (CVE-2014-0076)
 | 
			
		||||
     [Yuval Yarom and Naomi Benger]
 | 
			
		||||
 | 
			
		||||
     Thanks to mancha for backporting the fix to the 0.9.8 branch.
 | 
			
		||||
 | 
			
		||||
  *) Fix handling of warning-level alerts in SSL23 client mode so they
 | 
			
		||||
     don't cause client-side termination (eg. on SNI unrecognized_name
 | 
			
		||||
     warnings). Add client and server support for six additional alerts
 | 
			
		||||
     per RFC 6066 and RFC 4279.
 | 
			
		||||
     [mancha]
 | 
			
		||||
 | 
			
		||||
  *) Add option SSL_OP_SAFARI_ECDHE_ECDSA_BUG (part of SSL_OP_ALL) which
 | 
			
		||||
     avoids preferring ECDHE-ECDSA ciphers when the client appears to be
 | 
			
		||||
     Safari on OS X.  Safari on OS X 10.8..10.8.3 advertises support for
 | 
			
		||||
     several ECDHE-ECDSA ciphers, but fails to negotiate them.  The bug
 | 
			
		||||
     is fixed in OS X 10.8.4, but Apple have ruled out both hot fixing
 | 
			
		||||
     10.8..10.8.3 and forcing users to upgrade to 10.8.4 or newer.
 | 
			
		||||
     [Rob Stradling, Adam Langley]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8x and 0.9.8y [5 Feb 2013]
 | 
			
		||||
 | 
			
		||||
  *) Make the decoding of SSLv3, TLS and DTLS CBC records constant time.
 | 
			
		||||
 | 
			
		||||
     This addresses the flaw in CBC record processing discovered by 
 | 
			
		||||
     Nadhem Alfardan and Kenny Paterson. Details of this attack can be found
 | 
			
		||||
     at: http://www.isg.rhul.ac.uk/tls/     
 | 
			
		||||
 | 
			
		||||
     Thanks go to Nadhem Alfardan and Kenny Paterson of the Information
 | 
			
		||||
     Security Group at Royal Holloway, University of London
 | 
			
		||||
     (www.isg.rhul.ac.uk) for discovering this flaw and Adam Langley and
 | 
			
		||||
     Emilia K<>sper for the initial patch.
 | 
			
		||||
     (CVE-2013-0169)
 | 
			
		||||
     [Emilia K<>sper, Adam Langley, Ben Laurie, Andy Polyakov, Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Return an error when checking OCSP signatures when key is NULL.
 | 
			
		||||
     This fixes a DoS attack. (CVE-2013-0166)
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Call OCSP Stapling callback after ciphersuite has been chosen, so
 | 
			
		||||
     the right response is stapled. Also change SSL_get_certificate()
 | 
			
		||||
     so it returns the certificate actually sent.
 | 
			
		||||
     See http://rt.openssl.org/Ticket/Display.html?id=2836.
 | 
			
		||||
     (This is a backport)
 | 
			
		||||
     [Rob Stradling <rob.stradling@comodo.com>]
 | 
			
		||||
 | 
			
		||||
  *) Fix possible deadlock when decoding public keys.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8w and 0.9.8x [10 May 2012]
 | 
			
		||||
 | 
			
		||||
  *) Sanity check record length before skipping explicit IV in DTLS
 | 
			
		||||
     to fix DoS attack.
 | 
			
		||||
 | 
			
		||||
     Thanks to Codenomicon for discovering this issue using Fuzz-o-Matic
 | 
			
		||||
     fuzzing as a service testing platform.
 | 
			
		||||
     (CVE-2012-2333)
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Initialise tkeylen properly when encrypting CMS messages.
 | 
			
		||||
     Thanks to Solar Designer of Openwall for reporting this issue.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8v and 0.9.8w [23 Apr 2012]
 | 
			
		||||
 | 
			
		||||
  *) The fix for CVE-2012-2110 did not take into account that the 
 | 
			
		||||
     'len' argument to BUF_MEM_grow and BUF_MEM_grow_clean is an
 | 
			
		||||
     int in OpenSSL 0.9.8, making it still vulnerable. Fix by 
 | 
			
		||||
     rejecting negative len parameter. (CVE-2012-2131)
 | 
			
		||||
     [Tomas Hoger <thoger@redhat.com>]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8u and 0.9.8v [19 Apr 2012]
 | 
			
		||||
 | 
			
		||||
  *) Check for potentially exploitable overflows in asn1_d2i_read_bio
 | 
			
		||||
     BUF_mem_grow and BUF_mem_grow_clean. Refuse attempts to shrink buffer
 | 
			
		||||
     in CRYPTO_realloc_clean.
 | 
			
		||||
 | 
			
		||||
     Thanks to Tavis Ormandy, Google Security Team, for discovering this
 | 
			
		||||
     issue and to Adam Langley <agl@chromium.org> for fixing it.
 | 
			
		||||
     (CVE-2012-2110)
 | 
			
		||||
     [Adam Langley (Google), Tavis Ormandy, Google Security Team]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8t and 0.9.8u [12 Mar 2012]
 | 
			
		||||
 | 
			
		||||
  *) Fix MMA (Bleichenbacher's attack on PKCS #1 v1.5 RSA padding) weakness
 | 
			
		||||
     in CMS and PKCS7 code. When RSA decryption fails use a random key for
 | 
			
		||||
     content decryption and always return the same error. Note: this attack
 | 
			
		||||
     needs on average 2^20 messages so it only affects automated senders. The
 | 
			
		||||
     old behaviour can be reenabled in the CMS code by setting the
 | 
			
		||||
     CMS_DEBUG_DECRYPT flag: this is useful for debugging and testing where
 | 
			
		||||
     an MMA defence is not necessary.
 | 
			
		||||
     Thanks to Ivan Nestlerode <inestlerode@us.ibm.com> for discovering
 | 
			
		||||
     this issue. (CVE-2012-0884)
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Fix CVE-2011-4619: make sure we really are receiving a 
 | 
			
		||||
     client hello before rejecting multiple SGC restarts. Thanks to
 | 
			
		||||
     Ivan Nestlerode <inestlerode@us.ibm.com> for discovering this bug.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8s and 0.9.8t [18 Jan 2012]
 | 
			
		||||
 | 
			
		||||
  *) Fix for DTLS DoS issue introduced by fix for CVE-2011-4109.
 | 
			
		||||
     Thanks to Antonio Martin, Enterprise Secure Access Research and
 | 
			
		||||
     Development, Cisco Systems, Inc. for discovering this bug and
 | 
			
		||||
     preparing a fix. (CVE-2012-0050)
 | 
			
		||||
     [Antonio Martin]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8r and 0.9.8s [4 Jan 2012]
 | 
			
		||||
 | 
			
		||||
  *) Nadhem Alfardan and Kenny Paterson have discovered an extension
 | 
			
		||||
     of the Vaudenay padding oracle attack on CBC mode encryption
 | 
			
		||||
     which enables an efficient plaintext recovery attack against
 | 
			
		||||
     the OpenSSL implementation of DTLS. Their attack exploits timing
 | 
			
		||||
     differences arising during decryption processing. A research
 | 
			
		||||
     paper describing this attack can be found at:
 | 
			
		||||
                  http://www.isg.rhul.ac.uk/~kp/dtls.pdf
 | 
			
		||||
     Thanks go to Nadhem Alfardan and Kenny Paterson of the Information
 | 
			
		||||
     Security Group at Royal Holloway, University of London
 | 
			
		||||
     (www.isg.rhul.ac.uk) for discovering this flaw and to Robin Seggelmann
 | 
			
		||||
     <seggelmann@fh-muenster.de> and Michael Tuexen <tuexen@fh-muenster.de>
 | 
			
		||||
     for preparing the fix. (CVE-2011-4108)
 | 
			
		||||
     [Robin Seggelmann, Michael Tuexen]
 | 
			
		||||
 | 
			
		||||
  *) Stop policy check failure freeing same buffer twice. (CVE-2011-4109)
 | 
			
		||||
     [Ben Laurie, Kasper <ekasper@google.com>]
 | 
			
		||||
 | 
			
		||||
  *) Clear bytes used for block padding of SSL 3.0 records.
 | 
			
		||||
     (CVE-2011-4576)
 | 
			
		||||
     [Adam Langley (Google)]
 | 
			
		||||
 | 
			
		||||
  *) Only allow one SGC handshake restart for SSL/TLS. Thanks to George
 | 
			
		||||
     Kadianakis <desnacked@gmail.com> for discovering this issue and
 | 
			
		||||
     Adam Langley for preparing the fix. (CVE-2011-4619)
 | 
			
		||||
     [Adam Langley (Google)]
 | 
			
		||||
 
 | 
			
		||||
  *) Prevent malformed RFC3779 data triggering an assertion failure.
 | 
			
		||||
     Thanks to Andrew Chi, BBN Technologies, for discovering the flaw
 | 
			
		||||
     and Rob Austein <sra@hactrn.net> for fixing it. (CVE-2011-4577)
 | 
			
		||||
     [Rob Austein <sra@hactrn.net>]
 | 
			
		||||
 | 
			
		||||
  *) Fix ssl_ciph.c set-up race.
 | 
			
		||||
     [Adam Langley (Google)]
 | 
			
		||||
 | 
			
		||||
  *) Fix spurious failures in ecdsatest.c.
 | 
			
		||||
     [Emilia K<>sper (Google)]
 | 
			
		||||
 | 
			
		||||
  *) Fix the BIO_f_buffer() implementation (which was mixing different
 | 
			
		||||
     interpretations of the '..._len' fields).
 | 
			
		||||
     [Adam Langley (Google)]
 | 
			
		||||
 | 
			
		||||
  *) Fix handling of BN_BLINDING: now BN_BLINDING_invert_ex (rather than
 | 
			
		||||
     BN_BLINDING_invert_ex) calls BN_BLINDING_update, ensuring that concurrent
 | 
			
		||||
     threads won't reuse the same blinding coefficients.
 | 
			
		||||
 | 
			
		||||
     This also avoids the need to obtain the CRYPTO_LOCK_RSA_BLINDING
 | 
			
		||||
     lock to call BN_BLINDING_invert_ex, and avoids one use of
 | 
			
		||||
     BN_BLINDING_update for each BN_BLINDING structure (previously,
 | 
			
		||||
     the last update always remained unused).
 | 
			
		||||
     [Emilia K<>sper (Google)]
 | 
			
		||||
 | 
			
		||||
  *) Fix SSL memory handling for (EC)DH ciphersuites, in particular
 | 
			
		||||
     for multi-threaded use of ECDH.
 | 
			
		||||
     [Adam Langley (Google)]
 | 
			
		||||
 | 
			
		||||
  *) Fix x509_name_ex_d2i memory leak on bad inputs.
 | 
			
		||||
     [Bodo Moeller]
 | 
			
		||||
 | 
			
		||||
  *) Add protection against ECDSA timing attacks as mentioned in the paper
 | 
			
		||||
     by Billy Bob Brumley and Nicola Tuveri, see:
 | 
			
		||||
 | 
			
		||||
	http://eprint.iacr.org/2011/232.pdf
 | 
			
		||||
 | 
			
		||||
     [Billy Bob Brumley and Nicola Tuveri]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8q and 0.9.8r [8 Feb 2011]
 | 
			
		||||
 | 
			
		||||
  *) Fix parsing of OCSP stapling ClientHello extension. CVE-2011-0014
 | 
			
		||||
     [Neel Mehta, Adam Langley, Bodo Moeller (Google)]
 | 
			
		||||
 | 
			
		||||
  *) Fix bug in string printing code: if *any* escaping is enabled we must
 | 
			
		||||
     escape the escape character (backslash) or the resulting string is
 | 
			
		||||
     ambiguous.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8p and 0.9.8q [2 Dec 2010]
 | 
			
		||||
 | 
			
		||||
  *) Disable code workaround for ancient and obsolete Netscape browsers
 | 
			
		||||
     and servers: an attacker can use it in a ciphersuite downgrade attack.
 | 
			
		||||
     Thanks to Martin Rex for discovering this bug. CVE-2010-4180
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Fixed J-PAKE implementation error, originally discovered by
 | 
			
		||||
     Sebastien Martini, further info and confirmation from Stefan
 | 
			
		||||
     Arentz and Feng Hao. Note that this fix is a security fix. CVE-2010-4252
 | 
			
		||||
     [Ben Laurie]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8o and 0.9.8p [16 Nov 2010]
 | 
			
		||||
 | 
			
		||||
  *) Fix extension code to avoid race conditions which can result in a buffer
 | 
			
		||||
     overrun vulnerability: resumed sessions must not be modified as they can
 | 
			
		||||
     be shared by multiple threads. CVE-2010-3864
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Fix for double free bug in ssl/s3_clnt.c CVE-2010-2939
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Don't reencode certificate when calculating signature: cache and use
 | 
			
		||||
     the original encoding instead. This makes signature verification of
 | 
			
		||||
     some broken encodings work correctly.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) ec2_GF2m_simple_mul bugfix: compute correct result if the output EC_POINT
 | 
			
		||||
     is also one of the inputs.
 | 
			
		||||
     [Emilia K<>sper <emilia.kasper@esat.kuleuven.be> (Google)]
 | 
			
		||||
 | 
			
		||||
  *) Don't repeatedly append PBE algorithms to table if they already exist.
 | 
			
		||||
     Sort table on each new add. This effectively makes the table read only
 | 
			
		||||
     after all algorithms are added and subsequent calls to PKCS12_pbe_add
 | 
			
		||||
     etc are non-op.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8n and 0.9.8o [01 Jun 2010]
 | 
			
		||||
 | 
			
		||||
  [NB: OpenSSL 0.9.8o and later 0.9.8 patch levels were released after
 | 
			
		||||
  OpenSSL 1.0.0.]
 | 
			
		||||
 | 
			
		||||
  *) Correct a typo in the CMS ASN1 module which can result in invalid memory
 | 
			
		||||
     access or freeing data twice (CVE-2010-0742)
 | 
			
		||||
     [Steve Henson, Ronald Moesbergen <intercommit@gmail.com>]
 | 
			
		||||
 | 
			
		||||
  *) Add SHA2 algorithms to SSL_library_init(). SHA2 is becoming far more
 | 
			
		||||
     common in certificates and some applications which only call
 | 
			
		||||
     SSL_library_init and not OpenSSL_add_all_algorithms() will fail.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) VMS fixes: 
 | 
			
		||||
     Reduce copying into .apps and .test in makevms.com
 | 
			
		||||
     Don't try to use blank CA certificate in CA.com
 | 
			
		||||
     Allow use of C files from original directories in maketests.com
 | 
			
		||||
     [Steven M. Schweda" <sms@antinode.info>]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8m and 0.9.8n [24 Mar 2010]
 | 
			
		||||
 | 
			
		||||
  *) When rejecting SSL/TLS records due to an incorrect version number, never
 | 
			
		||||
     update s->server with a new major version number.  As of
 | 
			
		||||
     - OpenSSL 0.9.8m if 'short' is a 16-bit type,
 | 
			
		||||
     - OpenSSL 0.9.8f if 'short' is longer than 16 bits,
 | 
			
		||||
     the previous behavior could result in a read attempt at NULL when
 | 
			
		||||
     receiving specific incorrect SSL/TLS records once record payload
 | 
			
		||||
     protection is active.  (CVE-2010-0740)
 | 
			
		||||
     [Bodo Moeller, Adam Langley <agl@chromium.org>]
 | 
			
		||||
 | 
			
		||||
  *) Fix for CVE-2010-0433 where some kerberos enabled versions of OpenSSL 
 | 
			
		||||
     could be crashed if the relevant tables were not present (e.g. chrooted).
 | 
			
		||||
     [Tomas Hoger <thoger@redhat.com>]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8l and 0.9.8m [25 Feb 2010]
 | 
			
		||||
 | 
			
		||||
  *) Always check bn_wexpend() return values for failure.  (CVE-2009-3245)
 | 
			
		||||
     [Martin Olsson, Neel Mehta]
 | 
			
		||||
 | 
			
		||||
  *) Fix X509_STORE locking: Every 'objs' access requires a lock (to
 | 
			
		||||
     accommodate for stack sorting, always a write lock!).
 | 
			
		||||
     [Bodo Moeller]
 | 
			
		||||
 | 
			
		||||
  *) On some versions of WIN32 Heap32Next is very slow. This can cause
 | 
			
		||||
     excessive delays in the RAND_poll(): over a minute. As a workaround
 | 
			
		||||
     include a time check in the inner Heap32Next loop too.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) The code that handled flushing of data in SSL/TLS originally used the
 | 
			
		||||
     BIO_CTRL_INFO ctrl to see if any data was pending first. This caused
 | 
			
		||||
     the problem outlined in PR#1949. The fix suggested there however can
 | 
			
		||||
     trigger problems with buggy BIO_CTRL_WPENDING (e.g. some versions
 | 
			
		||||
     of Apache). So instead simplify the code to flush unconditionally.
 | 
			
		||||
     This should be fine since flushing with no data to flush is a no op.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Handle TLS versions 2.0 and later properly and correctly use the
 | 
			
		||||
     highest version of TLS/SSL supported. Although TLS >= 2.0 is some way
 | 
			
		||||
     off ancient servers have a habit of sticking around for a while...
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Modify compression code so it frees up structures without using the
 | 
			
		||||
     ex_data callbacks. This works around a problem where some applications
 | 
			
		||||
     call CRYPTO_cleanup_all_ex_data() before application exit (e.g. when
 | 
			
		||||
     restarting) then use compression (e.g. SSL with compression) later.
 | 
			
		||||
     This results in significant per-connection memory leaks and
 | 
			
		||||
     has caused some security issues including CVE-2008-1678 and
 | 
			
		||||
     CVE-2009-4355.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Constify crypto/cast (i.e., <openssl/cast.h>): a CAST_KEY doesn't
 | 
			
		||||
     change when encrypting or decrypting.
 | 
			
		||||
     [Bodo Moeller]
 | 
			
		||||
 | 
			
		||||
  *) Add option SSL_OP_LEGACY_SERVER_CONNECT which will allow clients to
 | 
			
		||||
     connect and renegotiate with servers which do not support RI.
 | 
			
		||||
     Until RI is more widely deployed this option is enabled by default.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Add "missing" ssl ctrls to clear options and mode.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) If client attempts to renegotiate and doesn't support RI respond with
 | 
			
		||||
     a no_renegotiation alert as required by RFC5746.  Some renegotiating
 | 
			
		||||
     TLS clients will continue a connection gracefully when they receive
 | 
			
		||||
     the alert. Unfortunately OpenSSL mishandled this alert and would hang
 | 
			
		||||
     waiting for a server hello which it will never receive. Now we treat a
 | 
			
		||||
     received no_renegotiation alert as a fatal error. This is because
 | 
			
		||||
     applications requesting a renegotiation might well expect it to succeed
 | 
			
		||||
     and would have no code in place to handle the server denying it so the
 | 
			
		||||
     only safe thing to do is to terminate the connection.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Add ctrl macro SSL_get_secure_renegotiation_support() which returns 1 if
 | 
			
		||||
     peer supports secure renegotiation and 0 otherwise. Print out peer
 | 
			
		||||
     renegotiation support in s_client/s_server.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Replace the highly broken and deprecated SPKAC certification method with
 | 
			
		||||
     the updated NID creation version. This should correctly handle UTF8.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Implement RFC5746. Re-enable renegotiation but require the extension
 | 
			
		||||
     as needed. Unfortunately, SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
 | 
			
		||||
     turns out to be a bad idea. It has been replaced by
 | 
			
		||||
     SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION which can be set with
 | 
			
		||||
     SSL_CTX_set_options(). This is really not recommended unless you
 | 
			
		||||
     know what you are doing.
 | 
			
		||||
     [Eric Rescorla <ekr@networkresonance.com>, Ben Laurie, Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Fixes to stateless session resumption handling. Use initial_ctx when
 | 
			
		||||
     issuing and attempting to decrypt tickets in case it has changed during
 | 
			
		||||
     servername handling. Use a non-zero length session ID when attempting
 | 
			
		||||
     stateless session resumption: this makes it possible to determine if
 | 
			
		||||
     a resumption has occurred immediately after receiving server hello
 | 
			
		||||
     (several places in OpenSSL subtly assume this) instead of later in
 | 
			
		||||
     the handshake.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) The functions ENGINE_ctrl(), OPENSSL_isservice(),
 | 
			
		||||
     CMS_get1_RecipientRequest() and RAND_bytes() can return <=0 on error
 | 
			
		||||
     fixes for a few places where the return code is not checked
 | 
			
		||||
     correctly.
 | 
			
		||||
     [Julia Lawall <julia@diku.dk>]
 | 
			
		||||
 | 
			
		||||
  *) Add --strict-warnings option to Configure script to include devteam
 | 
			
		||||
     warnings in other configurations.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Add support for --libdir option and LIBDIR variable in makefiles. This
 | 
			
		||||
     makes it possible to install openssl libraries in locations which
 | 
			
		||||
     have names other than "lib", for example "/usr/lib64" which some
 | 
			
		||||
     systems need.
 | 
			
		||||
     [Steve Henson, based on patch from Jeremy Utley]
 | 
			
		||||
 | 
			
		||||
  *) Don't allow the use of leading 0x80 in OIDs. This is a violation of
 | 
			
		||||
     X690 8.9.12 and can produce some misleading textual output of OIDs.
 | 
			
		||||
     [Steve Henson, reported by Dan Kaminsky]
 | 
			
		||||
 | 
			
		||||
  *) Delete MD2 from algorithm tables. This follows the recommendation in
 | 
			
		||||
     several standards that it is not used in new applications due to
 | 
			
		||||
     several cryptographic weaknesses. For binary compatibility reasons
 | 
			
		||||
     the MD2 API is still compiled in by default.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Add compression id to {d2i,i2d}_SSL_SESSION so it is correctly saved
 | 
			
		||||
     and restored.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Rename uni2asc and asc2uni functions to OPENSSL_uni2asc and
 | 
			
		||||
     OPENSSL_asc2uni conditionally on Netware platforms to avoid a name
 | 
			
		||||
     clash.
 | 
			
		||||
     [Guenter <lists@gknw.net>]
 | 
			
		||||
 | 
			
		||||
  *) Fix the server certificate chain building code to use X509_verify_cert(),
 | 
			
		||||
     it used to have an ad-hoc builder which was unable to cope with anything
 | 
			
		||||
     other than a simple chain.
 | 
			
		||||
     [David Woodhouse <dwmw2@infradead.org>, Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Don't check self signed certificate signatures in X509_verify_cert()
 | 
			
		||||
     by default (a flag can override this): it just wastes time without
 | 
			
		||||
     adding any security. As a useful side effect self signed root CAs
 | 
			
		||||
     with non-FIPS digests are now usable in FIPS mode.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) In dtls1_process_out_of_seq_message() the check if the current message
 | 
			
		||||
     is already buffered was missing. For every new message was memory
 | 
			
		||||
     allocated, allowing an attacker to perform an denial of service attack
 | 
			
		||||
     with sending out of seq handshake messages until there is no memory
 | 
			
		||||
     left. Additionally every future messege was buffered, even if the
 | 
			
		||||
     sequence number made no sense and would be part of another handshake.
 | 
			
		||||
     So only messages with sequence numbers less than 10 in advance will be
 | 
			
		||||
     buffered.  (CVE-2009-1378)
 | 
			
		||||
     [Robin Seggelmann, discovered by Daniel Mentz] 	
 | 
			
		||||
 | 
			
		||||
  *) Records are buffered if they arrive with a future epoch to be
 | 
			
		||||
     processed after finishing the corresponding handshake. There is
 | 
			
		||||
     currently no limitation to this buffer allowing an attacker to perform
 | 
			
		||||
     a DOS attack with sending records with future epochs until there is no
 | 
			
		||||
     memory left. This patch adds the pqueue_size() function to detemine
 | 
			
		||||
     the size of a buffer and limits the record buffer to 100 entries.
 | 
			
		||||
     (CVE-2009-1377)
 | 
			
		||||
     [Robin Seggelmann, discovered by Daniel Mentz] 	
 | 
			
		||||
 | 
			
		||||
  *) Keep a copy of frag->msg_header.frag_len so it can be used after the
 | 
			
		||||
     parent structure is freed.  (CVE-2009-1379)
 | 
			
		||||
     [Daniel Mentz] 	
 | 
			
		||||
 | 
			
		||||
  *) Handle non-blocking I/O properly in SSL_shutdown() call.
 | 
			
		||||
     [Darryl Miles <darryl-mailinglists@netbauds.net>]
 | 
			
		||||
 | 
			
		||||
  *) Add 2.5.4.* OIDs
 | 
			
		||||
     [Ilya O. <vrghost@gmail.com>]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8k and 0.9.8l  [5 Nov 2009]
 | 
			
		||||
 | 
			
		||||
  *) Disable renegotiation completely - this fixes a severe security
 | 
			
		||||
     problem (CVE-2009-3555) at the cost of breaking all
 | 
			
		||||
     renegotiation. Renegotiation can be re-enabled by setting
 | 
			
		||||
     SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION in s3->flags at
 | 
			
		||||
     run-time. This is really not recommended unless you know what
 | 
			
		||||
     you're doing.
 | 
			
		||||
     [Ben Laurie]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8j and 0.9.8k  [25 Mar 2009]
 | 
			
		||||
 | 
			
		||||
  *) Don't set val to NULL when freeing up structures, it is freed up by
 | 
			
		||||
@@ -86,6 +716,10 @@
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8h and 0.9.8i  [15 Sep 2008]
 | 
			
		||||
 | 
			
		||||
  *) Fix NULL pointer dereference if a DTLS server received
 | 
			
		||||
     ChangeCipherSpec as first record (CVE-2009-1386).
 | 
			
		||||
     [PR #1679]
 | 
			
		||||
 | 
			
		||||
  *) Fix a state transitition in s3_srvr.c and d1_srvr.c
 | 
			
		||||
     (was using SSL3_ST_CW_CLNT_HELLO_B, should be ..._ST_SW_SRVR_...).
 | 
			
		||||
     [Nagendra Modadugu]
 | 
			
		||||
@@ -1489,19 +2123,6 @@
 | 
			
		||||
     differing sizes.
 | 
			
		||||
     [Richard Levitte]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.7m and 0.9.7n  [xx XXX xxxx]
 | 
			
		||||
 | 
			
		||||
  *) In the SSL/TLS server implementation, be strict about session ID
 | 
			
		||||
     context matching (which matters if an application uses a single
 | 
			
		||||
     external cache for different purposes).  Previously,
 | 
			
		||||
     out-of-context reuse was forbidden only if SSL_VERIFY_PEER was
 | 
			
		||||
     set.  This did ensure strict client verification, but meant that,
 | 
			
		||||
     with applications using a single external cache for quite
 | 
			
		||||
     different requirements, clients could circumvent ciphersuite
 | 
			
		||||
     restrictions for a given session ID context by starting a session
 | 
			
		||||
     in a different context.
 | 
			
		||||
     [Bodo Moeller]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.7l and 0.9.7m  [23 Feb 2007]
 | 
			
		||||
 | 
			
		||||
  *) Cleanse PEM buffers before freeing them since they may contain 
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										106
									
								
								Configure
									
									
									
									
									
								
							
							
						
						
									
										106
									
								
								Configure
									
									
									
									
									
								
							@@ -106,6 +106,8 @@ my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimenta
 | 
			
		||||
 | 
			
		||||
my $gcc_devteam_warn = "-Wall -pedantic -DPEDANTIC -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wshadow -Wformat -Werror -DCRYPTO_MDEBUG_ALL -DCRYPTO_MDEBUG_ABORT -DREF_CHECK -DOPENSSL_NO_DEPRECATED";
 | 
			
		||||
 | 
			
		||||
my $strict_warnings = 0;
 | 
			
		||||
 | 
			
		||||
my $x86_gcc_des="DES_PTR DES_RISC1 DES_UNROLL";
 | 
			
		||||
 | 
			
		||||
# MD2_CHAR slags pentium pros
 | 
			
		||||
@@ -159,25 +161,30 @@ my %table=(
 | 
			
		||||
"debug-ben",	"gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown):::::bn86-elf.o 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)::::",
 | 
			
		||||
"debug-ben-debug",	"gcc:$gcc_devteam_warn -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG  -DDEBUG_SAFESTACK -g3 -O2 -pipe::(unknown)::::::",
 | 
			
		||||
"debug-ben-debug",	"gcc:$gcc_devteam_warn -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG  -DDEBUG_SAFESTACK -ggdb3 -O2 -pipe::(unknown)::::::",
 | 
			
		||||
"debug-ben-debug-64",	"gcc:$gcc_devteam_warn -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-ben-debug-noopt",	"gcc:$gcc_devteam_warn -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG  -DDEBUG_SAFESTACK -ggdb3 -pipe::(unknown)::::::",
 | 
			
		||||
"debug-ben-strict",	"gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DCONST_STRICT -O2 -Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings -pipe::(unknown)::::::",
 | 
			
		||||
"debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
 | 
			
		||||
"debug-bodo",	"gcc:-DL_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBIO_PAIR_DEBUG -DPEDANTIC -g -march=i486 -pedantic -Wshadow -Wall -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
 | 
			
		||||
"debug-bodo",	"gcc:$gcc_devteam_warn -Wno-error=overlength-strings -DBN_DEBUG -DBN_DEBUG_RAND -DCONF_DEBUG -DBIO_PAIR_DEBUG -m64 -DL_ENDIAN -DTERMIO -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"debug-ulf", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DBN_DEBUG_RAND -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations:::CYGWIN32:::${no_asm}:win32:cygwin-shared:::.dll",
 | 
			
		||||
"debug-steve64", "gcc:$gcc_devteam_warn -m64 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-steve64", "gcc:$gcc_devteam_warn -m64 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-steve32", "gcc:$gcc_devteam_warn -m32 -DL_ENDIAN -DCONF_DEBUG -DDEBUG_SAFESTACK -g -pipe::-D_REENTRANT::-rdynamic -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-steve-opt", "gcc:$gcc_devteam_warn -m64 -O3 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-steve-opt", "gcc:$gcc_devteam_warn -m64 -O3 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-steve",	"gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DPEDANTIC -m32 -g -pedantic -Wno-long-long -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:BN_LLONG ${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:${no_asm}:dlfcn:linux-shared",
 | 
			
		||||
"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -ggdb -g3 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -ggdb -g3 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-geoff","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-pentium","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_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 -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 -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -march=i486 -Wall::-D_REENTRANT::-lefence -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-elf-noefence","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -march=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-generic32","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DTERMIO  -g -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-generic64","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DTERMIO -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-x86_64","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -m64 -DL_ENDIAN -DTERMIO -g -Wall -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"dist",		"cc:-O::(unknown)::::::",
 | 
			
		||||
 | 
			
		||||
# Basic configs that should work on any (32 and less bit) box
 | 
			
		||||
@@ -203,11 +210,11 @@ my %table=(
 | 
			
		||||
# actually recommend to consider using gcc shared build even with vendor
 | 
			
		||||
# compiler:-)
 | 
			
		||||
#						<appro@fy.chalmers.se>
 | 
			
		||||
"solaris64-x86_64-gcc","gcc:-m64 -O3 -Wall -DL_ENDIAN -DMD32_REG_T=int::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:solaris-shared:-fPIC:-m64 -shared -static-libgcc:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris64-x86_64-gcc","gcc:-m64 -O3 -Wall -DL_ENDIAN -DMD32_REG_T=int::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:solaris-shared:-fPIC:-m64 -shared -static-libgcc:.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:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris64-x86_64-cc","cc:-fast -xarch=amd64 -xstrconst -Xa -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:solaris-shared:-KPIC:-xarch=amd64 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris64-x86_64-cc","cc:-fast -xarch=amd64 -xstrconst -Xa -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:solaris-shared:-KPIC:-xarch=amd64 -G -dy -z text:.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:${no_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
@@ -337,7 +344,7 @@ my %table=(
 | 
			
		||||
"linux-ia64",	"gcc:-DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia64-ecc","ecc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia64-icc","icc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-x86_64",	"gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-x86_64",	"gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
#### SPARC Linux setups
 | 
			
		||||
# Ray Miller <ray.miller@computing-services.oxford.ac.uk> has patiently
 | 
			
		||||
# assisted with debugging of following two configs.
 | 
			
		||||
@@ -365,6 +372,9 @@ my %table=(
 | 
			
		||||
"linux-alpha-ccc","ccc:-fast -readonly_strings -DL_ENDIAN -DTERMIO::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${no_asm}",
 | 
			
		||||
"linux-alpha+bwx-ccc","ccc:-fast -readonly_strings -DL_ENDIAN -DTERMIO::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${no_asm}",
 | 
			
		||||
 | 
			
		||||
# Android: Linux but without -DTERMIO and pointers to headers and libs.
 | 
			
		||||
"android","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#### *BSD [do see comment about ${BSDthreads} above!]
 | 
			
		||||
"BSD-generic32","gcc:-DTERMIOS -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-x86",	"gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}:dlfcn:bsd-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
@@ -390,7 +400,8 @@ my %table=(
 | 
			
		||||
 | 
			
		||||
# QNX
 | 
			
		||||
"qnx4",	"cc:-DL_ENDIAN -DTERMIO::(unknown):::${x86_gcc_des} ${x86_gcc_opts}:",
 | 
			
		||||
"qnx6",	"cc:-DL_ENDIAN -DTERMIOS::(unknown)::-lsocket:${x86_gcc_des} ${x86_gcc_opts}:",
 | 
			
		||||
"QNX6",       "gcc:-DTERMIOS::::-lsocket::${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"QNX6-i386",  "gcc:-DL_ENDIAN -DTERMIOS -O2 -Wall::::-lsocket:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#### SCO/Caldera targets.
 | 
			
		||||
#
 | 
			
		||||
@@ -418,8 +429,8 @@ my %table=(
 | 
			
		||||
"aix64-gcc","gcc:-maix64 -O -DB_ENDIAN::-pthread:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR::aix_ppc64.o::::::::::dlfcn:aix-shared::-maix64 -shared -Wl,-G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X64",
 | 
			
		||||
# Below targets assume AIX 5. Idea is to effectively disregard $OBJECT_MODE
 | 
			
		||||
# at build time. $OBJECT_MODE is respected at ./config stage!
 | 
			
		||||
"aix-cc",   "cc:-q32 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded:AIX::BN_LLONG RC4_CHAR::aix_ppc32.o::::::::::dlfcn:aix-shared::-q32 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 32",
 | 
			
		||||
"aix64-cc", "cc:-q64 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR::aix_ppc64.o::::::::::dlfcn:aix-shared::-q64 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 64",
 | 
			
		||||
"aix-cc",   "cc:-q32 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded -D_THREAD_SAFE:AIX::BN_LLONG RC4_CHAR::aix_ppc32.o::::::::::dlfcn:aix-shared::-q32 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 32",
 | 
			
		||||
"aix64-cc", "cc:-q64 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded -D_THREAD_SAFE:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR::aix_ppc64.o::::::::::dlfcn:aix-shared::-q64 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 64",
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Cray T90 and similar (SDSC)
 | 
			
		||||
@@ -520,7 +531,7 @@ my %table=(
 | 
			
		||||
"darwin64-ppc-cc","cc:-arch ppc64 -O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::osx_ppc64.o::::::::::dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin-i386-cc","cc:-arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"debug-darwin-i386-cc","cc:-arch i386 -g3 -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin64-x86_64-cc","cc:-arch x86_64 -O3 -fomit-frame-pointer -DL_ENDIAN -DMD32_REG_T=int -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin64-x86_64-cc","cc:-arch x86_64 -O3 -fomit-frame-pointer -DL_ENDIAN -DMD32_REG_T=int -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"debug-darwin-ppc-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DB_ENDIAN -g -Wall -O::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::osx_ppc32.o::::::::::dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
 | 
			
		||||
##### A/UX
 | 
			
		||||
@@ -581,9 +592,11 @@ my $idx_ranlib = $idx++;
 | 
			
		||||
my $idx_arflags = $idx++;
 | 
			
		||||
 | 
			
		||||
my $prefix="";
 | 
			
		||||
my $libdir="";
 | 
			
		||||
my $openssldir="";
 | 
			
		||||
my $exe_ext="";
 | 
			
		||||
my $install_prefix="";
 | 
			
		||||
my $install_prefix= "$ENV{'INSTALL_PREFIX'}";
 | 
			
		||||
my $cross_compile_prefix="";
 | 
			
		||||
my $fipslibdir="/usr/local/ssl/fips-1.0/lib/";
 | 
			
		||||
my $nofipscanistercheck=0;
 | 
			
		||||
my $fipsdso=0;
 | 
			
		||||
@@ -747,6 +760,10 @@ PROCESS_ARGS:
 | 
			
		||||
			{
 | 
			
		||||
			exit(&test_sanity());
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^--strict-warnings/)
 | 
			
		||||
			{
 | 
			
		||||
			$strict_warnings = 1;
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^reconfigure/ || /^reconf/)
 | 
			
		||||
			{
 | 
			
		||||
			if (open(IN,"<$Makefile"))
 | 
			
		||||
@@ -816,6 +833,10 @@ PROCESS_ARGS:
 | 
			
		||||
				{
 | 
			
		||||
				$prefix=$1;
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^--libdir=(.*)$/)
 | 
			
		||||
				{
 | 
			
		||||
				$libdir=$1;
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^--openssldir=(.*)$/)
 | 
			
		||||
				{
 | 
			
		||||
				$openssldir=$1;
 | 
			
		||||
@@ -979,7 +1000,8 @@ my $shared_target = $fields[$idx_shared_target];
 | 
			
		||||
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 $ranlib = $ENV{'RANLIB'} || $fields[$idx_ranlib];
 | 
			
		||||
my $ar = $ENV{'AR'} || "ar";
 | 
			
		||||
my $arflags = $fields[$idx_arflags];
 | 
			
		||||
 | 
			
		||||
if ($fips)
 | 
			
		||||
@@ -1079,9 +1101,14 @@ if ($openssldir eq "" and $prefix eq "")
 | 
			
		||||
	}
 | 
			
		||||
$prefix=$openssldir if $prefix eq "";
 | 
			
		||||
 | 
			
		||||
$libdir="lib" if $libdir eq "";
 | 
			
		||||
 | 
			
		||||
$default_ranlib= &which("ranlib") or $default_ranlib="true";
 | 
			
		||||
$perl=$ENV{'PERL'} or $perl=&which("perl5") or $perl=&which("perl")
 | 
			
		||||
  or $perl="perl";
 | 
			
		||||
my $make = $ENV{'MAKE'} || "make";
 | 
			
		||||
 | 
			
		||||
$cross_compile_prefix=$ENV{'CROSS_COMPILE'} if $cross_compile_prefix eq "";
 | 
			
		||||
 | 
			
		||||
chop $openssldir if $openssldir =~ /\/$/;
 | 
			
		||||
chop $prefix if $prefix =~ /.\/$/;
 | 
			
		||||
@@ -1434,6 +1461,16 @@ if ($shlib_version_number =~ /(^[0-9]*)\.([0-9\.]*)/)
 | 
			
		||||
	$shlib_minor=$2;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if ($strict_warnings)
 | 
			
		||||
	{
 | 
			
		||||
	my $wopt;
 | 
			
		||||
	die "ERROR --strict-warnings requires gcc" unless ($cc =~ /gcc$/);
 | 
			
		||||
	foreach $wopt (split /\s+/, $gcc_devteam_warn)
 | 
			
		||||
		{
 | 
			
		||||
		$cflags .= " $wopt" unless ($cflags =~ /$wopt/)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
open(IN,'<Makefile.org') || die "unable to read Makefile.org:$!\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";
 | 
			
		||||
@@ -1463,11 +1500,22 @@ while (<IN>)
 | 
			
		||||
	s/^SHLIB_EXT=.*/SHLIB_EXT=$shared_extension/;
 | 
			
		||||
	s/^INSTALLTOP=.*$/INSTALLTOP=$prefix/;
 | 
			
		||||
	s/^OPENSSLDIR=.*$/OPENSSLDIR=$openssldir/;
 | 
			
		||||
	s/^LIBDIR=.*$/LIBDIR=$libdir/;
 | 
			
		||||
	s/^INSTALL_PREFIX=.*$/INSTALL_PREFIX=$install_prefix/;
 | 
			
		||||
	s/^PLATFORM=.*$/PLATFORM=$target/;
 | 
			
		||||
	s/^OPTIONS=.*$/OPTIONS=$options/;
 | 
			
		||||
	s/^CONFIGURE_ARGS=.*$/CONFIGURE_ARGS=$argvstring/;
 | 
			
		||||
	s/^CC=.*$/CC= $cc/;
 | 
			
		||||
	if ($cross_compile_prefix)
 | 
			
		||||
		{
 | 
			
		||||
		s/^CC=.*$/CROSS_COMPILE= $cross_compile_prefix\nCC= \$\(CROSS_COMPILE\)$cc/;
 | 
			
		||||
		s/^AR=\s*/AR= \$\(CROSS_COMPILE\)/;
 | 
			
		||||
		s/^RANLIB=\s*/RANLIB= \$\(CROSS_COMPILE\)/;
 | 
			
		||||
		}
 | 
			
		||||
	else	{
 | 
			
		||||
		s/^CC=.*$/CC= $cc/;
 | 
			
		||||
		s/^AR=\s*ar/AR= $ar/;
 | 
			
		||||
		s/^RANLIB=.*/RANLIB= $ranlib/;
 | 
			
		||||
		}
 | 
			
		||||
	s/^MAKEDEPPROG=.*$/MAKEDEPPROG= $cc/ if $cc eq "gcc";
 | 
			
		||||
	s/^CFLAG=.*$/CFLAG= $cflags/;
 | 
			
		||||
	s/^DEPFLAG=.*$/DEPFLAG=$depflags/;
 | 
			
		||||
@@ -1486,7 +1534,6 @@ while (<IN>)
 | 
			
		||||
	s/^SHA1_ASM_OBJ=.*$/SHA1_ASM_OBJ= $sha1_obj/;
 | 
			
		||||
	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"}/;
 | 
			
		||||
@@ -1643,9 +1690,20 @@ print OUT "#define OPENSSL_CPUID_OBJ\n\n" if ($cpuid_obj);
 | 
			
		||||
while (<IN>)
 | 
			
		||||
	{
 | 
			
		||||
	if	(/^#define\s+OPENSSLDIR/)
 | 
			
		||||
		{ print OUT "#define OPENSSLDIR \"$openssldir\"\n"; }
 | 
			
		||||
		{
 | 
			
		||||
		my $foo = $openssldir;
 | 
			
		||||
		$foo =~ s/\\/\\\\/g;
 | 
			
		||||
		print OUT "#define OPENSSLDIR \"$foo\"\n";
 | 
			
		||||
		}
 | 
			
		||||
	elsif	(/^#define\s+ENGINESDIR/)
 | 
			
		||||
		{ print OUT "#define ENGINESDIR \"$prefix/lib/engines\"\n"; }
 | 
			
		||||
		{
 | 
			
		||||
		# $foo is to become "$prefix/lib$multilib/engines";
 | 
			
		||||
		# as Makefile.org and engines/Makefile are adapted for
 | 
			
		||||
		# $multilib suffix.
 | 
			
		||||
		my $foo = "$prefix/lib/engines";
 | 
			
		||||
		$foo =~ s/\\/\\\\/g;
 | 
			
		||||
		print OUT "#define ENGINESDIR \"$foo\"\n";
 | 
			
		||||
		}
 | 
			
		||||
	elsif	(/^#((define)|(undef))\s+OPENSSL_EXPORT_VAR_AS_FUNCTION/)
 | 
			
		||||
		{ printf OUT "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION\n"
 | 
			
		||||
			if $export_var_as_fn;
 | 
			
		||||
@@ -1750,7 +1808,7 @@ if($IsMK1MF) {
 | 
			
		||||
EOF
 | 
			
		||||
	close(OUT);
 | 
			
		||||
} else {
 | 
			
		||||
	my $make_command = "make PERL=\'$perl\'";
 | 
			
		||||
	my $make_command = "$make PERL=\'$perl\'";
 | 
			
		||||
	my $make_targets = "";
 | 
			
		||||
	$make_targets .= " links" if $symlink;
 | 
			
		||||
	$make_targets .= " depend" if $depflags ne $default_depflags && $make_depend;
 | 
			
		||||
@@ -1758,11 +1816,11 @@ EOF
 | 
			
		||||
	(system $make_command.$make_targets) == 0 or exit $?
 | 
			
		||||
		if $make_targets ne "";
 | 
			
		||||
	if ( $perl =~ m@^/@) {
 | 
			
		||||
	    &dofile("tools/c_rehash",$perl,'^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";');
 | 
			
		||||
	    &dofile("tools/c_rehash",$perl,'^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";', '^my \$prefix;$', 'my $prefix = "' . $prefix . '";');
 | 
			
		||||
	    &dofile("apps/CA.pl",$perl,'^#!/', '#!%s');
 | 
			
		||||
	} else {
 | 
			
		||||
	    # No path for Perl known ...
 | 
			
		||||
	    &dofile("tools/c_rehash",'/usr/local/bin/perl','^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";');
 | 
			
		||||
	    &dofile("tools/c_rehash",'/usr/local/bin/perl','^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";',  '^my \$prefix;$', 'my $prefix = "' . $prefix . '";');
 | 
			
		||||
	    &dofile("apps/CA.pl",'/usr/local/bin/perl','^#!/', '#!%s');
 | 
			
		||||
	}
 | 
			
		||||
	if ($depflags ne $default_depflags && !$make_depend) {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										108
									
								
								FAQ
									
									
									
									
									
								
							
							
						
						
									
										108
									
								
								FAQ
									
									
									
									
									
								
							@@ -10,6 +10,7 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* Why aren't tools like 'autoconf' and 'libtool' used?
 | 
			
		||||
* What is an 'engine' version?
 | 
			
		||||
* How do I check the authenticity of the OpenSSL distribution?
 | 
			
		||||
* How does the versioning scheme work?
 | 
			
		||||
 | 
			
		||||
[LEGAL] Legal questions
 | 
			
		||||
 | 
			
		||||
@@ -52,6 +53,9 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* Why does the OpenSSL test suite fail in sha512t on x86 CPU?
 | 
			
		||||
* Why does compiler fail to compile sha512.c?
 | 
			
		||||
* Test suite still fails, what to do?
 | 
			
		||||
* I think I've found a bug, what should I do?
 | 
			
		||||
* I'm SURE I've found a bug, how do I report it?
 | 
			
		||||
* I've found a security issue, how do I report it?
 | 
			
		||||
 | 
			
		||||
[PROG] Questions about programming with OpenSSL
 | 
			
		||||
 | 
			
		||||
@@ -70,6 +74,7 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* I think I've detected a memory leak, is this a bug?
 | 
			
		||||
* Why does Valgrind complain about the use of uninitialized data?
 | 
			
		||||
* Why doesn't a memory BIO work when a file does?
 | 
			
		||||
* Where are the declarations and implementations of d2i_X509() etc?
 | 
			
		||||
 | 
			
		||||
===============================================================================
 | 
			
		||||
 | 
			
		||||
@@ -78,11 +83,11 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* Which is the current version of OpenSSL?
 | 
			
		||||
 | 
			
		||||
The current version is available from <URL: http://www.openssl.org>.
 | 
			
		||||
OpenSSL 0.9.8k was released on Mar 25th, 2009.
 | 
			
		||||
OpenSSL 1.0.1d was released on Feb 5th, 2013.
 | 
			
		||||
 | 
			
		||||
In addition to the current stable release, you can also access daily
 | 
			
		||||
snapshots of the OpenSSL development version at <URL:
 | 
			
		||||
ftp://ftp.openssl.org/snapshot/>, or get it by anonymous CVS access.
 | 
			
		||||
ftp://ftp.openssl.org/snapshot/>, or get it by anonymous Git access.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Where is the documentation?
 | 
			
		||||
@@ -94,19 +99,19 @@ explains how to install this library.
 | 
			
		||||
 | 
			
		||||
OpenSSL includes a command line utility that can be used to perform a
 | 
			
		||||
variety of cryptographic functions.  It is described in the openssl(1)
 | 
			
		||||
manpage.  Documentation for developers is currently being written.  A
 | 
			
		||||
few manual pages already are available; overviews over libcrypto and
 | 
			
		||||
manpage.  Documentation for developers is currently being written. Many
 | 
			
		||||
manual pages are available; overviews over libcrypto and
 | 
			
		||||
libssl are given in the crypto(3) and ssl(3) manpages.
 | 
			
		||||
 | 
			
		||||
The OpenSSL manpages are installed in /usr/local/ssl/man/ (or a
 | 
			
		||||
different directory if you specified one as described in INSTALL).
 | 
			
		||||
In addition, you can read the most current versions at
 | 
			
		||||
<URL: http://www.openssl.org/docs/>.
 | 
			
		||||
 | 
			
		||||
For information on parts of libcrypto that are not yet documented, you
 | 
			
		||||
might want to read Ariel Glenn's documentation on SSLeay 0.9, OpenSSL's
 | 
			
		||||
predecessor, at <URL: http://www.columbia.edu/~ariel/ssleay/>.  Much
 | 
			
		||||
of this still applies to OpenSSL.
 | 
			
		||||
<URL: http://www.openssl.org/docs/>. Note that the online documents refer
 | 
			
		||||
to the very latest development versions of OpenSSL and may include features
 | 
			
		||||
not present in released versions. If in doubt refer to the documentation
 | 
			
		||||
that came with the version of OpenSSL you are using. The pod format
 | 
			
		||||
documentation is included in each OpenSSL distribution under the docs
 | 
			
		||||
directory.
 | 
			
		||||
 | 
			
		||||
There is some documentation about certificate extensions and PKCS#12
 | 
			
		||||
in doc/openssl.txt
 | 
			
		||||
@@ -127,7 +132,7 @@ OpenSSL.  Information on the OpenSSL mailing lists is available from
 | 
			
		||||
* Where can I get a compiled version of OpenSSL?
 | 
			
		||||
 | 
			
		||||
You can finder pointers to binary distributions in
 | 
			
		||||
http://www.openssl.org/related/binaries.html .
 | 
			
		||||
<URL: http://www.openssl.org/related/binaries.html> .
 | 
			
		||||
 | 
			
		||||
Some applications that use OpenSSL are distributed in binary form.
 | 
			
		||||
When using such an application, you don't need to install OpenSSL
 | 
			
		||||
@@ -166,6 +171,19 @@ just do:
 | 
			
		||||
 | 
			
		||||
   pgp TARBALL.asc
 | 
			
		||||
 | 
			
		||||
* How does the versioning scheme work?
 | 
			
		||||
 | 
			
		||||
After the release of OpenSSL 1.0.0 the versioning scheme changed. Letter 
 | 
			
		||||
releases (e.g. 1.0.1a) can only contain bug and security fixes and no
 | 
			
		||||
new features. Minor releases change the last number (e.g. 1.0.2) and 
 | 
			
		||||
can contain new features that retain binary compatibility. Changes to
 | 
			
		||||
the middle number are considered major releases and neither source nor
 | 
			
		||||
binary compatibility is guaranteed.
 | 
			
		||||
 | 
			
		||||
Therefore the answer to the common question "when will feature X be
 | 
			
		||||
backported to OpenSSL 1.0.0/0.9.8?" is "never" but it could appear
 | 
			
		||||
in the next minor release.
 | 
			
		||||
 | 
			
		||||
[LEGAL] =======================================================================
 | 
			
		||||
 | 
			
		||||
* Do I need patent licenses to use OpenSSL?
 | 
			
		||||
@@ -277,7 +295,7 @@ current directory in this case, but this has changed with 0.9.6a.)
 | 
			
		||||
Check out the CA.pl(1) manual page. This provides a simple wrapper round
 | 
			
		||||
the 'req', 'verify', 'ca' and 'pkcs12' utilities. For finer control check
 | 
			
		||||
out the manual pages for the individual utilities and the certificate
 | 
			
		||||
extensions documentation (currently in doc/openssl.txt).
 | 
			
		||||
extensions documentation (in ca(1), req(1), x509v3_config(5) )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why can't I create certificate requests?
 | 
			
		||||
@@ -459,7 +477,7 @@ administrators.
 | 
			
		||||
Other projects do have other policies so you can for example extract the CA
 | 
			
		||||
bundle used by Mozilla and/or modssl as described in this article:
 | 
			
		||||
 | 
			
		||||
  http://www.mail-archive.com/modssl-users@modssl.org/msg16980.html
 | 
			
		||||
  <URL: http://www.mail-archive.com/modssl-users@modssl.org/msg16980.html>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[BUILD] =======================================================================
 | 
			
		||||
@@ -501,7 +519,7 @@ when you run the test suite (using "make test").  The message returned is
 | 
			
		||||
"bc: 1 not implemented".
 | 
			
		||||
 | 
			
		||||
The best way to deal with this is to find another implementation of bc
 | 
			
		||||
and compile/install it.  GNU bc (see http://www.gnu.org/software/software.html
 | 
			
		||||
and compile/install it.  GNU bc (see <URL: http://www.gnu.org/software/software.html>
 | 
			
		||||
for download instructions) can be safely used, for example.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -512,7 +530,7 @@ that the OpenSSL bntest throws at it.  This gets triggered when you run the
 | 
			
		||||
test suite (using "make test").  The message returned is "bc: stack empty".
 | 
			
		||||
 | 
			
		||||
The best way to deal with this is to find another implementation of bc
 | 
			
		||||
and compile/install it.  GNU bc (see http://www.gnu.org/software/software.html
 | 
			
		||||
and compile/install it.  GNU bc (see <URL: http://www.gnu.org/software/software.html>
 | 
			
		||||
for download instructions) can be safely used, for example.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -705,6 +723,49 @@ never make sense, and tend to emerge when you least expect them. In order
 | 
			
		||||
to identify one, drop optimization level, e.g. by editing CFLAG line in
 | 
			
		||||
top-level Makefile, recompile and re-run the test.
 | 
			
		||||
 | 
			
		||||
* I think I've found a bug, what should I do?
 | 
			
		||||
 | 
			
		||||
If you are a new user then it is quite likely you haven't found a bug and
 | 
			
		||||
something is happening you aren't familiar with. Check this FAQ, the associated
 | 
			
		||||
documentation and the mailing lists for similar queries. If you are still
 | 
			
		||||
unsure whether it is a bug or not submit a query to the openssl-users mailing
 | 
			
		||||
list.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* I'm SURE I've found a bug, how do I report it?
 | 
			
		||||
 | 
			
		||||
Bug reports with no security implications should be sent to the request
 | 
			
		||||
tracker. This can be done by mailing the report to <rt@openssl.org> (or its
 | 
			
		||||
alias <openssl-bugs@openssl.org>), please note that messages sent to the
 | 
			
		||||
request tracker also appear in the public openssl-dev mailing list.
 | 
			
		||||
 | 
			
		||||
The report should be in plain text. Any patches should be sent as
 | 
			
		||||
plain text attachments because some mailers corrupt patches sent inline.
 | 
			
		||||
If your issue affects multiple versions of OpenSSL check any patches apply
 | 
			
		||||
cleanly and, if possible include patches to each affected version.
 | 
			
		||||
 | 
			
		||||
The report should be given a meaningful subject line briefly summarising the
 | 
			
		||||
issue. Just "bug in OpenSSL" or "bug in OpenSSL 0.9.8n" is not very helpful.
 | 
			
		||||
 | 
			
		||||
By sending reports to the request tracker the bug can then be given a priority
 | 
			
		||||
and assigned to the appropriate maintainer. The history of discussions can be
 | 
			
		||||
accessed and if the issue has been addressed or a reason why not. If patches
 | 
			
		||||
are only sent to openssl-dev they can be mislaid if a team member has to
 | 
			
		||||
wade through months of old messages to review the discussion.
 | 
			
		||||
 | 
			
		||||
See also <URL: http://www.openssl.org/support/rt.html>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* I've found a security issue, how do I report it?
 | 
			
		||||
 | 
			
		||||
If you think your bug has security implications then please send it to
 | 
			
		||||
openssl-security@openssl.org if you don't get a prompt reply at least 
 | 
			
		||||
acknowledging receipt then resend or mail it directly to one of the
 | 
			
		||||
more active team members (e.g. Steve).
 | 
			
		||||
 | 
			
		||||
Note that bugs only present in the openssl utility are not in general
 | 
			
		||||
considered to be security issues. 
 | 
			
		||||
 | 
			
		||||
[PROG] ========================================================================
 | 
			
		||||
 | 
			
		||||
* Is OpenSSL thread-safe?
 | 
			
		||||
@@ -717,8 +778,10 @@ file.
 | 
			
		||||
 | 
			
		||||
Multi-threaded applications must provide two callback functions to
 | 
			
		||||
OpenSSL by calling CRYPTO_set_locking_callback() and
 | 
			
		||||
CRYPTO_set_id_callback().  This is described in the threads(3)
 | 
			
		||||
manpage.
 | 
			
		||||
CRYPTO_set_id_callback(), for all versions of OpenSSL up to and
 | 
			
		||||
including 0.9.8[abc...]. As of version 1.0.0, CRYPTO_set_id_callback()
 | 
			
		||||
and associated APIs are deprecated by CRYPTO_THREADID_set_callback()
 | 
			
		||||
and friends. This is described in the threads(3) manpage.
 | 
			
		||||
 | 
			
		||||
* I've compiled a program under Windows and it crashes: why?
 | 
			
		||||
 | 
			
		||||
@@ -962,4 +1025,15 @@ is needed. This must be done by calling:
 | 
			
		||||
See the manual pages for more details.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Where are the declarations and implementations of d2i_X509() etc?
 | 
			
		||||
 | 
			
		||||
These are defined and implemented by macros of the form:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 DECLARE_ASN1_FUNCTIONS(X509) and IMPLEMENT_ASN1_FUNCTIONS(X509)
 | 
			
		||||
 | 
			
		||||
The implementation passes an ASN1 "template" defining the structure into an
 | 
			
		||||
ASN1 interpreter using generalised functions such as ASN1_item_d2i().
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
===============================================================================
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
  * Borland C
 | 
			
		||||
  * GNU C (Cygwin or MinGW)
 | 
			
		||||
 | 
			
		||||
 If you are compiling from a tarball or a CVS snapshot then the Win32 files
 | 
			
		||||
 If you are compiling from a tarball or a Git snapshot then the Win32 files
 | 
			
		||||
 may well be not up to date. This may mean that some "tweaking" is required to
 | 
			
		||||
 get it all to work. See the trouble shooting section later on for if (when?)
 | 
			
		||||
 it goes wrong.
 | 
			
		||||
@@ -264,7 +264,7 @@ To install OpenSSL to the specified location do:
 | 
			
		||||
 | 
			
		||||
 then ms\do_XXX should not give a warning any more. However the numbers that
 | 
			
		||||
 get assigned by this technique may not match those that eventually get
 | 
			
		||||
 assigned in the CVS tree: so anything linked against this version of the
 | 
			
		||||
 assigned in the Git tree: so anything linked against this version of the
 | 
			
		||||
 library may need to be recompiled.
 | 
			
		||||
 | 
			
		||||
 If you get errors about unresolved symbols there are several possible
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							@@ -12,7 +12,7 @@
 | 
			
		||||
  ---------------
 | 
			
		||||
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1998-2008 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										84
									
								
								Makefile.org
									
									
									
									
									
								
							
							
						
						
									
										84
									
								
								Makefile.org
									
									
									
									
									
								
							@@ -69,8 +69,9 @@ ARD=ar $(ARFLAGS) d
 | 
			
		||||
RANLIB= ranlib
 | 
			
		||||
PERL= perl
 | 
			
		||||
TAR= tar
 | 
			
		||||
TARFLAGS= --no-recursion
 | 
			
		||||
TARFLAGS= --no-recursion --record-size=10240
 | 
			
		||||
MAKEDEPPROG=makedepend
 | 
			
		||||
LIBDIR=lib
 | 
			
		||||
 | 
			
		||||
# We let the C compiler driver to take care of .s files. This is done in
 | 
			
		||||
# order to be excused from maintaining a separate set of architecture
 | 
			
		||||
@@ -112,7 +113,7 @@ LIBZLIB=
 | 
			
		||||
# $(INSTALLTOP) for this build make be different so hard
 | 
			
		||||
# code the path.
 | 
			
		||||
 | 
			
		||||
FIPSLIBDIR=/usr/local/ssl/lib/
 | 
			
		||||
FIPSLIBDIR=/usr/local/ssl/$(LIBDIR)/
 | 
			
		||||
 | 
			
		||||
# This is set to "y" if fipscanister.o is compiled internally as
 | 
			
		||||
# opposed to coming from an external validated location.
 | 
			
		||||
@@ -200,9 +201,10 @@ BUILDENV=	PLATFORM='${PLATFORM}' PROCESSOR='${PROCESSOR}' \
 | 
			
		||||
		CC='${CC}' CFLAG='${CFLAG}' 			\
 | 
			
		||||
		AS='${CC}' ASFLAG='${CFLAG} -c'			\
 | 
			
		||||
		AR='${AR}' PERL='${PERL}' RANLIB='${RANLIB}'	\
 | 
			
		||||
		SDIRS='${SDIRS}' LIBRPATH='${INSTALLTOP}/lib'	\
 | 
			
		||||
		SDIRS='${SDIRS}' LIBRPATH='${INSTALLTOP}/$(LIBDIR)'	\
 | 
			
		||||
		INSTALL_PREFIX='${INSTALL_PREFIX}'		\
 | 
			
		||||
		INSTALLTOP='${INSTALLTOP}' OPENSSLDIR='${OPENSSLDIR}'	\
 | 
			
		||||
		LIBDIR='${LIBDIR}' \
 | 
			
		||||
		MAKEDEPEND='$$$${TOP}/util/domd $$$${TOP} -MD ${MAKEDEPPROG}' \
 | 
			
		||||
		DEPFLAG='-DOPENSSL_NO_DEPRECATED ${DEPFLAG}'	\
 | 
			
		||||
		MAKEDEPPROG='${MAKEDEPPROG}'			\
 | 
			
		||||
@@ -333,15 +335,15 @@ build_crypto:
 | 
			
		||||
		dir=crypto; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_fips:
 | 
			
		||||
	@dir=fips; target=all; [ -z "$(FIPSCANLIB)" ] || $(BUILD_ONE_CMD)
 | 
			
		||||
build_ssl:
 | 
			
		||||
build_ssl: build_crypto
 | 
			
		||||
	@dir=ssl; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_engines:
 | 
			
		||||
build_engines: build_crypto
 | 
			
		||||
	@dir=engines; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_apps:
 | 
			
		||||
build_apps: build_libs
 | 
			
		||||
	@dir=apps; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_tests:
 | 
			
		||||
build_tests: build_libs
 | 
			
		||||
	@dir=test; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_tools:
 | 
			
		||||
build_tools: build_libs
 | 
			
		||||
	@dir=tools; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
all_testapps: build_libs build_testapps
 | 
			
		||||
@@ -357,7 +359,7 @@ libcrypto$(SHLIB_EXT): libcrypto.a $(SHARED_FIPS)
 | 
			
		||||
			$(AR) libcrypto.a fips/fipscanister.o ; \
 | 
			
		||||
		else \
 | 
			
		||||
			if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
 | 
			
		||||
				FIPSLD_CC=$(CC); CC=fips/fipsld; \
 | 
			
		||||
				FIPSLD_CC="$(CC)"; CC=fips/fipsld; \
 | 
			
		||||
				export CC FIPSLD_CC; \
 | 
			
		||||
			fi; \
 | 
			
		||||
			$(MAKE) -e SHLIBDIRS='crypto' build-shared; \
 | 
			
		||||
@@ -380,7 +382,7 @@ libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a
 | 
			
		||||
fips/fipscanister.o:	build_fips
 | 
			
		||||
libfips$(SHLIB_EXT):		fips/fipscanister.o
 | 
			
		||||
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
			
		||||
		FIPSLD_CC=$(CC); CC=fips/fipsld; export CC FIPSLD_CC; \
 | 
			
		||||
		FIPSLD_CC="$(CC)"; CC=fips/fipsld; export CC FIPSLD_CC; \
 | 
			
		||||
		$(MAKE) -f Makefile.shared -e $(BUILDENV) \
 | 
			
		||||
			CC=$${CC} LIBNAME=fips THIS=$@ \
 | 
			
		||||
			LIBEXTRAS=fips/fipscanister.o \
 | 
			
		||||
@@ -436,7 +438,7 @@ do_$(SHLIB_TARGET):
 | 
			
		||||
libcrypto.pc: Makefile
 | 
			
		||||
	@ ( echo 'prefix=$(INSTALLTOP)'; \
 | 
			
		||||
	    echo 'exec_prefix=$${prefix}'; \
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/lib'; \
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
 | 
			
		||||
	    echo 'includedir=$${prefix}/include'; \
 | 
			
		||||
	    echo ''; \
 | 
			
		||||
	    echo 'Name: OpenSSL-libcrypto'; \
 | 
			
		||||
@@ -449,7 +451,7 @@ libcrypto.pc: Makefile
 | 
			
		||||
libssl.pc: Makefile
 | 
			
		||||
	@ ( echo 'prefix=$(INSTALLTOP)'; \
 | 
			
		||||
	    echo 'exec_prefix=$${prefix}'; \
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/lib'; \
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
 | 
			
		||||
	    echo 'includedir=$${prefix}/include'; \
 | 
			
		||||
	    echo ''; \
 | 
			
		||||
	    echo 'Name: OpenSSL'; \
 | 
			
		||||
@@ -462,7 +464,7 @@ libssl.pc: Makefile
 | 
			
		||||
openssl.pc: Makefile
 | 
			
		||||
	@ ( echo 'prefix=$(INSTALLTOP)'; \
 | 
			
		||||
	    echo 'exec_prefix=$${prefix}'; \
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/lib'; \
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
 | 
			
		||||
	    echo 'includedir=$${prefix}/include'; \
 | 
			
		||||
	    echo ''; \
 | 
			
		||||
	    echo 'Name: OpenSSL'; \
 | 
			
		||||
@@ -517,12 +519,14 @@ dclean:
 | 
			
		||||
	@set -e; target=dclean; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
rehash: rehash.time
 | 
			
		||||
rehash.time: certs
 | 
			
		||||
	@(OPENSSL="`pwd`/util/opensslwrap.sh"; \
 | 
			
		||||
	  OPENSSL_DEBUG_MEMORY=on; \
 | 
			
		||||
	  export OPENSSL OPENSSL_DEBUG_MEMORY; \
 | 
			
		||||
	  $(PERL) tools/c_rehash certs)
 | 
			
		||||
	touch rehash.time
 | 
			
		||||
rehash.time: certs apps
 | 
			
		||||
	@if [ -z "$(CROSS_COMPILE)" ]; then \
 | 
			
		||||
		(OPENSSL="`pwd`/util/opensslwrap.sh"; \
 | 
			
		||||
		OPENSSL_DEBUG_MEMORY=on; \
 | 
			
		||||
		export OPENSSL OPENSSL_DEBUG_MEMORY; \
 | 
			
		||||
		$(PERL) tools/c_rehash certs) && \
 | 
			
		||||
		touch rehash.time; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
test:   tests
 | 
			
		||||
 | 
			
		||||
@@ -615,9 +619,9 @@ install: all install_docs install_sw
 | 
			
		||||
 | 
			
		||||
install_sw:
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/lib \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/lib/engines \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
 | 
			
		||||
@@ -632,10 +636,10 @@ install_sw:
 | 
			
		||||
	do \
 | 
			
		||||
		if [ -f "$$i" ]; then \
 | 
			
		||||
		(       echo installing $$i; \
 | 
			
		||||
			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 ); \
 | 
			
		||||
			cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
			$(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
			chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
			mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i ); \
 | 
			
		||||
		fi; \
 | 
			
		||||
	done;
 | 
			
		||||
	@set -e; if [ -n "$(SHARED_LIBS)" ]; then \
 | 
			
		||||
@@ -645,22 +649,22 @@ install_sw:
 | 
			
		||||
			if [ -f "$$i" -o -f "$$i.a" ]; then \
 | 
			
		||||
			(       echo installing $$i; \
 | 
			
		||||
				if [ "$(PLATFORM)" != "Cygwin" ]; then \
 | 
			
		||||
					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; \
 | 
			
		||||
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
				else \
 | 
			
		||||
					c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \
 | 
			
		||||
					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 $(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; \
 | 
			
		||||
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
				fi ); \
 | 
			
		||||
			fi; \
 | 
			
		||||
		done; \
 | 
			
		||||
		(	here="`pwd`"; \
 | 
			
		||||
			cd $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
 | 
			
		||||
			cd $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR); \
 | 
			
		||||
			$(MAKE) -f $$here/Makefile HERE="$$here" link-shared ); \
 | 
			
		||||
		if [ "$(INSTALLTOP)" != "/usr" ]; then \
 | 
			
		||||
			echo 'OpenSSL shared libraries have been installed in:'; \
 | 
			
		||||
@@ -669,12 +673,12 @@ install_sw:
 | 
			
		||||
			sed -e '1,/^$$/d' doc/openssl-shared.txt; \
 | 
			
		||||
		fi; \
 | 
			
		||||
	fi
 | 
			
		||||
	cp libcrypto.pc $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig/libcrypto.pc
 | 
			
		||||
	cp libssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig/libssl.pc
 | 
			
		||||
	cp openssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig/openssl.pc
 | 
			
		||||
	cp libcrypto.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libcrypto.pc
 | 
			
		||||
	cp libssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libssl.pc
 | 
			
		||||
	cp openssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc
 | 
			
		||||
 | 
			
		||||
install_docs:
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl \
 | 
			
		||||
@@ -682,7 +686,7 @@ install_docs:
 | 
			
		||||
		$(INSTALL_PREFIX)$(MANDIR)/man3 \
 | 
			
		||||
		$(INSTALL_PREFIX)$(MANDIR)/man5 \
 | 
			
		||||
		$(INSTALL_PREFIX)$(MANDIR)/man7
 | 
			
		||||
	@pod2man="`cd util; ./pod2mantest $(PERL)`"; \
 | 
			
		||||
	@pod2man="`cd ./util; ./pod2mantest $(PERL)`"; \
 | 
			
		||||
	here="`pwd`"; \
 | 
			
		||||
	filecase=; \
 | 
			
		||||
	if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" -o "$(PLATFORM)" = "mingw" ]; then \
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										208
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										208
									
								
								NEWS
									
									
									
									
									
								
							@@ -5,29 +5,148 @@
 | 
			
		||||
  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.8j and OpenSSL 0.9.8k:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8zc and OpenSSL 0.9.8zd [8 Jan 2015]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-3571
 | 
			
		||||
      o Fix for CVE-2014-3569
 | 
			
		||||
      o Fix for CVE-2014-3572
 | 
			
		||||
      o Fix for CVE-2015-0204
 | 
			
		||||
      o Fix for CVE-2014-8275
 | 
			
		||||
      o Fix for CVE-2014-3570
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8zb and OpenSSL 0.9.8zc [15 Oct 2014]:
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-3513
 | 
			
		||||
      o Fix for CVE-2014-3567
 | 
			
		||||
      o Mitigation for CVE-2014-3566 (SSL protocol vulnerability)
 | 
			
		||||
      o Fix for CVE-2014-3568
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8za and OpenSSL 0.9.8zb [6 Aug 2014]:
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-3510
 | 
			
		||||
      o Fix for CVE-2014-3507
 | 
			
		||||
      o Fix for CVE-2014-3506
 | 
			
		||||
      o Fix for CVE-2014-3505
 | 
			
		||||
      o Fix for CVE-2014-3508
 | 
			
		||||
 | 
			
		||||
  Known issues in OpenSSL 0.9.8za:
 | 
			
		||||
 | 
			
		||||
      o Compilation failure of s3_pkt.c on some platforms due to missing
 | 
			
		||||
        <limits.h> include. Fixed in 0.9.8zb-dev.
 | 
			
		||||
      o FIPS capable link failure with missing symbol BN_consttime_swap.
 | 
			
		||||
        Fixed in 0.9.8zb-dev. Workaround is to compile with no-ec: the EC
 | 
			
		||||
        algorithms are not FIPS approved in OpenSSL 0.9.8 anyway.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8y and OpenSSL 0.9.8za [5 Jun 2014]:
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-0224
 | 
			
		||||
      o Fix for CVE-2014-0221
 | 
			
		||||
      o Fix for CVE-2014-0195
 | 
			
		||||
      o Fix for CVE-2014-3470
 | 
			
		||||
      o Fix for CVE-2014-0076
 | 
			
		||||
      o Fix for CVE-2010-5298
 | 
			
		||||
      o Fix to TLS alert handling.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8x and OpenSSL 0.9.8y [5 Feb 2013]:
 | 
			
		||||
 | 
			
		||||
      o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
 | 
			
		||||
      o Fix OCSP bad key DoS attack CVE-2013-0166
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8w and OpenSSL 0.9.8x [10 May 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix DTLS record length checking bug CVE-2012-2333
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8v and OpenSSL 0.9.8w [23 Apr 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2012-2131 (corrected fix for 0.9.8 and CVE-2012-2110)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8u and OpenSSL 0.9.8v [19 Apr 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for ASN1 overflow bug CVE-2012-2110
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8t and OpenSSL 0.9.8u [12 Mar 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for CMS/PKCS#7 MMA CVE-2012-0884
 | 
			
		||||
      o Corrected fix for CVE-2011-4619
 | 
			
		||||
      o Various DTLS fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8s and OpenSSL 0.9.8t [18 Jan 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for DTLS DoS issue CVE-2012-0050
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8r and OpenSSL 0.9.8s [4 Jan 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for DTLS plaintext recovery attack CVE-2011-4108
 | 
			
		||||
      o Fix policy check double free error CVE-2011-4109
 | 
			
		||||
      o Clear block padding bytes of SSL 3.0 records CVE-2011-4576
 | 
			
		||||
      o Only allow one SGC handshake restart for SSL/TLS CVE-2011-4619
 | 
			
		||||
      o Check for malformed RFC3779 data CVE-2011-4577
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8q and OpenSSL 0.9.8r [8 Feb 2011]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2011-0014
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8p and OpenSSL 0.9.8q [2 Dec 2010]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-4180
 | 
			
		||||
      o Fix for CVE-2010-4252
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8o and OpenSSL 0.9.8p [16 Nov 2010]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-3864.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8n and OpenSSL 0.9.8o [1 Jun 2010]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-0742.
 | 
			
		||||
      o Various DTLS fixes.
 | 
			
		||||
      o Recognise SHA2 certificates if only SSL algorithms added.
 | 
			
		||||
      o Fix for no-rc4 compilation.
 | 
			
		||||
      o Chil ENGINE unload workaround.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8m and OpenSSL 0.9.8n [24 Mar 2010]:
 | 
			
		||||
 | 
			
		||||
      o CFB cipher definition fixes.
 | 
			
		||||
      o Fix security issues CVE-2010-0740 and CVE-2010-0433.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8l and OpenSSL 0.9.8m [25 Feb 2010]:
 | 
			
		||||
 | 
			
		||||
      o Cipher definition fixes.
 | 
			
		||||
      o Workaround for slow RAND_poll() on some WIN32 versions.
 | 
			
		||||
      o Remove MD2 from algorithm tables.
 | 
			
		||||
      o SPKAC handling fixes.
 | 
			
		||||
      o Support for RFC5746 TLS renegotiation extension.
 | 
			
		||||
      o Compression memory leak fixed.
 | 
			
		||||
      o Compression session resumption fixed.
 | 
			
		||||
      o Ticket and SNI coexistence fixes.
 | 
			
		||||
      o Many fixes to DTLS handling. 
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8k and OpenSSL 0.9.8l [5 Nov 2009]:
 | 
			
		||||
 | 
			
		||||
      o Temporary work around for CVE-2009-3555: disable renegotiation.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8j and OpenSSL 0.9.8k [25 Mar 2009]:
 | 
			
		||||
 | 
			
		||||
      o Fix various build issues.
 | 
			
		||||
      o Fix security issues (CVE-2009-0590, CVE-2009-0591, CVE-2009-0789)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8i and OpenSSL 0.9.8j:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8i and OpenSSL 0.9.8j [7 Jan 2009]:
 | 
			
		||||
 | 
			
		||||
      o Fix security issue (CVE-2008-5077)
 | 
			
		||||
      o Merge FIPS 140-2 branch code.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8g and OpenSSL 0.9.8h:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8g and OpenSSL 0.9.8h [28 May 2008]:
 | 
			
		||||
 | 
			
		||||
      o CryptoAPI ENGINE support.
 | 
			
		||||
      o Various precautionary measures.
 | 
			
		||||
      o Fix for bugs affecting certificate request creation.
 | 
			
		||||
      o Support for local machine keyset attribute in PKCS#12 files.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8f and OpenSSL 0.9.8g:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8f and OpenSSL 0.9.8g [19 Oct 2007]:
 | 
			
		||||
 | 
			
		||||
      o Backport of CMS functionality to 0.9.8.
 | 
			
		||||
      o Fixes for bugs introduced with 0.9.8f.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8e and OpenSSL 0.9.8f:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8e and OpenSSL 0.9.8f [11 Oct 2007]:
 | 
			
		||||
 | 
			
		||||
      o Add gcc 4.2 support.
 | 
			
		||||
      o Add support for AES and SSE2 assembly lanugauge optimization
 | 
			
		||||
@@ -38,23 +157,23 @@
 | 
			
		||||
      o RFC4507bis support.
 | 
			
		||||
      o TLS Extensions support.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e [23 Feb 2007]:
 | 
			
		||||
 | 
			
		||||
      o Various ciphersuite selection fixes.
 | 
			
		||||
      o RFC3779 support.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d [28 Sep 2006]:
 | 
			
		||||
 | 
			
		||||
      o Introduce limits to prevent malicious key DoS  (CVE-2006-2940)
 | 
			
		||||
      o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
 | 
			
		||||
      o Changes to ciphersuite selection algorithm
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8b and OpenSSL 0.9.8c:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8b and OpenSSL 0.9.8c [5 Sep 2006]:
 | 
			
		||||
 | 
			
		||||
      o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339
 | 
			
		||||
      o New cipher Camellia
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b [4 May 2006]:
 | 
			
		||||
 | 
			
		||||
      o Cipher string fixes.
 | 
			
		||||
      o Fixes for VC++ 2005.
 | 
			
		||||
@@ -64,12 +183,12 @@
 | 
			
		||||
      o Built in dynamic engine compilation support on Win32.
 | 
			
		||||
      o Fixes auto dynamic engine loading in Win32.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8 and OpenSSL 0.9.8a:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8 and OpenSSL 0.9.8a [11 Oct 2005]:
 | 
			
		||||
 | 
			
		||||
      o Fix potential SSL 2.0 rollback, CVE-2005-2969
 | 
			
		||||
      o Extended Windows CE support
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.8:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.8 [5 Jul 2005]:
 | 
			
		||||
 | 
			
		||||
      o Major work on the BIGNUM library for higher efficiency and to
 | 
			
		||||
        make operations more streamlined and less contradictory.  This
 | 
			
		||||
@@ -143,31 +262,36 @@
 | 
			
		||||
      o Added initial support for Win64.
 | 
			
		||||
      o Added alternate pkg-config files.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7k and OpenSSL 0.9.7l:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7l and OpenSSL 0.9.7m [23 Feb 2007]:
 | 
			
		||||
 | 
			
		||||
      o FIPS 1.1.1 module linking.
 | 
			
		||||
      o Various ciphersuite selection fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7k and OpenSSL 0.9.7l [28 Sep 2006]:
 | 
			
		||||
 | 
			
		||||
      o Introduce limits to prevent malicious key DoS  (CVE-2006-2940)
 | 
			
		||||
      o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7j and OpenSSL 0.9.7k:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7j and OpenSSL 0.9.7k [5 Sep 2006]:
 | 
			
		||||
 | 
			
		||||
      o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j [4 May 2006]:
 | 
			
		||||
 | 
			
		||||
      o Visual C++ 2005 fixes.
 | 
			
		||||
      o Update Windows build system for FIPS.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7h and OpenSSL 0.9.7i:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7h and OpenSSL 0.9.7i [14 Oct 2005]:
 | 
			
		||||
 | 
			
		||||
      o Give EVP_MAX_MD_SIZE it's old value, except for a FIPS build.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.7h:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.7h [11 Oct 2005]:
 | 
			
		||||
 | 
			
		||||
      o Fix SSL 2.0 Rollback, CVE-2005-2969
 | 
			
		||||
      o Allow use of fixed-length exponent on DSA signing
 | 
			
		||||
      o Default fixed-window RSA, DSA, DH private-key operations
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g [11 Apr 2005]:
 | 
			
		||||
 | 
			
		||||
      o More compilation issues fixed.
 | 
			
		||||
      o Adaptation to more modern Kerberos API.
 | 
			
		||||
@@ -176,7 +300,7 @@
 | 
			
		||||
      o More constification.
 | 
			
		||||
      o Added processing of proxy certificates (RFC 3820).
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f [22 Mar 2005]:
 | 
			
		||||
 | 
			
		||||
      o Several compilation issues fixed.
 | 
			
		||||
      o Many memory allocation failure checks added.
 | 
			
		||||
@@ -184,12 +308,12 @@
 | 
			
		||||
      o Mandatory basic checks on certificates.
 | 
			
		||||
      o Performance improvements.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e [25 Oct 2004]:
 | 
			
		||||
 | 
			
		||||
      o Fix race condition in CRL checking code.
 | 
			
		||||
      o Fixes to PKCS#7 (S/MIME) code.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d [17 Mar 2004]:
 | 
			
		||||
 | 
			
		||||
      o Security: Fix Kerberos ciphersuite SSL/TLS handshaking bug
 | 
			
		||||
      o Security: Fix null-pointer assignment in do_change_cipher_spec()
 | 
			
		||||
@@ -197,14 +321,14 @@
 | 
			
		||||
      o Multiple X509 verification fixes
 | 
			
		||||
      o Speed up HMAC and other operations
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c [30 Sep 2003]:
 | 
			
		||||
 | 
			
		||||
      o Security: fix various ASN1 parsing bugs.
 | 
			
		||||
      o New -ignore_err option to OCSP utility.
 | 
			
		||||
      o Various interop and bug fixes in S/MIME code.
 | 
			
		||||
      o SSL/TLS protocol fix for unrequested client certificates.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b [10 Apr 2003]:
 | 
			
		||||
 | 
			
		||||
      o Security: counter the Klima-Pokorny-Rosa extension of
 | 
			
		||||
        Bleichbacher's attack 
 | 
			
		||||
@@ -215,7 +339,7 @@
 | 
			
		||||
      o ASN.1: treat domainComponent correctly.
 | 
			
		||||
      o Documentation: fixes and additions.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a [19 Feb 2003]:
 | 
			
		||||
 | 
			
		||||
      o Security: Important security related bugfixes.
 | 
			
		||||
      o Enhanced compatibility with MIT Kerberos.
 | 
			
		||||
@@ -226,7 +350,7 @@
 | 
			
		||||
      o SSL/TLS: now handles manual certificate chain building.
 | 
			
		||||
      o SSL/TLS: certain session ID malfunctions corrected.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7 [30 Dec 2002]:
 | 
			
		||||
 | 
			
		||||
      o New library section OCSP.
 | 
			
		||||
      o Complete rewrite of ASN1 code.
 | 
			
		||||
@@ -272,23 +396,23 @@
 | 
			
		||||
      o SSL/TLS: add callback to retrieve SSL/TLS messages.
 | 
			
		||||
      o SSL/TLS: support AES cipher suites (RFC3268).
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k [30 Sep 2003]:
 | 
			
		||||
 | 
			
		||||
      o Security: fix various ASN1 parsing bugs.
 | 
			
		||||
      o SSL/TLS protocol fix for unrequested client certificates.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j [10 Apr 2003]:
 | 
			
		||||
 | 
			
		||||
      o Security: counter the Klima-Pokorny-Rosa extension of
 | 
			
		||||
        Bleichbacher's attack 
 | 
			
		||||
      o Security: make RSA blinding default.
 | 
			
		||||
      o Build: shared library support fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i [19 Feb 2003]:
 | 
			
		||||
 | 
			
		||||
      o Important security related bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h [5 Dec 2002]:
 | 
			
		||||
 | 
			
		||||
      o New configuration targets for Tandem OSS and A/UX.
 | 
			
		||||
      o New OIDs for Microsoft attributes.
 | 
			
		||||
@@ -302,25 +426,25 @@
 | 
			
		||||
      o Fixes for smaller building problems.
 | 
			
		||||
      o Updates of manuals, FAQ and other instructive documents.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g [9 Aug 2002]:
 | 
			
		||||
 | 
			
		||||
      o Important building fixes on Unix.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f [8 Aug 2002]:
 | 
			
		||||
 | 
			
		||||
      o Various important bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e [30 Jul 2002]:
 | 
			
		||||
 | 
			
		||||
      o Important security related bugfixes.
 | 
			
		||||
      o Various SSL/TLS library bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d [9 May 2002]:
 | 
			
		||||
 | 
			
		||||
      o Various SSL/TLS library bugfixes.
 | 
			
		||||
      o Fix DH parameter generation for 'non-standard' generators.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c [21 Dec 2001]:
 | 
			
		||||
 | 
			
		||||
      o Various SSL/TLS library bugfixes.
 | 
			
		||||
      o BIGNUM library fixes.
 | 
			
		||||
@@ -333,7 +457,7 @@
 | 
			
		||||
        Broadcom and Cryptographic Appliance's keyserver
 | 
			
		||||
        [in 0.9.6c-engine release].
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b [9 Jul 2001]:
 | 
			
		||||
 | 
			
		||||
      o Security fix: PRNG improvements.
 | 
			
		||||
      o Security fix: RSA OAEP check.
 | 
			
		||||
@@ -350,7 +474,7 @@
 | 
			
		||||
      o Increase default size for BIO buffering filter.
 | 
			
		||||
      o Compatibility fixes in some scripts.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.6a:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.6a [5 Apr 2001]:
 | 
			
		||||
 | 
			
		||||
      o Security fix: change behavior of OpenSSL to avoid using
 | 
			
		||||
        environment variables when running as root.
 | 
			
		||||
@@ -375,7 +499,7 @@
 | 
			
		||||
      o New function BN_rand_range().
 | 
			
		||||
      o Add "-rand" option to openssl s_client and s_server.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6:
 | 
			
		||||
  Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6 [10 Oct 2000]:
 | 
			
		||||
 | 
			
		||||
      o Some documentation for BIO and SSL libraries.
 | 
			
		||||
      o Enhanced chain verification using key identifiers.
 | 
			
		||||
@@ -390,7 +514,7 @@
 | 
			
		||||
    [1] The support for external crypto devices is currently a separate
 | 
			
		||||
        distribution.  See the file README.ENGINE.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a:
 | 
			
		||||
  Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a [1 Apr 2000]:
 | 
			
		||||
 | 
			
		||||
      o Bug fixes for Win32, SuSE Linux, NeXTSTEP and FreeBSD 2.2.8 
 | 
			
		||||
      o Shared library support for HPUX and Solaris-gcc
 | 
			
		||||
@@ -399,7 +523,7 @@
 | 
			
		||||
      o New 'rand' application
 | 
			
		||||
      o New way to check for existence of algorithms from scripts
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5:
 | 
			
		||||
  Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5 [25 May 2000]:
 | 
			
		||||
 | 
			
		||||
      o S/MIME support in new 'smime' command
 | 
			
		||||
      o Documentation for the OpenSSL command line application
 | 
			
		||||
@@ -435,7 +559,7 @@
 | 
			
		||||
      o Enhanced support for Alpha Linux
 | 
			
		||||
      o Experimental MacOS support
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4:
 | 
			
		||||
  Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4 [9 Aug 1999]:
 | 
			
		||||
 | 
			
		||||
      o Transparent support for PKCS#8 format private keys: these are used
 | 
			
		||||
        by several software packages and are more secure than the standard
 | 
			
		||||
@@ -446,7 +570,7 @@
 | 
			
		||||
      o New pipe-like BIO that allows using the SSL library when actual I/O
 | 
			
		||||
        must be handled by the application (BIO pair)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.2b and OpenSSL 0.9.3:
 | 
			
		||||
  Major changes between OpenSSL 0.9.2b and OpenSSL 0.9.3 [24 May 1999]:
 | 
			
		||||
      o Lots of enhancements and cleanups to the Configuration mechanism
 | 
			
		||||
      o RSA OEAP related fixes
 | 
			
		||||
      o Added `openssl ca -revoke' option for revoking a certificate
 | 
			
		||||
@@ -460,7 +584,7 @@
 | 
			
		||||
      o Sparc assembler bignum implementation, optimized hash functions
 | 
			
		||||
      o Option to disable selected ciphers
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.1c and OpenSSL 0.9.2b:
 | 
			
		||||
  Major changes between OpenSSL 0.9.1c and OpenSSL 0.9.2b [22 Mar 1999]:
 | 
			
		||||
      o Fixed a security hole related to session resumption
 | 
			
		||||
      o Fixed RSA encryption routines for the p < q case
 | 
			
		||||
      o "ALL" in cipher lists now means "everything except NULL ciphers"
 | 
			
		||||
@@ -482,7 +606,7 @@
 | 
			
		||||
      o Lots of memory leak fixes.
 | 
			
		||||
      o Lots of bug fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c:
 | 
			
		||||
  Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c [23 Dec 1998]:
 | 
			
		||||
      o Integration of the popular NO_RSA/NO_DSA patches
 | 
			
		||||
      o Initial support for compression inside the SSL record layer
 | 
			
		||||
      o Added BIO proxy and filtering functionality
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								PROBLEMS
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								PROBLEMS
									
									
									
									
									
								
							@@ -36,7 +36,9 @@ may differ on your machine.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
As long as Apple doesn't fix the problem with ld, this problem building
 | 
			
		||||
OpenSSL will remain as is.
 | 
			
		||||
OpenSSL will remain as is. Well, the problem was addressed in 0.9.8f by
 | 
			
		||||
passing -Wl,-search_paths_first, but it's unknown if the flag was
 | 
			
		||||
supported from the initial MacOS X release.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Parallell make leads to errors
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								README
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
 | 
			
		||||
 OpenSSL 0.9.8k
 | 
			
		||||
 OpenSSL 0.9.8zd 8 Jan 2015
 | 
			
		||||
 | 
			
		||||
 Copyright (c) 1998-2008 The OpenSSL Project
 | 
			
		||||
 Copyright (c) 1998-2011 The OpenSSL Project
 | 
			
		||||
 Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
 | 
			
		||||
 All rights reserved.
 | 
			
		||||
 | 
			
		||||
@@ -112,8 +112,6 @@
 | 
			
		||||
 should be contacted if that algorithm is to be used; their web page is
 | 
			
		||||
 http://www.ascom.ch/.
 | 
			
		||||
 | 
			
		||||
 The MDC2 algorithm is patented by IBM.
 | 
			
		||||
 | 
			
		||||
 NTT and Mitsubishi have patents and pending patents on the Camellia
 | 
			
		||||
 algorithm, but allow use at no charge without requiring an explicit
 | 
			
		||||
 licensing agreement: http://info.isl.ntt.co.jp/crypt/eng/info/chiteki.html
 | 
			
		||||
@@ -139,6 +137,9 @@
 | 
			
		||||
 SUPPORT
 | 
			
		||||
 -------
 | 
			
		||||
 | 
			
		||||
 See the OpenSSL website www.openssl.org for details of how to obtain
 | 
			
		||||
 commercial technical support.
 | 
			
		||||
 | 
			
		||||
 If you have any problems with OpenSSL then please take the following steps
 | 
			
		||||
 first:
 | 
			
		||||
 | 
			
		||||
@@ -165,6 +166,10 @@
 | 
			
		||||
 | 
			
		||||
    openssl-bugs@openssl.org
 | 
			
		||||
 | 
			
		||||
 Note that the request tracker should NOT be used for general assistance
 | 
			
		||||
 or support queries. Just because something doesn't work the way you expect
 | 
			
		||||
 does not mean it is necessarily a bug in OpenSSL.
 | 
			
		||||
 | 
			
		||||
 Note that mail to openssl-bugs@openssl.org is recorded in the publicly
 | 
			
		||||
 readable request tracker database and is forwarded to a public
 | 
			
		||||
 mailing list. Confidential mail may be sent to openssl-security@openssl.org
 | 
			
		||||
@@ -175,10 +180,22 @@
 | 
			
		||||
 | 
			
		||||
 Development is coordinated on the openssl-dev mailing list (see
 | 
			
		||||
 http://www.openssl.org for information on subscribing). If you
 | 
			
		||||
 would like to submit a patch, send it to openssl-dev@openssl.org with
 | 
			
		||||
 would like to submit a patch, send it to openssl-bugs@openssl.org with
 | 
			
		||||
 the string "[PATCH]" in the subject. Please be sure to include a
 | 
			
		||||
 textual explanation of what your patch does.
 | 
			
		||||
 | 
			
		||||
 If you are unsure as to whether a feature will be useful for the general
 | 
			
		||||
 OpenSSL community please discuss it on the openssl-dev mailing list first.
 | 
			
		||||
 Someone may be already working on the same thing or there may be a good
 | 
			
		||||
 reason as to why that feature isn't implemented.
 | 
			
		||||
 | 
			
		||||
 Patches should be as up to date as possible, preferably relative to the
 | 
			
		||||
 current Git or the last snapshot. They should follow the coding style of
 | 
			
		||||
 OpenSSL and compile without warnings. Some of the core team developer targets
 | 
			
		||||
 can be used for testing purposes, (debug-steve64, debug-geoff etc). OpenSSL
 | 
			
		||||
 compiles on many varied platforms: try to ensure you only use portable
 | 
			
		||||
 features.
 | 
			
		||||
 | 
			
		||||
 Note: For legal reasons, contributions from the US can be accepted only
 | 
			
		||||
 if a TSU notification and a copy of the patch are sent to crypt@bis.doc.gov
 | 
			
		||||
 (formerly BXA) with a copy to the ENC Encryption Request Coordinator;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										135
									
								
								STATUS
									
									
									
									
									
								
							
							
						
						
									
										135
									
								
								STATUS
									
									
									
									
									
								
							@@ -1,135 +0,0 @@
 | 
			
		||||
 | 
			
		||||
  OpenSSL STATUS                           Last modified at
 | 
			
		||||
  ______________                           $Date: 2009/03/25 10:46:55 $
 | 
			
		||||
 | 
			
		||||
  DEVELOPMENT STATE
 | 
			
		||||
 | 
			
		||||
    o  OpenSSL 0.9.9:  Under development...
 | 
			
		||||
    o  OpenSSL 0.9.8k: Released on March     25th, 2009
 | 
			
		||||
    o  OpenSSL 0.9.8j: Released on January    7th, 2009
 | 
			
		||||
    o  OpenSSL 0.9.8i: Released on September 15th, 2008
 | 
			
		||||
    o  OpenSSL 0.9.8h: Released on May       28th, 2008
 | 
			
		||||
    o  OpenSSL 0.9.8g: Released on October   19th, 2007
 | 
			
		||||
    o  OpenSSL 0.9.8f: Released on October   11th, 2007
 | 
			
		||||
    o  OpenSSL 0.9.8e: Released on February  23rd, 2007
 | 
			
		||||
    o  OpenSSL 0.9.8d: Released on September 28th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.8c: Released on September  5th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.8b: Released on May        4th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.8a: Released on October   11th, 2005
 | 
			
		||||
    o  OpenSSL 0.9.8:  Released on July       5th, 2005
 | 
			
		||||
    o  OpenSSL 0.9.7m: Released on February  23rd, 2007
 | 
			
		||||
    o  OpenSSL 0.9.7l: Released on September 28th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.7k: Released on September  5th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.7j: Released on May        4th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.7i: Released on October   14th, 2005
 | 
			
		||||
    o  OpenSSL 0.9.7h: Released on October   11th, 2005
 | 
			
		||||
    o  OpenSSL 0.9.7g: Released on April     11th, 2005
 | 
			
		||||
    o  OpenSSL 0.9.7f: Released on March     22nd, 2005
 | 
			
		||||
    o  OpenSSL 0.9.7e: Released on October   25th, 2004
 | 
			
		||||
    o  OpenSSL 0.9.7d: Released on March     17th, 2004
 | 
			
		||||
    o  OpenSSL 0.9.7c: Released on September 30th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.7b: Released on April     10th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.7a: Released on February  19th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.7:  Released on December  31st, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6m: Released on March     17th, 2004
 | 
			
		||||
    o  OpenSSL 0.9.6l: Released on November   4th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.6k: Released on September 30th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.6j: Released on April     10th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.6i: Released on February  19th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.6h: Released on December   5th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6g: Released on August     9th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6f: Released on August     8th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6e: Released on July      30th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6d: Released on May        9th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6c: Released on December  21st, 2001
 | 
			
		||||
    o  OpenSSL 0.9.6b: Released on July       9th, 2001
 | 
			
		||||
    o  OpenSSL 0.9.6a: Released on April      5th, 2001
 | 
			
		||||
    o  OpenSSL 0.9.6:  Released on September 24th, 2000
 | 
			
		||||
    o  OpenSSL 0.9.5a: Released on April      1st, 2000
 | 
			
		||||
    o  OpenSSL 0.9.5:  Released on February  28th, 2000
 | 
			
		||||
    o  OpenSSL 0.9.4:  Released on August    09th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.3a: Released on May       29th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.3:  Released on May       25th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.2b: Released on March     22th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.1c: Released on December  23th, 1998
 | 
			
		||||
 | 
			
		||||
  [See also http://www.openssl.org/support/rt.html]
 | 
			
		||||
 | 
			
		||||
  RELEASE SHOWSTOPPERS
 | 
			
		||||
 | 
			
		||||
    o The Makefiles fail with some SysV makes.
 | 
			
		||||
    o 
 | 
			
		||||
 | 
			
		||||
  AVAILABLE PATCHES
 | 
			
		||||
 | 
			
		||||
    o 
 | 
			
		||||
 | 
			
		||||
  IN PROGRESS
 | 
			
		||||
 | 
			
		||||
    o Steve is currently working on (in no particular order):
 | 
			
		||||
        ASN1 code redesign, butchery, replacement.
 | 
			
		||||
        OCSP
 | 
			
		||||
        EVP cipher enhancement.
 | 
			
		||||
        Enhanced certificate chain verification.
 | 
			
		||||
	Private key, certificate and CRL API and implementation.
 | 
			
		||||
	Developing and bugfixing PKCS#7 (S/MIME code).
 | 
			
		||||
        Various X509 issues: character sets, certificate request extensions.
 | 
			
		||||
    o Richard is currently working on:
 | 
			
		||||
	Constification
 | 
			
		||||
	Attribute Certificate support
 | 
			
		||||
	Certificate Pair support
 | 
			
		||||
	Storage Engines (primarly an LDAP storage engine)
 | 
			
		||||
	Certificate chain validation with full RFC 3280 compatibility
 | 
			
		||||
 | 
			
		||||
  NEEDS PATCH
 | 
			
		||||
 | 
			
		||||
    o  0.9.8-dev: COMPLEMENTOFALL and COMPLEMENTOFDEFAULT do not
 | 
			
		||||
       handle ECCdraft cipher suites correctly.
 | 
			
		||||
 | 
			
		||||
    o  apps/ca.c: "Sign the certificate?" - "n" creates empty certificate file
 | 
			
		||||
 | 
			
		||||
    o  "OpenSSL STATUS" is never up-to-date.
 | 
			
		||||
 | 
			
		||||
  OPEN ISSUES
 | 
			
		||||
 | 
			
		||||
    o  The Makefile hierarchy and build mechanism is still not a round thing:
 | 
			
		||||
 | 
			
		||||
       1. The config vs. Configure scripts
 | 
			
		||||
          It's the same nasty situation as for Apache with APACI vs.
 | 
			
		||||
          src/Configure. It confuses.
 | 
			
		||||
          Suggestion: Merge Configure and config into a single configure
 | 
			
		||||
                      script with a Autoconf style interface ;-) and remove
 | 
			
		||||
                      Configure and config. Or even let us use GNU Autoconf
 | 
			
		||||
                      itself. Then we can avoid a lot of those platform checks
 | 
			
		||||
                      which are currently in Configure.
 | 
			
		||||
 | 
			
		||||
    o  Support for Shared Libraries has to be added at least
 | 
			
		||||
       for the major Unix platforms. The details we can rip from the stuff
 | 
			
		||||
       Ralf has done for the Apache src/Configure script. Ben wants the
 | 
			
		||||
       solution to be really simple.
 | 
			
		||||
 | 
			
		||||
       Status: Ralf will look how we can easily incorporate the
 | 
			
		||||
               compiler PIC and linker DSO flags from Apache
 | 
			
		||||
               into the OpenSSL Configure script.
 | 
			
		||||
 | 
			
		||||
               Ulf: +1 for using GNU autoconf and libtool (but not automake,
 | 
			
		||||
                    which apparently is not flexible enough to generate
 | 
			
		||||
                    libcrypto)
 | 
			
		||||
 | 
			
		||||
  WISHES
 | 
			
		||||
 | 
			
		||||
    o  Add variants of DH_generate_parameters() and BN_generate_prime() [etc?]
 | 
			
		||||
       where the callback function can request that the function be aborted.
 | 
			
		||||
       [Gregory Stark <ghstark@pobox.com>, <rayyang2000@yahoo.com>]
 | 
			
		||||
 | 
			
		||||
    o  SRP in TLS.
 | 
			
		||||
       [wished by:
 | 
			
		||||
        Dj <derek@yo.net>, Tom Wu <tom@arcot.com>,
 | 
			
		||||
        Tom Holroyd <tomh@po.crl.go.jp>]
 | 
			
		||||
 | 
			
		||||
       See http://search.ietf.org/internet-drafts/draft-ietf-tls-srp-00.txt
 | 
			
		||||
       as well as http://www-cs-students.stanford.edu/~tjw/srp/.
 | 
			
		||||
 | 
			
		||||
       Tom Holroyd tells us there is a SRP patch for OpenSSH at
 | 
			
		||||
       http://members.tripod.com/professor_tom/archives/, that could
 | 
			
		||||
       be useful.
 | 
			
		||||
							
								
								
									
										333
									
								
								TABLE
									
									
									
									
									
								
							
							
						
						
									
										333
									
								
								TABLE
									
									
									
									
									
								
							@@ -432,6 +432,60 @@ $shared_extension =
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** QNX6
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DTERMIOS
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = 
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -lsocket
 | 
			
		||||
$bn_ops       = 
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
$shared_target= bsd-gcc-shared
 | 
			
		||||
$shared_cflag = -fPIC
 | 
			
		||||
$shared_ldflag = 
 | 
			
		||||
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** QNX6-i386
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DTERMIOS -O2 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = 
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -lsocket
 | 
			
		||||
$bn_ops       = DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o MAYBE-MO86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
$md5_obj      = mx86-elf.o
 | 
			
		||||
$sha1_obj     = sx86-elf.o s512sse2-elf.o
 | 
			
		||||
$cast_obj     = cx86-elf.o
 | 
			
		||||
$rc4_obj      = rx86-elf.o rc4_skey.o
 | 
			
		||||
$rmd160_obj   = rm86-elf.o
 | 
			
		||||
$rc5_obj      = r586-elf.o
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
$shared_target= bsd-gcc-shared
 | 
			
		||||
$shared_cflag = -fPIC
 | 
			
		||||
$shared_ldflag = 
 | 
			
		||||
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** ReliantUNIX
 | 
			
		||||
$cc           = cc
 | 
			
		||||
$cflags       = -KPIC -g -DTERMIOS -DB_ENDIAN
 | 
			
		||||
@@ -679,7 +733,7 @@ $arflags      =
 | 
			
		||||
$cc           = cc
 | 
			
		||||
$cflags       = -q32 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -qthreaded
 | 
			
		||||
$thread_cflag = -qthreaded -D_THREAD_SAFE
 | 
			
		||||
$sys_id       = AIX
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR
 | 
			
		||||
@@ -760,7 +814,7 @@ $arflags      =
 | 
			
		||||
$cc           = cc
 | 
			
		||||
$cflags       = -q64 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -qthreaded
 | 
			
		||||
$thread_cflag = -qthreaded -D_THREAD_SAFE
 | 
			
		||||
$sys_id       = AIX
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR
 | 
			
		||||
@@ -810,6 +864,33 @@ $shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = -X64
 | 
			
		||||
 | 
			
		||||
*** android
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -mandroid -I$(ANDROID_DEV)/include -B$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
$shared_target= linux-shared
 | 
			
		||||
$shared_cflag = -fPIC
 | 
			
		||||
$shared_ldflag = 
 | 
			
		||||
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** aux3-gcc
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -O2 -DTERMIO
 | 
			
		||||
@@ -1033,7 +1114,7 @@ $unistd       =
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = MACOSX
 | 
			
		||||
$lflags       = -Wl,-search_paths_first%
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
@@ -1163,7 +1244,61 @@ $arflags      =
 | 
			
		||||
 | 
			
		||||
*** debug-ben-debug
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -Wall -pedantic -DPEDANTIC -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wshadow -Wformat -Werror -DCRYPTO_MDEBUG_ALL -DCRYPTO_MDEBUG_ABORT -DREF_CHECK -DOPENSSL_NO_DEPRECATED -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG  -DDEBUG_SAFESTACK -g3 -O2 -pipe
 | 
			
		||||
$cflags       = -Wall -pedantic -DPEDANTIC -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wshadow -Wformat -Werror -DCRYPTO_MDEBUG_ALL -DCRYPTO_MDEBUG_ABORT -DREF_CHECK -DOPENSSL_NO_DEPRECATED -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG  -DDEBUG_SAFESTACK -ggdb3 -O2 -pipe
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = (unknown)
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = 
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = 
 | 
			
		||||
$shared_target= 
 | 
			
		||||
$shared_cflag = 
 | 
			
		||||
$shared_ldflag = 
 | 
			
		||||
$shared_extension = 
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** debug-ben-debug-64
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -Wall -pedantic -DPEDANTIC -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wshadow -Wformat -Werror -DCRYPTO_MDEBUG_ALL -DCRYPTO_MDEBUG_ABORT -DREF_CHECK -DOPENSSL_NO_DEPRECATED -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -pthread -D_THREAD_SAFE -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL
 | 
			
		||||
$cpuid_obj    = x86_64cpuid.o
 | 
			
		||||
$bn_obj       = x86_64-gcc.o x86_64-mont.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = aes-x86_64.o
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = md5-x86_64.o
 | 
			
		||||
$sha1_obj     = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = rc4-x86_64.o
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = elf
 | 
			
		||||
$shared_target= dlfcn
 | 
			
		||||
$shared_cflag = bsd-gcc-shared
 | 
			
		||||
$shared_ldflag = -fPIC
 | 
			
		||||
$shared_extension = 
 | 
			
		||||
$ranlib       = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** debug-ben-debug-noopt
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -Wall -pedantic -DPEDANTIC -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wshadow -Wformat -Werror -DCRYPTO_MDEBUG_ALL -DCRYPTO_MDEBUG_ABORT -DREF_CHECK -DOPENSSL_NO_DEPRECATED -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG  -DDEBUG_SAFESTACK -ggdb3 -pipe
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = (unknown)
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -1271,29 +1406,29 @@ $arflags      =
 | 
			
		||||
 | 
			
		||||
*** debug-bodo
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBIO_PAIR_DEBUG -DPEDANTIC -g -march=i486 -pedantic -Wshadow -Wall -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe
 | 
			
		||||
$cflags       = -Wall -pedantic -DPEDANTIC -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wshadow -Wformat -Werror -DCRYPTO_MDEBUG_ALL -DCRYPTO_MDEBUG_ABORT -DREF_CHECK -DOPENSSL_NO_DEPRECATED -Wno-error=overlength-strings -DBN_DEBUG -DBN_DEBUG_RAND -DCONF_DEBUG -DBIO_PAIR_DEBUG -m64 -DL_ENDIAN -DTERMIO -g -DMD32_REG_T=int
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o MAYBE-MO86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
$md5_obj      = mx86-elf.o
 | 
			
		||||
$sha1_obj     = sx86-elf.o s512sse2-elf.o
 | 
			
		||||
$cast_obj     = cx86-elf.o
 | 
			
		||||
$rc4_obj      = rx86-elf.o rc4_skey.o
 | 
			
		||||
$rmd160_obj   = rm86-elf.o
 | 
			
		||||
$rc5_obj      = r586-elf.o
 | 
			
		||||
$dso_scheme   = 
 | 
			
		||||
$shared_target= 
 | 
			
		||||
$shared_cflag = 
 | 
			
		||||
$shared_ldflag = 
 | 
			
		||||
$shared_extension = 
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL
 | 
			
		||||
$cpuid_obj    = x86_64cpuid.o
 | 
			
		||||
$bn_obj       = x86_64-gcc.o x86_64-mont.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = aes-x86_64.o
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = md5-x86_64.o
 | 
			
		||||
$sha1_obj     = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = rc4-x86_64.o
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = elf
 | 
			
		||||
$shared_target= dlfcn
 | 
			
		||||
$shared_cflag = linux-shared
 | 
			
		||||
$shared_ldflag = -fPIC
 | 
			
		||||
$shared_extension = -m64
 | 
			
		||||
$ranlib       = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** debug-darwin-i386-cc
 | 
			
		||||
@@ -1379,7 +1514,7 @@ $arflags      =
 | 
			
		||||
 | 
			
		||||
*** debug-levitte-linux-elf
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -ggdb -g3 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -1406,7 +1541,7 @@ $arflags      =
 | 
			
		||||
 | 
			
		||||
*** debug-levitte-linux-elf-extreme
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -1433,7 +1568,7 @@ $arflags      =
 | 
			
		||||
 | 
			
		||||
*** debug-levitte-linux-noasm
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -ggdb -g3 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -1460,7 +1595,7 @@ $arflags      =
 | 
			
		||||
 | 
			
		||||
*** debug-levitte-linux-noasm-extreme
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -1539,6 +1674,60 @@ $shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** debug-linux-generic32
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DTERMIO  -g -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
$shared_target= linux-shared
 | 
			
		||||
$shared_cflag = -fPIC
 | 
			
		||||
$shared_ldflag = 
 | 
			
		||||
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** debug-linux-generic64
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DTERMIO -g -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
$shared_target= linux-shared
 | 
			
		||||
$shared_cflag = -fPIC
 | 
			
		||||
$shared_ldflag = 
 | 
			
		||||
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** debug-linux-pentium
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -mcpu=pentium -Wall
 | 
			
		||||
@@ -1593,6 +1782,33 @@ $shared_extension =
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** debug-linux-x86_64
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -m64 -DL_ENDIAN -DTERMIO -g -Wall -DMD32_REG_T=int
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL
 | 
			
		||||
$cpuid_obj    = x86_64cpuid.o
 | 
			
		||||
$bn_obj       = x86_64-gcc.o x86_64-mont.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = aes-x86_64.o
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = md5-x86_64.o
 | 
			
		||||
$sha1_obj     = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = rc4-x86_64.o
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
$shared_target= linux-shared
 | 
			
		||||
$shared_cflag = -fPIC
 | 
			
		||||
$shared_ldflag = -m64
 | 
			
		||||
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** debug-rse
 | 
			
		||||
$cc           = cc
 | 
			
		||||
$cflags       = -DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall
 | 
			
		||||
@@ -1789,7 +2005,7 @@ $unistd       =
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL
 | 
			
		||||
$cpuid_obj    = x86_64cpuid.o
 | 
			
		||||
$bn_obj       = x86_64-gcc.o x86_64-mont.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
@@ -1801,12 +2017,12 @@ $cast_obj     =
 | 
			
		||||
$rc4_obj      = rc4-x86_64.o
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = elf
 | 
			
		||||
$shared_target= dlfcn
 | 
			
		||||
$shared_cflag = linux-shared
 | 
			
		||||
$shared_ldflag = -fPIC
 | 
			
		||||
$shared_extension = -m64
 | 
			
		||||
$ranlib       = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
$shared_target= linux-shared
 | 
			
		||||
$shared_cflag = -fPIC
 | 
			
		||||
$shared_ldflag = -m64
 | 
			
		||||
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** debug-steve32
 | 
			
		||||
@@ -1843,7 +2059,7 @@ $unistd       =
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL
 | 
			
		||||
$cpuid_obj    = x86_64cpuid.o
 | 
			
		||||
$bn_obj       = x86_64-gcc.o x86_64-mont.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
@@ -1855,12 +2071,12 @@ $cast_obj     =
 | 
			
		||||
$rc4_obj      = rc4-x86_64.o
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = elf
 | 
			
		||||
$shared_target= dlfcn
 | 
			
		||||
$shared_cflag = linux-shared
 | 
			
		||||
$shared_ldflag = -fPIC
 | 
			
		||||
$shared_extension = -m64
 | 
			
		||||
$ranlib       = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
$shared_target= linux-shared
 | 
			
		||||
$shared_cflag = -fPIC
 | 
			
		||||
$shared_ldflag = -m64
 | 
			
		||||
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** debug-ulf
 | 
			
		||||
@@ -3058,7 +3274,7 @@ $unistd       =
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL
 | 
			
		||||
$cpuid_obj    = x86_64cpuid.o
 | 
			
		||||
$bn_obj       = x86_64-gcc.o x86_64-mont.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
@@ -3564,33 +3780,6 @@ $shared_extension =
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** qnx6
 | 
			
		||||
$cc           = cc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DTERMIOS
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = (unknown)
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -lsocket
 | 
			
		||||
$bn_ops       = DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_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      = 
 | 
			
		||||
 | 
			
		||||
*** rhapsody-ppc-cc
 | 
			
		||||
$cc           = cc
 | 
			
		||||
$cflags       = -O3 -DB_ENDIAN
 | 
			
		||||
@@ -3949,7 +4138,7 @@ $unistd       =
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -lsocket -lnsl -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL
 | 
			
		||||
$cpuid_obj    = x86_64cpuid.o
 | 
			
		||||
$bn_obj       = x86_64-gcc.o x86_64-mont.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
@@ -3976,7 +4165,7 @@ $unistd       =
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -lsocket -lnsl -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL
 | 
			
		||||
$cpuid_obj    = x86_64cpuid.o
 | 
			
		||||
$bn_obj       = x86_64-gcc.o x86_64-mont.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,14 @@ $	    WRITE SYS$OUTPUT "Should be the directory where you want things installed.
 | 
			
		||||
$	    EXIT
 | 
			
		||||
$	ENDIF
 | 
			
		||||
$
 | 
			
		||||
$	IF (F$GETSYI("CPU").LT.128)
 | 
			
		||||
$	THEN
 | 
			
		||||
$	    ARCH := VAX
 | 
			
		||||
$	ELSE
 | 
			
		||||
$	    ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
 | 
			
		||||
$	    IF (ARCH .EQS. "") THEN ARCH = "UNK"
 | 
			
		||||
$	ENDIF
 | 
			
		||||
$
 | 
			
		||||
$	ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
 | 
			
		||||
$	ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
 | 
			
		||||
$	ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
 | 
			
		||||
@@ -19,13 +27,7 @@ $	ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
 | 
			
		||||
$	ROOT = ROOT_DEV + "[" + ROOT_DIR
 | 
			
		||||
$
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLVLIB WRK_SSLROOT:[VAX_LIB]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLALIB WRK_SSLROOT:[ALPHA_LIB]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLINCLUDE WRK_SSLROOT:[INCLUDE]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLVEXE WRK_SSLROOT:[VAX_EXE]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLAEXE WRK_SSLROOT:[ALPHA_EXE]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLCERTS WRK_SSLROOT:[CERTS]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLPRIVATE WRK_SSLROOT:[PRIVATE]
 | 
			
		||||
$
 | 
			
		||||
$	IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLROOT:[000000]
 | 
			
		||||
@@ -39,7 +41,7 @@ $	IF F$SEARCH("WRK_SSLINCLUDE:vms_idhacks.h") .NES. "" THEN -
 | 
			
		||||
$
 | 
			
		||||
$	OPEN/WRITE SF WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM
 | 
			
		||||
$	WRITE SYS$OUTPUT "%OPEN-I-CREATED,  ",F$SEARCH("WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM")," created."
 | 
			
		||||
$	WRITE SF "$! Startup file for Openssl 0.9.2-RL 15-Mar-1999"
 | 
			
		||||
$	WRITE SF "$! Startup file for Openssl"
 | 
			
		||||
$	WRITE SF "$!"
 | 
			
		||||
$	WRITE SF "$! Do not edit this file, as it will be regenerated during next installation."
 | 
			
		||||
$	WRITE SF "$! Instead, add or change SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"
 | 
			
		||||
@@ -47,8 +49,13 @@ $	WRITE SF "$!"
 | 
			
		||||
$	WRITE SF "$! P1	a qualifier to DEFINE.  For example ""/SYSTEM"" to get the logical names"
 | 
			
		||||
$	WRITE SF "$!	defined in the system logical name table."
 | 
			
		||||
$	WRITE SF "$!"
 | 
			
		||||
$	WRITE SF "$	ARCH = ""VAX"""
 | 
			
		||||
$	WRITE SF "$	IF F$GETSYI(""CPU"") .GE. 128 THEN ARCH = ""ALPHA"""
 | 
			
		||||
$	WRITE SF "$	IF (F$GETSYI(""CPU"").LT.128)"
 | 
			
		||||
$	WRITE SF "$	THEN"
 | 
			
		||||
$	WRITE SF "$	    ARCH := VAX"
 | 
			
		||||
$	WRITE SF "$	ELSE"
 | 
			
		||||
$	WRITE SF "$	    ARCH = F$EDIT( F$GETSYI( ""ARCH_NAME""), ""UPCASE"")"
 | 
			
		||||
$	WRITE SF "$	    IF (ARCH .EQS. """") THEN ARCH = ""UNK"""
 | 
			
		||||
$	WRITE SF "$	ENDIF"
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	SSLROOT		",ROOT,".] /TRANS=CONC"
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	SSLLIB		SSLROOT:['ARCH'_LIB]"
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	SSLINCLUDE	SSLROOT:[INCLUDE]"
 | 
			
		||||
 
 | 
			
		||||
@@ -3,10 +3,10 @@ $!
 | 
			
		||||
$! No command line parameters.  This should be run at the start of the source
 | 
			
		||||
$! tree (the same directory where one finds INSTALL.VMS).
 | 
			
		||||
$!
 | 
			
		||||
$! Input:	[.UTIL]LIBEAY.NUM,[.AXP.EXE.CRYPTO]LIBCRYPTO.OLB
 | 
			
		||||
$!		[.UTIL]SSLEAY.NUM,[.AXP.EXE.SSL]LIBSSL.OLB
 | 
			
		||||
$! Output:	[.AXP.EXE.CRYPTO]LIBCRYPTO.OPT,.MAP,.EXE
 | 
			
		||||
$!		[.AXP.EXE.SSL]LIBSSL.OPT,.MAP,.EXE
 | 
			
		||||
$! Input:	[.UTIL]LIBEAY.NUM,[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB
 | 
			
		||||
$!		[.UTIL]SSLEAY.NUM,[.xxx.EXE.SSL]LIBSSL.OLB
 | 
			
		||||
$! Output:	[.xxx.EXE.CRYPTO]LIBCRYPTO.OPT,.MAP,.EXE
 | 
			
		||||
$!		[.xxx.EXE.SSL]LIBSSL.OPT,.MAP,.EXE
 | 
			
		||||
$!
 | 
			
		||||
$! So far, tests have only been made on VMS for Alpha.  VAX will come in time.
 | 
			
		||||
$! ===========================================================================
 | 
			
		||||
@@ -19,31 +19,41 @@ $   write sys$error "ERROR: Couldn't find any library version info..."
 | 
			
		||||
$   exit
 | 
			
		||||
$ endif
 | 
			
		||||
$
 | 
			
		||||
$ if f$getsyi("CPU") .ge. 128
 | 
			
		||||
$ if (f$getsyi("cpu").lt.128)
 | 
			
		||||
$ then
 | 
			
		||||
$     arch := VAX
 | 
			
		||||
$ else
 | 
			
		||||
$     arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
 | 
			
		||||
$     if (arch .eqs. "") then arch = "UNK"
 | 
			
		||||
$ endif
 | 
			
		||||
$
 | 
			
		||||
$ if arch .nes. "VAX"
 | 
			
		||||
$ then
 | 
			
		||||
$   arch_vax = 0
 | 
			
		||||
$   libid  = "Crypto"
 | 
			
		||||
$   libnum = "[.UTIL]LIBEAY.NUM"
 | 
			
		||||
$   libdir = "[.AXP.EXE.CRYPTO]"
 | 
			
		||||
$   libdir = "[.''ARCH'.EXE.CRYPTO]"
 | 
			
		||||
$   libolb = "''libdir'LIBCRYPTO.OLB"
 | 
			
		||||
$   libopt = "''libdir'LIBCRYPTO.OPT"
 | 
			
		||||
$   libmap = "''libdir'LIBCRYPTO.MAP"
 | 
			
		||||
$   libgoal= "''libdir'LIBCRYPTO.EXE"
 | 
			
		||||
$   libref = ""
 | 
			
		||||
$   gosub create_axp_shr
 | 
			
		||||
$   gosub create_nonvax_shr
 | 
			
		||||
$   libid  = "SSL"
 | 
			
		||||
$   libnum = "[.UTIL]SSLEAY.NUM"
 | 
			
		||||
$   libdir = "[.AXP.EXE.SSL]"
 | 
			
		||||
$   libdir = "[.''ARCH'.EXE.SSL]"
 | 
			
		||||
$   libolb = "''libdir'LIBSSL.OLB"
 | 
			
		||||
$   libopt = "''libdir'LIBSSL.OPT"
 | 
			
		||||
$   libmap = "''libdir'LIBSSL.MAP"
 | 
			
		||||
$   libgoal= "''libdir'LIBSSL.EXE"
 | 
			
		||||
$   libref = "[.AXP.EXE.CRYPTO]LIBCRYPTO.EXE"
 | 
			
		||||
$   gosub create_axp_shr
 | 
			
		||||
$   libref = "[.''ARCH'.EXE.CRYPTO]LIBCRYPTO.EXE"
 | 
			
		||||
$   gosub create_nonvax_shr
 | 
			
		||||
$ else
 | 
			
		||||
$   arch_vax = 1
 | 
			
		||||
$   libtit = "CRYPTO_TRANSFER_VECTOR"
 | 
			
		||||
$   libid  = "Crypto"
 | 
			
		||||
$   libnum = "[.UTIL]LIBEAY.NUM"
 | 
			
		||||
$   libdir = "[.VAX.EXE.CRYPTO]"
 | 
			
		||||
$   libdir = "[.''ARCH'.EXE.CRYPTO]"
 | 
			
		||||
$   libmar = "''libdir'LIBCRYPTO.MAR"
 | 
			
		||||
$   libolb = "''libdir'LIBCRYPTO.OLB"
 | 
			
		||||
$   libopt = "''libdir'LIBCRYPTO.OPT"
 | 
			
		||||
@@ -56,22 +66,22 @@ $   gosub create_vax_shr
 | 
			
		||||
$   libtit = "SSL_TRANSFER_VECTOR"
 | 
			
		||||
$   libid  = "SSL"
 | 
			
		||||
$   libnum = "[.UTIL]SSLEAY.NUM"
 | 
			
		||||
$   libdir = "[.VAX.EXE.SSL]"
 | 
			
		||||
$   libdir = "[.''ARCH'.EXE.SSL]"
 | 
			
		||||
$   libmar = "''libdir'LIBSSL.MAR"
 | 
			
		||||
$   libolb = "''libdir'LIBSSL.OLB"
 | 
			
		||||
$   libopt = "''libdir'LIBSSL.OPT"
 | 
			
		||||
$   libobj = "''libdir'LIBSSL.OBJ"
 | 
			
		||||
$   libmap = "''libdir'LIBSSL.MAP"
 | 
			
		||||
$   libgoal= "''libdir'LIBSSL.EXE"
 | 
			
		||||
$   libref = "[.VAX.EXE.CRYPTO]LIBCRYPTO.EXE"
 | 
			
		||||
$   libref = "[.''ARCH'.EXE.CRYPTO]LIBCRYPTO.EXE"
 | 
			
		||||
$   libvec = "LIBSSL"
 | 
			
		||||
$   gosub create_vax_shr
 | 
			
		||||
$ endif
 | 
			
		||||
$ exit
 | 
			
		||||
$
 | 
			
		||||
$! ----- Soubroutines to actually build the shareable libraries
 | 
			
		||||
$! The way things work, there's a main shareable library creator for each
 | 
			
		||||
$! supported architecture, which is called from the main code above.
 | 
			
		||||
$! ----- Soubroutines to build the shareable libraries
 | 
			
		||||
$! For each supported architecture, there's a main shareable library
 | 
			
		||||
$! creator, which is called from the main code above.
 | 
			
		||||
$! The creator will define a number of variables to tell the next levels of
 | 
			
		||||
$! subroutines what routines to use to write to the option files, call the
 | 
			
		||||
$! main processor, read_func_num, and when that is done, it will write version
 | 
			
		||||
@@ -97,10 +107,10 @@ $! read_func_num depends on the following variables from the creator:
 | 
			
		||||
$! libwriter	The name of the writer routine to call for each .num file line
 | 
			
		||||
$! -----
 | 
			
		||||
$
 | 
			
		||||
$! ----- Subroutines for AXP
 | 
			
		||||
$! ----- Subroutines for non-VAX
 | 
			
		||||
$! -----
 | 
			
		||||
$! The creator routine
 | 
			
		||||
$ create_axp_shr:
 | 
			
		||||
$ create_nonvax_shr:
 | 
			
		||||
$   open/write opt 'libopt'
 | 
			
		||||
$   write opt "identification=""",libid," ",libverstr,""""
 | 
			
		||||
$   write opt libolb,"/lib"
 | 
			
		||||
@@ -108,7 +118,7 @@ $   if libref .nes. "" then write opt libref,"/SHARE"
 | 
			
		||||
$   write opt "SYMBOL_VECTOR=(-"
 | 
			
		||||
$   libfirstentry := true
 | 
			
		||||
$   libwrch   := opt
 | 
			
		||||
$   libwriter := write_axp_transfer_entry
 | 
			
		||||
$   libwriter := write_nonvax_transfer_entry
 | 
			
		||||
$   textcount = 0
 | 
			
		||||
$   gosub read_func_num
 | 
			
		||||
$   write opt ")"
 | 
			
		||||
@@ -118,7 +128,7 @@ $   link/map='libmap'/full/share='libgoal' 'libopt'/option
 | 
			
		||||
$   return
 | 
			
		||||
$
 | 
			
		||||
$! The record writer routine
 | 
			
		||||
$ write_axp_transfer_entry:
 | 
			
		||||
$ write_nonvax_transfer_entry:
 | 
			
		||||
$   if libentry .eqs. ".dummy" then return
 | 
			
		||||
$   if info_kind .eqs. "VARIABLE"
 | 
			
		||||
$   then
 | 
			
		||||
@@ -144,7 +154,7 @@ $   libfirstentry := false
 | 
			
		||||
$   textcount = textcount + textcount_this
 | 
			
		||||
$   return
 | 
			
		||||
$
 | 
			
		||||
$! ----- Subroutines for AXP
 | 
			
		||||
$! ----- Subroutines for VAX
 | 
			
		||||
$! -----
 | 
			
		||||
$! The creator routine
 | 
			
		||||
$ create_vax_shr:
 | 
			
		||||
@@ -264,8 +274,15 @@ $             truesum = truesum + 1
 | 
			
		||||
$           if plat_entry .eqs. "!EXPORT_VAR_AS_FUNCTION" then -
 | 
			
		||||
$             falsesum = falsesum + 1
 | 
			
		||||
$         endif
 | 
			
		||||
$         if plat_entry .eqs. "VMS" then truesum = truesum + 1
 | 
			
		||||
$         if plat_entry .eqs. "!VMS" then falsesum = falsesum + 1
 | 
			
		||||
$!
 | 
			
		||||
$         if ((plat_entry .eqs. "VMS") .or. -
 | 
			
		||||
            (arch_vax .and. (plat_entry .eqs. "VMSVAX"))) then -
 | 
			
		||||
            truesum = truesum + 1
 | 
			
		||||
$!
 | 
			
		||||
$         if ((plat_entry .eqs. "!VMS") .or. -
 | 
			
		||||
            (arch_vax .and. (plat_entry .eqs. "!VMSVAX"))) then -
 | 
			
		||||
            falsesum = falsesum + 1
 | 
			
		||||
$!
 | 
			
		||||
$	  goto loop1
 | 
			
		||||
$       endif
 | 
			
		||||
$     endloop1:
 | 
			
		||||
 
 | 
			
		||||
@@ -8,31 +8,39 @@ $!
 | 
			
		||||
$!
 | 
			
		||||
$! Slightly modified by Richard Levitte <richard@levitte.org>
 | 
			
		||||
$!
 | 
			
		||||
$!
 | 
			
		||||
$! Always define OPENSSL.  Others are optional (non-null P1).
 | 
			
		||||
$!
 | 
			
		||||
$ OPENSSL  :== $SSLEXE:OPENSSL
 | 
			
		||||
$ VERIFY   :== $SSLEXE:OPENSSL VERIFY
 | 
			
		||||
$ ASN1PARSE:== $SSLEXE:OPENSSL ASN1PARS
 | 
			
		||||
$ REQ      :== $SSLEXE:OPENSSL REQ
 | 
			
		||||
$ DGST     :== $SSLEXE:OPENSSL DGST
 | 
			
		||||
$ DH       :== $SSLEXE:OPENSSL DH
 | 
			
		||||
$ ENC      :== $SSLEXE:OPENSSL ENC
 | 
			
		||||
$ GENDH    :== $SSLEXE:OPENSSL GENDH
 | 
			
		||||
$ ERRSTR   :== $SSLEXE:OPENSSL ERRSTR
 | 
			
		||||
$ CA       :== $SSLEXE:OPENSSL CA
 | 
			
		||||
$ CRL      :== $SSLEXE:OPENSSL CRL
 | 
			
		||||
$ RSA      :== $SSLEXE:OPENSSL RSA
 | 
			
		||||
$ DSA      :== $SSLEXE:OPENSSL DSA
 | 
			
		||||
$ DSAPARAM :== $SSLEXE:OPENSSL DSAPARAM
 | 
			
		||||
$ X509     :== $SSLEXE:OPENSSL X509
 | 
			
		||||
$ GENRSA   :== $SSLEXE:OPENSSL GENRSA
 | 
			
		||||
$ GENDSA   :== $SSLEXE:OPENSSL GENDSA
 | 
			
		||||
$ S_SERVER :== $SSLEXE:OPENSSL S_SERVER
 | 
			
		||||
$ S_CLIENT :== $SSLEXE:OPENSSL S_CLIENT
 | 
			
		||||
$ SPEED    :== $SSLEXE:OPENSSL SPEED
 | 
			
		||||
$ S_TIME   :== $SSLEXE:OPENSSL S_TIME
 | 
			
		||||
$ VERSION  :== $SSLEXE:OPENSSL VERSION
 | 
			
		||||
$ PKCS7    :== $SSLEXE:OPENSSL PKCS7
 | 
			
		||||
$ CRL2PKCS7:== $SSLEXE:OPENSSL CRL2P7
 | 
			
		||||
$ SESS_ID  :== $SSLEXE:OPENSSL SESS_ID
 | 
			
		||||
$ CIPHERS  :== $SSLEXE:OPENSSL CIPHERS
 | 
			
		||||
$ NSEQ     :== $SSLEXE:OPENSSL NSEQ
 | 
			
		||||
$ PKCS12   :== $SSLEXE:OPENSSL PKCS12
 | 
			
		||||
$
 | 
			
		||||
$ IF (P1 .NES. "")
 | 
			
		||||
$ THEN
 | 
			
		||||
$     VERIFY   :== $SSLEXE:OPENSSL VERIFY
 | 
			
		||||
$     ASN1PARSE:== $SSLEXE:OPENSSL ASN1PARS
 | 
			
		||||
$! REQ could conflict with REQUEST.
 | 
			
		||||
$     OREQ     :== $SSLEXE:OPENSSL REQ
 | 
			
		||||
$     DGST     :== $SSLEXE:OPENSSL DGST
 | 
			
		||||
$     DH       :== $SSLEXE:OPENSSL DH
 | 
			
		||||
$     ENC      :== $SSLEXE:OPENSSL ENC
 | 
			
		||||
$     GENDH    :== $SSLEXE:OPENSSL GENDH
 | 
			
		||||
$     ERRSTR   :== $SSLEXE:OPENSSL ERRSTR
 | 
			
		||||
$     CA       :== $SSLEXE:OPENSSL CA
 | 
			
		||||
$     CRL      :== $SSLEXE:OPENSSL CRL
 | 
			
		||||
$     RSA      :== $SSLEXE:OPENSSL RSA
 | 
			
		||||
$     DSA      :== $SSLEXE:OPENSSL DSA
 | 
			
		||||
$     DSAPARAM :== $SSLEXE:OPENSSL DSAPARAM
 | 
			
		||||
$     X509     :== $SSLEXE:OPENSSL X509
 | 
			
		||||
$     GENRSA   :== $SSLEXE:OPENSSL GENRSA
 | 
			
		||||
$     GENDSA   :== $SSLEXE:OPENSSL GENDSA
 | 
			
		||||
$     S_SERVER :== $SSLEXE:OPENSSL S_SERVER
 | 
			
		||||
$     S_CLIENT :== $SSLEXE:OPENSSL S_CLIENT
 | 
			
		||||
$     SPEED    :== $SSLEXE:OPENSSL SPEED
 | 
			
		||||
$     S_TIME   :== $SSLEXE:OPENSSL S_TIME
 | 
			
		||||
$     VERSION  :== $SSLEXE:OPENSSL VERSION
 | 
			
		||||
$     PKCS7    :== $SSLEXE:OPENSSL PKCS7
 | 
			
		||||
$     CRL2PKCS7:== $SSLEXE:OPENSSL CRL2P7
 | 
			
		||||
$     SESS_ID  :== $SSLEXE:OPENSSL SESS_ID
 | 
			
		||||
$     CIPHERS  :== $SSLEXE:OPENSSL CIPHERS
 | 
			
		||||
$     NSEQ     :== $SSLEXE:OPENSSL NSEQ
 | 
			
		||||
$     PKCS12   :== $SSLEXE:OPENSSL PKCS12
 | 
			
		||||
$ ENDIF
 | 
			
		||||
 
 | 
			
		||||
@@ -114,8 +114,8 @@ $!
 | 
			
		||||
$   IF F$SEARCH(CATOP+".private"+CAKEY) .EQS. ""
 | 
			
		||||
$   THEN
 | 
			
		||||
$     READ '__INPUT' FILE -
 | 
			
		||||
	   /PROMT="CA certificate filename (or enter to create)"
 | 
			
		||||
$     IF F$SEARCH(FILE) .NES. ""
 | 
			
		||||
	   /PROMPT="CA certificate filename (or enter to create): "
 | 
			
		||||
$     IF (FILE .NES. "") .AND. (F$SEARCH(FILE) .NES. "")
 | 
			
		||||
$     THEN
 | 
			
		||||
$       COPY 'FILE' 'CATOP'.private'CAKEY'
 | 
			
		||||
$	RET=$STATUS
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										121
									
								
								apps/CA.sh
									
									
									
									
									
								
							
							
						
						
									
										121
									
								
								apps/CA.sh
									
									
									
									
									
								
							@@ -5,10 +5,10 @@
 | 
			
		||||
#      things easier between now and when Eric is convinced to fix it :-)
 | 
			
		||||
#
 | 
			
		||||
# CA -newca ... will setup the right stuff
 | 
			
		||||
# CA -newreq ... will generate a certificate request 
 | 
			
		||||
# CA -sign ... will sign the generated request and output 
 | 
			
		||||
# CA -newreq ... will generate a certificate request
 | 
			
		||||
# CA -sign ... will sign the generated request and output
 | 
			
		||||
#
 | 
			
		||||
# At the end of that grab newreq.pem and newcert.pem (one has the key 
 | 
			
		||||
# At the end of that grab newreq.pem and newcert.pem (one has the key
 | 
			
		||||
# and the other the certificate) and cat them together and that is what
 | 
			
		||||
# you want/need ... I'll make even this a little cleaner later.
 | 
			
		||||
#
 | 
			
		||||
@@ -16,8 +16,8 @@
 | 
			
		||||
# 12-Jan-96 tjh    Added more things ... including CA -signcert which
 | 
			
		||||
#                  converts a certificate to a request and then signs it.
 | 
			
		||||
# 10-Jan-96 eay    Fixed a few more bugs and added the SSLEAY_CONFIG
 | 
			
		||||
#		   environment variable so this can be driven from
 | 
			
		||||
#		   a script.
 | 
			
		||||
#                  environment variable so this can be driven from
 | 
			
		||||
#                  a script.
 | 
			
		||||
# 25-Jul-96 eay    Cleaned up filenames some more.
 | 
			
		||||
# 11-Jun-96 eay    Fixed a few filename missmatches.
 | 
			
		||||
# 03-May-96 eay    Modified to use 'ssleay cmd' instead of 'cmd'.
 | 
			
		||||
@@ -29,52 +29,87 @@
 | 
			
		||||
 | 
			
		||||
# default openssl.cnf file has setup as per the following
 | 
			
		||||
# demoCA ... where everything is stored
 | 
			
		||||
cp_pem() {
 | 
			
		||||
    infile=$1
 | 
			
		||||
    outfile=$2
 | 
			
		||||
    bound=$3
 | 
			
		||||
    flag=0
 | 
			
		||||
    exec <$infile;
 | 
			
		||||
    while read line; do
 | 
			
		||||
	if [ $flag -eq 1 ]; then
 | 
			
		||||
		echo $line|grep "^-----END.*$bound"  2>/dev/null 1>/dev/null
 | 
			
		||||
		if [ $? -eq 0 ] ; then
 | 
			
		||||
			echo $line >>$outfile
 | 
			
		||||
			break
 | 
			
		||||
		else
 | 
			
		||||
			echo $line >>$outfile
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	echo $line|grep "^-----BEGIN.*$bound"  2>/dev/null 1>/dev/null
 | 
			
		||||
	if [ $? -eq 0 ]; then
 | 
			
		||||
		echo $line >$outfile
 | 
			
		||||
		flag=1
 | 
			
		||||
	fi
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
usage() {
 | 
			
		||||
 echo "usage: $0 -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify" >&2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if [ -z "$OPENSSL" ]; then OPENSSL=openssl; fi
 | 
			
		||||
 | 
			
		||||
DAYS="-days 365"	# 1 year
 | 
			
		||||
if [ -z "$DAYS" ] ; then DAYS="-days 365" ; fi	# 1 year
 | 
			
		||||
CADAYS="-days 1095"	# 3 years
 | 
			
		||||
REQ="$OPENSSL req $SSLEAY_CONFIG"
 | 
			
		||||
CA="$OPENSSL ca $SSLEAY_CONFIG"
 | 
			
		||||
VERIFY="$OPENSSL verify"
 | 
			
		||||
X509="$OPENSSL x509"
 | 
			
		||||
PKCS12="openssl pkcs12"
 | 
			
		||||
 | 
			
		||||
CATOP=./demoCA
 | 
			
		||||
if [ -z "$CATOP" ] ; then CATOP=./demoCA ; fi
 | 
			
		||||
CAKEY=./cakey.pem
 | 
			
		||||
CAREQ=./careq.pem
 | 
			
		||||
CACERT=./cacert.pem
 | 
			
		||||
 | 
			
		||||
for i
 | 
			
		||||
do
 | 
			
		||||
case $i in
 | 
			
		||||
RET=0
 | 
			
		||||
 | 
			
		||||
while [ "$1" != "" ] ; do
 | 
			
		||||
case $1 in
 | 
			
		||||
-\?|-h|-help)
 | 
			
		||||
    echo "usage: CA -newcert|-newreq|-newca|-sign|-verify" >&2
 | 
			
		||||
    usage
 | 
			
		||||
    exit 0
 | 
			
		||||
    ;;
 | 
			
		||||
-newcert) 
 | 
			
		||||
-newcert)
 | 
			
		||||
    # create a certificate
 | 
			
		||||
    $REQ -new -x509 -keyout newkey.pem -out newcert.pem $DAYS
 | 
			
		||||
    RET=$?
 | 
			
		||||
    echo "Certificate is in newcert.pem, private key is in newkey.pem"
 | 
			
		||||
    ;;
 | 
			
		||||
-newreq) 
 | 
			
		||||
-newreq)
 | 
			
		||||
    # create a certificate request
 | 
			
		||||
    $REQ -new -keyout newkey.pem -out newreq.pem $DAYS
 | 
			
		||||
    RET=$?
 | 
			
		||||
    echo "Request is in newreq.pem, private key is in newkey.pem"
 | 
			
		||||
    ;;
 | 
			
		||||
-newca)     
 | 
			
		||||
-newreq-nodes) 
 | 
			
		||||
    # create a certificate request
 | 
			
		||||
    $REQ -new -nodes -keyout newreq.pem -out newreq.pem $DAYS
 | 
			
		||||
    RET=$?
 | 
			
		||||
    echo "Request (and private key) is in newreq.pem"
 | 
			
		||||
    ;;
 | 
			
		||||
-newca)
 | 
			
		||||
    # if explicitly asked for or it doesn't exist then setup the directory
 | 
			
		||||
    # structure that Eric likes to manage things 
 | 
			
		||||
    # structure that Eric likes to manage things
 | 
			
		||||
    NEW="1"
 | 
			
		||||
    if [ "$NEW" -o ! -f ${CATOP}/serial ]; then
 | 
			
		||||
	# create the directory hierarchy
 | 
			
		||||
	mkdir ${CATOP} 
 | 
			
		||||
	mkdir ${CATOP}/certs 
 | 
			
		||||
	mkdir ${CATOP}/crl 
 | 
			
		||||
	mkdir ${CATOP}/newcerts
 | 
			
		||||
	mkdir ${CATOP}/private
 | 
			
		||||
	echo "00" > ${CATOP}/serial
 | 
			
		||||
	mkdir -p ${CATOP}
 | 
			
		||||
	mkdir -p ${CATOP}/certs
 | 
			
		||||
	mkdir -p ${CATOP}/crl
 | 
			
		||||
	mkdir -p ${CATOP}/newcerts
 | 
			
		||||
	mkdir -p ${CATOP}/private
 | 
			
		||||
	touch ${CATOP}/index.txt
 | 
			
		||||
    fi
 | 
			
		||||
    if [ ! -f ${CATOP}/private/$CAKEY ]; then
 | 
			
		||||
@@ -83,37 +118,60 @@ case $i in
 | 
			
		||||
 | 
			
		||||
	# ask user for existing CA certificate
 | 
			
		||||
	if [ "$FILE" ]; then
 | 
			
		||||
	    cp $FILE ${CATOP}/private/$CAKEY
 | 
			
		||||
	    cp_pem $FILE ${CATOP}/private/$CAKEY PRIVATE
 | 
			
		||||
	    cp_pem $FILE ${CATOP}/$CACERT CERTIFICATE
 | 
			
		||||
	    RET=$?
 | 
			
		||||
	    if [ ! -f "${CATOP}/serial" ]; then
 | 
			
		||||
		$X509 -in ${CATOP}/$CACERT -noout -next_serial \
 | 
			
		||||
		      -out ${CATOP}/serial
 | 
			
		||||
	    fi
 | 
			
		||||
	else
 | 
			
		||||
	    echo "Making CA certificate ..."
 | 
			
		||||
	    $REQ -new -keyout ${CATOP}/private/$CAKEY \
 | 
			
		||||
			   -out ${CATOP}/$CAREQ
 | 
			
		||||
	    $CA -out ${CATOP}/$CACERT $CADAYS -batch \
 | 
			
		||||
	    $CA -create_serial -out ${CATOP}/$CACERT $CADAYS -batch \
 | 
			
		||||
			   -keyfile ${CATOP}/private/$CAKEY -selfsign \
 | 
			
		||||
			   -infiles ${CATOP}/$CAREQ 
 | 
			
		||||
			   -extensions v3_ca \
 | 
			
		||||
			   -infiles ${CATOP}/$CAREQ
 | 
			
		||||
	    RET=$?
 | 
			
		||||
	fi
 | 
			
		||||
    fi
 | 
			
		||||
    ;;
 | 
			
		||||
-xsign)
 | 
			
		||||
    $CA -policy policy_anything -infiles newreq.pem 
 | 
			
		||||
    $CA -policy policy_anything -infiles newreq.pem
 | 
			
		||||
    RET=$?
 | 
			
		||||
    ;;
 | 
			
		||||
-sign|-signreq) 
 | 
			
		||||
-pkcs12)
 | 
			
		||||
    if [ -z "$2" ] ; then
 | 
			
		||||
	CNAME="My Certificate"
 | 
			
		||||
    else
 | 
			
		||||
	CNAME="$2"
 | 
			
		||||
    fi
 | 
			
		||||
    $PKCS12 -in newcert.pem -inkey newreq.pem -certfile ${CATOP}/$CACERT \
 | 
			
		||||
	    -out newcert.p12 -export -name "$CNAME"
 | 
			
		||||
    RET=$?
 | 
			
		||||
    exit $RET
 | 
			
		||||
    ;;
 | 
			
		||||
-sign|-signreq)
 | 
			
		||||
    $CA -policy policy_anything -out newcert.pem -infiles newreq.pem
 | 
			
		||||
    RET=$?
 | 
			
		||||
    cat newcert.pem
 | 
			
		||||
    echo "Signed certificate is in newcert.pem"
 | 
			
		||||
    ;;
 | 
			
		||||
-signcert) 
 | 
			
		||||
-signCA)
 | 
			
		||||
    $CA -policy policy_anything -out newcert.pem -extensions v3_ca -infiles newreq.pem
 | 
			
		||||
    RET=$?
 | 
			
		||||
    echo "Signed CA certificate is in newcert.pem"
 | 
			
		||||
    ;;
 | 
			
		||||
-signcert)
 | 
			
		||||
    echo "Cert passphrase will be requested twice - bug?"
 | 
			
		||||
    $X509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem
 | 
			
		||||
    $CA -policy policy_anything -out newcert.pem -infiles tmp.pem
 | 
			
		||||
    RET=$?
 | 
			
		||||
    cat newcert.pem
 | 
			
		||||
    echo "Signed certificate is in newcert.pem"
 | 
			
		||||
    ;;
 | 
			
		||||
-verify) 
 | 
			
		||||
-verify)
 | 
			
		||||
    shift
 | 
			
		||||
    if [ -z "$1" ]; then
 | 
			
		||||
	    $VERIFY -CAfile $CATOP/$CACERT newcert.pem
 | 
			
		||||
@@ -127,13 +185,14 @@ case $i in
 | 
			
		||||
	    fi
 | 
			
		||||
	done
 | 
			
		||||
    fi
 | 
			
		||||
    exit 0
 | 
			
		||||
    exit $RET
 | 
			
		||||
    ;;
 | 
			
		||||
*)
 | 
			
		||||
    echo "Unknown arg $i";
 | 
			
		||||
    echo "Unknown arg $i" >&2
 | 
			
		||||
    usage
 | 
			
		||||
    exit 1
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
shift
 | 
			
		||||
done
 | 
			
		||||
exit $RET
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -153,17 +153,19 @@ $(EXE): progs.h $(E_OBJ) $(PROGRAM).o $(DLIBCRYPTO) $(DLIBSSL)
 | 
			
		||||
	shlib_target=; if [ -n "$(SHARED_LIBS)" ]; then \
 | 
			
		||||
		shlib_target="$(SHLIB_TARGET)"; \
 | 
			
		||||
	elif [ -n "$(FIPSCANLIB)" ]; then \
 | 
			
		||||
	  FIPSLD_CC=$(CC); CC=$(TOP)/fips/fipsld; export CC FIPSLD_CC; \
 | 
			
		||||
	  FIPSLD_CC="$(CC)"; CC=$(TOP)/fips/fipsld; export CC FIPSLD_CC; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	LIBRARIES="$(LIBSSL) $(LIBKRB5) $(LIBCRYPTO)" ; \
 | 
			
		||||
	[ "x$(FIPSCANLIB)" = "xlibfips" ] && LIBRARIES="$$LIBRARIES -lfips"; \
 | 
			
		||||
	$(MAKE) -f $(TOP)/Makefile.shared -e \
 | 
			
		||||
		CC=$${CC} APPNAME=$(EXE) OBJECTS="$(PROGRAM).o $(E_OBJ)" \
 | 
			
		||||
		CC="$${CC}" APPNAME=$(EXE) OBJECTS="$(PROGRAM).o $(E_OBJ)" \
 | 
			
		||||
		LIBDEPS="$(PEX_LIBS) $$LIBRARIES $(EX_LIBS)" \
 | 
			
		||||
		link_app.$${shlib_target}
 | 
			
		||||
	-(cd ..; \
 | 
			
		||||
	  OPENSSL="`pwd`/util/opensslwrap.sh"; export OPENSSL; \
 | 
			
		||||
	  $(PERL) tools/c_rehash certs)
 | 
			
		||||
	@if [ -z "$(CROSS_COMPILE)" ]; then \
 | 
			
		||||
		(cd ..; \
 | 
			
		||||
	  	OPENSSL="`pwd`/util/opensslwrap.sh"; export OPENSSL; \
 | 
			
		||||
	  	$(PERL) tools/c_rehash certs) \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
progs.h: progs.pl
 | 
			
		||||
	$(PERL) progs.pl $(E_EXE) >progs.h
 | 
			
		||||
@@ -750,13 +752,14 @@ s_cb.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
s_cb.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
s_cb.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
s_cb.o: ../include/openssl/pq_compat.h ../include/openssl/pqueue.h
 | 
			
		||||
s_cb.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
s_cb.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
s_cb.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
s_cb.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
s_cb.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
s_cb.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
s_cb.o: ../include/openssl/x509v3.h apps.h s_apps.h s_cb.c
 | 
			
		||||
s_cb.o: ../include/openssl/rand.h ../include/openssl/safestack.h
 | 
			
		||||
s_cb.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
s_cb.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_cb.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_cb.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
s_cb.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
s_cb.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
s_cb.o: s_apps.h s_cb.c
 | 
			
		||||
s_client.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
s_client.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
s_client.o: ../include/openssl/comp.h ../include/openssl/conf.h
 | 
			
		||||
@@ -805,28 +808,28 @@ s_server.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
s_server.o: ../include/openssl/txt_db.h ../include/openssl/ui.h
 | 
			
		||||
s_server.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
s_server.o: ../include/openssl/x509v3.h apps.h s_apps.h s_server.c timeouts.h
 | 
			
		||||
s_socket.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
s_socket.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
s_socket.o: ../include/openssl/comp.h ../include/openssl/conf.h
 | 
			
		||||
s_socket.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h
 | 
			
		||||
s_socket.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
 | 
			
		||||
s_socket.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
 | 
			
		||||
s_socket.o: ../include/openssl/engine.h ../include/openssl/evp.h
 | 
			
		||||
s_socket.o: ../include/openssl/fips.h ../include/openssl/hmac.h
 | 
			
		||||
s_socket.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
 | 
			
		||||
s_socket.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
 | 
			
		||||
s_socket.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
 | 
			
		||||
s_socket.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
s_socket.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
s_socket.o: ../include/openssl/pkcs7.h ../include/openssl/pq_compat.h
 | 
			
		||||
s_socket.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
s_socket.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
s_socket.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_socket.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_socket.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
s_socket.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
s_socket.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
s_socket.o: s_apps.h s_socket.c
 | 
			
		||||
s_socket.o: ../e_os.h ../e_os2.h ../include/openssl/asn1.h
 | 
			
		||||
s_socket.o: ../include/openssl/bio.h ../include/openssl/bn.h
 | 
			
		||||
s_socket.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
s_socket.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
s_socket.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h
 | 
			
		||||
s_socket.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
 | 
			
		||||
s_socket.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
 | 
			
		||||
s_socket.o: ../include/openssl/evp.h ../include/openssl/fips.h
 | 
			
		||||
s_socket.o: ../include/openssl/hmac.h ../include/openssl/kssl.h
 | 
			
		||||
s_socket.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
 | 
			
		||||
s_socket.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
 | 
			
		||||
s_socket.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
s_socket.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
s_socket.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
s_socket.o: ../include/openssl/pq_compat.h ../include/openssl/pqueue.h
 | 
			
		||||
s_socket.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
s_socket.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
s_socket.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
s_socket.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
s_socket.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
s_socket.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
s_socket.o: ../include/openssl/x509v3.h apps.h s_apps.h s_socket.c
 | 
			
		||||
s_time.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
s_time.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
s_time.o: ../include/openssl/comp.h ../include/openssl/conf.h
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										32
									
								
								apps/apps.c
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								apps/apps.c
									
									
									
									
									
								
							@@ -351,18 +351,19 @@ void program_name(char *in, char *out, int size)
 | 
			
		||||
 | 
			
		||||
int chopup_args(ARGS *arg, char *buf, int *argc, char **argv[])
 | 
			
		||||
	{
 | 
			
		||||
	int num,len,i;
 | 
			
		||||
	int num,i;
 | 
			
		||||
	char *p;
 | 
			
		||||
 | 
			
		||||
	*argc=0;
 | 
			
		||||
	*argv=NULL;
 | 
			
		||||
 | 
			
		||||
	len=strlen(buf);
 | 
			
		||||
	i=0;
 | 
			
		||||
	if (arg->count == 0)
 | 
			
		||||
		{
 | 
			
		||||
		arg->count=20;
 | 
			
		||||
		arg->data=(char **)OPENSSL_malloc(sizeof(char *)*arg->count);
 | 
			
		||||
		if (arg->data == NULL)
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
	for (i=0; i<arg->count; i++)
 | 
			
		||||
		arg->data[i]=NULL;
 | 
			
		||||
@@ -559,12 +560,12 @@ int password_callback(char *buf, int bufsiz, int verify,
 | 
			
		||||
 | 
			
		||||
		if (ok >= 0)
 | 
			
		||||
			ok = UI_add_input_string(ui,prompt,ui_flags,buf,
 | 
			
		||||
				PW_MIN_LENGTH,BUFSIZ-1);
 | 
			
		||||
				PW_MIN_LENGTH,bufsiz-1);
 | 
			
		||||
		if (ok >= 0 && verify)
 | 
			
		||||
			{
 | 
			
		||||
			buff = (char *)OPENSSL_malloc(bufsiz);
 | 
			
		||||
			ok = UI_add_verify_string(ui,prompt,ui_flags,buff,
 | 
			
		||||
				PW_MIN_LENGTH,BUFSIZ-1, buf);
 | 
			
		||||
				PW_MIN_LENGTH,bufsiz-1, buf);
 | 
			
		||||
			}
 | 
			
		||||
		if (ok >= 0)
 | 
			
		||||
			do
 | 
			
		||||
@@ -866,10 +867,17 @@ EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
 | 
			
		||||
	if (format == FORMAT_ENGINE)
 | 
			
		||||
		{
 | 
			
		||||
		if (!e)
 | 
			
		||||
			BIO_printf(bio_err,"no engine specified\n");
 | 
			
		||||
			BIO_printf(err,"no engine specified\n");
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			pkey = ENGINE_load_private_key(e, file,
 | 
			
		||||
				ui_method, &cb_data);
 | 
			
		||||
			if (!pkey) 
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(err,"cannot load %s from engine\n",key_descrip);
 | 
			
		||||
				ERR_print_errors(err);
 | 
			
		||||
				}	
 | 
			
		||||
			}
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -919,8 +927,11 @@ EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
 | 
			
		||||
		}
 | 
			
		||||
 end:
 | 
			
		||||
	if (key != NULL) BIO_free(key);
 | 
			
		||||
	if (pkey == NULL)
 | 
			
		||||
	if (pkey == NULL) 
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(err,"unable to load %s\n", key_descrip);
 | 
			
		||||
		ERR_print_errors(err);
 | 
			
		||||
		}	
 | 
			
		||||
	return(pkey);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1420,6 +1431,8 @@ char *make_config_name()
 | 
			
		||||
 | 
			
		||||
	len=strlen(t)+strlen(OPENSSL_CONF)+2;
 | 
			
		||||
	p=OPENSSL_malloc(len);
 | 
			
		||||
	if (p == NULL)
 | 
			
		||||
		return NULL;
 | 
			
		||||
	BUF_strlcpy(p,t,len);
 | 
			
		||||
#ifndef OPENSSL_SYS_VMS
 | 
			
		||||
	BUF_strlcat(p,"/",len);
 | 
			
		||||
@@ -2043,7 +2056,7 @@ X509_NAME *parse_name(char *subject, long chtype, int multirdn)
 | 
			
		||||
	X509_NAME *n = NULL;
 | 
			
		||||
	int nid;
 | 
			
		||||
 | 
			
		||||
	if (!buf || !ne_types || !ne_values)
 | 
			
		||||
	if (!buf || !ne_types || !ne_values || !mval)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "malloc error\n");
 | 
			
		||||
		goto error;
 | 
			
		||||
@@ -2147,6 +2160,7 @@ X509_NAME *parse_name(char *subject, long chtype, int multirdn)
 | 
			
		||||
	OPENSSL_free(ne_values);
 | 
			
		||||
	OPENSSL_free(ne_types);
 | 
			
		||||
	OPENSSL_free(buf);
 | 
			
		||||
	OPENSSL_free(mval);
 | 
			
		||||
	return n;
 | 
			
		||||
 | 
			
		||||
error:
 | 
			
		||||
@@ -2155,6 +2169,8 @@ error:
 | 
			
		||||
		OPENSSL_free(ne_values);
 | 
			
		||||
	if (ne_types)
 | 
			
		||||
		OPENSSL_free(ne_types);
 | 
			
		||||
	if (mval)
 | 
			
		||||
		OPENSSL_free(mval);
 | 
			
		||||
	if (buf)
 | 
			
		||||
		OPENSSL_free(buf);
 | 
			
		||||
	return NULL;
 | 
			
		||||
@@ -2261,6 +2277,8 @@ int args_verify(char ***pargs, int *pargc,
 | 
			
		||||
		flags |= X509_V_FLAG_X509_STRICT;
 | 
			
		||||
	else if (!strcmp(arg, "-policy_print"))
 | 
			
		||||
		flags |= X509_V_FLAG_NOTIFY_POLICY;
 | 
			
		||||
	else if (!strcmp(arg, "-check_ss_sig"))
 | 
			
		||||
		flags |= X509_V_FLAG_CHECK_SS_SIGNATURE;
 | 
			
		||||
	else
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -408,6 +408,7 @@ static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf)
 | 
			
		||||
 | 
			
		||||
	atyp = ASN1_generate_nconf(genstr, cnf);
 | 
			
		||||
	NCONF_free(cnf);
 | 
			
		||||
	cnf = NULL;
 | 
			
		||||
 | 
			
		||||
	if (!atyp)
 | 
			
		||||
		return -1;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										74
									
								
								apps/ca.c
									
									
									
									
									
								
							
							
						
						
									
										74
									
								
								apps/ca.c
									
									
									
									
									
								
							@@ -216,7 +216,6 @@ static int certify_spkac(X509 **xret, char *infile,EVP_PKEY *pkey,X509 *x509,
 | 
			
		||||
			 char *startdate, char *enddate, long days, char *ext_sect,
 | 
			
		||||
			 CONF *conf, int verbose, unsigned long certopt, 
 | 
			
		||||
			 unsigned long nameopt, int default_op, int ext_copy);
 | 
			
		||||
static int fix_data(int nid, int *type);
 | 
			
		||||
static void write_new_certificate(BIO *bp, X509 *x, int output_der, int notext);
 | 
			
		||||
static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst,
 | 
			
		||||
	STACK_OF(CONF_VALUE) *policy, CA_DB *db, BIGNUM *serial,char *subj,unsigned long chtype, int multirdn,
 | 
			
		||||
@@ -227,7 +226,7 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst,
 | 
			
		||||
static int do_revoke(X509 *x509, CA_DB *db, int ext, char *extval);
 | 
			
		||||
static int get_certificate_status(const char *ser_status, CA_DB *db);
 | 
			
		||||
static int do_updatedb(CA_DB *db);
 | 
			
		||||
static int check_time_format(char *str);
 | 
			
		||||
static int check_time_format(const char *str);
 | 
			
		||||
char *make_revocation_str(int rev_type, char *rev_arg);
 | 
			
		||||
int make_revoked(X509_REVOKED *rev, const char *str);
 | 
			
		||||
int old_entry_print(BIO *bp, ASN1_OBJECT *obj, ASN1_STRING *str);
 | 
			
		||||
@@ -858,8 +857,8 @@ bad:
 | 
			
		||||
			perror(outdir);
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
#ifdef S_IFDIR
 | 
			
		||||
		if (!(sb.st_mode & S_IFDIR))
 | 
			
		||||
#ifdef S_ISDIR
 | 
			
		||||
		if (!S_ISDIR(sb.st_mode))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"%s need to be a directory\n",outdir);
 | 
			
		||||
			perror(outdir);
 | 
			
		||||
@@ -895,7 +894,7 @@ bad:
 | 
			
		||||
			BIO_printf(bio_err," in entry %d\n", i+1);
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
		if (!check_time_format((char *)pp[DB_exp_date]))
 | 
			
		||||
		if (!check_time_format(pp[DB_exp_date]))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"entry %d: invalid expiry date\n",i+1);
 | 
			
		||||
			goto err;
 | 
			
		||||
@@ -1249,7 +1248,12 @@ bad:
 | 
			
		||||
				BIO_printf(bio_err,"\n%d out of %d certificate requests certified, commit? [y/n]",total_done,total);
 | 
			
		||||
				(void)BIO_flush(bio_err);
 | 
			
		||||
				buf[0][0]='\0';
 | 
			
		||||
				fgets(buf[0],10,stdin);
 | 
			
		||||
				if (!fgets(buf[0],10,stdin))
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,"CERTIFICATION CANCELED: I/O error\n"); 
 | 
			
		||||
					ret=0;
 | 
			
		||||
					goto err;
 | 
			
		||||
					}
 | 
			
		||||
				if ((buf[0][0] != 'y') && (buf[0][0] != 'Y'))
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,"CERTIFICATION CANCELED\n"); 
 | 
			
		||||
@@ -1578,12 +1582,14 @@ static int certify(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509,
 | 
			
		||||
		{
 | 
			
		||||
		ok=0;
 | 
			
		||||
		BIO_printf(bio_err,"Signature verification problems....\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
	if (i == 0)
 | 
			
		||||
		{
 | 
			
		||||
		ok=0;
 | 
			
		||||
		BIO_printf(bio_err,"Signature did not match the certificate request\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
@@ -2091,7 +2097,7 @@ again2:
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err,"Certificate is to be certified until ");
 | 
			
		||||
	ASN1_UTCTIME_print(bio_err,X509_get_notAfter(ret));
 | 
			
		||||
	ASN1_TIME_print(bio_err,X509_get_notAfter(ret));
 | 
			
		||||
	if (days) BIO_printf(bio_err," (%ld days)",days);
 | 
			
		||||
	BIO_printf(bio_err, "\n");
 | 
			
		||||
 | 
			
		||||
@@ -2101,7 +2107,12 @@ again2:
 | 
			
		||||
		BIO_printf(bio_err,"Sign the certificate? [y/n]:");
 | 
			
		||||
		(void)BIO_flush(bio_err);
 | 
			
		||||
		buf[0]='\0';
 | 
			
		||||
		fgets(buf,sizeof(buf)-1,stdin);
 | 
			
		||||
		if (!fgets(buf,sizeof(buf)-1,stdin))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"CERTIFICATE WILL NOT BE CERTIFIED: I/O error\n");
 | 
			
		||||
			ok=0;
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
		if (!((buf[0] == 'y') || (buf[0] == 'Y')))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"CERTIFICATE WILL NOT BE CERTIFIED\n");
 | 
			
		||||
@@ -2317,25 +2328,9 @@ static int certify_spkac(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509,
 | 
			
		||||
			continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		if ((nid == NID_pkcs9_emailAddress) && (email_dn == 0))
 | 
			
		||||
			continue;
 | 
			
		||||
		*/
 | 
			
		||||
		
 | 
			
		||||
		j=ASN1_PRINTABLE_type((unsigned char *)buf,-1);
 | 
			
		||||
		if (fix_data(nid, &j) == 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				"invalid characters in string %s\n",buf);
 | 
			
		||||
		if (!X509_NAME_add_entry_by_NID(n, nid, chtype,
 | 
			
		||||
				(unsigned char *)buf, -1, -1, 0))
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if ((ne=X509_NAME_ENTRY_create_by_NID(&ne,nid,j,
 | 
			
		||||
			(unsigned char *)buf,
 | 
			
		||||
			strlen(buf))) == NULL)
 | 
			
		||||
			goto err;
 | 
			
		||||
 | 
			
		||||
		if (!X509_NAME_add_entry(n,ne,-1, 0)) goto err;
 | 
			
		||||
		}
 | 
			
		||||
	if (spki == NULL)
 | 
			
		||||
		{
 | 
			
		||||
@@ -2378,29 +2373,17 @@ err:
 | 
			
		||||
	return(ok);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int fix_data(int nid, int *type)
 | 
			
		||||
static int check_time_format(const char *str)
 | 
			
		||||
	{
 | 
			
		||||
	if (nid == NID_pkcs9_emailAddress)
 | 
			
		||||
		*type=V_ASN1_IA5STRING;
 | 
			
		||||
	if ((nid == NID_commonName) && (*type == V_ASN1_IA5STRING))
 | 
			
		||||
		*type=V_ASN1_T61STRING;
 | 
			
		||||
	if ((nid == NID_pkcs9_challengePassword) && (*type == V_ASN1_IA5STRING))
 | 
			
		||||
		*type=V_ASN1_T61STRING;
 | 
			
		||||
	if ((nid == NID_pkcs9_unstructuredName) && (*type == V_ASN1_T61STRING))
 | 
			
		||||
		return(0);
 | 
			
		||||
	if (nid == NID_pkcs9_unstructuredName)
 | 
			
		||||
		*type=V_ASN1_IA5STRING;
 | 
			
		||||
	return(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int check_time_format(char *str)
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_UTCTIME tm;
 | 
			
		||||
	ASN1_TIME tm;
 | 
			
		||||
 | 
			
		||||
	tm.data=(unsigned char *)str;
 | 
			
		||||
	tm.length=strlen(str);
 | 
			
		||||
	tm.type=V_ASN1_UTCTIME;
 | 
			
		||||
	return(ASN1_UTCTIME_check(&tm));
 | 
			
		||||
	if (ASN1_TIME_check(&tm))
 | 
			
		||||
		return 1;
 | 
			
		||||
	tm.type=V_ASN1_GENERALIZEDTIME;
 | 
			
		||||
	return ASN1_TIME_check(&tm);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int do_revoke(X509 *x509, CA_DB *db, int type, char *value)
 | 
			
		||||
@@ -2770,6 +2753,9 @@ char *make_revocation_str(int rev_type, char *rev_arg)
 | 
			
		||||
 | 
			
		||||
	revtm = X509_gmtime_adj(NULL, 0);
 | 
			
		||||
 | 
			
		||||
	if (!revtm)
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	i = revtm->length + 1;
 | 
			
		||||
 | 
			
		||||
	if (reason) i += strlen(reason) + 1;
 | 
			
		||||
 
 | 
			
		||||
@@ -226,6 +226,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		else if (!strcmp(*args,"-camellia256"))
 | 
			
		||||
				cipher = EVP_camellia_256_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
		else if (!strcmp (*args, "-debug_decrypt")) 
 | 
			
		||||
				flags |= CMS_DEBUG_DECRYPT;
 | 
			
		||||
		else if (!strcmp (*args, "-text")) 
 | 
			
		||||
				flags |= CMS_TEXT;
 | 
			
		||||
		else if (!strcmp (*args, "-nointern")) 
 | 
			
		||||
@@ -611,7 +613,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf (bio_err, "-certsout file certificate output file\n");
 | 
			
		||||
		BIO_printf (bio_err, "-signer file   signer certificate file\n");
 | 
			
		||||
		BIO_printf (bio_err, "-recip  file   recipient certificate file for decryption\n");
 | 
			
		||||
		BIO_printf (bio_err, "-skeyid        use subject key identifier\n");
 | 
			
		||||
		BIO_printf (bio_err, "-keyid         use subject key identifier\n");
 | 
			
		||||
		BIO_printf (bio_err, "-in file       input file\n");
 | 
			
		||||
		BIO_printf (bio_err, "-inform arg    input format SMIME (default), PEM or DER\n");
 | 
			
		||||
		BIO_printf (bio_err, "-inkey file    input private key (if not signer or recipient)\n");
 | 
			
		||||
@@ -1013,6 +1015,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	ret = 4;
 | 
			
		||||
	if (operation == SMIME_DECRYPT)
 | 
			
		||||
		{
 | 
			
		||||
		if (flags & CMS_DEBUG_DECRYPT)
 | 
			
		||||
			CMS_decrypt(cms, NULL, NULL, NULL, NULL, flags);
 | 
			
		||||
 | 
			
		||||
		if (secret_key)
 | 
			
		||||
			{
 | 
			
		||||
 
 | 
			
		||||
@@ -142,7 +142,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			if(!certflst) certflst = sk_new_null();
 | 
			
		||||
			sk_push(certflst,*(++argv));
 | 
			
		||||
			if (!certflst)
 | 
			
		||||
				goto end;
 | 
			
		||||
			if (!sk_push(certflst,*(++argv)))
 | 
			
		||||
				{
 | 
			
		||||
				sk_free(certflst);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
 
 | 
			
		||||
@@ -88,9 +88,6 @@ 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;
 | 
			
		||||
@@ -189,7 +186,7 @@ bad:
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
 
 | 
			
		||||
@@ -149,9 +149,6 @@ 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
 | 
			
		||||
@@ -270,7 +267,7 @@ bad:
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (g && !num)
 | 
			
		||||
@@ -335,7 +332,6 @@ bad:
 | 
			
		||||
			BIO_printf(bio_err,"This is going to take a long time\n");
 | 
			
		||||
			if(!dh || !DH_generate_parameters_ex(dh, num, g, &cb))
 | 
			
		||||
				{
 | 
			
		||||
				if(dh) DH_free(dh);
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
 
 | 
			
		||||
@@ -65,11 +65,11 @@
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/dsa.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dsa.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dsa_main
 | 
			
		||||
 
 | 
			
		||||
@@ -111,9 +111,6 @@ 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;
 | 
			
		||||
@@ -278,7 +275,7 @@ bad:
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (need_rand)
 | 
			
		||||
@@ -357,12 +354,10 @@ bad:
 | 
			
		||||
	if (C)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char *data;
 | 
			
		||||
		int l,len,bits_p,bits_q,bits_g;
 | 
			
		||||
		int l,len,bits_p;
 | 
			
		||||
 | 
			
		||||
		len=BN_num_bytes(dsa->p);
 | 
			
		||||
		bits_p=BN_num_bits(dsa->p);
 | 
			
		||||
		bits_q=BN_num_bits(dsa->q);
 | 
			
		||||
		bits_g=BN_num_bits(dsa->g);
 | 
			
		||||
		data=(unsigned char *)OPENSSL_malloc(len+20);
 | 
			
		||||
		if (data == NULL)
 | 
			
		||||
			{
 | 
			
		||||
@@ -475,4 +470,10 @@ static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
#endif
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_DSA */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -85,9 +85,6 @@ int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE 	*e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int 	ret = 1;
 | 
			
		||||
	EC_KEY 	*eckey = NULL;
 | 
			
		||||
	const EC_GROUP *group;
 | 
			
		||||
@@ -254,7 +251,7 @@ bad:
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) 
 | 
			
		||||
 
 | 
			
		||||
@@ -129,9 +129,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	char	*infile = NULL, *outfile = NULL, *prog;
 | 
			
		||||
	BIO 	*in = NULL, *out = NULL;
 | 
			
		||||
	int 	informat, outformat, noout = 0, C = 0, ret = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE	*e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	char	*engine = NULL;
 | 
			
		||||
 | 
			
		||||
	BIGNUM	*ec_p = NULL, *ec_a = NULL, *ec_b = NULL,
 | 
			
		||||
@@ -340,7 +337,7 @@ bad:
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
	setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (list_curves)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								apps/enc.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								apps/enc.c
									
									
									
									
									
								
							@@ -100,9 +100,6 @@ 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[sizeof magic-1];
 | 
			
		||||
	char *strbuf=NULL;
 | 
			
		||||
@@ -226,7 +223,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				goto bad;
 | 
			
		||||
				}
 | 
			
		||||
			buf[0]='\0';
 | 
			
		||||
			fgets(buf,sizeof buf,infile);
 | 
			
		||||
			if (!fgets(buf,sizeof buf,infile))
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"unable to read key from '%s'\n",
 | 
			
		||||
					file);
 | 
			
		||||
				goto bad;
 | 
			
		||||
				}
 | 
			
		||||
			fclose(infile);
 | 
			
		||||
			i=strlen(buf);
 | 
			
		||||
			if ((i > 0) &&
 | 
			
		||||
@@ -306,7 +308,7 @@ bad:
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (md && (dgst=EVP_get_digestbyname(md)) == NULL)
 | 
			
		||||
 
 | 
			
		||||
@@ -89,9 +89,6 @@ 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;
 | 
			
		||||
@@ -163,7 +160,7 @@ bad:
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
 
 | 
			
		||||
@@ -78,9 +78,6 @@ 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;
 | 
			
		||||
@@ -206,7 +203,7 @@ bad:
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
 | 
			
		||||
@@ -279,4 +276,10 @@ end:
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_DSA */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -89,9 +89,6 @@ int MAIN(int, char **);
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	BN_GENCB cb;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	int i,num=DEFBITS;
 | 
			
		||||
	long l;
 | 
			
		||||
@@ -106,9 +103,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	char *inrand=NULL;
 | 
			
		||||
	BIO *out=NULL;
 | 
			
		||||
	BIGNUM *bn = BN_new();
 | 
			
		||||
	RSA *rsa = RSA_new();
 | 
			
		||||
	RSA *rsa = NULL;
 | 
			
		||||
 | 
			
		||||
	if(!bn || !rsa) goto err;
 | 
			
		||||
	if(!bn) goto err;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
	BN_GENCB_set(&cb, genrsa_cb, bio_err);
 | 
			
		||||
@@ -235,7 +232,7 @@ bad:
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
@@ -269,6 +266,10 @@ bad:
 | 
			
		||||
	BIO_printf(bio_err,"Generating RSA private key, %d bit long modulus\n",
 | 
			
		||||
		num);
 | 
			
		||||
 | 
			
		||||
	rsa = RSA_new();
 | 
			
		||||
	if (!rsa)
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	if (use_x931)
 | 
			
		||||
		{
 | 
			
		||||
		BIGNUM *pubexp;
 | 
			
		||||
 
 | 
			
		||||
@@ -5,13 +5,23 @@ $! Time of creation: 22-MAY-1998 10:13
 | 
			
		||||
$!
 | 
			
		||||
$! P1	root of the directory tree
 | 
			
		||||
$!
 | 
			
		||||
$
 | 
			
		||||
$	IF P1 .EQS. ""
 | 
			
		||||
$	THEN
 | 
			
		||||
$	    WRITE SYS$OUTPUT "First argument missing."
 | 
			
		||||
$	    WRITE SYS$OUTPUT "Should be the directory where you want things installed."
 | 
			
		||||
$	    WRITE SYS$OUTPUT -
 | 
			
		||||
		  "Should be the directory where you want things installed."
 | 
			
		||||
$	    EXIT
 | 
			
		||||
$	ENDIF
 | 
			
		||||
$
 | 
			
		||||
$	IF (F$GETSYI("CPU").LT.128)
 | 
			
		||||
$	THEN
 | 
			
		||||
$	    ARCH := VAX
 | 
			
		||||
$	ELSE
 | 
			
		||||
$	    ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
 | 
			
		||||
$	    IF (ARCH .EQS. "") THEN ARCH = "UNK"
 | 
			
		||||
$	ENDIF
 | 
			
		||||
$
 | 
			
		||||
$	ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
 | 
			
		||||
$	ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
 | 
			
		||||
$	ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
 | 
			
		||||
@@ -19,23 +29,16 @@ $	ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
 | 
			
		||||
$	ROOT = ROOT_DEV + "[" + ROOT_DIR
 | 
			
		||||
$
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLVEXE WRK_SSLROOT:[VAX_EXE]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLAEXE WRK_SSLROOT:[ALPHA_EXE]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLLIB WRK_SSLROOT:[LIB]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLEXE WRK_SSLROOT:['ARCH'_EXE]
 | 
			
		||||
$
 | 
			
		||||
$	IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLROOT:[000000]
 | 
			
		||||
$	IF F$PARSE("WRK_SSLVEXE:") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLVEXE:
 | 
			
		||||
$	IF F$PARSE("WRK_SSLAEXE:") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLAEXE:
 | 
			
		||||
$	IF F$PARSE("WRK_SSLLIB:") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLLIB:
 | 
			
		||||
$	IF F$PARSE("WRK_SSLEXE:") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLEXE:
 | 
			
		||||
$
 | 
			
		||||
$	EXE := openssl
 | 
			
		||||
$
 | 
			
		||||
$	VEXE_DIR := [-.VAX.EXE.APPS]
 | 
			
		||||
$	AEXE_DIR := [-.AXP.EXE.APPS]
 | 
			
		||||
$	EXE_DIR := [-.'ARCH'.EXE.APPS]
 | 
			
		||||
$
 | 
			
		||||
$	I = 0
 | 
			
		||||
$ LOOP_EXE: 
 | 
			
		||||
@@ -43,25 +46,18 @@ $	E = F$EDIT(F$ELEMENT(I, ",", EXE),"TRIM")
 | 
			
		||||
$	I = I + 1
 | 
			
		||||
$	IF E .EQS. "," THEN GOTO LOOP_EXE_END
 | 
			
		||||
$	SET NOON
 | 
			
		||||
$	IF F$SEARCH(VEXE_DIR+E+".EXE") .NES. ""
 | 
			
		||||
$	IF F$SEARCH(EXE_DIR+E+".EXE") .NES. ""
 | 
			
		||||
$	THEN
 | 
			
		||||
$	  COPY 'VEXE_DIR''E'.EXE WRK_SSLVEXE:'E'.EXE/log
 | 
			
		||||
$	  SET FILE/PROT=W:RE WRK_SSLVEXE:'E'.EXE
 | 
			
		||||
$	ENDIF
 | 
			
		||||
$	IF F$SEARCH(AEXE_DIR+E+".EXE") .NES. ""
 | 
			
		||||
$	THEN
 | 
			
		||||
$	  COPY 'AEXE_DIR''E'.EXE WRK_SSLAEXE:'E'.EXE/log
 | 
			
		||||
$	  SET FILE/PROT=W:RE WRK_SSLAEXE:'E'.EXE
 | 
			
		||||
$	  COPY 'EXE_DIR''E'.EXE WRK_SSLEXE:'E'.EXE/log
 | 
			
		||||
$	  SET FILE/PROT=W:RE WRK_SSLEXE:'E'.EXE
 | 
			
		||||
$	ENDIF
 | 
			
		||||
$	SET ON
 | 
			
		||||
$	GOTO LOOP_EXE
 | 
			
		||||
$ LOOP_EXE_END:
 | 
			
		||||
$
 | 
			
		||||
$	SET NOON
 | 
			
		||||
$	COPY CA.COM WRK_SSLAEXE:CA.COM/LOG
 | 
			
		||||
$	SET FILE/PROT=W:RE WRK_SSLAEXE:CA.COM
 | 
			
		||||
$	COPY CA.COM WRK_SSLVEXE:CA.COM/LOG
 | 
			
		||||
$	SET FILE/PROT=W:RE WRK_SSLVEXE:CA.COM
 | 
			
		||||
$	COPY CA.COM WRK_SSLEXE:CA.COM/LOG
 | 
			
		||||
$	SET FILE/PROT=W:RE WRK_SSLEXE:CA.COM
 | 
			
		||||
$	COPY OPENSSL-VMS.CNF WRK_SSLROOT:[000000]OPENSSL.CNF/LOG
 | 
			
		||||
$	SET FILE/PROT=W:R WRK_SSLROOT:[000000]OPENSSL.CNF
 | 
			
		||||
$	SET ON
 | 
			
		||||
 
 | 
			
		||||
@@ -6,11 +6,12 @@ $!               A-Com Computing, Inc.
 | 
			
		||||
$!               byer@mail.all-net.net
 | 
			
		||||
$!
 | 
			
		||||
$!  Changes by Richard Levitte <richard@levitte.org>
 | 
			
		||||
$!             Zoltan Arpadffy <zoli@polarhome.com>   
 | 
			
		||||
$!
 | 
			
		||||
$!  This command files compiles and creates all the various different
 | 
			
		||||
$!  "application" programs for the different types of encryption for OpenSSL.
 | 
			
		||||
$!  The EXE's are placed in the directory [.xxx.EXE.APPS] where "xxx" denotes
 | 
			
		||||
$!  either AXP or VAX depending on your machine architecture.
 | 
			
		||||
$!  ALPHA, IA64 or VAX, depending on your machine architecture.
 | 
			
		||||
$!
 | 
			
		||||
$!  It was written so it would try to determine what "C" compiler to
 | 
			
		||||
$!  use or you can specify which "C" compiler to use.
 | 
			
		||||
@@ -46,20 +47,21 @@ $ TCPIP_LIB = ""
 | 
			
		||||
$!
 | 
			
		||||
$! Check What Architecture We Are Using.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (F$GETSYI("CPU").GE.128)
 | 
			
		||||
$ IF (F$GETSYI("CPU").LT.128)
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  The Architecture Is AXP.
 | 
			
		||||
$!  The Architecture Is VAX.
 | 
			
		||||
$!
 | 
			
		||||
$   ARCH := AXP
 | 
			
		||||
$   ARCH := VAX
 | 
			
		||||
$!
 | 
			
		||||
$! Else...
 | 
			
		||||
$!
 | 
			
		||||
$ ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!  The Architecture Is VAX.
 | 
			
		||||
$!  The Architecture Is Alpha, IA64 or whatever comes in the future.
 | 
			
		||||
$!
 | 
			
		||||
$   ARCH := VAX
 | 
			
		||||
$   ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
 | 
			
		||||
$   IF (ARCH .EQS. "") THEN ARCH = "UNK"
 | 
			
		||||
$!
 | 
			
		||||
$! End The Architecture Check.
 | 
			
		||||
$!
 | 
			
		||||
@@ -68,22 +70,6 @@ $!
 | 
			
		||||
$! Define what programs should be compiled
 | 
			
		||||
$!
 | 
			
		||||
$ PROGRAMS := OPENSSL
 | 
			
		||||
$!$ PROGRAMS := VERIFY,ASN1PARS,REQ,DGST,DH,ENC,PASSWD,GENDH,ERRSTR,CA,CRL,-
 | 
			
		||||
$!	      RSA,DSA,DSAPARAM,-
 | 
			
		||||
$!	      X509,GENRSA,GENDSA,S_SERVER,S_CLIENT,SPEED,-
 | 
			
		||||
$!	      S_TIME,VERSION,PKCS7,CRL2P7,SESS_ID,CIPHERS,NSEQ,
 | 
			
		||||
$!
 | 
			
		||||
$! Check To Make Sure We Have Valid Command Line Parameters.
 | 
			
		||||
$!
 | 
			
		||||
$ GOSUB CHECK_OPTIONS
 | 
			
		||||
$!
 | 
			
		||||
$! Initialise logical names and such
 | 
			
		||||
$!
 | 
			
		||||
$ GOSUB INITIALISE
 | 
			
		||||
$!
 | 
			
		||||
$! Tell The User What Kind of Machine We Run On.
 | 
			
		||||
$!
 | 
			
		||||
$ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine."
 | 
			
		||||
$!
 | 
			
		||||
$! Define The CRYPTO Library.
 | 
			
		||||
$!
 | 
			
		||||
@@ -97,6 +83,22 @@ $! Define The OBJ Directory.
 | 
			
		||||
$!
 | 
			
		||||
$ OBJ_DIR := SYS$DISK:[-.'ARCH'.OBJ.APPS]
 | 
			
		||||
$!
 | 
			
		||||
$! Define The EXE Directory.
 | 
			
		||||
$!
 | 
			
		||||
$ EXE_DIR := SYS$DISK:[-.'ARCH'.EXE.APPS]
 | 
			
		||||
$!
 | 
			
		||||
$! Check To Make Sure We Have Valid Command Line Parameters.
 | 
			
		||||
$!
 | 
			
		||||
$ GOSUB CHECK_OPTIONS
 | 
			
		||||
$!
 | 
			
		||||
$! Initialise logical names and such
 | 
			
		||||
$!
 | 
			
		||||
$ GOSUB INITIALISE
 | 
			
		||||
$!
 | 
			
		||||
$! Tell The User What Kind of Machine We Run On.
 | 
			
		||||
$!
 | 
			
		||||
$ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine."
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If The OBJ Directory Exists.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (F$PARSE(OBJ_DIR).EQS."")
 | 
			
		||||
@@ -110,10 +112,6 @@ $! End The OBJ Directory Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Define The EXE Directory.
 | 
			
		||||
$!
 | 
			
		||||
$ EXE_DIR := SYS$DISK:[-.'ARCH'.EXE.APPS]
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If The EXE Directory Exists.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (F$PARSE(EXE_DIR).EQS."")
 | 
			
		||||
@@ -136,140 +134,172 @@ $!
 | 
			
		||||
$ GOSUB CHECK_OPT_FILE
 | 
			
		||||
$!
 | 
			
		||||
$! Define The Application Files.
 | 
			
		||||
$! NOTE: Some might think this list ugly.  However, it's made this way to
 | 
			
		||||
$! reflect the E_OBJ variable in Makefile as closely as possible, thereby
 | 
			
		||||
$! making it fairly easy to verify that the lists are the same.
 | 
			
		||||
$!
 | 
			
		||||
$ LIB_FILES = "VERIFY;ASN1PARS;REQ;DGST;DH;DHPARAM;ENC;PASSWD;GENDH;ERRSTR;"+-
 | 
			
		||||
	      "CA;PKCS7;CRL2P7;CRL;"+-
 | 
			
		||||
	      "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;PRIME"
 | 
			
		||||
$ LIB_OPENSSL = "VERIFY,ASN1PARS,REQ,DGST,DH,DHPARAM,ENC,PASSWD,GENDH,ERRSTR,"+-
 | 
			
		||||
		"CA,PKCS7,CRL2P7,CRL,"+-
 | 
			
		||||
		"RSA,RSAUTL,DSA,DSAPARAM,EC,ECPARAM,"+-
 | 
			
		||||
		"X509,GENRSA,GENDSA,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,PRIME,CMS"
 | 
			
		||||
$ TCPIP_PROGRAMS = ",,"
 | 
			
		||||
$ IF COMPILER .EQS. "VAXC" THEN -
 | 
			
		||||
     TCPIP_PROGRAMS = ",OPENSSL,"
 | 
			
		||||
$!
 | 
			
		||||
$! Setup exceptional compilations
 | 
			
		||||
$!
 | 
			
		||||
$ COMPILEWITH_CC2 = ",S_SERVER,S_CLIENT,"
 | 
			
		||||
$ COMPILEWITH_CC2 = ",S_SOCKET,S_SERVER,S_CLIENT,"
 | 
			
		||||
$!
 | 
			
		||||
$ PHASE := LIB
 | 
			
		||||
$!
 | 
			
		||||
$ RESTART: 
 | 
			
		||||
$!
 | 
			
		||||
$!  Define A File Counter And Set It To "0".
 | 
			
		||||
$!  Define An App Counter And Set It To "0".
 | 
			
		||||
$!
 | 
			
		||||
$ FILE_COUNTER = 0
 | 
			
		||||
$ APP_COUNTER = 0
 | 
			
		||||
$!
 | 
			
		||||
$! Top Of The File Loop.
 | 
			
		||||
$!  Top Of The App Loop.
 | 
			
		||||
$!
 | 
			
		||||
$ NEXT_FILE:
 | 
			
		||||
$ NEXT_APP:
 | 
			
		||||
$!
 | 
			
		||||
$! O.K, Extract The File Name From The File List.
 | 
			
		||||
$!  Make The Application File Name
 | 
			
		||||
$!
 | 
			
		||||
$ FILE_NAME0 = F$EDIT(F$ELEMENT(FILE_COUNTER,";",'PHASE'_FILES),"TRIM")
 | 
			
		||||
$ FILE_NAME = F$EDIT(F$ELEMENT(0,",",FILE_NAME0),"TRIM")
 | 
			
		||||
$ EXTRA_OBJ = FILE_NAME0 - FILE_NAME
 | 
			
		||||
$ CURRENT_APP = F$EDIT(F$ELEMENT(APP_COUNTER,",",PROGRAMS),"TRIM")
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If We Are At The End Of The File List.
 | 
			
		||||
$!  Create The Executable File Name.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (FILE_NAME0.EQS.";")
 | 
			
		||||
$   EXE_FILE = EXE_DIR + CURRENT_APP + ".EXE"
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Are At The End Of The File List.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (CURRENT_APP.EQS.",")
 | 
			
		||||
$ THEN
 | 
			
		||||
$   IF (PHASE.EQS."LIB")
 | 
			
		||||
$   THEN
 | 
			
		||||
$     PHASE := APP
 | 
			
		||||
$     GOTO RESTART
 | 
			
		||||
$   ELSE
 | 
			
		||||
$     GOTO FILE_DONE
 | 
			
		||||
$     GOTO APP_DONE
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Increment The Counter.
 | 
			
		||||
$!  Increment The Counter.
 | 
			
		||||
$!
 | 
			
		||||
$ FILE_COUNTER = FILE_COUNTER + 1
 | 
			
		||||
$ APP_COUNTER = APP_COUNTER + 1
 | 
			
		||||
$!
 | 
			
		||||
$! Check to see if this program should actually be compiled
 | 
			
		||||
$!
 | 
			
		||||
$ IF PHASE .EQS. "APP" .AND. -
 | 
			
		||||
     ","+PROGRAMS+"," - (","+F$EDIT(FILE_NAME,"UPCASE")+",") .EQS. ","+PROGRAMS+","
 | 
			
		||||
$ THEN
 | 
			
		||||
$   GOTO NEXT_FILE
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Create The Source File Name.
 | 
			
		||||
$!
 | 
			
		||||
$ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C"
 | 
			
		||||
$!
 | 
			
		||||
$! Create The Object File Name.
 | 
			
		||||
$!
 | 
			
		||||
$ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
 | 
			
		||||
$!
 | 
			
		||||
$! Create The Executable File Name.
 | 
			
		||||
$!
 | 
			
		||||
$ EXE_FILE = EXE_DIR + FILE_NAME + ".EXE"
 | 
			
		||||
$ ON WARNING THEN GOTO NEXT_FILE
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If The File We Want To Compile Actually Exists.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (F$SEARCH(SOURCE_FILE).EQS."")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Tell The User That The File Dosen't Exist.
 | 
			
		||||
$!
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$   WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$!
 | 
			
		||||
$!  Exit The Build.
 | 
			
		||||
$!
 | 
			
		||||
$   GOTO EXIT
 | 
			
		||||
$!
 | 
			
		||||
$! End The File Exist Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Tell The User What We Are Building.
 | 
			
		||||
$!  Decide if we're building the object files or not.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (PHASE.EQS."LIB")
 | 
			
		||||
$ THEN
 | 
			
		||||
$   WRITE SYS$OUTPUT "Compiling The ",FILE_NAME,".C File."
 | 
			
		||||
$ ELSE
 | 
			
		||||
$   WRITE SYS$OUTPUT "Building The ",FILE_NAME," Application Program."
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Compile The File.
 | 
			
		||||
$!  Define A Library File Counter And Set It To "-1".
 | 
			
		||||
$!  -1 Means The Application File Name Is To Be Used.
 | 
			
		||||
$!
 | 
			
		||||
$ ON ERROR THEN GOTO NEXT_FILE
 | 
			
		||||
$ IF COMPILEWITH_CC2 - FILE_NAME .NES. COMPILEWITH_CC2
 | 
			
		||||
$ THEN
 | 
			
		||||
$   CC2/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
 | 
			
		||||
$ ELSE
 | 
			
		||||
$   CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$   LIB_COUNTER = -1
 | 
			
		||||
$!
 | 
			
		||||
$ ON WARNING THEN GOTO NEXT_FILE
 | 
			
		||||
$!  Create a .OPT file for the object files
 | 
			
		||||
$!
 | 
			
		||||
$ IF (PHASE.EQS."LIB") 
 | 
			
		||||
$ THEN 
 | 
			
		||||
$   GOTO NEXT_FILE
 | 
			
		||||
$   OPEN/WRITE OBJECTS 'EXE_DIR''CURRENT_APP'.OPT
 | 
			
		||||
$!
 | 
			
		||||
$!  Top Of The File Loop.
 | 
			
		||||
$!
 | 
			
		||||
$  NEXT_LIB:
 | 
			
		||||
$!
 | 
			
		||||
$!  O.K, Extract The File Name From The File List.
 | 
			
		||||
$!
 | 
			
		||||
$   IF LIB_COUNTER .GE. 0
 | 
			
		||||
$   THEN
 | 
			
		||||
$     FILE_NAME = F$EDIT(F$ELEMENT(LIB_COUNTER,",",LIB_'CURRENT_APP'),"TRIM")
 | 
			
		||||
$   ELSE
 | 
			
		||||
$     FILE_NAME = CURRENT_APP
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Are At The End Of The File List.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (FILE_NAME.EQS.",")
 | 
			
		||||
$   THEN
 | 
			
		||||
$     CLOSE OBJECTS
 | 
			
		||||
$     GOTO NEXT_APP
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Increment The Counter.
 | 
			
		||||
$!
 | 
			
		||||
$   LIB_COUNTER = LIB_COUNTER + 1
 | 
			
		||||
$!
 | 
			
		||||
$!  Create The Source File Name.
 | 
			
		||||
$!
 | 
			
		||||
$   SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C"
 | 
			
		||||
$!
 | 
			
		||||
$!  Create The Object File Name.
 | 
			
		||||
$!
 | 
			
		||||
$   OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
 | 
			
		||||
$   ON WARNING THEN GOTO NEXT_LIB
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If The File We Want To Compile Actually Exists.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (F$SEARCH(SOURCE_FILE).EQS."")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Tell The User That The File Dosen't Exist.
 | 
			
		||||
$!
 | 
			
		||||
$     WRITE SYS$OUTPUT ""
 | 
			
		||||
$     WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
 | 
			
		||||
$     WRITE SYS$OUTPUT ""
 | 
			
		||||
$!
 | 
			
		||||
$!    Exit The Build.
 | 
			
		||||
$!
 | 
			
		||||
$     GOTO EXIT
 | 
			
		||||
$!
 | 
			
		||||
$!  End The File Exist Check.
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Tell The User What We Are Building.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (PHASE.EQS."LIB")
 | 
			
		||||
$   THEN
 | 
			
		||||
$     WRITE SYS$OUTPUT "Compiling The ",FILE_NAME,".C File."
 | 
			
		||||
$   ELSE
 | 
			
		||||
$     WRITE SYS$OUTPUT "Building The ",FILE_NAME," Application Program."
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Compile The File.
 | 
			
		||||
$!
 | 
			
		||||
$   ON ERROR THEN GOTO NEXT_LIB
 | 
			
		||||
$   IF COMPILEWITH_CC2 - FILE_NAME .NES. COMPILEWITH_CC2
 | 
			
		||||
$   THEN
 | 
			
		||||
$     CC2/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
 | 
			
		||||
$   ELSE
 | 
			
		||||
$     CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$   WRITE OBJECTS OBJECT_FILE
 | 
			
		||||
$!
 | 
			
		||||
$   GOTO NEXT_LIB
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check if this program works well without a TCPIP library
 | 
			
		||||
$!
 | 
			
		||||
$ IF TCPIP_LIB .EQS. "" .AND. TCPIP_PROGRAMS - FILE_NAME .NES. TCPIP_PROGRAMS
 | 
			
		||||
$ IF TCPIP_LIB .EQS. "" .AND. TCPIP_PROGRAMS - CURRENT_APP .NES. TCPIP_PROGRAMS
 | 
			
		||||
$ THEN
 | 
			
		||||
$   WRITE SYS$OUTPUT FILE_NAME," needs a TCP/IP library.  Can't link.  Skipping..."
 | 
			
		||||
$   GOTO NEXT_FILE
 | 
			
		||||
$   WRITE SYS$OUTPUT CURRENT_APP," needs a TCP/IP library.  Can't link.  Skipping..."
 | 
			
		||||
$   GOTO NEXT_APP
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Link The Program.
 | 
			
		||||
$! Check To See If We Are To Link With A Specific TCP/IP Library.
 | 
			
		||||
$!
 | 
			
		||||
$ ON WARNING THEN GOTO NEXT_APP
 | 
			
		||||
$!
 | 
			
		||||
$ IF (TCPIP_LIB.NES."")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$! Don't Link With The RSAREF Routines And TCP/IP Library.
 | 
			
		||||
$!
 | 
			
		||||
$   LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
 | 
			
		||||
	'OBJECT_FILE''EXTRA_OBJ', -
 | 
			
		||||
	'EXE_DIR''CURRENT_APP'.OPT/OPTION, -
 | 
			
		||||
        'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
 | 
			
		||||
        'TCPIP_LIB','OPT_FILE'/OPTION
 | 
			
		||||
$!
 | 
			
		||||
@@ -280,7 +310,7 @@ $!
 | 
			
		||||
$! Don't Link With The RSAREF Routines And Link With A TCP/IP Library.
 | 
			
		||||
$!
 | 
			
		||||
$   LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
 | 
			
		||||
	'OBJECT_FILE''EXTRA_OBJ', -
 | 
			
		||||
	'EXE_DIR''CURRENT_APP'.OPT/OPTION, -
 | 
			
		||||
        'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
 | 
			
		||||
        'OPT_FILE'/OPTION
 | 
			
		||||
$!
 | 
			
		||||
@@ -290,11 +320,11 @@ $ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Go Back And Do It Again.
 | 
			
		||||
$!
 | 
			
		||||
$ GOTO NEXT_FILE
 | 
			
		||||
$ GOTO NEXT_APP
 | 
			
		||||
$!
 | 
			
		||||
$! All Done With This File.
 | 
			
		||||
$!
 | 
			
		||||
$ FILE_DONE:
 | 
			
		||||
$ APP_DONE:
 | 
			
		||||
$ EXIT:
 | 
			
		||||
$!
 | 
			
		||||
$! All Done, Time To Clean Up And Exit.
 | 
			
		||||
@@ -395,19 +425,19 @@ $!    Else...
 | 
			
		||||
$!
 | 
			
		||||
$     ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!      Create The AXP Linker Option File.
 | 
			
		||||
$!      Create The non-VAX Linker Option File.
 | 
			
		||||
$!
 | 
			
		||||
$       CREATE 'OPT_FILE'
 | 
			
		||||
$DECK
 | 
			
		||||
!
 | 
			
		||||
! Default System Options File For AXP To Link Agianst 
 | 
			
		||||
! Default System Options File For non-VAX To Link Agianst 
 | 
			
		||||
! The Sharable C Runtime Library.
 | 
			
		||||
!
 | 
			
		||||
SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
 | 
			
		||||
SYS$SHARE:CMA$OPEN_RTL/SHARE
 | 
			
		||||
$EOD
 | 
			
		||||
$!
 | 
			
		||||
$!    End The VAX/AXP DEC C Option File Check.
 | 
			
		||||
$!    End The DEC C Option File Check.
 | 
			
		||||
$!
 | 
			
		||||
$     ENDIF
 | 
			
		||||
$!
 | 
			
		||||
@@ -556,7 +586,7 @@ $   ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Have VAXC Or DECC.
 | 
			
		||||
$!
 | 
			
		||||
$     IF (ARCH.EQS."AXP").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
 | 
			
		||||
$     IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
 | 
			
		||||
$     THEN 
 | 
			
		||||
$!
 | 
			
		||||
$!      Looks Like DECC, Set To Use DECC.
 | 
			
		||||
@@ -666,7 +696,7 @@ $     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
 | 
			
		||||
$!
 | 
			
		||||
$!    Define The Linker Options File Name.
 | 
			
		||||
$!
 | 
			
		||||
$     OPT_FILE = "SYS$DISK:[]VAX_DECC_OPTIONS.OPT"
 | 
			
		||||
$     OPT_FILE = "''EXE_DIR'VAX_DECC_OPTIONS.OPT"
 | 
			
		||||
$!
 | 
			
		||||
$!  End DECC Check.
 | 
			
		||||
$!
 | 
			
		||||
@@ -687,9 +717,9 @@ $!
 | 
			
		||||
$!    Compile Using VAXC.
 | 
			
		||||
$!
 | 
			
		||||
$     CC = "CC"
 | 
			
		||||
$     IF ARCH.EQS."AXP"
 | 
			
		||||
$     IF ARCH.NES."VAX"
 | 
			
		||||
$     THEN
 | 
			
		||||
$	WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
 | 
			
		||||
$	WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!"
 | 
			
		||||
$	EXIT
 | 
			
		||||
$     ENDIF
 | 
			
		||||
$     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
 | 
			
		||||
@@ -703,7 +733,7 @@ $     DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
 | 
			
		||||
$!
 | 
			
		||||
$!    Define The Linker Options File Name.
 | 
			
		||||
$!
 | 
			
		||||
$     OPT_FILE = "SYS$DISK:[]VAX_VAXC_OPTIONS.OPT"
 | 
			
		||||
$     OPT_FILE = "''EXE_DIR'VAX_VAXC_OPTIONS.OPT"
 | 
			
		||||
$!
 | 
			
		||||
$!  End VAXC Check
 | 
			
		||||
$!
 | 
			
		||||
@@ -730,7 +760,7 @@ $     CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
 | 
			
		||||
$!
 | 
			
		||||
$!    Define The Linker Options File Name.
 | 
			
		||||
$!
 | 
			
		||||
$     OPT_FILE = "SYS$DISK:[]VAX_GNUC_OPTIONS.OPT"
 | 
			
		||||
$     OPT_FILE = "''EXE_DIR'VAX_GNUC_OPTIONS.OPT"
 | 
			
		||||
$!
 | 
			
		||||
$!  End The GNU C Check.
 | 
			
		||||
$!
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										24
									
								
								apps/ocsp.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								apps/ocsp.c
									
									
									
									
									
								
							@@ -98,6 +98,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	char **args;
 | 
			
		||||
	char *host = NULL, *port = NULL, *path = "/";
 | 
			
		||||
	char *thost = NULL, *tport = NULL, *tpath = NULL;
 | 
			
		||||
	char *reqin = NULL, *respin = NULL;
 | 
			
		||||
	char *reqout = NULL, *respout = NULL;
 | 
			
		||||
	char *signfile = NULL, *keyfile = NULL;
 | 
			
		||||
@@ -173,6 +174,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args, "-url"))
 | 
			
		||||
			{
 | 
			
		||||
			if (thost)
 | 
			
		||||
				OPENSSL_free(thost);
 | 
			
		||||
			if (tport)
 | 
			
		||||
				OPENSSL_free(tport);
 | 
			
		||||
			if (tpath)
 | 
			
		||||
				OPENSSL_free(tpath);
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
@@ -181,6 +188,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
					BIO_printf(bio_err, "Error parsing URL\n");
 | 
			
		||||
					badarg = 1;
 | 
			
		||||
					}
 | 
			
		||||
				thost = host;
 | 
			
		||||
				tport = port;
 | 
			
		||||
				tpath = path;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
@@ -871,12 +881,12 @@ end:
 | 
			
		||||
	sk_X509_pop_free(sign_other, X509_free);
 | 
			
		||||
	sk_X509_pop_free(verify_other, X509_free);
 | 
			
		||||
 | 
			
		||||
	if (use_ssl != -1)
 | 
			
		||||
		{
 | 
			
		||||
		OPENSSL_free(host);
 | 
			
		||||
		OPENSSL_free(port);
 | 
			
		||||
		OPENSSL_free(path);
 | 
			
		||||
		}
 | 
			
		||||
	if (thost)
 | 
			
		||||
		OPENSSL_free(thost);
 | 
			
		||||
	if (tport)
 | 
			
		||||
		OPENSSL_free(tport);
 | 
			
		||||
	if (tpath)
 | 
			
		||||
		OPENSSL_free(tpath);
 | 
			
		||||
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
@@ -1334,7 +1344,7 @@ OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req,
 | 
			
		||||
		}
 | 
			
		||||
	resp = query_responder(err, cbio, path, req, req_timeout);
 | 
			
		||||
	if (!resp)
 | 
			
		||||
		BIO_printf(bio_err, "Error querying OCSP responsder\n");
 | 
			
		||||
		BIO_printf(bio_err, "Error querying OCSP responder\n");
 | 
			
		||||
	end:
 | 
			
		||||
	if (ctx)
 | 
			
		||||
		SSL_CTX_free(ctx);
 | 
			
		||||
 
 | 
			
		||||
@@ -141,7 +141,7 @@ localityName			= Locality Name (eg, city)
 | 
			
		||||
organizationalUnitName		= Organizational Unit Name (eg, section)
 | 
			
		||||
#organizationalUnitName_default	=
 | 
			
		||||
 | 
			
		||||
commonName			= Common Name (eg, YOUR name)
 | 
			
		||||
commonName			= Common Name (e.g. server FQDN or YOUR name)
 | 
			
		||||
commonName_max			= 64
 | 
			
		||||
 | 
			
		||||
emailAddress			= Email Address
 | 
			
		||||
 
 | 
			
		||||
@@ -235,16 +235,19 @@ int main(int Argc, char *Argv[])
 | 
			
		||||
 | 
			
		||||
	in_FIPS_mode = 0;
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_FIPS
 | 
			
		||||
	if(getenv("OPENSSL_FIPS")) {
 | 
			
		||||
#ifdef OPENSSL_FIPS
 | 
			
		||||
		if (!FIPS_mode_set(1)) {
 | 
			
		||||
			ERR_load_crypto_strings();
 | 
			
		||||
			ERR_print_errors(BIO_new_fp(stderr,BIO_NOCLOSE));
 | 
			
		||||
			EXIT(1);
 | 
			
		||||
		}
 | 
			
		||||
		in_FIPS_mode = 1;
 | 
			
		||||
		}
 | 
			
		||||
#else
 | 
			
		||||
		fprintf(stderr, "FIPS mode not supported.\n");
 | 
			
		||||
		EXIT(1);
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
@@ -333,7 +336,8 @@ int main(int Argc, char *Argv[])
 | 
			
		||||
			else	prompt="OpenSSL> ";
 | 
			
		||||
			fputs(prompt,stdout);
 | 
			
		||||
			fflush(stdout);
 | 
			
		||||
			fgets(p,n,stdin);
 | 
			
		||||
			if (!fgets(p,n,stdin))
 | 
			
		||||
				goto end;
 | 
			
		||||
			if (p[0] == '\0') goto end;
 | 
			
		||||
			i=strlen(p);
 | 
			
		||||
			if (i <= 1) break;
 | 
			
		||||
 
 | 
			
		||||
@@ -141,7 +141,7 @@ localityName			= Locality Name (eg, city)
 | 
			
		||||
organizationalUnitName		= Organizational Unit Name (eg, section)
 | 
			
		||||
#organizationalUnitName_default	=
 | 
			
		||||
 | 
			
		||||
commonName			= Common Name (eg, YOUR name)
 | 
			
		||||
commonName			= Common Name (e.g. server FQDN or YOUR name)
 | 
			
		||||
commonName_max			= 64
 | 
			
		||||
 | 
			
		||||
emailAddress			= Email Address
 | 
			
		||||
 
 | 
			
		||||
@@ -68,6 +68,12 @@
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/pkcs12.h>
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_SYS_NETWARE
 | 
			
		||||
/* Rename these functions to avoid name clashes on NetWare OS */
 | 
			
		||||
#define uni2asc OPENSSL_uni2asc
 | 
			
		||||
#define asc2uni OPENSSL_asc2uni
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define PROG pkcs12_main
 | 
			
		||||
 | 
			
		||||
const EVP_CIPHER *enc;
 | 
			
		||||
@@ -653,7 +659,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
    if (!twopass) BUF_strlcpy(macpass, pass, sizeof macpass);
 | 
			
		||||
 | 
			
		||||
    if (options & INFO) BIO_printf (bio_err, "MAC Iteration %ld\n", p12->mac->iter ? ASN1_INTEGER_get (p12->mac->iter) : 1);
 | 
			
		||||
    if ((options & INFO) && p12->mac) BIO_printf (bio_err, "MAC Iteration %ld\n", p12->mac->iter ? ASN1_INTEGER_get (p12->mac->iter) : 1);
 | 
			
		||||
    if(macver) {
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
    CRYPTO_push_info("verify MAC");
 | 
			
		||||
 
 | 
			
		||||
@@ -82,9 +82,6 @@ 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;
 | 
			
		||||
@@ -180,7 +177,7 @@ bad:
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
 
 | 
			
		||||
@@ -77,9 +77,6 @@ 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;
 | 
			
		||||
@@ -178,7 +175,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	app_RAND_load_file(NULL, bio_err, (inrand != NULL));
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								apps/req.c
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								apps/req.c
									
									
									
									
									
								
							@@ -1433,11 +1433,17 @@ start2:			for (;;)
 | 
			
		||||
 | 
			
		||||
				BIO_snprintf(buf,sizeof buf,"%s_min",type);
 | 
			
		||||
				if (!NCONF_get_number(req_conf,attr_sect,buf, &n_min))
 | 
			
		||||
					{
 | 
			
		||||
					ERR_clear_error();
 | 
			
		||||
					n_min = -1;
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
				BIO_snprintf(buf,sizeof buf,"%s_max",type);
 | 
			
		||||
				if (!NCONF_get_number(req_conf,attr_sect,buf, &n_max))
 | 
			
		||||
					{
 | 
			
		||||
					ERR_clear_error();
 | 
			
		||||
					n_max = -1;
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
				if (!add_attribute_object(req,
 | 
			
		||||
					v->value,def,value,nid,n_min,n_max, chtype))
 | 
			
		||||
@@ -1538,7 +1544,8 @@ start:
 | 
			
		||||
		buf[0]='\0';
 | 
			
		||||
		if (!batch)
 | 
			
		||||
			{
 | 
			
		||||
			fgets(buf,sizeof buf,stdin);
 | 
			
		||||
			if (!fgets(buf,sizeof buf,stdin))
 | 
			
		||||
				return 0;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
@@ -1567,7 +1574,13 @@ start:
 | 
			
		||||
#ifdef CHARSET_EBCDIC
 | 
			
		||||
	ebcdic2ascii(buf, buf, i);
 | 
			
		||||
#endif
 | 
			
		||||
	if(!req_check_len(i, n_min, n_max)) goto start;
 | 
			
		||||
	if(!req_check_len(i, n_min, n_max))
 | 
			
		||||
		{
 | 
			
		||||
		if (batch || value)
 | 
			
		||||
			return 0;
 | 
			
		||||
		goto start;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (!X509_NAME_add_entry_by_NID(n,nid, chtype,
 | 
			
		||||
				(unsigned char *) buf, -1,-1,mval)) goto err;
 | 
			
		||||
	ret=1;
 | 
			
		||||
@@ -1596,7 +1609,8 @@ start:
 | 
			
		||||
		buf[0]='\0';
 | 
			
		||||
		if (!batch)
 | 
			
		||||
			{
 | 
			
		||||
			fgets(buf,sizeof buf,stdin);
 | 
			
		||||
			if (!fgets(buf,sizeof buf,stdin))
 | 
			
		||||
				return 0;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
@@ -1625,7 +1639,12 @@ start:
 | 
			
		||||
#ifdef CHARSET_EBCDIC
 | 
			
		||||
	ebcdic2ascii(buf, buf, i);
 | 
			
		||||
#endif
 | 
			
		||||
	if(!req_check_len(i, n_min, n_max)) goto start;
 | 
			
		||||
	if(!req_check_len(i, n_min, n_max))
 | 
			
		||||
		{
 | 
			
		||||
		if (batch || value)
 | 
			
		||||
			return 0;
 | 
			
		||||
		goto start;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if(!X509_REQ_add1_attr_by_NID(req, nid, chtype,
 | 
			
		||||
					(unsigned char *)buf, -1)) {
 | 
			
		||||
 
 | 
			
		||||
@@ -171,3 +171,6 @@ void MS_CALLBACK tlsext_cb(SSL *s, int client_server, int type,
 | 
			
		||||
					unsigned char *data, int len,
 | 
			
		||||
					void *arg);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len);
 | 
			
		||||
int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int cookie_len);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										123
									
								
								apps/s_cb.c
									
									
									
									
									
								
							
							
						
						
									
										123
									
								
								apps/s_cb.c
									
									
									
									
									
								
							@@ -117,12 +117,17 @@
 | 
			
		||||
#undef NON_MAIN
 | 
			
		||||
#undef USE_SOCKETS
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
#include "s_apps.h"
 | 
			
		||||
 | 
			
		||||
#define	COOKIE_SECRET_LENGTH	16
 | 
			
		||||
 | 
			
		||||
int verify_depth=0;
 | 
			
		||||
int verify_error=X509_V_OK;
 | 
			
		||||
unsigned char cookie_secret[COOKIE_SECRET_LENGTH];
 | 
			
		||||
int cookie_initialized=0;
 | 
			
		||||
 | 
			
		||||
int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
	{
 | 
			
		||||
@@ -338,6 +343,12 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		str_version = "???";
 | 
			
		||||
	case DTLS1_VERSION:
 | 
			
		||||
		str_version = "DTLS 1.0 ";
 | 
			
		||||
		break;
 | 
			
		||||
	case DTLS1_BAD_VER:
 | 
			
		||||
		str_version = "DTLS 1.0 (bad) ";
 | 
			
		||||
		break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (version == SSL2_VERSION)
 | 
			
		||||
@@ -401,7 +412,10 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (version == SSL3_VERSION || version == TLS1_VERSION)
 | 
			
		||||
	if (version == SSL3_VERSION ||
 | 
			
		||||
	    version == TLS1_VERSION ||
 | 
			
		||||
	    version == DTLS1_VERSION ||
 | 
			
		||||
	    version == DTLS1_BAD_VER)
 | 
			
		||||
		{
 | 
			
		||||
		switch (content_type)
 | 
			
		||||
			{
 | 
			
		||||
@@ -504,6 +518,24 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *
 | 
			
		||||
				case 100:
 | 
			
		||||
					str_details2 = " no_renegotiation";
 | 
			
		||||
					break;
 | 
			
		||||
				case 110:
 | 
			
		||||
					str_details2 = " unsupported_extension";
 | 
			
		||||
					break;
 | 
			
		||||
				case 111:
 | 
			
		||||
					str_details2 = " certificate_unobtainable";
 | 
			
		||||
					break;
 | 
			
		||||
				case 112:
 | 
			
		||||
					str_details2 = " unrecognized_name";
 | 
			
		||||
					break;
 | 
			
		||||
				case 113:
 | 
			
		||||
					str_details2 = " bad_certificate_status_response";
 | 
			
		||||
					break;
 | 
			
		||||
				case 114:
 | 
			
		||||
					str_details2 = " bad_certificate_hash_value";
 | 
			
		||||
					break;
 | 
			
		||||
				case 115:
 | 
			
		||||
					str_details2 = " unknown_psk_identity";
 | 
			
		||||
					break;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
@@ -540,6 +572,9 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *
 | 
			
		||||
				case 15:
 | 
			
		||||
					str_details1 = ", CertificateVerify";
 | 
			
		||||
					break;
 | 
			
		||||
				case 3:
 | 
			
		||||
					str_details1 = ", HelloVerifyRequest";
 | 
			
		||||
					break;
 | 
			
		||||
				case 16:
 | 
			
		||||
					str_details1 = ", ClientKeyExchange";
 | 
			
		||||
					break;
 | 
			
		||||
@@ -621,6 +656,9 @@ void MS_CALLBACK tlsext_cb(SSL *s, int client_server, int type,
 | 
			
		||||
		extname = "server ticket";
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
		case TLSEXT_TYPE_renegotiate:
 | 
			
		||||
		extname = "renegotiate";
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
		extname = "unknown";
 | 
			
		||||
@@ -634,3 +672,86 @@ void MS_CALLBACK tlsext_cb(SSL *s, int client_server, int type,
 | 
			
		||||
	BIO_dump(bio, (char *)data, len);
 | 
			
		||||
	(void)BIO_flush(bio);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned char *buffer, result[EVP_MAX_MD_SIZE];
 | 
			
		||||
	unsigned int length, resultlength;
 | 
			
		||||
	struct sockaddr_in peer;
 | 
			
		||||
	
 | 
			
		||||
	/* Initialize a random secret */
 | 
			
		||||
	if (!cookie_initialized)
 | 
			
		||||
		{
 | 
			
		||||
		if (!RAND_bytes(cookie_secret, COOKIE_SECRET_LENGTH))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"error setting random cookie secret\n");
 | 
			
		||||
			return 0;
 | 
			
		||||
			}
 | 
			
		||||
		cookie_initialized = 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	/* Read peer information */
 | 
			
		||||
	(void)BIO_dgram_get_peer(SSL_get_rbio(ssl), &peer);
 | 
			
		||||
 | 
			
		||||
	/* Create buffer with peer's address and port */
 | 
			
		||||
	length = sizeof(peer.sin_addr);
 | 
			
		||||
	length += sizeof(peer.sin_port);
 | 
			
		||||
	buffer = OPENSSL_malloc(length);
 | 
			
		||||
 | 
			
		||||
	if (buffer == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"out of memory\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	memcpy(buffer, &peer.sin_addr, sizeof(peer.sin_addr));
 | 
			
		||||
	memcpy(buffer + sizeof(peer.sin_addr), &peer.sin_port, sizeof(peer.sin_port));
 | 
			
		||||
 | 
			
		||||
	/* Calculate HMAC of buffer using the secret */
 | 
			
		||||
	HMAC(EVP_sha1(), cookie_secret, COOKIE_SECRET_LENGTH,
 | 
			
		||||
	     buffer, length, result, &resultlength);
 | 
			
		||||
	OPENSSL_free(buffer);
 | 
			
		||||
 | 
			
		||||
	memcpy(cookie, result, resultlength);
 | 
			
		||||
	*cookie_len = resultlength;
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int cookie_len)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned char *buffer, result[EVP_MAX_MD_SIZE];
 | 
			
		||||
	unsigned int length, resultlength;
 | 
			
		||||
	struct sockaddr_in peer;
 | 
			
		||||
	
 | 
			
		||||
	/* If secret isn't initialized yet, the cookie can't be valid */
 | 
			
		||||
	if (!cookie_initialized)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	/* Read peer information */
 | 
			
		||||
	(void)BIO_dgram_get_peer(SSL_get_rbio(ssl), &peer);
 | 
			
		||||
 | 
			
		||||
	/* Create buffer with peer's address and port */
 | 
			
		||||
	length = sizeof(peer.sin_addr);
 | 
			
		||||
	length += sizeof(peer.sin_port);
 | 
			
		||||
	buffer = (unsigned char*) OPENSSL_malloc(length);
 | 
			
		||||
	
 | 
			
		||||
	if (buffer == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"out of memory\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	memcpy(buffer, &peer.sin_addr, sizeof(peer.sin_addr));
 | 
			
		||||
	memcpy(buffer + sizeof(peer.sin_addr), &peer.sin_port, sizeof(peer.sin_port));
 | 
			
		||||
 | 
			
		||||
	/* Calculate HMAC of buffer using the secret */
 | 
			
		||||
	HMAC(EVP_sha1(), cookie_secret, COOKIE_SECRET_LENGTH,
 | 
			
		||||
	     buffer, length, result, &resultlength);
 | 
			
		||||
	OPENSSL_free(buffer);
 | 
			
		||||
	
 | 
			
		||||
	if (cookie_len == resultlength && memcmp(result, cookie, resultlength) == 0)
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -226,7 +226,8 @@ static void sc_usage(void)
 | 
			
		||||
	BIO_printf(bio_err," -ssl3         - just use SSLv3\n");
 | 
			
		||||
	BIO_printf(bio_err," -tls1         - just use TLSv1\n");
 | 
			
		||||
	BIO_printf(bio_err," -dtls1        - just use DTLSv1\n");    
 | 
			
		||||
	BIO_printf(bio_err," -mtu          - set the MTU\n");
 | 
			
		||||
	BIO_printf(bio_err," -fallback_scsv - send TLS_FALLBACK_SCSV\n");
 | 
			
		||||
	BIO_printf(bio_err," -mtu          - set the link layer MTU\n");
 | 
			
		||||
	BIO_printf(bio_err," -no_tls1/-no_ssl3/-no_ssl2 - turn off that protocol\n");
 | 
			
		||||
	BIO_printf(bio_err," -bugs         - Switch on all SSL implementation bug workarounds\n");
 | 
			
		||||
	BIO_printf(bio_err," -serverpref   - Use server's cipher preferences (only SSLv2)\n");
 | 
			
		||||
@@ -249,6 +250,7 @@ static void sc_usage(void)
 | 
			
		||||
	BIO_printf(bio_err," -status           - request certificate status from server\n");
 | 
			
		||||
	BIO_printf(bio_err," -no_ticket        - disable use of RFC4507bis session tickets\n");
 | 
			
		||||
#endif
 | 
			
		||||
	BIO_printf(bio_err," -legacy_renegotiation - enable use of legacy renegotiation (dangerous)\n");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_TLSEXT
 | 
			
		||||
@@ -286,7 +288,7 @@ int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int off=0;
 | 
			
		||||
	int off=0, clr = 0;
 | 
			
		||||
	SSL *con=NULL,*con2=NULL;
 | 
			
		||||
	X509_STORE *store = NULL;
 | 
			
		||||
	int s,k,width,state=0;
 | 
			
		||||
@@ -318,6 +320,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	BIO *sbio;
 | 
			
		||||
	char *inrand=NULL;
 | 
			
		||||
	int mbuf_len=0;
 | 
			
		||||
	struct timeval timeout, *timeoutp;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine_id=NULL;
 | 
			
		||||
	char *ssl_client_engine_id=NULL;
 | 
			
		||||
@@ -337,19 +340,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	char *sess_out = NULL;
 | 
			
		||||
	struct sockaddr peer;
 | 
			
		||||
	int peerlen = sizeof(peer);
 | 
			
		||||
	int fallback_scsv = 0;
 | 
			
		||||
	int enable_timeouts = 0 ;
 | 
			
		||||
	long mtu = 0;
 | 
			
		||||
	long socket_mtu = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_JPAKE
 | 
			
		||||
	char *jpake_secret = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
	meth=SSLv23_client_method();
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
	meth=SSLv3_client_method();
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL2)
 | 
			
		||||
	meth=SSLv2_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
	c_Pause=0;
 | 
			
		||||
@@ -489,9 +487,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		else if (strcmp(*argv,"-mtu") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			mtu = atol(*(++argv));
 | 
			
		||||
			socket_mtu = atol(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-fallback_scsv") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			fallback_scsv = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-bugs") == 0)
 | 
			
		||||
			bugs=1;
 | 
			
		||||
		else if	(strcmp(*argv,"-keyform") == 0)
 | 
			
		||||
@@ -535,6 +537,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-serverpref") == 0)
 | 
			
		||||
			off|=SSL_OP_CIPHER_SERVER_PREFERENCE;
 | 
			
		||||
		else if (strcmp(*argv,"-legacy_renegotiation") == 0)
 | 
			
		||||
			off|=SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION;
 | 
			
		||||
		else if	(strcmp(*argv,"-legacy_server_connect") == 0)
 | 
			
		||||
			{ off|=SSL_OP_LEGACY_SERVER_CONNECT; }
 | 
			
		||||
		else if	(strcmp(*argv,"-no_legacy_server_connect") == 0)
 | 
			
		||||
			{ clr|=SSL_OP_LEGACY_SERVER_CONNECT; }
 | 
			
		||||
		else if	(strcmp(*argv,"-cipher") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
@@ -709,6 +717,9 @@ bad:
 | 
			
		||||
		SSL_CTX_set_options(ctx,SSL_OP_ALL|off);
 | 
			
		||||
	else
 | 
			
		||||
		SSL_CTX_set_options(ctx,off);
 | 
			
		||||
 | 
			
		||||
	if (clr)
 | 
			
		||||
		SSL_CTX_clear_options(ctx, clr);
 | 
			
		||||
	/* DTLS: partial reads end up discarding unread UDP bytes :-( 
 | 
			
		||||
	 * Setting read ahead solves this problem.
 | 
			
		||||
	 */
 | 
			
		||||
@@ -773,6 +784,10 @@ bad:
 | 
			
		||||
		SSL_set_session(con, sess);
 | 
			
		||||
		SSL_SESSION_free(sess);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (fallback_scsv)
 | 
			
		||||
		SSL_set_mode(con, SSL_MODE_SEND_FALLBACK_SCSV);
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_TLSEXT
 | 
			
		||||
	if (servername != NULL)
 | 
			
		||||
		{
 | 
			
		||||
@@ -819,7 +834,6 @@ re_start:
 | 
			
		||||
 | 
			
		||||
	if ( SSL_version(con) == DTLS1_VERSION)
 | 
			
		||||
		{
 | 
			
		||||
		struct timeval timeout;
 | 
			
		||||
 | 
			
		||||
		sbio=BIO_new_dgram(s,BIO_NOCLOSE);
 | 
			
		||||
		if (getsockname(s, &peer, (void *)&peerlen) < 0)
 | 
			
		||||
@@ -843,10 +857,10 @@ re_start:
 | 
			
		||||
			BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, &timeout);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if ( mtu > 0)
 | 
			
		||||
		if (socket_mtu > 28)
 | 
			
		||||
			{
 | 
			
		||||
			SSL_set_options(con, SSL_OP_NO_QUERY_MTU);
 | 
			
		||||
			SSL_set_mtu(con, mtu);
 | 
			
		||||
			SSL_set_mtu(con, socket_mtu - 28);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			/* want to do MTU discovery */
 | 
			
		||||
@@ -1036,6 +1050,12 @@ SSL_set_tlsext_status_ids(con, ids);
 | 
			
		||||
		FD_ZERO(&readfds);
 | 
			
		||||
		FD_ZERO(&writefds);
 | 
			
		||||
 | 
			
		||||
		if ((SSL_version(con) == DTLS1_VERSION) &&
 | 
			
		||||
			DTLSv1_get_timeout(con, &timeout))
 | 
			
		||||
			timeoutp = &timeout;
 | 
			
		||||
		else
 | 
			
		||||
			timeoutp = NULL;
 | 
			
		||||
 | 
			
		||||
		if (SSL_in_init(con) && !SSL_total_renegotiations(con))
 | 
			
		||||
			{
 | 
			
		||||
			in_init=1;
 | 
			
		||||
@@ -1132,7 +1152,7 @@ SSL_set_tlsext_status_ids(con, ids);
 | 
			
		||||
					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);
 | 
			
		||||
					 NULL,timeoutp);
 | 
			
		||||
			}
 | 
			
		||||
#elif defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
			if(!write_tty) {
 | 
			
		||||
@@ -1142,11 +1162,11 @@ SSL_set_tlsext_status_ids(con, ids);
 | 
			
		||||
					i=select(width,(void *)&readfds,(void *)&writefds,
 | 
			
		||||
						NULL,&tv);
 | 
			
		||||
				} else 	i=select(width,(void *)&readfds,(void *)&writefds,
 | 
			
		||||
					NULL,NULL);
 | 
			
		||||
					NULL,timeoutp);
 | 
			
		||||
			}
 | 
			
		||||
#else
 | 
			
		||||
			i=select(width,(void *)&readfds,(void *)&writefds,
 | 
			
		||||
				 NULL,NULL);
 | 
			
		||||
				 NULL,timeoutp);
 | 
			
		||||
#endif
 | 
			
		||||
			if ( i < 0)
 | 
			
		||||
				{
 | 
			
		||||
@@ -1157,6 +1177,11 @@ SSL_set_tlsext_status_ids(con, ids);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if ((SSL_version(con) == DTLS1_VERSION) && DTLSv1_handle_timeout(con) > 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"TIMEOUT occured\n");
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if (!ssl_pending && FD_ISSET(SSL_get_fd(con),&writefds))
 | 
			
		||||
			{
 | 
			
		||||
			k=SSL_write(con,&(cbuf[cbuf_off]),
 | 
			
		||||
@@ -1511,6 +1536,8 @@ static void print_stuff(BIO *bio, SSL *s, int full)
 | 
			
		||||
							 EVP_PKEY_bits(pktmp));
 | 
			
		||||
		EVP_PKEY_free(pktmp);
 | 
			
		||||
	}
 | 
			
		||||
	BIO_printf(bio, "Secure Renegotiation IS%s supported\n",
 | 
			
		||||
			SSL_get_secure_renegotiation_support(s) ? "" : " NOT");
 | 
			
		||||
#ifndef OPENSSL_NO_COMP
 | 
			
		||||
	comp=SSL_get_current_compression(s);
 | 
			
		||||
	expansion=SSL_get_current_expansion(s);
 | 
			
		||||
 
 | 
			
		||||
@@ -283,11 +283,10 @@ static char *engine_id=NULL;
 | 
			
		||||
static const char *session_id_prefix=NULL;
 | 
			
		||||
 | 
			
		||||
static int enable_timeouts = 0;
 | 
			
		||||
#ifdef mtu
 | 
			
		||||
#undef mtu
 | 
			
		||||
#endif
 | 
			
		||||
static long mtu;
 | 
			
		||||
static long socket_mtu;
 | 
			
		||||
#ifndef OPENSSL_NO_DTLS1
 | 
			
		||||
static int cert_chain = 0;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef MONOLITH
 | 
			
		||||
@@ -375,7 +374,7 @@ static void sv_usage(void)
 | 
			
		||||
	BIO_printf(bio_err," -tls1         - Just talk TLSv1\n");
 | 
			
		||||
	BIO_printf(bio_err," -dtls1        - Just talk DTLSv1\n");
 | 
			
		||||
	BIO_printf(bio_err," -timeout      - Enable timeouts\n");
 | 
			
		||||
	BIO_printf(bio_err," -mtu          - Set MTU\n");
 | 
			
		||||
	BIO_printf(bio_err," -mtu          - Set link layer MTU\n");
 | 
			
		||||
	BIO_printf(bio_err," -chain        - Read a certificate chain\n");
 | 
			
		||||
	BIO_printf(bio_err," -no_ssl2      - Just disable SSLv2\n");
 | 
			
		||||
	BIO_printf(bio_err," -no_ssl3      - Just disable SSLv3\n");
 | 
			
		||||
@@ -405,6 +404,7 @@ static void sv_usage(void)
 | 
			
		||||
	BIO_printf(bio_err,"                 not specified (default is %s)\n",TEST_CERT2);
 | 
			
		||||
	BIO_printf(bio_err," -tlsextdebug  - hex dump of all TLS extensions received\n");
 | 
			
		||||
	BIO_printf(bio_err," -no_ticket    - disable use of RFC4507bis session tickets\n");
 | 
			
		||||
	BIO_printf(bio_err," -legacy_renegotiation - enable use of legacy renegotiation (dangerous)\n");
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -583,7 +583,7 @@ static int MS_CALLBACK ssl_servername_cb(SSL *s, int *ad, void *arg)
 | 
			
		||||
	
 | 
			
		||||
	if (servername)
 | 
			
		||||
		{
 | 
			
		||||
    		if (strcmp(servername,p->servername)) 
 | 
			
		||||
    		if (strcasecmp(servername,p->servername)) 
 | 
			
		||||
			return p->extension_error;
 | 
			
		||||
		if (ctx2)
 | 
			
		||||
			{
 | 
			
		||||
@@ -772,6 +772,7 @@ int MAIN(int argc, char *argv[])
 | 
			
		||||
	int s_dcert_format = FORMAT_PEM, s_dkey_format = FORMAT_PEM;
 | 
			
		||||
	X509 *s_cert = NULL, *s_dcert = NULL;
 | 
			
		||||
	EVP_PKEY *s_key = NULL, *s_dkey = NULL;
 | 
			
		||||
	int no_cache = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_TLSEXT
 | 
			
		||||
	EVP_PKEY *s_key2 = NULL;
 | 
			
		||||
	X509 *s_cert2 = NULL;
 | 
			
		||||
@@ -780,13 +781,7 @@ int MAIN(int argc, char *argv[])
 | 
			
		||||
        tlsextctx tlsextcbp = {NULL, NULL, SSL_TLSEXT_ERR_ALERT_WARNING};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
	meth=SSLv23_server_method();
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
	meth=SSLv3_server_method();
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL2)
 | 
			
		||||
	meth=SSLv2_server_method();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	local_argc=argc;
 | 
			
		||||
	local_argv=argv;
 | 
			
		||||
@@ -911,6 +906,8 @@ int MAIN(int argc, char *argv[])
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			CApath= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-no_cache") == 0)
 | 
			
		||||
			no_cache = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-crl_check") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			vflags |= X509_V_FLAG_CRL_CHECK;
 | 
			
		||||
@@ -921,6 +918,8 @@ int MAIN(int argc, char *argv[])
 | 
			
		||||
			}
 | 
			
		||||
		else if	(strcmp(*argv,"-serverpref") == 0)
 | 
			
		||||
			{ off|=SSL_OP_CIPHER_SERVER_PREFERENCE; }
 | 
			
		||||
		else if (strcmp(*argv,"-legacy_renegotiation") == 0)
 | 
			
		||||
			off|=SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION;
 | 
			
		||||
		else if	(strcmp(*argv,"-cipher") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
@@ -1032,7 +1031,7 @@ int MAIN(int argc, char *argv[])
 | 
			
		||||
		else if (strcmp(*argv,"-mtu") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			mtu = atol(*(++argv));
 | 
			
		||||
			socket_mtu = atol(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-chain") == 0)
 | 
			
		||||
			cert_chain = 1;
 | 
			
		||||
@@ -1096,6 +1095,14 @@ bad:
 | 
			
		||||
		sv_usage();
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
#ifndef OPENSSL_NO_DTLS1
 | 
			
		||||
	if (www && socket_type == SOCK_DGRAM)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,
 | 
			
		||||
				"Can't use -HTTP, -www or -WWW with DTLS\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	SSL_load_error_strings();
 | 
			
		||||
	OpenSSL_add_ssl_algorithms();
 | 
			
		||||
@@ -1253,8 +1260,10 @@ bad:
 | 
			
		||||
	if (socket_type == SOCK_DGRAM) SSL_CTX_set_read_ahead(ctx, 1);
 | 
			
		||||
 | 
			
		||||
	if (state) SSL_CTX_set_info_callback(ctx,apps_ssl_info_callback);
 | 
			
		||||
 | 
			
		||||
	SSL_CTX_sess_set_cache_size(ctx,128);
 | 
			
		||||
	if (no_cache)
 | 
			
		||||
		SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF);
 | 
			
		||||
	else
 | 
			
		||||
		SSL_CTX_sess_set_cache_size(ctx,128);
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
	if (cipher == NULL) cipher=getenv("SSL_CIPHER");
 | 
			
		||||
@@ -1321,7 +1330,10 @@ bad:
 | 
			
		||||
 | 
			
		||||
		if (state) SSL_CTX_set_info_callback(ctx2,apps_ssl_info_callback);
 | 
			
		||||
 | 
			
		||||
		SSL_CTX_sess_set_cache_size(ctx2,128);
 | 
			
		||||
		if (no_cache)
 | 
			
		||||
			SSL_CTX_set_session_cache_mode(ctx2,SSL_SESS_CACHE_OFF);
 | 
			
		||||
		else
 | 
			
		||||
			SSL_CTX_sess_set_cache_size(ctx2,128);
 | 
			
		||||
 | 
			
		||||
		if ((!SSL_CTX_load_verify_locations(ctx2,CAfile,CApath)) ||
 | 
			
		||||
			(!SSL_CTX_set_default_verify_paths(ctx2)))
 | 
			
		||||
@@ -1498,6 +1510,10 @@ bad:
 | 
			
		||||
	SSL_CTX_set_session_id_context(ctx,(void*)&s_server_session_id_context,
 | 
			
		||||
		sizeof s_server_session_id_context);
 | 
			
		||||
 | 
			
		||||
	/* Set DTLS cookie generation and verification callbacks */
 | 
			
		||||
	SSL_CTX_set_cookie_generate_cb(ctx, generate_cookie_callback);
 | 
			
		||||
	SSL_CTX_set_cookie_verify_cb(ctx, verify_cookie_callback);
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_TLSEXT
 | 
			
		||||
	if (ctx2)
 | 
			
		||||
		{
 | 
			
		||||
@@ -1542,6 +1558,12 @@ end:
 | 
			
		||||
	if (dpass)
 | 
			
		||||
		OPENSSL_free(dpass);
 | 
			
		||||
#ifndef OPENSSL_NO_TLSEXT
 | 
			
		||||
	if (tlscstatp.host)
 | 
			
		||||
		OPENSSL_free(tlscstatp.host);
 | 
			
		||||
	if (tlscstatp.port)
 | 
			
		||||
		OPENSSL_free(tlscstatp.port);
 | 
			
		||||
	if (tlscstatp.path)
 | 
			
		||||
		OPENSSL_free(tlscstatp.path);
 | 
			
		||||
	if (ctx2 != NULL) SSL_CTX_free(ctx2);
 | 
			
		||||
	if (s_cert2)
 | 
			
		||||
		X509_free(s_cert2);
 | 
			
		||||
@@ -1591,8 +1613,11 @@ static int sv_body(char *hostname, int s, unsigned char *context)
 | 
			
		||||
	unsigned long l;
 | 
			
		||||
	SSL *con=NULL;
 | 
			
		||||
	BIO *sbio;
 | 
			
		||||
	struct timeval timeout;
 | 
			
		||||
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
	struct timeval tv;
 | 
			
		||||
#else
 | 
			
		||||
	struct timeval *timeoutp;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if ((buf=OPENSSL_malloc(bufsize)) == NULL)
 | 
			
		||||
@@ -1644,7 +1669,6 @@ static int sv_body(char *hostname, int s, unsigned char *context)
 | 
			
		||||
 | 
			
		||||
	if (SSL_version(con) == DTLS1_VERSION)
 | 
			
		||||
		{
 | 
			
		||||
		struct timeval timeout;
 | 
			
		||||
 | 
			
		||||
		sbio=BIO_new_dgram(s,BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
@@ -1660,10 +1684,10 @@ static int sv_body(char *hostname, int s, unsigned char *context)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		
 | 
			
		||||
		if ( mtu > 0)
 | 
			
		||||
		if (socket_mtu > 28)
 | 
			
		||||
			{
 | 
			
		||||
			SSL_set_options(con, SSL_OP_NO_QUERY_MTU);
 | 
			
		||||
			SSL_set_mtu(con, mtu);
 | 
			
		||||
			SSL_set_mtu(con, socket_mtu - 28);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			/* want to do MTU discovery */
 | 
			
		||||
@@ -1745,7 +1769,19 @@ static int sv_body(char *hostname, int s, unsigned char *context)
 | 
			
		||||
			if(_kbhit())
 | 
			
		||||
				read_from_terminal = 1;
 | 
			
		||||
#else
 | 
			
		||||
			i=select(width,(void *)&readfds,NULL,NULL,NULL);
 | 
			
		||||
			if ((SSL_version(con) == DTLS1_VERSION) &&
 | 
			
		||||
				DTLSv1_get_timeout(con, &timeout))
 | 
			
		||||
				timeoutp = &timeout;
 | 
			
		||||
			else
 | 
			
		||||
				timeoutp = NULL;
 | 
			
		||||
 | 
			
		||||
			i=select(width,(void *)&readfds,NULL,NULL,timeoutp);
 | 
			
		||||
 | 
			
		||||
			if ((SSL_version(con) == DTLS1_VERSION) && DTLSv1_handle_timeout(con) > 0)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"TIMEOUT occured\n");
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			if (i <= 0) continue;
 | 
			
		||||
			if (FD_ISSET(fileno(stdin),&readfds))
 | 
			
		||||
				read_from_terminal = 1;
 | 
			
		||||
@@ -1894,8 +1930,10 @@ again:
 | 
			
		||||
#ifdef CHARSET_EBCDIC
 | 
			
		||||
					ascii2ebcdic(buf,buf,i);
 | 
			
		||||
#endif
 | 
			
		||||
					write(fileno(stdout),buf,
 | 
			
		||||
						(unsigned int)i);
 | 
			
		||||
					if (write(fileno(stdout),buf,
 | 
			
		||||
						(unsigned int)i) != i)
 | 
			
		||||
						goto err;
 | 
			
		||||
						
 | 
			
		||||
					if (SSL_pending(con)) goto again;
 | 
			
		||||
					break;
 | 
			
		||||
				case SSL_ERROR_WANT_WRITE:
 | 
			
		||||
@@ -2002,6 +2040,8 @@ static int init_ssl_connection(SSL *con)
 | 
			
		||||
			con->kssl_ctx->client_princ);
 | 
			
		||||
		}
 | 
			
		||||
#endif /* OPENSSL_NO_KRB5 */
 | 
			
		||||
	BIO_printf(bio_s_out, "Secure Renegotiation IS%s supported\n",
 | 
			
		||||
		      SSL_get_secure_renegotiation_support(con) ? "" : " NOT");
 | 
			
		||||
	return(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -2045,12 +2085,14 @@ static int www_body(char *hostname, int s, unsigned char *context)
 | 
			
		||||
	{
 | 
			
		||||
	char *buf=NULL;
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	int i,j,k,blank,dot;
 | 
			
		||||
	int i,j,k,dot;
 | 
			
		||||
	struct stat st_buf;
 | 
			
		||||
	SSL *con;
 | 
			
		||||
	SSL_CIPHER *c;
 | 
			
		||||
	BIO *io,*ssl_bio,*sbio;
 | 
			
		||||
#ifdef RENEG
 | 
			
		||||
	long total_bytes;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	buf=OPENSSL_malloc(bufsize);
 | 
			
		||||
	if (buf == NULL) return(0);
 | 
			
		||||
@@ -2121,7 +2163,6 @@ static int www_body(char *hostname, int s, unsigned char *context)
 | 
			
		||||
		SSL_set_msg_callback_arg(con, bio_s_out);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	blank=0;
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (hack)
 | 
			
		||||
@@ -2358,7 +2399,9 @@ static int www_body(char *hostname, int s, unsigned char *context)
 | 
			
		||||
                                        BIO_puts(io,"HTTP/1.0 200 ok\r\nContent-type: text/plain\r\n\r\n");
 | 
			
		||||
                                }
 | 
			
		||||
			/* send the file */
 | 
			
		||||
#ifdef RENEG
 | 
			
		||||
			total_bytes=0;
 | 
			
		||||
#endif
 | 
			
		||||
			for (;;)
 | 
			
		||||
				{
 | 
			
		||||
				i=BIO_read(file,buf,bufsize);
 | 
			
		||||
 
 | 
			
		||||
@@ -62,6 +62,12 @@
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
 | 
			
		||||
#ifdef FLAT_INC
 | 
			
		||||
#include "e_os2.h"
 | 
			
		||||
#else
 | 
			
		||||
#include "../e_os2.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* With IPv6, it looks like Digital has mixed up the proper order of
 | 
			
		||||
   recursive header file inclusion, resulting in the compiler complaining
 | 
			
		||||
   that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which
 | 
			
		||||
@@ -323,7 +329,7 @@ static int init_server_long(int *sock, int port, char *ip, int type)
 | 
			
		||||
	{
 | 
			
		||||
	int ret=0;
 | 
			
		||||
	struct sockaddr_in server;
 | 
			
		||||
	int s= -1,i;
 | 
			
		||||
	int s= -1;
 | 
			
		||||
 | 
			
		||||
	if (!ssl_sock_init()) return(0);
 | 
			
		||||
 | 
			
		||||
@@ -362,7 +368,6 @@ static int init_server_long(int *sock, int port, char *ip, int type)
 | 
			
		||||
		}
 | 
			
		||||
	/* Make it 128 for linux */
 | 
			
		||||
	if (type==SOCK_STREAM && listen(s,128) == -1) goto err;
 | 
			
		||||
	i=0;
 | 
			
		||||
	*sock=s;
 | 
			
		||||
	ret=1;
 | 
			
		||||
err:
 | 
			
		||||
@@ -380,7 +385,7 @@ static int init_server(int *sock, int port, int type)
 | 
			
		||||
 | 
			
		||||
static int do_accept(int acc_sock, int *sock, char **host)
 | 
			
		||||
	{
 | 
			
		||||
	int ret,i;
 | 
			
		||||
	int ret;
 | 
			
		||||
	struct hostent *h1,*h2;
 | 
			
		||||
	static struct sockaddr_in from;
 | 
			
		||||
	int len;
 | 
			
		||||
@@ -403,6 +408,7 @@ redoit:
 | 
			
		||||
	if (ret == INVALID_SOCKET)
 | 
			
		||||
		{
 | 
			
		||||
#if defined(OPENSSL_SYS_WINDOWS) || (defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK))
 | 
			
		||||
		int i;
 | 
			
		||||
		i=WSAGetLastError();
 | 
			
		||||
		BIO_printf(bio_err,"accept error %d\n",i);
 | 
			
		||||
#else
 | 
			
		||||
@@ -457,7 +463,6 @@ redoit:
 | 
			
		||||
			BIO_printf(bio_err,"gethostbyname failure\n");
 | 
			
		||||
			return(0);
 | 
			
		||||
			}
 | 
			
		||||
		i=0;
 | 
			
		||||
		if (h2->h_addrtype != AF_INET)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"gethostbyname addr is not AF_INET\n");
 | 
			
		||||
 
 | 
			
		||||
@@ -521,8 +521,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		{
 | 
			
		||||
		if (!cipher)
 | 
			
		||||
			{
 | 
			
		||||
#ifndef OPENSSL_NO_RC2			
 | 
			
		||||
			cipher = EVP_rc2_40_cbc();
 | 
			
		||||
#ifndef OPENSSL_NO_DES			
 | 
			
		||||
			cipher = EVP_des_ede3_cbc();
 | 
			
		||||
#else
 | 
			
		||||
			BIO_printf(bio_err, "No cipher selected\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										56
									
								
								apps/speed.c
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								apps/speed.c
									
									
									
									
									
								
							@@ -254,8 +254,18 @@
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#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
 | 
			
		||||
#ifndef HAVE_FORK
 | 
			
		||||
# 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 0
 | 
			
		||||
# else
 | 
			
		||||
#  define HAVE_FORK 1
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if HAVE_FORK
 | 
			
		||||
# undef NO_FORK
 | 
			
		||||
#else
 | 
			
		||||
# define NO_FORK
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#undef BUFSIZE
 | 
			
		||||
@@ -271,7 +281,7 @@ static void print_message(const char *s,long num,int length);
 | 
			
		||||
static void pkey_print_message(const char *str, const char *str2,
 | 
			
		||||
	long num, int bits, int sec);
 | 
			
		||||
static void print_result(int alg,int run_no,int count,double time_used);
 | 
			
		||||
#ifdef HAVE_FORK
 | 
			
		||||
#ifndef NO_FORK
 | 
			
		||||
static int do_multi(int multi);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -293,8 +303,12 @@ static const char *names[ALGOR_NUM]={
 | 
			
		||||
  "aes-128 ige","aes-192 ige","aes-256 ige"};
 | 
			
		||||
static double results[ALGOR_NUM][SIZE_NUM];
 | 
			
		||||
static int lengths[SIZE_NUM]={16,64,256,1024,8*1024};
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
static double rsa_results[RSA_NUM][2];
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
static double dsa_results[DSA_NUM][2];
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ECDSA
 | 
			
		||||
static double ecdsa_results[EC_NUM][2];
 | 
			
		||||
#endif
 | 
			
		||||
@@ -486,9 +500,6 @@ 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;
 | 
			
		||||
@@ -579,7 +590,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	unsigned char DES_iv[8];
 | 
			
		||||
	unsigned char iv[2*MAX_BLOCK_SIZE/8];
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	DES_cblock *buf_as_des_cblock = NULL;
 | 
			
		||||
	static DES_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
 | 
			
		||||
	static DES_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
 | 
			
		||||
	static DES_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
 | 
			
		||||
@@ -749,7 +759,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	const EVP_CIPHER *evp_cipher=NULL;
 | 
			
		||||
	const EVP_MD *evp_md=NULL;
 | 
			
		||||
	int decrypt=0;
 | 
			
		||||
#ifdef HAVE_FORK
 | 
			
		||||
#ifndef NO_FORK
 | 
			
		||||
	int multi=0;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -792,9 +802,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf(bio_err,"out of memory\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	buf_as_des_cblock = (DES_cblock *)buf;
 | 
			
		||||
#endif
 | 
			
		||||
	if ((buf2=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"out of memory\n");
 | 
			
		||||
@@ -869,7 +876,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
				BIO_printf(bio_err,"no engine given\n");
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
                        e = setup_engine(bio_err, *argv, 0);
 | 
			
		||||
                        setup_engine(bio_err, *argv, 0);
 | 
			
		||||
			/* j will be increased again further down.  We just
 | 
			
		||||
			   don't want speed to confuse an engine with an
 | 
			
		||||
			   algorithm, especially when none is given (which
 | 
			
		||||
@@ -877,7 +884,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			j--;
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_FORK
 | 
			
		||||
#ifndef NO_FORK
 | 
			
		||||
		else if	((argc > 0) && (strcmp(*argv,"-multi") == 0))
 | 
			
		||||
			{
 | 
			
		||||
			argc--;
 | 
			
		||||
@@ -1257,7 +1264,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			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");
 | 
			
		||||
#ifdef HAVE_FORK
 | 
			
		||||
#ifndef NO_FORK
 | 
			
		||||
			BIO_printf(bio_err,"-multi n        run n benchmarks in parallel.\n");
 | 
			
		||||
#endif
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -1267,7 +1274,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		j++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_FORK
 | 
			
		||||
#ifndef NO_FORK
 | 
			
		||||
	if(multi && do_multi(multi))
 | 
			
		||||
		goto show_res;
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1374,7 +1381,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		count*=2;
 | 
			
		||||
		Time_F(START);
 | 
			
		||||
		for (it=count; it; it--)
 | 
			
		||||
			DES_ecb_encrypt(buf_as_des_cblock,buf_as_des_cblock,
 | 
			
		||||
			DES_ecb_encrypt((DES_cblock *)buf,
 | 
			
		||||
				(DES_cblock *)buf,
 | 
			
		||||
				&sch,DES_ENCRYPT);
 | 
			
		||||
		d=Time_F(STOP);
 | 
			
		||||
		} while (d <3);
 | 
			
		||||
@@ -2462,7 +2470,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
	if (rnd_fake) RAND_cleanup();
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_FORK
 | 
			
		||||
#ifndef NO_FORK
 | 
			
		||||
show_res:
 | 
			
		||||
#endif
 | 
			
		||||
	if(!mr)
 | 
			
		||||
@@ -2717,7 +2725,7 @@ static void print_result(int alg,int run_no,int count,double time_used)
 | 
			
		||||
	results[alg][run_no]=((double)count)/time_used*lengths[run_no];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_FORK
 | 
			
		||||
#ifndef NO_FORK
 | 
			
		||||
static char *sstrsep(char **string, const char *delim)
 | 
			
		||||
    {
 | 
			
		||||
    char isdelim[256];
 | 
			
		||||
@@ -2759,7 +2767,11 @@ static int do_multi(int multi)
 | 
			
		||||
	fds=malloc(multi*sizeof *fds);
 | 
			
		||||
	for(n=0 ; n < multi ; ++n)
 | 
			
		||||
		{
 | 
			
		||||
		pipe(fd);
 | 
			
		||||
		if (pipe(fd) == -1)
 | 
			
		||||
			{
 | 
			
		||||
			fprintf(stderr, "pipe failure\n");
 | 
			
		||||
			exit(1);
 | 
			
		||||
			}
 | 
			
		||||
		fflush(stdout);
 | 
			
		||||
		fflush(stderr);
 | 
			
		||||
		if(fork())
 | 
			
		||||
@@ -2771,7 +2783,11 @@ static int do_multi(int multi)
 | 
			
		||||
			{
 | 
			
		||||
			close(fd[0]);
 | 
			
		||||
			close(1);
 | 
			
		||||
			dup(fd[1]);
 | 
			
		||||
			if (dup(fd[1]) == -1)
 | 
			
		||||
				{
 | 
			
		||||
				fprintf(stderr, "dup failed\n");
 | 
			
		||||
				exit(1);
 | 
			
		||||
				}
 | 
			
		||||
			close(fd[1]);
 | 
			
		||||
			mr=1;
 | 
			
		||||
			usertime=0;
 | 
			
		||||
 
 | 
			
		||||
@@ -539,7 +539,6 @@ bad:
 | 
			
		||||
	if (reqfile)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_PKEY *pkey;
 | 
			
		||||
		X509_CINF *ci;
 | 
			
		||||
		BIO *in;
 | 
			
		||||
 | 
			
		||||
		if (!sign_flag && !CA_flag)
 | 
			
		||||
@@ -607,7 +606,6 @@ bad:
 | 
			
		||||
		print_name(bio_err, "subject=", X509_REQ_get_subject_name(req), nmflag);
 | 
			
		||||
 | 
			
		||||
		if ((x=X509_new()) == NULL) goto end;
 | 
			
		||||
		ci=x->cert_info;
 | 
			
		||||
 | 
			
		||||
		if (sno == NULL)
 | 
			
		||||
			{
 | 
			
		||||
@@ -971,7 +969,7 @@ bad:
 | 
			
		||||
				else
 | 
			
		||||
					{
 | 
			
		||||
					pk=load_key(bio_err,
 | 
			
		||||
						keyfile, FORMAT_PEM, 0,
 | 
			
		||||
						keyfile, keyformat, 0,
 | 
			
		||||
						passin, e, "request key");
 | 
			
		||||
					if (pk == NULL) goto end;
 | 
			
		||||
					}
 | 
			
		||||
@@ -1151,6 +1149,7 @@ static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
 | 
			
		||||
	/* NOTE: this certificate can/should be self signed, unless it was
 | 
			
		||||
	 * a certificate request in which case it is not. */
 | 
			
		||||
	X509_STORE_CTX_set_cert(&xsc,x);
 | 
			
		||||
	X509_STORE_CTX_set_flags(&xsc, X509_V_FLAG_CHECK_SS_SIGNATURE);
 | 
			
		||||
	if (!reqfile && X509_verify_cert(&xsc) <= 0)
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								config
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								config
									
									
									
									
									
								
							@@ -48,10 +48,10 @@ done
 | 
			
		||||
 | 
			
		||||
# First get uname entries that we use below
 | 
			
		||||
 | 
			
		||||
MACHINE=`(uname -m) 2>/dev/null` || MACHINE="unknown"
 | 
			
		||||
RELEASE=`(uname -r) 2>/dev/null` || RELEASE="unknown"
 | 
			
		||||
SYSTEM=`(uname -s) 2>/dev/null`  || SYSTEM="unknown"
 | 
			
		||||
VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown"
 | 
			
		||||
[ "$MACHINE" ] || MACHINE=`(uname -m) 2>/dev/null` || MACHINE="unknown"
 | 
			
		||||
[ "$RELEASE" ] || RELEASE=`(uname -r) 2>/dev/null` || RELEASE="unknown"
 | 
			
		||||
[ "$SYSTEM" ] || SYSTEM=`(uname -s) 2>/dev/null`  || SYSTEM="unknown"
 | 
			
		||||
[ "$BUILD" ] || VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Now test for ISC and SCO, since it is has a braindamaged uname.
 | 
			
		||||
@@ -741,6 +741,10 @@ case "$GUESSOS" in
 | 
			
		||||
	OBJECT_MODE=${OBJECT_MODE:-32}
 | 
			
		||||
	if [ "$CC" = "gcc" ]; then
 | 
			
		||||
	    OUT="aix-gcc"
 | 
			
		||||
          if [ $OBJECT_MODE -eq 64 ]; then
 | 
			
		||||
            echo 'Your $OBJECT_MODE was found to be set to 64'
 | 
			
		||||
            OUT="aix64-gcc"
 | 
			
		||||
          fi
 | 
			
		||||
	elif [ $OBJECT_MODE -eq 64 ]; then
 | 
			
		||||
	    echo 'Your $OBJECT_MODE was found to be set to 64' 
 | 
			
		||||
	    OUT="aix64-cc"
 | 
			
		||||
@@ -769,6 +773,8 @@ case "$GUESSOS" in
 | 
			
		||||
  t3e-cray-unicosmk) OUT="cray-t3e" ;;
 | 
			
		||||
  j90-cray-unicos) OUT="cray-j90" ;;
 | 
			
		||||
  nsr-tandem-nsk) OUT="tandem-c89" ;;
 | 
			
		||||
  x86pc-*-qnx6) OUT="QNX6-i386" ;;
 | 
			
		||||
  *-*-qnx6) OUT="QNX6" ;;
 | 
			
		||||
  *) OUT=`echo $GUESSOS | awk -F- '{print $3}'`;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
@@ -784,6 +790,10 @@ esac
 | 
			
		||||
#  options="$options -DATALLA"
 | 
			
		||||
#fi
 | 
			
		||||
 | 
			
		||||
($CC -Wa,--help -c -o /dev/null -x assembler /dev/null 2>&1 | \
 | 
			
		||||
 grep \\--noexecstack) 2>&1 > /dev/null && \
 | 
			
		||||
  options="$options -Wa,--noexecstack"
 | 
			
		||||
 | 
			
		||||
# gcc < 2.8 does not support -march=ultrasparc
 | 
			
		||||
if [ "$OUT" = solaris-sparcv9-gcc -a $GCCVER -lt 28 ]
 | 
			
		||||
then
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
/* $LP: LPlib/source/LPdir_vms.c,v 1.20 2004/08/26 13:36:05 _cvs_levitte Exp $ */
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2004, Richard Levitte <richard@levitte.org>
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
@@ -82,6 +81,12 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)
 | 
			
		||||
      size_t filespeclen = strlen(directory);
 | 
			
		||||
      char *filespec = NULL;
 | 
			
		||||
 | 
			
		||||
      if (filespeclen == 0)
 | 
			
		||||
	{
 | 
			
		||||
	  errno = ENOENT;
 | 
			
		||||
	  return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
      /* MUST be a VMS directory specification!  Let's estimate if it is. */
 | 
			
		||||
      if (directory[filespeclen-1] != ']'
 | 
			
		||||
	  && directory[filespeclen-1] != '>'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
/* $LP: LPlib/source/LPdir_win.c,v 1.10 2004/08/26 13:36:05 _cvs_levitte Exp $ */
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2004, Richard Levitte <richard@levitte.org>
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
@@ -65,6 +64,16 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)
 | 
			
		||||
  errno = 0;
 | 
			
		||||
  if (*ctx == NULL)
 | 
			
		||||
    {
 | 
			
		||||
      const char *extdir = directory;
 | 
			
		||||
      char *extdirbuf = NULL;
 | 
			
		||||
      size_t dirlen = strlen (directory);
 | 
			
		||||
 | 
			
		||||
      if (dirlen == 0)
 | 
			
		||||
	{
 | 
			
		||||
	  errno = ENOENT;
 | 
			
		||||
	  return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
      *ctx = (LP_DIR_CTX *)malloc(sizeof(LP_DIR_CTX));
 | 
			
		||||
      if (*ctx == NULL)
 | 
			
		||||
	{
 | 
			
		||||
@@ -73,15 +82,35 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)
 | 
			
		||||
	}
 | 
			
		||||
      memset(*ctx, '\0', sizeof(LP_DIR_CTX));
 | 
			
		||||
 | 
			
		||||
      if (directory[dirlen-1] != '*')
 | 
			
		||||
	{
 | 
			
		||||
	  extdirbuf = (char *)malloc(dirlen + 3);
 | 
			
		||||
	  if (extdirbuf == NULL)
 | 
			
		||||
	    {
 | 
			
		||||
	      free(*ctx);
 | 
			
		||||
	      *ctx = NULL;
 | 
			
		||||
	      errno = ENOMEM;
 | 
			
		||||
	      return 0;
 | 
			
		||||
	    }
 | 
			
		||||
	  if (directory[dirlen-1] != '/' && directory[dirlen-1] != '\\')
 | 
			
		||||
	    extdir = strcat(strcpy (extdirbuf,directory),"/*");
 | 
			
		||||
	  else
 | 
			
		||||
	    extdir = strcat(strcpy (extdirbuf,directory),"*");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
      if (sizeof(TCHAR) != sizeof(char))
 | 
			
		||||
	{
 | 
			
		||||
	  TCHAR *wdir = NULL;
 | 
			
		||||
	  /* len_0 denotes string length *with* trailing 0 */ 
 | 
			
		||||
	  size_t index = 0,len_0 = strlen(directory) + 1;
 | 
			
		||||
	  size_t index = 0,len_0 = strlen(extdir) + 1;
 | 
			
		||||
 | 
			
		||||
	  wdir = (TCHAR *)malloc(len_0 * sizeof(TCHAR));
 | 
			
		||||
	  wdir = (TCHAR *)calloc(len_0, sizeof(TCHAR));
 | 
			
		||||
	  if (wdir == NULL)
 | 
			
		||||
	    {
 | 
			
		||||
	      if (extdirbuf != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		  free (extdirbuf);
 | 
			
		||||
		}
 | 
			
		||||
	      free(*ctx);
 | 
			
		||||
	      *ctx = NULL;
 | 
			
		||||
	      errno = ENOMEM;
 | 
			
		||||
@@ -89,17 +118,23 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)
 | 
			
		||||
	    }
 | 
			
		||||
 | 
			
		||||
#ifdef LP_MULTIBYTE_AVAILABLE
 | 
			
		||||
	  if (!MultiByteToWideChar(CP_ACP, 0, directory, len_0, (WCHAR *)wdir, len_0))
 | 
			
		||||
	  if (!MultiByteToWideChar(CP_ACP, 0, extdir, len_0, (WCHAR *)wdir, len_0))
 | 
			
		||||
#endif
 | 
			
		||||
	    for (index = 0; index < len_0; index++)
 | 
			
		||||
	      wdir[index] = (TCHAR)directory[index];
 | 
			
		||||
	      wdir[index] = (TCHAR)extdir[index];
 | 
			
		||||
 | 
			
		||||
	  (*ctx)->handle = FindFirstFile(wdir, &(*ctx)->ctx);
 | 
			
		||||
 | 
			
		||||
	  free(wdir);
 | 
			
		||||
	}
 | 
			
		||||
      else
 | 
			
		||||
	(*ctx)->handle = FindFirstFile((TCHAR *)directory, &(*ctx)->ctx);
 | 
			
		||||
	{
 | 
			
		||||
	  (*ctx)->handle = FindFirstFile((TCHAR *)extdir, &(*ctx)->ctx);
 | 
			
		||||
	}
 | 
			
		||||
      if (extdirbuf != NULL)
 | 
			
		||||
	{
 | 
			
		||||
	  free (extdirbuf);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
      if ((*ctx)->handle == INVALID_HANDLE_VALUE)
 | 
			
		||||
	{
 | 
			
		||||
@@ -116,7 +151,6 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)
 | 
			
		||||
	  return 0;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (sizeof(TCHAR) != sizeof(char))
 | 
			
		||||
    {
 | 
			
		||||
      TCHAR *wdir = (*ctx)->ctx.cFileName;
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,7 @@ AFLAGS=$(ASFLAGS)
 | 
			
		||||
LIBS=
 | 
			
		||||
 | 
			
		||||
GENERAL=Makefile README crypto-lib.com install.com
 | 
			
		||||
TEST=constant_time_test.c
 | 
			
		||||
 | 
			
		||||
LIB= $(TOP)/libcrypto.a
 | 
			
		||||
SHARED_LIB= libcrypto$(SHLIB_EXT)
 | 
			
		||||
@@ -40,7 +41,8 @@ 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 o_str.h o_dir.h $(EXHEADER)
 | 
			
		||||
HEADER=	cryptlib.h buildinf.h md32_common.h o_time.h o_str.h o_dir.h \
 | 
			
		||||
	constant_time_locl.h $(EXHEADER)
 | 
			
		||||
 | 
			
		||||
ALL=    $(GENERAL) $(SRC) $(HEADER)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -201,7 +201,6 @@ void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
    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;
 | 
			
		||||
 
 | 
			
		||||
@@ -85,9 +85,9 @@ int AES_wrap_key(AES_KEY *key, const unsigned char *iv,
 | 
			
		||||
			A[7] ^= (unsigned char)(t & 0xff);
 | 
			
		||||
			if (t > 0xff)	
 | 
			
		||||
				{
 | 
			
		||||
				A[6] ^= (unsigned char)((t & 0xff) >> 8);
 | 
			
		||||
				A[5] ^= (unsigned char)((t & 0xff) >> 16);
 | 
			
		||||
				A[4] ^= (unsigned char)((t & 0xff) >> 24);
 | 
			
		||||
				A[6] ^= (unsigned char)((t >> 8) & 0xff);
 | 
			
		||||
				A[5] ^= (unsigned char)((t >> 16) & 0xff);
 | 
			
		||||
				A[4] ^= (unsigned char)((t >> 24) & 0xff);
 | 
			
		||||
				}
 | 
			
		||||
			memcpy(R, B + 8, 8);
 | 
			
		||||
			}
 | 
			
		||||
@@ -119,9 +119,9 @@ int AES_unwrap_key(AES_KEY *key, const unsigned char *iv,
 | 
			
		||||
			A[7] ^= (unsigned char)(t & 0xff);
 | 
			
		||||
			if (t > 0xff)	
 | 
			
		||||
				{
 | 
			
		||||
				A[6] ^= (unsigned char)((t & 0xff) >> 8);
 | 
			
		||||
				A[5] ^= (unsigned char)((t & 0xff) >> 16);
 | 
			
		||||
				A[4] ^= (unsigned char)((t & 0xff) >> 24);
 | 
			
		||||
				A[6] ^= (unsigned char)((t >> 8) & 0xff);
 | 
			
		||||
				A[5] ^= (unsigned char)((t >> 16) & 0xff);
 | 
			
		||||
				A[4] ^= (unsigned char)((t >> 24) & 0xff);
 | 
			
		||||
				}
 | 
			
		||||
			memcpy(B + 8, R, 8);
 | 
			
		||||
			AES_decrypt(B, B, key);
 | 
			
		||||
 
 | 
			
		||||
@@ -751,7 +751,19 @@ $code.=<<___;
 | 
			
		||||
AES_set_encrypt_key:
 | 
			
		||||
	push	%rbx
 | 
			
		||||
	push	%rbp
 | 
			
		||||
	sub	\$8,%rsp
 | 
			
		||||
 | 
			
		||||
	call	_x86_64_AES_set_encrypt_key
 | 
			
		||||
 | 
			
		||||
	mov	8(%rsp),%rbp
 | 
			
		||||
	mov	16(%rsp),%rbx
 | 
			
		||||
	add	\$24,%rsp
 | 
			
		||||
	ret
 | 
			
		||||
.size	AES_set_encrypt_key,.-AES_set_encrypt_key
 | 
			
		||||
 | 
			
		||||
.type	_x86_64_AES_set_encrypt_key,\@abi-omnipotent
 | 
			
		||||
.align	16
 | 
			
		||||
_x86_64_AES_set_encrypt_key:
 | 
			
		||||
	mov	%esi,%ecx			# %ecx=bits
 | 
			
		||||
	mov	%rdi,%rsi			# %rsi=userKey
 | 
			
		||||
	mov	%rdx,%rdi			# %rdi=key
 | 
			
		||||
@@ -938,10 +950,8 @@ $code.=<<___;
 | 
			
		||||
.Lbadpointer:
 | 
			
		||||
	mov	\$-1,%rax
 | 
			
		||||
.Lexit:
 | 
			
		||||
	pop	%rbp
 | 
			
		||||
	pop	%rbx
 | 
			
		||||
	ret
 | 
			
		||||
.size	AES_set_encrypt_key,.-AES_set_encrypt_key
 | 
			
		||||
	.byte	0xf3,0xc3		# rep ret
 | 
			
		||||
.size	_x86_64_AES_set_encrypt_key,.-_x86_64_AES_set_encrypt_key
 | 
			
		||||
___
 | 
			
		||||
 | 
			
		||||
sub deckey()
 | 
			
		||||
@@ -973,15 +983,14 @@ $code.=<<___;
 | 
			
		||||
.type	AES_set_decrypt_key,\@function,3
 | 
			
		||||
.align	16
 | 
			
		||||
AES_set_decrypt_key:
 | 
			
		||||
	push	%rdx
 | 
			
		||||
	call	AES_set_encrypt_key
 | 
			
		||||
	cmp	\$0,%eax
 | 
			
		||||
	je	.Lproceed
 | 
			
		||||
	lea	24(%rsp),%rsp
 | 
			
		||||
	ret
 | 
			
		||||
.Lproceed:
 | 
			
		||||
	push	%rbx
 | 
			
		||||
	push	%rbp
 | 
			
		||||
	push	%rdx			# save key schedule
 | 
			
		||||
 | 
			
		||||
	call	_x86_64_AES_set_encrypt_key
 | 
			
		||||
	mov	(%rsp),%r8		# restore key schedule
 | 
			
		||||
	mov	%rbx,(%rsp)
 | 
			
		||||
	cmp	\$0,%eax
 | 
			
		||||
	jne	.Labort
 | 
			
		||||
 | 
			
		||||
	mov	240(%r8),%ecx		# pull number of rounds
 | 
			
		||||
	xor	%rdi,%rdi
 | 
			
		||||
@@ -1023,7 +1032,10 @@ $code.=<<___;
 | 
			
		||||
	jnz	.Lpermute
 | 
			
		||||
 | 
			
		||||
	xor	%rax,%rax
 | 
			
		||||
	pop	%rbx
 | 
			
		||||
.Labort:
 | 
			
		||||
	mov	8(%rsp),%rbp
 | 
			
		||||
	mov	16(%rsp),%rbx
 | 
			
		||||
	add	\$24,%rsp
 | 
			
		||||
	ret
 | 
			
		||||
.size	AES_set_decrypt_key,.-AES_set_decrypt_key
 | 
			
		||||
___
 | 
			
		||||
@@ -1181,12 +1193,12 @@ AES_cbc_encrypt:
 | 
			
		||||
.Lcbc_cleanup:
 | 
			
		||||
	cmpl	\$0,$mark	# was the key schedule copied?
 | 
			
		||||
	lea	$aes_key,%rdi
 | 
			
		||||
	mov	$_rsp,%rsp
 | 
			
		||||
	je	.Lcbc_exit
 | 
			
		||||
		mov	\$240/8,%ecx
 | 
			
		||||
		xor	%rax,%rax
 | 
			
		||||
		.long	0x90AB48F3	# rep stosq
 | 
			
		||||
.Lcbc_exit:
 | 
			
		||||
	mov	$_rsp,%rsp
 | 
			
		||||
	popfq
 | 
			
		||||
	pop	%r15
 | 
			
		||||
	pop	%r14
 | 
			
		||||
 
 | 
			
		||||
@@ -136,11 +136,16 @@ ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,
 | 
			
		||||
 | 
			
		||||
	p= *pp;
 | 
			
		||||
	i= *(p++);
 | 
			
		||||
	if (i > 7)
 | 
			
		||||
		{
 | 
			
		||||
		i=ASN1_R_INVALID_BIT_STRING_BITS_LEFT;
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
	/* We do this to preserve the settings.  If we modify
 | 
			
		||||
	 * the settings, via the _set_bit function, we will recalculate
 | 
			
		||||
	 * on output */
 | 
			
		||||
	ret->flags&= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07); /* clear */
 | 
			
		||||
	ret->flags|=(ASN1_STRING_FLAG_BITS_LEFT|(i&0x07)); /* set */
 | 
			
		||||
	ret->flags|=(ASN1_STRING_FLAG_BITS_LEFT|i); /* set */
 | 
			
		||||
 | 
			
		||||
	if (len-- > 1) /* using one because of the bits left byte */
 | 
			
		||||
		{
 | 
			
		||||
 
 | 
			
		||||
@@ -57,6 +57,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include "cryptlib.h"
 | 
			
		||||
#include <openssl/buffer.h>
 | 
			
		||||
#include <openssl/asn1_mac.h>
 | 
			
		||||
@@ -143,17 +144,11 @@ static int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb)
 | 
			
		||||
	BUF_MEM *b;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	int i;
 | 
			
		||||
	int ret=-1;
 | 
			
		||||
	ASN1_const_CTX c;
 | 
			
		||||
	int want=HEADER_SIZE;
 | 
			
		||||
	size_t want=HEADER_SIZE;
 | 
			
		||||
	int eos=0;
 | 
			
		||||
#if defined(__GNUC__) && defined(__ia64)
 | 
			
		||||
	/* pathetic compiler bug in all known versions as of Nov. 2002 */
 | 
			
		||||
	long off=0;
 | 
			
		||||
#else
 | 
			
		||||
	int off=0;
 | 
			
		||||
#endif
 | 
			
		||||
	int len=0;
 | 
			
		||||
	size_t off=0;
 | 
			
		||||
	size_t len=0;
 | 
			
		||||
 | 
			
		||||
	b=BUF_MEM_new();
 | 
			
		||||
	if (b == NULL)
 | 
			
		||||
@@ -169,7 +164,7 @@ static int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb)
 | 
			
		||||
			{
 | 
			
		||||
			want-=(len-off);
 | 
			
		||||
 | 
			
		||||
			if (!BUF_MEM_grow_clean(b,len+want))
 | 
			
		||||
			if (len + want < len || !BUF_MEM_grow_clean(b,len+want))
 | 
			
		||||
				{
 | 
			
		||||
				ASN1err(ASN1_F_ASN1_D2I_READ_BIO,ERR_R_MALLOC_FAILURE);
 | 
			
		||||
				goto err;
 | 
			
		||||
@@ -181,7 +176,14 @@ static int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb)
 | 
			
		||||
				goto err;
 | 
			
		||||
				}
 | 
			
		||||
			if (i > 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (len+i < len)
 | 
			
		||||
					{
 | 
			
		||||
					ASN1err(ASN1_F_ASN1_D2I_READ_BIO,ASN1_R_TOO_LONG);
 | 
			
		||||
					goto err;
 | 
			
		||||
					}
 | 
			
		||||
				len+=i;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		/* else data already loaded */
 | 
			
		||||
 | 
			
		||||
@@ -206,6 +208,11 @@ static int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb)
 | 
			
		||||
			{
 | 
			
		||||
			/* no data body so go round again */
 | 
			
		||||
			eos++;
 | 
			
		||||
			if (eos < 0)
 | 
			
		||||
				{
 | 
			
		||||
				ASN1err(ASN1_F_ASN1_D2I_READ_BIO,ASN1_R_HEADER_TOO_LONG);
 | 
			
		||||
				goto err;
 | 
			
		||||
				}
 | 
			
		||||
			want=HEADER_SIZE;
 | 
			
		||||
			}
 | 
			
		||||
		else if (eos && (c.slen == 0) && (c.tag == V_ASN1_EOC))
 | 
			
		||||
@@ -220,10 +227,16 @@ static int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb)
 | 
			
		||||
		else 
 | 
			
		||||
			{
 | 
			
		||||
			/* suck in c.slen bytes of data */
 | 
			
		||||
			want=(int)c.slen;
 | 
			
		||||
			want=c.slen;
 | 
			
		||||
			if (want > (len-off))
 | 
			
		||||
				{
 | 
			
		||||
				want-=(len-off);
 | 
			
		||||
				if (want > INT_MAX /* BIO_read takes an int length */ ||
 | 
			
		||||
					len+want < len)
 | 
			
		||||
						{
 | 
			
		||||
						ASN1err(ASN1_F_ASN1_D2I_READ_BIO,ASN1_R_TOO_LONG);
 | 
			
		||||
						goto err;
 | 
			
		||||
						}
 | 
			
		||||
				if (!BUF_MEM_grow_clean(b,len+want))
 | 
			
		||||
					{
 | 
			
		||||
					ASN1err(ASN1_F_ASN1_D2I_READ_BIO,ERR_R_MALLOC_FAILURE);
 | 
			
		||||
@@ -238,11 +251,18 @@ static int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb)
 | 
			
		||||
						    ASN1_R_NOT_ENOUGH_DATA);
 | 
			
		||||
						goto err;
 | 
			
		||||
						}
 | 
			
		||||
					/* This can't overflow because
 | 
			
		||||
					 * |len+want| didn't overflow. */
 | 
			
		||||
					len+=i;
 | 
			
		||||
					want -= i;
 | 
			
		||||
					want-=i;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			off+=(int)c.slen;
 | 
			
		||||
			if (off + c.slen < off)
 | 
			
		||||
				{
 | 
			
		||||
				ASN1err(ASN1_F_ASN1_D2I_READ_BIO,ASN1_R_TOO_LONG);
 | 
			
		||||
				goto err;
 | 
			
		||||
				}
 | 
			
		||||
			off+=c.slen;
 | 
			
		||||
			if (eos <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				break;
 | 
			
		||||
@@ -252,9 +272,15 @@ static int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (off > INT_MAX)
 | 
			
		||||
		{
 | 
			
		||||
		ASN1err(ASN1_F_ASN1_D2I_READ_BIO,ASN1_R_TOO_LONG);
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	*pb = b;
 | 
			
		||||
	return off;
 | 
			
		||||
err:
 | 
			
		||||
	if (b != NULL) BUF_MEM_free(b);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	return -1;
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -116,7 +116,7 @@ int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp)
 | 
			
		||||
	int pad=0,ret,i,neg;
 | 
			
		||||
	unsigned char *p,*n,pb=0;
 | 
			
		||||
 | 
			
		||||
	if ((a == NULL) || (a->data == NULL)) return(0);
 | 
			
		||||
	if (a == NULL) return(0);
 | 
			
		||||
	neg=a->type & V_ASN1_NEG;
 | 
			
		||||
	if (a->length == 0)
 | 
			
		||||
		ret=1;
 | 
			
		||||
@@ -273,7 +273,7 @@ ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp,
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_INTEGER *ret=NULL;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	unsigned char *to,*s;
 | 
			
		||||
	unsigned char *s;
 | 
			
		||||
	long len;
 | 
			
		||||
	int inf,tag,xclass;
 | 
			
		||||
	int i;
 | 
			
		||||
@@ -308,7 +308,6 @@ ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp,
 | 
			
		||||
		i=ERR_R_MALLOC_FAILURE;
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
	to=s;
 | 
			
		||||
	ret->type=V_ASN1_INTEGER;
 | 
			
		||||
	if(len) {
 | 
			
		||||
		if ((*p == 0) && (len != 1))
 | 
			
		||||
 
 | 
			
		||||
@@ -93,7 +93,7 @@ int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len,
 | 
			
		||||
	int str_type;
 | 
			
		||||
	int ret;
 | 
			
		||||
	char free_out;
 | 
			
		||||
	int outform, outlen;
 | 
			
		||||
	int outform, outlen = 0;
 | 
			
		||||
	ASN1_STRING *dest;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	int nchar;
 | 
			
		||||
 
 | 
			
		||||
@@ -139,7 +139,7 @@ int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num)
 | 
			
		||||
				ASN1err(ASN1_F_A2D_ASN1_OBJECT,ASN1_R_INVALID_DIGIT);
 | 
			
		||||
				goto err;
 | 
			
		||||
				}
 | 
			
		||||
			if (!use_bn && l > (ULONG_MAX / 10L))
 | 
			
		||||
			if (!use_bn && l >= ((ULONG_MAX - 80) / 10L))
 | 
			
		||||
				{
 | 
			
		||||
				use_bn = 1;
 | 
			
		||||
				if (!bl)
 | 
			
		||||
@@ -285,12 +285,35 @@ err:
 | 
			
		||||
		ASN1_OBJECT_free(ret);
 | 
			
		||||
	return(NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp,
 | 
			
		||||
	     long len)
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_OBJECT *ret=NULL;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	int i;
 | 
			
		||||
	int i, length;
 | 
			
		||||
 | 
			
		||||
	/* Sanity check OID encoding.
 | 
			
		||||
	 * Need at least one content octet.
 | 
			
		||||
	 * MSB must be clear in the last octet.
 | 
			
		||||
	 * can't have leading 0x80 in subidentifiers, see: X.690 8.19.2
 | 
			
		||||
	 */
 | 
			
		||||
	if (len <= 0 || len > INT_MAX || pp == NULL || (p = *pp) == NULL ||
 | 
			
		||||
	    p[len - 1] & 0x80)
 | 
			
		||||
		{
 | 
			
		||||
		ASN1err(ASN1_F_C2I_ASN1_OBJECT,ASN1_R_INVALID_OBJECT_ENCODING);
 | 
			
		||||
		return NULL;
 | 
			
		||||
		}
 | 
			
		||||
	/* Now 0 < len <= INT_MAX, so the cast is safe. */
 | 
			
		||||
	length = (int)len;
 | 
			
		||||
	for (i = 0; i < length; i++, p++)
 | 
			
		||||
		{
 | 
			
		||||
		if (*p == 0x80 && (!i || !(p[-1] & 0x80)))
 | 
			
		||||
			{
 | 
			
		||||
			ASN1err(ASN1_F_C2I_ASN1_OBJECT,ASN1_R_INVALID_OBJECT_ENCODING);
 | 
			
		||||
			return NULL;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	/* only the ASN1_OBJECTs from the 'table' will have values
 | 
			
		||||
	 * for ->sn or ->ln */
 | 
			
		||||
@@ -302,20 +325,20 @@ ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp,
 | 
			
		||||
	else	ret=(*a);
 | 
			
		||||
 | 
			
		||||
	p= *pp;
 | 
			
		||||
	if ((ret->data == NULL) || (ret->length < len))
 | 
			
		||||
	if ((ret->data == NULL) || (ret->length < length))
 | 
			
		||||
		{
 | 
			
		||||
		if (ret->data != NULL) OPENSSL_free(ret->data);
 | 
			
		||||
		ret->data=(unsigned char *)OPENSSL_malloc(len ? (int)len : 1);
 | 
			
		||||
		ret->data=(unsigned char *)OPENSSL_malloc(length);
 | 
			
		||||
		ret->flags|=ASN1_OBJECT_FLAG_DYNAMIC_DATA;
 | 
			
		||||
		if (ret->data == NULL)
 | 
			
		||||
			{ i=ERR_R_MALLOC_FAILURE; goto err; }
 | 
			
		||||
		}
 | 
			
		||||
	memcpy(ret->data,p,(int)len);
 | 
			
		||||
	ret->length=(int)len;
 | 
			
		||||
	memcpy(ret->data,p,length);
 | 
			
		||||
	ret->length=length;
 | 
			
		||||
	ret->sn=NULL;
 | 
			
		||||
	ret->ln=NULL;
 | 
			
		||||
	/* ret->flags=ASN1_OBJECT_FLAG_DYNAMIC; we know it is dynamic */
 | 
			
		||||
	p+=len;
 | 
			
		||||
	p+=length;
 | 
			
		||||
 | 
			
		||||
	if (a != NULL) (*a)=ret;
 | 
			
		||||
	*pp=p;
 | 
			
		||||
 
 | 
			
		||||
@@ -74,6 +74,11 @@
 | 
			
		||||
 | 
			
		||||
#define CHARTYPE_BS_ESC		(ASN1_STRFLGS_ESC_2253 | CHARTYPE_FIRST_ESC_2253 | CHARTYPE_LAST_ESC_2253)
 | 
			
		||||
 | 
			
		||||
#define ESC_FLAGS (ASN1_STRFLGS_ESC_2253 | \
 | 
			
		||||
		  ASN1_STRFLGS_ESC_QUOTE | \
 | 
			
		||||
		  ASN1_STRFLGS_ESC_CTRL | \
 | 
			
		||||
		  ASN1_STRFLGS_ESC_MSB)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Three IO functions for sending data to memory, a BIO and
 | 
			
		||||
 * and a FILE pointer.
 | 
			
		||||
@@ -148,6 +153,13 @@ static int do_esc_char(unsigned long c, unsigned char flags, char *do_quotes, ch
 | 
			
		||||
		if(!io_ch(arg, tmphex, 3)) return -1;
 | 
			
		||||
		return 3;
 | 
			
		||||
	}
 | 
			
		||||
	/* If we get this far and do any escaping at all must escape 
 | 
			
		||||
	 * the escape character itself: backslash.
 | 
			
		||||
	 */
 | 
			
		||||
	if (chtmp == '\\' && flags & ESC_FLAGS) {
 | 
			
		||||
		if(!io_ch(arg, "\\\\", 2)) return -1;
 | 
			
		||||
		return 2;
 | 
			
		||||
	}
 | 
			
		||||
	if(!io_ch(arg, &chtmp, 1)) return -1;
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
@@ -292,11 +304,6 @@ static const signed char tag2nbyte[] = {
 | 
			
		||||
	4, -1, 2		/* 28-30 */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define ESC_FLAGS (ASN1_STRFLGS_ESC_2253 | \
 | 
			
		||||
		  ASN1_STRFLGS_ESC_QUOTE | \
 | 
			
		||||
		  ASN1_STRFLGS_ESC_CTRL | \
 | 
			
		||||
		  ASN1_STRFLGS_ESC_MSB)
 | 
			
		||||
 | 
			
		||||
/* This is the main function, print out an
 | 
			
		||||
 * ASN1_STRING taking note of various escape
 | 
			
		||||
 * and display options. Returns number of
 | 
			
		||||
@@ -560,6 +567,7 @@ int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in)
 | 
			
		||||
	if(mbflag == -1) return -1;
 | 
			
		||||
	mbflag |= MBSTRING_FLAG;
 | 
			
		||||
	stmp.data = NULL;
 | 
			
		||||
	stmp.length = 0;
 | 
			
		||||
	ret = ASN1_mbstring_copy(&str, in->data, in->length, mbflag, B_ASN1_UTF8STRING);
 | 
			
		||||
	if(ret < 0) return ret;
 | 
			
		||||
	*out = stmp.data;
 | 
			
		||||
 
 | 
			
		||||
@@ -75,7 +75,7 @@ static int table_cmp(const void *a, const void *b);
 | 
			
		||||
 * certain software (e.g. Netscape) has problems with them.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static unsigned long global_mask = 0xFFFFFFFFL;
 | 
			
		||||
static unsigned long global_mask = B_ASN1_UTF8STRING;
 | 
			
		||||
 | 
			
		||||
void ASN1_STRING_set_default_mask(unsigned long mask)
 | 
			
		||||
{
 | 
			
		||||
@@ -96,7 +96,7 @@ unsigned long ASN1_STRING_get_default_mask(void)
 | 
			
		||||
 * default:   the default value, Printable, T61, BMP.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int ASN1_STRING_set_default_mask_asc(char *p)
 | 
			
		||||
int ASN1_STRING_set_default_mask_asc(const char *p)
 | 
			
		||||
{
 | 
			
		||||
	unsigned long mask;
 | 
			
		||||
	char *end;
 | 
			
		||||
 
 | 
			
		||||
@@ -108,3 +108,49 @@ int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value)
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_STACK_OF(ASN1_TYPE)
 | 
			
		||||
IMPLEMENT_ASN1_SET_OF(ASN1_TYPE)
 | 
			
		||||
 | 
			
		||||
/* Returns 0 if they are equal, != 0 otherwise. */
 | 
			
		||||
int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b)
 | 
			
		||||
	{
 | 
			
		||||
	int result = -1;
 | 
			
		||||
 | 
			
		||||
	if (!a || !b || a->type != b->type) return -1;
 | 
			
		||||
 | 
			
		||||
	switch (a->type)
 | 
			
		||||
		{
 | 
			
		||||
	case V_ASN1_OBJECT:
 | 
			
		||||
		result = OBJ_cmp(a->value.object, b->value.object);
 | 
			
		||||
		break;
 | 
			
		||||
	case V_ASN1_NULL:
 | 
			
		||||
		result = 0;	/* They do not have content. */
 | 
			
		||||
		break;
 | 
			
		||||
	case V_ASN1_INTEGER:
 | 
			
		||||
	case V_ASN1_NEG_INTEGER:
 | 
			
		||||
	case V_ASN1_ENUMERATED:
 | 
			
		||||
	case V_ASN1_NEG_ENUMERATED:
 | 
			
		||||
	case V_ASN1_BIT_STRING:
 | 
			
		||||
	case V_ASN1_OCTET_STRING:
 | 
			
		||||
	case V_ASN1_SEQUENCE:
 | 
			
		||||
	case V_ASN1_SET:
 | 
			
		||||
	case V_ASN1_NUMERICSTRING:
 | 
			
		||||
	case V_ASN1_PRINTABLESTRING:
 | 
			
		||||
	case V_ASN1_T61STRING:
 | 
			
		||||
	case V_ASN1_VIDEOTEXSTRING:
 | 
			
		||||
	case V_ASN1_IA5STRING:
 | 
			
		||||
	case V_ASN1_UTCTIME:
 | 
			
		||||
	case V_ASN1_GENERALIZEDTIME:
 | 
			
		||||
	case V_ASN1_GRAPHICSTRING:
 | 
			
		||||
	case V_ASN1_VISIBLESTRING:
 | 
			
		||||
	case V_ASN1_GENERALSTRING:
 | 
			
		||||
	case V_ASN1_UNIVERSALSTRING:
 | 
			
		||||
	case V_ASN1_BMPSTRING:
 | 
			
		||||
	case V_ASN1_UTF8STRING:
 | 
			
		||||
	case V_ASN1_OTHER:
 | 
			
		||||
	default:
 | 
			
		||||
		result = ASN1_STRING_cmp((ASN1_STRING *) a->value.ptr,
 | 
			
		||||
					 (ASN1_STRING *) b->value.ptr);
 | 
			
		||||
		break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	return result;
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -89,6 +89,12 @@ int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *a, ASN1_BIT_STRING *signature,
 | 
			
		||||
		ASN1err(ASN1_F_ASN1_VERIFY,ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM);
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (signature->type == V_ASN1_BIT_STRING && signature->flags & 0x7)
 | 
			
		||||
		{
 | 
			
		||||
		ASN1err(ASN1_F_ASN1_VERIFY, ASN1_R_INVALID_BIT_STRING_BITS_LEFT);
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	inl=i2d(data,NULL);
 | 
			
		||||
	buf_in=OPENSSL_malloc((unsigned int)inl);
 | 
			
		||||
@@ -138,6 +144,18 @@ int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a, ASN1_BIT_STRING *signat
 | 
			
		||||
	unsigned char *buf_in=NULL;
 | 
			
		||||
	int ret= -1,i,inl;
 | 
			
		||||
 | 
			
		||||
	if (!pkey)
 | 
			
		||||
		{
 | 
			
		||||
		ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_PASSED_NULL_PARAMETER);
 | 
			
		||||
		return -1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (signature->type == V_ASN1_BIT_STRING && signature->flags & 0x7)
 | 
			
		||||
		{
 | 
			
		||||
		ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ASN1_R_INVALID_BIT_STRING_BITS_LEFT);
 | 
			
		||||
		return -1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	EVP_MD_CTX_init(&ctx);
 | 
			
		||||
	i=OBJ_obj2nid(a->algorithm);
 | 
			
		||||
	type=EVP_get_digestbyname(OBJ_nid2sn(i));
 | 
			
		||||
 
 | 
			
		||||
@@ -344,6 +344,8 @@ typedef struct ASN1_VALUE_st ASN1_VALUE;
 | 
			
		||||
    ((void*) (1 ? p : (type*)0))
 | 
			
		||||
#define CHECKED_PPTR_OF(type, p) \
 | 
			
		||||
    ((void**) (1 ? p : (type**)0))
 | 
			
		||||
#define CHECKED_PTR_OF_TO_CHAR(type, p) \
 | 
			
		||||
    ((char*) (1 ? p : (type*)0))
 | 
			
		||||
 | 
			
		||||
#define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long)
 | 
			
		||||
#define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **)
 | 
			
		||||
@@ -767,6 +769,7 @@ DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE)
 | 
			
		||||
int ASN1_TYPE_get(ASN1_TYPE *a);
 | 
			
		||||
void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value);
 | 
			
		||||
int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value);
 | 
			
		||||
int            ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b);
 | 
			
		||||
 | 
			
		||||
ASN1_OBJECT *	ASN1_OBJECT_new(void );
 | 
			
		||||
void		ASN1_OBJECT_free(ASN1_OBJECT *a);
 | 
			
		||||
@@ -933,12 +936,12 @@ void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, char *x);
 | 
			
		||||
#define ASN1_dup_of(type,i2d,d2i,x) \
 | 
			
		||||
    ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \
 | 
			
		||||
		     CHECKED_D2I_OF(type, d2i), \
 | 
			
		||||
		     CHECKED_PTR_OF(type, x)))
 | 
			
		||||
		     CHECKED_PTR_OF_TO_CHAR(type, x)))
 | 
			
		||||
 | 
			
		||||
#define ASN1_dup_of_const(type,i2d,d2i,x) \
 | 
			
		||||
    ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \
 | 
			
		||||
		     CHECKED_D2I_OF(type, d2i), \
 | 
			
		||||
		     CHECKED_PTR_OF(const type, x)))
 | 
			
		||||
		     CHECKED_PTR_OF_TO_CHAR(const type, x)))
 | 
			
		||||
 | 
			
		||||
void *ASN1_item_dup(const ASN1_ITEM *it, void *x);
 | 
			
		||||
 | 
			
		||||
@@ -1049,7 +1052,7 @@ ASN1_STRING *ASN1_pack_string(void *obj, i2d_of_void *i2d,
 | 
			
		||||
ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_OCTET_STRING **oct);
 | 
			
		||||
 | 
			
		||||
void ASN1_STRING_set_default_mask(unsigned long mask);
 | 
			
		||||
int ASN1_STRING_set_default_mask_asc(char *p);
 | 
			
		||||
int ASN1_STRING_set_default_mask_asc(const char *p);
 | 
			
		||||
unsigned long ASN1_STRING_get_default_mask(void);
 | 
			
		||||
int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len,
 | 
			
		||||
					int inform, unsigned long mask);
 | 
			
		||||
@@ -1258,11 +1261,13 @@ void ERR_load_ASN1_strings(void);
 | 
			
		||||
#define ASN1_R_ILLEGAL_TIME_VALUE			 184
 | 
			
		||||
#define ASN1_R_INTEGER_NOT_ASCII_FORMAT			 185
 | 
			
		||||
#define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG		 128
 | 
			
		||||
#define ASN1_R_INVALID_BIT_STRING_BITS_LEFT		 220
 | 
			
		||||
#define ASN1_R_INVALID_BMPSTRING_LENGTH			 129
 | 
			
		||||
#define ASN1_R_INVALID_DIGIT				 130
 | 
			
		||||
#define ASN1_R_INVALID_MIME_TYPE			 200
 | 
			
		||||
#define ASN1_R_INVALID_MODIFIER				 186
 | 
			
		||||
#define ASN1_R_INVALID_NUMBER				 187
 | 
			
		||||
#define ASN1_R_INVALID_OBJECT_ENCODING			 212
 | 
			
		||||
#define ASN1_R_INVALID_SEPARATOR			 131
 | 
			
		||||
#define ASN1_R_INVALID_TIME_FORMAT			 132
 | 
			
		||||
#define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH		 133
 | 
			
		||||
@@ -1305,6 +1310,7 @@ void ERR_load_ASN1_strings(void);
 | 
			
		||||
#define ASN1_R_TIME_NOT_ASCII_FORMAT			 193
 | 
			
		||||
#define ASN1_R_TOO_LONG					 155
 | 
			
		||||
#define ASN1_R_TYPE_NOT_CONSTRUCTED			 156
 | 
			
		||||
#define ASN1_R_TYPE_NOT_PRIMITIVE			 218
 | 
			
		||||
#define ASN1_R_UNABLE_TO_DECODE_RSA_KEY			 157
 | 
			
		||||
#define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY		 158
 | 
			
		||||
#define ASN1_R_UNEXPECTED_EOC				 159
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
/* crypto/asn1/asn1_err.c */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1999-2008 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 * Copyright (c) 1999-2014 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
 | 
			
		||||
@@ -235,11 +235,13 @@ static ERR_STRING_DATA ASN1_str_reasons[]=
 | 
			
		||||
{ERR_REASON(ASN1_R_ILLEGAL_TIME_VALUE)   ,"illegal time value"},
 | 
			
		||||
{ERR_REASON(ASN1_R_INTEGER_NOT_ASCII_FORMAT),"integer not ascii format"},
 | 
			
		||||
{ERR_REASON(ASN1_R_INTEGER_TOO_LARGE_FOR_LONG),"integer too large for long"},
 | 
			
		||||
{ERR_REASON(ASN1_R_INVALID_BIT_STRING_BITS_LEFT),"invalid bit string bits left"},
 | 
			
		||||
{ERR_REASON(ASN1_R_INVALID_BMPSTRING_LENGTH),"invalid bmpstring length"},
 | 
			
		||||
{ERR_REASON(ASN1_R_INVALID_DIGIT)        ,"invalid digit"},
 | 
			
		||||
{ERR_REASON(ASN1_R_INVALID_MIME_TYPE)    ,"invalid mime type"},
 | 
			
		||||
{ERR_REASON(ASN1_R_INVALID_MODIFIER)     ,"invalid modifier"},
 | 
			
		||||
{ERR_REASON(ASN1_R_INVALID_NUMBER)       ,"invalid number"},
 | 
			
		||||
{ERR_REASON(ASN1_R_INVALID_OBJECT_ENCODING),"invalid object encoding"},
 | 
			
		||||
{ERR_REASON(ASN1_R_INVALID_SEPARATOR)    ,"invalid separator"},
 | 
			
		||||
{ERR_REASON(ASN1_R_INVALID_TIME_FORMAT)  ,"invalid time format"},
 | 
			
		||||
{ERR_REASON(ASN1_R_INVALID_UNIVERSALSTRING_LENGTH),"invalid universalstring length"},
 | 
			
		||||
@@ -282,6 +284,7 @@ static ERR_STRING_DATA ASN1_str_reasons[]=
 | 
			
		||||
{ERR_REASON(ASN1_R_TIME_NOT_ASCII_FORMAT),"time not ascii format"},
 | 
			
		||||
{ERR_REASON(ASN1_R_TOO_LONG)             ,"too long"},
 | 
			
		||||
{ERR_REASON(ASN1_R_TYPE_NOT_CONSTRUCTED) ,"type not constructed"},
 | 
			
		||||
{ERR_REASON(ASN1_R_TYPE_NOT_PRIMITIVE)   ,"type not primitive"},
 | 
			
		||||
{ERR_REASON(ASN1_R_UNABLE_TO_DECODE_RSA_KEY),"unable to decode rsa key"},
 | 
			
		||||
{ERR_REASON(ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY),"unable to decode rsa private key"},
 | 
			
		||||
{ERR_REASON(ASN1_R_UNEXPECTED_EOC)       ,"unexpected eoc"},
 | 
			
		||||
 
 | 
			
		||||
@@ -227,6 +227,8 @@ ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf)
 | 
			
		||||
	/* Allocate buffer for new encoding */
 | 
			
		||||
 | 
			
		||||
	new_der = OPENSSL_malloc(len);
 | 
			
		||||
	if (!new_der)
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	/* Generate tagged encoding */
 | 
			
		||||
 | 
			
		||||
@@ -446,6 +448,8 @@ static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf)
 | 
			
		||||
	int derlen;
 | 
			
		||||
	int i, is_set;
 | 
			
		||||
	sk = sk_ASN1_TYPE_new_null();
 | 
			
		||||
	if (!sk)
 | 
			
		||||
		goto bad;
 | 
			
		||||
	if (section)
 | 
			
		||||
		{
 | 
			
		||||
		if (!cnf)
 | 
			
		||||
@@ -458,7 +462,8 @@ static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf)
 | 
			
		||||
			typ = ASN1_generate_v3(sk_CONF_VALUE_value(sect, i)->value, cnf);
 | 
			
		||||
			if (!typ)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			sk_ASN1_TYPE_push(sk, typ);
 | 
			
		||||
			if (!sk_ASN1_TYPE_push(sk, typ))
 | 
			
		||||
				goto bad;
 | 
			
		||||
			typ = NULL;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@@ -474,6 +479,8 @@ static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf)
 | 
			
		||||
	derlen = i2d_ASN1_SET_OF_ASN1_TYPE(sk, NULL, i2d_ASN1_TYPE, utype,
 | 
			
		||||
					   V_ASN1_UNIVERSAL, is_set);
 | 
			
		||||
	der = OPENSSL_malloc(derlen);
 | 
			
		||||
	if (!der)
 | 
			
		||||
		goto bad;
 | 
			
		||||
	p = der;
 | 
			
		||||
	i2d_ASN1_SET_OF_ASN1_TYPE(sk, &p, i2d_ASN1_TYPE, utype,
 | 
			
		||||
				  V_ASN1_UNIVERSAL, is_set);
 | 
			
		||||
 
 | 
			
		||||
@@ -131,6 +131,9 @@ int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag,
 | 
			
		||||
	*pclass=xclass;
 | 
			
		||||
	if (!asn1_get_length(&p,&inf,plength,(int)max)) goto err;
 | 
			
		||||
 | 
			
		||||
	if (inf && !(ret & V_ASN1_CONSTRUCTED))
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
	fprintf(stderr,"p=%d + *plength=%ld > omax=%ld + *pp=%d  (%d > %d)\n", 
 | 
			
		||||
		(int)p,*plength,omax,(int)*pp,(int)(p+ *plength),
 | 
			
		||||
 
 | 
			
		||||
@@ -246,7 +246,7 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length, int offse
 | 
			
		||||
				ii=d2i_ASN1_BOOLEAN(NULL,&opp,len+hl);
 | 
			
		||||
				if (ii < 0)
 | 
			
		||||
					{
 | 
			
		||||
					if (BIO_write(bp,"Bad boolean\n",12))
 | 
			
		||||
					if (BIO_write(bp,"Bad boolean\n",12) <= 0)
 | 
			
		||||
						goto end;
 | 
			
		||||
					}
 | 
			
		||||
				BIO_printf(bp,":%d",ii);
 | 
			
		||||
 
 | 
			
		||||
@@ -418,9 +418,9 @@ ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it)
 | 
			
		||||
 | 
			
		||||
		if(strcmp(hdr->value, "application/x-pkcs7-signature") &&
 | 
			
		||||
			strcmp(hdr->value, "application/pkcs7-signature")) {
 | 
			
		||||
			sk_MIME_HEADER_pop_free(headers, mime_hdr_free);
 | 
			
		||||
			ASN1err(ASN1_F_SMIME_READ_ASN1,ASN1_R_SIG_INVALID_MIME_TYPE);
 | 
			
		||||
			ERR_add_error_data(2, "type: ", hdr->value);
 | 
			
		||||
			sk_MIME_HEADER_pop_free(headers, mime_hdr_free);
 | 
			
		||||
			sk_BIO_pop_free(parts, BIO_vfree);
 | 
			
		||||
			return NULL;
 | 
			
		||||
		}
 | 
			
		||||
@@ -595,6 +595,8 @@ static STACK_OF(MIME_HEADER) *mime_parse_hdr(BIO *bio)
 | 
			
		||||
	int len, state, save_state = 0;
 | 
			
		||||
 | 
			
		||||
	headers = sk_MIME_HEADER_new(mime_hdr_cmp);
 | 
			
		||||
	if (!headers)
 | 
			
		||||
		return NULL;
 | 
			
		||||
	while ((len = BIO_gets(bio, linebuf, MAX_SMLEN)) > 0) {
 | 
			
		||||
	/* If whitespace at line start then continuation line */
 | 
			
		||||
	if(mhdr && isspace((unsigned char)linebuf[0])) state = MIME_NAME;
 | 
			
		||||
@@ -790,12 +792,17 @@ static int mime_hdr_addparam(MIME_HEADER *mhdr, char *name, char *value)
 | 
			
		||||
static int mime_hdr_cmp(const MIME_HEADER * const *a,
 | 
			
		||||
			const MIME_HEADER * const *b)
 | 
			
		||||
{
 | 
			
		||||
	if (!(*a)->name || !(*b)->name)
 | 
			
		||||
		return !!(*a)->name - !!(*b)->name;
 | 
			
		||||
 | 
			
		||||
	return(strcmp((*a)->name, (*b)->name));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int mime_param_cmp(const MIME_PARAM * const *a,
 | 
			
		||||
			const MIME_PARAM * const *b)
 | 
			
		||||
{
 | 
			
		||||
	if (!(*a)->param_name || !(*b)->param_name)
 | 
			
		||||
		return !!(*a)->param_name - !!(*b)->param_name;
 | 
			
		||||
	return(strcmp((*a)->param_name, (*b)->param_name));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -134,15 +134,23 @@ ASN1_STRING *ASN1_pack_string(void *obj, i2d_of_void *i2d, ASN1_STRING **oct)
 | 
			
		||||
		
 | 
			
		||||
	if (!(octmp->length = i2d(obj, NULL))) {
 | 
			
		||||
		ASN1err(ASN1_F_ASN1_PACK_STRING,ASN1_R_ENCODE_ERROR);
 | 
			
		||||
		return NULL;
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
	if (!(p = OPENSSL_malloc (octmp->length))) {
 | 
			
		||||
		ASN1err(ASN1_F_ASN1_PACK_STRING,ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		return NULL;
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
	octmp->data = p;
 | 
			
		||||
	i2d (obj, &p);
 | 
			
		||||
	return octmp;
 | 
			
		||||
	err:
 | 
			
		||||
	if (!oct || !*oct)
 | 
			
		||||
		{
 | 
			
		||||
		ASN1_STRING_free(octmp);
 | 
			
		||||
		if (oct)
 | 
			
		||||
			*oct = NULL;
 | 
			
		||||
		}
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,11 @@ int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len)
 | 
			
		||||
	ASN1_STRING *os;
 | 
			
		||||
 | 
			
		||||
	if ((os=M_ASN1_OCTET_STRING_new()) == NULL) return(0);
 | 
			
		||||
	if (!M_ASN1_OCTET_STRING_set(os,data,len)) return(0);
 | 
			
		||||
	if (!M_ASN1_OCTET_STRING_set(os,data,len))
 | 
			
		||||
		{
 | 
			
		||||
		M_ASN1_OCTET_STRING_free(os);
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
	ASN1_TYPE_set(a,V_ASN1_OCTET_STRING,os);
 | 
			
		||||
	return(1);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -242,7 +242,7 @@ RSA *d2i_RSA_NET(RSA **a, const unsigned char **pp, long length,
 | 
			
		||||
		 int sgckey)
 | 
			
		||||
	{
 | 
			
		||||
	RSA *ret=NULL;
 | 
			
		||||
	const unsigned char *p, *kp;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	NETSCAPE_ENCRYPTED_PKEY *enckey = NULL;
 | 
			
		||||
 | 
			
		||||
	p = *pp;
 | 
			
		||||
@@ -265,7 +265,6 @@ RSA *d2i_RSA_NET(RSA **a, const unsigned char **pp, long length,
 | 
			
		||||
		ASN1err(ASN1_F_D2I_RSA_NET,ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM);
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
	kp = enckey->enckey->digest->data;
 | 
			
		||||
	if (cb == NULL)
 | 
			
		||||
		cb=EVP_read_pw_string;
 | 
			
		||||
	if ((ret=d2i_RSA_NET_2(a, enckey->enckey->digest,cb, sgckey)) == NULL) goto err;
 | 
			
		||||
 
 | 
			
		||||
@@ -87,7 +87,7 @@ int X509_CRL_print(BIO *out, X509_CRL *x)
 | 
			
		||||
	STACK_OF(X509_REVOKED) *rev;
 | 
			
		||||
	X509_REVOKED *r;
 | 
			
		||||
	long l;
 | 
			
		||||
	int i, n;
 | 
			
		||||
	int i;
 | 
			
		||||
	char *p;
 | 
			
		||||
 | 
			
		||||
	BIO_printf(out, "Certificate Revocation List (CRL):\n");
 | 
			
		||||
@@ -107,7 +107,6 @@ int X509_CRL_print(BIO *out, X509_CRL *x)
 | 
			
		||||
	else BIO_printf(out,"NONE");
 | 
			
		||||
	BIO_printf(out,"\n");
 | 
			
		||||
 | 
			
		||||
	n=X509_CRL_get_ext_count(x);
 | 
			
		||||
	X509V3_extensions_print(out, "CRL extensions",
 | 
			
		||||
						x->crl->extensions, 0, 8);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -208,11 +208,6 @@ int DSA_print(BIO *bp, const DSA *x, int off)
 | 
			
		||||
 | 
			
		||||
	if (x->p)
 | 
			
		||||
		buf_len = (size_t)BN_num_bytes(x->p);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		DSAerr(DSA_F_DSA_PRINT,DSA_R_MISSING_PARAMETERS);
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
	if (x->q)
 | 
			
		||||
		if (buf_len < (i = (size_t)BN_num_bytes(x->q)))
 | 
			
		||||
			buf_len = i;
 | 
			
		||||
 
 | 
			
		||||
@@ -379,6 +379,8 @@ int ASN1_GENERALIZEDTIME_print(BIO *bp, ASN1_GENERALIZEDTIME *tm)
 | 
			
		||||
	int gmt=0;
 | 
			
		||||
	int i;
 | 
			
		||||
	int y=0,M=0,d=0,h=0,m=0,s=0;
 | 
			
		||||
	char *f = NULL;
 | 
			
		||||
	int f_len = 0;
 | 
			
		||||
 | 
			
		||||
	i=tm->length;
 | 
			
		||||
	v=(char *)tm->data;
 | 
			
		||||
@@ -396,10 +398,21 @@ int ASN1_GENERALIZEDTIME_print(BIO *bp, ASN1_GENERALIZEDTIME *tm)
 | 
			
		||||
	if (tm->length >= 14 &&
 | 
			
		||||
	    (v[12] >= '0') && (v[12] <= '9') &&
 | 
			
		||||
	    (v[13] >= '0') && (v[13] <= '9'))
 | 
			
		||||
		{
 | 
			
		||||
		s=  (v[12]-'0')*10+(v[13]-'0');
 | 
			
		||||
		/* Check for fractions of seconds. */
 | 
			
		||||
		if (tm->length >= 15 && v[14] == '.')
 | 
			
		||||
			{
 | 
			
		||||
			int l = tm->length;
 | 
			
		||||
			f = &v[14];	/* The decimal point. */
 | 
			
		||||
			f_len = 1;
 | 
			
		||||
			while (14 + f_len < l && f[f_len] >= '0' && f[f_len] <= '9')
 | 
			
		||||
				++f_len;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (BIO_printf(bp,"%s %2d %02d:%02d:%02d %d%s",
 | 
			
		||||
		mon[M-1],d,h,m,s,y,(gmt)?" GMT":"") <= 0)
 | 
			
		||||
	if (BIO_printf(bp,"%s %2d %02d:%02d:%02d%.*s %d%s",
 | 
			
		||||
		mon[M-1],d,h,m,s,f_len,f,y,(gmt)?" GMT":"") <= 0)
 | 
			
		||||
		return(0);
 | 
			
		||||
	else
 | 
			
		||||
		return(1);
 | 
			
		||||
@@ -452,6 +465,8 @@ int X509_NAME_print(BIO *bp, X509_NAME *name, int obase)
 | 
			
		||||
	l=80-2-obase;
 | 
			
		||||
 | 
			
		||||
	b=X509_NAME_oneline(name,NULL,0);
 | 
			
		||||
	if (!b)
 | 
			
		||||
		return 0;
 | 
			
		||||
	if (!*b)
 | 
			
		||||
		{
 | 
			
		||||
		OPENSSL_free(b);
 | 
			
		||||
 
 | 
			
		||||
@@ -166,7 +166,7 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
 | 
			
		||||
	int i;
 | 
			
		||||
	int otag;
 | 
			
		||||
	int ret = 0;
 | 
			
		||||
	ASN1_VALUE *pchval, **pchptr, *ptmpval;
 | 
			
		||||
	ASN1_VALUE **pchptr, *ptmpval;
 | 
			
		||||
	if (!pval)
 | 
			
		||||
		return 0;
 | 
			
		||||
	if (aux && aux->asn1_cb)
 | 
			
		||||
@@ -317,7 +317,6 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
		/* CHOICE type, try each possibility in turn */
 | 
			
		||||
		pchval = NULL;
 | 
			
		||||
		p = *in;
 | 
			
		||||
		for (i = 0, tt=it->templates; i < it->tcount; i++, tt++)
 | 
			
		||||
			{
 | 
			
		||||
@@ -867,6 +866,14 @@ static int asn1_d2i_ex_primitive(ASN1_VALUE **pval,
 | 
			
		||||
		}
 | 
			
		||||
	else if (cst)
 | 
			
		||||
		{
 | 
			
		||||
		if (utype == V_ASN1_NULL || utype == V_ASN1_BOOLEAN
 | 
			
		||||
			|| utype == V_ASN1_OBJECT || utype == V_ASN1_INTEGER
 | 
			
		||||
			|| utype == V_ASN1_ENUMERATED)
 | 
			
		||||
			{
 | 
			
		||||
			ASN1err(ASN1_F_ASN1_D2I_EX_PRIMITIVE,
 | 
			
		||||
				ASN1_R_TYPE_NOT_PRIMITIVE);
 | 
			
		||||
			return 0;
 | 
			
		||||
			}
 | 
			
		||||
		buf.length = 0;
 | 
			
		||||
		buf.max = 0;
 | 
			
		||||
		buf.data = NULL;
 | 
			
		||||
 
 | 
			
		||||
@@ -453,9 +453,14 @@ static int asn1_set_seq_out(STACK_OF(ASN1_VALUE) *sk, unsigned char **out,
 | 
			
		||||
			{
 | 
			
		||||
			derlst = OPENSSL_malloc(sk_ASN1_VALUE_num(sk)
 | 
			
		||||
						* sizeof(*derlst));
 | 
			
		||||
			tmpdat = OPENSSL_malloc(skcontlen);
 | 
			
		||||
			if (!derlst || !tmpdat)
 | 
			
		||||
			if (!derlst)
 | 
			
		||||
				return 0;
 | 
			
		||||
			tmpdat = OPENSSL_malloc(skcontlen);
 | 
			
		||||
			if (!tmpdat)
 | 
			
		||||
				{
 | 
			
		||||
				OPENSSL_free(derlst);
 | 
			
		||||
				return 0;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	/* If not sorting just output each item */
 | 
			
		||||
 
 | 
			
		||||
@@ -128,3 +128,13 @@ void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b)
 | 
			
		||||
	{
 | 
			
		||||
	int rv;
 | 
			
		||||
	rv = OBJ_cmp(a->algorithm, b->algorithm);
 | 
			
		||||
	if (rv)
 | 
			
		||||
		return rv;
 | 
			
		||||
	if (!a->parameter && !b->parameter)
 | 
			
		||||
		return 0;
 | 
			
		||||
	return ASN1_TYPE_cmp(a->parameter, b->parameter);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -196,7 +196,9 @@ static int x509_name_ex_d2i(ASN1_VALUE **val, const unsigned char **in, long len
 | 
			
		||||
	*val = nm.a;
 | 
			
		||||
	*in = p;
 | 
			
		||||
	return ret;
 | 
			
		||||
	err:
 | 
			
		||||
err:
 | 
			
		||||
        if (nm.x != NULL)
 | 
			
		||||
		X509_NAME_free(nm.x);
 | 
			
		||||
	ASN1err(ASN1_F_X509_NAME_EX_D2I, ERR_R_NESTED_ASN1_ERROR);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -367,7 +367,19 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	key->pkey = ret;
 | 
			
		||||
	/* Check to see if another thread set key->pkey first */
 | 
			
		||||
	CRYPTO_w_lock(CRYPTO_LOCK_EVP_PKEY);
 | 
			
		||||
	if (key->pkey)
 | 
			
		||||
		{
 | 
			
		||||
		CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY);
 | 
			
		||||
		EVP_PKEY_free(ret);
 | 
			
		||||
		ret = key->pkey;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		key->pkey = ret;
 | 
			
		||||
		CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY);
 | 
			
		||||
		}
 | 
			
		||||
	CRYPTO_add(&ret->references, 1, CRYPTO_LOCK_EVP_PKEY);
 | 
			
		||||
	return(ret);
 | 
			
		||||
err:
 | 
			
		||||
 
 | 
			
		||||
@@ -63,7 +63,7 @@
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/x509v3.h>
 | 
			
		||||
 | 
			
		||||
ASN1_SEQUENCE(X509_CINF) = {
 | 
			
		||||
ASN1_SEQUENCE_enc(X509_CINF, enc, 0) = {
 | 
			
		||||
	ASN1_EXP_OPT(X509_CINF, version, ASN1_INTEGER, 0),
 | 
			
		||||
	ASN1_SIMPLE(X509_CINF, serialNumber, ASN1_INTEGER),
 | 
			
		||||
	ASN1_SIMPLE(X509_CINF, signature, X509_ALGOR),
 | 
			
		||||
@@ -74,7 +74,7 @@ ASN1_SEQUENCE(X509_CINF) = {
 | 
			
		||||
	ASN1_IMP_OPT(X509_CINF, issuerUID, ASN1_BIT_STRING, 1),
 | 
			
		||||
	ASN1_IMP_OPT(X509_CINF, subjectUID, ASN1_BIT_STRING, 2),
 | 
			
		||||
	ASN1_EXP_SEQUENCE_OF_OPT(X509_CINF, extensions, X509_EXTENSION, 3)
 | 
			
		||||
} ASN1_SEQUENCE_END(X509_CINF)
 | 
			
		||||
} ASN1_SEQUENCE_END_enc(X509_CINF, X509_CINF)
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_ASN1_FUNCTIONS(X509_CINF)
 | 
			
		||||
/* X509 top level structure needs a bit of customisation */
 | 
			
		||||
 
 | 
			
		||||
@@ -659,7 +659,14 @@ again:
 | 
			
		||||
#ifdef SO_REUSEADDR
 | 
			
		||||
		err_num=get_last_socket_error();
 | 
			
		||||
		if ((bind_mode == BIO_BIND_REUSEADDR_IF_UNUSED) &&
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
			/* Some versions of Windows define EADDRINUSE to
 | 
			
		||||
			 * a dummy value.
 | 
			
		||||
			 */
 | 
			
		||||
			(err_num == WSAEADDRINUSE))
 | 
			
		||||
#else
 | 
			
		||||
			(err_num == EADDRINUSE))
 | 
			
		||||
#endif
 | 
			
		||||
			{
 | 
			
		||||
			memcpy((char *)&client,(char *)&server,sizeof(server));
 | 
			
		||||
			if (strcmp(h,"*") == 0)
 | 
			
		||||
 
 | 
			
		||||
@@ -209,7 +209,7 @@ start:
 | 
			
		||||
	/* add to buffer and return */
 | 
			
		||||
	if (i >= inl)
 | 
			
		||||
		{
 | 
			
		||||
		memcpy(&(ctx->obuf[ctx->obuf_len]),in,inl);
 | 
			
		||||
		memcpy(&(ctx->obuf[ctx->obuf_off+ctx->obuf_len]),in,inl);
 | 
			
		||||
		ctx->obuf_len+=inl;
 | 
			
		||||
		return(num+inl);
 | 
			
		||||
		}
 | 
			
		||||
@@ -219,7 +219,7 @@ start:
 | 
			
		||||
		{
 | 
			
		||||
		if (i > 0) /* lets fill it up if we can */
 | 
			
		||||
			{
 | 
			
		||||
			memcpy(&(ctx->obuf[ctx->obuf_len]),in,i);
 | 
			
		||||
			memcpy(&(ctx->obuf[ctx->obuf_off+ctx->obuf_len]),in,i);
 | 
			
		||||
			in+=i;
 | 
			
		||||
			inl-=i;
 | 
			
		||||
			num+=i;
 | 
			
		||||
@@ -294,9 +294,9 @@ static long buffer_ctrl(BIO *b, int cmd, long num, void *ptr)
 | 
			
		||||
	case BIO_C_GET_BUFF_NUM_LINES:
 | 
			
		||||
		ret=0;
 | 
			
		||||
		p1=ctx->ibuf;
 | 
			
		||||
		for (i=ctx->ibuf_off; i<ctx->ibuf_len; i++)
 | 
			
		||||
		for (i=0; i<ctx->ibuf_len; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if (p1[i] == '\n') ret++;
 | 
			
		||||
			if (p1[ctx->ibuf_off + i] == '\n') ret++;
 | 
			
		||||
			}
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_CTRL_WPENDING:
 | 
			
		||||
@@ -399,17 +399,18 @@ static long buffer_ctrl(BIO *b, int cmd, long num, void *ptr)
 | 
			
		||||
		for (;;)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_clear_retry_flags(b);
 | 
			
		||||
			if (ctx->obuf_len > ctx->obuf_off)
 | 
			
		||||
			if (ctx->obuf_len > 0)
 | 
			
		||||
				{
 | 
			
		||||
				r=BIO_write(b->next_bio,
 | 
			
		||||
					&(ctx->obuf[ctx->obuf_off]),
 | 
			
		||||
					ctx->obuf_len-ctx->obuf_off);
 | 
			
		||||
					ctx->obuf_len);
 | 
			
		||||
#if 0
 | 
			
		||||
fprintf(stderr,"FLUSH [%3d] %3d -> %3d\n",ctx->obuf_off,ctx->obuf_len-ctx->obuf_off,r);
 | 
			
		||||
fprintf(stderr,"FLUSH [%3d] %3d -> %3d\n",ctx->obuf_off,ctx->obuf_len,r);
 | 
			
		||||
#endif
 | 
			
		||||
				BIO_copy_next_retry(b);
 | 
			
		||||
				if (r <= 0) return((long)r);
 | 
			
		||||
				ctx->obuf_off+=r;
 | 
			
		||||
				ctx->obuf_len-=r;
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
 
 | 
			
		||||
@@ -125,7 +125,6 @@ static int nbiof_free(BIO *a)
 | 
			
		||||
	
 | 
			
		||||
static int nbiof_read(BIO *b, char *out, int outl)
 | 
			
		||||
	{
 | 
			
		||||
	NBIO_TEST *nt;
 | 
			
		||||
	int ret=0;
 | 
			
		||||
#if 1
 | 
			
		||||
	int num;
 | 
			
		||||
@@ -134,7 +133,6 @@ static int nbiof_read(BIO *b, char *out, int outl)
 | 
			
		||||
 | 
			
		||||
	if (out == NULL) return(0);
 | 
			
		||||
	if (b->next_bio == NULL) return(0);
 | 
			
		||||
	nt=(NBIO_TEST *)b->ptr;
 | 
			
		||||
 | 
			
		||||
	BIO_clear_retry_flags(b);
 | 
			
		||||
#if 1
 | 
			
		||||
 
 | 
			
		||||
@@ -145,6 +145,7 @@ extern "C" {
 | 
			
		||||
/* #endif */
 | 
			
		||||
 | 
			
		||||
#define BIO_CTRL_DGRAM_QUERY_MTU          40 /* as kernel for current MTU */
 | 
			
		||||
#define BIO_CTRL_DGRAM_GET_FALLBACK_MTU   47
 | 
			
		||||
#define BIO_CTRL_DGRAM_GET_MTU            41 /* get cached value for MTU */
 | 
			
		||||
#define BIO_CTRL_DGRAM_SET_MTU            42 /* set cached value for
 | 
			
		||||
					      * MTU. want to use this
 | 
			
		||||
@@ -156,8 +157,11 @@ extern "C" {
 | 
			
		||||
					      * previous write
 | 
			
		||||
					      * operation */
 | 
			
		||||
 | 
			
		||||
#define BIO_CTRL_DGRAM_GET_PEER           46
 | 
			
		||||
#define BIO_CTRL_DGRAM_SET_PEER           44 /* Destination for the data */
 | 
			
		||||
 | 
			
		||||
#define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT   45 /* Next DTLS handshake timeout to
 | 
			
		||||
											  * adjust socket timeouts */
 | 
			
		||||
 | 
			
		||||
/* modifiers */
 | 
			
		||||
#define BIO_FP_READ		0x02
 | 
			
		||||
@@ -318,6 +322,15 @@ DECLARE_STACK_OF(BIO)
 | 
			
		||||
 | 
			
		||||
typedef struct bio_f_buffer_ctx_struct
 | 
			
		||||
	{
 | 
			
		||||
	/* Buffers are setup like this:
 | 
			
		||||
	 *
 | 
			
		||||
	 * <---------------------- size ----------------------->
 | 
			
		||||
	 * +---------------------------------------------------+
 | 
			
		||||
	 * | consumed | remaining          | free space        |
 | 
			
		||||
	 * +---------------------------------------------------+
 | 
			
		||||
	 * <-- off --><------- len ------->
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
	/* BIO *bio; */ /* this is now in the BIO struct */
 | 
			
		||||
	int ibuf_size;	/* how big is the input buffer */
 | 
			
		||||
	int obuf_size;	/* how big is the output buffer */
 | 
			
		||||
@@ -405,7 +418,7 @@ typedef struct bio_f_buffer_ctx_struct
 | 
			
		||||
#define BIO_get_conn_hostname(b)  BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)
 | 
			
		||||
#define BIO_get_conn_port(b)      BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)
 | 
			
		||||
#define BIO_get_conn_ip(b) 		 BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2)
 | 
			
		||||
#define BIO_get_conn_int_port(b) BIO_int_ctrl(b,BIO_C_GET_CONNECT,3)
 | 
			
		||||
#define BIO_get_conn_int_port(b) BIO_int_ctrl(b,BIO_C_GET_CONNECT,3,0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define BIO_set_nbio(b,n)	BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL)
 | 
			
		||||
@@ -414,7 +427,7 @@ typedef struct bio_f_buffer_ctx_struct
 | 
			
		||||
#define BIO_set_accept_port(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0,(char *)name)
 | 
			
		||||
#define BIO_get_accept_port(b)	BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)
 | 
			
		||||
/* #define BIO_set_nbio(b,n)	BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */
 | 
			
		||||
#define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(n)?"a":NULL)
 | 
			
		||||
#define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(n)?(void *)"a":NULL)
 | 
			
		||||
#define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(char *)bio)
 | 
			
		||||
 | 
			
		||||
#define BIO_BIND_NORMAL			0
 | 
			
		||||
@@ -541,6 +554,8 @@ int BIO_ctrl_reset_read_request(BIO *b);
 | 
			
		||||
         (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL)
 | 
			
		||||
#define BIO_dgram_send_timedout(b) \
 | 
			
		||||
         (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL)
 | 
			
		||||
#define BIO_dgram_get_peer(b,peer) \
 | 
			
		||||
         (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)peer)
 | 
			
		||||
#define BIO_dgram_set_peer(b,peer) \
 | 
			
		||||
         (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)peer)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -110,7 +110,7 @@ int BIO_set(BIO *bio, BIO_METHOD *method)
 | 
			
		||||
 | 
			
		||||
int BIO_free(BIO *a)
 | 
			
		||||
	{
 | 
			
		||||
	int ret=0,i;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	if (a == NULL) return(0);
 | 
			
		||||
 | 
			
		||||
@@ -132,8 +132,8 @@ int BIO_free(BIO *a)
 | 
			
		||||
 | 
			
		||||
	CRYPTO_free_ex_data(CRYPTO_EX_INDEX_BIO, a, &a->ex_data);
 | 
			
		||||
 | 
			
		||||
	if ((a->method == NULL) || (a->method->destroy == NULL)) return(1);
 | 
			
		||||
	ret=a->method->destroy(a);
 | 
			
		||||
	if ((a->method != NULL) && (a->method->destroy != NULL))
 | 
			
		||||
		a->method->destroy(a);
 | 
			
		||||
	OPENSSL_free(a);
 | 
			
		||||
	return(1);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -340,7 +340,6 @@ static int acpt_write(BIO *b, const char *in, int inl)
 | 
			
		||||
 | 
			
		||||
static long acpt_ctrl(BIO *b, int cmd, long num, void *ptr)
 | 
			
		||||
	{
 | 
			
		||||
	BIO *dbio;
 | 
			
		||||
	int *ip;
 | 
			
		||||
	long ret=1;
 | 
			
		||||
	BIO_ACCEPT *data;
 | 
			
		||||
@@ -437,8 +436,8 @@ static long acpt_ctrl(BIO *b, int cmd, long num, void *ptr)
 | 
			
		||||
		ret=(long)data->bind_mode;
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_CTRL_DUP:
 | 
			
		||||
		dbio=(BIO *)ptr;
 | 
			
		||||
/*		if (data->param_port) EAY EAY
 | 
			
		||||
/*		dbio=(BIO *)ptr;
 | 
			
		||||
		if (data->param_port) EAY EAY
 | 
			
		||||
			BIO_set_port(dbio,data->param_port);
 | 
			
		||||
		if (data->param_hostname)
 | 
			
		||||
			BIO_set_hostname(dbio,data->param_hostname);
 | 
			
		||||
 
 | 
			
		||||
@@ -57,7 +57,6 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DGRAM
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
@@ -65,8 +64,15 @@
 | 
			
		||||
#include "cryptlib.h"
 | 
			
		||||
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#ifndef OPENSSL_NO_DGRAM
 | 
			
		||||
 | 
			
		||||
#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS)
 | 
			
		||||
#include <sys/timeb.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_SYS_LINUX
 | 
			
		||||
#define IP_MTU      14 /* linux is lame */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
#define sock_write SockWrite  /* Watt-32 uses same names */
 | 
			
		||||
@@ -84,6 +90,8 @@ static int dgram_clear(BIO *bio);
 | 
			
		||||
 | 
			
		||||
static int BIO_dgram_should_retry(int s);
 | 
			
		||||
 | 
			
		||||
static void get_current_time(struct timeval *t);
 | 
			
		||||
 | 
			
		||||
static BIO_METHOD methods_dgramp=
 | 
			
		||||
	{
 | 
			
		||||
	BIO_TYPE_DGRAM,
 | 
			
		||||
@@ -104,6 +112,8 @@ typedef struct bio_dgram_data_st
 | 
			
		||||
	unsigned int connected;
 | 
			
		||||
	unsigned int _errno;
 | 
			
		||||
	unsigned int mtu;
 | 
			
		||||
	struct timeval next_timeout;
 | 
			
		||||
	struct timeval socket_timeout;
 | 
			
		||||
	} bio_dgram_data;
 | 
			
		||||
 | 
			
		||||
BIO_METHOD *BIO_s_datagram(void)
 | 
			
		||||
@@ -165,7 +175,100 @@ static int dgram_clear(BIO *a)
 | 
			
		||||
		}
 | 
			
		||||
	return(1);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
static void dgram_adjust_rcv_timeout(BIO *b)
 | 
			
		||||
	{
 | 
			
		||||
#if defined(SO_RCVTIMEO)
 | 
			
		||||
	bio_dgram_data *data = (bio_dgram_data *)b->ptr;
 | 
			
		||||
	int sz = sizeof(int);
 | 
			
		||||
 | 
			
		||||
	/* Is a timer active? */
 | 
			
		||||
	if (data->next_timeout.tv_sec > 0 || data->next_timeout.tv_usec > 0)
 | 
			
		||||
		{
 | 
			
		||||
		struct timeval timenow, timeleft;
 | 
			
		||||
 | 
			
		||||
		/* Read current socket timeout */
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
		int timeout;
 | 
			
		||||
		if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
 | 
			
		||||
					   (void*)&timeout, &sz) < 0)
 | 
			
		||||
			{ perror("getsockopt"); }
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			data->socket_timeout.tv_sec = timeout / 1000;
 | 
			
		||||
			data->socket_timeout.tv_usec = (timeout % 1000) * 1000;
 | 
			
		||||
			}
 | 
			
		||||
#else
 | 
			
		||||
		if ( getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, 
 | 
			
		||||
						&(data->socket_timeout), (void *)&sz) < 0)
 | 
			
		||||
			{ perror("getsockopt"); }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		/* Get current time */
 | 
			
		||||
		get_current_time(&timenow);
 | 
			
		||||
 | 
			
		||||
		/* Calculate time left until timer expires */
 | 
			
		||||
		memcpy(&timeleft, &(data->next_timeout), sizeof(struct timeval));
 | 
			
		||||
		timeleft.tv_sec -= timenow.tv_sec;
 | 
			
		||||
		timeleft.tv_usec -= timenow.tv_usec;
 | 
			
		||||
		if (timeleft.tv_usec < 0)
 | 
			
		||||
			{
 | 
			
		||||
			timeleft.tv_sec--;
 | 
			
		||||
			timeleft.tv_usec += 1000000;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if (timeleft.tv_sec < 0)
 | 
			
		||||
			{
 | 
			
		||||
			timeleft.tv_sec = 0;
 | 
			
		||||
			timeleft.tv_usec = 1;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		/* Adjust socket timeout if next handhake message timer
 | 
			
		||||
		 * will expire earlier.
 | 
			
		||||
		 */
 | 
			
		||||
		if ((data->socket_timeout.tv_sec == 0 && data->socket_timeout.tv_usec == 0) ||
 | 
			
		||||
			(data->socket_timeout.tv_sec > timeleft.tv_sec) ||
 | 
			
		||||
			(data->socket_timeout.tv_sec == timeleft.tv_sec &&
 | 
			
		||||
			 data->socket_timeout.tv_usec >= timeleft.tv_usec))
 | 
			
		||||
			{
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
			timeout = timeleft.tv_sec * 1000 + timeleft.tv_usec / 1000;
 | 
			
		||||
			if (setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
 | 
			
		||||
						   (void*)&timeout, sizeof(timeout)) < 0)
 | 
			
		||||
				{ perror("setsockopt"); }
 | 
			
		||||
#else
 | 
			
		||||
			if ( setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, &timeleft,
 | 
			
		||||
							sizeof(struct timeval)) < 0)
 | 
			
		||||
				{ perror("setsockopt"); }
 | 
			
		||||
#endif
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void dgram_reset_rcv_timeout(BIO *b)
 | 
			
		||||
	{
 | 
			
		||||
#if defined(SO_RCVTIMEO)
 | 
			
		||||
	bio_dgram_data *data = (bio_dgram_data *)b->ptr;
 | 
			
		||||
 | 
			
		||||
	/* Is a timer active? */
 | 
			
		||||
	if (data->next_timeout.tv_sec > 0 || data->next_timeout.tv_usec > 0)
 | 
			
		||||
		{
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
		int timeout = data->socket_timeout.tv_sec * 1000 +
 | 
			
		||||
					  data->socket_timeout.tv_usec / 1000;
 | 
			
		||||
		if (setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
 | 
			
		||||
					   (void*)&timeout, sizeof(timeout)) < 0)
 | 
			
		||||
			{ perror("setsockopt"); }
 | 
			
		||||
#else
 | 
			
		||||
		if ( setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, &(data->socket_timeout),
 | 
			
		||||
						sizeof(struct timeval)) < 0)
 | 
			
		||||
			{ perror("setsockopt"); }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int dgram_read(BIO *b, char *out, int outl)
 | 
			
		||||
	{
 | 
			
		||||
	int ret=0;
 | 
			
		||||
@@ -183,13 +286,14 @@ static int dgram_read(BIO *b, char *out, int outl)
 | 
			
		||||
		 * but this is not universal. Cast to (void *) to avoid
 | 
			
		||||
		 * compiler warnings.
 | 
			
		||||
		 */
 | 
			
		||||
		dgram_adjust_rcv_timeout(b);
 | 
			
		||||
		ret=recvfrom(b->num,out,outl,0,&peer,(void *)&peerlen);
 | 
			
		||||
 | 
			
		||||
		if ( ! data->connected  && ret > 0)
 | 
			
		||||
			BIO_ctrl(b, BIO_CTRL_DGRAM_CONNECT, 0, &peer);
 | 
			
		||||
		if ( ! data->connected  && ret >= 0)
 | 
			
		||||
			BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, &peer);
 | 
			
		||||
 | 
			
		||||
		BIO_clear_retry_flags(b);
 | 
			
		||||
		if (ret <= 0)
 | 
			
		||||
		if (ret < 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (BIO_dgram_should_retry(ret))
 | 
			
		||||
				{
 | 
			
		||||
@@ -197,6 +301,8 @@ static int dgram_read(BIO *b, char *out, int outl)
 | 
			
		||||
				data->_errno = get_last_socket_error();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		dgram_reset_rcv_timeout(b);
 | 
			
		||||
		}
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
@@ -219,7 +325,7 @@ static int dgram_write(BIO *b, const char *in, int inl)
 | 
			
		||||
	BIO_clear_retry_flags(b);
 | 
			
		||||
	if (ret <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_sock_should_retry(ret))
 | 
			
		||||
		if (BIO_dgram_should_retry(ret))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_set_retry_write(b);  
 | 
			
		||||
			data->_errno = get_last_socket_error();
 | 
			
		||||
@@ -240,8 +346,14 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
 | 
			
		||||
	int *ip;
 | 
			
		||||
	struct sockaddr *to = NULL;
 | 
			
		||||
	bio_dgram_data *data = NULL;
 | 
			
		||||
#if defined(IP_MTU_DISCOVER) || defined(IP_MTU)
 | 
			
		||||
	long sockopt_val = 0;
 | 
			
		||||
	unsigned int sockopt_len = 0;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef OPENSSL_SYS_LINUX
 | 
			
		||||
	socklen_t addr_len;
 | 
			
		||||
	struct sockaddr_storage addr;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	data = (bio_dgram_data *)b->ptr;
 | 
			
		||||
 | 
			
		||||
@@ -300,24 +412,90 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
 | 
			
		||||
#endif
 | 
			
		||||
		break;
 | 
			
		||||
		/* (Linux)kernel sets DF bit on outgoing IP packets */
 | 
			
		||||
#ifdef IP_MTU_DISCOVER
 | 
			
		||||
	case BIO_CTRL_DGRAM_MTU_DISCOVER:
 | 
			
		||||
		sockopt_val = IP_PMTUDISC_DO;
 | 
			
		||||
		if ((ret = setsockopt(b->num, IPPROTO_IP, IP_MTU_DISCOVER,
 | 
			
		||||
			&sockopt_val, sizeof(sockopt_val))) < 0)
 | 
			
		||||
			perror("setsockopt");
 | 
			
		||||
#ifdef OPENSSL_SYS_LINUX
 | 
			
		||||
		addr_len = (socklen_t)sizeof(struct sockaddr_storage);
 | 
			
		||||
		memset((void *)&addr, 0, sizeof(struct sockaddr_storage));
 | 
			
		||||
		if (getsockname(b->num, (void *)&addr, &addr_len) < 0)
 | 
			
		||||
			{
 | 
			
		||||
			ret = 0;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		sockopt_len = sizeof(sockopt_val);
 | 
			
		||||
		switch (addr.ss_family)
 | 
			
		||||
			{
 | 
			
		||||
		case AF_INET:
 | 
			
		||||
			sockopt_val = IP_PMTUDISC_DO;
 | 
			
		||||
			if ((ret = setsockopt(b->num, IPPROTO_IP, IP_MTU_DISCOVER,
 | 
			
		||||
				&sockopt_val, sizeof(sockopt_val))) < 0)
 | 
			
		||||
				perror("setsockopt");
 | 
			
		||||
			break;
 | 
			
		||||
		case AF_INET6:
 | 
			
		||||
			sockopt_val = IPV6_PMTUDISC_DO;
 | 
			
		||||
			if ((ret = setsockopt(b->num, IPPROTO_IPV6, IPV6_MTU_DISCOVER,
 | 
			
		||||
				&sockopt_val, sizeof(sockopt_val))) < 0)
 | 
			
		||||
				perror("setsockopt");
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			ret = -1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		ret = -1;
 | 
			
		||||
#else
 | 
			
		||||
		break;
 | 
			
		||||
#endif
 | 
			
		||||
	case BIO_CTRL_DGRAM_QUERY_MTU:
 | 
			
		||||
         sockopt_len = sizeof(sockopt_val);
 | 
			
		||||
		if ((ret = getsockopt(b->num, IPPROTO_IP, IP_MTU, (void *)&sockopt_val,
 | 
			
		||||
			&sockopt_len)) < 0 || sockopt_val < 0)
 | 
			
		||||
			{ ret = 0; }
 | 
			
		||||
		else
 | 
			
		||||
#ifdef OPENSSL_SYS_LINUX
 | 
			
		||||
		addr_len = (socklen_t)sizeof(struct sockaddr_storage);
 | 
			
		||||
		memset((void *)&addr, 0, sizeof(struct sockaddr_storage));
 | 
			
		||||
		if (getsockname(b->num, (void *)&addr, &addr_len) < 0)
 | 
			
		||||
			{
 | 
			
		||||
			data->mtu = sockopt_val;
 | 
			
		||||
			ret = data->mtu;
 | 
			
		||||
			ret = 0;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		sockopt_len = sizeof(sockopt_val);
 | 
			
		||||
		switch (addr.ss_family)
 | 
			
		||||
			{
 | 
			
		||||
		case AF_INET:
 | 
			
		||||
			if ((ret = getsockopt(b->num, IPPROTO_IP, IP_MTU, (void *)&sockopt_val,
 | 
			
		||||
				&sockopt_len)) < 0 || sockopt_val < 0)
 | 
			
		||||
				{
 | 
			
		||||
				ret = 0;
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				/* we assume that the transport protocol is UDP and no
 | 
			
		||||
				 * IP options are used.
 | 
			
		||||
				 */
 | 
			
		||||
				data->mtu = sockopt_val - 8 - 20;
 | 
			
		||||
				ret = data->mtu;
 | 
			
		||||
				}
 | 
			
		||||
			break;
 | 
			
		||||
		case AF_INET6:
 | 
			
		||||
			if ((ret = getsockopt(b->num, IPPROTO_IPV6, IPV6_MTU, (void *)&sockopt_val,
 | 
			
		||||
				&sockopt_len)) < 0 || sockopt_val < 0)
 | 
			
		||||
				{
 | 
			
		||||
				ret = 0;
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				/* we assume that the transport protocol is UDP and no
 | 
			
		||||
				 * IPV6 options are used.
 | 
			
		||||
				 */
 | 
			
		||||
				data->mtu = sockopt_val - 8 - 40;
 | 
			
		||||
				ret = data->mtu;
 | 
			
		||||
				}
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			ret = 0;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
#else
 | 
			
		||||
		ret = 0;
 | 
			
		||||
#endif
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_CTRL_DGRAM_GET_FALLBACK_MTU:
 | 
			
		||||
		ret = 576 - 20 - 8;
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_CTRL_DGRAM_GET_MTU:
 | 
			
		||||
		return data->mtu;
 | 
			
		||||
@@ -340,11 +518,20 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
 | 
			
		||||
			memset(&(data->peer), 0x00, sizeof(struct sockaddr));
 | 
			
		||||
			}
 | 
			
		||||
		break;
 | 
			
		||||
    case BIO_CTRL_DGRAM_GET_PEER:
 | 
			
		||||
        to = (struct sockaddr *) ptr;
 | 
			
		||||
 | 
			
		||||
        memcpy(to, &(data->peer), sizeof(struct sockaddr));
 | 
			
		||||
		ret = sizeof(struct sockaddr);
 | 
			
		||||
        break;
 | 
			
		||||
    case BIO_CTRL_DGRAM_SET_PEER:
 | 
			
		||||
        to = (struct sockaddr *) ptr;
 | 
			
		||||
 | 
			
		||||
        memcpy(&(data->peer), to, sizeof(struct sockaddr));
 | 
			
		||||
        break;
 | 
			
		||||
	case BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT:
 | 
			
		||||
		memcpy(&(data->next_timeout), ptr, sizeof(struct timeval));		
 | 
			
		||||
		break;
 | 
			
		||||
#if defined(SO_RCVTIMEO)
 | 
			
		||||
	case BIO_CTRL_DGRAM_SET_RECV_TIMEOUT:
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
@@ -471,9 +658,13 @@ static int BIO_dgram_should_retry(int i)
 | 
			
		||||
		{
 | 
			
		||||
		err=get_last_socket_error();
 | 
			
		||||
 | 
			
		||||
#if defined(OPENSSL_SYS_WINDOWS) && 0 /* more microsoft stupidity? perhaps not? Ben 4/1/99 */
 | 
			
		||||
		if ((i == -1) && (err == 0))
 | 
			
		||||
			return(1);
 | 
			
		||||
#if defined(OPENSSL_SYS_WINDOWS)
 | 
			
		||||
	/* If the socket return value (i) is -1
 | 
			
		||||
	 * and err is unexpectedly 0 at this point,
 | 
			
		||||
	 * the error code was overwritten by
 | 
			
		||||
	 * another system call before this error
 | 
			
		||||
	 * handling is called.
 | 
			
		||||
	 */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		return(BIO_dgram_non_fatal_error(err));
 | 
			
		||||
@@ -507,10 +698,6 @@ int BIO_dgram_non_fatal_error(int err)
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(ENOTCONN)
 | 
			
		||||
	case ENOTCONN:
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef EINTR
 | 
			
		||||
	case EINTR:
 | 
			
		||||
#endif
 | 
			
		||||
@@ -533,11 +720,6 @@ int BIO_dgram_non_fatal_error(int err)
 | 
			
		||||
	case EALREADY:
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* DF bit set, and packet larger than MTU */
 | 
			
		||||
#ifdef EMSGSIZE
 | 
			
		||||
	case EMSGSIZE:
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		return(1);
 | 
			
		||||
		/* break; */
 | 
			
		||||
	default:
 | 
			
		||||
@@ -545,4 +727,22 @@ int BIO_dgram_non_fatal_error(int err)
 | 
			
		||||
		}
 | 
			
		||||
	return(0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void get_current_time(struct timeval *t)
 | 
			
		||||
	{
 | 
			
		||||
#ifdef OPENSSL_SYS_WIN32
 | 
			
		||||
	struct _timeb tb;
 | 
			
		||||
	_ftime(&tb);
 | 
			
		||||
	t->tv_sec = (long)tb.time;
 | 
			
		||||
	t->tv_usec = (long)tb.millitm * 1000;
 | 
			
		||||
#elif defined(OPENSSL_SYS_VMS)
 | 
			
		||||
	struct timeb tb;
 | 
			
		||||
	ftime(&tb);
 | 
			
		||||
	t->tv_sec = (long)tb.time;
 | 
			
		||||
	t->tv_usec = (long)tb.millitm * 1000;
 | 
			
		||||
#else
 | 
			
		||||
	gettimeofday(t, NULL);
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -272,9 +272,9 @@ static long MS_CALLBACK file_ctrl(BIO *b, int cmd, long num, void *ptr)
 | 
			
		||||
			BIO_clear_flags(b,BIO_FLAGS_UPLINK);
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef UP_fsetmode
 | 
			
		||||
#ifdef UP_fsetmod
 | 
			
		||||
		if (b->flags&BIO_FLAGS_UPLINK)
 | 
			
		||||
			UP_fsetmode(b->ptr,num&BIO_FP_TEXT?'t':'b');
 | 
			
		||||
			UP_fsetmod(b->ptr,(char)((num&BIO_FP_TEXT)?'t':'b'));
 | 
			
		||||
		else
 | 
			
		||||
#endif
 | 
			
		||||
		{
 | 
			
		||||
@@ -404,11 +404,18 @@ static int MS_CALLBACK file_gets(BIO *bp, char *buf, int size)
 | 
			
		||||
 | 
			
		||||
	buf[0]='\0';
 | 
			
		||||
	if (bp->flags&BIO_FLAGS_UPLINK)
 | 
			
		||||
		UP_fgets(buf,size,bp->ptr);
 | 
			
		||||
		{
 | 
			
		||||
		if (!UP_fgets(buf,size,bp->ptr))
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		fgets(buf,size,(FILE *)bp->ptr);
 | 
			
		||||
		{
 | 
			
		||||
		if (!fgets(buf,size,(FILE *)bp->ptr))
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
	if (buf[0] != '\0')
 | 
			
		||||
		ret=strlen(buf);
 | 
			
		||||
	err:
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -172,15 +172,6 @@ static long sock_ctrl(BIO *b, int cmd, long num, void *ptr)
 | 
			
		||||
 | 
			
		||||
	switch (cmd)
 | 
			
		||||
		{
 | 
			
		||||
	case BIO_CTRL_RESET:
 | 
			
		||||
		num=0;
 | 
			
		||||
	case BIO_C_FILE_SEEK:
 | 
			
		||||
		ret=0;
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_C_FILE_TELL:
 | 
			
		||||
	case BIO_CTRL_INFO:
 | 
			
		||||
		ret=0;
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_C_SET_FD:
 | 
			
		||||
		sock_free(b);
 | 
			
		||||
		b->num= *((int *)ptr);
 | 
			
		||||
@@ -203,10 +194,6 @@ static long sock_ctrl(BIO *b, int cmd, long num, void *ptr)
 | 
			
		||||
	case BIO_CTRL_SET_CLOSE:
 | 
			
		||||
		b->shutdown=(int)num;
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_CTRL_PENDING:
 | 
			
		||||
	case BIO_CTRL_WPENDING:
 | 
			
		||||
		ret=0;
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_CTRL_DUP:
 | 
			
		||||
	case BIO_CTRL_FLUSH:
 | 
			
		||||
		ret=1;
 | 
			
		||||
 
 | 
			
		||||
@@ -1584,17 +1584,17 @@ LEAF(bn_sqr_comba8)
 | 
			
		||||
	dmultu	a_2,a_0		/* mul_add_c2(a[2],b[0],c3,c1,c2); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	c_2,t_2,zero
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	sltu	AT,c_3,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_3,t_1
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	c_2,c_1,AT
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	sltu	AT,c_1,t_2
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	sltu	t_2,c_1,t_2
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	dmultu	a_1,a_1		/* mul_add_c(a[1],b[1],c3,c1,c2); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
@@ -1609,63 +1609,63 @@ LEAF(bn_sqr_comba8)
 | 
			
		||||
	dmultu	a_0,a_3		/* mul_add_c2(a[0],b[3],c1,c2,c3); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	c_3,t_2,zero
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	sltu	AT,c_1,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_1,t_1
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	c_3,c_2,AT
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	sltu	AT,c_2,t_2
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	sltu	t_2,c_2,t_2
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	dmultu	a_1,a_2		/* mul_add_c2(a[1],b[2],c1,c2,c3); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	AT,t_2,zero
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	sltu	AT,c_1,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_1,t_1
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	AT,c_2,AT
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	sltu	AT,c_2,t_2
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	sltu	t_2,c_2,t_2
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	sd	c_1,24(a0)
 | 
			
		||||
 | 
			
		||||
	dmultu	a_4,a_0		/* mul_add_c2(a[4],b[0],c2,c3,c1); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	c_1,t_2,zero
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	sltu	AT,c_2,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_2,t_1
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	c_1,c_3,AT
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	sltu	AT,c_3,t_2
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	sltu	t_2,c_3,t_2
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	dmultu	a_3,a_1		/* mul_add_c2(a[3],b[1],c2,c3,c1); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	AT,t_2,zero
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	sltu	AT,c_2,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_2,t_1
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	AT,c_3,AT
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	sltu	AT,c_3,t_2
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	sltu	t_2,c_3,t_2
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	dmultu	a_2,a_2		/* mul_add_c(a[2],b[2],c2,c3,c1); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
@@ -1680,93 +1680,93 @@ LEAF(bn_sqr_comba8)
 | 
			
		||||
	dmultu	a_0,a_5		/* mul_add_c2(a[0],b[5],c3,c1,c2); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	c_2,t_2,zero
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	sltu	AT,c_3,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_3,t_1
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	c_2,c_1,AT
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	sltu	AT,c_1,t_2
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	sltu	t_2,c_1,t_2
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	dmultu	a_1,a_4		/* mul_add_c2(a[1],b[4],c3,c1,c2); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	AT,t_2,zero
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	sltu	AT,c_3,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_3,t_1
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	AT,c_1,AT
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	sltu	AT,c_1,t_2
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	sltu	t_2,c_1,t_2
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	dmultu	a_2,a_3		/* mul_add_c2(a[2],b[3],c3,c1,c2); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	AT,t_2,zero
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	sltu	AT,c_3,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_3,t_1
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	AT,c_1,AT
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	sltu	AT,c_1,t_2
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	sltu	t_2,c_1,t_2
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	sd	c_3,40(a0)
 | 
			
		||||
 | 
			
		||||
	dmultu	a_6,a_0		/* mul_add_c2(a[6],b[0],c1,c2,c3); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	c_3,t_2,zero
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	sltu	AT,c_1,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_1,t_1
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	c_3,c_2,AT
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	sltu	AT,c_2,t_2
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	sltu	t_2,c_2,t_2
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	dmultu	a_5,a_1		/* mul_add_c2(a[5],b[1],c1,c2,c3); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	AT,t_2,zero
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	sltu	AT,c_1,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_1,t_1
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	AT,c_2,AT
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	sltu	AT,c_2,t_2
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	sltu	t_2,c_2,t_2
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	dmultu	a_4,a_2		/* mul_add_c2(a[4],b[2],c1,c2,c3); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	AT,t_2,zero
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	sltu	AT,c_1,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_1,t_1
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	AT,c_2,AT
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	sltu	AT,c_2,t_2
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	sltu	t_2,c_2,t_2
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	dmultu	a_3,a_3		/* mul_add_c(a[3],b[3],c1,c2,c3); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
@@ -1781,108 +1781,108 @@ LEAF(bn_sqr_comba8)
 | 
			
		||||
	dmultu	a_0,a_7		/* mul_add_c2(a[0],b[7],c2,c3,c1); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	c_1,t_2,zero
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	sltu	AT,c_2,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_2,t_1
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	c_1,c_3,AT
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	sltu	AT,c_3,t_2
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	sltu	t_2,c_3,t_2
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	dmultu	a_1,a_6		/* mul_add_c2(a[1],b[6],c2,c3,c1); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	AT,t_2,zero
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	sltu	AT,c_2,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_2,t_1
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	AT,c_3,AT
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	sltu	AT,c_3,t_2
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	sltu	t_2,c_3,t_2
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	dmultu	a_2,a_5		/* mul_add_c2(a[2],b[5],c2,c3,c1); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	AT,t_2,zero
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	sltu	AT,c_2,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_2,t_1
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	AT,c_3,AT
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	sltu	AT,c_3,t_2
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	sltu	t_2,c_3,t_2
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	dmultu	a_3,a_4		/* mul_add_c2(a[3],b[4],c2,c3,c1); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	AT,t_2,zero
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	sltu	AT,c_2,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_2,t_1
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	AT,c_3,AT
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	sltu	AT,c_3,t_2
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	sltu	t_2,c_3,t_2
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	sd	c_2,56(a0)
 | 
			
		||||
 | 
			
		||||
	dmultu	a_7,a_1		/* mul_add_c2(a[7],b[1],c3,c1,c2); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	c_2,t_2,zero
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	sltu	AT,c_3,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_3,t_1
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	c_2,c_1,AT
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	sltu	AT,c_1,t_2
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	sltu	t_2,c_1,t_2
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	dmultu	a_6,a_2		/* mul_add_c2(a[6],b[2],c3,c1,c2); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	AT,t_2,zero
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	sltu	AT,c_3,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_3,t_1
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	AT,c_1,AT
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	sltu	AT,c_1,t_2
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	sltu	t_2,c_1,t_2
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	dmultu	a_5,a_3		/* mul_add_c2(a[5],b[3],c3,c1,c2); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	AT,t_2,zero
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	sltu	AT,c_3,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_3,t_1
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	AT,c_1,AT
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	sltu	AT,c_1,t_2
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	sltu	t_2,c_1,t_2
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	dmultu	a_4,a_4		/* mul_add_c(a[4],b[4],c3,c1,c2); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
@@ -1897,78 +1897,78 @@ LEAF(bn_sqr_comba8)
 | 
			
		||||
	dmultu	a_2,a_7		/* mul_add_c2(a[2],b[7],c1,c2,c3); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	c_3,t_2,zero
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	sltu	AT,c_1,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_1,t_1
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	c_3,c_2,AT
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	sltu	AT,c_2,t_2
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	sltu	t_2,c_2,t_2
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	dmultu	a_3,a_6		/* mul_add_c2(a[3],b[6],c1,c2,c3); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	AT,t_2,zero
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	sltu	AT,c_1,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_1,t_1
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	AT,c_2,AT
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	sltu	AT,c_2,t_2
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	sltu	t_2,c_2,t_2
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	dmultu	a_4,a_5		/* mul_add_c2(a[4],b[5],c1,c2,c3); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	AT,t_2,zero
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	sltu	AT,c_1,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_1,t_1
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	AT,c_2,AT
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	sltu	AT,c_2,t_2
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	sltu	t_2,c_2,t_2
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	sd	c_1,72(a0)
 | 
			
		||||
 | 
			
		||||
	dmultu	a_7,a_3		/* mul_add_c2(a[7],b[3],c2,c3,c1); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	c_1,t_2,zero
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	sltu	AT,c_2,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_2,t_1
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	c_1,c_3,AT
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	sltu	AT,c_3,t_2
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	sltu	t_2,c_3,t_2
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	dmultu	a_6,a_4		/* mul_add_c2(a[6],b[4],c2,c3,c1); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	AT,t_2,zero
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	sltu	AT,c_2,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_2,t_1
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	AT,c_3,AT
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	sltu	AT,c_3,t_2
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	sltu	t_2,c_3,t_2
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	dmultu	a_5,a_5		/* mul_add_c(a[5],b[5],c2,c3,c1); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
@@ -1983,48 +1983,48 @@ LEAF(bn_sqr_comba8)
 | 
			
		||||
	dmultu	a_4,a_7		/* mul_add_c2(a[4],b[7],c3,c1,c2); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	c_2,t_2,zero
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	sltu	AT,c_3,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_3,t_1
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	c_2,c_1,AT
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	sltu	AT,c_1,t_2
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	sltu	t_2,c_1,t_2
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	dmultu	a_5,a_6		/* mul_add_c2(a[5],b[6],c3,c1,c2); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	AT,t_2,zero
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	sltu	AT,c_3,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_3,t_1
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	AT,c_1,AT
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	sltu	AT,c_1,t_2
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	sltu	t_2,c_1,t_2
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	sd	c_3,88(a0)
 | 
			
		||||
 | 
			
		||||
	dmultu	a_7,a_5		/* mul_add_c2(a[7],b[5],c1,c2,c3); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	c_3,t_2,zero
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	sltu	AT,c_1,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_1,t_1
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	c_3,c_2,AT
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	sltu	AT,c_2,t_2
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	sltu	t_2,c_2,t_2
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	dmultu	a_6,a_6		/* mul_add_c(a[6],b[6],c1,c2,c3); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
@@ -2039,17 +2039,17 @@ LEAF(bn_sqr_comba8)
 | 
			
		||||
	dmultu	a_6,a_7		/* mul_add_c2(a[6],b[7],c2,c3,c1); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	c_1,t_2,zero
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	sltu	AT,c_2,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_2,t_1
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	c_1,c_3,AT
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	sltu	AT,c_3,t_2
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	sltu	t_2,c_3,t_2
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	sd	c_2,104(a0)
 | 
			
		||||
 | 
			
		||||
	dmultu	a_7,a_7		/* mul_add_c(a[7],b[7],c3,c1,c2); */
 | 
			
		||||
@@ -2070,9 +2070,9 @@ LEAF(bn_sqr_comba4)
 | 
			
		||||
	.set	reorder
 | 
			
		||||
	ld	a_0,0(a1)
 | 
			
		||||
	ld	a_1,8(a1)
 | 
			
		||||
	dmultu	a_0,a_0		/* mul_add_c(a[0],b[0],c1,c2,c3); */
 | 
			
		||||
	ld	a_2,16(a1)
 | 
			
		||||
	ld	a_3,24(a1)
 | 
			
		||||
	dmultu	a_0,a_0		/* mul_add_c(a[0],b[0],c1,c2,c3); */
 | 
			
		||||
	mflo	c_1
 | 
			
		||||
	mfhi	c_2
 | 
			
		||||
	sd	c_1,0(a0)
 | 
			
		||||
@@ -2093,17 +2093,17 @@ LEAF(bn_sqr_comba4)
 | 
			
		||||
	dmultu	a_2,a_0		/* mul_add_c2(a[2],b[0],c3,c1,c2); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	c_2,t_2,zero
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	sltu	AT,c_3,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_3,t_1
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	c_2,c_1,AT
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	sltu	AT,c_1,t_2
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	sltu	t_2,c_1,t_2
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	dmultu	a_1,a_1		/* mul_add_c(a[1],b[1],c3,c1,c2); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
@@ -2118,48 +2118,48 @@ LEAF(bn_sqr_comba4)
 | 
			
		||||
	dmultu	a_0,a_3		/* mul_add_c2(a[0],b[3],c1,c2,c3); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	c_3,t_2,zero
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	sltu	AT,c_1,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_1,t_1
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	c_3,c_2,AT
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	sltu	AT,c_2,t_2
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	sltu	t_2,c_2,t_2
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	dmultu	a_1,a_2		/* mul_add_c(a2[1],b[2],c1,c2,c3); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	AT,t_2,zero
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	sltu	AT,c_1,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_1,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_1,t_1
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	AT,c_2,AT
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	sltu	AT,c_2,t_2
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	sltu	t_2,c_2,t_2
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	sd	c_1,24(a0)
 | 
			
		||||
 | 
			
		||||
	dmultu	a_3,a_1		/* mul_add_c2(a[3],b[1],c2,c3,c1); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	c_1,t_2,zero
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	sltu	AT,c_2,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_2,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_2,t_1
 | 
			
		||||
	daddu	c_3,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	c_1,c_3,AT
 | 
			
		||||
	daddu	c_3,t_2
 | 
			
		||||
	sltu	AT,c_3,t_2
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	sltu	t_2,c_3,t_2
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	dmultu	a_2,a_2		/* mul_add_c(a[2],b[2],c2,c3,c1); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
@@ -2174,17 +2174,17 @@ LEAF(bn_sqr_comba4)
 | 
			
		||||
	dmultu	a_2,a_3		/* mul_add_c2(a[2],b[3],c3,c1,c2); */
 | 
			
		||||
	mflo	t_1
 | 
			
		||||
	mfhi	t_2
 | 
			
		||||
	slt	c_2,t_2,zero
 | 
			
		||||
	dsll	t_2,1
 | 
			
		||||
	slt	a2,t_1,zero
 | 
			
		||||
	daddu	t_2,a2
 | 
			
		||||
	dsll	t_1,1
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	sltu	AT,c_3,t_1
 | 
			
		||||
	daddu	t_2,AT
 | 
			
		||||
	daddu	c_3,t_1
 | 
			
		||||
	daddu	AT,t_2
 | 
			
		||||
	sltu	t_1,c_3,t_1
 | 
			
		||||
	daddu	c_1,AT
 | 
			
		||||
	daddu	t_2,t_1
 | 
			
		||||
	sltu	c_2,c_1,AT
 | 
			
		||||
	daddu	c_1,t_2
 | 
			
		||||
	sltu	AT,c_1,t_2
 | 
			
		||||
	daddu	c_2,AT
 | 
			
		||||
	sltu	t_2,c_1,t_2
 | 
			
		||||
	daddu	c_2,t_2
 | 
			
		||||
	sd	c_3,40(a0)
 | 
			
		||||
 | 
			
		||||
	dmultu	a_3,a_3		/* mul_add_c(a[3],b[3],c1,c2,c3); */
 | 
			
		||||
 
 | 
			
		||||
@@ -539,8 +539,10 @@ $sbit=$num;
 | 
			
		||||
	&jle	(&label("sqradd"));
 | 
			
		||||
 | 
			
		||||
	&mov	($carry,"edx");
 | 
			
		||||
	&lea	("edx",&DWP(0,$sbit,"edx",2));
 | 
			
		||||
	&add	("edx","edx");
 | 
			
		||||
	&shr	($carry,31);
 | 
			
		||||
	&add	("edx",$sbit);
 | 
			
		||||
	&adc	($carry,0);
 | 
			
		||||
&set_label("sqrlast");
 | 
			
		||||
	&mov	($word,$_n0);
 | 
			
		||||
	&mov	($inp,$_np);
 | 
			
		||||
 
 | 
			
		||||
@@ -1039,7 +1039,7 @@ sub data {
 | 
			
		||||
	addze	r11,r0
 | 
			
		||||
					#mul_add_c(a[3],b[2],c3,c1,c2);
 | 
			
		||||
	$LD	r6,`3*$BNSZ`(r4)
 | 
			
		||||
	$LD	r7,`2*$BNSZ`(r4)
 | 
			
		||||
	$LD	r7,`2*$BNSZ`(r5)
 | 
			
		||||
	$UMULL	r8,r6,r7
 | 
			
		||||
	$UMULH	r9,r6,r7
 | 
			
		||||
	addc	r12,r8,r12
 | 
			
		||||
@@ -2074,5 +2074,7 @@ EOF
 | 
			
		||||
	$data =~ s/^(\s*)cmplw(\s+)([^,]+),(.*)/$1cmpl$2$3,0,$4/gm;
 | 
			
		||||
	# assembler X doesn't accept li, load immediate value
 | 
			
		||||
	#$data =~ s/^(\s*)li(\s+)([^,]+),(.*)/$1addi$2$3,0,$4/gm;
 | 
			
		||||
	# assembler Y chokes on apostrophes in comments
 | 
			
		||||
	$data =~ s/'//gm;
 | 
			
		||||
	return($data);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,4 @@
 | 
			
		||||
#include "../bn_lcl.h"
 | 
			
		||||
#ifdef __SUNPRO_C
 | 
			
		||||
# include "../bn_asm.c"	/* kind of dirty hack for Sun Studio */
 | 
			
		||||
#else
 | 
			
		||||
@@ -56,6 +57,10 @@
 | 
			
		||||
 | 
			
		||||
#define BN_ULONG unsigned long
 | 
			
		||||
 | 
			
		||||
#undef mul
 | 
			
		||||
#undef mul_add
 | 
			
		||||
#undef sqr
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * "m"(a), "+m"(r)	is the way to favor DirectPath <20>-code;
 | 
			
		||||
 * "g"(0)		let the compiler to decide where does it
 | 
			
		||||
@@ -97,7 +102,7 @@
 | 
			
		||||
		: "a"(a)		\
 | 
			
		||||
		: "cc");
 | 
			
		||||
 | 
			
		||||
BN_ULONG bn_mul_add_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w)
 | 
			
		||||
BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w)
 | 
			
		||||
	{
 | 
			
		||||
	BN_ULONG c1=0;
 | 
			
		||||
 | 
			
		||||
@@ -121,7 +126,7 @@ BN_ULONG bn_mul_add_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w)
 | 
			
		||||
	return(c1);
 | 
			
		||||
	} 
 | 
			
		||||
 | 
			
		||||
BN_ULONG bn_mul_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w)
 | 
			
		||||
BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w)
 | 
			
		||||
	{
 | 
			
		||||
	BN_ULONG c1=0;
 | 
			
		||||
 | 
			
		||||
@@ -144,7 +149,7 @@ BN_ULONG bn_mul_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w)
 | 
			
		||||
	return(c1);
 | 
			
		||||
	} 
 | 
			
		||||
 | 
			
		||||
void bn_sqr_words(BN_ULONG *r, BN_ULONG *a, int n)
 | 
			
		||||
void bn_sqr_words(BN_ULONG *r, const BN_ULONG *a, int n)
 | 
			
		||||
        {
 | 
			
		||||
	if (n <= 0) return;
 | 
			
		||||
 | 
			
		||||
@@ -175,12 +180,12 @@ BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d)
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BN_ULONG bn_add_words (BN_ULONG *rp, BN_ULONG *ap, BN_ULONG *bp,int n)
 | 
			
		||||
BN_ULONG bn_add_words (BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,int n)
 | 
			
		||||
{ BN_ULONG ret=0,i=0;
 | 
			
		||||
 | 
			
		||||
	if (n <= 0) return 0;
 | 
			
		||||
 | 
			
		||||
	asm (
 | 
			
		||||
	asm volatile (
 | 
			
		||||
	"	subq	%2,%2		\n"
 | 
			
		||||
	".align 16			\n"
 | 
			
		||||
	"1:	movq	(%4,%2,8),%0	\n"
 | 
			
		||||
@@ -191,19 +196,19 @@ BN_ULONG bn_add_words (BN_ULONG *rp, BN_ULONG *ap, BN_ULONG *bp,int n)
 | 
			
		||||
	"	sbbq	%0,%0		\n"
 | 
			
		||||
		: "=&a"(ret),"+c"(n),"=&r"(i)
 | 
			
		||||
		: "r"(rp),"r"(ap),"r"(bp)
 | 
			
		||||
		: "cc"
 | 
			
		||||
		: "cc", "memory"
 | 
			
		||||
	);
 | 
			
		||||
 | 
			
		||||
  return ret&1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifndef SIMICS
 | 
			
		||||
BN_ULONG bn_sub_words (BN_ULONG *rp, BN_ULONG *ap, BN_ULONG *bp,int n)
 | 
			
		||||
BN_ULONG bn_sub_words (BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,int n)
 | 
			
		||||
{ BN_ULONG ret=0,i=0;
 | 
			
		||||
 | 
			
		||||
	if (n <= 0) return 0;
 | 
			
		||||
 | 
			
		||||
	asm (
 | 
			
		||||
	asm volatile (
 | 
			
		||||
	"	subq	%2,%2		\n"
 | 
			
		||||
	".align 16			\n"
 | 
			
		||||
	"1:	movq	(%4,%2,8),%0	\n"
 | 
			
		||||
@@ -214,7 +219,7 @@ BN_ULONG bn_sub_words (BN_ULONG *rp, BN_ULONG *ap, BN_ULONG *bp,int n)
 | 
			
		||||
	"	sbbq	%0,%0		\n"
 | 
			
		||||
		: "=&a"(ret),"+c"(n),"=&r"(i)
 | 
			
		||||
		: "r"(rp),"r"(ap),"r"(bp)
 | 
			
		||||
		: "cc"
 | 
			
		||||
		: "cc", "memory"
 | 
			
		||||
	);
 | 
			
		||||
 | 
			
		||||
  return ret&1;
 | 
			
		||||
@@ -264,6 +269,10 @@ BN_ULONG bn_sub_words(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n)
 | 
			
		||||
/* sqr_add_c(a,i,c0,c1,c2)  -- c+=a[i]^2 for three word number c=(c2,c1,c0) */
 | 
			
		||||
/* sqr_add_c2(a,i,c0,c1,c2) -- c+=2*a[i]*a[j] for three word number c=(c2,c1,c0) */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Keep in mind that carrying into high part of multiplication result
 | 
			
		||||
 * can not overflow, because it cannot be all-ones.
 | 
			
		||||
 */
 | 
			
		||||
#if 0
 | 
			
		||||
/* original macros are kept for reference purposes */
 | 
			
		||||
#define mul_add_c(a,b,c0,c1,c2) {	\
 | 
			
		||||
@@ -278,10 +287,10 @@ BN_ULONG bn_sub_words(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n)
 | 
			
		||||
	BN_ULONG ta=(a),tb=(b),t0;	\
 | 
			
		||||
	t1 = BN_UMULT_HIGH(ta,tb);	\
 | 
			
		||||
	t0 = ta * tb;			\
 | 
			
		||||
	t2 = t1+t1; c2 += (t2<t1)?1:0;	\
 | 
			
		||||
	t1 = t0+t0; t2 += (t1<t0)?1:0;	\
 | 
			
		||||
	c0 += t1; t2 += (c0<t1)?1:0;	\
 | 
			
		||||
	c0 += t0; t2 = t1+((c0<t0)?1:0);\
 | 
			
		||||
	c1 += t2; c2 += (c1<t2)?1:0;	\
 | 
			
		||||
	c0 += t0; t1 += (c0<t0)?1:0;	\
 | 
			
		||||
	c1 += t1; c2 += (c1<t1)?1:0;	\
 | 
			
		||||
	}
 | 
			
		||||
#else
 | 
			
		||||
#define mul_add_c(a,b,c0,c1,c2)	do {	\
 | 
			
		||||
@@ -319,22 +328,14 @@ BN_ULONG bn_sub_words(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n)
 | 
			
		||||
		: "=a"(t1),"=d"(t2)	\
 | 
			
		||||
		: "a"(a),"m"(b)		\
 | 
			
		||||
		: "cc");		\
 | 
			
		||||
	asm ("addq %0,%0; adcq %2,%1"	\
 | 
			
		||||
		: "+d"(t2),"+r"(c2)	\
 | 
			
		||||
		: "g"(0)		\
 | 
			
		||||
		: "cc");		\
 | 
			
		||||
	asm ("addq %0,%0; adcq %2,%1"	\
 | 
			
		||||
		: "+a"(t1),"+d"(t2)	\
 | 
			
		||||
		: "g"(0)		\
 | 
			
		||||
		: "cc");		\
 | 
			
		||||
	asm ("addq %2,%0; adcq %3,%1"	\
 | 
			
		||||
		: "+r"(c0),"+d"(t2)	\
 | 
			
		||||
		: "a"(t1),"g"(0)	\
 | 
			
		||||
		: "cc");		\
 | 
			
		||||
	asm ("addq %2,%0; adcq %3,%1"	\
 | 
			
		||||
		: "+r"(c1),"+r"(c2)	\
 | 
			
		||||
		: "d"(t2),"g"(0)	\
 | 
			
		||||
		: "cc");		\
 | 
			
		||||
	asm ("addq %3,%0; adcq %4,%1; adcq %5,%2"	\
 | 
			
		||||
		: "+r"(c0),"+r"(c1),"+r"(c2)		\
 | 
			
		||||
		: "r"(t1),"r"(t2),"g"(0)		\
 | 
			
		||||
		: "cc");				\
 | 
			
		||||
	asm ("addq %3,%0; adcq %4,%1; adcq %5,%2"	\
 | 
			
		||||
		: "+r"(c0),"+r"(c1),"+r"(c2)		\
 | 
			
		||||
		: "r"(t1),"r"(t2),"g"(0)		\
 | 
			
		||||
		: "cc");				\
 | 
			
		||||
	} while (0)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -485,7 +486,7 @@ void bn_mul_comba4(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b)
 | 
			
		||||
	r[7]=c2;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void bn_sqr_comba8(BN_ULONG *r, BN_ULONG *a)
 | 
			
		||||
void bn_sqr_comba8(BN_ULONG *r, const BN_ULONG *a)
 | 
			
		||||
	{
 | 
			
		||||
	BN_ULONG t1,t2;
 | 
			
		||||
	BN_ULONG c1,c2,c3;
 | 
			
		||||
@@ -561,7 +562,7 @@ void bn_sqr_comba8(BN_ULONG *r, BN_ULONG *a)
 | 
			
		||||
	r[15]=c1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void bn_sqr_comba4(BN_ULONG *r, BN_ULONG *a)
 | 
			
		||||
void bn_sqr_comba4(BN_ULONG *r, const BN_ULONG *a)
 | 
			
		||||
	{
 | 
			
		||||
	BN_ULONG t1,t2;
 | 
			
		||||
	BN_ULONG c1,c2,c3;
 | 
			
		||||
 
 | 
			
		||||
@@ -511,6 +511,8 @@ BIGNUM *BN_mod_inverse(BIGNUM *ret,
 | 
			
		||||
BIGNUM *BN_mod_sqrt(BIGNUM *ret,
 | 
			
		||||
	const BIGNUM *a, const BIGNUM *n,BN_CTX *ctx);
 | 
			
		||||
 | 
			
		||||
void	BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords);
 | 
			
		||||
 | 
			
		||||
/* Deprecated versions */
 | 
			
		||||
#ifndef OPENSSL_NO_DEPRECATED
 | 
			
		||||
BIGNUM *BN_generate_prime(BIGNUM *ret,int bits,int safe,
 | 
			
		||||
@@ -740,11 +742,20 @@ int RAND_pseudo_bytes(unsigned char *buf,int num);
 | 
			
		||||
 | 
			
		||||
#define bn_fix_top(a)		bn_check_top(a)
 | 
			
		||||
 | 
			
		||||
#define bn_check_size(bn, bits) bn_wcheck_size(bn, ((bits+BN_BITS2-1))/BN_BITS2)
 | 
			
		||||
#define bn_wcheck_size(bn, words) \
 | 
			
		||||
	do { \
 | 
			
		||||
		const BIGNUM *_bnum2 = (bn); \
 | 
			
		||||
		assert(words <= (_bnum2)->dmax && words >= (_bnum2)->top); \
 | 
			
		||||
	} while(0)
 | 
			
		||||
 | 
			
		||||
#else /* !BN_DEBUG */
 | 
			
		||||
 | 
			
		||||
#define bn_pollute(a)
 | 
			
		||||
#define bn_check_top(a)
 | 
			
		||||
#define bn_fix_top(a)		bn_correct_top(a)
 | 
			
		||||
#define bn_check_size(bn, bits)
 | 
			
		||||
#define bn_wcheck_size(bn, words)
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user