Compare commits
	
		
			1452 Commits
		
	
	
		
			master-pos
			...
			OpenSSL_1_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					a06ec5a26f | ||
| 
						 | 
					62bbfe036d | ||
| 
						 | 
					f46e8095aa | ||
| 
						 | 
					57de3216e2 | ||
| 
						 | 
					857b2ced04 | ||
| 
						 | 
					809bf2eab7 | ||
| 
						 | 
					db96b5ab76 | ||
| 
						 | 
					cb9f1bc1d1 | ||
| 
						 | 
					9545eac45b | ||
| 
						 | 
					228806a4f3 | ||
| 
						 | 
					bb82db1c77 | ||
| 
						 | 
					470446db9a | ||
| 
						 | 
					91e64e1427 | ||
| 
						 | 
					0d3a7e7c91 | ||
| 
						 | 
					a85eef72f5 | ||
| 
						 | 
					0ae3473e85 | ||
| 
						 | 
					98377858d1 | ||
| 
						 | 
					aaa654d607 | ||
| 
						 | 
					296559b0ce | ||
| 
						 | 
					079495cad2 | ||
| 
						 | 
					591c819c30 | ||
| 
						 | 
					439c193413 | ||
| 
						 | 
					1b8403889b | ||
| 
						 | 
					e261cf5a2e | ||
| 
						 | 
					b3c721482b | ||
| 
						 | 
					ea04412c13 | ||
| 
						 | 
					2dff75f4df | ||
| 
						 | 
					690d040b2e | ||
| 
						 | 
					6c63867178 | ||
| 
						 | 
					b3ac37c69a | ||
| 
						 | 
					50c2c64fe7 | ||
| 
						 | 
					a6202a74f9 | ||
| 
						 | 
					6b7d6c4404 | ||
| 
						 | 
					21220998f3 | ||
| 
						 | 
					4bbff0f946 | ||
| 
						 | 
					923552bd5d | ||
| 
						 | 
					dafa9534de | ||
| 
						 | 
					e35e22e1d9 | ||
| 
						 | 
					06cf4418cf | ||
| 
						 | 
					81741de632 | ||
| 
						 | 
					f2f2f64dee | ||
| 
						 | 
					34fc239378 | ||
| 
						 | 
					dfc3e9698b | ||
| 
						 | 
					ab1c3627b7 | ||
| 
						 | 
					c30465847b | ||
| 
						 | 
					66e20354cb | ||
| 
						 | 
					1a08063abf | ||
| 
						 | 
					9104dc4255 | ||
| 
						 | 
					0275883673 | ||
| 
						 | 
					7746ff501c | ||
| 
						 | 
					765db5f9e5 | ||
| 
						 | 
					683f03e488 | ||
| 
						 | 
					765e2465ca | ||
| 
						 | 
					f10dfa0757 | ||
| 
						 | 
					394a30c2f8 | ||
| 
						 | 
					36971258e3 | ||
| 
						 | 
					71b0bb764c | ||
| 
						 | 
					09712fd0e3 | ||
| 
						 | 
					4bf7b29169 | ||
| 
						 | 
					42ad0100f1 | ||
| 
						 | 
					dac693c957 | ||
| 
						 | 
					6e161ee39e | ||
| 
						 | 
					0e5e7af955 | ||
| 
						 | 
					2487d77104 | ||
| 
						 | 
					e5d2a44fb7 | ||
| 
						 | 
					189de54506 | ||
| 
						 | 
					beac071b13 | ||
| 
						 | 
					99ff40515d | ||
| 
						 | 
					192e148154 | ||
| 
						 | 
					1804f78298 | ||
| 
						 | 
					3d7a9aca8c | ||
| 
						 | 
					4bc9913844 | ||
| 
						 | 
					a8b966f48f | ||
| 
						 | 
					e3db68b766 | ||
| 
						 | 
					c583d40678 | ||
| 
						 | 
					31082f2127 | ||
| 
						 | 
					2c783509f4 | ||
| 
						 | 
					6bd72a273e | ||
| 
						 | 
					5011589a0b | ||
| 
						 | 
					7b0ec6a4af | ||
| 
						 | 
					e5ebff7b6a | ||
| 
						 | 
					9c392088de | ||
| 
						 | 
					a75d7245e5 | ||
| 
						 | 
					b10a8451e3 | ||
| 
						 | 
					679fee0e18 | ||
| 
						 | 
					74c1dc909d | ||
| 
						 | 
					638f75b686 | ||
| 
						 | 
					510edea8db | ||
| 
						 | 
					3bc28b8022 | ||
| 
						 | 
					2d8e9d0c55 | ||
| 
						 | 
					15a9c36755 | ||
| 
						 | 
					a988c1edfc | ||
| 
						 | 
					23a79aac28 | ||
| 
						 | 
					d8305efeb4 | ||
| 
						 | 
					7566807cfc | ||
| 
						 | 
					3ad5ae5d44 | ||
| 
						 | 
					e16db4b3d7 | ||
| 
						 | 
					134d38bcde | ||
| 
						 | 
					74d3242514 | ||
| 
						 | 
					6020ffc766 | ||
| 
						 | 
					7cba857c9a | ||
| 
						 | 
					08220fec49 | ||
| 
						 | 
					bfe4de7257 | ||
| 
						 | 
					7a9f1f174c | ||
| 
						 | 
					033a5fcfe8 | ||
| 
						 | 
					4f6930f5d3 | ||
| 
						 | 
					bc18f2f140 | ||
| 
						 | 
					1a9c746696 | ||
| 
						 | 
					92fd726fb4 | ||
| 
						 | 
					46d8227210 | ||
| 
						 | 
					5d3dc701b9 | ||
| 
						 | 
					25c438987b | ||
| 
						 | 
					016b92d112 | ||
| 
						 | 
					dd6da173fd | ||
| 
						 | 
					6ff1bf382e | ||
| 
						 | 
					65f1d188c5 | ||
| 
						 | 
					a25d0527b7 | ||
| 
						 | 
					89f6c5b492 | ||
| 
						 | 
					f326f6544d | ||
| 
						 | 
					569c68744a | ||
| 
						 | 
					cdac2e8928 | ||
| 
						 | 
					01fb34ad43 | ||
| 
						 | 
					08fac3fb6f | ||
| 
						 | 
					0c8dc6ebe5 | ||
| 
						 | 
					f4f1e80801 | ||
| 
						 | 
					36f309c50a | ||
| 
						 | 
					94e5cf36bd | ||
| 
						 | 
					23df532ec4 | ||
| 
						 | 
					b960060a0d | ||
| 
						 | 
					e9cb6eb1d3 | ||
| 
						 | 
					181ae2badb | ||
| 
						 | 
					a98051fb47 | ||
| 
						 | 
					225628f280 | ||
| 
						 | 
					ca39b261bf | ||
| 
						 | 
					c1beec0e6d | ||
| 
						 | 
					b095884a58 | ||
| 
						 | 
					f7fe3d235a | ||
| 
						 | 
					b2688c9161 | ||
| 
						 | 
					bf6fa208b5 | ||
| 
						 | 
					eb37b6aa41 | ||
| 
						 | 
					f66f76a24a | ||
| 
						 | 
					65c63da207 | ||
| 
						 | 
					9f028e4a78 | ||
| 
						 | 
					64eec8f898 | ||
| 
						 | 
					08a88774bd | ||
| 
						 | 
					802a070bb6 | ||
| 
						 | 
					31c65a7bc0 | ||
| 
						 | 
					208a6012be | ||
| 
						 | 
					d7f8a7cafd | ||
| 
						 | 
					0f1c30b00d | ||
| 
						 | 
					c4b969639a | ||
| 
						 | 
					bfb2e4b280 | ||
| 
						 | 
					d8c8a718a2 | ||
| 
						 | 
					40c2812f56 | ||
| 
						 | 
					2e3e3d278e | ||
| 
						 | 
					2ececf59de | ||
| 
						 | 
					a60536348b | ||
| 
						 | 
					9d410579a7 | ||
| 
						 | 
					4f90ef0c5b | ||
| 
						 | 
					eae2bb2f1f | ||
| 
						 | 
					c313270836 | ||
| 
						 | 
					af8a66d10d | ||
| 
						 | 
					ec5c25b3b4 | ||
| 
						 | 
					38afaa48ec | ||
| 
						 | 
					954818fe60 | ||
| 
						 | 
					027381f68c | ||
| 
						 | 
					a900b3b51c | ||
| 
						 | 
					82d7247fc5 | ||
| 
						 | 
					ceb4c684e4 | ||
| 
						 | 
					a8da754d84 | ||
| 
						 | 
					8ccb44e6f5 | ||
| 
						 | 
					bbfdd1f0c9 | ||
| 
						 | 
					8724f9f9cf | ||
| 
						 | 
					6d41cbb63a | ||
| 
						 | 
					04a73c844f | ||
| 
						 | 
					87ff17a05d | ||
| 
						 | 
					d93112abc6 | ||
| 
						 | 
					875a33d7f7 | ||
| 
						 | 
					cf48a6d7f6 | ||
| 
						 | 
					7f3490e685 | ||
| 
						 | 
					dcf7a2dc4a | ||
| 
						 | 
					6ff76b3347 | ||
| 
						 | 
					3b12515180 | ||
| 
						 | 
					4e73dc5b76 | ||
| 
						 | 
					67eb85d7d4 | ||
| 
						 | 
					915a3b1c21 | ||
| 
						 | 
					e1b1d82aab | ||
| 
						 | 
					c25456633c | ||
| 
						 | 
					aaf9335970 | ||
| 
						 | 
					cee17f96f1 | ||
| 
						 | 
					bd36615973 | ||
| 
						 | 
					db85611989 | ||
| 
						 | 
					9e5267fcdd | ||
| 
						 | 
					0d330ce5cc | ||
| 
						 | 
					2a303a5834 | ||
| 
						 | 
					8d81dfd0a6 | ||
| 
						 | 
					69c163ac81 | ||
| 
						 | 
					b7eaea7397 | ||
| 
						 | 
					2d2965d2c1 | ||
| 
						 | 
					56cee260d8 | ||
| 
						 | 
					e2e13b8f3a | ||
| 
						 | 
					13b2a4d06a | ||
| 
						 | 
					41da9188cc | ||
| 
						 | 
					e9fe4b1033 | ||
| 
						 | 
					6469c947f5 | ||
| 
						 | 
					9bf3ff1ca0 | ||
| 
						 | 
					74f77d40a9 | ||
| 
						 | 
					55513f3e48 | ||
| 
						 | 
					c8dd719095 | ||
| 
						 | 
					0bfd0bff17 | ||
| 
						 | 
					eb269523bb | ||
| 
						 | 
					802feda7fc | ||
| 
						 | 
					cdad6ad015 | ||
| 
						 | 
					4eca4cfbc8 | ||
| 
						 | 
					7e29be228e | ||
| 
						 | 
					8745c0815c | ||
| 
						 | 
					68828f167c | ||
| 
						 | 
					59dcfa21e5 | ||
| 
						 | 
					13f8ddacbe | ||
| 
						 | 
					ad8b204386 | ||
| 
						 | 
					7b7aef9bfd | ||
| 
						 | 
					93540299fe | ||
| 
						 | 
					1db72876dc | ||
| 
						 | 
					b55ff319f8 | ||
| 
						 | 
					9a6940a349 | ||
| 
						 | 
					c36ceb0b15 | ||
| 
						 | 
					904fcce0c6 | ||
| 
						 | 
					2518a35a51 | ||
| 
						 | 
					442ca2bd00 | ||
| 
						 | 
					09e62af4d4 | ||
| 
						 | 
					88f0c9797e | ||
| 
						 | 
					74f5307d57 | ||
| 
						 | 
					da8dd611ae | ||
| 
						 | 
					43711a589b | ||
| 
						 | 
					bf63eab048 | ||
| 
						 | 
					62ca466a54 | ||
| 
						 | 
					17d3b1ecea | ||
| 
						 | 
					73729e4cf3 | ||
| 
						 | 
					05f61fb27e | ||
| 
						 | 
					10be715b95 | ||
| 
						 | 
					e87a4a7011 | ||
| 
						 | 
					f2a57c101f | ||
| 
						 | 
					b88ffa2bce | ||
| 
						 | 
					27b0494153 | ||
| 
						 | 
					d38dcafe95 | ||
| 
						 | 
					b0873dbb44 | ||
| 
						 | 
					48ae65be09 | ||
| 
						 | 
					dd5d7447c1 | ||
| 
						 | 
					4ff9cbe635 | ||
| 
						 | 
					e164b34079 | ||
| 
						 | 
					679d0c8655 | ||
| 
						 | 
					1d5e58b53c | ||
| 
						 | 
					118149887b | ||
| 
						 | 
					bb505311c6 | ||
| 
						 | 
					f5fc85d382 | ||
| 
						 | 
					6e4929fcdb | ||
| 
						 | 
					03a12c1330 | ||
| 
						 | 
					57b0c4697a | ||
| 
						 | 
					9fd3555305 | ||
| 
						 | 
					67e53f73bf | ||
| 
						 | 
					2281d10a7b | ||
| 
						 | 
					e5861c885f | ||
| 
						 | 
					60be115771 | ||
| 
						 | 
					5ee775a4a5 | ||
| 
						 | 
					934ca0714a | ||
| 
						 | 
					ad007e0aaf | ||
| 
						 | 
					84361b898d | ||
| 
						 | 
					1a80d39021 | ||
| 
						 | 
					c5526a16b1 | ||
| 
						 | 
					b6b9670017 | ||
| 
						 | 
					469665f658 | ||
| 
						 | 
					c4eb02bcaa | ||
| 
						 | 
					97f336f25d | ||
| 
						 | 
					5e05728ace | ||
| 
						 | 
					061a5bdba2 | ||
| 
						 | 
					e6ed83fb74 | ||
| 
						 | 
					c3f2fc419b | ||
| 
						 | 
					ec9cb40da5 | ||
| 
						 | 
					ed1de3810d | ||
| 
						 | 
					df35da266d | ||
| 
						 | 
					26d60e29e3 | ||
| 
						 | 
					5a0df377ac | ||
| 
						 | 
					f7123634a5 | ||
| 
						 | 
					7aeb3d7937 | ||
| 
						 | 
					182f1ad8a1 | ||
| 
						 | 
					0819130188 | ||
| 
						 | 
					3fe4fc4774 | ||
| 
						 | 
					1326733457 | ||
| 
						 | 
					d8426e6b7d | ||
| 
						 | 
					aa90ff7d8e | ||
| 
						 | 
					aeae79951c | ||
| 
						 | 
					cf3792b3e4 | ||
| 
						 | 
					e6b98d5a40 | ||
| 
						 | 
					4054d95eb9 | ||
| 
						 | 
					a05e954b66 | ||
| 
						 | 
					ca4a339eeb | ||
| 
						 | 
					835e32f9f6 | ||
| 
						 | 
					23396f5500 | ||
| 
						 | 
					1c9b82a91f | ||
| 
						 | 
					99657430c0 | ||
| 
						 | 
					ce20ac72b4 | ||
| 
						 | 
					525b6c7585 | ||
| 
						 | 
					29ed482ffc | ||
| 
						 | 
					b38db8803f | ||
| 
						 | 
					59899c4d1b | ||
| 
						 | 
					eec4cc8878 | ||
| 
						 | 
					2e7124497d | ||
| 
						 | 
					c0eae35b3d | ||
| 
						 | 
					50c9141d00 | ||
| 
						 | 
					2617a3c44d | ||
| 
						 | 
					a7da2b8e17 | ||
| 
						 | 
					e617a506ff | ||
| 
						 | 
					80640bf0bc | ||
| 
						 | 
					f05bce4f2f | ||
| 
						 | 
					5cd3ae9f18 | ||
| 
						 | 
					d9d5a12823 | ||
| 
						 | 
					06f3746c62 | ||
| 
						 | 
					14247e4f59 | ||
| 
						 | 
					72bc04942a | ||
| 
						 | 
					8e28ef0d85 | ||
| 
						 | 
					996edff7e1 | ||
| 
						 | 
					532ee6e056 | ||
| 
						 | 
					08db2cc9c1 | ||
| 
						 | 
					f25e4263fe | ||
| 
						 | 
					2dc967ddd0 | ||
| 
						 | 
					a357acdd3b | ||
| 
						 | 
					7e98378d15 | ||
| 
						 | 
					d663f506dc | ||
| 
						 | 
					ead6774804 | ||
| 
						 | 
					e05282f8b0 | ||
| 
						 | 
					34b087c9d0 | ||
| 
						 | 
					9f81028969 | ||
| 
						 | 
					8781538f41 | ||
| 
						 | 
					8343fdc3c7 | ||
| 
						 | 
					e966578d2f | ||
| 
						 | 
					7bab3c16ff | ||
| 
						 | 
					e2d569973c | ||
| 
						 | 
					caff6fc593 | ||
| 
						 | 
					ccb0398da6 | ||
| 
						 | 
					1f163fce81 | ||
| 
						 | 
					4bee980bb5 | ||
| 
						 | 
					7fa5428558 | ||
| 
						 | 
					b9c9cd3ded | ||
| 
						 | 
					8250e1b232 | ||
| 
						 | 
					519c977c47 | ||
| 
						 | 
					123370fb94 | ||
| 
						 | 
					c97e457d53 | ||
| 
						 | 
					f4e6ed09e4 | ||
| 
						 | 
					b79e6e3a27 | ||
| 
						 | 
					812b7246d4 | ||
| 
						 | 
					db305124f3 | ||
| 
						 | 
					bffbaf92bf | ||
| 
						 | 
					5aca5d41c0 | ||
| 
						 | 
					8343e6b6b2 | ||
| 
						 | 
					f87c6a551e | ||
| 
						 | 
					268ae49453 | ||
| 
						 | 
					6270d1c086 | ||
| 
						 | 
					5b54d26830 | ||
| 
						 | 
					fccbab6f31 | ||
| 
						 | 
					caf4e91a35 | ||
| 
						 | 
					c01a838d62 | ||
| 
						 | 
					66d3fb6af0 | ||
| 
						 | 
					92e2dc11f3 | ||
| 
						 | 
					5bcb4be17d | ||
| 
						 | 
					dd9d9056cb | ||
| 
						 | 
					44f28dd1e6 | ||
| 
						 | 
					3f2959beee | ||
| 
						 | 
					30e9cbe792 | ||
| 
						 | 
					5b7f4c718f | ||
| 
						 | 
					cb8044f032 | ||
| 
						 | 
					7bca2646b5 | ||
| 
						 | 
					edc2df54b9 | ||
| 
						 | 
					365e872fa1 | ||
| 
						 | 
					b3edc5fdb1 | ||
| 
						 | 
					f7c4fe519b | ||
| 
						 | 
					92c2c6e88c | ||
| 
						 | 
					12cbba0d54 | ||
| 
						 | 
					f9f6befa1f | ||
| 
						 | 
					0552cbcdaa | ||
| 
						 | 
					c3cd9be01f | ||
| 
						 | 
					9f4a47b3ed | ||
| 
						 | 
					51080676f1 | ||
| 
						 | 
					1535ff91e1 | ||
| 
						 | 
					79c8c47d5c | ||
| 
						 | 
					84fe686173 | ||
| 
						 | 
					44ea88c26e | ||
| 
						 | 
					f4e6975590 | ||
| 
						 | 
					3dd101aa4d | ||
| 
						 | 
					ba44b8d42e | ||
| 
						 | 
					7cdbce53f1 | ||
| 
						 | 
					1ff9f2eed3 | ||
| 
						 | 
					ee30926671 | ||
| 
						 | 
					3d50fef7d7 | ||
| 
						 | 
					33c162301a | ||
| 
						 | 
					3abcf477a9 | ||
| 
						 | 
					986fa907ae | ||
| 
						 | 
					e4e1b8f230 | ||
| 
						 | 
					da8f10881e | ||
| 
						 | 
					ebbbc8bd1c | ||
| 
						 | 
					bddd6e3495 | ||
| 
						 | 
					6fc530e6a0 | ||
| 
						 | 
					d24e8ac25b | ||
| 
						 | 
					06e17142fc | ||
| 
						 | 
					f82596346b | ||
| 
						 | 
					38b4d7aab1 | ||
| 
						 | 
					f16fede1cd | ||
| 
						 | 
					4a15b7c625 | ||
| 
						 | 
					065b75d3b7 | ||
| 
						 | 
					75c3073bbf | ||
| 
						 | 
					5762c18517 | ||
| 
						 | 
					6a1dd28576 | ||
| 
						 | 
					0737acd2a8 | ||
| 
						 | 
					2198be3483 | ||
| 
						 | 
					6fe498497c | ||
| 
						 | 
					ce2c6d8452 | ||
| 
						 | 
					e67c71c8fd | ||
| 
						 | 
					ffa0e16198 | ||
| 
						 | 
					910b3a81fd | ||
| 
						 | 
					24a47191f3 | ||
| 
						 | 
					4ba2edd2a5 | ||
| 
						 | 
					4f5b7a76da | ||
| 
						 | 
					8fe4d5bedb | ||
| 
						 | 
					d43301b77a | ||
| 
						 | 
					4727d57400 | ||
| 
						 | 
					b815ab2101 | ||
| 
						 | 
					ffaebdf38c | ||
| 
						 | 
					8e04001f85 | ||
| 
						 | 
					0450d6c177 | ||
| 
						 | 
					745929c2a5 | ||
| 
						 | 
					158d061609 | ||
| 
						 | 
					16d616756f | ||
| 
						 | 
					9fe6acbd1d | ||
| 
						 | 
					5df832293e | ||
| 
						 | 
					317ed9abdb | ||
| 
						 | 
					080ae68432 | ||
| 
						 | 
					6c6f6c44e5 | ||
| 
						 | 
					11d31c00ad | ||
| 
						 | 
					7f94a3c3de | ||
| 
						 | 
					528c6ef7c0 | ||
| 
						 | 
					1b0d48126b | ||
| 
						 | 
					7233e20931 | ||
| 
						 | 
					2d64b51d20 | ||
| 
						 | 
					1f7732bca2 | ||
| 
						 | 
					fec613dcf2 | ||
| 
						 | 
					91f17128ab | ||
| 
						 | 
					2a832cf05b | ||
| 
						 | 
					0c9394280a | ||
| 
						 | 
					07aafc4956 | ||
| 
						 | 
					70fd1f9173 | ||
| 
						 | 
					16f2ba724d | ||
| 
						 | 
					0c0a51d34b | ||
| 
						 | 
					68b6a94379 | ||
| 
						 | 
					b7aa71a3f9 | ||
| 
						 | 
					f1d0201952 | ||
| 
						 | 
					41468ed388 | ||
| 
						 | 
					5f0df1f650 | ||
| 
						 | 
					e6b4ed7ffa | ||
| 
						 | 
					f11bedf8ed | ||
| 
						 | 
					c23746f339 | ||
| 
						 | 
					7a1b1722f5 | ||
| 
						 | 
					583c2aa3e5 | ||
| 
						 | 
					9b2b619133 | ||
| 
						 | 
					48f91f6a88 | ||
| 
						 | 
					6f1c8d45f7 | ||
| 
						 | 
					56023bc405 | ||
| 
						 | 
					6f87807e62 | ||
| 
						 | 
					799f203ff6 | ||
| 
						 | 
					34eee35479 | ||
| 
						 | 
					bcd092d706 | ||
| 
						 | 
					713f110f53 | ||
| 
						 | 
					4d11426716 | ||
| 
						 | 
					3087bd32ff | ||
| 
						 | 
					a47060f1c9 | ||
| 
						 | 
					b04c0d805c | ||
| 
						 | 
					a1a45c59ec | ||
| 
						 | 
					64841ed746 | ||
| 
						 | 
					901554b355 | ||
| 
						 | 
					0e05f88ebf | ||
| 
						 | 
					6715f00081 | ||
| 
						 | 
					6a14feb048 | ||
| 
						 | 
					02c54f7c22 | ||
| 
						 | 
					243dac0af0 | ||
| 
						 | 
					da018b129e | ||
| 
						 | 
					e9554f7f9b | ||
| 
						 | 
					71a1ac9398 | ||
| 
						 | 
					6a2f94b39a | ||
| 
						 | 
					6ba1d561eb | ||
| 
						 | 
					f73546df92 | ||
| 
						 | 
					be125aa5ba | ||
| 
						 | 
					413cbfe68d | ||
| 
						 | 
					ee463921ed | ||
| 
						 | 
					76e7744bef | ||
| 
						 | 
					d9e048ceac | ||
| 
						 | 
					65a9383e6b | ||
| 
						 | 
					c6b82f7ee9 | ||
| 
						 | 
					25590043d1 | ||
| 
						 | 
					8a5d624d5b | ||
| 
						 | 
					ae4a75cecf | ||
| 
						 | 
					2e884ce11d | ||
| 
						 | 
					da8f1b738c | ||
| 
						 | 
					33f44acbbe | ||
| 
						 | 
					11c48a0fd2 | ||
| 
						 | 
					3cdaca2436 | ||
| 
						 | 
					b23da2919b | ||
| 
						 | 
					610dfc3ef4 | ||
| 
						 | 
					080f395392 | ||
| 
						 | 
					f852b60797 | ||
| 
						 | 
					e2356454c8 | ||
| 
						 | 
					e5420be6cd | ||
| 
						 | 
					9c00a95060 | ||
| 
						 | 
					ebc71865f0 | ||
| 
						 | 
					1dfa62d4c8 | ||
| 
						 | 
					8c6364e198 | ||
| 
						 | 
					98c2e93723 | ||
| 
						 | 
					c053e538b4 | ||
| 
						 | 
					6386647298 | ||
| 
						 | 
					4b24b754f5 | ||
| 
						 | 
					bfff2cc192 | ||
| 
						 | 
					d8b177719a | ||
| 
						 | 
					d985a68c89 | ||
| 
						 | 
					8dad8bc465 | ||
| 
						 | 
					235e76bce1 | ||
| 
						 | 
					d38c549e60 | ||
| 
						 | 
					558189183f | ||
| 
						 | 
					77ada38dbd | ||
| 
						 | 
					8124ebcd78 | ||
| 
						 | 
					04fde2025b | ||
| 
						 | 
					6bd61198fb | ||
| 
						 | 
					23b5e47ffc | ||
| 
						 | 
					fb81e6d300 | ||
| 
						 | 
					50ff4afb03 | ||
| 
						 | 
					c51f6bccea | ||
| 
						 | 
					836a811604 | ||
| 
						 | 
					bb65e3f22b | ||
| 
						 | 
					b8719c753e | ||
| 
						 | 
					92b2530acd | ||
| 
						 | 
					9ff94ad7ae | ||
| 
						 | 
					60ccb02c4a | ||
| 
						 | 
					094fb13876 | ||
| 
						 | 
					9c5d75d5a9 | ||
| 
						 | 
					ca461ecd11 | ||
| 
						 | 
					0ad9fe2d59 | ||
| 
						 | 
					a203df7521 | ||
| 
						 | 
					144517299c | ||
| 
						 | 
					5c468f0c1f | ||
| 
						 | 
					83a4ae6b0b | ||
| 
						 | 
					9374bc1c10 | ||
| 
						 | 
					e9c563fc29 | ||
| 
						 | 
					4887e07819 | ||
| 
						 | 
					652ac3e93a | ||
| 
						 | 
					8d2f61ac70 | ||
| 
						 | 
					02a23fa309 | ||
| 
						 | 
					bef20d4a68 | ||
| 
						 | 
					dddddb2e6c | ||
| 
						 | 
					8fcb93613a | ||
| 
						 | 
					ecb58c1628 | ||
| 
						 | 
					a969ca5cc8 | ||
| 
						 | 
					1e4406a854 | ||
| 
						 | 
					94fbee800b | ||
| 
						 | 
					c50847c28b | ||
| 
						 | 
					b1ce2d24dd | ||
| 
						 | 
					743fb51d2c | ||
| 
						 | 
					0ed781740d | ||
| 
						 | 
					d0e542fdc9 | ||
| 
						 | 
					457863efdf | ||
| 
						 | 
					5bd4fcc5c2 | ||
| 
						 | 
					3dd2eebfbc | ||
| 
						 | 
					d079b387a3 | ||
| 
						 | 
					8eeaeb4b04 | ||
| 
						 | 
					0041925844 | ||
| 
						 | 
					14fa016b2b | ||
| 
						 | 
					7fdccda37d | ||
| 
						 | 
					cdc575c46b | ||
| 
						 | 
					2f0aaf76f3 | ||
| 
						 | 
					6b7887b0ab | ||
| 
						 | 
					9ad1b440ae | ||
| 
						 | 
					9275ad321f | ||
| 
						 | 
					216a2a5fc6 | ||
| 
						 | 
					c2c6044933 | ||
| 
						 | 
					dc95c53c6f | ||
| 
						 | 
					b24a53dd9a | ||
| 
						 | 
					ffbe7cd0c5 | ||
| 
						 | 
					97183a312e | ||
| 
						 | 
					46ed8aff6d | ||
| 
						 | 
					6a0a48433b | ||
| 
						 | 
					ad3d95222d | ||
| 
						 | 
					18ea747ce4 | ||
| 
						 | 
					f4f512a853 | ||
| 
						 | 
					9c2bed0b65 | ||
| 
						 | 
					ad83334e73 | ||
| 
						 | 
					2cf4bc9ecd | ||
| 
						 | 
					c8ac945d59 | ||
| 
						 | 
					92aa50bc03 | ||
| 
						 | 
					2f31308b17 | ||
| 
						 | 
					468d58e712 | ||
| 
						 | 
					dd4b50ff6a | ||
| 
						 | 
					030d5b8c97 | ||
| 
						 | 
					9b73be38ab | ||
| 
						 | 
					e5bf2f5d4c | ||
| 
						 | 
					a7096946fa | ||
| 
						 | 
					4a8362a68b | ||
| 
						 | 
					25128a11fb | ||
| 
						 | 
					3deb968fec | ||
| 
						 | 
					276eb93218 | ||
| 
						 | 
					29c33e16ac | ||
| 
						 | 
					bffb696f65 | ||
| 
						 | 
					fd2d78e70b | ||
| 
						 | 
					6b1fb9179e | ||
| 
						 | 
					702175817f | ||
| 
						 | 
					703ec840dc | ||
| 
						 | 
					04d706d42a | ||
| 
						 | 
					b996cecc32 | ||
| 
						 | 
					7e927da2a5 | ||
| 
						 | 
					7aa6d2fcf9 | ||
| 
						 | 
					27b1f137ff | ||
| 
						 | 
					f63c927e8e | ||
| 
						 | 
					d572544a2c | ||
| 
						 | 
					9100840258 | ||
| 
						 | 
					0f32c83c91 | ||
| 
						 | 
					80b570142d | ||
| 
						 | 
					a99b6fcb7c | ||
| 
						 | 
					02d1a6b3aa | ||
| 
						 | 
					08e8d58785 | ||
| 
						 | 
					c90c41f09d | ||
| 
						 | 
					c47b636a2c | ||
| 
						 | 
					7200b39ecd | ||
| 
						 | 
					84c95826de | ||
| 
						 | 
					63819e6f00 | ||
| 
						 | 
					8206dba75c | ||
| 
						 | 
					528ef87850 | ||
| 
						 | 
					9004c53107 | ||
| 
						 | 
					f47f99f295 | ||
| 
						 | 
					00f473b3cc | ||
| 
						 | 
					356de7146e | ||
| 
						 | 
					9eab925395 | ||
| 
						 | 
					22d89c501e | ||
| 
						 | 
					c06916db9f | ||
| 
						 | 
					ef7545a3e6 | ||
| 
						 | 
					fecb4ff331 | ||
| 
						 | 
					2a4adf19c8 | ||
| 
						 | 
					44c854ddb9 | ||
| 
						 | 
					47091035f1 | ||
| 
						 | 
					f3d51d7740 | ||
| 
						 | 
					70d3b4b653 | ||
| 
						 | 
					2fb94e4861 | ||
| 
						 | 
					1b84893905 | ||
| 
						 | 
					68b5330040 | ||
| 
						 | 
					da7ae62abd | ||
| 
						 | 
					f53337b89c | ||
| 
						 | 
					f70a5895e3 | ||
| 
						 | 
					d41bbd0db5 | ||
| 
						 | 
					49956294fc | ||
| 
						 | 
					48373e55d1 | ||
| 
						 | 
					42369021ed | ||
| 
						 | 
					b00fe7ce18 | ||
| 
						 | 
					872e3fd502 | ||
| 
						 | 
					c11ada6c99 | ||
| 
						 | 
					8f0968850b | ||
| 
						 | 
					0b96f60a56 | ||
| 
						 | 
					ab06ff6bee | ||
| 
						 | 
					bba8456e65 | ||
| 
						 | 
					b493a05720 | ||
| 
						 | 
					c2a8133d1c | ||
| 
						 | 
					e935440ad7 | ||
| 
						 | 
					8eaf563c41 | ||
| 
						 | 
					80d7e6b039 | ||
| 
						 | 
					9c44e33230 | ||
| 
						 | 
					b86f3197b7 | ||
| 
						 | 
					0875c00584 | ||
| 
						 | 
					dd3a770e07 | ||
| 
						 | 
					64763ce09b | ||
| 
						 | 
					2fffc29bd1 | ||
| 
						 | 
					d2650c3a4a | ||
| 
						 | 
					b5bd966ea4 | ||
| 
						 | 
					e71f7786e3 | ||
| 
						 | 
					e3b95e6b24 | ||
| 
						 | 
					658eeec7cd | ||
| 
						 | 
					e1c3d65f08 | ||
| 
						 | 
					2e4abe2ce2 | ||
| 
						 | 
					ea294bb50e | ||
| 
						 | 
					b58ea0b941 | ||
| 
						 | 
					16067fe5fd | ||
| 
						 | 
					f2e9070f26 | ||
| 
						 | 
					fe8629e1a5 | ||
| 
						 | 
					2a12eff4b2 | ||
| 
						 | 
					b680fef061 | ||
| 
						 | 
					7f7414e054 | ||
| 
						 | 
					8b9db484ed | ||
| 
						 | 
					f59f2fcbff | ||
| 
						 | 
					419a530194 | ||
| 
						 | 
					69a8901eb1 | ||
| 
						 | 
					2bcd08e691 | ||
| 
						 | 
					167d692925 | ||
| 
						 | 
					025ee1dbde | ||
| 
						 | 
					dce7b92d0b | ||
| 
						 | 
					db886c2a2b | ||
| 
						 | 
					4d43129446 | ||
| 
						 | 
					92107f8150 | ||
| 
						 | 
					e82d6a2019 | ||
| 
						 | 
					4e5755cd85 | ||
| 
						 | 
					dda8dcd2c0 | ||
| 
						 | 
					16646b0018 | ||
| 
						 | 
					320881c25c | ||
| 
						 | 
					1d23fb382e | ||
| 
						 | 
					c4f1942a76 | ||
| 
						 | 
					38c42c6eea | ||
| 
						 | 
					51eb247d0f | ||
| 
						 | 
					8d22673a62 | ||
| 
						 | 
					3622d3743e | ||
| 
						 | 
					fbbf28e7c2 | ||
| 
						 | 
					f5dac77c06 | ||
| 
						 | 
					067d72a082 | ||
| 
						 | 
					ac0f3f506a | ||
| 
						 | 
					f819147028 | ||
| 
						 | 
					a530963f05 | ||
| 
						 | 
					bc5a53f5e9 | ||
| 
						 | 
					83382fb9d5 | ||
| 
						 | 
					0674370017 | ||
| 
						 | 
					2f91cb2c5e | ||
| 
						 | 
					acb25c2327 | ||
| 
						 | 
					2d842a90f8 | ||
| 
						 | 
					80705bfc50 | ||
| 
						 | 
					2a8692311d | ||
| 
						 | 
					7d0ed89d57 | ||
| 
						 | 
					0912fae6ce | ||
| 
						 | 
					0bb2154ee9 | ||
| 
						 | 
					c9355e20c3 | ||
| 
						 | 
					6545372c24 | ||
| 
						 | 
					17f8412983 | ||
| 
						 | 
					d48df9a91b | ||
| 
						 | 
					65448fd0d3 | ||
| 
						 | 
					a677c87b7b | ||
| 
						 | 
					f8a123b4a2 | ||
| 
						 | 
					c64beae686 | ||
| 
						 | 
					99ef8323e4 | ||
| 
						 | 
					2668c58969 | ||
| 
						 | 
					5ae3168a77 | ||
| 
						 | 
					559579659c | ||
| 
						 | 
					2dd74160cc | ||
| 
						 | 
					2adf63272c | ||
| 
						 | 
					fb5a0fb8f1 | ||
| 
						 | 
					c222de16ce | ||
| 
						 | 
					19091ac236 | ||
| 
						 | 
					2fcf251d3d | ||
| 
						 | 
					dab5848cd9 | ||
| 
						 | 
					a02f0f3d69 | ||
| 
						 | 
					e69d49364e | ||
| 
						 | 
					38921f0abf | ||
| 
						 | 
					d76ce84c92 | ||
| 
						 | 
					c3c7a0d26e | ||
| 
						 | 
					d06bc800f2 | ||
| 
						 | 
					a01dc637bd | ||
| 
						 | 
					3bbbe757ea | ||
| 
						 | 
					76474e519f | ||
| 
						 | 
					420f572d49 | ||
| 
						 | 
					6d65d44b95 | ||
| 
						 | 
					91e1ff77a0 | ||
| 
						 | 
					c8e60ec8fa | ||
| 
						 | 
					e840570207 | ||
| 
						 | 
					077527f19e | ||
| 
						 | 
					00daa2e6c6 | ||
| 
						 | 
					000f221d60 | ||
| 
						 | 
					579a605494 | ||
| 
						 | 
					fa29ebd7ed | ||
| 
						 | 
					3360999046 | ||
| 
						 | 
					0b965e59cb | ||
| 
						 | 
					1684846f54 | ||
| 
						 | 
					dde6d9520c | ||
| 
						 | 
					f9a772b743 | ||
| 
						 | 
					0d6f7dbb50 | ||
| 
						 | 
					994a1ea900 | ||
| 
						 | 
					e5d1fd38d1 | ||
| 
						 | 
					a330ed26be | ||
| 
						 | 
					ca0a86c89d | ||
| 
						 | 
					1cf7bbce48 | ||
| 
						 | 
					4cdde22432 | ||
| 
						 | 
					a28cee6efe | ||
| 
						 | 
					1977bafba4 | ||
| 
						 | 
					3c96907f2b | ||
| 
						 | 
					2d96a30dc7 | ||
| 
						 | 
					c09d1df7d3 | ||
| 
						 | 
					c20dd45477 | ||
| 
						 | 
					abb320463d | ||
| 
						 | 
					ada3f8b5d3 | ||
| 
						 | 
					6172561597 | ||
| 
						 | 
					368b64d6dd | ||
| 
						 | 
					4ed0ca2b3e | ||
| 
						 | 
					a92f98c630 | ||
| 
						 | 
					4385b556b4 | ||
| 
						 | 
					5e7c9519b8 | ||
| 
						 | 
					ef02492908 | ||
| 
						 | 
					86d5f9ba4f | ||
| 
						 | 
					febcec6254 | ||
| 
						 | 
					f07cb1ce8e | ||
| 
						 | 
					b3c17a4805 | ||
| 
						 | 
					7b83fe34c0 | ||
| 
						 | 
					e0b1c57ae0 | ||
| 
						 | 
					6806b06d21 | ||
| 
						 | 
					0af0e9d747 | ||
| 
						 | 
					2191b3ba44 | ||
| 
						 | 
					73020a945b | ||
| 
						 | 
					9c2d0cd11c | ||
| 
						 | 
					0ef9b9c7bf | ||
| 
						 | 
					c14c6e996d | ||
| 
						 | 
					51381cd4ed | ||
| 
						 | 
					8c9ab050e5 | ||
| 
						 | 
					b6996c7849 | ||
| 
						 | 
					2c23b0716e | ||
| 
						 | 
					f548a0e4d5 | ||
| 
						 | 
					a404f63f92 | ||
| 
						 | 
					b54f50d277 | ||
| 
						 | 
					10ba241909 | ||
| 
						 | 
					1f238b1c4a | ||
| 
						 | 
					ef85bf8c2b | ||
| 
						 | 
					cbfccdb729 | ||
| 
						 | 
					94111aa401 | ||
| 
						 | 
					eec48070a1 | ||
| 
						 | 
					eebe668174 | ||
| 
						 | 
					8a15a4a7b4 | ||
| 
						 | 
					19057003f1 | ||
| 
						 | 
					031648d4ce | ||
| 
						 | 
					02bee340a2 | ||
| 
						 | 
					f6f2f68a05 | ||
| 
						 | 
					982d68a0c0 | ||
| 
						 | 
					7585a86a76 | ||
| 
						 | 
					73190f1b46 | ||
| 
						 | 
					6673ac592a | ||
| 
						 | 
					59aa655b53 | ||
| 
						 | 
					c4c99b4961 | ||
| 
						 | 
					ccbbcddd5f | ||
| 
						 | 
					65d82478d8 | ||
| 
						 | 
					02a6518a02 | ||
| 
						 | 
					a79053511b | ||
| 
						 | 
					eb56eb2279 | ||
| 
						 | 
					d40f6d4a02 | ||
| 
						 | 
					943ae0951a | ||
| 
						 | 
					999eeaba14 | ||
| 
						 | 
					dfa81d9efb | ||
| 
						 | 
					1dba06e7b0 | ||
| 
						 | 
					daac87be95 | ||
| 
						 | 
					e97359435e | ||
| 
						 | 
					afce9bcca1 | ||
| 
						 | 
					9c7baca820 | ||
| 
						 | 
					618265e645 | ||
| 
						 | 
					9728978b75 | ||
| 
						 | 
					938c0bbae1 | ||
| 
						 | 
					a0cd818831 | ||
| 
						 | 
					31c4ab5401 | ||
| 
						 | 
					1f65529824 | ||
| 
						 | 
					5b3a6eedd1 | ||
| 
						 | 
					6938440d68 | ||
| 
						 | 
					57ec6c9bad | ||
| 
						 | 
					7a09bc4068 | ||
| 
						 | 
					deb15645a8 | ||
| 
						 | 
					f0b358e8b9 | ||
| 
						 | 
					dce2b5a8fc | ||
| 
						 | 
					59d100d959 | ||
| 
						 | 
					d497b5362b | ||
| 
						 | 
					369b0abdc2 | ||
| 
						 | 
					72240ab31a | ||
| 
						 | 
					dc4e1ddc9f | ||
| 
						 | 
					ff656346fa | ||
| 
						 | 
					ca91057d50 | ||
| 
						 | 
					8c1e7de6cb | ||
| 
						 | 
					207886cd3a | ||
| 
						 | 
					336d1ee733 | ||
| 
						 | 
					bed2b769f5 | ||
| 
						 | 
					26029d9c4c | ||
| 
						 | 
					c64c888929 | ||
| 
						 | 
					8d9db41880 | ||
| 
						 | 
					4fae54a8e0 | ||
| 
						 | 
					9f35928719 | ||
| 
						 | 
					c5af032df5 | ||
| 
						 | 
					8a898a6fcc | ||
| 
						 | 
					9f827ded1c | ||
| 
						 | 
					5daa9411a0 | ||
| 
						 | 
					094d4019b8 | ||
| 
						 | 
					1507f3abba | ||
| 
						 | 
					30e8defe52 | ||
| 
						 | 
					9f4dd3e3e3 | ||
| 
						 | 
					8c00014d7e | ||
| 
						 | 
					1cf12a6350 | ||
| 
						 | 
					dc9461e23f | ||
| 
						 | 
					72d57050df | ||
| 
						 | 
					49d1f665a4 | ||
| 
						 | 
					2c25edc4c1 | ||
| 
						 | 
					d2f098b33d | ||
| 
						 | 
					6f4f7f35f3 | ||
| 
						 | 
					0a4fe6c8db | ||
| 
						 | 
					7bba401d5d | ||
| 
						 | 
					c73cff12f1 | ||
| 
						 | 
					b32d93840e | ||
| 
						 | 
					cb457849fd | ||
| 
						 | 
					cb3c30059a | ||
| 
						 | 
					20dc93e49e | ||
| 
						 | 
					b620447dcc | ||
| 
						 | 
					4ffd2ad1d3 | ||
| 
						 | 
					acc9938ba5 | ||
| 
						 | 
					f6d13ac8cf | ||
| 
						 | 
					24cb653c6b | ||
| 
						 | 
					6dfd3cf68e | ||
| 
						 | 
					073775cbbb | ||
| 
						 | 
					e995d5044e | ||
| 
						 | 
					5b0a79a27a | ||
| 
						 | 
					6747de655e | ||
| 
						 | 
					91bad2b09e | ||
| 
						 | 
					1244d5b713 | ||
| 
						 | 
					c0ed5cd47b | ||
| 
						 | 
					c8281fd38e | ||
| 
						 | 
					fe8e6bff9b | ||
| 
						 | 
					9caf25d144 | ||
| 
						 | 
					348620c7ac | ||
| 
						 | 
					30fc2ab92b | ||
| 
						 | 
					5b5464d525 | ||
| 
						 | 
					cd15a0528f | ||
| 
						 | 
					7b52778eff | ||
| 
						 | 
					162de2f2b5 | ||
| 
						 | 
					f6e4af6fd7 | ||
| 
						 | 
					32b76dcdac | ||
| 
						 | 
					bcfd252052 | ||
| 
						 | 
					32c452779e | ||
| 
						 | 
					118b90c59e | ||
| 
						 | 
					f6a61b140e | ||
| 
						 | 
					75ece4b5cf | ||
| 
						 | 
					724cca4178 | ||
| 
						 | 
					5b3fdb0181 | ||
| 
						 | 
					fcc3d0265d | ||
| 
						 | 
					5356ea7cde | ||
| 
						 | 
					06226df1a9 | ||
| 
						 | 
					bf638ef026 | ||
| 
						 | 
					07973d5db8 | ||
| 
						 | 
					3b3f71121b | ||
| 
						 | 
					47333a34d5 | ||
| 
						 | 
					d92138f703 | ||
| 
						 | 
					b2bf335327 | ||
| 
						 | 
					33bec62a20 | ||
| 
						 | 
					2e630b1847 | ||
| 
						 | 
					002d3fe863 | ||
| 
						 | 
					fb24311e7c | ||
| 
						 | 
					90278430d9 | ||
| 
						 | 
					bcd9d12a8d | ||
| 
						 | 
					79363339b7 | ||
| 
						 | 
					fbe2c6b33e | ||
| 
						 | 
					fc11f47229 | ||
| 
						 | 
					2b23d89d14 | ||
| 
						 | 
					9cfa3cff54 | ||
| 
						 | 
					6507653e72 | ||
| 
						 | 
					7fe747d1eb | ||
| 
						 | 
					32567c9f3b | ||
| 
						 | 
					4f3d52fedc | ||
| 
						 | 
					8321bab39c | ||
| 
						 | 
					989238802a | ||
| 
						 | 
					9051fc538f | ||
| 
						 | 
					03fd7f27db | ||
| 
						 | 
					45d6a15ae9 | ||
| 
						 | 
					6c6ca18664 | ||
| 
						 | 
					97fe2b40c1 | ||
| 
						 | 
					f689ab5017 | ||
| 
						 | 
					edb7cac271 | ||
| 
						 | 
					81d87a2a28 | ||
| 
						 | 
					7366f0b304 | ||
| 
						 | 
					1d8fa09c80 | ||
| 
						 | 
					e085e6c84c | ||
| 
						 | 
					008fa4584d | ||
| 
						 | 
					c8c49133d9 | ||
| 
						 | 
					961f1dea06 | ||
| 
						 | 
					1700426256 | ||
| 
						 | 
					aa7f5baad2 | ||
| 
						 | 
					45acdd6f6d | ||
| 
						 | 
					8b354e776b | ||
| 
						 | 
					868f5e44ca | ||
| 
						 | 
					4e5fdd11ea | ||
| 
						 | 
					d552a3391a | ||
| 
						 | 
					d023b4e2dd | ||
| 
						 | 
					fa79cc9c23 | ||
| 
						 | 
					06daa75fb9 | ||
| 
						 | 
					ffa304c838 | ||
| 
						 | 
					df21765a3e | ||
| 
						 | 
					5a6ae115f8 | ||
| 
						 | 
					5e5df40b9b | ||
| 
						 | 
					6d4943e81f | ||
| 
						 | 
					57cffe901f | ||
| 
						 | 
					a758f61793 | ||
| 
						 | 
					b3b35df2a2 | ||
| 
						 | 
					5ad50246fc | ||
| 
						 | 
					d89b895cfd | ||
| 
						 | 
					d793c292cb | ||
| 
						 | 
					57749b1b9f | ||
| 
						 | 
					1cdb7854a5 | ||
| 
						 | 
					704d33b347 | ||
| 
						 | 
					b2a7515ee8 | ||
| 
						 | 
					f4f2b52995 | ||
| 
						 | 
					c7d5edbf5e | ||
| 
						 | 
					d8f07f1674 | ||
| 
						 | 
					78bfb45b07 | ||
| 
						 | 
					6ad4d60555 | ||
| 
						 | 
					2fad8aa209 | ||
| 
						 | 
					74397d45b2 | ||
| 
						 | 
					c8ca769d3b | ||
| 
						 | 
					25d42c17e3 | ||
| 
						 | 
					a377811f15 | ||
| 
						 | 
					ef1b6b2cf2 | ||
| 
						 | 
					1699389a46 | ||
| 
						 | 
					ad8ee3d7d1 | ||
| 
						 | 
					39f0a4d8e9 | ||
| 
						 | 
					15a9821cc2 | ||
| 
						 | 
					53e97e7433 | ||
| 
						 | 
					bc0ecd202a | ||
| 
						 | 
					b307daa23f | ||
| 
						 | 
					4c95b1bfda | ||
| 
						 | 
					9359fc5ff2 | ||
| 
						 | 
					a238d7d1eb | ||
| 
						 | 
					0e92313331 | ||
| 
						 | 
					3e719c99f5 | ||
| 
						 | 
					2a4d0dcb89 | ||
| 
						 | 
					2e155fde39 | ||
| 
						 | 
					9a8c8cb22e | ||
| 
						 | 
					04aa7441ab | ||
| 
						 | 
					28dc54f6d9 | ||
| 
						 | 
					a1e1165200 | ||
| 
						 | 
					ddba003d5e | ||
| 
						 | 
					e59d9a34c9 | ||
| 
						 | 
					9e198c4bd0 | ||
| 
						 | 
					7eceffbfef | ||
| 
						 | 
					8043f01b13 | ||
| 
						 | 
					41c0f68630 | ||
| 
						 | 
					2c627637c5 | ||
| 
						 | 
					58f4b3511e | ||
| 
						 | 
					93fac08ec3 | ||
| 
						 | 
					23c3bee970 | ||
| 
						 | 
					73ff97ad76 | ||
| 
						 | 
					0d8ffc2007 | ||
| 
						 | 
					a32f7fb832 | ||
| 
						 | 
					496cf69e40 | ||
| 
						 | 
					eb17330837 | ||
| 
						 | 
					2708603bb4 | ||
| 
						 | 
					e4f1cda7de | ||
| 
						 | 
					4359b88bbe | ||
| 
						 | 
					c079fde3f7 | ||
| 
						 | 
					6e94156199 | ||
| 
						 | 
					1f67a3a985 | ||
| 
						 | 
					4cba294d79 | ||
| 
						 | 
					e642fd7a1c | ||
| 
						 | 
					5448e6739c | ||
| 
						 | 
					f0389d8d37 | ||
| 
						 | 
					a5313cf360 | ||
| 
						 | 
					b26c45b033 | ||
| 
						 | 
					986093affa | ||
| 
						 | 
					f88e0acb0e | ||
| 
						 | 
					aed461b431 | ||
| 
						 | 
					8bbd0e826c | ||
| 
						 | 
					40c45f86d4 | ||
| 
						 | 
					a0b7277724 | ||
| 
						 | 
					54bc369ad7 | ||
| 
						 | 
					2d3855fc6e | ||
| 
						 | 
					1cd47f5f6e | ||
| 
						 | 
					675564835c | ||
| 
						 | 
					2456cd58c4 | ||
| 
						 | 
					43a107026d | ||
| 
						 | 
					ef0498a00b | ||
| 
						 | 
					f1784f2fd2 | ||
| 
						 | 
					730f5752ff | ||
| 
						 | 
					a88c73b43a | ||
| 
						 | 
					a6d204e241 | ||
| 
						 | 
					941baf6641 | ||
| 
						 | 
					b41a614686 | ||
| 
						 | 
					aac751832a | ||
| 
						 | 
					52a08e90d1 | ||
| 
						 | 
					6b5f0458fe | ||
| 
						 | 
					b52a2738d4 | ||
| 
						 | 
					10f99d7b77 | ||
| 
						 | 
					593222afe1 | ||
| 
						 | 
					7b1856e5a1 | ||
| 
						 | 
					3d5d81bf39 | ||
| 
						 | 
					50f06b46f4 | ||
| 
						 | 
					be6076c0ad | ||
| 
						 | 
					6125e07d79 | ||
| 
						 | 
					d5b8c46499 | ||
| 
						 | 
					7805e23588 | ||
| 
						 | 
					9117b9d17a | ||
| 
						 | 
					e274c8fb72 | ||
| 
						 | 
					e8dbd66e2b | ||
| 
						 | 
					8b9b23603f | ||
| 
						 | 
					aefb9dc5e5 | ||
| 
						 | 
					a8c1b19a31 | ||
| 
						 | 
					29c8d2a54a | ||
| 
						 | 
					87827be0c2 | ||
| 
						 | 
					e4572e5210 | ||
| 
						 | 
					3e8e12a6b6 | ||
| 
						 | 
					5ddbb8f41a | ||
| 
						 | 
					3c44e92bcb | ||
| 
						 | 
					5e8d95f590 | ||
| 
						 | 
					2156704924 | ||
| 
						 | 
					4e49aa0ca3 | ||
| 
						 | 
					d5d1c53735 | ||
| 
						 | 
					1aac5c0ee8 | ||
| 
						 | 
					4434328b0a | ||
| 
						 | 
					9b2cfb890c | ||
| 
						 | 
					b2f364ec62 | ||
| 
						 | 
					b7aeb4c9b5 | ||
| 
						 | 
					370f48da2a | ||
| 
						 | 
					32def77ace | ||
| 
						 | 
					531c81ece8 | ||
| 
						 | 
					73582b8117 | ||
| 
						 | 
					5c33091cfa | ||
| 
						 | 
					56327ebe6a | ||
| 
						 | 
					e0031b1c78 | ||
| 
						 | 
					b2ac5cb2d0 | ||
| 
						 | 
					6757ef89b3 | ||
| 
						 | 
					bf6eea6536 | ||
| 
						 | 
					ec4346f6f9 | ||
| 
						 | 
					e42ff486a8 | ||
| 
						 | 
					bc9058d041 | ||
| 
						 | 
					4a276f3039 | ||
| 
						 | 
					acf47d8f24 | ||
| 
						 | 
					f62d1ea3d5 | ||
| 
						 | 
					f923bba73c | ||
| 
						 | 
					e3738c49b8 | ||
| 
						 | 
					41746da8c2 | ||
| 
						 | 
					23b97c6bb5 | ||
| 
						 | 
					4a7f7171f5 | ||
| 
						 | 
					961092281f | ||
| 
						 | 
					036b3f331b | ||
| 
						 | 
					9ac5c355a2 | ||
| 
						 | 
					3d0b604c14 | ||
| 
						 | 
					257b2bfb6c | ||
| 
						 | 
					90528846e8 | ||
| 
						 | 
					32509c9731 | ||
| 
						 | 
					d3f940833d | ||
| 
						 | 
					b335e351d4 | ||
| 
						 | 
					67bcde9ba8 | ||
| 
						 | 
					169bfde4d4 | ||
| 
						 | 
					0a7f291268 | ||
| 
						 | 
					0c2c2e71a6 | ||
| 
						 | 
					d1d746afb4 | ||
| 
						 | 
					db6e41f0ed | ||
| 
						 | 
					5b2b60ae98 | ||
| 
						 | 
					c90a1ae0c9 | ||
| 
						 | 
					c679fb298e | ||
| 
						 | 
					17c7cad545 | ||
| 
						 | 
					164c263b5c | ||
| 
						 | 
					a9bb9d0eb4 | ||
| 
						 | 
					cc6688d796 | ||
| 
						 | 
					9b1f24df3d | ||
| 
						 | 
					595e804ae3 | ||
| 
						 | 
					b381e9b952 | ||
| 
						 | 
					28418076b2 | ||
| 
						 | 
					abdfdb029e | ||
| 
						 | 
					8465b81d50 | ||
| 
						 | 
					ed65b6e512 | ||
| 
						 | 
					d793544518 | ||
| 
						 | 
					53480a673b | ||
| 
						 | 
					ad187f8905 | ||
| 
						 | 
					2280f82fc6 | ||
| 
						 | 
					e6714faffb | ||
| 
						 | 
					af8f2bb174 | ||
| 
						 | 
					d7501c16bf | ||
| 
						 | 
					804196a418 | ||
| 
						 | 
					50d70c01d6 | ||
| 
						 | 
					9fc601cfbb | ||
| 
						 | 
					fed5333248 | ||
| 
						 | 
					3d1dab4404 | ||
| 
						 | 
					29c2fd46d2 | ||
| 
						 | 
					a3d5cdb07c | ||
| 
						 | 
					d99c0f6b4a | ||
| 
						 | 
					43f21e62aa | ||
| 
						 | 
					50425bc137 | ||
| 
						 | 
					0c690586e0 | ||
| 
						 | 
					bc8c5fe58d | ||
| 
						 | 
					0cc0db32e3 | ||
| 
						 | 
					d68f7641a3 | ||
| 
						 | 
					4fcbaa3dd9 | ||
| 
						 | 
					5e56584285 | ||
| 
						 | 
					ca26ccb083 | ||
| 
						 | 
					3e8b713b06 | ||
| 
						 | 
					13eca7d782 | ||
| 
						 | 
					af3d4e1b02 | ||
| 
						 | 
					80afb40ae3 | ||
| 
						 | 
					3333428b44 | ||
| 
						 | 
					a131de9bb2 | ||
| 
						 | 
					0ddd002f60 | ||
| 
						 | 
					e7209103e6 | ||
| 
						 | 
					53f062d050 | ||
| 
						 | 
					b5b65403a4 | ||
| 
						 | 
					1a3914fe0c | ||
| 
						 | 
					b7e3cb31a5 | ||
| 
						 | 
					9769137a43 | ||
| 
						 | 
					c0688f1aef | ||
| 
						 | 
					6c29853bf2 | ||
| 
						 | 
					2e9802b7a7 | ||
| 
						 | 
					7483896e15 | ||
| 
						 | 
					4b4f249e0d | ||
| 
						 | 
					196dcf93bc | ||
| 
						 | 
					2c11ec308b | ||
| 
						 | 
					e5eb96c83a | ||
| 
						 | 
					54ed003ace | ||
| 
						 | 
					f18e10253d | ||
| 
						 | 
					c9add317a9 | ||
| 
						 | 
					6d1741030b | ||
| 
						 | 
					b8dc932c05 | ||
| 
						 | 
					17f8d8db61 | ||
| 
						 | 
					38437fa135 | ||
| 
						 | 
					82f35daaaf | ||
| 
						 | 
					b529bba4bf | ||
| 
						 | 
					dde33ea9c3 | ||
| 
						 | 
					cb0d89705b | ||
| 
						 | 
					f49353b42f | ||
| 
						 | 
					573c61dcde | ||
| 
						 | 
					51f38e6c2d | ||
| 
						 | 
					2de213732a | ||
| 
						 | 
					3798c36686 | ||
| 
						 | 
					209abea1db | ||
| 
						 | 
					250705e7b5 | ||
| 
						 | 
					5a96822f2c | ||
| 
						 | 
					23b34259e0 | ||
| 
						 | 
					11b6cb8aae | ||
| 
						 | 
					a4bade7aac | ||
| 
						 | 
					e322b5d167 | ||
| 
						 | 
					01af4edcfe | ||
| 
						 | 
					ff0945cbdc | ||
| 
						 | 
					d5ec7d66a8 | ||
| 
						 | 
					dc0aebabe6 | ||
| 
						 | 
					52828ca214 | ||
| 
						 | 
					757e9886a0 | ||
| 
						 | 
					f45e8c7bdd | ||
| 
						 | 
					ea904b4074 | ||
| 
						 | 
					ec6158d029 | ||
| 
						 | 
					4386445c18 | ||
| 
						 | 
					a585aa6750 | ||
| 
						 | 
					2475a52061 | ||
| 
						 | 
					001dfac061 | ||
| 
						 | 
					1b37c55e26 | ||
| 
						 | 
					3442781798 | ||
| 
						 | 
					c9d3f123a6 | ||
| 
						 | 
					d069a4d15d | ||
| 
						 | 
					f1ad8fb627 | ||
| 
						 | 
					d7406b1528 | ||
| 
						 | 
					02ce897e80 | ||
| 
						 | 
					0bd9d3a60e | ||
| 
						 | 
					b4c81fb6db | ||
| 
						 | 
					0f566bda2b | ||
| 
						 | 
					f97a8149cd | ||
| 
						 | 
					f4b6a3e9c0 | ||
| 
						 | 
					7dfae89768 | ||
| 
						 | 
					d41ca3f0e2 | ||
| 
						 | 
					65fc4c55be | ||
| 
						 | 
					5135d6b985 | ||
| 
						 | 
					2202edeff0 | ||
| 
						 | 
					c8f759ec74 | ||
| 
						 | 
					5fda10c6f1 | ||
| 
						 | 
					11ba084e1b | ||
| 
						 | 
					cddd00166c | ||
| 
						 | 
					0190aa7353 | ||
| 
						 | 
					1546de87f0 | ||
| 
						 | 
					affffaed3d | ||
| 
						 | 
					0c644f1462 | ||
| 
						 | 
					a2da5c7daa | ||
| 
						 | 
					c155d83f5b | ||
| 
						 | 
					5a03e3ac3f | ||
| 
						 | 
					08b2097967 | ||
| 
						 | 
					15401859b5 | ||
| 
						 | 
					6f24165170 | ||
| 
						 | 
					a8afd9382c | ||
| 
						 | 
					caddf00d78 | ||
| 
						 | 
					e105098b3f | ||
| 
						 | 
					9852e7e4d7 | ||
| 
						 | 
					b855560192 | ||
| 
						 | 
					f2f50efea3 | ||
| 
						 | 
					2b3cd246e5 | ||
| 
						 | 
					7171ade2c2 | ||
| 
						 | 
					76ec9151d1 | ||
| 
						 | 
					6c24dd9005 | ||
| 
						 | 
					e323afb0ce | ||
| 
						 | 
					1fd43fd86e | ||
| 
						 | 
					3e70c81ed9 | ||
| 
						 | 
					6e07229564 | ||
| 
						 | 
					859d5eb2d7 | ||
| 
						 | 
					29b0c4a01c | ||
| 
						 | 
					b824f0f458 | ||
| 
						 | 
					43ea53a04a | ||
| 
						 | 
					fa07f00aaf | ||
| 
						 | 
					dbb834ffeb | ||
| 
						 | 
					8549a8a5dc | ||
| 
						 | 
					887c250852 | ||
| 
						 | 
					710c1c34d1 | ||
| 
						 | 
					e16818108f | ||
| 
						 | 
					0cb76e79df | ||
| 
						 | 
					6cb419673e | ||
| 
						 | 
					72d668c332 | ||
| 
						 | 
					5ce4799a38 | ||
| 
						 | 
					6178da0142 | ||
| 
						 | 
					27713e3fc2 | ||
| 
						 | 
					3492c47b18 | ||
| 
						 | 
					43dc001b62 | ||
| 
						 | 
					8280b43a62 | ||
| 
						 | 
					85d9b02d16 | ||
| 
						 | 
					bfd502f027 | ||
| 
						 | 
					f1ed5fa827 | ||
| 
						 | 
					5bb9e1b4d4 | ||
| 
						 | 
					7de819237d | ||
| 
						 | 
					6cfab29b71 | ||
| 
						 | 
					55708796af | ||
| 
						 | 
					7074f1df07 | ||
| 
						 | 
					67d8ab07e6 | ||
| 
						 | 
					4e63da0669 | ||
| 
						 | 
					15b0a5651c | ||
| 
						 | 
					4e66723517 | ||
| 
						 | 
					3e53c86001 | ||
| 
						 | 
					524e5b844b | ||
| 
						 | 
					e1f09dfd84 | ||
| 
						 | 
					f16411ccfd | ||
| 
						 | 
					2bbcd45b05 | ||
| 
						 | 
					fdc6c6ef08 | ||
| 
						 | 
					6e87cc8da6 | ||
| 
						 | 
					2d0b6c72b8 | ||
| 
						 | 
					3e84046f90 | ||
| 
						 | 
					cc1cb996f1 | ||
| 
						 | 
					32fbeacdfb | ||
| 
						 | 
					431aad3c15 | ||
| 
						 | 
					0454f2c490 | ||
| 
						 | 
					5f911774bf | ||
| 
						 | 
					66b7e42790 | ||
| 
						 | 
					6a419388fc | ||
| 
						 | 
					abda7c1147 | ||
| 
						 | 
					88b48dc680 | ||
| 
						 | 
					661d35dfb2 | ||
| 
						 | 
					f99c9daa39 | ||
| 
						 | 
					019b3f3e5a | ||
| 
						 | 
					d6584eba8c | ||
| 
						 | 
					a379c433a3 | ||
| 
						 | 
					006c7c6bb1 | ||
| 
						 | 
					bd4a902a15 | ||
| 
						 | 
					17ae5e9f13 | ||
| 
						 | 
					baa5f52422 | ||
| 
						 | 
					b3620451b2 | ||
| 
						 | 
					d2f17d9615 | ||
| 
						 | 
					561cbe5678 | ||
| 
						 | 
					756d2074b8 | ||
| 
						 | 
					c65db618bb | ||
| 
						 | 
					8355647403 | ||
| 
						 | 
					b839d73411 | ||
| 
						 | 
					4563c1e043 | ||
| 
						 | 
					11f35a036d | ||
| 
						 | 
					d8646dab14 | ||
| 
						 | 
					47b3cd98f2 | ||
| 
						 | 
					27c7e53882 | ||
| 
						 | 
					b2b28803fb | ||
| 
						 | 
					8e92b1b9ce | ||
| 
						 | 
					0f41ccf370 | ||
| 
						 | 
					c44544a1d7 | ||
| 
						 | 
					4e50f02638 | ||
| 
						 | 
					174ea15647 | ||
| 
						 | 
					18f8258a87 | ||
| 
						 | 
					376bbb5887 | ||
| 
						 | 
					2c8275409e | ||
| 
						 | 
					892582b541 | ||
| 
						 | 
					57b53c1b0a | ||
| 
						 | 
					004c3ca521 | ||
| 
						 | 
					f0f00f9272 | ||
| 
						 | 
					a243c68736 | ||
| 
						 | 
					467d9f2a34 | ||
| 
						 | 
					226a94963a | ||
| 
						 | 
					d7f0d147b1 | ||
| 
						 | 
					26902b9aad | ||
| 
						 | 
					3c69d6bec4 | ||
| 
						 | 
					4f44677a41 | ||
| 
						 | 
					88d9f669c5 | ||
| 
						 | 
					22e1421672 | ||
| 
						 | 
					5409414eff | ||
| 
						 | 
					7134507de0 | ||
| 
						 | 
					fe41d9853c | ||
| 
						 | 
					d07692cd96 | ||
| 
						 | 
					82ae57136b | ||
| 
						 | 
					30baeaaeab | ||
| 
						 | 
					87a0f4b92e | ||
| 
						 | 
					1b08bcbfe3 | ||
| 
						 | 
					346b1001eb | ||
| 
						 | 
					b61a84c8e6 | ||
| 
						 | 
					a543ea44bc | ||
| 
						 | 
					b0dd3d1b94 | ||
| 
						 | 
					461be68b75 | ||
| 
						 | 
					21fb688d26 | ||
| 
						 | 
					d8faad27b7 | ||
| 
						 | 
					dab7075946 | ||
| 
						 | 
					dfc8e96daa | ||
| 
						 | 
					71d3eaf358 | ||
| 
						 | 
					ef6b25be63 | ||
| 
						 | 
					b452f43322 | ||
| 
						 | 
					52891f832f | ||
| 
						 | 
					9990cb75c1 | ||
| 
						 | 
					a5cc69c7ae | ||
| 
						 | 
					0b4b8ba64e | ||
| 
						 | 
					268e78c305 | ||
| 
						 | 
					c900a78c99 | ||
| 
						 | 
					46ffb2dc97 | ||
| 
						 | 
					10acacb3bf | ||
| 
						 | 
					aab790a656 | ||
| 
						 | 
					1319aad994 | ||
| 
						 | 
					3c0ce01cea | ||
| 
						 | 
					9fcbefebdb | ||
| 
						 | 
					017d2a887f | ||
| 
						 | 
					0416482605 | ||
| 
						 | 
					0f17424918 | ||
| 
						 | 
					55ed10db21 | ||
| 
						 | 
					3877b6bfe9 | ||
| 
						 | 
					a0f32454b6 | ||
| 
						 | 
					6fda4d7e5d | ||
| 
						 | 
					36a252ea46 | ||
| 
						 | 
					a31a195246 | ||
| 
						 | 
					5f590d2218 | ||
| 
						 | 
					791b7bc715 | ||
| 
						 | 
					19ae090787 | ||
| 
						 | 
					db3076621b | ||
| 
						 | 
					9ae5743515 | ||
| 
						 | 
					c184b140df | ||
| 
						 | 
					9d80aa7e3f | ||
| 
						 | 
					15671a90a9 | ||
| 
						 | 
					0048464449 | ||
| 
						 | 
					b422166ce0 | ||
| 
						 | 
					81be661ae2 | ||
| 
						 | 
					8681c66eec | ||
| 
						 | 
					69a0034e50 | ||
| 
						 | 
					c9a1778134 | ||
| 
						 | 
					326794e9c6 | ||
| 
						 | 
					2dd5ca1fbc | ||
| 
						 | 
					3042945ac8 | ||
| 
						 | 
					da29b0d335 | ||
| 
						 | 
					6abbc68188 | ||
| 
						 | 
					25f6c7fd8b | ||
| 
						 | 
					1cf3571ea4 | ||
| 
						 | 
					d769e7a58c | ||
| 
						 | 
					fa3619f233 | ||
| 
						 | 
					a414cbcad3 | ||
| 
						 | 
					c6196da587 | ||
| 
						 | 
					5d48762647 | ||
| 
						 | 
					77e749405d | ||
| 
						 | 
					9ccd4e224f | ||
| 
						 | 
					1dad4f3672 | ||
| 
						 | 
					59745556b4 | ||
| 
						 | 
					fab4447179 | ||
| 
						 | 
					417b8d4705 | ||
| 
						 | 
					e614ec4769 | ||
| 
						 | 
					a6b03f4138 | ||
| 
						 | 
					809fa4cc59 | ||
| 
						 | 
					463f448595 | ||
| 
						 | 
					5cd0cf8cce | ||
| 
						 | 
					49cb959494 | ||
| 
						 | 
					783a73c47f | ||
| 
						 | 
					99bf516908 | ||
| 
						 | 
					a26c372cfc | ||
| 
						 | 
					ed5ac22e5b | ||
| 
						 | 
					3d11b8f896 | 
							
								
								
									
										22
									
								
								.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
openssl.pc
 | 
			
		||||
libcrypto.pc
 | 
			
		||||
libssl.pc
 | 
			
		||||
MINFO
 | 
			
		||||
makefile.one
 | 
			
		||||
tmp
 | 
			
		||||
out
 | 
			
		||||
outinc
 | 
			
		||||
rehash.time
 | 
			
		||||
testlog
 | 
			
		||||
make.log
 | 
			
		||||
maketest.log
 | 
			
		||||
cctest
 | 
			
		||||
cctest.c
 | 
			
		||||
cctest.a
 | 
			
		||||
*.flc
 | 
			
		||||
semantic.cache
 | 
			
		||||
Makefile
 | 
			
		||||
*.dll*
 | 
			
		||||
*.so*
 | 
			
		||||
*.sl*
 | 
			
		||||
*.dylib*
 | 
			
		||||
							
								
								
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -11,15 +11,10 @@
 | 
			
		||||
# Top level excludes
 | 
			
		||||
/Makefile.bak
 | 
			
		||||
/Makefile
 | 
			
		||||
/MINFO
 | 
			
		||||
/*.a
 | 
			
		||||
/include
 | 
			
		||||
/*.pc
 | 
			
		||||
/rehash.time
 | 
			
		||||
/inc.*
 | 
			
		||||
/makefile.*
 | 
			
		||||
/out.*
 | 
			
		||||
/tmp.*
 | 
			
		||||
 | 
			
		||||
# Most *.c files under test/ are symlinks
 | 
			
		||||
/test/*.c
 | 
			
		||||
@@ -30,7 +25,6 @@
 | 
			
		||||
!/test/igetest.c
 | 
			
		||||
!/test/r160test.c
 | 
			
		||||
!/test/fips_algvs.c
 | 
			
		||||
!/test/testutil.c
 | 
			
		||||
 | 
			
		||||
/test/*.ss
 | 
			
		||||
/test/*.srl
 | 
			
		||||
@@ -74,7 +68,6 @@ crypto/sha/asm/sha512-sse2.asm
 | 
			
		||||
/apps/openssl
 | 
			
		||||
/test/sha256t
 | 
			
		||||
/test/sha512t
 | 
			
		||||
/test/gost2814789t
 | 
			
		||||
/test/*test
 | 
			
		||||
/test/fips_aesavs
 | 
			
		||||
/test/fips_desmovs
 | 
			
		||||
@@ -100,8 +93,6 @@ Makefile.save
 | 
			
		||||
*.bak
 | 
			
		||||
tags
 | 
			
		||||
TAGS
 | 
			
		||||
cscope.out
 | 
			
		||||
*.d
 | 
			
		||||
 | 
			
		||||
# Windows
 | 
			
		||||
/tmp32dll
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ eric (about to go bushwalking for the 4 day easter break :-)
 | 
			
		||||
7-Jan-98
 | 
			
		||||
    - Finally reworked the cipher string to ciphers again, so it
 | 
			
		||||
      works correctly
 | 
			
		||||
    - All the app_data stuff is now ex_data with function calls to access.
 | 
			
		||||
    - All the app_data stuff is now ex_data with funcion calls to access.
 | 
			
		||||
      The index is supplied by a function and 'methods' can be setup
 | 
			
		||||
      for the types that are called on XXX_new/XXX_free.  This lets
 | 
			
		||||
      applications get notified on creation and destruction.  Some of
 | 
			
		||||
@@ -937,7 +937,7 @@ Reasons to start playing with version 0.5.0
 | 
			
		||||
  certificate, it is my aim to use perl5/Tk but I don't have time to do
 | 
			
		||||
  this right now.  It will generate the certificates but the management
 | 
			
		||||
  scripts still need to be written.  This is not a hard task.
 | 
			
		||||
- Things have been cleaned up a lot.
 | 
			
		||||
- Things have been cleaned up alot.
 | 
			
		||||
- Have a look at the enc and dgst programs in the apps directory.
 | 
			
		||||
- It supports v3 of x509 certiticates.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										103
									
								
								FAQ
									
									
									
									
									
								
							
							
						
						
									
										103
									
								
								FAQ
									
									
									
									
									
								
							@@ -35,7 +35,6 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* What is a "128 bit certificate"? Can I create one with OpenSSL?
 | 
			
		||||
* Why does OpenSSL set the authority key identifier extension incorrectly?
 | 
			
		||||
* How can I set up a bundle of commercial root CA certificates?
 | 
			
		||||
* Some secure servers 'hang' with OpenSSL 1.0.1, is this a bug?
 | 
			
		||||
 | 
			
		||||
[BUILD] Questions about building and testing OpenSSL
 | 
			
		||||
 | 
			
		||||
@@ -76,7 +75,6 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* 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?
 | 
			
		||||
* When debugging I observe SIGILL during OpenSSL initialization: why?
 | 
			
		||||
 | 
			
		||||
===============================================================================
 | 
			
		||||
 | 
			
		||||
@@ -85,6 +83,7 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* Which is the current version of OpenSSL?
 | 
			
		||||
 | 
			
		||||
The current version is available from <URL: http://www.openssl.org>.
 | 
			
		||||
OpenSSL 1.0.1c was released on Feb 5th, 2013.
 | 
			
		||||
 | 
			
		||||
In addition to the current stable release, you can also access daily
 | 
			
		||||
snapshots of the OpenSSL development version at <URL:
 | 
			
		||||
@@ -133,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
 | 
			
		||||
<URL: http://www.openssl.org/about/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
 | 
			
		||||
@@ -185,18 +184,14 @@ Therefore the answer to the common question "when will feature X be
 | 
			
		||||
backported to OpenSSL 1.0.0/0.9.8?" is "never" but it could appear
 | 
			
		||||
in the next minor release.
 | 
			
		||||
 | 
			
		||||
* What happens when the letter release reaches z?
 | 
			
		||||
 | 
			
		||||
It was decided after the release of OpenSSL 0.9.8y the next version should
 | 
			
		||||
be 0.9.8za then 0.9.8zb and so on.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[LEGAL] =======================================================================
 | 
			
		||||
 | 
			
		||||
* Do I need patent licenses to use OpenSSL?
 | 
			
		||||
 | 
			
		||||
For information on intellectual property rights, please consult a lawyer.
 | 
			
		||||
The OpenSSL team does not offer legal advice.
 | 
			
		||||
The patents section of the README file lists patents that may apply to
 | 
			
		||||
you if you want to use OpenSSL.  For information on intellectual
 | 
			
		||||
property rights, please consult a lawyer.  The OpenSSL team does not
 | 
			
		||||
offer legal advice.
 | 
			
		||||
 | 
			
		||||
You can configure OpenSSL so as not to use IDEA, MDC2 and RC5 by using
 | 
			
		||||
 ./config no-idea no-mdc2 no-rc5
 | 
			
		||||
@@ -412,7 +407,7 @@ whatever name they choose.
 | 
			
		||||
The ways to print out the oneline format of the DN (Distinguished Name) have
 | 
			
		||||
been extended in version 0.9.7 of OpenSSL. Using the new X509_NAME_print_ex()
 | 
			
		||||
interface, the "-nameopt" option could be introduded. See the manual
 | 
			
		||||
page of the "openssl x509" command line tool for details. The old behaviour
 | 
			
		||||
page of the "openssl x509" commandline tool for details. The old behaviour
 | 
			
		||||
has however been left as default for the sake of compatibility.
 | 
			
		||||
 | 
			
		||||
* What is a "128 bit certificate"? Can I create one with OpenSSL?
 | 
			
		||||
@@ -434,7 +429,7 @@ software from the US only weak encryption algorithms could be freely exported
 | 
			
		||||
inadequate. A relaxation of the rules allowed the use of strong encryption but
 | 
			
		||||
only to an authorised server.
 | 
			
		||||
 | 
			
		||||
Two slightly different techniques were developed to support this, one used by
 | 
			
		||||
Two slighly different techniques were developed to support this, one used by
 | 
			
		||||
Netscape was called "step up", the other used by MSIE was called "Server Gated
 | 
			
		||||
Cryptography" (SGC). When a browser initially connected to a server it would
 | 
			
		||||
check to see if the certificate contained certain extensions and was issued by
 | 
			
		||||
@@ -485,16 +480,6 @@ bundle used by Mozilla and/or modssl as described in this article:
 | 
			
		||||
  <URL: http://www.mail-archive.com/modssl-users@modssl.org/msg16980.html>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Some secure servers 'hang' with OpenSSL 1.0.1, is this a bug?
 | 
			
		||||
 | 
			
		||||
OpenSSL 1.0.1 is the first release to support TLS 1.2, among other things,
 | 
			
		||||
this increases the size of the default ClientHello message to more than
 | 
			
		||||
255 bytes in length. Some software cannot handle this and hangs. For more
 | 
			
		||||
details and workarounds see:
 | 
			
		||||
 | 
			
		||||
  <URL: http://rt.openssl.org/Ticket/Display.html?user=guest&pass=guest&id=2771>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[BUILD] =======================================================================
 | 
			
		||||
 | 
			
		||||
* Why does the linker complain about undefined symbols?
 | 
			
		||||
@@ -623,8 +608,8 @@ valid for the current DOS session.
 | 
			
		||||
* What is special about OpenSSL on Redhat?
 | 
			
		||||
 | 
			
		||||
Red Hat Linux (release 7.0 and later) include a preinstalled limited
 | 
			
		||||
version of OpenSSL. Red Hat has chosen to disable support for IDEA, RC5 and
 | 
			
		||||
MDC2 in this version. The same may apply to other Linux distributions.
 | 
			
		||||
version of OpenSSL. For patent reasons, support for IDEA, RC5 and MDC2
 | 
			
		||||
is disabled in this version. The same may apply to other Linux distributions.
 | 
			
		||||
Users may therefore wish to install more or all of the features left out.
 | 
			
		||||
 | 
			
		||||
To do this you MUST ensure that you do not overwrite the openssl that is in
 | 
			
		||||
@@ -647,6 +632,11 @@ relevant updates in packages up to and including 0.9.6b.
 | 
			
		||||
A possible way around this is to persuade Red Hat to produce a non-US
 | 
			
		||||
version of Red Hat Linux.
 | 
			
		||||
 | 
			
		||||
FYI: Patent numbers and expiry dates of US patents:
 | 
			
		||||
MDC-2: 4,908,861 13/03/2007
 | 
			
		||||
IDEA:  5,214,703 25/05/2010
 | 
			
		||||
RC5:   5,724,428 03/03/2015
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does the OpenSSL compilation fail on MacOS X?
 | 
			
		||||
 | 
			
		||||
@@ -709,7 +699,7 @@ working across wider range of *BSD branches, not just OpenBSD.
 | 
			
		||||
If the test program in question fails withs SIGILL, Illegal Instruction
 | 
			
		||||
exception, then you more than likely to run SSE2-capable CPU, such as
 | 
			
		||||
Intel P4, under control of kernel which does not support SSE2
 | 
			
		||||
instruction extensions. See accompanying INSTALL file and
 | 
			
		||||
instruction extentions. See accompanying INSTALL file and
 | 
			
		||||
OPENSSL_ia32cap(3) documentation page for further information.
 | 
			
		||||
 | 
			
		||||
* Why does compiler fail to compile sha512.c?
 | 
			
		||||
@@ -723,15 +713,15 @@ possible alternative might be to switch to GCC.
 | 
			
		||||
 | 
			
		||||
* Test suite still fails, what to do?
 | 
			
		||||
 | 
			
		||||
Another common reason for test failures is bugs in the toolchain
 | 
			
		||||
or run-time environment.  Known cases of this are documented in the
 | 
			
		||||
PROBLEMS file, please review it before you beat the drum. Even if you
 | 
			
		||||
don't find anything in that file, please do consider the possibility
 | 
			
		||||
of a compiler bug. Compiler bugs often appear in rather bizarre ways,
 | 
			
		||||
they never make sense, and tend to emerge when you least expect
 | 
			
		||||
them. One thing to try is to reduce the level of optimization (such
 | 
			
		||||
as by editing the CFLAG variable line in the top-level Makefile),
 | 
			
		||||
and then recompile and re-run the test.
 | 
			
		||||
Another common reason for failure to complete some particular test is
 | 
			
		||||
simply bad code generated by a buggy component in toolchain or deficiency
 | 
			
		||||
in run-time environment. There are few cases documented in PROBLEMS file,
 | 
			
		||||
consult it for possible workaround before you beat the drum. Even if you
 | 
			
		||||
don't find solution or even mention there, do reserve for possibility of
 | 
			
		||||
a compiler bug. Compiler bugs might appear in rather bizarre ways, they
 | 
			
		||||
never make sense, and tend to emerge when you least expect them. In order
 | 
			
		||||
to identify one, drop optimization level, e.g. by editing CFLAG line in
 | 
			
		||||
top-level Makefile, recompile and re-run the test.
 | 
			
		||||
 | 
			
		||||
* I think I've found a bug, what should I do?
 | 
			
		||||
 | 
			
		||||
@@ -741,16 +731,9 @@ 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.
 | 
			
		||||
 | 
			
		||||
If you think you have found a bug based on the output of static analysis tools
 | 
			
		||||
then please manually check the issue is genuine. Such tools can produce a
 | 
			
		||||
LOT of false positives.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* I'm SURE I've found a bug, how do I report it?
 | 
			
		||||
 | 
			
		||||
To avoid duplicated reports check the mailing lists and release notes for the
 | 
			
		||||
relevant version of OpenSSL to see if the problem has been reported already.
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
@@ -778,9 +761,7 @@ See also <URL: http://www.openssl.org/support/rt.html>
 | 
			
		||||
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). If you wish to use PGP to send
 | 
			
		||||
in a report please use one or more of the keys of the team members listed
 | 
			
		||||
at <URL: http://www.openssl.org/about/>
 | 
			
		||||
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. 
 | 
			
		||||
@@ -881,7 +862,7 @@ The opposite assumes we already have len bytes in buf:
 | 
			
		||||
 p = buf;
 | 
			
		||||
 p7 = d2i_PKCS7(NULL, &p, len);
 | 
			
		||||
 | 
			
		||||
At this point p7 contains a valid PKCS7 structure or NULL if an error
 | 
			
		||||
At this point p7 contains a valid PKCS7 structure of NULL if an error
 | 
			
		||||
occurred. If an error occurred ERR_print_errors(bio) should give more
 | 
			
		||||
information.
 | 
			
		||||
 | 
			
		||||
@@ -893,21 +874,6 @@ that has been read or written. This may well be uninitialized data
 | 
			
		||||
and attempts to free the buffer will have unpredictable results
 | 
			
		||||
because it no longer points to the same address.
 | 
			
		||||
 | 
			
		||||
Memory allocation and encoding can also be combined in a single
 | 
			
		||||
operation by the ASN1 routines:
 | 
			
		||||
 | 
			
		||||
 unsigned char *buf = NULL;	/* mandatory */
 | 
			
		||||
 int len;
 | 
			
		||||
 len = i2d_PKCS7(p7, &buf);
 | 
			
		||||
 if (len < 0)
 | 
			
		||||
	/* Error */
 | 
			
		||||
 /* Do some things with 'buf' */
 | 
			
		||||
 /* Finished with buf: free it */
 | 
			
		||||
 OPENSSL_free(buf);
 | 
			
		||||
 | 
			
		||||
In this special case the "buf" parameter is *not* incremented, it points
 | 
			
		||||
to the start of the encoding.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* OpenSSL uses DER but I need BER format: does OpenSSL support BER?
 | 
			
		||||
 | 
			
		||||
@@ -1069,20 +1035,5 @@ These are defined and implemented by macros of the form:
 | 
			
		||||
The implementation passes an ASN1 "template" defining the structure into an
 | 
			
		||||
ASN1 interpreter using generalised functions such as ASN1_item_d2i().
 | 
			
		||||
 | 
			
		||||
* When debugging I observe SIGILL during OpenSSL initialization: why?
 | 
			
		||||
 | 
			
		||||
OpenSSL adapts to processor it executes on and for this reason has to
 | 
			
		||||
query its capabilities. Unfortunately on some processors the only way
 | 
			
		||||
to achieve this for non-privileged code is to attempt instructions
 | 
			
		||||
that can cause Illegal Instruction exceptions. The initialization
 | 
			
		||||
procedure is coded to handle these exceptions to manipulate corresponding
 | 
			
		||||
bits in capabilities vector. This normally appears transparent, except
 | 
			
		||||
when you execute it under debugger, which stops prior delivering signal
 | 
			
		||||
to handler. Simply resuming execution does the trick, but when debugging
 | 
			
		||||
a lot it might feel counterproductive. Two options. Either set explicit
 | 
			
		||||
capability environment variable in order to bypass the capability query
 | 
			
		||||
(see corresponding crypto/*cap.c for details). Or configure debugger not
 | 
			
		||||
to stop upon SIGILL exception, e.g. in gdb case add 'handle SIGILL nostop'
 | 
			
		||||
to your .gdbinit.
 | 
			
		||||
 | 
			
		||||
===============================================================================
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								GitConfigure
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								GitConfigure
									
									
									
									
									
								
							@@ -1,10 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
BRANCH=`git rev-parse --abbrev-ref HEAD`
 | 
			
		||||
 | 
			
		||||
./Configure $@ no-symlinks
 | 
			
		||||
make files
 | 
			
		||||
util/mk1mf.pl OUT=out.$BRANCH TMP=tmp.$BRANCH INC=inc.$BRANCH copy > makefile.$BRANCH
 | 
			
		||||
MAKE=make
 | 
			
		||||
which bsdmake > /dev/null && MAKE=bsdmake
 | 
			
		||||
$MAKE -f makefile.$BRANCH init
 | 
			
		||||
							
								
								
									
										7
									
								
								GitMake
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								GitMake
									
									
									
									
									
								
							@@ -1,7 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
BRANCH=`git rev-parse --abbrev-ref HEAD`
 | 
			
		||||
 | 
			
		||||
MAKE=make
 | 
			
		||||
which bsdmake > /dev/null && MAKE=bsdmake
 | 
			
		||||
$MAKE -f makefile.$BRANCH $@
 | 
			
		||||
							
								
								
									
										8
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								INSTALL
									
									
									
									
									
								
							@@ -79,7 +79,7 @@
 | 
			
		||||
                compiler flags for any other CPU specific configuration,
 | 
			
		||||
                e.g. "-m32" to build x86 code on an x64 system.
 | 
			
		||||
 | 
			
		||||
  no-sse2	Exclude SSE2 code pathes. Normally SSE2 extension is
 | 
			
		||||
  no-sse2	Exclude SSE2 code pathes. Normally SSE2 extention is
 | 
			
		||||
		detected at run-time, but the decision whether or not the
 | 
			
		||||
		machine code will be executed is taken solely on CPU
 | 
			
		||||
		capability vector. This means that if you happen to run OS
 | 
			
		||||
@@ -103,6 +103,12 @@
 | 
			
		||||
                define preprocessor symbols, specify additional libraries,
 | 
			
		||||
                library directories or other compiler options.
 | 
			
		||||
 | 
			
		||||
  -DHAVE_CRYPTODEV Enable the BSD cryptodev engine even if we are not using
 | 
			
		||||
		BSD. Useful if you are running ocf-linux or something
 | 
			
		||||
		similar. Once enabled you can also enable the use of
 | 
			
		||||
		cryptodev digests, which is usually slower unless you have
 | 
			
		||||
		large amounts data. Use -DUSE_CRYPTODEV_DIGESTS to force
 | 
			
		||||
		it.
 | 
			
		||||
 | 
			
		||||
 Installation in Detail
 | 
			
		||||
 ----------------------
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										72
									
								
								INSTALL.MacOS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								INSTALL.MacOS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
			
		||||
OpenSSL - Port To The Macintosh OS 9 or Earlier
 | 
			
		||||
===============================================
 | 
			
		||||
 | 
			
		||||
Thanks to Roy Wood <roy@centricsystems.ca> initial support for Mac OS (pre
 | 
			
		||||
X) is now provided. "Initial" means that unlike other platforms where you
 | 
			
		||||
get an SDK and a "swiss army" openssl application, on Macintosh you only
 | 
			
		||||
get one sample application which fetches a page over HTTPS(*) and dumps it
 | 
			
		||||
in a window. We don't even build the test applications so that we can't
 | 
			
		||||
guarantee that all algorithms are operational.
 | 
			
		||||
 | 
			
		||||
Required software:
 | 
			
		||||
 | 
			
		||||
- StuffIt Expander 5.5 or later, alternatively MacGzip and SUNtar;
 | 
			
		||||
- Scriptable Finder;
 | 
			
		||||
- CodeWarrior Pro 5;
 | 
			
		||||
 | 
			
		||||
Installation procedure:
 | 
			
		||||
 | 
			
		||||
- fetch the source at ftp://ftp.openssl.org/ (well, you probably already
 | 
			
		||||
  did, huh?)
 | 
			
		||||
- unpack the .tar.gz file:
 | 
			
		||||
	- if you have StuffIt Expander then just drag it over it;
 | 
			
		||||
	- otherwise uncompress it with MacGzip and then unpack with SUNtar;
 | 
			
		||||
- locate MacOS folder in OpenSSL source tree and open it;
 | 
			
		||||
- unbinhex mklinks.as.hqx and OpenSSL.mcp.hqx if present (**), do it
 | 
			
		||||
  "in-place", i.e. unpacked files should end-up in the very same folder;
 | 
			
		||||
- execute mklinks.as;
 | 
			
		||||
- open OpenSSL.mcp(***) and build 'GetHTTPS PPC' target(****);
 | 
			
		||||
- that's it for now;
 | 
			
		||||
 | 
			
		||||
(*)	URL is hardcoded into ./MacOS/GetHTTPS.src/GetHTTPS.cpp, lines 40
 | 
			
		||||
        to 42, change appropriately.
 | 
			
		||||
(**)	If you use SUNtar, then it might have already unbinhexed the files
 | 
			
		||||
	in question.
 | 
			
		||||
(***)	The project file was saved with CW Pro 5.3. If you have an earlier
 | 
			
		||||
	version and it refuses to open it, then download
 | 
			
		||||
	http://www.openssl.org/~appro/OpenSSL.mcp.xml and import it
 | 
			
		||||
	overwriting the original OpenSSL.mcp.
 | 
			
		||||
(****)	Other targets are works in progress. If you feel like giving 'em a
 | 
			
		||||
	shot, then you should know that OpenSSL* and Lib* targets are
 | 
			
		||||
	supposed to be built with the GUSI, MacOS library which mimics
 | 
			
		||||
	BSD sockets and some other POSIX APIs. The GUSI distribution is
 | 
			
		||||
	expected to be found in the same directory as the openssl source tree,
 | 
			
		||||
	i.e., in the parent directory to the one where this very file,
 | 
			
		||||
	namely INSTALL.MacOS, resides. For more information about GUSI, see
 | 
			
		||||
	http://www.iis.ee.ethz.ch/~neeri/macintosh/gusi-qa.html
 | 
			
		||||
 | 
			
		||||
Finally some essential comments from our generous contributor:-)
 | 
			
		||||
 | 
			
		||||
"I've gotten OpenSSL working on the Macintosh. It's probably a bit of a
 | 
			
		||||
hack, but it works for what I'm doing. If you don't like the way I've done
 | 
			
		||||
it, then feel free to change what I've done. I freely admit that I've done
 | 
			
		||||
some less-than-ideal things in my port, and if you don't like the way I've
 | 
			
		||||
done something, then feel free to change it-- I won't be offended!
 | 
			
		||||
 | 
			
		||||
... I've tweaked "bss_sock.c" a little to call routines in a "MacSocket"
 | 
			
		||||
library I wrote. My MacSocket library is a wrapper around OpenTransport,
 | 
			
		||||
handling stuff like endpoint creation, reading, writing, etc. It is not
 | 
			
		||||
designed as a high-performance package such as you'd use in a webserver,
 | 
			
		||||
but is fine for lots of other applications. MacSocket also uses some other
 | 
			
		||||
code libraries I've written to deal with string manipulations and error
 | 
			
		||||
handling. Feel free to use these things in your own code, but give me
 | 
			
		||||
credit and/or send me free stuff in appreciation! :-)
 | 
			
		||||
 | 
			
		||||
...
 | 
			
		||||
 | 
			
		||||
If you have any questions, feel free to email me as the following:
 | 
			
		||||
 | 
			
		||||
roy@centricsystems.ca
 | 
			
		||||
 | 
			
		||||
-Roy Wood"
 | 
			
		||||
 | 
			
		||||
@@ -378,7 +378,7 @@ The openssl program has numerous options and can be used for many different
 | 
			
		||||
things.  Many of the options operate in an interactive mode requiring the
 | 
			
		||||
user to enter data.  Because of this, a default screen is created for the
 | 
			
		||||
program.  However, when running the test script it is not desirable to
 | 
			
		||||
have a separate screen.  Therefore, the build also creates openssl2.nlm.
 | 
			
		||||
have a seperate screen.  Therefore, the build also creates openssl2.nlm.
 | 
			
		||||
Openssl2.nlm is functionally identical but uses the console screen.
 | 
			
		||||
Openssl2 can be used when a non-interactive mode is desired.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -134,7 +134,7 @@ Currently, the logical names supported are:
 | 
			
		||||
                        will not be implemented.  Supported algorithms to
 | 
			
		||||
                        do this with are: RSA, DSA, DH, MD2, MD4, MD5, RIPEMD,
 | 
			
		||||
                        SHA, DES, MDC2, CR2, RC4, RC5, IDEA, BF, CAST, HMAC,
 | 
			
		||||
                        SSL3.  So, for example, having the logical name
 | 
			
		||||
                        SSL2.  So, for example, having the logical name
 | 
			
		||||
                        OPENSSL_NO_RSA with the value YES means that the
 | 
			
		||||
                        LIBCRYPTO.OLB library will not contain an RSA
 | 
			
		||||
                        implementation.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										62
									
								
								MacOS/GUSI_Init.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								MacOS/GUSI_Init.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
/**************** BEGIN GUSI CONFIGURATION ****************************
 | 
			
		||||
 *
 | 
			
		||||
 * GUSI Configuration section generated by GUSI Configurator
 | 
			
		||||
 * last modified: Wed Jan  5 20:33:51 2000
 | 
			
		||||
 *
 | 
			
		||||
 * This section will be overwritten by the next run of Configurator.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define GUSI_SOURCE
 | 
			
		||||
#include <GUSIConfig.h>
 | 
			
		||||
#include <sys/cdefs.h>
 | 
			
		||||
 | 
			
		||||
/* Declarations of Socket Factories */
 | 
			
		||||
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
void GUSIwithInetSockets();
 | 
			
		||||
void GUSIwithLocalSockets();
 | 
			
		||||
void GUSIwithMTInetSockets();
 | 
			
		||||
void GUSIwithMTTcpSockets();
 | 
			
		||||
void GUSIwithMTUdpSockets();
 | 
			
		||||
void GUSIwithOTInetSockets();
 | 
			
		||||
void GUSIwithOTTcpSockets();
 | 
			
		||||
void GUSIwithOTUdpSockets();
 | 
			
		||||
void GUSIwithPPCSockets();
 | 
			
		||||
void GUSISetupFactories();
 | 
			
		||||
__END_DECLS
 | 
			
		||||
 | 
			
		||||
/* Configure Socket Factories */
 | 
			
		||||
 | 
			
		||||
void GUSISetupFactories()
 | 
			
		||||
{
 | 
			
		||||
#ifdef GUSISetupFactories_BeginHook
 | 
			
		||||
	GUSISetupFactories_BeginHook
 | 
			
		||||
#endif
 | 
			
		||||
	GUSIwithInetSockets();
 | 
			
		||||
#ifdef GUSISetupFactories_EndHook
 | 
			
		||||
	GUSISetupFactories_EndHook
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Declarations of File Devices */
 | 
			
		||||
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
void GUSIwithDConSockets();
 | 
			
		||||
void GUSIwithNullSockets();
 | 
			
		||||
void GUSISetupDevices();
 | 
			
		||||
__END_DECLS
 | 
			
		||||
 | 
			
		||||
/* Configure File Devices */
 | 
			
		||||
 | 
			
		||||
void GUSISetupDevices()
 | 
			
		||||
{
 | 
			
		||||
#ifdef GUSISetupDevices_BeginHook
 | 
			
		||||
	GUSISetupDevices_BeginHook
 | 
			
		||||
#endif
 | 
			
		||||
	GUSIwithNullSockets();
 | 
			
		||||
#ifdef GUSISetupDevices_EndHook
 | 
			
		||||
	GUSISetupDevices_EndHook
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**************** END GUSI CONFIGURATION *************************/
 | 
			
		||||
							
								
								
									
										2753
									
								
								MacOS/GetHTTPS.src/CPStringUtils.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2753
									
								
								MacOS/GetHTTPS.src/CPStringUtils.cpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										104
									
								
								MacOS/GetHTTPS.src/CPStringUtils.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								MacOS/GetHTTPS.src/CPStringUtils.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,104 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void CopyPStrToCStr(const unsigned char *thePStr,char *theCStr,const int maxCStrLength);
 | 
			
		||||
void CopyPStrToPStr(const unsigned char *theSrcPStr,unsigned char *theDstPStr,const int maxDstStrLength);
 | 
			
		||||
void CopyCStrToCStr(const char *theSrcCStr,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
void CopyCStrToPStr(const char *theSrcCStr,unsigned char *theDstPStr,const int maxDstStrLength);
 | 
			
		||||
void ConcatPStrToCStr(const unsigned char *thePStr,char *theCStr,const int maxCStrLength);
 | 
			
		||||
void ConcatPStrToPStr(const unsigned char *theSrcPStr,unsigned char *theDstPStr,const int maxDstStrLength);
 | 
			
		||||
void ConcatCStrToPStr(const char *theSrcCStr,unsigned char *theDstPStr,const int maxDstStrLength);
 | 
			
		||||
void ConcatCStrToCStr(const char *theSrcCStr,char *theDstCStr,const int maxCStrLength);
 | 
			
		||||
 | 
			
		||||
void ConcatCharToCStr(const char theChar,char *theDstCStr,const int maxCStrLength);
 | 
			
		||||
void ConcatCharToPStr(const char theChar,unsigned char *theDstPStr,const int maxPStrLength);
 | 
			
		||||
 | 
			
		||||
int ComparePStrs(const unsigned char *theFirstPStr,const unsigned char *theSecondPStr,const Boolean ignoreCase = true);
 | 
			
		||||
int CompareCStrs(const char *theFirstCStr,const char *theSecondCStr,const Boolean ignoreCase = true);
 | 
			
		||||
int CompareCStrToPStr(const char *theCStr,const unsigned char *thePStr,const Boolean ignoreCase = true);
 | 
			
		||||
 | 
			
		||||
Boolean CStrsAreEqual(const char *theFirstCStr,const char *theSecondCStr,const Boolean ignoreCase = true);
 | 
			
		||||
Boolean PStrsAreEqual(const unsigned char *theFirstCStr,const unsigned char *theSecondCStr,const Boolean ignoreCase = true);
 | 
			
		||||
 | 
			
		||||
void CopyLongIntToCStr(const long theNum,char *theCStr,const int maxCStrLength,const int numDigits = -1);
 | 
			
		||||
void CopyUnsignedLongIntToCStr(const unsigned long theNum,char *theCStr,const int maxCStrLength);
 | 
			
		||||
void ConcatLongIntToCStr(const long theNum,char *theCStr,const int maxCStrLength,const int numDigits = -1);
 | 
			
		||||
void CopyCStrAndConcatLongIntToCStr(const char *theSrcCStr,const long theNum,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
 | 
			
		||||
void CopyLongIntToPStr(const long theNum,unsigned char *thePStr,const int maxPStrLength,const int numDigits = -1);
 | 
			
		||||
void ConcatLongIntToPStr(const long theNum,unsigned char *thePStr,const int maxPStrLength,const int numDigits = -1);
 | 
			
		||||
 | 
			
		||||
long CStrLength(const char *theCString);
 | 
			
		||||
long PStrLength(const unsigned char *thePString);
 | 
			
		||||
 | 
			
		||||
OSErr CopyCStrToExistingHandle(const char *theCString,Handle theHandle);
 | 
			
		||||
OSErr CopyLongIntToExistingHandle(const long inTheLongInt,Handle theHandle);
 | 
			
		||||
 | 
			
		||||
OSErr CopyCStrToNewHandle(const char *theCString,Handle *theHandle);
 | 
			
		||||
OSErr CopyPStrToNewHandle(const unsigned char *thePString,Handle *theHandle);
 | 
			
		||||
OSErr CopyLongIntToNewHandle(const long inTheLongInt,Handle *theHandle);
 | 
			
		||||
 | 
			
		||||
OSErr AppendCStrToHandle(const char *theCString,Handle theHandle,long *currentLength = nil,long *maxLength = nil);
 | 
			
		||||
OSErr AppendCharsToHandle(const char *theChars,const int numChars,Handle theHandle,long *currentLength = nil,long *maxLength = nil);
 | 
			
		||||
OSErr AppendPStrToHandle(const unsigned char *thePString,Handle theHandle,long *currentLength = nil);
 | 
			
		||||
OSErr AppendLongIntToHandle(const long inTheLongInt,Handle theHandle,long *currentLength = nil);
 | 
			
		||||
 | 
			
		||||
void ZeroMem(void *theMemPtr,const unsigned long numBytes);
 | 
			
		||||
 | 
			
		||||
char *FindCharInCStr(const char theChar,const char *theCString);
 | 
			
		||||
long FindCharOffsetInCStr(const char theChar,const char *theCString,const Boolean inIgnoreCase = false);
 | 
			
		||||
long FindCStrOffsetInCStr(const char *theCSubstring,const char *theCString,const Boolean inIgnoreCase = false);
 | 
			
		||||
 | 
			
		||||
void CopyCSubstrToCStr(const char *theSrcCStr,const int maxCharsToCopy,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
void CopyCSubstrToPStr(const char *theSrcCStr,const int maxCharsToCopy,unsigned char *theDstPStr,const int maxDstStrLength);
 | 
			
		||||
 | 
			
		||||
void InsertCStrIntoCStr(const char *theSrcCStr,const int theInsertionOffset,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
void InsertPStrIntoCStr(const unsigned char *theSrcPStr,const int theInsertionOffset,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
OSErr InsertCStrIntoHandle(const char *theCString,Handle theHandle,const long inInsertOffset);
 | 
			
		||||
 | 
			
		||||
void CopyCStrAndInsertCStrIntoCStr(const char *theSrcCStr,const char *theInsertCStr,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
 | 
			
		||||
void CopyCStrAndInsertCStrsLongIntsIntoCStr(const char *theSrcCStr,const char **theInsertCStrs,const long *theLongInts,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
 | 
			
		||||
void CopyCStrAndInsert1LongIntIntoCStr(const char *theSrcCStr,const long theNum,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
void CopyCStrAndInsert2LongIntsIntoCStr(const char *theSrcCStr,const long long1,const long long2,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
void CopyCStrAndInsert3LongIntsIntoCStr(const char *theSrcCStr,const long long1,const long long2,const long long3,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
 | 
			
		||||
void CopyCStrAndInsertCStrLongIntIntoCStr(const char *theSrcCStr,const char *theInsertCStr,const long theNum,char *theDstCStr,const int maxDstStrLength);
 | 
			
		||||
OSErr CopyCStrAndInsertCStrLongIntIntoHandle(const char *theSrcCStr,const char *theInsertCStr,const long theNum,Handle *theHandle);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OSErr CopyIndexedWordToCStr(char *theSrcCStr,int whichWord,char *theDstCStr,int maxDstCStrLength);
 | 
			
		||||
OSErr CopyIndexedWordToNewHandle(char *theSrcCStr,int whichWord,Handle *outTheHandle);
 | 
			
		||||
 | 
			
		||||
OSErr CopyIndexedLineToCStr(const char *theSrcCStr,int inWhichLine,int *lineEndIndex,Boolean *gotLastLine,char *theDstCStr,const int maxDstCStrLength);
 | 
			
		||||
OSErr CopyIndexedLineToNewHandle(const char *theSrcCStr,int inWhichLine,Handle *outNewHandle);
 | 
			
		||||
 | 
			
		||||
OSErr ExtractIntFromCStr(const char *theSrcCStr,int *outInt,Boolean skipLeadingSpaces = true);
 | 
			
		||||
OSErr ExtractIntFromPStr(const unsigned char *theSrcPStr,int *outInt,Boolean skipLeadingSpaces = true);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ConvertCStrToUpperCase(char *theSrcCStr);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int CountOccurencesOfCharInCStr(const char inChar,const char *inSrcCStr);
 | 
			
		||||
int CountWordsInCStr(const char *inSrcCStr);
 | 
			
		||||
 | 
			
		||||
OSErr CountDigits(const char *inCStr,int *outNumIntegerDigits,int *outNumFractDigits);
 | 
			
		||||
 | 
			
		||||
void ExtractCStrItemFromCStr(const char *inSrcCStr,const char inItemDelimiter,const int inItemNumber,Boolean *foundItem,char *outDstCharPtr,const int inDstCharPtrMaxLength,const Boolean inTreatMultipleDelimsAsSingleDelim = false);
 | 
			
		||||
OSErr ExtractCStrItemFromCStrIntoNewHandle(const char *inSrcCStr,const char inItemDelimiter,const int inItemNumber,Boolean *foundItem,Handle *outNewHandle,const Boolean inTreatMultipleDelimsAsSingleDelim = false);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OSErr ExtractFloatFromCStr(const char *inCString,extended80 *outFloat);
 | 
			
		||||
OSErr CopyFloatToCStr(const extended80 *theFloat,char *theCStr,const int maxCStrLength,const int inMaxNumIntDigits = -1,const int inMaxNumFractDigits = -1);
 | 
			
		||||
 | 
			
		||||
void SkipWhiteSpace(char **ioSrcCharPtr,const Boolean inStopAtEOL = false);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1998-2014 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 * Copyright (c) 1998-1999 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
 | 
			
		||||
@@ -52,72 +52,119 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
#ifndef HEADER_BN_INT_H
 | 
			
		||||
# define HEADER_BN_INT_H
 | 
			
		||||
 
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
 
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
 #include "ErrorHandling.hpp"
 | 
			
		||||
#include "CPStringUtils.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef __EXCEPTIONS_ENABLED__
 | 
			
		||||
	#include "CMyException.hpp"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
# define bn_expand(a,bits) ((((((bits+BN_BITS2-1))/BN_BITS2)) <= (a)->dmax)?\
 | 
			
		||||
        (a):bn_expand2((a),(bits+BN_BITS2-1)/BN_BITS2))
 | 
			
		||||
BIGNUM *bn_wexpand(BIGNUM *a, int words);
 | 
			
		||||
BIGNUM *bn_expand2(BIGNUM *a, int words);
 | 
			
		||||
 | 
			
		||||
void bn_correct_top(BIGNUM *a);
 | 
			
		||||
static char					gErrorMessageBuffer[512];
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Determine the modified width-(w+1) Non-Adjacent Form (wNAF) of 'scalar'.
 | 
			
		||||
 * This is an array r[] of values that are either zero or odd with an
 | 
			
		||||
 * absolute value less than 2^w satisfying scalar = \sum_j r[j]*2^j where at
 | 
			
		||||
 * most one of any w+1 consecutive digits is non-zero with the exception that
 | 
			
		||||
 * the most significant digit may be only w-1 zeros away from that next
 | 
			
		||||
 * non-zero digit.
 | 
			
		||||
 */
 | 
			
		||||
signed char *bn_compute_wNAF(const BIGNUM *scalar, int w, size_t *ret_len);
 | 
			
		||||
 | 
			
		||||
int bn_get_top(const BIGNUM *a);
 | 
			
		||||
 | 
			
		||||
void bn_set_top(BIGNUM *a, int top);
 | 
			
		||||
 | 
			
		||||
int bn_get_dmax(const BIGNUM *a);
 | 
			
		||||
 | 
			
		||||
/* Set all words to zero */
 | 
			
		||||
void bn_set_all_zero(BIGNUM *a);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copy the internal BIGNUM words into out which holds size elements (and size
 | 
			
		||||
 * must be bigger than top)
 | 
			
		||||
 */
 | 
			
		||||
int bn_copy_words(BN_ULONG *out, const BIGNUM *in, int size);
 | 
			
		||||
 | 
			
		||||
BN_ULONG *bn_get_words(const BIGNUM *a);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Set the internal data words in a to point to words which contains size
 | 
			
		||||
 * elements. The BN_FLG_STATIC_DATA flag is set
 | 
			
		||||
 */
 | 
			
		||||
void bn_set_static_words(BIGNUM *a, BN_ULONG *words, int size);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copy data into the BIGNUM. The caller must check that dmax is sufficient to
 | 
			
		||||
 * hold the data
 | 
			
		||||
 */
 | 
			
		||||
void bn_set_data(BIGNUM *a, const void *data, size_t size);
 | 
			
		||||
 | 
			
		||||
size_t bn_sizeof_BIGNUM(void);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Return element el from an array of BIGNUMs starting at base (required
 | 
			
		||||
 * because callers do not know the size of BIGNUM at compilation time)
 | 
			
		||||
 */
 | 
			
		||||
BIGNUM *bn_array_el(BIGNUM *base, int el);
 | 
			
		||||
char 						*gErrorMessage = gErrorMessageBuffer;
 | 
			
		||||
int							gErrorMessageMaxLength = sizeof(gErrorMessageBuffer);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
 | 
			
		||||
void SetErrorMessage(const char *theErrorMessage)
 | 
			
		||||
{
 | 
			
		||||
	if (theErrorMessage != nil)
 | 
			
		||||
	{
 | 
			
		||||
		CopyCStrToCStr(theErrorMessage,gErrorMessage,gErrorMessageMaxLength);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void SetErrorMessageAndAppendLongInt(const char *theErrorMessage,const long theLongInt)
 | 
			
		||||
{
 | 
			
		||||
	if (theErrorMessage != nil)
 | 
			
		||||
	{
 | 
			
		||||
		CopyCStrAndConcatLongIntToCStr(theErrorMessage,theLongInt,gErrorMessage,gErrorMessageMaxLength);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SetErrorMessageAndCStrAndLongInt(const char *theErrorMessage,const char * theCStr,const long theLongInt)
 | 
			
		||||
{
 | 
			
		||||
	if (theErrorMessage != nil)
 | 
			
		||||
	{
 | 
			
		||||
		CopyCStrAndInsertCStrLongIntIntoCStr(theErrorMessage,theCStr,theLongInt,gErrorMessage,gErrorMessageMaxLength);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SetErrorMessageAndCStr(const char *theErrorMessage,const char * theCStr)
 | 
			
		||||
{
 | 
			
		||||
	if (theErrorMessage != nil)
 | 
			
		||||
	{
 | 
			
		||||
		CopyCStrAndInsertCStrLongIntIntoCStr(theErrorMessage,theCStr,-1,gErrorMessage,gErrorMessageMaxLength);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void AppendCStrToErrorMessage(const char *theErrorMessage)
 | 
			
		||||
{
 | 
			
		||||
	if (theErrorMessage != nil)
 | 
			
		||||
	{
 | 
			
		||||
		ConcatCStrToCStr(theErrorMessage,gErrorMessage,gErrorMessageMaxLength);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void AppendLongIntToErrorMessage(const long theLongInt)
 | 
			
		||||
{
 | 
			
		||||
	ConcatLongIntToCStr(theLongInt,gErrorMessage,gErrorMessageMaxLength);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
char *GetErrorMessage(void)
 | 
			
		||||
{
 | 
			
		||||
	return gErrorMessage;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OSErr GetErrorMessageInNewHandle(Handle *inoutHandle)
 | 
			
		||||
{
 | 
			
		||||
OSErr		errCode;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	errCode = CopyCStrToNewHandle(gErrorMessage,inoutHandle);
 | 
			
		||||
	
 | 
			
		||||
	return(errCode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OSErr GetErrorMessageInExistingHandle(Handle inoutHandle)
 | 
			
		||||
{
 | 
			
		||||
OSErr		errCode;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	errCode = CopyCStrToExistingHandle(gErrorMessage,inoutHandle);
 | 
			
		||||
	
 | 
			
		||||
	return(errCode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OSErr AppendErrorMessageToHandle(Handle inoutHandle)
 | 
			
		||||
{
 | 
			
		||||
OSErr		errCode;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	errCode = AppendCStrToHandle(gErrorMessage,inoutHandle,nil);
 | 
			
		||||
	
 | 
			
		||||
	return(errCode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __EXCEPTIONS_ENABLED__
 | 
			
		||||
 | 
			
		||||
void ThrowErrorMessageException(void)
 | 
			
		||||
{
 | 
			
		||||
	ThrowDescriptiveException(gErrorMessage);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										147
									
								
								MacOS/GetHTTPS.src/ErrorHandling.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								MacOS/GetHTTPS.src/ErrorHandling.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,147 @@
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef kGenericError
 | 
			
		||||
	#define kGenericError		-1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
extern char	*gErrorMessage;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void SetErrorMessage(const char *theErrorMessage);
 | 
			
		||||
void SetErrorMessageAndAppendLongInt(const char *theErrorMessage,const long theLongInt);
 | 
			
		||||
void SetErrorMessageAndCStrAndLongInt(const char *theErrorMessage,const char * theCStr,const long theLongInt);
 | 
			
		||||
void SetErrorMessageAndCStr(const char *theErrorMessage,const char * theCStr);
 | 
			
		||||
void AppendCStrToErrorMessage(const char *theErrorMessage);
 | 
			
		||||
void AppendLongIntToErrorMessage(const long theLongInt);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
char *GetErrorMessage(void);
 | 
			
		||||
OSErr GetErrorMessageInNewHandle(Handle *inoutHandle);
 | 
			
		||||
OSErr GetErrorMessageInExistingHandle(Handle inoutHandle);
 | 
			
		||||
OSErr AppendErrorMessageToHandle(Handle inoutHandle);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __EXCEPTIONS_ENABLED__
 | 
			
		||||
	void ThrowErrorMessageException(void);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//	A bunch of evil macros that would be unnecessary if I were always using C++ !
 | 
			
		||||
 | 
			
		||||
#define SetErrorMessageAndBailIfNil(theArg,theMessage)								\
 | 
			
		||||
{																					\
 | 
			
		||||
	if (theArg == nil)																\
 | 
			
		||||
	{																				\
 | 
			
		||||
		SetErrorMessage(theMessage);												\
 | 
			
		||||
		errCode = kGenericError;													\
 | 
			
		||||
		goto EXITPOINT;																\
 | 
			
		||||
	}																				\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrorMessageAndBail(theMessage)											\
 | 
			
		||||
{																					\
 | 
			
		||||
		SetErrorMessage(theMessage);												\
 | 
			
		||||
		errCode = kGenericError;													\
 | 
			
		||||
		goto EXITPOINT;																\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrorMessageAndLongIntAndBail(theMessage,theLongInt)						\
 | 
			
		||||
{																					\
 | 
			
		||||
		SetErrorMessageAndAppendLongInt(theMessage,theLongInt);						\
 | 
			
		||||
		errCode = kGenericError;													\
 | 
			
		||||
		goto EXITPOINT;																\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrorMessageAndLongIntAndBailIfError(theErrCode,theMessage,theLongInt)	\
 | 
			
		||||
{																					\
 | 
			
		||||
	if (theErrCode != noErr)														\
 | 
			
		||||
	{																				\
 | 
			
		||||
		SetErrorMessageAndAppendLongInt(theMessage,theLongInt);						\
 | 
			
		||||
		errCode = theErrCode;														\
 | 
			
		||||
		goto EXITPOINT;																\
 | 
			
		||||
	}																				\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrorMessageCStrLongIntAndBailIfError(theErrCode,theMessage,theCStr,theLongInt)	\
 | 
			
		||||
{																					\
 | 
			
		||||
	if (theErrCode != noErr)														\
 | 
			
		||||
	{																				\
 | 
			
		||||
		SetErrorMessageAndCStrAndLongInt(theMessage,theCStr,theLongInt);			\
 | 
			
		||||
		errCode = theErrCode;														\
 | 
			
		||||
		goto EXITPOINT;																\
 | 
			
		||||
	}																				\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrorMessageAndCStrAndBail(theMessage,theCStr)							\
 | 
			
		||||
{																					\
 | 
			
		||||
	SetErrorMessageAndCStr(theMessage,theCStr);										\
 | 
			
		||||
	errCode = kGenericError;														\
 | 
			
		||||
	goto EXITPOINT;																	\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrorMessageAndBailIfError(theErrCode,theMessage)						\
 | 
			
		||||
{																					\
 | 
			
		||||
	if (theErrCode != noErr)														\
 | 
			
		||||
	{																				\
 | 
			
		||||
		SetErrorMessage(theMessage);												\
 | 
			
		||||
		errCode = theErrCode;														\
 | 
			
		||||
		goto EXITPOINT;																\
 | 
			
		||||
	}																				\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrorMessageAndLongIntAndBailIfNil(theArg,theMessage,theLongInt)			\
 | 
			
		||||
{																					\
 | 
			
		||||
	if (theArg == nil)																\
 | 
			
		||||
	{																				\
 | 
			
		||||
		SetErrorMessageAndAppendLongInt(theMessage,theLongInt);						\
 | 
			
		||||
		errCode = kGenericError;													\
 | 
			
		||||
		goto EXITPOINT;																\
 | 
			
		||||
	}																				\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define BailIfError(theErrCode)														\
 | 
			
		||||
{																					\
 | 
			
		||||
	if ((theErrCode) != noErr)														\
 | 
			
		||||
	{																				\
 | 
			
		||||
		goto EXITPOINT;																\
 | 
			
		||||
	}																				\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrCodeAndBail(theErrCode)												\
 | 
			
		||||
{																					\
 | 
			
		||||
	errCode = theErrCode;															\
 | 
			
		||||
																					\
 | 
			
		||||
	goto EXITPOINT;																	\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SetErrorCodeAndMessageAndBail(theErrCode,theMessage)						\
 | 
			
		||||
{																					\
 | 
			
		||||
	SetErrorMessage(theMessage);													\
 | 
			
		||||
	errCode = theErrCode;															\
 | 
			
		||||
	goto EXITPOINT;																	\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define BailNow()																	\
 | 
			
		||||
{																					\
 | 
			
		||||
	errCode = kGenericError;														\
 | 
			
		||||
	goto EXITPOINT;																	\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										209
									
								
								MacOS/GetHTTPS.src/GetHTTPS.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										209
									
								
								MacOS/GetHTTPS.src/GetHTTPS.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,209 @@
 | 
			
		||||
/*
 | 
			
		||||
 *	An demo illustrating how to retrieve a URI from a secure HTTP server.
 | 
			
		||||
 *
 | 
			
		||||
 *	Author: 	Roy Wood
 | 
			
		||||
 *	Date:		September 7, 1999
 | 
			
		||||
 *	Comments:	This relies heavily on my MacSockets library.
 | 
			
		||||
 *				This project is also set up so that it expects the OpenSSL source folder (0.9.4 as I write this)
 | 
			
		||||
 *				to live in a folder called "OpenSSL-0.9.4" in this project's parent folder.  For example:
 | 
			
		||||
 *
 | 
			
		||||
 *					Macintosh HD:
 | 
			
		||||
 *						Development:
 | 
			
		||||
 *							OpenSSL-0.9.4:
 | 
			
		||||
 *								(OpenSSL sources here)
 | 
			
		||||
 *							OpenSSL Example:
 | 
			
		||||
 *								(OpenSSL example junk here)
 | 
			
		||||
 *
 | 
			
		||||
 *
 | 
			
		||||
 *				Also-- before attempting to compile this, make sure the aliases in "OpenSSL-0.9.4:include:openssl" 
 | 
			
		||||
 *				are installed!  Use the AppleScript applet in the "openssl-0.9.4" folder to do this!
 | 
			
		||||
 */
 | 
			
		||||
/* modified to seed the PRNG */
 | 
			
		||||
/* modified to use CRandomizer for seeding */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//	Include some funky libs I've developed over time
 | 
			
		||||
 | 
			
		||||
#include "CPStringUtils.hpp"
 | 
			
		||||
#include "ErrorHandling.hpp"
 | 
			
		||||
#include "MacSocket.h"
 | 
			
		||||
#include "Randomizer.h"
 | 
			
		||||
 | 
			
		||||
//	We use the OpenSSL implementation of SSL....
 | 
			
		||||
//	This was a lot of work to finally get going, though you wouldn't know it by the results!
 | 
			
		||||
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
 | 
			
		||||
#include <timer.h>
 | 
			
		||||
 | 
			
		||||
//	Let's try grabbing some data from here:
 | 
			
		||||
 | 
			
		||||
#define kHTTPS_DNS		"www.apache-ssl.org"
 | 
			
		||||
#define kHTTPS_Port		443
 | 
			
		||||
#define kHTTPS_URI		"/"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//	Forward-declare this
 | 
			
		||||
 | 
			
		||||
OSErr MyMacSocket_IdleWaitCallback(void *inUserRefPtr);
 | 
			
		||||
 | 
			
		||||
//	My idle-wait callback.  Doesn't do much, does it?  Silly cooperative multitasking.
 | 
			
		||||
 | 
			
		||||
OSErr MyMacSocket_IdleWaitCallback(void *inUserRefPtr)
 | 
			
		||||
{
 | 
			
		||||
#pragma unused(inUserRefPtr)
 | 
			
		||||
 | 
			
		||||
EventRecord		theEvent;
 | 
			
		||||
	::EventAvail(everyEvent,&theEvent);
 | 
			
		||||
	
 | 
			
		||||
	CRandomizer *randomizer = (CRandomizer*)inUserRefPtr;
 | 
			
		||||
	if (randomizer)
 | 
			
		||||
		randomizer->PeriodicAction();
 | 
			
		||||
 | 
			
		||||
	return(noErr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//	Finally!
 | 
			
		||||
 | 
			
		||||
void main(void)
 | 
			
		||||
{
 | 
			
		||||
	OSErr				errCode;
 | 
			
		||||
	int					theSocket = -1;
 | 
			
		||||
	int					theTimeout = 30;
 | 
			
		||||
 | 
			
		||||
	SSL_CTX				*ssl_ctx = nil;
 | 
			
		||||
	SSL					*ssl = nil;
 | 
			
		||||
 | 
			
		||||
	char				tempString[256];
 | 
			
		||||
	UnsignedWide		microTickCount;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	CRandomizer randomizer;
 | 
			
		||||
	
 | 
			
		||||
	printf("OpenSSL Demo by Roy Wood, roy@centricsystems.ca\n\n");
 | 
			
		||||
	
 | 
			
		||||
	BailIfError(errCode = MacSocket_Startup());
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//	Create a socket-like object
 | 
			
		||||
	
 | 
			
		||||
	BailIfError(errCode = MacSocket_socket(&theSocket,false,theTimeout * 60,MyMacSocket_IdleWaitCallback,&randomizer));
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	//	Set up the connect string and try to connect
 | 
			
		||||
	
 | 
			
		||||
	CopyCStrAndInsertCStrLongIntIntoCStr("%s:%ld",kHTTPS_DNS,kHTTPS_Port,tempString,sizeof(tempString));
 | 
			
		||||
	
 | 
			
		||||
	printf("Connecting to %s....\n",tempString);
 | 
			
		||||
 | 
			
		||||
	BailIfError(errCode = MacSocket_connect(theSocket,tempString));
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	//	Init SSL stuff
 | 
			
		||||
	
 | 
			
		||||
	SSL_load_error_strings();
 | 
			
		||||
	
 | 
			
		||||
	SSLeay_add_ssl_algorithms();
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	//	Pick the SSL method
 | 
			
		||||
	
 | 
			
		||||
//	ssl_ctx = SSL_CTX_new(SSLv2_client_method());
 | 
			
		||||
	ssl_ctx = SSL_CTX_new(SSLv23_client_method());
 | 
			
		||||
//	ssl_ctx = SSL_CTX_new(SSLv3_client_method());
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
	//	Create an SSL thingey and try to negotiate the connection
 | 
			
		||||
	
 | 
			
		||||
	ssl = SSL_new(ssl_ctx);
 | 
			
		||||
	
 | 
			
		||||
	SSL_set_fd(ssl,theSocket);
 | 
			
		||||
	
 | 
			
		||||
	errCode = SSL_connect(ssl);
 | 
			
		||||
	
 | 
			
		||||
	if (errCode < 0)
 | 
			
		||||
	{
 | 
			
		||||
		SetErrorMessageAndLongIntAndBail("OpenSSL: Can't initiate SSL connection, SSL_connect() = ",errCode);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	//	Request the URI from the host
 | 
			
		||||
	
 | 
			
		||||
	CopyCStrToCStr("GET ",tempString,sizeof(tempString));
 | 
			
		||||
	ConcatCStrToCStr(kHTTPS_URI,tempString,sizeof(tempString));
 | 
			
		||||
	ConcatCStrToCStr(" HTTP/1.0\r\n\r\n",tempString,sizeof(tempString));
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	errCode = SSL_write(ssl,tempString,CStrLength(tempString));
 | 
			
		||||
	
 | 
			
		||||
	if (errCode < 0)
 | 
			
		||||
	{
 | 
			
		||||
		SetErrorMessageAndLongIntAndBail("OpenSSL: Error writing data via ssl, SSL_write() = ",errCode);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	for (;;)
 | 
			
		||||
	{
 | 
			
		||||
	char	tempString[256];
 | 
			
		||||
	int		bytesRead;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		//	Read some bytes and dump them to the console
 | 
			
		||||
		
 | 
			
		||||
		bytesRead = SSL_read(ssl,tempString,sizeof(tempString) - 1);
 | 
			
		||||
		
 | 
			
		||||
		if (bytesRead == 0 && MacSocket_RemoteEndIsClosing(theSocket))
 | 
			
		||||
		{
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		else if (bytesRead < 0)
 | 
			
		||||
		{
 | 
			
		||||
			SetErrorMessageAndLongIntAndBail("OpenSSL: Error reading data via ssl, SSL_read() = ",bytesRead);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		tempString[bytesRead] = '\0';
 | 
			
		||||
		
 | 
			
		||||
		printf("%s", tempString);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	printf("\n\n\n");
 | 
			
		||||
	
 | 
			
		||||
	//	All done!
 | 
			
		||||
	
 | 
			
		||||
	errCode = noErr;
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
EXITPOINT:
 | 
			
		||||
 | 
			
		||||
	//	Clean up and go home
 | 
			
		||||
	
 | 
			
		||||
	if (theSocket >= 0)
 | 
			
		||||
	{
 | 
			
		||||
		MacSocket_close(theSocket);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (ssl != nil)
 | 
			
		||||
	{
 | 
			
		||||
		SSL_free(ssl);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (ssl_ctx != nil)
 | 
			
		||||
	{
 | 
			
		||||
		SSL_CTX_free(ssl_ctx);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	if (errCode != noErr)
 | 
			
		||||
	{
 | 
			
		||||
		printf("An error occurred:\n");
 | 
			
		||||
		
 | 
			
		||||
		printf("%s",GetErrorMessage());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	MacSocket_Shutdown();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1607
									
								
								MacOS/GetHTTPS.src/MacSocket.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1607
									
								
								MacOS/GetHTTPS.src/MacSocket.cpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										104
									
								
								MacOS/GetHTTPS.src/MacSocket.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								MacOS/GetHTTPS.src/MacSocket.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,104 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    kMacSocket_TimeoutErr = -2
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Since MacSocket does busy waiting, I do a callback while waiting
 | 
			
		||||
 | 
			
		||||
typedef OSErr(*MacSocket_IdleWaitCallback) (void *);
 | 
			
		||||
 | 
			
		||||
// Call this before anything else!
 | 
			
		||||
 | 
			
		||||
OSErr MacSocket_Startup(void);
 | 
			
		||||
 | 
			
		||||
// Call this to cleanup before quitting
 | 
			
		||||
 | 
			
		||||
OSErr MacSocket_Shutdown(void);
 | 
			
		||||
 | 
			
		||||
// Call this to allocate a "socket" (reference number is returned in
 | 
			
		||||
// outSocketNum)
 | 
			
		||||
// Note that inDoThreadSwitching is pretty much irrelevant right now, since I
 | 
			
		||||
// ignore it
 | 
			
		||||
// The inTimeoutTicks parameter is applied during reads/writes of data
 | 
			
		||||
// The inIdleWaitCallback parameter specifies a callback which is called
 | 
			
		||||
// during busy-waiting periods
 | 
			
		||||
// The inUserRefPtr parameter is passed back to the idle-wait callback
 | 
			
		||||
 | 
			
		||||
OSErr MacSocket_socket(int *outSocketNum, const Boolean inDoThreadSwitching,
 | 
			
		||||
                       const long inTimeoutTicks,
 | 
			
		||||
                       MacSocket_IdleWaitCallback inIdleWaitCallback,
 | 
			
		||||
                       void *inUserRefPtr);
 | 
			
		||||
 | 
			
		||||
// Call this to connect to an IP/DNS address
 | 
			
		||||
// Note that inTargetAddressAndPort is in "IP:port" format-- e.g.
 | 
			
		||||
// 10.1.1.1:123
 | 
			
		||||
 | 
			
		||||
OSErr MacSocket_connect(const int inSocketNum, char *inTargetAddressAndPort);
 | 
			
		||||
 | 
			
		||||
// Call this to listen on a port
 | 
			
		||||
// Since this a low-performance implementation, I allow a maximum of 1 (one!)
 | 
			
		||||
// incoming request when I listen
 | 
			
		||||
 | 
			
		||||
OSErr MacSocket_listen(const int inSocketNum, const int inPortNum);
 | 
			
		||||
 | 
			
		||||
// Call this to close a socket
 | 
			
		||||
 | 
			
		||||
OSErr MacSocket_close(const int inSocketNum);
 | 
			
		||||
 | 
			
		||||
// Call this to receive data on a socket
 | 
			
		||||
// Most parameters' purpose are obvious-- except maybe "inBlock" which
 | 
			
		||||
// controls whether I wait for data or return immediately
 | 
			
		||||
 | 
			
		||||
int MacSocket_recv(const int inSocketNum, void *outBuff, int outBuffLength,
 | 
			
		||||
                   const Boolean inBlock);
 | 
			
		||||
 | 
			
		||||
// Call this to send data on a socket
 | 
			
		||||
 | 
			
		||||
int MacSocket_send(const int inSocketNum, const void *inBuff,
 | 
			
		||||
                   int inBuffLength);
 | 
			
		||||
 | 
			
		||||
// If zero bytes were read in a call to MacSocket_recv(), it may be that the
 | 
			
		||||
// remote end has done a half-close
 | 
			
		||||
// This function will let you check whether that's true or not
 | 
			
		||||
 | 
			
		||||
Boolean MacSocket_RemoteEndIsClosing(const int inSocketNum);
 | 
			
		||||
 | 
			
		||||
// Call this to see if the listen has completed after a call to
 | 
			
		||||
// MacSocket_listen()
 | 
			
		||||
 | 
			
		||||
Boolean MacSocket_ListenCompleted(const int inSocketNum);
 | 
			
		||||
 | 
			
		||||
// These really aren't very useful anymore
 | 
			
		||||
 | 
			
		||||
Boolean MacSocket_LocalEndIsOpen(const int inSocketNum);
 | 
			
		||||
Boolean MacSocket_RemoteEndIsOpen(const int inSocketNum);
 | 
			
		||||
 | 
			
		||||
// You may wish to change the userRefPtr for a socket callback-- use this to
 | 
			
		||||
// do it
 | 
			
		||||
 | 
			
		||||
void MacSocket_SetUserRefPtr(const int inSocketNum, void *inNewRefPtr);
 | 
			
		||||
 | 
			
		||||
// Call these to get the socket's IP:port descriptor
 | 
			
		||||
 | 
			
		||||
void MacSocket_GetLocalIPAndPort(const int inSocketNum, char *outIPAndPort,
 | 
			
		||||
                                 const int inIPAndPortLength);
 | 
			
		||||
void MacSocket_GetRemoteIPAndPort(const int inSocketNum, char *outIPAndPort,
 | 
			
		||||
                                  const int inIPAndPortLength);
 | 
			
		||||
 | 
			
		||||
// Call this to get error info from a socket
 | 
			
		||||
 | 
			
		||||
void MacSocket_GetSocketErrorInfo(const int inSocketNum,
 | 
			
		||||
                                  int *outSocketErrCode,
 | 
			
		||||
                                  char *outSocketErrString,
 | 
			
		||||
                                  const int inSocketErrStringMaxLength);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										4940
									
								
								MacOS/OpenSSL.mcp.hqx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4940
									
								
								MacOS/OpenSSL.mcp.hqx
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										476
									
								
								MacOS/Randomizer.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										476
									
								
								MacOS/Randomizer.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,476 @@
 | 
			
		||||
/* 
 | 
			
		||||
------- Strong random data generation on a Macintosh (pre - OS X) ------
 | 
			
		||||
		
 | 
			
		||||
--	GENERAL: We aim to generate unpredictable bits without explicit
 | 
			
		||||
	user interaction. A general review of the problem may be found
 | 
			
		||||
	in RFC 1750, "Randomness Recommendations for Security", and some
 | 
			
		||||
	more discussion, of general and Mac-specific issues has appeared
 | 
			
		||||
	in "Using and Creating Cryptographic- Quality Random Numbers" by
 | 
			
		||||
	Jon Callas (www.merrymeet.com/jon/usingrandom.html).
 | 
			
		||||
 | 
			
		||||
	The data and entropy estimates provided below are based on my
 | 
			
		||||
	limited experimentation and estimates, rather than by any
 | 
			
		||||
	rigorous study, and the entropy estimates tend to be optimistic.
 | 
			
		||||
	They should not be considered absolute.
 | 
			
		||||
 | 
			
		||||
	Some of the information being collected may be correlated in
 | 
			
		||||
	subtle ways. That includes mouse positions, timings, and disk
 | 
			
		||||
	size measurements. Some obvious correlations will be eliminated
 | 
			
		||||
	by the programmer, but other, weaker ones may remain. The
 | 
			
		||||
	reliability of the code depends on such correlations being
 | 
			
		||||
	poorly understood, both by us and by potential interceptors.
 | 
			
		||||
 | 
			
		||||
	This package has been planned to be used with OpenSSL, v. 0.9.5.
 | 
			
		||||
	It requires the OpenSSL function RAND_add. 
 | 
			
		||||
 | 
			
		||||
--	OTHER WORK: Some source code and other details have been
 | 
			
		||||
	published elsewhere, but I haven't found any to be satisfactory
 | 
			
		||||
	for the Mac per se:
 | 
			
		||||
 | 
			
		||||
	* The Linux random number generator (by Theodore Ts'o, in
 | 
			
		||||
	  drivers/char/random.c), is a carefully designed open-source
 | 
			
		||||
	  crypto random number package. It collects data from a variety
 | 
			
		||||
	  of sources, including mouse, keyboard and other interrupts.
 | 
			
		||||
	  One nice feature is that it explicitly estimates the entropy
 | 
			
		||||
	  of the data it collects. Some of its features (e.g. interrupt
 | 
			
		||||
	  timing) cannot be reliably exported to the Mac without using
 | 
			
		||||
	  undocumented APIs.
 | 
			
		||||
 | 
			
		||||
	* Truerand by Don P. Mitchell and Matt Blaze uses variations
 | 
			
		||||
	  between different timing mechanisms on the same system. This
 | 
			
		||||
	  has not been tested on the Mac, but requires preemptive
 | 
			
		||||
	  multitasking, and is hardware-dependent, and can't be relied
 | 
			
		||||
	  on to work well if only one oscillator is present.
 | 
			
		||||
 | 
			
		||||
	* Cryptlib's RNG for the Mac (RNDMAC.C by Peter Gutmann),
 | 
			
		||||
	  gathers a lot of information about the machine and system
 | 
			
		||||
	  environment. Unfortunately, much of it is constant from one
 | 
			
		||||
	  startup to the next. In other words, the random seed could be
 | 
			
		||||
	  the same from one day to the next. Some of the APIs are
 | 
			
		||||
	  hardware-dependent, and not all are compatible with Carbon (OS
 | 
			
		||||
	  X). Incidentally, the EGD library is based on the UNIX entropy
 | 
			
		||||
	  gathering methods in cryptlib, and isn't suitable for MacOS
 | 
			
		||||
	  either.
 | 
			
		||||
 | 
			
		||||
	* Mozilla (and perhaps earlier versions of Netscape) uses the
 | 
			
		||||
	  time of day (in seconds) and an uninitialized local variable
 | 
			
		||||
	  to seed the random number generator. The time of day is known
 | 
			
		||||
	  to an outside interceptor (to within the accuracy of the
 | 
			
		||||
	  system clock). The uninitialized variable could easily be
 | 
			
		||||
	  identical between subsequent launches of an application, if it
 | 
			
		||||
	  is reached through the same path.
 | 
			
		||||
 | 
			
		||||
	* OpenSSL provides the function RAND_screen(), by G. van
 | 
			
		||||
	  Oosten, which hashes the contents of the screen to generate a
 | 
			
		||||
	  seed. This is not useful for an extension or for an
 | 
			
		||||
	  application which launches at startup time, since the screen
 | 
			
		||||
	  is likely to look identical from one launch to the next. This
 | 
			
		||||
	  method is also rather slow.
 | 
			
		||||
 | 
			
		||||
	* Using variations in disk drive seek times has been proposed
 | 
			
		||||
	  (Davis, Ihaka and Fenstermacher, world.std.com/~dtd/;
 | 
			
		||||
	  Jakobsson, Shriver, Hillyer and Juels,
 | 
			
		||||
	  www.bell-labs.com/user/shriver/random.html). These variations
 | 
			
		||||
	  appear to be due to air turbulence inside the disk drive
 | 
			
		||||
	  mechanism, and are very strongly unpredictable. Unfortunately
 | 
			
		||||
	  this technique is slow, and some implementations of it may be
 | 
			
		||||
	  patented (see Shriver's page above.) It of course cannot be
 | 
			
		||||
	  used with a RAM disk.
 | 
			
		||||
 | 
			
		||||
--	TIMING: On the 601 PowerPC the time base register is guaranteed
 | 
			
		||||
	to change at least once every 10 addi instructions, i.e. 10
 | 
			
		||||
	cycles. On a 60 MHz machine (slowest PowerPC) this translates to
 | 
			
		||||
	a resolution of 1/6 usec. Newer machines seem to be using a 10
 | 
			
		||||
	cycle resolution as well.
 | 
			
		||||
	
 | 
			
		||||
	For 68K Macs, the Microseconds() call may be used. See Develop
 | 
			
		||||
	issue 29 on the Apple developer site
 | 
			
		||||
	(developer.apple.com/dev/techsupport/develop/issue29/minow.html)
 | 
			
		||||
	for information on its accuracy and resolution. The code below
 | 
			
		||||
	has been tested only on PowerPC based machines.
 | 
			
		||||
 | 
			
		||||
	The time from machine startup to the launch of an application in
 | 
			
		||||
	the startup folder has a variance of about 1.6 msec on a new G4
 | 
			
		||||
	machine with a defragmented and optimized disk, most extensions
 | 
			
		||||
	off and no icons on the desktop. This can be reasonably taken as
 | 
			
		||||
	a lower bound on the variance. Most of this variation is likely
 | 
			
		||||
	due to disk seek time variability. The distribution of startup
 | 
			
		||||
	times is probably not entirely even or uncorrelated. This needs
 | 
			
		||||
	to be investigated, but I am guessing that it not a majpor
 | 
			
		||||
	problem. Entropy = log2 (1600/0.166) ~= 13 bits on a 60 MHz
 | 
			
		||||
	machine, ~16 bits for a 450 MHz machine.
 | 
			
		||||
 | 
			
		||||
	User-launched application startup times will have a variance of
 | 
			
		||||
	a second or more relative to machine startup time. Entropy >~22
 | 
			
		||||
	bits.
 | 
			
		||||
 | 
			
		||||
	Machine startup time is available with a 1-second resolution. It
 | 
			
		||||
	is predictable to no better a minute or two, in the case of
 | 
			
		||||
	people who show up punctually to work at the same time and
 | 
			
		||||
	immediately start their computer. Using the scheduled startup
 | 
			
		||||
	feature (when available) will cause the machine to start up at
 | 
			
		||||
	the same time every day, making the value predictable. Entropy
 | 
			
		||||
	>~7 bits, or 0 bits with scheduled startup.
 | 
			
		||||
 | 
			
		||||
	The time of day is of course known to an outsider and thus has 0
 | 
			
		||||
	entropy if the system clock is regularly calibrated.
 | 
			
		||||
 | 
			
		||||
--	KEY TIMING: A  very fast typist (120 wpm) will have a typical
 | 
			
		||||
	inter-key timing interval of 100 msec. We can assume a variance
 | 
			
		||||
	of no less than 2 msec -- maybe. Do good typists have a constant
 | 
			
		||||
	rhythm, like drummers? Since what we measure is not the
 | 
			
		||||
	key-generated interrupt but the time at which the key event was
 | 
			
		||||
	taken off the event queue, our resolution is roughly the time
 | 
			
		||||
	between process switches, at best 1 tick (17 msec). I  therefore
 | 
			
		||||
	consider this technique questionable and not very useful for
 | 
			
		||||
	obtaining high entropy data on the Mac.
 | 
			
		||||
 | 
			
		||||
--	MOUSE POSITION AND TIMING: The high bits of the mouse position
 | 
			
		||||
	are far from arbitrary, since the mouse tends to stay in a few
 | 
			
		||||
	limited areas of the screen. I am guessing that the position of
 | 
			
		||||
	the mouse is arbitrary within a 6 pixel square. Since the mouse
 | 
			
		||||
	stays still for long periods of time, it should be sampled only
 | 
			
		||||
	after it was moved, to avoid correlated data. This gives an
 | 
			
		||||
	entropy of log2(6*6) ~= 5 bits per measurement.
 | 
			
		||||
 | 
			
		||||
	The time during which the mouse stays still can vary from zero
 | 
			
		||||
	to, say, 5 seconds (occasionally longer). If the still time is
 | 
			
		||||
	measured by sampling the mouse during null events, and null
 | 
			
		||||
	events are received once per tick, its resolution is 1/60th of a
 | 
			
		||||
	second, giving an entropy of log2 (60*5) ~= 8 bits per
 | 
			
		||||
	measurement. Since the distribution of still times is uneven,
 | 
			
		||||
	this estimate is on the high side.
 | 
			
		||||
 | 
			
		||||
	For simplicity and compatibility across system versions, the
 | 
			
		||||
	mouse is to be sampled explicitly (e.g. in the event loop),
 | 
			
		||||
	rather than in a time manager task.
 | 
			
		||||
 | 
			
		||||
--	STARTUP DISK TOTAL FILE SIZE: Varies typically by at least 20k
 | 
			
		||||
	from one startup to the next, with 'minimal' computer use. Won't
 | 
			
		||||
	vary at all if machine is started again immediately after
 | 
			
		||||
	startup (unless virtual memory is on), but any application which
 | 
			
		||||
	uses the web and caches information to disk is likely to cause
 | 
			
		||||
	this much variation or more. The variation is probably not
 | 
			
		||||
	random, but I don't know in what way. File sizes tend to be
 | 
			
		||||
	divisible by 4 bytes since file format fields are often
 | 
			
		||||
	long-aligned. Entropy > log2 (20000/4) ~= 12 bits.
 | 
			
		||||
	
 | 
			
		||||
--	STARTUP DISK FIRST AVAILABLE ALLOCATION BLOCK: As the volume
 | 
			
		||||
	gets fragmented this could be anywhere in principle. In a
 | 
			
		||||
	perfectly unfragmented volume this will be strongly correlated
 | 
			
		||||
	with the total file size on the disk. With more fragmentation
 | 
			
		||||
	comes less certainty. I took the variation in this value to be
 | 
			
		||||
	1/8 of the total file size on the volume.
 | 
			
		||||
 | 
			
		||||
--	SYSTEM REQUIREMENTS: The code here requires System 7.0 and above
 | 
			
		||||
	(for Gestalt and Microseconds calls). All the calls used are
 | 
			
		||||
	Carbon-compatible.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*------------------------------ Includes ----------------------------*/
 | 
			
		||||
 | 
			
		||||
#include "Randomizer.h"
 | 
			
		||||
 | 
			
		||||
// Mac OS API
 | 
			
		||||
#include <Files.h>
 | 
			
		||||
#include <Folders.h>
 | 
			
		||||
#include <Events.h>
 | 
			
		||||
#include <Processes.h>
 | 
			
		||||
#include <Gestalt.h>
 | 
			
		||||
#include <Resources.h>
 | 
			
		||||
#include <LowMem.h>
 | 
			
		||||
 | 
			
		||||
// Standard C library
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
/*---------------------- Function declarations -----------------------*/
 | 
			
		||||
 | 
			
		||||
// declared in OpenSSL/crypto/rand/rand.h
 | 
			
		||||
extern "C" void RAND_add (const void *buf, int num, double entropy);
 | 
			
		||||
 | 
			
		||||
unsigned long GetPPCTimer (bool is601);	// Make it global if needed
 | 
			
		||||
					// elsewhere
 | 
			
		||||
 | 
			
		||||
/*---------------------------- Constants -----------------------------*/
 | 
			
		||||
 | 
			
		||||
#define kMouseResolution 6		// Mouse position has to differ
 | 
			
		||||
					// from the last one by this
 | 
			
		||||
					// much to be entered
 | 
			
		||||
#define kMousePositionEntropy 5.16	// log2 (kMouseResolution**2)
 | 
			
		||||
#define kTypicalMouseIdleTicks 300.0	// I am guessing that a typical
 | 
			
		||||
					// amount of time between mouse
 | 
			
		||||
					// moves is 5 seconds
 | 
			
		||||
#define kVolumeBytesEntropy 12.0	// about log2 (20000/4),
 | 
			
		||||
					// assuming a variation of 20K
 | 
			
		||||
					// in total file size and
 | 
			
		||||
					// long-aligned file formats.
 | 
			
		||||
#define kApplicationUpTimeEntropy 6.0	// Variance > 1 second, uptime
 | 
			
		||||
					// in ticks  
 | 
			
		||||
#define kSysStartupEntropy 7.0		// Entropy for machine startup
 | 
			
		||||
					// time
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*------------------------ Function definitions ----------------------*/
 | 
			
		||||
 | 
			
		||||
CRandomizer::CRandomizer (void)
 | 
			
		||||
{
 | 
			
		||||
	long	result;
 | 
			
		||||
	
 | 
			
		||||
	mSupportsLargeVolumes =
 | 
			
		||||
		(Gestalt(gestaltFSAttr, &result) == noErr) &&
 | 
			
		||||
		((result & (1L << gestaltFSSupports2TBVols)) != 0);
 | 
			
		||||
	
 | 
			
		||||
	if (Gestalt (gestaltNativeCPUtype, &result) != noErr)
 | 
			
		||||
	{
 | 
			
		||||
		mIsPowerPC = false;
 | 
			
		||||
		mIs601 = false;
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		mIs601 = (result == gestaltCPU601);
 | 
			
		||||
		mIsPowerPC = (result >= gestaltCPU601);
 | 
			
		||||
	}
 | 
			
		||||
	mLastMouse.h = mLastMouse.v = -10;	// First mouse will
 | 
			
		||||
						// always be recorded
 | 
			
		||||
	mLastPeriodicTicks = TickCount();
 | 
			
		||||
	GetTimeBaseResolution ();
 | 
			
		||||
	
 | 
			
		||||
	// Add initial entropy
 | 
			
		||||
	AddTimeSinceMachineStartup ();
 | 
			
		||||
	AddAbsoluteSystemStartupTime ();
 | 
			
		||||
	AddStartupVolumeInfo ();
 | 
			
		||||
	AddFiller ();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CRandomizer::PeriodicAction (void)
 | 
			
		||||
{
 | 
			
		||||
	AddCurrentMouse ();
 | 
			
		||||
	AddNow (0.0);	// Should have a better entropy estimate here
 | 
			
		||||
	mLastPeriodicTicks = TickCount();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*------------------------- Private Methods --------------------------*/
 | 
			
		||||
 | 
			
		||||
void CRandomizer::AddCurrentMouse (void)
 | 
			
		||||
{
 | 
			
		||||
	Point mouseLoc;
 | 
			
		||||
	unsigned long lastCheck;	// Ticks since mouse was last
 | 
			
		||||
					// sampled
 | 
			
		||||
 | 
			
		||||
#if TARGET_API_MAC_CARBON
 | 
			
		||||
	GetGlobalMouse (&mouseLoc);
 | 
			
		||||
#else
 | 
			
		||||
	mouseLoc = LMGetMouseLocation();
 | 
			
		||||
#endif
 | 
			
		||||
	
 | 
			
		||||
	if (labs (mLastMouse.h - mouseLoc.h) > kMouseResolution/2 &&
 | 
			
		||||
	    labs (mLastMouse.v - mouseLoc.v) > kMouseResolution/2)
 | 
			
		||||
		AddBytes (&mouseLoc, sizeof (mouseLoc),
 | 
			
		||||
				kMousePositionEntropy);
 | 
			
		||||
	
 | 
			
		||||
	if (mLastMouse.h == mouseLoc.h && mLastMouse.v == mouseLoc.v)
 | 
			
		||||
		mMouseStill ++;
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		double entropy;
 | 
			
		||||
		
 | 
			
		||||
		// Mouse has moved. Add the number of measurements for
 | 
			
		||||
		// which it's been still. If the resolution is too
 | 
			
		||||
		// coarse, assume the entropy is 0.
 | 
			
		||||
 | 
			
		||||
		lastCheck = TickCount() - mLastPeriodicTicks;
 | 
			
		||||
		if (lastCheck <= 0)
 | 
			
		||||
			lastCheck = 1;
 | 
			
		||||
		entropy = log2l
 | 
			
		||||
			(kTypicalMouseIdleTicks/(double)lastCheck);
 | 
			
		||||
		if (entropy < 0.0)
 | 
			
		||||
			entropy = 0.0;
 | 
			
		||||
		AddBytes (&mMouseStill, sizeof (mMouseStill), entropy);
 | 
			
		||||
		mMouseStill = 0;
 | 
			
		||||
	}
 | 
			
		||||
	mLastMouse = mouseLoc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CRandomizer::AddAbsoluteSystemStartupTime (void)
 | 
			
		||||
{
 | 
			
		||||
	unsigned long	now;		// Time in seconds since
 | 
			
		||||
					// 1/1/1904
 | 
			
		||||
	GetDateTime (&now);
 | 
			
		||||
	now -= TickCount() / 60;	// Time in ticks since machine
 | 
			
		||||
					// startup
 | 
			
		||||
	AddBytes (&now, sizeof (now), kSysStartupEntropy);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CRandomizer::AddTimeSinceMachineStartup (void)
 | 
			
		||||
{
 | 
			
		||||
	AddNow (1.5);			// Uncertainty in app startup
 | 
			
		||||
					// time is > 1.5 msec (for
 | 
			
		||||
					// automated app startup).
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CRandomizer::AddAppRunningTime (void)
 | 
			
		||||
{
 | 
			
		||||
	ProcessSerialNumber PSN;
 | 
			
		||||
	ProcessInfoRec		ProcessInfo;
 | 
			
		||||
	
 | 
			
		||||
	ProcessInfo.processInfoLength = sizeof (ProcessInfoRec);
 | 
			
		||||
	ProcessInfo.processName = nil;
 | 
			
		||||
	ProcessInfo.processAppSpec = nil;
 | 
			
		||||
	
 | 
			
		||||
	GetCurrentProcess (&PSN);
 | 
			
		||||
	GetProcessInformation (&PSN, &ProcessInfo);
 | 
			
		||||
 | 
			
		||||
	// Now add the amount of time in ticks that the current process
 | 
			
		||||
	// has been active
 | 
			
		||||
 | 
			
		||||
	AddBytes (&ProcessInfo, sizeof (ProcessInfoRec),
 | 
			
		||||
			kApplicationUpTimeEntropy);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CRandomizer::AddStartupVolumeInfo (void)
 | 
			
		||||
{
 | 
			
		||||
	short			vRefNum;
 | 
			
		||||
	long			dirID;
 | 
			
		||||
	XVolumeParam	pb;
 | 
			
		||||
	OSErr			err;
 | 
			
		||||
	
 | 
			
		||||
	if (!mSupportsLargeVolumes)
 | 
			
		||||
		return;
 | 
			
		||||
		
 | 
			
		||||
	FindFolder (kOnSystemDisk, kSystemFolderType, kDontCreateFolder,
 | 
			
		||||
			&vRefNum, &dirID);
 | 
			
		||||
	pb.ioVRefNum = vRefNum;
 | 
			
		||||
	pb.ioCompletion = 0;
 | 
			
		||||
	pb.ioNamePtr = 0;
 | 
			
		||||
	pb.ioVolIndex = 0;
 | 
			
		||||
	err = PBXGetVolInfoSync (&pb);
 | 
			
		||||
	if (err != noErr)
 | 
			
		||||
		return;
 | 
			
		||||
		
 | 
			
		||||
	// Base the entropy on the amount of space used on the disk and
 | 
			
		||||
	// on the next available allocation block. A lot else might be
 | 
			
		||||
	// unpredictable, so might as well toss the whole block in. See
 | 
			
		||||
	// comments for entropy estimate justifications.
 | 
			
		||||
 | 
			
		||||
	AddBytes (&pb, sizeof (pb),
 | 
			
		||||
		kVolumeBytesEntropy +
 | 
			
		||||
		log2l (((pb.ioVTotalBytes.hi - pb.ioVFreeBytes.hi)
 | 
			
		||||
				* 4294967296.0D +
 | 
			
		||||
			(pb.ioVTotalBytes.lo - pb.ioVFreeBytes.lo))
 | 
			
		||||
				/ pb.ioVAlBlkSiz - 3.0));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
	On a typical startup CRandomizer will come up with about 60
 | 
			
		||||
	bits of good, unpredictable data. Assuming no more input will
 | 
			
		||||
	be available, we'll need some more lower-quality data to give
 | 
			
		||||
	OpenSSL the 128 bits of entropy it desires. AddFiller adds some
 | 
			
		||||
	relatively predictable data into the soup.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
void CRandomizer::AddFiller (void)
 | 
			
		||||
{
 | 
			
		||||
	struct
 | 
			
		||||
	{
 | 
			
		||||
		ProcessSerialNumber psn;	// Front process serial
 | 
			
		||||
						// number
 | 
			
		||||
		RGBColor	hiliteRGBValue;	// User-selected
 | 
			
		||||
						// highlight color
 | 
			
		||||
		long		processCount;	// Number of active
 | 
			
		||||
						// processes
 | 
			
		||||
		long		cpuSpeed;	// Processor speed
 | 
			
		||||
		long		totalMemory;	// Total logical memory
 | 
			
		||||
						// (incl. virtual one)
 | 
			
		||||
		long		systemVersion;	// OS version
 | 
			
		||||
		short		resFile;	// Current resource file
 | 
			
		||||
	} data;
 | 
			
		||||
	
 | 
			
		||||
	GetNextProcess ((ProcessSerialNumber*) kNoProcess);
 | 
			
		||||
	while (GetNextProcess (&data.psn) == noErr)
 | 
			
		||||
		data.processCount++;
 | 
			
		||||
	GetFrontProcess (&data.psn);
 | 
			
		||||
	LMGetHiliteRGB (&data.hiliteRGBValue);
 | 
			
		||||
	Gestalt (gestaltProcClkSpeed, &data.cpuSpeed);
 | 
			
		||||
	Gestalt (gestaltLogicalRAMSize, &data.totalMemory);
 | 
			
		||||
	Gestalt (gestaltSystemVersion, &data.systemVersion);
 | 
			
		||||
	data.resFile = CurResFile ();
 | 
			
		||||
	
 | 
			
		||||
	// Here we pretend to feed the PRNG completely random data. This
 | 
			
		||||
	// is of course false, as much of the above data is predictable
 | 
			
		||||
	// by an outsider. At this point we don't have any more
 | 
			
		||||
	// randomness to add, but with OpenSSL we must have a 128 bit
 | 
			
		||||
	// seed before we can start. We just add what we can, without a
 | 
			
		||||
	// real entropy estimate, and hope for the best.
 | 
			
		||||
 | 
			
		||||
	AddBytes (&data, sizeof(data), 8.0 * sizeof(data));
 | 
			
		||||
	AddCurrentMouse ();
 | 
			
		||||
	AddNow (1.0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------  LOW LEVEL ---------------------
 | 
			
		||||
 | 
			
		||||
void CRandomizer::AddBytes (void *data, long size, double entropy)
 | 
			
		||||
{
 | 
			
		||||
	RAND_add (data, size, entropy * 0.125);	// Convert entropy bits
 | 
			
		||||
						// to bytes
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CRandomizer::AddNow (double millisecondUncertainty)
 | 
			
		||||
{
 | 
			
		||||
	long time = SysTimer();
 | 
			
		||||
	AddBytes (&time, sizeof (time), log2l (millisecondUncertainty *
 | 
			
		||||
			mTimebaseTicksPerMillisec));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------- TIMING SUPPORT ------------------
 | 
			
		||||
 | 
			
		||||
void CRandomizer::GetTimeBaseResolution (void)
 | 
			
		||||
{	
 | 
			
		||||
#ifdef __powerc
 | 
			
		||||
	long speed;
 | 
			
		||||
	
 | 
			
		||||
	// gestaltProcClkSpeed available on System 7.5.2 and above
 | 
			
		||||
	if (Gestalt (gestaltProcClkSpeed, &speed) != noErr)
 | 
			
		||||
		// Only PowerPCs running pre-7.5.2 are 60-80 MHz
 | 
			
		||||
		// machines.
 | 
			
		||||
		mTimebaseTicksPerMillisec =  6000.0D;
 | 
			
		||||
	// Assume 10 cycles per clock update, as in 601 spec. Seems true
 | 
			
		||||
	// for later chips as well.
 | 
			
		||||
	mTimebaseTicksPerMillisec = speed / 1.0e4D;
 | 
			
		||||
#else
 | 
			
		||||
	// 68K VIA-based machines (see Develop Magazine no. 29)
 | 
			
		||||
	mTimebaseTicksPerMillisec = 783.360D;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsigned long CRandomizer::SysTimer (void)	// returns the lower 32
 | 
			
		||||
						// bit of the chip timer
 | 
			
		||||
{
 | 
			
		||||
#ifdef __powerc
 | 
			
		||||
	return GetPPCTimer (mIs601);
 | 
			
		||||
#else
 | 
			
		||||
	UnsignedWide usec;
 | 
			
		||||
	Microseconds (&usec);
 | 
			
		||||
	return usec.lo;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef __powerc
 | 
			
		||||
// The timebase is available through mfspr on 601, mftb on later chips.
 | 
			
		||||
// Motorola recommends that an 601 implementation map mftb to mfspr
 | 
			
		||||
// through an exception, but I haven't tested to see if MacOS actually
 | 
			
		||||
// does this. We only sample the lower 32 bits of the timer (i.e. a
 | 
			
		||||
// few minutes of resolution)
 | 
			
		||||
 | 
			
		||||
asm unsigned long GetPPCTimer (register bool is601)
 | 
			
		||||
{
 | 
			
		||||
	cmplwi	is601, 0	// Check if 601
 | 
			
		||||
	bne	_601		// if non-zero goto _601
 | 
			
		||||
	mftb  	r3		// Available on 603 and later.
 | 
			
		||||
	blr			// return with result in r3
 | 
			
		||||
_601:
 | 
			
		||||
	mfspr r3, spr5  	// Available on 601 only.
 | 
			
		||||
				// blr inserted automatically
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										42
									
								
								MacOS/Randomizer.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								MacOS/Randomizer.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
 | 
			
		||||
// Gathers unpredictable system data to be used for generating
 | 
			
		||||
// random bits
 | 
			
		||||
 | 
			
		||||
#include <MacTypes.h>
 | 
			
		||||
 | 
			
		||||
class CRandomizer {
 | 
			
		||||
 public:
 | 
			
		||||
    CRandomizer(void);
 | 
			
		||||
    void PeriodicAction(void);
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
 | 
			
		||||
    // Private calls
 | 
			
		||||
 | 
			
		||||
    void AddTimeSinceMachineStartup(void);
 | 
			
		||||
    void AddAbsoluteSystemStartupTime(void);
 | 
			
		||||
    void AddAppRunningTime(void);
 | 
			
		||||
    void AddStartupVolumeInfo(void);
 | 
			
		||||
    void AddFiller(void);
 | 
			
		||||
 | 
			
		||||
    void AddCurrentMouse(void);
 | 
			
		||||
    void AddNow(double millisecondUncertainty);
 | 
			
		||||
    void AddBytes(void *data, long size, double entropy);
 | 
			
		||||
 | 
			
		||||
    void GetTimeBaseResolution(void);
 | 
			
		||||
    unsigned long SysTimer(void);
 | 
			
		||||
 | 
			
		||||
    // System Info
 | 
			
		||||
    bool mSupportsLargeVolumes;
 | 
			
		||||
    bool mIsPowerPC;
 | 
			
		||||
    bool mIs601;
 | 
			
		||||
 | 
			
		||||
    // Time info
 | 
			
		||||
    double mTimebaseTicksPerMillisec;
 | 
			
		||||
    unsigned long mLastPeriodicTicks;
 | 
			
		||||
 | 
			
		||||
    // Mouse info
 | 
			
		||||
    long mSamplePeriod;
 | 
			
		||||
    Point mLastMouse;
 | 
			
		||||
    long mMouseStill;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										18
									
								
								MacOS/TODO
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								MacOS/TODO
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
-------------------------------------------------------------------
 | 
			
		||||
Verify server certificate
 | 
			
		||||
-------------------------------------------------------------------
 | 
			
		||||
Currently omitted from the project:
 | 
			
		||||
 | 
			
		||||
	crypto/tmdiff.c
 | 
			
		||||
	crypto/bio/bss_conn.c
 | 
			
		||||
	crypto/bio/b_sock.c
 | 
			
		||||
	crypto/bio/bss_acpt.c
 | 
			
		||||
	crypto/bio/bss_log.h
 | 
			
		||||
 | 
			
		||||
-------------------------------------------------------------------
 | 
			
		||||
Build libraries to link with...
 | 
			
		||||
-------------------------------------------------------------------
 | 
			
		||||
Port openssl application.
 | 
			
		||||
-------------------------------------------------------------------
 | 
			
		||||
BN optimizations (currently PPC version is compiled with BN_LLONG)
 | 
			
		||||
-------------------------------------------------------------------
 | 
			
		||||
							
								
								
									
										9
									
								
								MacOS/_MWERKS_GUSI_prefix.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								MacOS/_MWERKS_GUSI_prefix.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
#include <MacHeaders.h>
 | 
			
		||||
#define B_ENDIAN
 | 
			
		||||
#ifdef __POWERPC__
 | 
			
		||||
# pragma longlong on
 | 
			
		||||
#endif
 | 
			
		||||
#if 1
 | 
			
		||||
# define MAC_OS_GUSI_SOURCE
 | 
			
		||||
#endif
 | 
			
		||||
#define MONOLITH
 | 
			
		||||
							
								
								
									
										9
									
								
								MacOS/_MWERKS_prefix.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								MacOS/_MWERKS_prefix.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
#include <MacHeaders.h>
 | 
			
		||||
#define B_ENDIAN
 | 
			
		||||
#ifdef __POWERPC__
 | 
			
		||||
# pragma longlong on
 | 
			
		||||
#endif
 | 
			
		||||
#if 0
 | 
			
		||||
# define MAC_OS_GUSI_SOURCE
 | 
			
		||||
#endif
 | 
			
		||||
#define MONOLITH
 | 
			
		||||
							
								
								
									
										5
									
								
								MacOS/buildinf.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								MacOS/buildinf.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
#ifndef MK1MF_BUILD
 | 
			
		||||
# define CFLAGS        "-DB_ENDIAN"
 | 
			
		||||
# define PLATFORM      "macos"
 | 
			
		||||
# define DATE          "Sun Feb 27 19:44:16 MET 2000"
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										820
									
								
								MacOS/mklinks.as.hqx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										820
									
								
								MacOS/mklinks.as.hqx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,820 @@
 | 
			
		||||
(This file must be converted with BinHex 4.0)
 | 
			
		||||
 | 
			
		||||
:#QeVE'PZDh-ZBA-!39"36'&`E(3J!!!!!!!!!*LiI6m!!!!!!3!!!*G#!!#@3J!
 | 
			
		||||
!!AChFQPd!!!!K3)"!3m(Fh9`F'pbG!!!!)B#!3%$"(0eFQ8!!!#(!J-%"!3("3C
 | 
			
		||||
cGfPdBfJ!!!#)!J%"#39cH@jMD!!!!)N#"J%$!`-&"3-'FhPcG'9Y!!!!LJ)&"3)
 | 
			
		||||
%!J8("!-#!`4dB@*X!!!!L`))!3-$!`-$!`-$"(4PE'`!!!#-!J)"#38$G'KP!!!
 | 
			
		||||
!M3))(J)@!Ki#!J))!K)#!`)B!Kd%G'KPE3!!!)i#!J%&#`4dD'9j!!!!M`)#!J)
 | 
			
		||||
#$3TdD(*[G@GSEh9d!!!!N!!#!3%&"(4TCQB!!!#4!J%"!`4dD@eP!!!!NJ)"!JS
 | 
			
		||||
#!h4T!!!!'N!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!H!!!!!!!#!!!!!!
 | 
			
		||||
!!!!!!!!!!!!!rrrrr`!!!$3!!!!N!!!!!#"[!!5JAb"[!!5K++!M6R9$9'mJFR9
 | 
			
		||||
Z)(4SDA-JFf0bDA"d)'&`F'aTBf&dD@pZ,#"jEh8JEA9cG#"QDA*cG#"TER0dB@a
 | 
			
		||||
X)%&`F'aP8f0bDA"d,J!!!)C8D'Pc)(0MFQP`G#"MFQ9KG'9c)#iZ,fPZBfaeC'8
 | 
			
		||||
[Eh"PER0cE#"KEQ3JCQPXE(-JDA3JGfPdD#"ZC@0PFh0KFRNJB@aTBA0PFbi0$8P
 | 
			
		||||
d)'eTCfKd)(4KDf8JB5"hD'PXC5"dEb"MEfe`E'9dC5"cEb"`E'9KFf8JBQ8JF'&
 | 
			
		||||
dD@9ZG$SY+3!!!#S!!J!!!!!!$3!+!"!!!!!-!!!!!!!!!!!!63!0!!S!%!%!!!`
 | 
			
		||||
!!!!!!!!!!!!B!!!!+!!!!!!!!!!)!!!!)!#N2c`!!DR`!!!!l!!!!!&19[ri,`0
 | 
			
		||||
f!#m$-$bKVDG'*KmY52ri,`-`2+LITdBQ(b!ZrrLa`'FJ,`-J2'0`ER4"l[rm)NL
 | 
			
		||||
KV5+)*Kp+3'B)5Ulrr'F#GJ%3!bBZrr41ANje6PB!!#m-@Bm[2%j29%Nr2!#!U"m
 | 
			
		||||
SAb!-CJK`!cm!UFKJ+#m-UC)J9#!)d+J!'#&!!"JJ9#!)d+J!(#&!!"a9Mbm8)&q
 | 
			
		||||
JAMk!9%mSE[rm6Pj1G8j@!!![$%kkre4+!'FU@Bm[2'&`E(3[2(0MF(4`)DJU+&m
 | 
			
		||||
J$'F5@Bm[$#mm!!!!!A!!U#UTp&K26VVrG#KZrra1ANje!!!!('&`E(3!!!!"4P*
 | 
			
		||||
&4J!!!!!!J%P$6L-!!!!!!*B!!!!"!!!!!!G"8&"-!!!!!!!"!!!"!!!!!S!!!!4
 | 
			
		||||
!!!"i)!!!K"!!!3))!!)#"!!%"!)!#!J"!"!8!)!J)J"!3%%!)2#!J"#*!%!)KJ!
 | 
			
		||||
J")3!)!*!!"!")!!3!K!!%!3)!"!)"!!J%!)!3#!"!)"!!S%!J!5#!3!)4!)!#%J
 | 
			
		||||
%!!KB#!!%C"!!!m)J!!!"3!!!!)!!!!%!!!!$J!!!"m!!!(rJ!!$rm!!"rrJ!!rr
 | 
			
		||||
m!!IrrJ!2rrm!(rrrJ$rrrm"rrrrJrrrrm2rrrrMrrrrmrrrrrRrrrrmrrrrq(rr
 | 
			
		||||
rr!rrrrJ(rrr`!rrri!(rrm!$rrq!"rrr!!rrrJ!2rr`!$rri!!IRm!!$`q!!!!(
 | 
			
		||||
!!!!!J!!!!!)!!!!!!!!!!!m!!!!!!!!!!!!!!!!!!!$`m!!!!!!!!!!!!!!!!!!
 | 
			
		||||
2!!m!!!!!!!!!!!!!!!rrm!!!m!!!!!!!!!!!!!$`c0m!!!m!!!!!!!!!!!!2!!c
 | 
			
		||||
-m!!!m!!!!!!!!!!!m!$-cI!!!!m!!!!!!!!!$`!-c0m!!!!!m!!!!!!!!2!!c-h
 | 
			
		||||
`!!!!!!m!!!!!!!m!$-cIh`!!!!!!m!!!!!$`!-c0rGh`!!!!!!m!!!!2!!c-hph
 | 
			
		||||
-h`!!!!!!m!!!rrr-cIhF`-h`!!!!!!m!!2lFr0rGc!`-h`!!!!!!m!$pc-rph-$
 | 
			
		||||
!`-h`!!!!!!m!r-`2cF`-$!!-r3!!!!!!m!m!`-c!`-!!$0m!!!!!$-m!m!`-$!`
 | 
			
		||||
!!-cI!!!!!-c`!!m!`-$!!!`-h`!!!!c2!!!!m!`-!!$!c0m!!!$-m!!!!!m!`!!
 | 
			
		||||
-$-hm!!!-c`!!!!!!m!!!`-cIc!!!c2!!!!!!!!m!$!c0r-`!$-m!!!!!!!$pm-$
 | 
			
		||||
-hmc!!-c`!!!!!!!2hI`-cIc-!!c2!!!!!!!!rGc2c0r-`!$-m!!!!!!!!2h-cmh
 | 
			
		||||
mc!!-c`!!!!!!!!$mc!rIr-!!c2!!!!!!!!!!$m$2m!r-$-m!!!!!!!!!!!$rr`!
 | 
			
		||||
!r-c`!!!!!!!!!!!!!!!!!!r2!!!!!!!!!!!!!!!!!!!!m!!!!!!!!!!!!!"!!B!
 | 
			
		||||
13"%J)4"##18%Q)+3!%&!)5!L%%3BL#83*L!G3!#!!B!2`"rJ2r"rq2rmrrlrrhr
 | 
			
		||||
r2riIr"ri2r!ri"h!!)!!!!#!!!!!$r!!!!!!!2r`$`!!!!!2$!m!m!!!!2$!c`!
 | 
			
		||||
2!!!2$!c`!!$`!2r`cpm!!!m!rGrpc2!!!2$p$p`-c`!!$`m!`-$0m!$2!2!-$-h
 | 
			
		||||
`$2!!$`$-hm$2!!!2m-hm$2!!!2h2hm$2!!!!r-rm$2!!!!!2r`r2!!!!!!!!!2!
 | 
			
		||||
!!!!!!!#D8f0bDA"d)%&`F'aTBf&dD@pZ$3e8D'Pc)(0MFQP`G#"MFQ9KG'9c)#i
 | 
			
		||||
Z,fPZBfaeC'8[Eh"PER0cE#"KEQ3JCQPXE(-JDA3JGfPdD#"ZC@0PFh0KFRNJB@a
 | 
			
		||||
TBA0PFbi0$8Pd)'eTCfKd)(4KDf8JB5"hD'PXC5"dEb"MEfe`E'9dC5"cEb"`E'9
 | 
			
		||||
KFf8JBQ8JF'&dD@9ZG$SY+3!!!")!!J!!!!!!!!!!!!%!"J!'%iN!!!!+@1!!!b!
 | 
			
		||||
!!!-J!!!!!"3!+`!(!Cm#@!!V!!F"f!*B!!!!!3!!M`C'BA0N98&6)$%Z-6!a,M%
 | 
			
		||||
`$J!!!!32rrm!!3!#!!-"rrm!!!d!!3!"D`!!!!!!!!!%!J!%!!)!"3!'$3!&!!*
 | 
			
		||||
X!!)!!!U`!!IrrJd!"`!#6`!!!!!+X!!)!!N0!!J!!@X!!!!%#Um!#J)!#J!#!!X
 | 
			
		||||
!$!d!#`!#E!!#!!3!"2rprr`"rrd!!!(rr!!!!J!-!!)!$3!1$3!0!!*X!!%!"!!
 | 
			
		||||
%rrX!$`(rq`!!$!!2!&N!8b"(CA3JF'&dD#"dEb"dD'Pc)%&`F'aP8f0bDA"d)'&
 | 
			
		||||
`F'aPG$XJGA0P)'Pd)(4[)'C[FQdJG'KP)("KG'JJG'mJG'KP)'PZBfaeC'8JCQp
 | 
			
		||||
XC'9b!!)!!!)!$J!#!"!!%3d!%!!#E!!"!!3!"2rk!")"rrS!!!`!%J!Q!#!JB@j
 | 
			
		||||
N)(4SC5"[G'KPFL"bC@aPGQ&ZG#"QEfaNCA*c,J!#!!!#!"%!!J!6!"30!"-!!R-
 | 
			
		||||
!!!!%!"%!&3!@$3!9!!*M!!!!"!!1!"F!'!d!&`!#E!!&!!3!$!!CrrN0!"N!!Qi
 | 
			
		||||
!!!!%!!`!'J!E$3!D!!)d!!!!"3!-rrJ!(!Vrq!!%#Q0[BQS0!"`!!Q`!"3!'!!X
 | 
			
		||||
!(Irh$3!G!!0*!!)!"J!,rrB!([re#[rf!"JZC@&bFfCQC(*KE'Pc!!!!!!!!)!"
 | 
			
		||||
KCQ4b$3!H!!"Q!!!!"J!(![re!!!"rrF!!!d!'`!"E3!!!!3!"3!I$`!I!6J)ER9
 | 
			
		||||
XE!!!!!!!!Gq!rrm!!!!A"NCTEQ4PFJ!!(`*[Me!!ASfm!Qq,i!"HA[!!I&M!!!!
 | 
			
		||||
!!!!!'mi!!JN#!Qq-1!!!Kb%#Ei`J!!!!!%C14&*038e"3e-!!"%!B@aTF`!!!!!
 | 
			
		||||
!fJ!#!!!-6@&MD@jdEh0S)%K%!!!!!!!!!!!!!!!!!!!!XSA5h%*%!!!!!!!A"NC
 | 
			
		||||
TEQ4PFJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 | 
			
		||||
!!!!!!!!!!!!!!!!!!!!!3rLc#@a!4Nj%8Ne"3e2rrrrr!!!!!!!!!!!!!!!!!!!
 | 
			
		||||
!!!!!!!e6HA0dC@dJ4QpXC'9b!!!"!!3!!!!A!!)!)8eKBfPZG'pcD#")4$T6HA0
 | 
			
		||||
dC@dJ4QpXC'9b1NCTEQ4PFJ$rr`!!!Irj!!!0!"J!!@d!!!!-!!hrp!Vrp!!%#Q0
 | 
			
		||||
dH(30!"B!!@m!!!!!!!$rm`[rm`!5-!!(G'KPF'&dD!!(G'KP8'&dD!)!&!!#!#!
 | 
			
		||||
!)3d!)!!#E!!#!")!%[rbrr%"rr)!!!(rm3!!!J!K!!)!)J!M$3!L!!*b!!!!%J!
 | 
			
		||||
A!#3!*3d!*!!#EJ!$!")!&3!Q!#F0!#B!!6%!!!!6!"Arm!Vrm!!%#R4iC'`0!#F
 | 
			
		||||
!!6%!!!!5!"2rl`Vrl`!%#Q&cBh)0!#8!!@m!!!!!!!$rlJ[rlJ!F-!!-G'KPEfa
 | 
			
		||||
NC'9XD@ec!!adD'92E'4%C@aTEA-#!#-!!J!S!#N0!#J!!R)!!!!B!"d!+J!V$3!
 | 
			
		||||
U!!&Y!!!!'!!C!#`-!#`!"`!"1J!#!!!0!#X!!Qi!!`!!!!!!,3!Z$3!Y!!%a!!!
 | 
			
		||||
!'J!Frqd+rqd!"!TdH'4X$3!Z!!%a!!!!'3!Drq`+rq`!"!TKFf0b!J!T!!)!,`!
 | 
			
		||||
`$3![!!*X!!)!(J!Hrq[rkJ(rk`!!!IrU!!!#!$!!!J!a!$)0!$%!!R)!!!!H!#X
 | 
			
		||||
!-`!d$3!c!!*X!!8!(J!T!$Ark3d!03!#EJ!!!"i!+3!f!$F0!$B!!cF"!!!I!#R
 | 
			
		||||
rk!!i!$N+rqJ!"!TMDA4Y$3!i!!&Y!!!!)`!PrqF$rqF!!3d!13!"E3!!!#B!+2r
 | 
			
		||||
Q!rrQrrd0!$F!!@m!!!!H!"rrj3[rj3!5-!!(G'KPF'&dD!!(G'KP8'&dD!(rk3!
 | 
			
		||||
!$3!d!!&[!!!!!!!!rq3,rq3!)$!!$R4SCA"bEfTPBh4`BA4S!!jdD'93FQpUC@0
 | 
			
		||||
d8'&dD!)!-J!#!$S!1`d!1J!#FJ!!!#`!1`!m!$d0!$`!!Q-!!!!X!$N!2J!r$3!
 | 
			
		||||
q!!*X!!8!,!!h!%$ri`d!3!!#EJ!!!#`!0`""!%)0!%%!!cF"!!!Y!$IriJ"$!%3
 | 
			
		||||
+rq)!"!TMDA4Y$3"$!!&Y!!!!-3!crq%$rq%!!3d!4!!"E3!!!$3!0[rJ!rrJrri
 | 
			
		||||
0!%)!!@m!!!!X!#hrh`[rh`!5-!!(G'KPF'&dD!!(G'KP8'&dD!(ri`!!$3!r!!&
 | 
			
		||||
Y!!!!0`!irpi+rpi!"!T849K8$3!p!!&[!!!!!!!!rpd,rpd!&M!!#A4SC@ePF'&
 | 
			
		||||
dD!!*G'KP6@93BA4S!J!l!!)!43"'$3"&!!*X!!)!2!!mrpcrf`(rh!!!!IrE!!!
 | 
			
		||||
#!%B!!J"(!%J0!%F!!R)!!!!m!%8!53"+$3"*!!*M!!!!2!""!%X!6!d!5`!#BJ!
 | 
			
		||||
!!$`!2`"0!%i0!%d!!@m!!!!m!$hrfJ[rfJ!J-!!1G'KPF(*[DQ9MG("KG'J!$R4
 | 
			
		||||
SC9"bEfTPBh43BA4S$3"1!!&Y!!!!23!q!%m-!%m!$3!(D@jME(9NC3!#!!!0!%`
 | 
			
		||||
!!@d!!!!r!%$rf3Vrf3!%#P4&@&30!%S!!@m!!!!!!!$rf![rf!!Q-!!4D@jME(9
 | 
			
		||||
NC@C[E'4PFR"KG'J!%@PZBfaeC'9'EfaNCA*3BA4S!J")!!)!8!"4$3"3!!*b!!!
 | 
			
		||||
!4J"9!&)!8`d!8J!#B`!!!%B!83"8!&80!&3!!Q)!!!"'!%m!9J"A$3"@!!*L!!!
 | 
			
		||||
!4J",!&J!@3d!@!!"E`!!!%B!4rrA#rrA!#!`!!jdD'9`FQpUC@0dF'&dD!!1G'K
 | 
			
		||||
P8(*[DQ9MG&"KG'J0!&N!!@d!!!"(!%S!@J`!@J!0!!GTEQ0XG@4P!!)!!!d!9`!
 | 
			
		||||
"E3!!!%X!6J"E$!"E!!d!"fp`C@jcFf`!!J!!$3"9!!&Y!!!!6`"3rpB+rpB!"!T
 | 
			
		||||
849K8$3"6!!&[!!!!!!!!rp8,rp8!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&
 | 
			
		||||
dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S!J"4!!)!A!"G$3"F!!*b!!!!9J"
 | 
			
		||||
K!&i!A`d!AJ!#B`!!!&B!A3"J!'%0!'!!!Q)!!!"@!&X!BJ"M$3"L!!&[!!!!9J"
 | 
			
		||||
Arp3,rp3!)$!!$R4SCA"bEfTPBh4`BA4S!!jdD'93FQpUC@0d8'&dD!d!B`!"E3!
 | 
			
		||||
!!&F!@J"N$!"N!!`!"Q0bHA"dE`!#!!!0!'%!!@d!!!"E!&crd`Vrd`!%#P4&@&3
 | 
			
		||||
0!&m!!@m!!!!!!!$rdJ[rdJ!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4Qp
 | 
			
		||||
XC'9b8'&dD!)!A3!#!'8!CJd!C3!#FJ!!!')!E3"R!'J0!'F!!Q-!!!"L!'N!D3"
 | 
			
		||||
U$3"T!!*L!!!!BJ"R!'X!E!d!D`!"E`!!!')!Brr4#rr4!#!`!!jdD'9`FQpUC@0
 | 
			
		||||
dF'&dD!!1G'KP8(*[DQ9MG&"KG'J0!'`!!@d!!!"M!'B!E3`!E3!*!!0cFf`!!J!
 | 
			
		||||
!$3"U!!&Y!!!!C`"Srp!+rp!!"!T849K8$3"S!!&[!!!!!!!!rmm,rmm!(M!!$A0
 | 
			
		||||
cE'C[E'4PFR"KG'J!$A0cE%C[E'4PFP"KG'J#!'B!!J"Z!'m0!'i!!R)!!!"Z!(8
 | 
			
		||||
!F!"a$3"`!!*M!!!!EJ"a!()!F`d!FJ!"E`!!!'i!Err1#rr1!#!`!!jdD'9`FQp
 | 
			
		||||
UC@0dF'&dD!!1G'KP8(*[DQ9MG&"KG'J0!(-!!@d!!!"[!($rc3Vrc3!%#P4&@&3
 | 
			
		||||
0!(%!!@m!!!!!!!$rc![rc!!Q-!!4Eh"PER0cE'C[E'4PFR"KG'J!%@p`C@jcFfa
 | 
			
		||||
'EfaNCA*3BA4S!J"[!!)!G!"e$3"d!!*X!!)!GJ"frm[rbJ(rb`!!!Ir+!!!#!(8
 | 
			
		||||
!!J"f!(F0!(B!!R)!!!"f!(X!H!"j$3"i!!&[!!!!GJ"hrmN,rmN!($!!$(4SC@p
 | 
			
		||||
XC'4PE'PYF`!-G'KP6faN4'9XD@ec$3"j!!*Z!!-!!!!!!(S!H`d!HJ!"-3!!!(J
 | 
			
		||||
!H[r)#[r)!!3+G(KNE!d!H`!"-3!!!(F!H2r(#[r(!!3+BA0MFJ)!G`!#!(`!I3d
 | 
			
		||||
!I!!#E!!#!(`!I2r'rm8"rmB!!!(ra3!!!J"p!!)!IJ"r$3"q!!*X!!%!I!"mrm3
 | 
			
		||||
!J!(ra!!!$!#!!%!!1L"NC@aPG'8JEfaN)'PZBfaeC'8kEh"PER0cE#"QEfaNCA)
 | 
			
		||||
JB@jN)(*PBh*PBA4P)'Pd)'0XC@&ZE(N!!J!!!J"r!!)!J3##$3#"!!*X!!)!I!"
 | 
			
		||||
mrm2r`J(r``!!!Ir#!!!#!))!!J#$!)30!)-!!e%!!!"m!+8!K3#'!)F0!)8!!@X
 | 
			
		||||
!!!"r!*`!L!)!L!!#!)N!LJd!L3!$53!#!(m!N[r"!)[r`!Vr`3!B,QeTFf0cE'0
 | 
			
		||||
d+LSU+J!!!!!!!*!!!#SU+LS0!)X!!Qi!!!"r!)i!M!#0$3#-!!)d!!!!K`#1rlm
 | 
			
		||||
!MJVr[`!%#Q0QEf`0!)i!!@d!!!#+!)d!M``!M`!0!!G[F'9ZFh0X!!)!!!d!M3!
 | 
			
		||||
#0!!!!(m!Krqq!*!!#[qq!!3+BfC[E!d!N!!!!@m!!!#$!)Er[3[r[3!Q-!!4D@j
 | 
			
		||||
ME(9NC@C[E'4PFR"KG'J!%@PZBfaeC'9'EfaNCA*3BA4S![r!!!!#!)S!!J#4rl`
 | 
			
		||||
0!*%!!dN!!J#6!*crZ`#5rlS+rlX!'#jMEh*PC'9XEbSU+LS!!!!!!!#3!!!U+LS
 | 
			
		||||
U$3#5!!%a!!!!N`#BrlN+rlN!"!TcC@aP![qk!!!#rl`!!!d!KJ!$8J!!!!!!!2q
 | 
			
		||||
irlIrYJVrZ!!B,Q&cBh*PFR)J+LSU+J!!!!!!!*!!!#SU+LS"rlF!!!,rYJ!!$3#
 | 
			
		||||
(!!*X!!%!T!#Nrl8!N`(rY3!!$!#6!"-!$5"TCfj[FQ8JCA*bEh)!!J!!!J#%!!)
 | 
			
		||||
!P!#9$3#8!!*X!!)!TJ#Qrl6rX`(rY!!!!Iqc!!!#!*8!!J#@!*F0!*B!!dN!!J#
 | 
			
		||||
Q!,lrX[qa!*J+rl)!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Iqa!!!'!*J
 | 
			
		||||
!!rq`!*N!QJVrX!!%#QY[Bf`0!*N!!@d!!!#U!+hrV`VrV`!%#Q0QEf`'!*S!!rq
 | 
			
		||||
Z!*[rV3VrVJ!%#QPZFfJ0!*X!!M3!!!#`!,MrV!#F#[qX!!3+BfC[E!d!R!!"E`!
 | 
			
		||||
!!,3!YrqV#rqV!#B`!"&TEQ0XG@4PCQpXC'9bF'&dD!!4D@jME(9NC8C[E'4PFP"
 | 
			
		||||
KG'J'rkd!!!)!P`!#!*d!RJd!R3!#FJ!!!,m!aJ#I!+!0!*m!!Q`"!!#r!-)!SIq
 | 
			
		||||
U$3#K!!%a!!!![`$#rkN+rkN!"!TbFfad!IqU!!!0!+!!!@m!!!!!!!$rU![rU!!
 | 
			
		||||
Z-!!9G'KPEQ9hCQpXC'9bFQ9QCA*PEQ0P!"9dD'91CAG'EfaNCA*5C@CPFQ9ZBf8
 | 
			
		||||
#!*i!!J#L!+-0!+)!!dN!!J$(!-lrT`#NrkB+rkF!'#jYDA0MFfaMG#SU+LS!!!!
 | 
			
		||||
!!!#3!!!U+LSU$3#N!!&[!!!!a`$+rk8,rk8!,M!!&A4SC@jPGfC[E'4PFR*PCQ9
 | 
			
		||||
bC@jMC3!9G'KP6Q9h4QpXC'9b8Q9QCA*PEQ0P![qQ!!!#!+-!!J#P!+B0!+8!!R)
 | 
			
		||||
!!!$2!0`!T`#S$3#R!!&Y!!!!c`$5!+N-!+N!$3!(Eh"PER0cE!!#!!!0!+J!!Qi
 | 
			
		||||
!!!!!!!!!UJ#V$3#U!!%a!!!!e`$Erk3+rk3!"!T`EQ&Y$3#V!!%a!!!!dJ$Ark-
 | 
			
		||||
+rk-!"!TcC@aP!J#Q!!)!V!#Y$3#X!!*X!!)!h3$Grk,rS3(rSJ!!!IqK!!!#!+d
 | 
			
		||||
!!J#Z!+m0!+i!!Q`!!3$G!0hrS!#`!IqJ!!!-!,!!(`!C)&0dBA*d)'eKDfPZCb"
 | 
			
		||||
dD'8JB@aTBA0PF`!#!!!#!+m!!J#a!,)0!,%!!dN!!J$G!3ArRrqH!,-+rjm!'#j
 | 
			
		||||
MEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!IqH!!!'!,-!!rqG!,3!Y3VrR3!%#QY
 | 
			
		||||
[Bf`0!,3!!@d!!!$K!16rR!VrR!!%#Q&XD@%'!,8!!rqE!,B!Y`VrQ`!%#QPZFfJ
 | 
			
		||||
0!,B!!M3!!!$R!1rrQJ#i#[qD!!3+BfC[E!d!Z!!"E`!!!1X!l[qC#rqC!$3`!"K
 | 
			
		||||
[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&
 | 
			
		||||
dD!B!Y`!$rjJ!ZIqA#[qB!!3+G'mJ)!d!Z3!#EJ!!!2)!r`#k!,X0!,S!!M3!!!$
 | 
			
		||||
i!2rrPJ#m#[q@!!3+CQPXC3d![!!"E3!!!2X!rJ#p$!#p!"-!$@p`C@jcFfaMEfj
 | 
			
		||||
Q,QJ!!J!!$3#l!!)d!!!!mJ$irj8![JVrP3!%#Q0QEf`0!,i!!@m!!!$f!2IrP![
 | 
			
		||||
rP!!@-!!*G'KPE@9`BA4S!!PdD'90C9"KG'J'rjF!!!)!XJ!#!,m!`!d![`!#E!!
 | 
			
		||||
#!3B""[q6rj)"rj-!!!(rNJ!!!J$!!!)!`3$#$3$"!!*b!!!""J%4!--!a!d!``!
 | 
			
		||||
#BJ!!!3B"$3$&!-B0!-8!!@m!!!%'!3RrN3[rN3!N-!!3Bh*jF(4[CQpXC'9bF'&
 | 
			
		||||
dD!!3Bh*jF(4[4QpXC'9b8'&dD!d!aJ!"E3!!!3N"$!$($!$(!!X!"6TKFfia!!)
 | 
			
		||||
!!!d!a!!"E`!!!!!!!2q3!![rN!!!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)!`J!
 | 
			
		||||
#!-J!b3d!b!!$53!#!4)"22q2rii!bJVrM`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!
 | 
			
		||||
!!'jeE'`"rii!!!B!bJ!$rid!b`$-#[q0!!3+DfpME!d!b`!"E3!!!4B"'Iq-#[q
 | 
			
		||||
-!!3+B@aTB3B!c!!$riX!c3$1#[q,!!3+D@jcD!d!c3!#0!!!!4`"*2q+!-m+riS
 | 
			
		||||
!"!TMCQpX$3$2!!&[!!!")!%MriN,riN!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9
 | 
			
		||||
bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J$1!!2rL!$3riF+riJ!"!T
 | 
			
		||||
dEb!J$3$3!!*Z!!!"*`%f!0%!dJd!d3!#0!!!!5m"0[q'!0-+riB!"!TQD@aP$3$
 | 
			
		||||
6!!&Y!!!"-J%e!03-!03!$!!'BA0Z-5jS!!)!!!d!dJ!#0!!!!5F",rq&!08+ri8
 | 
			
		||||
!"!TMCQpX$3$9!!&[!!!"+`%Zri3,ri3!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!E
 | 
			
		||||
rK`!!!J$*!!)!eJ$A$3$@!!0*!!)"23&Rri2rJJ$B#[q$!"JZBfpbC@0bC@`U+LS
 | 
			
		||||
U!!!!!!!!N!!!ER9XE!(rJJ!!"J$B!!2rJ3$C!0S+ri%!"!TVEf0X$3$C!!&Y!!!
 | 
			
		||||
"33&%ri!+ri!!"!TKE'PK"J$D!!2rI`$E!0`+rhm!"!TTER0S$3$E!!)d!!!"4`&
 | 
			
		||||
2rhi!h3VrIJ!%#Q0QEf`0!0d!!@m!!!&,!8lrI3[rI3!d-!!BEh"PER0cE'PZBfa
 | 
			
		||||
eC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!0`!!rpm!0l
 | 
			
		||||
rH`VrI!!%#R4[)#!0!0i!!Qi!!!&5!@%!h`$J$3$I!!)d!!!"@J&KrhS!i3VrHJ!
 | 
			
		||||
%#QCTE'80!1%!!@d!!!&G!@!!iJ`!iJ!3!!TKFfiaAfeKBbjS!!)!!!d!i!!#0!!
 | 
			
		||||
!!9)"@[pj!1-+rhN!"!TMCQpX$3$M!!&[!!!"9J&CrhJ,rhJ!&$!!#(4PEA"`BA4
 | 
			
		||||
S!!KdC@e`8'&dD!ErH`!!!J$A!!)!j!$P$3$N!!*X!!)"D!&SrhIrGJ(rG`!!!Ip
 | 
			
		||||
f!!!#!18!!J$Q!1F0!1B!!R)!!!&S!A-!k!$T$3$S!!*L!!!"D!&[!1S!k`d!kJ!
 | 
			
		||||
"E`!!!@J"Drpe#rpe!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*
 | 
			
		||||
3BA4S$3$V!!&Y!!!"D`&Z!1`-!1`!#J!%1Q*TE`!#!!!0!1N!!@m!!!!!!!$rG![
 | 
			
		||||
rG!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J$R!!)!l3$Z$3$Y!!0*!!)"G!'Hrh2
 | 
			
		||||
rFJ$[#[pc!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(rFJ!!"J$[!!2rF3$
 | 
			
		||||
`!2%+rh%!"!TVEf0X$3$`!!&Y!!!"H!&lrh!+rh!!"!TKE'PK"J$a!!2rE`$b!2-
 | 
			
		||||
+rfm!"!TTER0S$3$b!!)d!!!"IJ''rfi!p!VrEJ!%#Q0QEf`0!23!!@m!!!'#!BA
 | 
			
		||||
rE3[rE3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9
 | 
			
		||||
NC8C[E'4PFP"KG'J'!2-!!rpX!2ArD`VrE!!%#R4[)#!0!28!!Qi!!!'*!CJ!pJ$
 | 
			
		||||
h$3$f!!)d!!!"N3'BrfS!q!VrDJ!%#QCTE'80!2J!!@d!!!'8!CF!q3`!q3!,!!9
 | 
			
		||||
LD@mZD!!#!!!0!2F!!M3!!!'*!C(rD3$k#[pT!!3+BfC[E!d!qJ!"E`!!!Bd"N!$
 | 
			
		||||
rD![rD!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[pV!!!#!1i!!J$l!2`0!2X!!Q`
 | 
			
		||||
!!J'I!CrrCrpQ!IpR!!!"rfB!!!)!r!!#!2d!rJd!r3!#FJ!!!Cm"UJ$r!3!0!2m
 | 
			
		||||
!!Q)!!!'I!DB"!3%#$3%"!!&[!!!"R`'Lrf8,rf8!*$!!%'0bHA"dEfC[E'4PFR"
 | 
			
		||||
KG'J!%'0bHA"dEdC[E'4PFP"KG'J0!3)!!@d!!!'L!D8"!``"!`!*!!-kBQB!!J!
 | 
			
		||||
!$3%!!!&[!!!!!!!!rf3,rf3!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)!rJ!#!33
 | 
			
		||||
""3d""!!$53!#!DX"eIpMrf)""JVrB`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'j
 | 
			
		||||
eE'`"rf)!!!B""J!$rf%""`%)#[pK!!3+DfpME!d""`!"E3!!!Dm"X[pJ#[pJ!!3
 | 
			
		||||
+B@aTB3B"#!!$rem"#3%+#[pI!!3+D@jcD!d"#3!#0!!!!E8"[IpH!3X+rei!"!T
 | 
			
		||||
MCQpX$3%,!!&[!!!"Z3'mred,red!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&
 | 
			
		||||
dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J%+!!2rA!%-reX+re`!"!TdEb!
 | 
			
		||||
J$3%-!!*Z!!!"`!(2!3d"$Jd"$3!#0!!!!FJ"crpD!3m+reS!"!TQD@aP$3%2!!&
 | 
			
		||||
Y!!!"b`(1!4!-!4!!%!!+BQa[GfCTFfJZD!!#!!!0!3i!!M3!!!(!!FMr@3%4#[p
 | 
			
		||||
C!!3+BfC[E!d"%3!"E`!!!F3"arpB#rpB!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J
 | 
			
		||||
'reX!!!)""3!#!4)"%`d"%J!#E!!#!GB"e[pAreB"reF!!!(r9J!!!J%6!!)"&!%
 | 
			
		||||
9$3%8!!*b!!!"eJ(K!4B"&`d"&J!#BJ!!!GB"h3%B!4N0!4J!!@m!!!(@!GRr93[
 | 
			
		||||
r93!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d"'3!"E3!
 | 
			
		||||
!!GN"h!%D$!%D!!N!!cTLEJ!#!!!0!4F!!@m!!!!!!!$r9![r9!!8-!!)G'9YF("
 | 
			
		||||
KG'J!#(4PEA"3BA4S!J%9!!)"'`%F$3%E!!0*!!)"iJ)-re2r8J%G#[p6!"JZBfp
 | 
			
		||||
bC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(r8J!!"J%G!!2r83%H!4m+re%!"!TVEf0
 | 
			
		||||
X$3%H!!&Y!!!"jJ(Tre!+re!!"!TKE'PK"J%I!!2r6`%J!5%+rdm!"!TTER0S$3%
 | 
			
		||||
J!!)d!!!"l!(drdi")JVr6J!%#Q0QEf`0!5)!!@m!!!(`!I2r63[r63!d-!!BEh"
 | 
			
		||||
PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J
 | 
			
		||||
'!5%!!rp-!52r5`Vr6!!%#R4[)#!0!5-!!Qi!!!(h!JB"*!%P$3%N!!)d!!!"r`)
 | 
			
		||||
'rdS"*JVr5J!%#QCTE'80!5B!!@d!!!)#!J8"*``"*`!+!!4LELjS!!)!!!d"*3!
 | 
			
		||||
#0!!!!IF"rrp*!5J+rdN!"!TMCQpX$3%S!!&[!!!"q`(qrdJ,rdJ!&$!!#(4PEA"
 | 
			
		||||
`BA4S!!KdC@e`8'&dD!Er5`!!!J%F!!)"+3%U$3%T!!*X!!)#$3)0rdIr4J(r4`!
 | 
			
		||||
!!Ip'!!!#!5S!!J%V!5`0!5X!!R)!!!)0!KJ",3%Z$3%Y!!*L!!!#$3)8!5m"-!d
 | 
			
		||||
",`!"E`!!!Jd#%2p&#rp&!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'Efa
 | 
			
		||||
NCA*3BA4S$3%`!!&Y!!!#%!)6!6%-!6%!$3!(1Q*eCQCPFJ!#!!!0!5i!!@m!!!!
 | 
			
		||||
!!!$r4![r4!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J%X!!)"-J%c$3%b!!0*!!)
 | 
			
		||||
#'3*$rd2r3J%d#[p$!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(r3J!!"J%
 | 
			
		||||
d!!2r33%e!6B+rd%!"!TVEf0X$3%e!!&Y!!!#(3)Jrd!+rd!!"!TKE'PK"J%f!!2
 | 
			
		||||
r2`%h!6J+rcm!"!TTER0S$3%h!!)d!!!#)`)Vrci"13Vr2J!%#Q0QEf`0!6N!!@m
 | 
			
		||||
!!!)R!LVr23[r23!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0
 | 
			
		||||
-5@jME(9NC8C[E'4PFP"KG'J'!6J!!rmm!6Vr1`Vr2!!%#R4[)#!0!6S!!Qi!!!)
 | 
			
		||||
Z!Md"1`%m$3%l!!)d!!!#0J)prcS"23Vr1J!%#QCTE'80!6d!!@d!!!)j!M`"2J`
 | 
			
		||||
"2J!1!!KLG@CQCA)ZD!!#!!!0!6`!!M3!!!)Z!MEr13%r#[mj!!3+BfC[E!d"2`!
 | 
			
		||||
"E`!!!M)#0Imi#rmi!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'rcX!!!)"-`!#!8!
 | 
			
		||||
"33d"3!!#E!!#!N3#42mhrcB"rcF!!!(r0J!!!J&"!!)"3J&$$3&#!!*b!!!#4!*
 | 
			
		||||
2!83"43d"4!!#BJ!!!N3#5`&'!8F0!8B!!@m!!!*%!NIr03[r03!N-!!3Bh*jF(4
 | 
			
		||||
[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d"4`!"E3!!!NF#5J&)$!&)!!X
 | 
			
		||||
!"6TMBA0d!!)!!!d"43!"E`!!!!!!!2md#rmd!"3`!!KdC@e`F'&dD!!)G'9YF&"
 | 
			
		||||
KG'J#!8-!!J&*!8S0!8N!!dN!!J*3!RVr-rmb!8X+rc-!'#jMEh*PBh*PE#SU+LS
 | 
			
		||||
!!!!!!!#3!!"ZG@aX!Imb!!!'!8X!!rma!8`"63Vr-3!%#QY[Bf`0!8`!!@d!!!*
 | 
			
		||||
8!PIr-!Vr-!!%#Q&XD@%'!8d!!rm[!8i"6`Vr,`!%#QPZFfJ0!8i!!M3!!!*D!Q,
 | 
			
		||||
r,J&3#[mZ!!3+BfC[E!d"8!!"E`!!!Pi#BImY#rmY!$3`!"K[F'9ZFh0XD@jME(9
 | 
			
		||||
NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B"6`!$rb`"8Im
 | 
			
		||||
V#[mX!!3+G'mJ)!d"83!#EJ!!!Q8#G!&5!9-0!9)!!M3!!!*Y!R6r+J&8#[mU!!3
 | 
			
		||||
+CQPXC3d"9!!"E3!!!R!#F`&9$!&9!!`!"Q0KFh3ZD!!#!!!0!9-!!M3!!!*P!Qh
 | 
			
		||||
r+3&@#[mT!!3+BfC[E!d"9J!"E`!!!QN#E2mS#rmS!"3`!!KdC@e`F'&dD!!)G'9
 | 
			
		||||
YF&"KG'J'rbX!!!)"5J!#!9F"@!d"9`!#E!!#!RX#HrmRrbB"rbF!!!(r*J!!!J&
 | 
			
		||||
B!!)"@3&D$3&C!!*b!!!#H`+'!9X"A!d"@`!#BJ!!!RX#JJ&G!9i0!9d!!@m!!!*
 | 
			
		||||
l!Rlr*3[r*3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d
 | 
			
		||||
"AJ!"E3!!!Ri#J3&I$!&I!!X!"6TMEfe`!!)!!!d"A!!"E`!!!!!!!2mN#rmN!"3
 | 
			
		||||
`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!9S!!J&J!@%0!@!!!dN!!J+(!V(r)rmL!@)
 | 
			
		||||
+rb-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!ImL!!!'!@)!!rmK!@-"C!V
 | 
			
		||||
r)3!%#QY[Bf`0!@-!!@d!!!+,!Slr)!Vr)!!%#Q&XD@%'!@3!!rmI!@8"CJVr(`!
 | 
			
		||||
%#QPZFfJ0!@8!!M3!!!+4!TRr(J&R#[mH!!3+BfC[E!d"C`!"E`!!!T8#Q2mG#rm
 | 
			
		||||
G!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4Qp
 | 
			
		||||
XC'9b8'&dD!B"CJ!$ra`"D2mE#[mF!!3+G'mJ)!d"D!!#EJ!!!T`#U`&T!@S0!@N
 | 
			
		||||
!!M3!!!+N!U[r'J&V#[mD!!3+CQPXC3d"D`!"E3!!!UF#UJ&X$!&X!!`!"Q0[EA!
 | 
			
		||||
ZD!!#!!!0!@S!!M3!!!+F!U6r'3&Y#[mC!!3+BfC[E!d"E3!"E`!!!U!#SrmB#rm
 | 
			
		||||
B!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'raX!!!)"B3!#!@i"E`d"EJ!#E!!#!V)
 | 
			
		||||
#X[mAraB"raF!!!(r&J!!!J&[!!)"F!&a$3&`!!*b!!!#XJ+p!A)"F`d"FJ!#BJ!
 | 
			
		||||
!!V)#Z3&d!A80!A3!!@m!!!+b!VAr&3[r&3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!
 | 
			
		||||
3Bh*jF(4[4QpXC'9b8'&dD!d"G3!"E3!!!V8#Z!&f$!&f!!X!"6TMEfjQ!!)!!!d
 | 
			
		||||
"F`!"E`!!!!!!!2m8#rm8!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!A%!!J&h!AJ
 | 
			
		||||
0!AF!!dN!!J+q!ZMr%rm5!AN+ra-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@a
 | 
			
		||||
X!Im5!!!'!AN!!rm4!AS"H`Vr%3!%#QY[Bf`0!AS!!@d!!!,#!XAr%!Vr%!!%#Q&
 | 
			
		||||
XD@%'!AX!!rm2!A`"I3Vr$`!%#QPZFfJ0!A`!!M3!!!,)!Y$r$J&q#[m1!!3+BfC
 | 
			
		||||
[E!d"IJ!"E`!!!X`#crm0#rm0!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J
 | 
			
		||||
!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B"I3!$r``"Irm,#[m-!!3+G'mJ)!d
 | 
			
		||||
"I`!#EJ!!!Y-#iJ'!!B%0!B!!!M3!!!,E!Z,r#J'##[m+!!3+CQPXC3d"JJ!"E3!
 | 
			
		||||
!!Yi#i3'$$!'$!!`!"Q0[EQBZD!!#!!!0!B%!!M3!!!,6!Y[r#3'%#[m*!!3+BfC
 | 
			
		||||
[E!d"K!!"E`!!!YF#f[m)#rm)!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'r`X!!!)
 | 
			
		||||
"H!!#!B8"KJd"K3!#E!!#!ZN#kIm(r`B"r`F!!!(r"J!!!J''!!)"K`')$3'(!!*
 | 
			
		||||
b!!!#k3,d!BN"LJd"L3!#BJ!!!ZN#m!',!B`0!BX!!@m!!!,T!Zcr"3[r"3!N-!!
 | 
			
		||||
3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d"M!!"E3!!!Z`#l`'
 | 
			
		||||
0$!'0!!S!"$TNCA-!!J!!$3'+!!&[!!!!!!!!r`3,r`3!&$!!#(4PEA"`BA4S!!K
 | 
			
		||||
dC@e`8'&dD!)"L!!#!Bi"M`d"MJ!$53!#![8$(rm$r`)"N!!+r`-!'#jMEh*PBh*
 | 
			
		||||
PE#SU+LS!!!!!!!#3!!"ZG@aX!Im#!!!'!C!!!!2r!3'4!C)+r`%!"!TVEf0X$3'
 | 
			
		||||
4!!&Y!!!#q3,mr`!+r`!!"!TKE'PK"J'5!!2qr`'6!C3+r[m!"!TTER0S$3'6!!)
 | 
			
		||||
d!!!#r`-(r[i"P3VqrJ!%#Q0QEf`0!C8!!@m!!!-$!`Eqr3[qr3!d-!!BEh"PER0
 | 
			
		||||
cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!C3
 | 
			
		||||
!!rlm!CEqq`Vqr!!%#R4[)#!0!CB!!Qi!!!-+!aN"P`'B$3'A!!)d!!!$%J-Cr[S
 | 
			
		||||
"Q3VqqJ!%#QCTE'80!CN!!@d!!!-9!aJ"QJ`"QJ!,!!9NCA-ZD!!#!!!0!CJ!!M3
 | 
			
		||||
!!!-+!a,qq3'E#[lj!!3+BfC[E!d"Q`!"E`!!!`i$%Ili#rli!"3`!!KdC@e`F'&
 | 
			
		||||
dD!!)G'9YF&"KG'J'r[X!!!)"M`!#!C`"R3d"R!!#E!!#!b!$)2lhr[B"r[F!!!(
 | 
			
		||||
qpJ!!!J'G!!)"RJ'I$3'H!!*b!!!$)!-V!D!"S3d"S!!#BJ!!!b!$*`'L!D-0!D)
 | 
			
		||||
!!@m!!!-J!b2qp3[qp3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9
 | 
			
		||||
b8'&dD!d"S`!"E3!!!b-$*J'N$!'N!!N!!cTND!!#!!!0!D%!!@m!!!!!!!$qp![
 | 
			
		||||
qp!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J'I!!)"T3'Q$3'P!!0*!!)$,!0@r[2
 | 
			
		||||
qmJ'R#[lc!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(qmJ!!"J'R!!2qm3'
 | 
			
		||||
S!DN+r[%!"!TVEf0X$3'S!!&Y!!!$-!-cr[!+r[!!"!TKE'PK"J'T!!2ql`'U!DX
 | 
			
		||||
+rZm!"!TTER0S$3'U!!)d!!!$0J-qrZi"V!VqlJ!%#Q0QEf`0!D`!!@m!!!-k!ch
 | 
			
		||||
ql3[ql3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9
 | 
			
		||||
NC8C[E'4PFP"KG'J'!DX!!rlX!Dhqk`Vql!!%#R4[)#!0!Dd!!Qi!!!0"!e!"VJ'
 | 
			
		||||
[$3'Z!!)d!!!$5303rZS"X!VqkJ!%#QCTE'80!E!!!@d!!!0-!dm"X3`"X3!+!!4
 | 
			
		||||
ND#jS!!)!!!d"V`!#0!!!!d%$5IlT!E)+rZN!"!TMCQpX$3'b!!&[!!!$430)rZJ
 | 
			
		||||
,rZJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eqk`!!!J'Q!!)"X`'d$3'c!!*X!!)
 | 
			
		||||
$9`0ArZIqjJ(qj`!!!IlQ!!!#!E3!!J'e!EB0!E8!!R)!!!0A!f)"Y`'i$3'h!!*
 | 
			
		||||
L!!!$9`0H!EN"ZJd"Z3!"E`!!!eF$@[lP#rlP!#3`!""MFRP`G'pQEfaNCA*`BA4
 | 
			
		||||
S!""MFRP`G'p'EfaNCA*3BA4S$3'k!!&Y!!!$@J0G!EX-!EX!#J!%1Q4cB3!#!!!
 | 
			
		||||
0!EJ!!@m!!!!!!!$qj![qj!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J'f!!)"[!'
 | 
			
		||||
p$3'm!!0*!!)$B`10rZ2qiJ'q#[lM!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9
 | 
			
		||||
XE!(qiJ!!"J'q!!2qi3'r!F!+rZ%!"!TVEf0X$3'r!!&Y!!!$C`0UrZ!+rZ!!"!T
 | 
			
		||||
KE'PK"J(!!!2qh`("!F)+rYm!"!TTER0S$3("!!)d!!!$E30erYi"``VqhJ!%#Q0
 | 
			
		||||
QEf`0!F-!!@m!!!0a!h6qh3[qh3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4
 | 
			
		||||
S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!F)!!rlF!F6qf`Vqh!!%#R4[)#!
 | 
			
		||||
0!F3!!Qi!!!0i!iF"a3('$3(&!!)d!!!$J!1(rYS"a`VqfJ!%#QCTE'80!FF!!@d
 | 
			
		||||
!!!1$!iB"b!`"b!!,!!9NFf%ZD!!#!!!0!FB!!M3!!!0i!i$qf3(*#[lC!!3+BfC
 | 
			
		||||
[E!d"b3!"E`!!!h`$IrlB#rlB!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'rYX!!!)
 | 
			
		||||
"[3!#!FS"b`d"bJ!#E!!#!ii$M[lArYB"rYF!!!(qeJ!!!J(,!!)"c!(0$3(-!!*
 | 
			
		||||
b!!!$MJ1C!Fi"c`d"cJ!#BJ!!!ii$P3(3!G%0!G!!!@m!!!11!j(qe3[qe3!N-!!
 | 
			
		||||
3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d"d3!"E3!!!j%$P!(
 | 
			
		||||
5$!(5!!S!"$TPFR)!!J!!$3(2!!&[!!!!!!!!rY3,rY3!&$!!#(4PEA"`BA4S!!K
 | 
			
		||||
dC@e`8'&dD!)"c3!#!G-"e!d"d`!$53!#!jS$a2l6rY)"e3Vqd`!B,Q0[FQ9MFQ9
 | 
			
		||||
X+LSU+J!!!!!!!*!!!'jeE'`"rY)!!!B"e3!$rY%"eJ(A#[l4!!3+DfpME!d"eJ!
 | 
			
		||||
"E3!!!ji$SIl3#[l3!!3+B@aTB3B"e`!$rXm"f!(C#[l2!!3+D@jcD!d"f!!#0!!
 | 
			
		||||
!!k3$V2l1!GS+rXi!"!TMCQpX$3(D!!&[!!!$U!1VrXd,rXd!0$!!''p`C@jcFfa
 | 
			
		||||
TEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J(C!!2
 | 
			
		||||
qc!(ErXX+rX`!"!TdEb!J$3(E!!*Z!!!$V`1q!G`"h3d"h!!#0!!!!lF$[[l+!Gi
 | 
			
		||||
+rXS!"!TQD@aP$3(H!!&Y!!!$ZJ1p!Gm-!Gm!#`!&CA*b,QJ!!J!!$3(G!!)d!!!
 | 
			
		||||
$V`1hrXN"i!Vqb3!%#Q0QEf`0!H!!!@m!!!1c!lEqb![qb!!8-!!)G'9YF("KG'J
 | 
			
		||||
!#(4PEA"3BA4S"[l,!!!#!G3!!J(K!H)0!H%!!Q`!!J2&!mAqarl'!Il(!!!"rXB
 | 
			
		||||
!!!)"iJ!#!H-"j!d"i`!#FJ!!!m8$d!(P!HB0!H8!!Q)!!!2&!m`"j`(S$3(R!!&
 | 
			
		||||
[!!!$a32)rX8,rX8!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0bHA"dEdC[E'4PFP"
 | 
			
		||||
KG'J0!HJ!!@d!!!2)!mX"k3`"k3!+!!3kCAC`!!)!!!d"jJ!"E`!!!!!!!2l%#rl
 | 
			
		||||
%!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!H3!!J(U!HX0!HS!!dN!!J24!r[q`rl
 | 
			
		||||
#!H`+rX-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Il#!!!'!H`!!rl"!Hd
 | 
			
		||||
"lJVq`3!%#QY[Bf`0!Hd!!@d!!!29!pMq`!Vq`!!%#Q&XD@%'!Hi!!rkr!Hm"m!V
 | 
			
		||||
q[`!%#QPZFfJ0!Hm!!M3!!!2E!q2q[J(a#[kq!!3+BfC[E!d"m3!"E`!!!pm$i[k
 | 
			
		||||
p#rkp!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4
 | 
			
		||||
P4QpXC'9b8'&dD!B"m!!$rV`"m[kl#[km!!3+G'mJ)!d"mJ!#EJ!!!qB$p3(c!I3
 | 
			
		||||
0!I-!!M3!!!2Z!rAqZJ(e#[kk!!3+CQPXC3d"p3!"E3!!!r%$p!(f$!(f!!X!"@9
 | 
			
		||||
fF#jS!!)!!!d"p!!#0!!!!qB$l[kj!IF+rVN!"!TMCQpX$3(h!!&[!!!$kJ2YrVJ
 | 
			
		||||
,rVJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!EqZ`!!!J(V!!)"q!(j$3(i!!*X!!)
 | 
			
		||||
$r!2mrVIqYJ(qY`!!!Ikf!!!#!IN!!J(k!IX0!IS!!R)!!!2m"!F"r!(p$3(m!!*
 | 
			
		||||
L!!!$r!3$!Ii"r`d"rJ!"E`!!!r`$rrke#rke!#3`!""MFRP`G'pQEfaNCA*`BA4
 | 
			
		||||
S!""MFRP`G'p'EfaNCA*3BA4S$3(r!!&Y!!!$r`3#!J!-!J!!#`!&1QKYB@-!!J!
 | 
			
		||||
!$3(p!!&[!!!!!!!!rV3,rV3!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)"q`!#!J%
 | 
			
		||||
#!Jd#!3!$53!#"!J%-[kcrV)#!`VqX`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'j
 | 
			
		||||
eE'`"rV)!!!B#!`!$rV%#"!)&#[ka!!3+DfpME!d#"!!"E3!!"!`%$rk`#[k`!!3
 | 
			
		||||
+B@aTB3B#"3!$rUm#"J)(#[k[!!3+D@jcD!d#"J!#0!!!"")%'[kZ!JJ+rUi!"!T
 | 
			
		||||
MCQpX$3))!!&[!!!%&J3CrUd,rUd!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&
 | 
			
		||||
dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J)(!!2qV!)*rUX+rU`!"!TdEb!
 | 
			
		||||
J$3)*!!*Z!!!%(33X!JS##`d##J!#0!!!"#8%,2kU!J`+rUS!"!TQD@aP$3)-!!&
 | 
			
		||||
Y!!!%+!3V!Jd-!Jd!$!!'D'eKBbjS!!)!!!d##`!#0!!!""d%*IkT!Ji+rUN!"!T
 | 
			
		||||
MCQpX$3)1!!&[!!!%)33NrUJ,rUJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!EqU`!
 | 
			
		||||
!!J)#!!)#$`)3$3)2!!*X!!)%-`3crUIqTJ(qT`!!!IkQ!!!#!K!!!J)4!K)0!K%
 | 
			
		||||
!!R)!!!3c"$i#%`)8$3)6!!*L!!!%-`3k!K8#&Jd#&3!"E`!!"$-%0[kP#rkP!#3
 | 
			
		||||
`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3)@!!&Y!!!%0J3
 | 
			
		||||
j!KF-!KF!#`!&1QPNC@%!!J!!$3)8!!&[!!!!!!!!rU3,rU3!&$!!#(4PEA"`BA4
 | 
			
		||||
S!!KdC@e`8'&dD!)#%J!#!KJ#'3d#'!!$53!#"$m%DIkMrU)#'JVqS`!B,Q0[FQ9
 | 
			
		||||
MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rU)!!!B#'J!$rU%#'`)F#[kK!!3+DfpME!d
 | 
			
		||||
#'`!"E3!!"%-%4[kJ#[kJ!!3+B@aTB3B#(!!$rTm#(3)H#[kI!!3+D@jcD!d#(3!
 | 
			
		||||
#0!!!"%N%8IkH!Km+rTi!"!TMCQpX$3)I!!&[!!!%6343rTd,rTd!0$!!''p`C@j
 | 
			
		||||
cFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J)
 | 
			
		||||
H!!2qR!)JrTX+rT`!"!TdEb!J$3)J!!*Z!!!%9!4M!L%#)Jd#)3!#0!!!"&`%Brk
 | 
			
		||||
D!L-+rTS!"!TQD@aP$3)M!!&Y!!!%A`4L!L3-!L3!$!!'D@4PB5jS!!)!!!d#)J!
 | 
			
		||||
#0!!!"&3%A2kC!L8+rTN!"!TMCQpX$3)P!!&[!!!%@!4ErTJ,rTJ!&$!!#(4PEA"
 | 
			
		||||
`BA4S!!KdC@e`8'&dD!EqQ`!!!J)C!!)#*J)R$3)Q!!*X!!)%DJ4UrTIqPJ(qP`!
 | 
			
		||||
!!Ik@!!!#!LF!!J)S!LN0!LJ!!R)!!!4U"(8#+J)V$3)U!!*L!!!%DJ4a!L`#,3d
 | 
			
		||||
#,!!"E`!!"'S%EIk9#rk9!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'Efa
 | 
			
		||||
NCA*3BA4S$3)Y!!&Y!!!%E34`!Li-!Li!$!!'1QaSBA0S!!)!!!d#+`!"E`!!!!!
 | 
			
		||||
!!2k8#rk8!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!LN!!J)[!M!0!Lm!!dN!!J4
 | 
			
		||||
f"+$qNrk5!M%+rT-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Ik5!!!'!M%
 | 
			
		||||
!!rk4!M)#-`VqN3!%#QY[Bf`0!M)!!@d!!!4k"(hqN!!+rT!!!!3+B@aTB3B#-`!
 | 
			
		||||
$rSm#0!)e#[k2!!3+D@jcD!d#0!!#0!!!")!%L2k1!MB+rSi!"!TMCQpX$3)f!!&
 | 
			
		||||
[!!!%K!5(rSd,rSd!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP0
 | 
			
		||||
66%PZBfaeC'9'EfaNCA*3BA4S"J)e!!2qM!)hrSX+rS`!"!TdEb!J$3)h!!*Z!!!
 | 
			
		||||
%L`5D!MJ#13d#1!!#0!!!"*-%Q[k+!MS+rSS!"!TQD@aP$3)k!!&Y!!!%PJ5C!MX
 | 
			
		||||
-!MX!$3!(E'KKFfJZD!!#!!!0!MN!!M3!!!5,"*2qL3)m#[k*!!3+BfC[E!d#2!!
 | 
			
		||||
"E`!!")m%N[k)#rk)!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'rSX!!!)#-!!#!Md
 | 
			
		||||
#2Jd#23!#E!!#"+%%SIk(rSB"rSF!!!(qKJ!!!J)q!!)#2`*!$3)r!!*b!!!%S35
 | 
			
		||||
X!N%#3Jd#33!#BJ!!"+%%U!*$!N30!N-!!@m!!!5K"+6qK3[qK3!N-!!3Bh*jF(4
 | 
			
		||||
[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d#4!!"E3!!"+3%T`*&$!*&!!S
 | 
			
		||||
!"$TYC$)!!J!!$3*#!!&[!!!!!!!!rS3,rS3!&$!!#(4PEA"`BA4S!!KdC@e`8'&
 | 
			
		||||
dD!)#3!!#!NB#4`d#4J!$53!#"+d%erk$rS)#5!VqJ`!B,Q0[FQ9MFQ9X+LSU+J!
 | 
			
		||||
!!!!!!*!!!'jeE'`"rS)!!!B#5!!$rS%#53*+#[k"!!3+DfpME!d#53!"E3!!",%
 | 
			
		||||
%Y2k!#[k!!!3+B@aTB3B#5J!$rRm#5`*-#[jr!!3+D@jcD!d#5`!#0!!!",F%[rj
 | 
			
		||||
q!Nd+rRi!"!TMCQpX$3*0!!&[!!!%Z`5qrRd,rRd!0$!!''p`C@jcFfaTEQ0XG@4
 | 
			
		||||
PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J*-!!2qI!*1rRX
 | 
			
		||||
+rR`!"!TdEb!J$3*1!!*Z!!!%`J64!Nm#8!d#6`!#0!!!"-S%dIjk!P%+rRS!"!T
 | 
			
		||||
QD@aP$3*4!!&Y!!!%c363!P)-!P)!#`!&E@3b,QJ!!J!!$3*3!!)d!!!%`J6+rRN
 | 
			
		||||
#8`VqH3!%#Q0QEf`0!P-!!@m!!!6'"-RqH![qH!!8-!!)G'9YF("KG'J!#(4PEA"
 | 
			
		||||
3BA4S"[jl!!!#!NF!!J*8!P80!P3!!Q`!!J6B"0MqGrjf!Ijh!!!"rRB!!!)#93!
 | 
			
		||||
#!PB#9`d#9J!#FJ!!"0J%i`*B!PN0!PJ!!Q)!!!6B"0m#@J*E$3*D!!&[!!!%f!6
 | 
			
		||||
ErR8,rR8!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0bHA"dEdC[E'4PFP"KG'J0!PX
 | 
			
		||||
!!@d!!!6E"0i#A!`#A!!+!!3kE@3e!!)!!!d#@3!"E`!!!!!!!2jd#rjd!"3`!!K
 | 
			
		||||
dC@e`F'&dD!!)G'9YF&"KG'J#!PF!!J*G!Pi0!Pd!!dN!!J6N"3lqFrjb!Pm+rR-
 | 
			
		||||
!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Ijb!!!'!Pm!!rja!Q!#B3VqF3!
 | 
			
		||||
%#QY[Bf`0!Q!!!@d!!!6S"1[qF!VqF!!%#Q&XD@%'!Q%!!rj[!Q)#B`VqE`!%#QP
 | 
			
		||||
ZFfJ0!Q)!!M3!!!6Z"2EqEJ*N#[jZ!!3+BfC[E!d#C!!"E`!!"2)%pIjY#rjY!$3
 | 
			
		||||
`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9
 | 
			
		||||
b8'&dD!B#B`!$rQ`#CIjV#[jX!!3+G'mJ)!d#C3!#EJ!!"2N&#!*Q!QF0!QB!!M3
 | 
			
		||||
!!!8""3MqDJ*S#[jU!!3+CQPXC3d#D!!"E3!!"33&"`*T$!*T!!X!"@eN05jS!!)
 | 
			
		||||
!!!d#C`!#0!!!"2N&!IjT!QS+rQN!"!TMCQpX$3*U!!&[!!!%r38!rQJ,rQJ!&$!
 | 
			
		||||
!#(4PEA"`BA4S!!KdC@e`8'&dD!EqD`!!!J*H!!)#D`*X$3*V!!*X!!)&$`82rQI
 | 
			
		||||
qCJ(qC`!!!IjQ!!!#!Q`!!J*Y!Qi0!Qd!!R)!!!82"4S#E`*`$3*[!!*L!!!&$`8
 | 
			
		||||
@!R%#FJd#F3!"E`!!"3m&%[jP#rjP!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP
 | 
			
		||||
`G'p'EfaNCA*3BA4S$3*b!!&Y!!!&%J89!R--!R-!#`!&1QeNBc)!!J!!$3*`!!&
 | 
			
		||||
[!!!!!!!!rQ3,rQ3!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)#EJ!#!R3#G3d#G!!
 | 
			
		||||
$53!#"4X&4IjMrQ)#GJVqB`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rQ)
 | 
			
		||||
!!!B#GJ!$rQ%#G`*i#[jK!!3+DfpME!d#G`!"E3!!"4m&)[jJ#[jJ!!3+B@aTB3B
 | 
			
		||||
#H!!$rPm#H3*k#[jI!!3+D@jcD!d#H3!#0!!!"58&,IjH!RX+rPi!"!TMCQpX$3*
 | 
			
		||||
l!!&[!!!&+38XrPd,rPd!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"
 | 
			
		||||
PEP066%PZBfaeC'9'EfaNCA*3BA4S"J*k!!2qA!*mrPX+rP`!"!TdEb!J$3*m!!*
 | 
			
		||||
Z!!!&-!8r!Rd#IJd#I3!#0!!!"6J&2rjD!Rm+rPS!"!TQD@aP$3*r!!&Y!!!&1`8
 | 
			
		||||
q!S!-!S!!$!!'E@4M-LjS!!)!!!d#IJ!#0!!!"6!&12jC!S%+rPN!"!TMCQpX$3+
 | 
			
		||||
"!!&[!!!&0!8hrPJ,rPJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eq@`!!!J*e!!)
 | 
			
		||||
#JJ+$$3+#!!*X!!)&4J9'rPIq9J(q9`!!!Ij@!!!#!S-!!J+%!S80!S3!!R)!!!9
 | 
			
		||||
'"9%#KJ+($3+'!!*L!!!&4J90!SJ#L3d#L!!"E`!!"8B&5Ij9#rj9!#3`!""MFRP
 | 
			
		||||
`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3+*!!&Y!!!&539-!SS-!SS
 | 
			
		||||
!$J!)1QpLDQ9MG(-!!J!!$3+(!!&[!!!!!!!!rP3,rP3!&$!!#(4PEA"`BA4S!!K
 | 
			
		||||
dC@e`8'&dD!)#K3!#!SX#M!d#L`!$53!#"9)&I2j6rP)#M3Vq8`!B,Q0[FQ9MFQ9
 | 
			
		||||
X+LSU+J!!!!!!!*!!!'jeE'`"rP)!!!B#M3!$rP%#MJ+2#[j4!!3+DfpME!d#MJ!
 | 
			
		||||
"E3!!"9B&@Ij3#[j3!!3+B@aTB3B#M`!$rNm#N!!#N3Vq6`!%#QPZFfJ0!T!!!!)
 | 
			
		||||
d!!!&A!9NrNi#NJVq6J!%#Q0QEf`0!T)!!@m!!!9J"@2q63[q63!d-!!BEh"PER0
 | 
			
		||||
cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!T%
 | 
			
		||||
!!rj-!T2q5`Vq6!!%#R4[)#!0!T-!!Qi!!!9R"AB#P!+9$3+8!!)d!!!&E`9frNS
 | 
			
		||||
#PJVq5J!%#QCTE'80!TB!!@d!!!9b"A8#P``#P`!2!!P[BQTPBh4c,QJ!!J!!$3+
 | 
			
		||||
9!!)d!!!&C`9[rNN#Q!Vq53!%#Q0QEf`0!TJ!!@m!!!9V"@lq5![q5!!8-!!)G'9
 | 
			
		||||
YF("KG'J!#(4PEA"3BA4S"[j,!!!#!S`!!J+C!TS0!TN!!Q`!!J9p"Ahq4rj'!Ij
 | 
			
		||||
(!!!"rNB!!!)#QJ!#!TX#R!d#Q`!#FJ!!"Ad&L!+G!Ti0!Td!!Q)!!!9p"B3#R`+
 | 
			
		||||
J$3+I!!&[!!!&I3@!rN8,rN8!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0bHA"dEdC
 | 
			
		||||
[E'4PFP"KG'J0!U!!!@d!!!@!"B-#S3`#S3!+!!3kF'9Y!!)!!!d#RJ!"E`!!!!!
 | 
			
		||||
!!2j%#rj%!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!T`!!J+L!U-0!U)!!dN!!J@
 | 
			
		||||
*"E2q3rj#!U3+rN-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Ij#!!!'!U3
 | 
			
		||||
!!rj"!U8#TJVq33!%#QY[Bf`0!U8!!@d!!!@0"C!!rN!+rN!!"!TKE'PK"J+Q!!2
 | 
			
		||||
q2`+R!UJ+rMm!"!TTER0S$3+R!!)d!!!&N`@ErMi#U3Vq2J!%#Q0QEf`0!UN!!@m
 | 
			
		||||
!!!@A"CVq23[q23!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0
 | 
			
		||||
-5@jME(9NC8C[E'4PFP"KG'J'!UJ!!rim!UVq1`Vq2!!%#R4[)#!0!US!!Qi!!!@
 | 
			
		||||
H"Dd#U`+X$3+V!!)d!!!&TJ@YrMS#V3Vq1J!%#QCTE'80!Ud!!@d!!!@T"D`#VJ`
 | 
			
		||||
#VJ!,!!9`C@dZD!!#!!!0!U`!!M3!!!@H"DEq13+[#[ij!!3+BfC[E!d#V`!"E`!
 | 
			
		||||
!"D)&TIii#rii!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'rMX!!!)#S`!#!V!#X3d
 | 
			
		||||
#X!!$53!#"E3&h[ihrMB#XJVq0`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`
 | 
			
		||||
"rMB!!!B#XJ!$rM8#X`+d#[ie!!3+DfpME!d#X`!"E3!!"EJ&Zrid#[id!!3+B@a
 | 
			
		||||
TB3B#Y!!$rM-#Y3+f#[ic!!3+D@jcD!d#Y3!#0!!!"Ei&a[ib!VF+rM)!"!TMCQp
 | 
			
		||||
X$3+h!!&[!!!&`JA&rM%,rM%!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!
 | 
			
		||||
BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J+f!!2q-!+irLm+rM!!"!TdEb!J$3+
 | 
			
		||||
i!!*Z!!!&b3AB!VN#ZJd#Z3!#0!!!"G%&f2iZ!VX+rLi!"!TQD@aP$3+l!!&Y!!!
 | 
			
		||||
&e!AA!V`-!V`!$!!'F'9Y-LjS!!)!!!d#ZJ!#0!!!"FN&dIiY!Vd+rLd!"!TMCQp
 | 
			
		||||
X$3+p!!&[!!!&c3A3rL`,rL`!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eq,`!!!J+
 | 
			
		||||
a!!)#[J+r$3+q!!*X!!)&h`AIrL[q+J(q+`!!!IiU!!!#!Vm!!J,!!X%0!X!!!R)
 | 
			
		||||
!!!AI"HS#`J,$$3,#!!*L!!!&h`AQ!X3#a3d#a!!"E`!!"Gm&i[iT#riT!#3`!""
 | 
			
		||||
MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3,&!!&Y!!!&iJAP!XB
 | 
			
		||||
-!XB!$3!(1R"VBh-a-J!#!!!0!X-!!@m!!!!!!!$q+![q+!!8-!!)G'9YF("KG'J
 | 
			
		||||
!#(4PEA"3BA4S!J,"!!)#a`,)$3,(!!0*!!)&k`B9rLIq*J,*#[iR!"JZBfpbC@0
 | 
			
		||||
bC@`U+LSU!!!!!!!!N!!!ER9XE!(q*J!!"J,*!!2q*3,+!XX+rL8!"!TVEf0X$3,
 | 
			
		||||
+!!&Y!!!&l`AbrL3+rL3!"!TKE'PK"J,,!!2q)`,-!Xd+rL-!"!TTER0S$3,-!!)
 | 
			
		||||
d!!!&p3AprL)#cJVq)J!%#Q0QEf`0!Xi!!@m!!!Aj"Icq)3[q)3!d-!!BEh"PER0
 | 
			
		||||
cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!Xd
 | 
			
		||||
!!riJ!Xrq(`Vq)!!%#R4[)#!0!Xm!!Qi!!!B!"Jm#d!,4$3,3!!)d!!!'#!B2rKi
 | 
			
		||||
#dJVq(J!%#QCTE'80!Y)!!@d!!!B,"Ji#d``#d`!1!!K`Df0c-6)ZD!!#!!!0!Y%
 | 
			
		||||
!!M3!!!B!"JMq(3,8#[iG!!3+BfC[E!d#e!!"E`!!"J3'"riF#riF!"3`!!KdC@e
 | 
			
		||||
`F'&dD!!)G'9YF&"KG'J'rKm!!!)#b!!#!Y8#eJd#e3!#E!!#"KB'&[iErKS"rKX
 | 
			
		||||
!!!(q'J!!!J,@!!)#e`,B$3,A!!*b!!!'&JBK!YN#fJd#f3!#BJ!!"KB'(3,E!Y`
 | 
			
		||||
0!YX!!@m!!!B@"KRq'3[q'3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4Qp
 | 
			
		||||
XC'9b8'&dD!d#h!!"E3!!"KN'(!,G$!,G!!`!"MT`Df0c0`!#!!!0!YS!!@m!!!!
 | 
			
		||||
!!!$q'![q'!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J,B!!)#hJ,I$3,H!!0*!!)
 | 
			
		||||
')JC-rKIq&J,J#[iA!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(q&J!!"J,
 | 
			
		||||
J!!2q&3,K!Z)+rK8!"!TVEf0X$3,K!!&Y!!!'*JBTrK3+rK3!"!TKE'PK"J,L!!2
 | 
			
		||||
q%`,M!Z3+rK-!"!TTER0S$3,M!!)d!!!',!BdrK)#j3Vq%J!%#Q0QEf`0!Z8!!@m
 | 
			
		||||
!!!B`"M2q%3[q%3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0
 | 
			
		||||
-5@jME(9NC8C[E'4PFP"KG'J'!Z3!!ri3!ZEq$`Vq%!!%#R4[)#!0!ZB!!Qi!!!B
 | 
			
		||||
h"NB#j`,S$3,R!!)d!!!'2`C'rJi#k3Vq$J!%#QCTE'80!ZN!!@d!!!C#"N8#kJ`
 | 
			
		||||
#kJ!0!!G`Df0c0bjS!!)!!!d#k!!#0!!!"MF'2ri0!ZX+rJd!"!TMCQpX$3,V!!&
 | 
			
		||||
[!!!'1`BqrJ`,rJ`!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eq$`!!!J,I!!)#l!,
 | 
			
		||||
Y$3,X!!*X!!)'63C0rJ[q#J(q#`!!!Ii+!!!#!Zd!!J,Z!Zm0!Zi!!R)!!!C0"PJ
 | 
			
		||||
#m!,a$3,`!!*L!!!'63C8![)#m`d#mJ!"E`!!"Nd'82i*#ri*!#3`!""MFRP`G'p
 | 
			
		||||
QEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3,c!!&Y!!!'8!C6![3-![3!#`!
 | 
			
		||||
&1R*KEQ3!!J!!$3,a!!&[!!!!!!!!rJJ,rJJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&
 | 
			
		||||
dD!)#l`!#![8#pJd#p3!$53!#"PN'Jri(rJB#p`Vq"`!B,Q0[FQ9MFQ9X+LSU+J!
 | 
			
		||||
!!!!!!*!!!'jeE'`"rJB!!!B#p`!$rJ8#q!,j#[i&!!3+DfpME!d#q!!"E3!!"Pd
 | 
			
		||||
'B2i%#[i%!!3+B@aTB3B#q3!$rJ-#qJ,l#[i$!!3+D@jcD!d#qJ!#0!!!"Q-'Dri
 | 
			
		||||
#![`+rJ)!"!TMCQpX$3,m!!&[!!!'C`CUrJ%,rJ%!0$!!''p`C@jcFfaTEQ0XG@4
 | 
			
		||||
PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J,l!!2q!!,prIm
 | 
			
		||||
+rJ!!"!TdEb!J$3,p!!*Z!!!'EJCp![i#r`d#rJ!#0!!!"RB'IIhq!`!+rIi!"!T
 | 
			
		||||
QD@aP$3-!!!&Y!!!'H3Cm!`%-!`%!$!!'FQ&ZC#jS!!)!!!d#r`!#0!!!"Qi'G[h
 | 
			
		||||
p!`)+rId!"!TMCQpX$3-#!!&[!!!'FJCerI`,rI`!&$!!#(4PEA"`BA4S!!KdC@e
 | 
			
		||||
`8'&dD!Epr`!!!J,f!!)$!`-%$3-$!!*X!!)'K!D%rI[pqJ(pq`!!!Ihk!!!#!`3
 | 
			
		||||
!!J-&!`B0!`8!!R)!!!D%"Sm$"`-)$3-(!!*L!!!'K!D,!`N$#Jd$#3!"E`!!"S3
 | 
			
		||||
'Krhj#rhj!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3-
 | 
			
		||||
+!!&Y!!!'K`D+!`X-!`X!#J!%1R*M-J!#!!!0!`J!!@m!!!!!!!$pq![pq!!8-!!
 | 
			
		||||
)G'9YF("KG'J!#(4PEA"3BA4S!J-'!!)$$!-0$3--!!0*!!)'N!!'Z[hhrIB$$JV
 | 
			
		||||
pp`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rIB!!!B$$J!$rI8$$`-3#[h
 | 
			
		||||
e!!3+DfpME!d$$`!"E3!!"T3'Prhd#[hd!!3+B@aTB3B$%!!$rI-$%3-5#[hc!!3
 | 
			
		||||
+D@jcD!d$%3!#0!!!"TS'S[hb!a-+rI)!"!TMCQpX$3-6!!&[!!!'RJDKrI%,rI%
 | 
			
		||||
!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'Efa
 | 
			
		||||
NCA*3BA4S"J-5!!2pm!-8rHm+rI!!"!TdEb!J$3-8!!*Z!!!'T3Dd!a8$&Jd$&3!
 | 
			
		||||
#0!!!"Ud'Y2hZ!aF+rHi!"!TQD@aP$3-A!!&Y!!!'X!Dc!aJ-!aJ!#`!&FQ-b,QJ
 | 
			
		||||
!!J!!$3-@!!)d!!!'T3DYrHd$'3Vpl3!%#Q0QEf`0!aN!!@m!!!DT"Ucpl![pl!!
 | 
			
		||||
8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[h[!!!#!`d!!J-D!aX0!aS!!Q`!!JDl"V[
 | 
			
		||||
pkrhU!IhV!!!"rHS!!!)$'`!#!a`$(3d$(!!#FJ!!"VX'aJ-H!am0!ai!!Q)!!!D
 | 
			
		||||
l"X)$)!-K$3-J!!&[!!!'Z`DqrHN,rHN!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0
 | 
			
		||||
bHA"dEdC[E'4PFP"KG'J0!b%!!@d!!!Dq"X%$)J`$)J!+!!3kFQ-d!!)!!!d$(`!
 | 
			
		||||
"E`!!!!!!!2hS#rhS!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!ad!!J-M!b30!b-
 | 
			
		||||
!!dN!!JE("[(pjrhQ!b8+rHF!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Ih
 | 
			
		||||
Q!!!'!b8!!rhP!bB$*`Vpj3!%#QY[Bf`0!bB!!@d!!!E,"Xlpj!Vpj!!%#Q&XD@%
 | 
			
		||||
'!bF!!rhM!bJ$+3Vpi`!%#QPZFfJ0!bJ!!M3!!!E4"YRpiJ-U#[hL!!3+BfC[E!d
 | 
			
		||||
$+J!"E`!!"Y8'f2hK#rhK!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p
 | 
			
		||||
`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B$+3!$rH!$+rhI#[hJ!!3+G'mJ)!d$+`!
 | 
			
		||||
#EJ!!"Y`'k`-X!bd0!b`!!M3!!!EN"Z[phJ-Z#[hH!!3+CQPXC3d$,J!"E3!!"ZF
 | 
			
		||||
'kJ-[$!-[!!X!"A*M0#jS!!)!!!d$,3!#0!!!"Y`'j2hG!c!+rGd!"!TMCQpX$3-
 | 
			
		||||
`!!&[!!!'i!EMrG`,rG`!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eph`!!!J-N!!)
 | 
			
		||||
$-3-b$3-a!!*X!!)'mJEbrG[pfJ(pf`!!!IhD!!!#!c)!!J-c!c30!c-!!R)!!!E
 | 
			
		||||
b"[d$03-f$3-e!!*L!!!'mJEj!cF$1!d$0`!"E`!!"[)'pIhC#rhC!#3`!""MFRP
 | 
			
		||||
`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3-i!!&Y!!!'p3Ei!cN-!cN
 | 
			
		||||
!#J!%1R*M03!#!!!0!cB!!@m!!!!!!!$pf![pf!!8-!!)G'9YF("KG'J!#(4PEA"
 | 
			
		||||
3BA4S!J-d!!)$1J-l$3-k!!0*!!)'rJFSrGIpeJ-m#[hA!"JZBfpbC@0bC@`U+LS
 | 
			
		||||
U!!!!!!!!N!!!ER9XE!(peJ!!"J-m!!2pe3-p!ci+rG8!"!TVEf0X$3-p!!&Y!!!
 | 
			
		||||
(!JF&rG3+rG3!"!TKE'PK"J-q!!2pd`-r!d!+rG-!"!TTER0S$3-r!!)d!!!(#!F
 | 
			
		||||
3rG)$33VpdJ!%#Q0QEf`0!d%!!@m!!!F-"`rpd3[pd3!d-!!BEh"PER0cE'PZBfa
 | 
			
		||||
eC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!d!!!rh3!d,
 | 
			
		||||
pc`Vpd!!%#R4[)#!0!d)!!Qi!!!F6"b)$3`0%$30$!!)d!!!('`FLrFi$43VpcJ!
 | 
			
		||||
%#QCTE'80!d8!!@d!!!FH"b%$4J`$4J!,!!9bBc8ZD!!#!!!0!d3!!M3!!!F6"a[
 | 
			
		||||
pc30(#[h0!!3+BfC[E!d$4`!"E`!!"aF('[h-#rh-!"3`!!KdC@e`F'&dD!!)G'9
 | 
			
		||||
YF&"KG'J'rFm!!!)$1`!#!dJ$53d$5!!#E!!#"bN(+Ih,rFS"rFX!!!(pbJ!!!J0
 | 
			
		||||
*!!)$5J0,$30+!!*b!!!(+3Fd!d`$63d$6!!#BJ!!"bN(-!01!dm0!di!!@m!!!F
 | 
			
		||||
T"bcpb3[pb3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d
 | 
			
		||||
$6`!"E3!!"b`(,`03$!03!!d!"cTbDA"PE@3!!J!!$300!!&[!!!!!!!!rFJ,rFJ
 | 
			
		||||
!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)$5`!#!e%$8Jd$83!$53!#"c8(Arh(rFB
 | 
			
		||||
$8`Vpa`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rFB!!!B$8`!$rF8$9!0
 | 
			
		||||
9#[h&!!3+DfpME!d$9!!"E3!!"cN(22h%#[h%!!3+B@aTB3B$93!$rF-$9J0A#[h
 | 
			
		||||
$!!3+D@jcD!d$9J!#0!!!"cm(4rh#!eJ+rF)!"!TMCQpX$30B!!&[!!!(3`G'rF%
 | 
			
		||||
,rF%!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9
 | 
			
		||||
'EfaNCA*3BA4S"J0A!!2p`!0CrEm+rF!!"!TdEb!J$30C!!*Z!!!(5JGC!eS$@`d
 | 
			
		||||
$@J!#0!!!"e)(@Ifq!e`+rEi!"!TQD@aP$30F!!&Y!!!(93GB!ed-!ed!$J!)FQP
 | 
			
		||||
`C@eN,QJ!!J!!$30E!!)d!!!(5JG5rEd$AJVp[3!%#Q0QEf`0!ei!!@m!!!G1"e(
 | 
			
		||||
p[![p[!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[fr!!!#!e)!!J0I!f!0!em!!Q`
 | 
			
		||||
!!JGJ"f$pZrfk!Ifl!!!"rES!!!)$B!!#!f%$BJd$B3!#FJ!!"f!(D`0M!f30!f-
 | 
			
		||||
!!Q)!!!GJ"fF$C30Q$30P!!&[!!!(B!GMrEN,rEN!*$!!%'0bHA"dEfC[E'4PFR"
 | 
			
		||||
KG'J!%'0bHA"dEdC[E'4PFP"KG'J0!fB!!@d!!!GM"fB$C``$C`!+!!3kFR0K!!)
 | 
			
		||||
!!!d$C!!"E`!!!!!!!2fi#rfi!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!f)!!J0
 | 
			
		||||
S!fN0!fJ!!dN!!JGX"jEpYrff!fS+rEF!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"
 | 
			
		||||
ZG@aX!Iff!!!'!fS!!rfe!fX$E!VpY3!%#QY[Bf`0!fX!!@d!!!G`"h2pY!VpY!!
 | 
			
		||||
%#Q&XD@%'!f`!!rfc!fd$EJVpX`!%#QPZFfJ0!fd!!M3!!!Gf"hlpXJ0[#[fb!!3
 | 
			
		||||
+BfC[E!d$E`!"E`!!"hS(IIfa#rfa!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"
 | 
			
		||||
KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B$EJ!$rE!$F2f[#[f`!!3+G'm
 | 
			
		||||
J)!d$F!!#EJ!!"i%(N!!$F30b$30a!!)d!!!(L3H3!2fZ!h-+rDi!"!TQD@aP$30
 | 
			
		||||
c!!&Y!!!(M!H2!h3-!h3!#`!&FR0K,QJ!!J!!$30b!!)d!!!(J3H*rDd$G3VpV3!
 | 
			
		||||
%#Q0QEf`0!h8!!@m!!!H&"iMpV![pV!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[f
 | 
			
		||||
[!!!#!fN!!J0f!hF0!hB!!Q`!!JHA"jIpUrfU!IfV!!!"rDS!!!)$G`!#!hJ$H3d
 | 
			
		||||
$H!!#FJ!!"jF(SJ0k!hX0!hS!!Q)!!!HA"ji$I!0p$30m!!&[!!!(P`HDrDN,rDN
 | 
			
		||||
!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0bHA"dEdC[E'4PFP"KG'J0!hd!!@d!!!H
 | 
			
		||||
D"jd$IJ`$IJ!-!!BkFh4KBfX!!J!!$30l!!&[!!!!!!!!rDJ,rDJ!&$!!#(4PEA"
 | 
			
		||||
`BA4S!!KdC@e`8'&dD!)$H3!#!hm$J!d$I`!$53!#"k-(cIfRrDB$J3VpT`!B,Q0
 | 
			
		||||
[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rDB!!!B$J3!$rD8$JJ1$#[fP!!3+Dfp
 | 
			
		||||
ME!d$JJ!"E3!!"kF(U[fN#[fN!!3+B@aTB3B$J`!$rD-$K!1&#[fM!!3+D@jcD!d
 | 
			
		||||
$K!!#0!!!"kd(YIfL!iB+rD)!"!TMCQpX$31'!!&[!!!(X3HdrD%,rD%!0$!!''p
 | 
			
		||||
`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4
 | 
			
		||||
S"J1&!!2pS!1(rCm+rD!!"!TdEb!J$31(!!*Z!!!(Z!I(!iJ$L3d$L!!#0!!!"m!
 | 
			
		||||
(arfH!iS+rCi!"!TQD@aP$31+!!&Y!!!(``I'!iX-!iX!$3!(Fh4KBfXZD!!#!!!
 | 
			
		||||
0!iN!!M3!!!Hi"m$pR31-#[fG!!3+BfC[E!d$M!!"E`!!"l`([rfF#rfF!"3`!!K
 | 
			
		||||
dC@e`F'&dD!!)G'9YF&"KG'J'rCm!!!)$J!!#!id$MJd$M3!$53!#"mi(q2fErCS
 | 
			
		||||
$M`VpQ`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rCS!!!B$M`!$rCN$N!!
 | 
			
		||||
$N3VpQ3!%#QY[Bf`0!j!!!!&Y!!!(dJI9rCJ+rCJ!"!TKE'PK"J14!!2pP`15!j-
 | 
			
		||||
+rCF!"!TTER0S$315!!)d!!!(f!IJrCB$P!VpPJ!%#Q0QEf`0!j3!!@m!!!IF"pr
 | 
			
		||||
pP3[pP3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9
 | 
			
		||||
NC8C[E'4PFP"KG'J'!j-!!rf8!jApN`VpP!!%#R4[)#!0!j8!!Qi!!!IM"r)$PJ1
 | 
			
		||||
A$31@!!)d!!!(k`IbrC)$Q!VpNJ!%#QCTE'80!jJ!!@d!!!IZ"r%$Q3`$Q3!4!!Y
 | 
			
		||||
cB@CPFh4KBfXZD!!#!!!0!jF!!M3!!!IM"q[pN31D#[f4!!3+BfC[E!d$QJ!"E`!
 | 
			
		||||
!"qF(k[f3!![pN!!!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!EpN`!!!J11!!)$Q`1
 | 
			
		||||
F$31E!!*X!!)(q3IjrBrpMJ(pM`!!!If1!!!#!j`!!J1G!ji0!jd!!R)!!!Ij#!3
 | 
			
		||||
$R`1J$31I!!*L!!!(q3J!!k%$SJd$S3!"E`!!"rN(r2f0#rf0!#3`!""MFRP`G'p
 | 
			
		||||
QEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$31L!!&Y!!!(r!Ir!k--!k-!#J!
 | 
			
		||||
%1R0SB3!#!!!0!k!!!@m!!!!!!!$pM![pM!!8-!!)G'9YF("KG'J!#(4PEA"3BA4
 | 
			
		||||
S!J1H!!)$T!1P$31N!!0*!!))"3J[rB[pLJ1Q#[f,!"JZBfpbC@0bC@`U+LSU!!!
 | 
			
		||||
!!!!!N!!!ER9XE!(pLJ!!"J1Q!!2pL31R!kJ+rBN!"!TVEf0X$31R!!&Y!!!)#3J
 | 
			
		||||
-rBJ+rBJ!"!TKE'PK"J1S!!2pK`1T!kS+rBF!"!TTER0S$31T!!)d!!!)$`JArBB
 | 
			
		||||
$U`VpKJ!%#Q0QEf`0!kX!!@m!!!J6#"EpK3[pK3!d-!!BEh"PER0cE'PZBfaeC'9
 | 
			
		||||
QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!kS!!rf%!kcpJ`V
 | 
			
		||||
pK!!%#R4[)#!0!k`!!Qi!!!JD##N$V31Z$31Y!!)d!!!))JJTrB)$V`VpJJ!%#QC
 | 
			
		||||
TE'80!km!!@d!!!JP##J$X!`$X!!,!!9cD'%ZD!!#!!!0!ki!!M3!!!JD##,pJ31
 | 
			
		||||
a#[f"!!3+BfC[E!d$X3!"E`!!#"i))If!#rf!!"3`!!KdC@e`F'&dD!!)G'9YF&"
 | 
			
		||||
KG'J'rB-!!!)$T3!#!l)$X`d$XJ!#E!!##$!)-2errAi"rAm!!!(pIJ!!!J1c!!)
 | 
			
		||||
$Y!1e$31d!!*b!!!)-!Jl!lB$Y`d$YJ!#BJ!!#$!)0`1i!lN0!lJ!!@m!!!J`#$2
 | 
			
		||||
pI3[pI3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d$Z3!
 | 
			
		||||
"E3!!#$-)0J1k$!1k!!d!"cTdH(4IC')!!J!!$31h!!&[!!!!!!!!rA`,rA`!&$!
 | 
			
		||||
!#(4PEA"`BA4S!!KdC@e`8'&dD!)$Y3!#!lX$[!d$Z`!$53!##$`)C[elrAS$[3V
 | 
			
		||||
pH`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rAS!!!B$[3!$rAN$[J1r#[e
 | 
			
		||||
j!!3+DfpME!d$[J!"E3!!#%!)3rei#[ei!!3+B@aTB3B$[`!$rAF$`!2"#[eh!!3
 | 
			
		||||
+D@jcD!d$`!!#0!!!#%B)6[ef!m)+rAB!"!TMCQpX$32#!!&[!!!)5JK0rA8,rA8
 | 
			
		||||
!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'Efa
 | 
			
		||||
NCA*3BA4S"J2"!!2pG!2$rA-+rA3!"!TdEb!J$32$!!*Z!!!)83KJ!m3$a3d$a!!
 | 
			
		||||
#0!!!#&N)B2eb!mB+rA)!"!TQD@aP$32'!!&Y!!!)A!KI!mF-!mF!$J!)G(KdAf4
 | 
			
		||||
L,QJ!!J!!$32&!!)d!!!)83KCrA%$b!VpF3!%#Q0QEf`0!mJ!!@m!!!K9#&MpF![
 | 
			
		||||
pF!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[ec!!!#!l`!!J2*!mS0!mN!!Q`!!JK
 | 
			
		||||
R#'IpEreZ!Ie[!!!"r@i!!!)$bJ!#!mX$c!d$b`!#FJ!!#'F)FJ20!mi0!md!!Q)
 | 
			
		||||
!!!KR#'i$c`23$322!!&[!!!)C`KUr@d,r@d!*$!!%'0bHA"dEfC[E'4PFR"KG'J
 | 
			
		||||
!%'0bHA"dEdC[E'4PFP"KG'J0!p!!!@d!!!KU#'d$d3`$d3!,!!8kH$8`13!#!!!
 | 
			
		||||
0!mi!!@m!!!!!!!$pE![pE!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J2-!!)$dJ2
 | 
			
		||||
6$325!!0*!!))F`LGr@[pDJ28#[eV!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9
 | 
			
		||||
XE!(pDJ!!"J28!!2pD329!pB+r@N!"!TVEf0X$329!!&Y!!!)G`Kkr@J+r@J!"!T
 | 
			
		||||
KE'PK"J2@!!2pC`2A!pJ+r@F!"!TTER0S$32A!!)d!!!)I3L&r@B$f3VpCJ!%#Q0
 | 
			
		||||
QEf`0!pN!!@m!!!L"#)6pC3[pC3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4
 | 
			
		||||
S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!pJ!!reN!pVpB`VpC!!%#R4[)#!
 | 
			
		||||
0!pS!!Qi!!!L)#*F$f`2F$32E!!)d!!!)N!!)PreL!pd+r@)!"!TQD@aP$32G!!&
 | 
			
		||||
Y!!!)N`L@!pi-!pi!$!!'H$8`15jS!!)!!!d$h!!#0!!!#)J)N!$pB32I#[eK!!3
 | 
			
		||||
+BfC[E!d$h`!"E`!!#)`)MreJ#reJ!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'r@-
 | 
			
		||||
!!!)$d`!#!q!$i3d$i!!$53!##*i)b2eIr9i$iJVpA`!B,Q0[FQ9MFQ9X+LSU+J!
 | 
			
		||||
!!!!!!*!!!'jeE'`"r9i!!!B$iJ!$r9d$i`2N#[eG!!3+DfpME!d$i`!"E3!!#+)
 | 
			
		||||
)TIeF#[eF!!3+B@aTB3B$j!!$r9X$j32Q#[eE!!3+D@jcD!d$j3!#0!!!#+J)X2e
 | 
			
		||||
D!qF+r9S!"!TMCQpX$32R!!&[!!!)V!L[r9N,r9N!0$!!''p`C@jcFfaTEQ0XG@4
 | 
			
		||||
PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J2Q!!2p@!2Sr9F
 | 
			
		||||
+r9J!"!TdEb!J$32S!!*Z!!!)X`M#!qN$kJd$k3!#0!!!#,X)`[e@!qX+r9B!"!T
 | 
			
		||||
QD@aP$32V!!&Y!!!)[JM"!q`-!q`!%!!+H$8`19pfCRNZD!!#!!!0!qS!!M3!!!L
 | 
			
		||||
c#,[p932Y#[e9!!3+BfC[E!d$l3!"E`!!#,F)Z[e8#re8!"3`!!KdC@e`F'&dD!!
 | 
			
		||||
)G'9YF&"KG'J'r9F!!!)$i3!#!qi$l`d$lJ!#E!!##-N)bIe6r9)"r9-!!!(p8J!
 | 
			
		||||
!!J2[!!)$m!2a$32`!!*b!!!)b3M8!r)$m`d$mJ!#BJ!!#-N)d!2d!r80!r3!!@m
 | 
			
		||||
!!!M*#-cp83[p83!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&
 | 
			
		||||
dD!d$p3!"E3!!#-`)c`2f$!2f!!d!"cTi06!jGM-!!J!!$32c!!&[!!!!!!!!r9!
 | 
			
		||||
,r9!!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)$m3!#!rF$q!d$p`!$53!##08)rre
 | 
			
		||||
2r8i$q3Vp6`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r8i!!!B$q3!$r8d
 | 
			
		||||
$qJ2l#[e0!!3+DfpME!d$qJ!"E3!!#0N)h2e-#[e-!!3+B@aTB3B$q`!$r8X$r!2
 | 
			
		||||
p#[e,!!3+D@jcD!d$r!!#0!!!#0m)jre+!ri+r8S!"!TMCQpX$32q!!&[!!!)i`M
 | 
			
		||||
Qr8N,r8N!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfa
 | 
			
		||||
eC'9'EfaNCA*3BA4S"J2p!!2p5!2rr8F+r8J!"!TdEb!J$32r!!*Z!!!)kJMj"!!
 | 
			
		||||
%!3d%!!!#0!!!#2))qIe'"!)+r8B!"!TQD@aP$33#!!&Y!!!)p3Mi"!--"!-!$J!
 | 
			
		||||
)H$8`1ABc,QJ!!J!!$33"!!)d!!!)kJMbr88%"!Vp43!%#Q0QEf`0"!3!!@m!!!M
 | 
			
		||||
Z#2(p4![p4!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[e(!!!#!rJ!!J3&"!B0"!8
 | 
			
		||||
!!Q`!!JN!#3$p3re#!Ie$!!!"r8)!!!)%"J!#"!F%#!d%"`!$53!##3!*+[e"r8!
 | 
			
		||||
%#3Vp33!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r8!!!!B%#3!$r6m%#J3
 | 
			
		||||
,#[dr!!3+DfpME!d%#J!"E3!!#33*"rdq#[dq!!3+B@aTB3B%#`!$r6d%$!30#[d
 | 
			
		||||
p!!3+D@jcD!d%$!!#0!!!#3S*%[dm"!i+r6`!"!TMCQpX$331!!&[!!!*$JN4r6X
 | 
			
		||||
,r6X!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9
 | 
			
		||||
'EfaNCA*3BA4S"J30!!2p1J32r6N+r6S!"!TdEb!J$332!!*Z!!!*&3NN""!%%3d
 | 
			
		||||
%%!!#0!!!#4d**2di"")+r6J!"!TQD@aP$335!!&Y!!!*)!NM""--""-!#`!&Fh0
 | 
			
		||||
X,QJ!!J!!$334!!)d!!!*&3NGr6F%&!Vp0`!%#Q0QEf`0""3!!@m!!!NC#4cp0J[
 | 
			
		||||
p0J!H-!!0Fh0XCQpXC'9bF'&dD!!0Fh0X4QpXC'9b8'&dD!Ep13!!!J3)!!)%&33
 | 
			
		||||
@$339!!0*!!)*+`P9r6Ap0!3A#[de!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9
 | 
			
		||||
XE!(p0!!!"J3A!!2p-`3B""N+r6-!"!TVEf0X$33B!!&Y!!!*,`Nbr6)+r6)!"!T
 | 
			
		||||
KE'PK"J3C!!2p-33D""X+r6%!"!TTER0S$33D!!)d!!!*03Npr6!%(!Vp-!!%#Q0
 | 
			
		||||
QEf`0""`!!@m!!!Nj#6cp,`[p,`!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4
 | 
			
		||||
S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'""X!!rdZ""hp,3Vp,J!%#R4[)#!
 | 
			
		||||
0""d!!Qi!!!P!#8m%(J3I$33H!!)d!!!*5!P2r5`%)!Vp,!!%#QCTE'80"#!!!@d
 | 
			
		||||
!!!P,#8i%)3`%)3!-!!CcFf`b,QJ!!J!!$33I!!)d!!!*3!P)r5X%)JVp+`!%#Q0
 | 
			
		||||
QEf`0"#)!!@m!!!P%#8Ip+J[p+J!H-!!0Fh0XCQpXC'9bF'&dD!!0Fh0X4QpXC'9
 | 
			
		||||
b8'&dD!Ep,3!!!J3@!!)%)`3N$33M!!0*!!)*9JQ!r5Rp+!3P#[dT!"JZBfpbC@0
 | 
			
		||||
bC@`U+LSU!!!!!!!!N!!!ER9XE!(p+!!!"J3P!!2p*`3Q"#F+r5F!"!TVEf0X$33
 | 
			
		||||
Q!!&Y!!!*@JPGr5B+r5B!"!TKE'PK"J3R!!2p*33S"#N+r58!"!TTER0S$33S!!)
 | 
			
		||||
d!!!*B!PSr53%+JVp*!!%#Q0QEf`0"#S!!@m!!!PN#@Ip)`[p)`!d-!!BEh"PER0
 | 
			
		||||
cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'"#N
 | 
			
		||||
!!rdL"#[p)3Vp)J!%#R4[)#!0"#X!!Qi!!!PV#AS%,!3Y$33X!!)d!!!*F`Pkr5!
 | 
			
		||||
%,JVp)!!%#QCTE'80"#i!!@d!!!Pf#AN%,``%,`!0!!GcFf`b-bjS!!)!!!d%,3!
 | 
			
		||||
#0!!!#@X*FrdI"$!+r4m!"!TMCQpX$33`!!&[!!!*E`Pbr4i,r4i!(M!!$A0cE'C
 | 
			
		||||
[E'4PFR"KG'J!$A0cE%C[E'4PFP"KG'J'r5%!!!)%*!!#"$%%-Jd%-3!$53!##B%
 | 
			
		||||
*UrdGr4`%-`Vp(3!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r4`!!!B%-`!
 | 
			
		||||
$r4X%0!3e#[dE!!3+DfpME!d%0!!"E3!!#B8*L2dD#[dD!!3+B@aTB3B%03!$r4N
 | 
			
		||||
%0J3h#[dC!!3+D@jcD!d%0J!#0!!!#BX*NrdB"$J+r4J!"!TMCQpX$33i!!&[!!!
 | 
			
		||||
*M`Q5r4F,r4F!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%P
 | 
			
		||||
ZBfaeC'9'EfaNCA*3BA4S"J3h!!2p&J3jr48+r4B!"!TdEb!J$33j!!*Z!!!*PJQ
 | 
			
		||||
P"$S%1`d%1J!#0!!!#Ci*TId8"$`+r43!"!TQD@aP$33m!!&Y!!!*S3QN"$d-"$d
 | 
			
		||||
!$!!'Fh0X-bjS!!)!!!d%1`!#0!!!#CB*R[d6"$i+r4-!"!TMCQpX$33q!!&[!!!
 | 
			
		||||
*QJQGr4),r4)!(M!!$A0cE'C[E'4PFR"KG'J!$A0cE%C[E'4PFP"KG'J'r48!!!)
 | 
			
		||||
%-J!#"$m%3!d%2`!$53!##D`*e[d4r4!%33Vp%3!B,Q0[FQ9MFQ9X+LSU+J!!!!!
 | 
			
		||||
!!*!!!'jeE'`"r4!!!!B%33!$r3m%3J4$#[d2!!3+DfpME!d%3J!"E3!!#E!*Xrd
 | 
			
		||||
1#[d1!!3+B@aTB3B%3`!$r3d%4!4&#[d0!!3+D@jcD!d%4!!#0!!!#EB*[[d-"%B
 | 
			
		||||
+r3`!"!TMCQpX$34'!!&[!!!*ZJQpr3X,r3X!0$!!''p`C@jcFfaTEQ0XG@4PCQp
 | 
			
		||||
XC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J4&!!2p#J4(r3N+r3S
 | 
			
		||||
!"!TdEb!J$34(!!*Z!!!*`3R3"%J%53d%5!!#0!!!#FN*d2d)"%S+r3J!"!TQD@a
 | 
			
		||||
P$34+!!&Y!!!*c!R2"%X-"%X!$!!'G'ac-5jS!!)!!!d%53!#0!!!#F%*bId("%`
 | 
			
		||||
+r3F!"!TMCQpX$34-!!&[!!!*a3R)r3B,r3B!(M!!$A0cE'C[E'4PFR"KG'J!$A0
 | 
			
		||||
cE%C[E'4PFP"KG'J'r3N!!!)%3!!#"%d%6Jd%63!#E!!##GF*erd&r33"r38!!!(
 | 
			
		||||
p"!!!!J41!!)%6`43$342!!0*!!)*e`S"r32p!J44#[d$!"JZBfpbC@0bC@`U+LS
 | 
			
		||||
U!!!!!!!!N!!!ER9XE!(p!J!!"J44!!2p!345"&-+r3%!"!TVEf0X$345!!&Y!!!
 | 
			
		||||
*f`RHr3!+r3!!"!TKE'PK"J46!!2mr`48"&8+r2m!"!TTER0S$348!!)d!!!*i3R
 | 
			
		||||
Tr2i%9JVmrJ!%#Q0QEf`0"&B!!@m!!!RP#HMmr3[mr3!d-!!BEh"PER0cE'PZBfa
 | 
			
		||||
eC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'"&8!!rcm"&I
 | 
			
		||||
mq`Vmr!!%#R4[)#!0"&F!!Qi!!!RX#IX%@!4C$34B!!)d!!!*p!Rlr2S%@JVmqJ!
 | 
			
		||||
%#QCTE'80"&S!!@d!!!Rh#IS%@``%@`!1!!KMFRP`G'mZD!!#!!!0"&N!!M3!!!R
 | 
			
		||||
X#I6mq34F#[cj!!3+BfC[E!d%A!!"E`!!#I!*mrci#rci!#3`!""MFRP`G'pQEfa
 | 
			
		||||
NCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S"[cl!!!#"&!!!J4G"&i0"&d!!Q`!!JS
 | 
			
		||||
##J,mprcf!Ich!!!"r2B!!!)%AJ!#"&m%B!d%A`!$53!##J)+,2cer23%B3Vmp3!
 | 
			
		||||
B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r23!!!B%B3!$r2-%BJ4M#[cc!!3
 | 
			
		||||
+DfpME!d%BJ!"E3!!#JB+#Icb#[cb!!3+B@aTB3B%B`!$r2%%C!4P#[ca!!3+D@j
 | 
			
		||||
cD!d%C!!#0!!!#J`+&2c`"'B+r2!!"!TMCQpX$34Q!!&[!!!+%!S6r1m,r1m!0$!
 | 
			
		||||
!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*
 | 
			
		||||
3BA4S"J4P!!2mlJ4Rr1d+r1i!"!TdEb!J$34R!!*Z!!!+&`SQ"'J%D3d%D!!#0!!
 | 
			
		||||
!#Km+*[cX"'S+r1`!"!TQD@aP$34U!!&Y!!!+)JSP"'X-"'X!%!!+Eh"PER0cE(B
 | 
			
		||||
ZD!!#!!!0"'N!!M3!!!SA#Krmk`4X#[cV!!3+BfC[E!d%E!!"E`!!#KX+([cU#rc
 | 
			
		||||
U!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S"[cY!!!#"'!
 | 
			
		||||
!!J4Y"'i0"'d!!dN!!JSY#PImkIcS"'m+r1N!'#jMEh*PBh*PE#SU+LS!!!!!!!#
 | 
			
		||||
3!!"ZG@aX!IcS!!!'"'m!!rcR"(!%F3Vmj`!%#QY[Bf`0"(!!!@d!!!Sa#M6mjJV
 | 
			
		||||
mjJ!%#Q&XD@%'"(%!!rcP"()%F`Vmj3!%#QPZFfJ0"()!!M3!!!Sh#Mrmj!4d#[c
 | 
			
		||||
N!!3+BfC[E!d%G!!"E`!!#MX+2[cM#rcM!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4
 | 
			
		||||
PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B%F`!$r1)%GIcK#[cL!!3
 | 
			
		||||
+G'mJ)!d%G3!#EJ!!#N)+834f"(F0"(B!!M3!!!T+#P(mi!4i#[cJ!!3+CQPXC3d
 | 
			
		||||
%H!!"E3!!#Nd+8!4j$!4j!!i!#(4YC'PQCLjS!!)!!!d%G`!#0!!!#N)+5[cI"(S
 | 
			
		||||
+r0m!"!TMCQpX$34k!!&[!!!+4JT*r0i,r0i!*$!!%'0bHA"dEfC[E'4PFR"KG'J
 | 
			
		||||
!%'0bHA"dEdC[E'4PFP"KG'J'r1%!!!)%EJ!#"(X%I!d%H`!#E!!##PJ+@2cGr0`
 | 
			
		||||
"r0d!!!(mh!!!!J4m!!)%I34q$34p!!*X!!)+@!TBr0[mfJ(mf`!!!IcD!!!#"(i
 | 
			
		||||
!!J4r")!0"(m!!dN!!JTB#S,mfIcB")%+r0N!'#jMEh*PBh*PE#SU+LS!!!!!!!#
 | 
			
		||||
3!!"ZG@aX!IcB!!!'")%!!rcA"))%J`Vme`!%#QY[Bf`0"))!!@d!!!TF#PrmeJV
 | 
			
		||||
meJ!%#Q&XD@%'")-!!rc9")3%K3Vme3!%#QPZFfJ0")3!!M3!!!TL#QVme!5'#[c
 | 
			
		||||
8!!3+BfC[E!d%KJ!"E`!!#QB+DIc6#rc6!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4
 | 
			
		||||
PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B%K3!$r0)%Krc4#[c5!!3
 | 
			
		||||
+G'mJ)!d%K`!#EJ!!#Qd+I!5)")N0")J!!M3!!!Te#Rcmd!5+#[c3!!3+CQPXC3d
 | 
			
		||||
%LJ!"E3!!#RJ+H`5,$!5,!!`!"Q9IEh-ZD!!#!!!0")N!!M3!!!TY#RAmc`5-#[c
 | 
			
		||||
2!!3+BfC[E!d%M!!"E`!!#R%+G2c1#rc1!#B`!"&[F'9ZFh0XCQpXC'9bF'&dD!!
 | 
			
		||||
4Eh"PER0cE%C[E'4PFP"KG'J'r0%!!!)%J!!#")d%MJd%M3!$53!##S-+VIc0r-`
 | 
			
		||||
%M`Vmc3!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r-`!!!B%M`!$r-X%N!!
 | 
			
		||||
%N3Vmb`!%#QY[Bf`0"*!!!!&Y!!!+K`U+r-S+r-S!"!TKE'PK"J54!!2mb355"*-
 | 
			
		||||
+r-N!"!TTER0S$355!!)d!!!+M3U9r-J%P!Vmb!!%#Q0QEf`0"*3!!@m!!!U4#T6
 | 
			
		||||
ma`[ma`!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9
 | 
			
		||||
NC8C[E'4PFP"KG'J'"*-!!rc'"*Ama3VmaJ!%#R4[)#!0"*8!!Qi!!!UB#UF%PJ5
 | 
			
		||||
A$35@!!)d!!!+S!URr-3%Q!Vma!!%#QCTE'80"*J!!@d!!!UM#UB%Q3`%Q3!0!!G
 | 
			
		||||
PAfpc-LjS!!)!!!d%P`!#0!!!#TJ+S2c$"*S+r--!"!TMCQpX$35D!!&[!!!+R!U
 | 
			
		||||
Ir-),r-)!*M!!%@p`C@jcFfaQEfaNCA*`BA4S!"&[F'9ZFh0X4QpXC'9b8'&dD!E
 | 
			
		||||
ma3!!!J51!!)%Qrc"$35E!!*X!!)+VJUZr-$m[`(m`!!!!Ibr!!!#r-%!!!d!#3!
 | 
			
		||||
"E3!!!!!!!3!I!Irq!!!#!!B!!J5F"*d0"*`!!Q`!!J!!!!$m[[bp!Ibq!!!"r,d
 | 
			
		||||
!!!)%R3!#"*i%R`d%RJ!#E!!##V%+b!5Jr,`0"+!!!dN!!JUa#XMmZ`5K"+)+r,X
 | 
			
		||||
!'#jcHA0[C'a[Cf&cDh)!!!!!!!!!!&4&@&30"+%!!@d!!!Ua#V3%S``%S`!'!!!
 | 
			
		||||
!!J!!"J5L!!2mZJ5N"+8+r,S!"!TLG'jc$35N!!&+!!!+Y`Um"+B#"+B!!J5Rr,N
 | 
			
		||||
0"+F!!@d!!!Uh#VS%U!`%U!!+!!4%EfjP!!)!!!,mZ3!!"J5P!!2mZ!5Tr,F+r,J
 | 
			
		||||
!"!TRDACe$35T!!&Y!!!+[`V#r,B$r,B!"3EmY`!!!Ibm!!!#"*m!!J5Ur,80"+S
 | 
			
		||||
!!Q`!!J!!!!$mY2bc!Ibd!!!"r,-!!!,mY3!!$J!#!!!2%!!$!",mXJ5V"+`%V35
 | 
			
		||||
Z"+m%X!5a",)%X`5d",8%YJ5hr,(mX2b[r+i"r,)!!"!%U`!3r+hmV2bVr+VmUIb
 | 
			
		||||
Sr+ImT[bPr+6mSrbLr+(mS2bIr*i+r+d!'#jKCACdEf&`F'jeE'`!!)!!!!#3!!!
 | 
			
		||||
U+LSU#rbX!")`!!GdD'9`BA4S!!GdD'93BA4S#rbV!"``!!adD'9[E'4NC@aTEA-
 | 
			
		||||
!$(4SC8pXC%4PE'PYF`[mUJ!J-!!1G'KPF(*[DQ9MG("KG'J!$R4SC9"bEfTPBh4
 | 
			
		||||
3BA4S#rbT!"B`!!PdD'9YCA"KG'J!#A4SC8eP8'&dD![mU!!Q-!!4D@jME(9NC@C
 | 
			
		||||
[E'4PFR"KG'J!%@PZBfaeC'9'EfaNCA*3BA4S#rbR!$3`!"K[F'9ZFh0XD@jME(9
 | 
			
		||||
NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD![mTJ!N-!!3Bh*
 | 
			
		||||
jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD![mT3!H-!!0Fh0XCQpXC'9
 | 
			
		||||
bF'&dD!!0Fh0X4QpXC'9b8'&dD![mT!!Q-!!4Eh"PER0cE'C[E'4PFR"KG'J!%@p
 | 
			
		||||
`C@jcFfa'EfaNCA*3BA4S#rbM!#i`!"9dD'9ZCAGQEfaNCA*bC@CPFQ9ZBf8!&A4
 | 
			
		||||
SC8jPGdC[E'4PFP*PCQ9bC@jMC3[mSJ!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!Ib
 | 
			
		||||
K!!!"r+!!!!(mR`!!!IbH!!!1"+`!"a$mR35ir*cmQ`5j",VmQJVmR3!B,Q&PGR4
 | 
			
		||||
[BA"`ER9XE!!!J!!!!*!!!#SU+LS0",J!!@X!!!!!#XJ%Z`)%Z`!#!!8%[!)%[!!
 | 
			
		||||
#"*lmQ3,mQ3!!!IbF!!!#r*X!!"!%Z3!!%!5k!)B!(rbBr*ImP[b9r*6mNrb5!#c
 | 
			
		||||
mNIb3!2b2r)lmMIb-!%rmL`"D!&[mLJ"Nr)N!EIb)r)ImKJ#2r)AmK2b$r),mJIb
 | 
			
		||||
!r(rmI[apr(cmH`#Tr(VmHIair(F![Iaf!-ImG3$8!1)!l!$j!3-"%!%D!5F"-3%
 | 
			
		||||
q!8J"93&I!@`"GJ'$!Bd"QJ'N!E%"Z`()!G)"h`(T!IB#!!)0!KF#*!)Z!MX#43*
 | 
			
		||||
5!P`#D3*c!S!#LJ+A!U%#VJ+m!XB#d`,G!ZS#p!-"!`X$'!-L!bm$130'!e!$A30
 | 
			
		||||
R!h3$IJ1,!jN$S`1`!lS$a`24!pi$l!2f"!-%%`3K"#m%234,"&X%D`4j")X%Q35
 | 
			
		||||
Mr(3%U2acr(,mF3VmQ!!%#Q0[BQS+r*F!'#jPBA*cCQCNFQ&XDA-!!!!!!!!J!'&
 | 
			
		||||
QC()+r*B!"!TMG(Kd#rb9!")`!!GdD'9`BA4S!!GdD'93BA4S#[b8!!3+BA0MFJV
 | 
			
		||||
mN`!%#R4iC'`,r*)!($!!$(4SC@pXC'4PE'PYF`!-G'KP6faN4'9XD@ec#[b4!!3
 | 
			
		||||
+BfPdE32mN!$rr3[mM`!J-!!1G'KPF(*[DQ9MG("KG'J!$R4SC9"bEfTPBh43BA4
 | 
			
		||||
S!rb1rri+r)d!"!T849K8#rb-!"B`!!PdD'9YCA"KG'J!#A4SC8eP8'&dD![mL`!
 | 
			
		||||
Q-!!4D@jME(9NC@C[E'4PFR"KG'J!%@PZBfaeC'9'EfaNCA*3BA4S#rb+!$3`!"K
 | 
			
		||||
[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&
 | 
			
		||||
dD![mL3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD![mL!!
 | 
			
		||||
H-!!0Fh0XCQpXC'9bF'&dD!!0Fh0X4QpXC'9b8'&dD![mK`!Q-!!4Eh"PER0cE'C
 | 
			
		||||
[E'4PFR"KG'J!%@p`C@jcFfa'EfaNCA*3BA4S#[b'!!3+BfC[E!VmK3!B,QeTFf0
 | 
			
		||||
cE'0d+LSU+J!!!!!!!*!!!#SU+LS+r)3!"!TcC@aP#[b$!"JZBfpbC@4PE'mU+LS
 | 
			
		||||
U!!!!!!!!N!!!+LSU+J(mJJ!!![b"!!!+r)!!"!TVEf0X#[ar!!3+D@jcD!2mIJ!
 | 
			
		||||
%#[ap!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!VmI!!%#R*cE(3,r(X!,M!
 | 
			
		||||
!&A4SC@jPGfC[E'4PFR*PCQ9bC@jMC3!9G'KP6Q9h4QpXC'9b8Q9QCA*PEQ0P#[a
 | 
			
		||||
k!!3+F'jKE3VmH3!%#Q&XD@%+r(J!"!TdEb!J#[ah!!3+CQPXC32mGJ!'#rae!"3
 | 
			
		||||
`!!KdC@e`F'&dD!!)G'9YF&"KG'J+r(3!"!TLG'jc#[ac!!3+CfPfG32mFJ!&#[a
 | 
			
		||||
a!"JZFhPcEf4XEfGKFfYb!!!!!!!!!!"849K8%IbD#XRJ%JUYi1%TDJ`!!LrM*N9
 | 
			
		||||
4e%r&jLa&edrSaHBX4Nr%@qPF@eTVA&VU-NAE6m4Ek9aE@QYF@Z`bl5C&hNr,lbA
 | 
			
		||||
Y*N9J!""2bf%!%59K!")Pl5C&B!!66mYK!"3Pl5C&B!!96mYK!"BPl5C&B!!A6m[
 | 
			
		||||
Y*N9J!"K2amAQ,%C2&!!L+Q%!'9m!%#pK!"PK!"S[DJ`!'dmUB3!F,'S-!"eA!!K
 | 
			
		||||
B!"i!(fK2+Q%!)'%!'@%!)5TK!"PI!"![B3!L$!!M6em!*%9J!#92A`!PDJ`!'dp
 | 
			
		||||
K!#BUB3!F,'%!*ba'6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"R1,f%!+Q%!+bp
 | 
			
		||||
K!#`-!#02A`!9B3!Y*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,Lp
 | 
			
		||||
K!#TK!#m[B3!X$!!M6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3!
 | 
			
		||||
`,f%!,!`!)dpI!"9K!$%P4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!
 | 
			
		||||
Z,f%!+Q%!-LpK!#`-!#02A`!9B3!c*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!
 | 
			
		||||
T+Q%!'9m!,LpK!#TK!$3[B3!X$!!M6em!&@%!059&B!!Z6bTK!#"K!#KK!#%UB3!
 | 
			
		||||
CA`!6,f%!+5TK!"PI!#i[B3!UB3!f,f%!,!`!)dpI!"9K!$FP4@!!,NmUB3!JB3!
 | 
			
		||||
SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!1#pK!#`-!#02A`!9B3!j*89J!#j
 | 
			
		||||
2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!$S[B3!X$!!M6em!&@%
 | 
			
		||||
!1b9&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3!m,f%!,!`
 | 
			
		||||
!)dpI!"9K!$dP4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%
 | 
			
		||||
!2LpK!#`-!#02A`!9B3!r*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m
 | 
			
		||||
!,LpK!#TK!%![B3!X$!!M6em!&@%!359&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%
 | 
			
		||||
!+5TK!"PI!#i[B3!UB3"#,f%!,!`!)dpI!"9K!%-P4@!!,NmUB3!JB3!SB3!K+Q%
 | 
			
		||||
!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!4#pK!#`-!#02A`!9B3"&*89J!#j2+Q%!)'%
 | 
			
		||||
!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!%B[B3!X$!!M6em!&@%!4b9&B!!
 | 
			
		||||
Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"),f%!,!`!)dpI!"9
 | 
			
		||||
K!%NP4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!5LpK!#`
 | 
			
		||||
-!#02A`!9B3",*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#T
 | 
			
		||||
K!%`[B3!X$!!M6em!&@%!659&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"P
 | 
			
		||||
I!#i[B3!UB3"1,f%!,!`!)dpI!"9K!%mP4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bp
 | 
			
		||||
K!#NUB3!CA`!Z,f%!+Q%!8#pK!#`-!#02A`!9B3"4*89J!#j2+Q%!)'%!+'%!)5T
 | 
			
		||||
K!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!&)[B3!X$!!M6em!&@%!8b9&B!!Z6bTK!#"
 | 
			
		||||
K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"8,f%!,!`!)dpI!"9K!&8P4@!
 | 
			
		||||
!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!9LpK!#`-!#02A`!
 | 
			
		||||
9B3"A*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!&J[B3!
 | 
			
		||||
X$!!M6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"C,f%!,!`!)dp
 | 
			
		||||
I!"9K!&SP4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!@bp
 | 
			
		||||
K!#`-!#02A`!9B3"F*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,Lp
 | 
			
		||||
K!#TK!&d[B3!X$!!M6em!&@%!AL9&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5T
 | 
			
		||||
K!"PI!#i[B3!UB3"I,f%!,!`!)dpI!"9K!'!P4@!!,NmUB3!JB3!SB3!K+Q%!'9m
 | 
			
		||||
!%bpK!#NUB3!CA`!Z,f%!+Q%!B5pK!#`-!#02A`!9B3"L*89J!#j2+Q%!)'%!+'%
 | 
			
		||||
!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!'-[B3!X$!!M6em!&@%!C#9&B!!Z6bT
 | 
			
		||||
K!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"P,f%!,!`!)dpI!"9K!'B
 | 
			
		||||
P4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!CbpK!#`-!#0
 | 
			
		||||
2A`!9B3"S*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!'N
 | 
			
		||||
[B3!X$!!M6em!&@%!DL9&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i
 | 
			
		||||
[B3!UB3"V,f%!,!`!)dmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%
 | 
			
		||||
!E#pK!#`-!#02A`!9B3"Y*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m
 | 
			
		||||
!,LpK!#TK!'i[B3!X$!!M6em!&@%!Eb9&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%
 | 
			
		||||
!+5TK!"PI!#i[B3!UB3"`,f%!,!`!)dpI!"9K!(%P4@!!,NmUB3!JB3!SB3!K+Q%
 | 
			
		||||
!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!FLpK!#`-!#02+Q%!)'%!+'%!)5TK!"PI!"-
 | 
			
		||||
[B3!T+Q%!'9m!,LpK!#TK!(-[B3!X$!!M6em!&@%!G#9&B!!Z6bTK!#"K!#KK!#%
 | 
			
		||||
UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"e,f%!,!`!)dmUB3!JB3!SB3!K+Q%!'9m
 | 
			
		||||
!%bpK!#NUB3!CA`!A,f%!+Q%!GLpK!#`-!#02+Q%!)'%!+'%!)5TK!"PI!"-[B3!
 | 
			
		||||
T+Q%!'9m!&bpK!#TK!(F[B3!X$!!M6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"P
 | 
			
		||||
I!"F[B3!UB3"i,f%!,!`!)dmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!A,f%
 | 
			
		||||
!+Q%!H5pK!#`-!#02+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!&bpK!#TK!(S
 | 
			
		||||
[B3!X$!!M6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!"8[B3!UB3"l,f%!,!`
 | 
			
		||||
!)dmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!9,f%!+Q%!I#pK!#`-!#02+Q%
 | 
			
		||||
!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!&5pK!#TK!(d[B3!X$!!M6bTK!#"K!#K
 | 
			
		||||
K!#%UB3!CA`!6,f%!+5TK!"PI!"J[B3!UB3"q,f%!,!`!)dmUB3!JB3!SB3!K+Q%
 | 
			
		||||
!'9m!%bpK!#NUB3!CA`!B,f%!+Q%!IbpK!#`-!#028&92B3#!B3#"B3##DhCK!)0
 | 
			
		||||
K!)4K!#)-!)82$!5Y!&%!5deKBfPZG'pcD#")4$T%CA0VG'p`)%C[E'4PFMT*EQ0
 | 
			
		||||
[E@PZCcT[F'9ZFh0X,90139!Y-6Nj16%b-6%k6@&M6e-kE@YXD@jVFbjKF`!#!!!
 | 
			
		||||
1"+i!!J6mF!5p!ra`!!%1",d!!3!%[J`%[J!'!!!!!J!!$J5[!!)%r'm%[`2mE`!
 | 
			
		||||
%$J5r!!3!"-!%`36#"---"-!!%J!-6@&MD@jdEh0S)%K%!!)!!!`%`3!8!!j%CA0
 | 
			
		||||
VG'p`)%C[E'4PFJ!#!!!-"-)!$J!)5@jMEfeTEQF!!J!!$!6$!"X!&@p`C@jcFf`
 | 
			
		||||
Y8dj"8#da16Nj-6)a-3!#!!!-",!!4J"!6@&MD@jdEh0S)%K%1N4PFfYdEh!J4Qp
 | 
			
		||||
XC'9b1NPZBfpYD@jR1Qp`C@jcFf`Y8dj"8#da16Nj-6)a-6T0B@028`!#!!!-",%
 | 
			
		||||
!5!"#6@&MD@jdEh0S)%K%1N4PFfYdEh!J4QpXC'9b1NPZBfpYD@jR1Qp`C@jcFf`
 | 
			
		||||
Y8dj"8#da16Nj-6)a-6TTEQ0XG@4P!!)!!!`%XJ"3!%T0B@0TER4[FfJJ5%3k4'9
 | 
			
		||||
cDh4[F#"'EfaNCA)k5@jMEfeTEQFkEh"PER0cE#e66N&3,6%j16Na-M%a1QPZBfa
 | 
			
		||||
eC'8kEh"PER0cE!!#!!!-",-!4`""6@&MD@jdEh0S)%K%1N4PFfYdEh!J4QpXC'9
 | 
			
		||||
b1NPZBfpYD@jR1Qp`C@jcFf`Y8dj"8#da16Nj-6)a-6TMFRP`G'm!!J!!$!5d!%3
 | 
			
		||||
!2NeKBfPZG'pcD#")4$T%CA0VG'p`)%C[E'4PFMT*EQ0[E@PZCcT[F'9ZFh0X,90
 | 
			
		||||
139!Y-6Nj16%b-6%kFh0X!!)!!!`%Y3"!!$T0B@0TER4[FfJJ5%3k4'9cDh4[F#"
 | 
			
		||||
'EfaNCA)k5@jMEfeTEQFkEh"PER0cE#e66N&3,6%j16Na-M%a!!)!!!i%YJ!"&!6
 | 
			
		||||
%$J6%!!-B"-AmEJ6'$J6&!!-B"-ImE36)$J6(!!-B"-RmE!6+$J6*!!-B!"rmD`6
 | 
			
		||||
,#[aV!!3+BfC[E!`%b`!1!!K*EQ0[E@PZC`!#!!!+r'`!"!TMCQpX$!6+!"X!&@p
 | 
			
		||||
`C@jcFf`Y8dj"8#da16Nj-6)a-3!#!!!+r'd!"!TMCQpX$!6)!!d!"fPZBfaeC'8
 | 
			
		||||
!!J!!#[aZ!!3+BfC[E!`%aJ!9!!peER4TG'aPC#"QEfaNCA)!!J!!$!5h!%i!5%e
 | 
			
		||||
KBfPZG'pcD#")4$T%CA0VG'p`)%C[E'4PFMT*EQ0[E@PZCcT[F'9ZFh0X,90139!
 | 
			
		||||
Y-6Nj16%b-6%kBh*jF(4[1RJe-$Pf-`!#!!!"r,%!!!(mX!!!!Ib[!!!"r+i!!'&
 | 
			
		||||
cBh)!!3!-qYlHV3!!!3!!!*G#!!#@3J!!!AB!!$-8-0J!!!!F!AB!$h0MFhS!!!#
 | 
			
		||||
#6Np853!!!)jcBh"d!!!!QP4&@&3!!3#QFh4jE!!!!,j$6d4&!!%!bN*14%`!!!$
 | 
			
		||||
LBA"XG!!!!1j'8N9'!!!!qNP$6L-!!!%'D@0X0!!!!4*TBh-M!!!"(QPMFc3!!!%
 | 
			
		||||
UD'CNFJ!!!6C659T&!!!"3PG3Eh-!!!&1!!$rr`!!!!!!!!!!!)$rre!!!"i!!!!
 | 
			
		||||
!!)$rr`!!"cJ#DH#m"'Mrr`!!!*S!!!!!%iRrr`!!"Pi!!!!!"'Mrr`!!!53!!!!
 | 
			
		||||
!!!$rrb!!!9)!!!!!!!(rra3!!@i#DG`%!)$rr`!!!Pi#DH"X!!$rr`!!!Ri!!!!
 | 
			
		||||
!!)$rr`!!!S-#DH"d!*Err`!!!Si!!!!!!*Err`!!!j)!!!!!!*Err`!!"CB#DH%
 | 
			
		||||
i!*Err`!!"GS#DH%dkF$rr`!!"[`!!!!!rrrrr`!!"a)!!!!!!)$rr`!!"b!!!!!
 | 
			
		||||
!*4S:
 | 
			
		||||
							
								
								
									
										126
									
								
								MacOS/opensslconf.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								MacOS/opensslconf.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,126 @@
 | 
			
		||||
/* MacOS/opensslconf.h */
 | 
			
		||||
 | 
			
		||||
#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
 | 
			
		||||
# if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
 | 
			
		||||
#  define OPENSSLDIR "/usr/local/ssl"
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)
 | 
			
		||||
# define IDEA_INT unsigned int
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_MD2_H) && !defined(MD2_INT)
 | 
			
		||||
# define MD2_INT unsigned int
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_RC2_H) && !defined(RC2_INT)
 | 
			
		||||
/* I need to put in a mod for the alpha - eay */
 | 
			
		||||
# define RC2_INT unsigned int
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_RC4_H)
 | 
			
		||||
# if !defined(RC4_INT)
 | 
			
		||||
/*
 | 
			
		||||
 * using int types make the structure larger but make the code faster on most
 | 
			
		||||
 * boxes I have tested - up to %20 faster.
 | 
			
		||||
 */
 | 
			
		||||
/*-
 | 
			
		||||
 * I don't know what does "most" mean, but declaring "int" is a must on:
 | 
			
		||||
 * - Intel P6 because partial register stalls are very expensive;
 | 
			
		||||
 * - elder Alpha because it lacks byte load/store instructions;
 | 
			
		||||
 */
 | 
			
		||||
#  define RC4_INT unsigned char
 | 
			
		||||
# endif
 | 
			
		||||
# if !defined(RC4_CHUNK)
 | 
			
		||||
/*
 | 
			
		||||
 * This enables code handling data aligned at natural CPU word
 | 
			
		||||
 * boundary. See crypto/rc4/rc4_enc.c for further details.
 | 
			
		||||
 */
 | 
			
		||||
#  define RC4_CHUNK unsigned long
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_DES_H) && !defined(DES_LONG)
 | 
			
		||||
/*
 | 
			
		||||
 * If this is set to 'unsigned int' on a DEC Alpha, this gives about a %20
 | 
			
		||||
 * speed up (longs are 8 bytes, int's are 4).
 | 
			
		||||
 */
 | 
			
		||||
# ifndef DES_LONG
 | 
			
		||||
#  define DES_LONG unsigned long
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)
 | 
			
		||||
# define CONFIG_HEADER_BN_H
 | 
			
		||||
# if __option(longlong)
 | 
			
		||||
#  define BN_LLONG
 | 
			
		||||
# else
 | 
			
		||||
#  undef BN_LLONG
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
/* Should we define BN_DIV2W here? */
 | 
			
		||||
 | 
			
		||||
/* Only one for the following should be defined */
 | 
			
		||||
/*
 | 
			
		||||
 * The prime number generation stuff may not work when EIGHT_BIT but I don't
 | 
			
		||||
 * care since I've only used this mode for debuging the bignum libraries
 | 
			
		||||
 */
 | 
			
		||||
# undef SIXTY_FOUR_BIT_LONG
 | 
			
		||||
# undef SIXTY_FOUR_BIT
 | 
			
		||||
# define THIRTY_TWO_BIT
 | 
			
		||||
# undef SIXTEEN_BIT
 | 
			
		||||
# undef EIGHT_BIT
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H)
 | 
			
		||||
# define CONFIG_HEADER_RC4_LOCL_H
 | 
			
		||||
/*
 | 
			
		||||
 * if this is defined data[i] is used instead of *data, this is a %20 speedup
 | 
			
		||||
 * on x86
 | 
			
		||||
 */
 | 
			
		||||
# undef RC4_INDEX
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
 | 
			
		||||
# define CONFIG_HEADER_BF_LOCL_H
 | 
			
		||||
# define BF_PTR
 | 
			
		||||
#endif                          /* HEADER_BF_LOCL_H */
 | 
			
		||||
 | 
			
		||||
#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)
 | 
			
		||||
# define CONFIG_HEADER_DES_LOCL_H
 | 
			
		||||
/*
 | 
			
		||||
 * the following is tweaked from a config script, that is why it is a
 | 
			
		||||
 * protected undef/define
 | 
			
		||||
 */
 | 
			
		||||
# ifndef DES_PTR
 | 
			
		||||
#  define DES_PTR
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This helps C compiler generate the correct code for multiple functional
 | 
			
		||||
 * units.  It reduces register dependancies at the expense of 2 more
 | 
			
		||||
 * registers
 | 
			
		||||
 */
 | 
			
		||||
# ifndef DES_RISC1
 | 
			
		||||
#  define DES_RISC1
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# ifndef DES_RISC2
 | 
			
		||||
#  undef DES_RISC2
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# if defined(DES_RISC1) && defined(DES_RISC2)
 | 
			
		||||
YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED ! !!!!
 | 
			
		||||
# endif
 | 
			
		||||
/*
 | 
			
		||||
 * Unroll the inner loop, this sometimes helps, sometimes hinders. Very mucy
 | 
			
		||||
 * CPU dependant
 | 
			
		||||
 */
 | 
			
		||||
# ifndef DES_UNROLL
 | 
			
		||||
#  define DES_UNROLL
 | 
			
		||||
# endif
 | 
			
		||||
#endif                          /* HEADER_DES_LOCL_H */
 | 
			
		||||
#ifndef __POWERPC__
 | 
			
		||||
# define MD32_XARRAY
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										349
									
								
								Makefile.org
									
									
									
									
									
								
							
							
						
						
									
										349
									
								
								Makefile.org
									
									
									
									
									
								
							@@ -68,8 +68,6 @@ AR=ar $(ARFLAGS) r
 | 
			
		||||
RANLIB= ranlib
 | 
			
		||||
NM= nm
 | 
			
		||||
PERL= perl
 | 
			
		||||
#RM= echo --
 | 
			
		||||
RM= rm -f
 | 
			
		||||
TAR= tar
 | 
			
		||||
TARFLAGS= --no-recursion
 | 
			
		||||
MAKEDEPPROG=makedepend
 | 
			
		||||
@@ -90,7 +88,6 @@ PROCESSOR=
 | 
			
		||||
# CPUID module collects small commonly used assembler snippets
 | 
			
		||||
CPUID_OBJ= 
 | 
			
		||||
BN_ASM= bn_asm.o
 | 
			
		||||
EC_ASM=
 | 
			
		||||
DES_ENC= des_enc.o fcrypt_b.o
 | 
			
		||||
AES_ENC= aes_core.o aes_cbc.o
 | 
			
		||||
BF_ENC= bf_enc.o
 | 
			
		||||
@@ -102,8 +99,6 @@ SHA1_ASM_OBJ=
 | 
			
		||||
RMD160_ASM_OBJ= 
 | 
			
		||||
WP_ASM_OBJ=
 | 
			
		||||
CMLL_ENC=
 | 
			
		||||
MODES_ASM_OBJ=
 | 
			
		||||
ENGINES_ASM_OBJ=
 | 
			
		||||
PERLASM_SCHEME=
 | 
			
		||||
 | 
			
		||||
# KRB5 stuff
 | 
			
		||||
@@ -114,26 +109,6 @@ LIBKRB5=
 | 
			
		||||
ZLIB_INCLUDE=
 | 
			
		||||
LIBZLIB=
 | 
			
		||||
 | 
			
		||||
# This is the location of fipscanister.o and friends.
 | 
			
		||||
# The FIPS module build will place it $(INSTALLTOP)/lib
 | 
			
		||||
# but since $(INSTALLTOP) can only take the default value
 | 
			
		||||
# when the module is built it will be in /usr/local/ssl/lib
 | 
			
		||||
# $(INSTALLTOP) for this build may be different so hard
 | 
			
		||||
# code the path.
 | 
			
		||||
 | 
			
		||||
FIPSLIBDIR=/usr/local/ssl/$(LIBDIR)/
 | 
			
		||||
 | 
			
		||||
# The location of the library which contains fipscanister.o
 | 
			
		||||
# normally it will be libcrypto. If not compiling in FIPS mode
 | 
			
		||||
# at all this is empty making it a useful test for a FIPS compile.
 | 
			
		||||
 | 
			
		||||
FIPSCANLIB=
 | 
			
		||||
 | 
			
		||||
# Shared library base address. Currently only used on Windows.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
BASEADDR=
 | 
			
		||||
 | 
			
		||||
DIRS=   crypto ssl engines apps test tools
 | 
			
		||||
ENGDIRS= ccgost
 | 
			
		||||
SHLIBDIRS= crypto ssl
 | 
			
		||||
@@ -146,7 +121,7 @@ SDIRS=  \
 | 
			
		||||
	bn ec rsa dsa ecdsa dh ecdh dso engine \
 | 
			
		||||
	buffer bio stack lhash rand err \
 | 
			
		||||
	evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 \
 | 
			
		||||
	cms pqueue ts jpake srp store cmac
 | 
			
		||||
	cms pqueue ts jpake store
 | 
			
		||||
# keep in mind that the above list is adjusted by ./Configure
 | 
			
		||||
# according to no-xxx arguments...
 | 
			
		||||
 | 
			
		||||
@@ -183,17 +158,6 @@ WTARFILE=       $(NAME)-win.tar
 | 
			
		||||
EXHEADER=       e_os2.h
 | 
			
		||||
HEADER=         e_os.h
 | 
			
		||||
 | 
			
		||||
# Directories created on install if they don't exist.
 | 
			
		||||
INSTALLDIRS=	\
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/bin \
 | 
			
		||||
		$(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 \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/private
 | 
			
		||||
 | 
			
		||||
all: Makefile build_all openssl.pc libssl.pc libcrypto.pc
 | 
			
		||||
 | 
			
		||||
# as we stick to -e, CLEARENV ensures that local variables in lower
 | 
			
		||||
@@ -231,8 +195,8 @@ BUILDENV=	PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
 | 
			
		||||
		EXE_EXT='$(EXE_EXT)' SHARED_LIBS='$(SHARED_LIBS)'	\
 | 
			
		||||
		SHLIB_EXT='$(SHLIB_EXT)' SHLIB_TARGET='$(SHLIB_TARGET)'	\
 | 
			
		||||
		PEX_LIBS='$(PEX_LIBS)' EX_LIBS='$(EX_LIBS)'	\
 | 
			
		||||
		CPUID_OBJ='$(CPUID_OBJ)' BN_ASM='$(BN_ASM)'	\
 | 
			
		||||
		EC_ASM='$(EC_ASM)' DES_ENC='$(DES_ENC)'		\
 | 
			
		||||
		CPUID_OBJ='$(CPUID_OBJ)'			\
 | 
			
		||||
		BN_ASM='$(BN_ASM)' DES_ENC='$(DES_ENC)' 	\
 | 
			
		||||
		AES_ENC='$(AES_ENC)' CMLL_ENC='$(CMLL_ENC)'	\
 | 
			
		||||
		BF_ENC='$(BF_ENC)' CAST_ENC='$(CAST_ENC)'	\
 | 
			
		||||
		RC4_ENC='$(RC4_ENC)' RC5_ENC='$(RC5_ENC)'	\
 | 
			
		||||
@@ -240,12 +204,7 @@ BUILDENV=	PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
 | 
			
		||||
		MD5_ASM_OBJ='$(MD5_ASM_OBJ)'			\
 | 
			
		||||
		RMD160_ASM_OBJ='$(RMD160_ASM_OBJ)'		\
 | 
			
		||||
		WP_ASM_OBJ='$(WP_ASM_OBJ)'			\
 | 
			
		||||
		MODES_ASM_OBJ='$(MODES_ASM_OBJ)'		\
 | 
			
		||||
		ENGINES_ASM_OBJ='$(ENGINES_ASM_OBJ)'		\
 | 
			
		||||
		PERLASM_SCHEME='$(PERLASM_SCHEME)'		\
 | 
			
		||||
		FIPSLIBDIR='${FIPSLIBDIR}'			\
 | 
			
		||||
		FIPSCANLIB="$${FIPSCANLIB:-$(FIPSCANLIB)}"	\
 | 
			
		||||
		FIPS_EX_OBJ='${FIPS_EX_OBJ}'	\
 | 
			
		||||
		THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
 | 
			
		||||
# MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors,
 | 
			
		||||
# which in turn eliminates ambiguities in variable treatment with -e.
 | 
			
		||||
@@ -256,13 +215,13 @@ BUILDENV=	PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
 | 
			
		||||
# This macro shouldn't be used directly, use RECURSIVE_BUILD_CMD or
 | 
			
		||||
# BUILD_ONE_CMD instead.
 | 
			
		||||
#
 | 
			
		||||
# RECURSIVE_BUILD_CMD is a macro to build a given target in all
 | 
			
		||||
# subdirectories defined in $(DIRS).  It requires that the target
 | 
			
		||||
# is given through the shell variable `target'.
 | 
			
		||||
#
 | 
			
		||||
# BUILD_ONE_CMD is a macro to build a given target in a given
 | 
			
		||||
# subdirectory if that subdirectory is part of $(DIRS).  It requires
 | 
			
		||||
# exactly the same shell variables as BUILD_CMD.
 | 
			
		||||
#
 | 
			
		||||
# RECURSIVE_BUILD_CMD is a macro to build a given target in all
 | 
			
		||||
# subdirectories defined in $(DIRS).  It requires that the target
 | 
			
		||||
# is given through the shell variable `target'.
 | 
			
		||||
BUILD_CMD=  if [ -d "$$dir" ]; then \
 | 
			
		||||
	    (	cd $$dir && echo "making $$target in $$dir..." && \
 | 
			
		||||
		$(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. DIR=$$dir $$target \
 | 
			
		||||
@@ -277,107 +236,22 @@ BUILD_ONE_CMD=\
 | 
			
		||||
reflect:
 | 
			
		||||
	@[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)
 | 
			
		||||
 | 
			
		||||
FIPS_EX_OBJ= ../crypto/aes/aes_cfb.o \
 | 
			
		||||
	../crypto/aes/aes_ecb.o \
 | 
			
		||||
	../crypto/aes/aes_ofb.o \
 | 
			
		||||
	../crypto/bn/bn_add.o \
 | 
			
		||||
	../crypto/bn/bn_blind.o \
 | 
			
		||||
	../crypto/bn/bn_ctx.o \
 | 
			
		||||
	../crypto/bn/bn_div.o \
 | 
			
		||||
	../crypto/bn/bn_exp2.o \
 | 
			
		||||
	../crypto/bn/bn_exp.o \
 | 
			
		||||
	../crypto/bn/bn_gcd.o \
 | 
			
		||||
	../crypto/bn/bn_gf2m.o \
 | 
			
		||||
	../crypto/bn/bn_lib.o \
 | 
			
		||||
	../crypto/bn/bn_mod.o \
 | 
			
		||||
	../crypto/bn/bn_mont.o \
 | 
			
		||||
	../crypto/bn/bn_mul.o \
 | 
			
		||||
	../crypto/bn/bn_nist.o \
 | 
			
		||||
	../crypto/bn/bn_prime.o \
 | 
			
		||||
	../crypto/bn/bn_rand.o \
 | 
			
		||||
	../crypto/bn/bn_recp.o \
 | 
			
		||||
	../crypto/bn/bn_shift.o \
 | 
			
		||||
	../crypto/bn/bn_sqr.o \
 | 
			
		||||
	../crypto/bn/bn_word.o \
 | 
			
		||||
	../crypto/bn/bn_x931p.o \
 | 
			
		||||
	../crypto/buffer/buf_str.o \
 | 
			
		||||
	../crypto/cmac/cmac.o \
 | 
			
		||||
	../crypto/cryptlib.o \
 | 
			
		||||
	../crypto/des/cfb64ede.o \
 | 
			
		||||
	../crypto/des/cfb64enc.o \
 | 
			
		||||
	../crypto/des/cfb_enc.o \
 | 
			
		||||
	../crypto/des/ecb3_enc.o \
 | 
			
		||||
	../crypto/des/ofb64ede.o \
 | 
			
		||||
	../crypto/des/fcrypt.o \
 | 
			
		||||
	../crypto/des/set_key.o \
 | 
			
		||||
	../crypto/dh/dh_check.o \
 | 
			
		||||
	../crypto/dh/dh_gen.o \
 | 
			
		||||
	../crypto/dh/dh_key.o \
 | 
			
		||||
	../crypto/dsa/dsa_gen.o \
 | 
			
		||||
	../crypto/dsa/dsa_key.o \
 | 
			
		||||
	../crypto/dsa/dsa_ossl.o \
 | 
			
		||||
	../crypto/ec/ec_curve.o \
 | 
			
		||||
	../crypto/ec/ec_cvt.o \
 | 
			
		||||
	../crypto/ec/ec_key.o \
 | 
			
		||||
	../crypto/ec/ec_lib.o \
 | 
			
		||||
	../crypto/ec/ecp_mont.o \
 | 
			
		||||
	../crypto/ec/ec_mult.o \
 | 
			
		||||
	../crypto/ec/ecp_nist.o \
 | 
			
		||||
	../crypto/ec/ecp_smpl.o \
 | 
			
		||||
	../crypto/ec/ec2_mult.o \
 | 
			
		||||
	../crypto/ec/ec2_smpl.o \
 | 
			
		||||
	../crypto/ecdh/ech_key.o \
 | 
			
		||||
	../crypto/ecdh/ech_ossl.o \
 | 
			
		||||
	../crypto/ecdsa/ecs_ossl.o \
 | 
			
		||||
	../crypto/evp/e_aes.o \
 | 
			
		||||
	../crypto/evp/e_des3.o \
 | 
			
		||||
	../crypto/evp/e_null.o \
 | 
			
		||||
	../crypto/evp/m_sha1.o \
 | 
			
		||||
	../crypto/evp/m_dss1.o \
 | 
			
		||||
	../crypto/evp/m_dss.o \
 | 
			
		||||
	../crypto/evp/m_ecdsa.o \
 | 
			
		||||
	../crypto/hmac/hmac.o \
 | 
			
		||||
	../crypto/modes/cbc128.o \
 | 
			
		||||
	../crypto/modes/ccm128.o \
 | 
			
		||||
	../crypto/modes/cfb128.o \
 | 
			
		||||
	../crypto/modes/ctr128.o \
 | 
			
		||||
	../crypto/modes/gcm128.o \
 | 
			
		||||
	../crypto/modes/ofb128.o \
 | 
			
		||||
	../crypto/modes/xts128.o \
 | 
			
		||||
	../crypto/rsa/rsa_eay.o \
 | 
			
		||||
	../crypto/rsa/rsa_gen.o \
 | 
			
		||||
	../crypto/rsa/rsa_crpt.o \
 | 
			
		||||
	../crypto/rsa/rsa_none.o \
 | 
			
		||||
	../crypto/rsa/rsa_oaep.o \
 | 
			
		||||
	../crypto/rsa/rsa_pk1.o \
 | 
			
		||||
	../crypto/rsa/rsa_pss.o \
 | 
			
		||||
	../crypto/rsa/rsa_ssl.o \
 | 
			
		||||
	../crypto/rsa/rsa_x931.o \
 | 
			
		||||
	../crypto/rsa/rsa_x931g.o \
 | 
			
		||||
	../crypto/sha/sha1dgst.o \
 | 
			
		||||
	../crypto/sha/sha256.o \
 | 
			
		||||
	../crypto/sha/sha512.o \
 | 
			
		||||
	../crypto/thr_id.o \
 | 
			
		||||
	../crypto/uid.o
 | 
			
		||||
 | 
			
		||||
sub_all: build_all
 | 
			
		||||
 | 
			
		||||
build_all: build_libs build_apps build_tests build_tools
 | 
			
		||||
 | 
			
		||||
build_libs: build_crypto build_ssl build_engines
 | 
			
		||||
 | 
			
		||||
build_crypto:
 | 
			
		||||
	@dir=crypto; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_ssl: build_crypto
 | 
			
		||||
build_ssl:
 | 
			
		||||
	@dir=ssl; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_engines: build_crypto
 | 
			
		||||
	@dir=engines; target=all; AS='$(CC) -c'; export AS; $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
build_apps: build_libs
 | 
			
		||||
build_engines:
 | 
			
		||||
	@dir=engines; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_apps:
 | 
			
		||||
	@dir=apps; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_tests: build_libs
 | 
			
		||||
build_tests:
 | 
			
		||||
	@dir=test; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_tools: build_libs
 | 
			
		||||
build_tools:
 | 
			
		||||
	@dir=tools; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
all_testapps: build_libs build_testapps
 | 
			
		||||
@@ -386,11 +260,7 @@ build_testapps:
 | 
			
		||||
 | 
			
		||||
libcrypto$(SHLIB_EXT): libcrypto.a
 | 
			
		||||
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
			
		||||
		if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
 | 
			
		||||
			FIPSLD_CC="$(CC)"; CC=fips/fipsld; \
 | 
			
		||||
			export CC FIPSLD_CC; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		$(MAKE) -e SHLIBDIRS=crypto CC="$${CC:-$(CC)}" build-shared; \
 | 
			
		||||
		$(MAKE) SHLIBDIRS=crypto build-shared; \
 | 
			
		||||
	else \
 | 
			
		||||
		echo "There's no support for shared libraries on this platform" >&2; \
 | 
			
		||||
		exit 1; \
 | 
			
		||||
@@ -413,7 +283,7 @@ clean-shared:
 | 
			
		||||
			done; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
 | 
			
		||||
		if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
 | 
			
		||||
		if [ "$(PLATFORM)" = "Cygwin" ]; then \
 | 
			
		||||
			( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
 | 
			
		||||
		fi; \
 | 
			
		||||
	done
 | 
			
		||||
@@ -462,11 +332,11 @@ libssl.pc: Makefile
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
 | 
			
		||||
	    echo 'includedir=$${prefix}/include'; \
 | 
			
		||||
	    echo ''; \
 | 
			
		||||
	    echo 'Name: OpenSSL-libssl'; \
 | 
			
		||||
	    echo 'Name: OpenSSL'; \
 | 
			
		||||
	    echo 'Description: Secure Sockets Layer and cryptography libraries'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires.private: libcrypto'; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl'; \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl -lcrypto'; \
 | 
			
		||||
	    echo 'Libs.private: $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
 | 
			
		||||
 | 
			
		||||
@@ -479,7 +349,10 @@ openssl.pc: Makefile
 | 
			
		||||
	    echo 'Name: OpenSSL'; \
 | 
			
		||||
	    echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: libssl libcrypto' ) > openssl.pc
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl -lcrypto'; \
 | 
			
		||||
	    echo 'Libs.private: $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
 | 
			
		||||
 | 
			
		||||
Makefile: Makefile.org Configure config
 | 
			
		||||
	@echo "Makefile is older than Makefile.org, Configure or config."
 | 
			
		||||
@@ -487,13 +360,12 @@ Makefile: Makefile.org Configure config
 | 
			
		||||
	@false
 | 
			
		||||
 | 
			
		||||
libclean:
 | 
			
		||||
	rm -f *.map *.so *.so.* *.dylib *.dll engines/*.so engines/*.dll engines/*.dylib *.a engines/*.a */lib */*/lib
 | 
			
		||||
	rm -f *.map *.so *.so.* *.dll engines/*.so engines/*.dll *.a engines/*.a */lib */*/lib
 | 
			
		||||
 | 
			
		||||
clean:	libclean
 | 
			
		||||
	rm -f shlib/*.o *.o core a.out fluff rehash.time testlog make.log cctest cctest.c
 | 
			
		||||
	rm -rf *.bak certs/.0
 | 
			
		||||
	@set -e; target=clean; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
	rm -f $(LIBS) tags TAGS
 | 
			
		||||
	rm -f $(LIBS)
 | 
			
		||||
	rm -f openssl.pc libssl.pc libcrypto.pc
 | 
			
		||||
	rm -f speed.* .pure
 | 
			
		||||
	rm -f $(TARFILE)
 | 
			
		||||
@@ -520,6 +392,7 @@ gentests:
 | 
			
		||||
	$(CLEARENV) && $(MAKE) -e $(BUILDENV) TESTS='$(TESTS)' OPENSSL_DEBUG_MEMORY=on generate );
 | 
			
		||||
 | 
			
		||||
dclean:
 | 
			
		||||
	rm -rf *.bak include/openssl certs/.0
 | 
			
		||||
	@set -e; target=dclean; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
rehash: rehash.time
 | 
			
		||||
@@ -529,7 +402,7 @@ rehash.time: certs apps
 | 
			
		||||
		[ -x "apps/openssl.exe" ] && OPENSSL="apps/openssl.exe" || :; \
 | 
			
		||||
		OPENSSL_DEBUG_MEMORY=on; \
 | 
			
		||||
		export OPENSSL OPENSSL_DEBUG_MEMORY; \
 | 
			
		||||
		$(PERL) tools/c_rehash certs/demo) && \
 | 
			
		||||
		$(PERL) tools/c_rehash certs) && \
 | 
			
		||||
		touch rehash.time; \
 | 
			
		||||
	else :; fi
 | 
			
		||||
 | 
			
		||||
@@ -543,23 +416,23 @@ tests: rehash
 | 
			
		||||
report:
 | 
			
		||||
	@$(PERL) util/selftest.pl
 | 
			
		||||
 | 
			
		||||
update: errors stacks util/libeay.num util/ssleay.num TABLE
 | 
			
		||||
	@set -e; target=update; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	@set -e; target=depend; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
lint:
 | 
			
		||||
	@set -e; target=lint; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
tags TAGS: FORCE
 | 
			
		||||
	rm -f TAGS tags
 | 
			
		||||
	-ctags -R .
 | 
			
		||||
	-etags -R .
 | 
			
		||||
 | 
			
		||||
FORCE:
 | 
			
		||||
tags:
 | 
			
		||||
	rm -f TAGS
 | 
			
		||||
	find . -name '[^.]*.[ch]' | xargs etags -a
 | 
			
		||||
 | 
			
		||||
errors:
 | 
			
		||||
	$(PERL) util/ck_errf.pl -strict */*.c */*/*.c
 | 
			
		||||
	$(PERL) util/mkerr.pl -recurse -write
 | 
			
		||||
	(cd engines; $(MAKE) PERL=$(PERL) errors)
 | 
			
		||||
	$(PERL) util/ck_errf.pl */*.c */*/*.c
 | 
			
		||||
 | 
			
		||||
stacks:
 | 
			
		||||
	$(PERL) util/mkstack.pl -write
 | 
			
		||||
@@ -570,26 +443,10 @@ util/libeay.num::
 | 
			
		||||
util/ssleay.num::
 | 
			
		||||
	$(PERL) util/mkdef.pl ssl update
 | 
			
		||||
 | 
			
		||||
crypto/objects/obj_dat.h: crypto/objects/obj_dat.pl crypto/objects/obj_mac.h
 | 
			
		||||
	$(PERL) crypto/objects/obj_dat.pl crypto/objects/obj_mac.h crypto/objects/obj_dat.h
 | 
			
		||||
crypto/objects/obj_mac.h: crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num
 | 
			
		||||
	$(PERL) crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num crypto/objects/obj_mac.h
 | 
			
		||||
crypto/objects/obj_xref.h: crypto/objects/objxref.pl crypto/objects/obj_xref.txt crypto/objects/obj_mac.num
 | 
			
		||||
	$(PERL) crypto/objects/objxref.pl crypto/objects/obj_mac.num crypto/objects/obj_xref.txt >crypto/objects/obj_xref.h
 | 
			
		||||
 | 
			
		||||
apps/openssl-vms.cnf: apps/openssl.cnf
 | 
			
		||||
	$(PERL) VMS/VMSify-conf.pl < apps/openssl.cnf > apps/openssl-vms.cnf
 | 
			
		||||
 | 
			
		||||
crypto/bn/bn_prime.h: crypto/bn/bn_prime.pl
 | 
			
		||||
	$(PERL) crypto/bn/bn_prime.pl >crypto/bn/bn_prime.h
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TABLE: Configure
 | 
			
		||||
	(echo 'Output of `Configure TABLE'"':"; \
 | 
			
		||||
	$(PERL) Configure TABLE) > TABLE
 | 
			
		||||
 | 
			
		||||
update: errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h crypto/objects/obj_xref.h apps/openssl-vms.cnf crypto/bn/bn_prime.h TABLE depend
 | 
			
		||||
 | 
			
		||||
# Build distribution tar-file. As the list of files returned by "find" is
 | 
			
		||||
# pretty long, on several platforms a "too many arguments" error or similar
 | 
			
		||||
# would occur. Therefore the list of files is temporarily stored into a file
 | 
			
		||||
@@ -627,17 +484,22 @@ dist_pem_h:
 | 
			
		||||
 | 
			
		||||
install: all install_docs install_sw
 | 
			
		||||
 | 
			
		||||
uninstall: uninstall_sw uninstall_docs
 | 
			
		||||
 | 
			
		||||
install_sw:
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALLDIRS)
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
 | 
			
		||||
		$(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 \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/private
 | 
			
		||||
	@set -e; headerlist="$(EXHEADER)"; for i in $$headerlist;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
 | 
			
		||||
	done;
 | 
			
		||||
	@set -e; target=install; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
	@set -e; liblist="$(LIBS)"; for i in $$liblist ;\
 | 
			
		||||
	@set -e; for i in $(LIBS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
		if [ -f "$$i" ]; then \
 | 
			
		||||
		(       echo installing $$i; \
 | 
			
		||||
@@ -653,7 +515,11 @@ install_sw:
 | 
			
		||||
		do \
 | 
			
		||||
			if [ -f "$$i" -o -f "$$i.a" ]; then \
 | 
			
		||||
			(       echo installing $$i; \
 | 
			
		||||
				if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
 | 
			
		||||
				if [ "$(PLATFORM)" != "Cygwin" ]; then \
 | 
			
		||||
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
				else \
 | 
			
		||||
					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; \
 | 
			
		||||
@@ -661,10 +527,6 @@ install_sw:
 | 
			
		||||
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
				else \
 | 
			
		||||
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
				fi ); \
 | 
			
		||||
				if expr $(PLATFORM) : 'mingw' > /dev/null; then \
 | 
			
		||||
				(	case $$i in \
 | 
			
		||||
@@ -672,9 +534,9 @@ install_sw:
 | 
			
		||||
						*ssl*)    i=ssleay32.dll;; \
 | 
			
		||||
					esac; \
 | 
			
		||||
					echo installing $$i; \
 | 
			
		||||
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \
 | 
			
		||||
					chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \
 | 
			
		||||
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i ); \
 | 
			
		||||
	 				cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \
 | 
			
		||||
	 				chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \
 | 
			
		||||
	 				mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i ); \
 | 
			
		||||
				fi; \
 | 
			
		||||
			fi; \
 | 
			
		||||
		done; \
 | 
			
		||||
@@ -695,59 +557,16 @@ install_sw:
 | 
			
		||||
	cp openssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc
 | 
			
		||||
 | 
			
		||||
uninstall_sw:
 | 
			
		||||
	cd include/openssl && files=* && cd $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl && $(RM) $$files
 | 
			
		||||
	@for i in $(LIBS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
		test -f "$$i" && \
 | 
			
		||||
		echo $(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i && \
 | 
			
		||||
		$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
	done;
 | 
			
		||||
	@if [ -n "$(SHARED_LIBS)" ]; then \
 | 
			
		||||
		tmp="$(SHARED_LIBS)"; \
 | 
			
		||||
		for i in $${tmp:-x}; \
 | 
			
		||||
		do \
 | 
			
		||||
			if [ -f "$$i" -o -f "$$i.a" ]; then \
 | 
			
		||||
				if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
 | 
			
		||||
					c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \
 | 
			
		||||
					echo $(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \
 | 
			
		||||
					$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \
 | 
			
		||||
					echo $(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
					$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
				else \
 | 
			
		||||
					echo $(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
					$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
				fi; \
 | 
			
		||||
				if expr $(PLATFORM) : 'mingw' > /dev/null; then \
 | 
			
		||||
					case $$i in \
 | 
			
		||||
						*crypto*) i=libeay32.dll;; \
 | 
			
		||||
						*ssl*)    i=ssleay32.dll;; \
 | 
			
		||||
					esac; \
 | 
			
		||||
					echo $(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i; \
 | 
			
		||||
					$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i; \
 | 
			
		||||
				fi; \
 | 
			
		||||
			fi; \
 | 
			
		||||
		done; \
 | 
			
		||||
	fi
 | 
			
		||||
	$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libcrypto.pc
 | 
			
		||||
	$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libssl.pc
 | 
			
		||||
	$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc
 | 
			
		||||
	@target=uninstall; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
install_html_docs:
 | 
			
		||||
	here="`pwd`"; \
 | 
			
		||||
	filecase=; \
 | 
			
		||||
	case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*|darwin*-*-cc) \
 | 
			
		||||
		filecase=-i; \
 | 
			
		||||
	esac; \
 | 
			
		||||
	for subdir in apps crypto ssl; do \
 | 
			
		||||
		$(PERL) $(TOP)/util/mkdir-p $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \
 | 
			
		||||
		mkdir -p $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \
 | 
			
		||||
		for i in doc/$$subdir/*.pod; do \
 | 
			
		||||
			fn=`basename $$i .pod`; \
 | 
			
		||||
			echo "installing html/$$fn.$(HTMLSUFFIX)"; \
 | 
			
		||||
			cat $$i \
 | 
			
		||||
			| sed -r 's/L<([^)]*)(\([0-9]\))?\|([^)]*)(\([0-9]\))?>/L<\1|\3>/g' \
 | 
			
		||||
			| pod2html --podroot=doc --htmlroot=.. --podpath=$$subdir:apps:crypto:ssl \
 | 
			
		||||
			| pod2html --podroot=doc --htmlroot=.. --podpath=apps:crypto:ssl \
 | 
			
		||||
			| sed -r 's/<!DOCTYPE.*//g' \
 | 
			
		||||
			> $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir/$$fn.$(HTMLSUFFIX); \
 | 
			
		||||
			$(PERL) util/extract-names.pl < $$i | \
 | 
			
		||||
@@ -759,43 +578,26 @@ install_html_docs:
 | 
			
		||||
		done; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
uninstall_html_docs:
 | 
			
		||||
	here="`pwd`"; \
 | 
			
		||||
	filecase=; \
 | 
			
		||||
	case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*|darwin*-*-cc) \
 | 
			
		||||
		filecase=-i; \
 | 
			
		||||
	esac; \
 | 
			
		||||
	for subdir in apps crypto ssl; do \
 | 
			
		||||
		for i in doc/$$subdir/*.pod; do \
 | 
			
		||||
			fn=`basename $$i .pod`; \
 | 
			
		||||
			$(RM) $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir/$$fn.$(HTMLSUFFIX); \
 | 
			
		||||
			$(PERL) util/extract-names.pl < $$i | \
 | 
			
		||||
				grep -v $$filecase "^$$fn\$$" | \
 | 
			
		||||
				while read n; do \
 | 
			
		||||
					$(RM) $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir/"$$n".$(HTMLSUFFIX); \
 | 
			
		||||
				done; \
 | 
			
		||||
		done; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
install_docs:
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl \
 | 
			
		||||
		$(INSTALL_PREFIX)$(MANDIR)/man1 \
 | 
			
		||||
		$(INSTALL_PREFIX)$(MANDIR)/man3 \
 | 
			
		||||
		$(INSTALL_PREFIX)$(MANDIR)/man5 \
 | 
			
		||||
		$(INSTALL_PREFIX)$(MANDIR)/man7
 | 
			
		||||
	@pod2man="`cd ./util; ./pod2mantest $(PERL)`"; \
 | 
			
		||||
	here="`pwd`"; \
 | 
			
		||||
	filecase=; \
 | 
			
		||||
	case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*|darwin*-*-cc) \
 | 
			
		||||
	if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" -o "$(PLATFORM)" = "mingw" ]; then \
 | 
			
		||||
		filecase=-i; \
 | 
			
		||||
	esac; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	set -e; for i in doc/apps/*.pod; do \
 | 
			
		||||
		fn=`basename $$i .pod`; \
 | 
			
		||||
		sec=`$(PERL) util/extract-section.pl 1 < $$i`; \
 | 
			
		||||
		echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
 | 
			
		||||
		(cd `$(PERL) util/dirname.pl $$i`; \
 | 
			
		||||
		pod2man \
 | 
			
		||||
		sh -c "$$pod2man \
 | 
			
		||||
			--section=$$sec --center=OpenSSL \
 | 
			
		||||
			--release=$(VERSION) `basename $$i`) \
 | 
			
		||||
			--release=$(VERSION) `basename $$i`") \
 | 
			
		||||
			>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
 | 
			
		||||
		$(PERL) util/extract-names.pl < $$i | \
 | 
			
		||||
			(grep -v $$filecase "^$$fn\$$"; true) | \
 | 
			
		||||
@@ -810,9 +612,9 @@ install_docs:
 | 
			
		||||
		sec=`$(PERL) util/extract-section.pl 3 < $$i`; \
 | 
			
		||||
		echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
 | 
			
		||||
		(cd `$(PERL) util/dirname.pl $$i`; \
 | 
			
		||||
		pod2man \
 | 
			
		||||
		sh -c "$$pod2man \
 | 
			
		||||
			--section=$$sec --center=OpenSSL \
 | 
			
		||||
			--release=$(VERSION) `basename $$i`) \
 | 
			
		||||
			--release=$(VERSION) `basename $$i`") \
 | 
			
		||||
			>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
 | 
			
		||||
		$(PERL) util/extract-names.pl < $$i | \
 | 
			
		||||
			(grep -v $$filecase "^$$fn\$$"; true) | \
 | 
			
		||||
@@ -823,37 +625,4 @@ install_docs:
 | 
			
		||||
			 done); \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
uninstall_docs:
 | 
			
		||||
	@here="`pwd`"; \
 | 
			
		||||
	filecase=; \
 | 
			
		||||
	case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*) \
 | 
			
		||||
		filecase=-i; \
 | 
			
		||||
	esac; \
 | 
			
		||||
	for i in doc/apps/*.pod; do \
 | 
			
		||||
		fn=`basename $$i .pod`; \
 | 
			
		||||
		sec=`$(PERL) util/extract-section.pl 1 < $$i`; \
 | 
			
		||||
		echo $(RM) $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
 | 
			
		||||
		$(RM) $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
 | 
			
		||||
		$(PERL) util/extract-names.pl < $$i | \
 | 
			
		||||
			(grep -v $$filecase "^$$fn\$$"; true) | \
 | 
			
		||||
			(grep -v "[	]"; true) | \
 | 
			
		||||
			while read n; do \
 | 
			
		||||
				echo $(RM) $(INSTALL_PREFIX)$(MANDIR)/man$$sec/"$$n".$${sec}$(MANSUFFIX); \
 | 
			
		||||
				$(RM) $(INSTALL_PREFIX)$(MANDIR)/man$$sec/"$$n".$${sec}$(MANSUFFIX); \
 | 
			
		||||
			done; \
 | 
			
		||||
	done; \
 | 
			
		||||
	for i in doc/crypto/*.pod doc/ssl/*.pod; do \
 | 
			
		||||
		fn=`basename $$i .pod`; \
 | 
			
		||||
		sec=`$(PERL) util/extract-section.pl 3 < $$i`; \
 | 
			
		||||
		echo $(RM) $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
 | 
			
		||||
		$(RM) $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
 | 
			
		||||
		$(PERL) util/extract-names.pl < $$i | \
 | 
			
		||||
			(grep -v $$filecase "^$$fn\$$"; true) | \
 | 
			
		||||
			(grep -v "[	]"; true) | \
 | 
			
		||||
			while read n; do \
 | 
			
		||||
				echo $(RM) $(INSTALL_PREFIX)$(MANDIR)/man$$sec/"$$n".$${sec}$(MANSUFFIX); \
 | 
			
		||||
				$(RM) $(INSTALL_PREFIX)$(MANDIR)/man$$sec/"$$n".$${sec}$(MANSUFFIX); \
 | 
			
		||||
			done; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
 | 
			
		||||
 
 | 
			
		||||
@@ -170,6 +170,17 @@ link_a.gnu:
 | 
			
		||||
link_app.gnu:
 | 
			
		||||
	@ $(DO_GNU_APP); $(LINK_APP)
 | 
			
		||||
 | 
			
		||||
DO_BEOS_SO=	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	ALLSYMSFLAGS='-Wl,--whole-archive'; \
 | 
			
		||||
	NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
 | 
			
		||||
	SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-Bsymbolic -Wl,-soname=$$SHLIB$$SHLIB_SUFFIX"
 | 
			
		||||
 | 
			
		||||
link_o.beos:
 | 
			
		||||
	@ $(DO_BEOS_SO); $(LINK_SO_O)
 | 
			
		||||
link_a.beos:
 | 
			
		||||
	@ $(DO_BEOS_SO); $(LINK_SO_A)
 | 
			
		||||
 | 
			
		||||
link_o.bsd:
 | 
			
		||||
	@if $(DETECT_GNU_LD); then $(DO_GNU_SO); else \
 | 
			
		||||
	$(CALC_VERSIONS); \
 | 
			
		||||
@@ -544,10 +555,28 @@ link_app.aix:
 | 
			
		||||
	LDFLAGS="$(CFLAGS) -Wl,-brtl,-blibpath:$(LIBRPATH):$${LIBPATH:-/usr/lib:/lib}"; \
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
link_o.reliantunix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	ALLSYMSFLAGS=; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS='$(CFLAGS) -G'; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.reliantunix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	ALLSYMSFLAGS=; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS='$(CFLAGS) -G'; \
 | 
			
		||||
	$(LINK_SO_A_UNPACKED)
 | 
			
		||||
link_app.reliantunix:
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
# Targets to build symbolic links when needed
 | 
			
		||||
symlink.gnu symlink.solaris symlink.svr3 symlink.svr5 symlink.irix \
 | 
			
		||||
symlink.aix:
 | 
			
		||||
symlink.aix symlink.reliantunix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	$(SYMLINK_SO)
 | 
			
		||||
@@ -562,7 +591,7 @@ symlink.hpux:
 | 
			
		||||
	expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	$(SYMLINK_SO)
 | 
			
		||||
# The following lines means those specific architectures do no symlinks
 | 
			
		||||
symlink.cygwin symlink.alpha-osf1 symlink.tru64 symlink.tru64-rpath:
 | 
			
		||||
symlink.cygwin symlink.alpha-osf1 symlink.tru64 symlink.tru64-rpath symlink.beos:
 | 
			
		||||
 | 
			
		||||
# Compatibility targets
 | 
			
		||||
link_o.bsd-gcc-shared link_o.linux-shared link_o.gnu-shared: link_o.gnu
 | 
			
		||||
@@ -616,3 +645,11 @@ link_o.aix-shared: link_o.aix
 | 
			
		||||
link_a.aix-shared: link_a.aix
 | 
			
		||||
link_app.aix-shared: link_app.aix
 | 
			
		||||
symlink.aix-shared: symlink.aix
 | 
			
		||||
link_o.reliantunix-shared: link_o.reliantunix
 | 
			
		||||
link_a.reliantunix-shared: link_a.reliantunix
 | 
			
		||||
link_app.reliantunix-shared: link_app.reliantunix
 | 
			
		||||
symlink.reliantunix-shared: symlink.reliantunix
 | 
			
		||||
link_o.beos-shared: link_o.beos
 | 
			
		||||
link_a.beos-shared: link_a.beos
 | 
			
		||||
link_app.beos-shared: link_app.gnu
 | 
			
		||||
symlink.beos-shared: symlink.beos
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										179
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										179
									
								
								NEWS
									
									
									
									
									
								
							@@ -5,98 +5,71 @@
 | 
			
		||||
  This file gives a brief overview of the major changes between each OpenSSL
 | 
			
		||||
  release. For more details please read the CHANGES file.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1j and OpenSSL 1.0.2 [in beta]:
 | 
			
		||||
  Major changes between OpenSSL 1.0.0r and OpenSSL 1.0.0s [11 Jun 2015]
 | 
			
		||||
 | 
			
		||||
      o Suite B support for TLS 1.2 and DTLS 1.2
 | 
			
		||||
      o Support for DTLS 1.2
 | 
			
		||||
      o TLS automatic EC curve selection.
 | 
			
		||||
      o API to set TLS supported signature algorithms and curves
 | 
			
		||||
      o SSL_CONF configuration API.
 | 
			
		||||
      o TLS Brainpool support.
 | 
			
		||||
      o ALPN support.
 | 
			
		||||
      o CMS support for RSA-PSS, RSA-OAEP, ECDH and X9.42 DH.
 | 
			
		||||
      o Malformed ECParameters causes infinite loop (CVE-2015-1788)
 | 
			
		||||
      o Exploitable out-of-bounds read in X509_cmp_time (CVE-2015-1789)
 | 
			
		||||
      o PKCS7 crash with missing EnvelopedContent (CVE-2015-1790)
 | 
			
		||||
      o CMS verify infinite loop with unknown hash function (CVE-2015-1792)
 | 
			
		||||
      o Race condition handling NewSessionTicket (CVE-2015-1791)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1i and OpenSSL 1.0.1j [15 Oct 2014]
 | 
			
		||||
  Major changes between OpenSSL 1.0.0q and OpenSSL 1.0.0r [19 Mar 2015]
 | 
			
		||||
 | 
			
		||||
      o Segmentation fault in ASN1_TYPE_cmp fix (CVE-2015-0286)
 | 
			
		||||
      o ASN.1 structure reuse memory corruption fix (CVE-2015-0287)
 | 
			
		||||
      o PKCS7 NULL pointer dereferences fix (CVE-2015-0289)
 | 
			
		||||
      o DoS via reachable assert in SSLv2 servers fix (CVE-2015-0293)
 | 
			
		||||
      o Use After Free following d2i_ECPrivatekey error fix (CVE-2015-0209)
 | 
			
		||||
      o X509_to_X509_REQ NULL pointer deref fix (CVE-2015-0288)
 | 
			
		||||
      o Removed the export ciphers from the DEFAULT ciphers
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0p and OpenSSL 1.0.0q [15 Jan 2015]
 | 
			
		||||
 | 
			
		||||
      o Build fixes for the Windows and OpenVMS platforms
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0o and OpenSSL 1.0.0p [8 Jan 2015]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-3571
 | 
			
		||||
      o Fix for CVE-2015-0206
 | 
			
		||||
      o Fix for CVE-2014-3569
 | 
			
		||||
      o Fix for CVE-2014-3572
 | 
			
		||||
      o Fix for CVE-2015-0204
 | 
			
		||||
      o Fix for CVE-2015-0205
 | 
			
		||||
      o Fix for CVE-2014-8275
 | 
			
		||||
      o Fix for CVE-2014-3570
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0n and OpenSSL 1.0.0o [15 Oct 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-3513
 | 
			
		||||
      o Fix for CVE-2014-3567
 | 
			
		||||
      o Mitigation for CVE-2014-3566 (SSL protocol vulnerability)
 | 
			
		||||
      o Fix for CVE-2014-3568
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1h and OpenSSL 1.0.1i [6 Aug 2014]
 | 
			
		||||
  Major changes between OpenSSL 1.0.0m and OpenSSL 1.0.0n [6 Aug 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-3512
 | 
			
		||||
      o Fix for CVE-2014-3511
 | 
			
		||||
      o Fix for CVE-2014-3510
 | 
			
		||||
      o Fix for CVE-2014-3507
 | 
			
		||||
      o Fix for CVE-2014-3506
 | 
			
		||||
      o Fix for CVE-2014-3505
 | 
			
		||||
      o Fix for CVE-2014-3509
 | 
			
		||||
      o Fix for CVE-2014-5139
 | 
			
		||||
      o Fix for CVE-2014-3508
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1g and OpenSSL 1.0.1h [5 Jun 2014]
 | 
			
		||||
  Known issues in OpenSSL 1.0.0m:
 | 
			
		||||
 | 
			
		||||
      o EAP-FAST and other applications using tls_session_secret_cb
 | 
			
		||||
        wont resume sessions. Fixed in 1.0.0n-dev
 | 
			
		||||
      o Compilation failure of s3_pkt.c on some platforms due to missing
 | 
			
		||||
        <limits.h> include. Fixed in 1.0.0n-dev
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0l and OpenSSL 1.0.0m [5 Jun 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-0224
 | 
			
		||||
      o Fix for CVE-2014-0221
 | 
			
		||||
      o Fix for CVE-2014-0198
 | 
			
		||||
      o Fix for CVE-2014-0195
 | 
			
		||||
      o Fix for CVE-2014-3470
 | 
			
		||||
      o Fix for CVE-2010-5298
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1f and OpenSSL 1.0.1g [7 Apr 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-0160
 | 
			
		||||
      o Add TLS padding extension workaround for broken servers.
 | 
			
		||||
      o Fix for CVE-2014-0076
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1e and OpenSSL 1.0.1f [6 Jan 2014]
 | 
			
		||||
 | 
			
		||||
      o Don't include gmt_unix_time in TLS server and client random values
 | 
			
		||||
      o Fix for TLS record tampering bug CVE-2013-4353
 | 
			
		||||
      o Fix for TLS version checking bug CVE-2013-6449
 | 
			
		||||
      o Fix for DTLS retransmission bug CVE-2013-6450
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1d and OpenSSL 1.0.1e [11 Feb 2013]:
 | 
			
		||||
 | 
			
		||||
      o Corrected fix for CVE-2013-0169
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1c and OpenSSL 1.0.1d [4 Feb 2013]:
 | 
			
		||||
 | 
			
		||||
      o Fix renegotiation in TLS 1.1, 1.2 by using the correct TLS version.
 | 
			
		||||
      o Include the fips configuration module.
 | 
			
		||||
      o Fix OCSP bad key DoS attack CVE-2013-0166
 | 
			
		||||
      o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
 | 
			
		||||
      o Fix for TLS AESNI record handling flaw CVE-2012-2686
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1b and OpenSSL 1.0.1c [10 May 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix TLS/DTLS record length checking bug CVE-2012-2333
 | 
			
		||||
      o Don't attempt to use non-FIPS composite ciphers in FIPS mode.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1a and OpenSSL 1.0.1b [26 Apr 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix compilation error on non-x86 platforms.
 | 
			
		||||
      o Make FIPS capable OpenSSL ciphers work in non-FIPS mode.
 | 
			
		||||
      o Fix SSL_OP_NO_TLSv1_1 clash with SSL_OP_ALL in OpenSSL 1.0.0
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1 and OpenSSL 1.0.1a [19 Apr 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for ASN1 overflow bug CVE-2012-2110
 | 
			
		||||
      o Workarounds for some servers that hang on long client hellos.
 | 
			
		||||
      o Fix SEGV in AES code.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.1 [14 Mar 2012]:
 | 
			
		||||
 | 
			
		||||
      o TLS/DTLS heartbeat support.
 | 
			
		||||
      o SCTP support.
 | 
			
		||||
      o RFC 5705 TLS key material exporter.
 | 
			
		||||
      o RFC 5764 DTLS-SRTP negotiation.
 | 
			
		||||
      o Next Protocol Negotiation.
 | 
			
		||||
      o PSS signatures in certificates, requests and CRLs.
 | 
			
		||||
      o Support for password based recipient info for CMS.
 | 
			
		||||
      o Support TLS v1.2 and TLS v1.1.
 | 
			
		||||
      o Preliminary FIPS capability for unvalidated 2.0 FIPS module.
 | 
			
		||||
      o SRP support.
 | 
			
		||||
      o Fix for CVE-2010-5298
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0k and OpenSSL 1.0.0l [6 Jan 2014]
 | 
			
		||||
 | 
			
		||||
@@ -187,72 +160,6 @@
 | 
			
		||||
      o Opaque PRF Input TLS extension support.
 | 
			
		||||
      o Updated time routines to avoid OS limitations.
 | 
			
		||||
 | 
			
		||||
  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.
 | 
			
		||||
 
 | 
			
		||||
@@ -270,6 +270,22 @@ sub ssl_tests
 | 
			
		||||
   print( OUT "\n========================================================\n");
 | 
			
		||||
   print( OUT "SSL TESTS:\n\n");
 | 
			
		||||
 | 
			
		||||
   system("ssltest -ssl2 (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2:");
 | 
			
		||||
   log_output("ssltest -ssl2", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("$ssltest -ssl2 -server_auth (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with server authentication:");
 | 
			
		||||
   log_output("$ssltest -ssl2 -server_auth", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("$ssltest -ssl2 -client_auth (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with client authentication:");
 | 
			
		||||
   log_output("$ssltest -ssl2 -client_auth", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("$ssltest -ssl2 -server_auth -client_auth (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with both client and server authentication:");
 | 
			
		||||
   log_output("$ssltest -ssl2 -server_auth -client_auth", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -ssl3 (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv3:");
 | 
			
		||||
   log_output("ssltest -ssl3", $outFile);
 | 
			
		||||
@@ -302,10 +318,26 @@ sub ssl_tests
 | 
			
		||||
   log_desc("Testing sslv2/sslv3 with both client and server authentication:");
 | 
			
		||||
   log_output("$ssltest -server_auth -client_auth", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -ssl2 (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -ssl2", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -dhe1024dsa -v (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2/sslv3 with 1024 bit DHE via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -dhe1024dsa -v", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("$ssltest -bio_pair -ssl2 -server_auth (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with server authentication via BIO pair:");
 | 
			
		||||
   log_output("$ssltest -bio_pair -ssl2 -server_auth", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("$ssltest -bio_pair -ssl2 -client_auth (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with client authentication via BIO pair:");
 | 
			
		||||
   log_output("$ssltest -bio_pair -ssl2 -client_auth", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("$ssltest -bio_pair -ssl2 -server_auth -client_auth (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with both client and server authentication via BIO pair:");
 | 
			
		||||
   log_output("$ssltest -bio_pair -ssl2 -server_auth -client_auth", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -ssl3 (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv3 via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -ssl3", $outFile);
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,7 @@ static LHASH *error_hash=NULL;
 | 
			
		||||
static LHASH *thread_hash=NULL;
 | 
			
		||||
 | 
			
		||||
several files have routines with static "init" to track if error strings
 | 
			
		||||
   have been loaded ( may not want separate error strings for each process )
 | 
			
		||||
   have been loaded ( may not want seperate error strings for each process )
 | 
			
		||||
   The "init" variable can't be left "global" because the error has is a ptr
 | 
			
		||||
   that is malloc'ed.  The malloc'ed error has is dependant on the "init"
 | 
			
		||||
   vars.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								README
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
 | 
			
		||||
 OpenSSL 1.1.0-dev
 | 
			
		||||
 OpenSSL 1.0.0s 11 Jun 2015
 | 
			
		||||
 | 
			
		||||
 Copyright (c) 1998-2011 The OpenSSL Project
 | 
			
		||||
 Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
 | 
			
		||||
@@ -90,6 +90,32 @@
 | 
			
		||||
        SSL/TLS Client and Server Tests
 | 
			
		||||
        Handling of S/MIME signed or encrypted mail
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 PATENTS
 | 
			
		||||
 -------
 | 
			
		||||
 | 
			
		||||
 Various companies hold various patents for various algorithms in various
 | 
			
		||||
 locations around the world. _YOU_ are responsible for ensuring that your use
 | 
			
		||||
 of any algorithms is legal by checking if there are any patents in your
 | 
			
		||||
 country.  The file contains some of the patents that we know about or are
 | 
			
		||||
 rumored to exist. This is not a definitive list.
 | 
			
		||||
 | 
			
		||||
 RSA Security holds software patents on the RC5 algorithm.  If you
 | 
			
		||||
 intend to use this cipher, you must contact RSA Security for
 | 
			
		||||
 licensing conditions. Their web page is http://www.rsasecurity.com/.
 | 
			
		||||
 | 
			
		||||
 RC4 is a trademark of RSA Security, so use of this label should perhaps
 | 
			
		||||
 only be used with RSA Security's permission.
 | 
			
		||||
 | 
			
		||||
 The IDEA algorithm is patented by Ascom in Austria, France, Germany, Italy,
 | 
			
		||||
 Japan, the Netherlands, Spain, Sweden, Switzerland, UK and the USA.  They
 | 
			
		||||
 should be contacted if that algorithm is to be used; their web page is
 | 
			
		||||
 http://www.ascom.ch/.
 | 
			
		||||
 | 
			
		||||
 NTT and Mitsubishi have patents and pending patents on the Camellia
 | 
			
		||||
 algorithm, but allow use at no charge without requiring an explicit
 | 
			
		||||
 licensing agreement: http://info.isl.ntt.co.jp/crypt/eng/info/chiteki.html
 | 
			
		||||
 | 
			
		||||
 INSTALLATION
 | 
			
		||||
 ------------
 | 
			
		||||
 | 
			
		||||
@@ -135,7 +161,8 @@
 | 
			
		||||
    - Problem Description (steps that will reproduce the problem, if known)
 | 
			
		||||
    - Stack Traceback (if the application dumps core)
 | 
			
		||||
 | 
			
		||||
 Email the report to:
 | 
			
		||||
 Report the bug to the OpenSSL project via the Request Tracker
 | 
			
		||||
 (http://www.openssl.org/support/rt.html) by mail to:
 | 
			
		||||
 | 
			
		||||
    openssl-bugs@openssl.org
 | 
			
		||||
 | 
			
		||||
@@ -143,11 +170,10 @@
 | 
			
		||||
 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 public
 | 
			
		||||
 request tracker database (see https://www.openssl.org/support/rt.html
 | 
			
		||||
 for details) and also forwarded to a public mailing list. Confidential
 | 
			
		||||
 mail may be sent to openssl-security@openssl.org (PGP key available from
 | 
			
		||||
 the key servers).
 | 
			
		||||
 Note that mail to openssl-bugs@openssl.org is recorded in the publicly
 | 
			
		||||
 readable request tracker database and is forwarded to a public
 | 
			
		||||
 mailing list. Confidential mail may be sent to openssl-security@openssl.org
 | 
			
		||||
 (PGP key available from the key servers).
 | 
			
		||||
 | 
			
		||||
 HOW TO CONTRIBUTE TO OpenSSL
 | 
			
		||||
 ----------------------------
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										61
									
								
								README.ECC
									
									
									
									
									
								
							
							
						
						
									
										61
									
								
								README.ECC
									
									
									
									
									
								
							@@ -1,61 +0,0 @@
 | 
			
		||||
NOTE: The OpenSSL Software Foundation has executed a sublicense agreement
 | 
			
		||||
entitled "Elliptic Curve Cryptography Patent License Agreement" with the
 | 
			
		||||
National Security Agency/ Central Security Service Commercial Solutions
 | 
			
		||||
Center (NCSC) dated 2010-11-04. That agreement permits implementation and
 | 
			
		||||
distribution of software containing features covered by any or all of the
 | 
			
		||||
following patents:
 | 
			
		||||
 | 
			
		||||
1.) U.S. Pat. No. 5,761,305 entitled "Key Agreement and Transport Protocol 
 | 
			
		||||
    with Implicit Signatures" issued on June 2, 1998;
 | 
			
		||||
2.) Can. Pat. Appl. Ser. No. 2176972 entitled "Key Agreement and Transport 
 | 
			
		||||
    Protocol with Implicit Signature and Reduced Bandwidth" filed on May 
 | 
			
		||||
    16, 1996;
 | 
			
		||||
3.) U.S. Pat. No. 5,889,865 entitled "Key Agreement and Transport Protocol 
 | 
			
		||||
    with Implicit Signatures" issued on March 30, 1999;
 | 
			
		||||
4.) U.S. Pat. No. 5,896,455 entitled "Key Agreement and Transport Protocol 
 | 
			
		||||
    with Implicit Signatures" issued on April 20, 1999;
 | 
			
		||||
5.) U.S. Pat. No. 5,933,504 entitled "Strengthened Public Key Protocol" 
 | 
			
		||||
    issued on August 3, 1999;
 | 
			
		||||
6.) Can. Pat. Appl. Ser. No. 2176866 entitled "Strengthened Public Key 
 | 
			
		||||
    Protocol" filed on May 17, 1996;
 | 
			
		||||
7.) E.P. Pat. Appl. Ser. No. 96201322.3 entitled "Strengthened Public Key 
 | 
			
		||||
    Protocol" filed on May 17, 1996;
 | 
			
		||||
8.) U.S. Pat. No. 5,999,626 entitled "Digital Signatures on a Smartcard" 
 | 
			
		||||
    issued on December 7, 1999;
 | 
			
		||||
9.) Can. Pat. Appl. Ser. No. 2202566 entitled "Digital Signatures on a 
 | 
			
		||||
    Smartcard" filed on April 14, 1997;
 | 
			
		||||
10.) E.P. Pat. Appl. No. 97106114.8 entitled "Digital Signatures on a 
 | 
			
		||||
     Smartcard" filed on April 15, 1997;
 | 
			
		||||
11.) U.S Pat. No. 6,122,736 entitled "Key Agreement and Transport Protocol 
 | 
			
		||||
     with Implicit Signatures" issued on September 19, 2000;
 | 
			
		||||
12.) Can. Pat. Appl. Ser. No. 2174261 entitled "Key Agreement and Transport 
 | 
			
		||||
     Protocol with Implicit Signatures" filed on April 16, 1996;
 | 
			
		||||
13.) E.P. Pat. Appl. Ser. No. 96105920.1 entitled "Key Agreement and 
 | 
			
		||||
     Transport Protocol with Implicit Signatures" filed on April 16, 1996;
 | 
			
		||||
14.) U.S. Pat. No. 6,141,420 entitled "Elliptic Curve Encryption Systems" 
 | 
			
		||||
     issued on October 31, 2000;
 | 
			
		||||
15.) Can. Pat. Appl. Ser. No. 2155038 entitled "Elliptic Curve Encryption 
 | 
			
		||||
     Systems" filed on July 31, 1995;
 | 
			
		||||
16.) E.P. Pat. Appl. Ser. No. 95926348.4 entitled "Elliptic Curve Encryption 
 | 
			
		||||
     Systems" filed on July 31, 1995;
 | 
			
		||||
17.) U.S. Pat. No. 6,336,188 entitled "Authenticated Key Agreement" issued 
 | 
			
		||||
     on January 1, 2002;
 | 
			
		||||
18.) U.S. Pat. No. 6,487,661 entitled "Key Agreement and Transport Protocol" 
 | 
			
		||||
     issued on November 26, 2002;
 | 
			
		||||
19.) Can. Pat. Appl. Ser. No. 2174260 entitled "Key Agreement and Transport 
 | 
			
		||||
     Protocol" filed on April 16, 1996;
 | 
			
		||||
20.) E.P. Pat. Appl. Ser. No. 96105921.9 entitled "Key Agreement and 
 | 
			
		||||
     Transport Protocol" filed on April 21, 1996;
 | 
			
		||||
21.) U.S. Pat. No. 6,563,928 entitled "Strengthened Public Key Protocol" 
 | 
			
		||||
     issued on May 13, 2003;
 | 
			
		||||
22.) U.S. Pat. No. 6,618,483 entitled "Elliptic Curve Encryption Systems" 
 | 
			
		||||
     issued September 9, 2003;
 | 
			
		||||
23.) U.S. Pat. Appl. Ser. No. 09/434,247 entitled "Digital Signatures on a 
 | 
			
		||||
     Smartcard" filed on November 5, 1999;
 | 
			
		||||
24.) U.S. Pat. Appl. Ser. No. 09/558,256 entitled "Key Agreement and 
 | 
			
		||||
     Transport Protocol with Implicit Signatures" filed on April 25, 2000;
 | 
			
		||||
25.) U.S. Pat. Appl. Ser. No. 09/942,492 entitled "Digital Signatures on a 
 | 
			
		||||
     Smartcard" filed on August 29, 2001 and published on July 18, 2002; and,
 | 
			
		||||
26.) U.S. Pat. Appl. Ser. No. 10/185,735 entitled "Strengthened Public Key 
 | 
			
		||||
     Protocol" filed on July 1, 2000.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										130
									
								
								README.FIPS
									
									
									
									
									
								
							
							
						
						
									
										130
									
								
								README.FIPS
									
									
									
									
									
								
							@@ -1,130 +0,0 @@
 | 
			
		||||
Preliminary status and build information for FIPS module v2.0
 | 
			
		||||
 | 
			
		||||
NB: if you are cross compiling you now need to use the latest "incore" script
 | 
			
		||||
this can be found at util/incore in the tarballs.
 | 
			
		||||
 | 
			
		||||
If you have any object files from a previous build do:
 | 
			
		||||
 | 
			
		||||
make clean
 | 
			
		||||
 | 
			
		||||
To build the module do:
 | 
			
		||||
 | 
			
		||||
./config fipscanisteronly
 | 
			
		||||
make
 | 
			
		||||
 | 
			
		||||
Build should complete without errors.
 | 
			
		||||
 | 
			
		||||
Build test utilities:
 | 
			
		||||
 | 
			
		||||
make build_tests
 | 
			
		||||
 | 
			
		||||
Run test suite:
 | 
			
		||||
 | 
			
		||||
test/fips_test_suite
 | 
			
		||||
 | 
			
		||||
again should complete without errors.
 | 
			
		||||
 | 
			
		||||
Run test vectors: 
 | 
			
		||||
 | 
			
		||||
1. Download an appropriate set of testvectors from www.openssl.org/docs/fips
 | 
			
		||||
   only the fips-2.0 testvector files are usable for complete tests.
 | 
			
		||||
 | 
			
		||||
2. Extract the files to a suitable directory.
 | 
			
		||||
 | 
			
		||||
3. Run the test vector perl script, for example:
 | 
			
		||||
 | 
			
		||||
   cd fips
 | 
			
		||||
   perl fipsalgtest.pl --dir=/wherever/stuff/was/extracted
 | 
			
		||||
 | 
			
		||||
4. It should say "passed all tests" at the end. Report full details of any
 | 
			
		||||
   failures.
 | 
			
		||||
 | 
			
		||||
If you wish to use the older 1.2.x testvectors (for example those from 2007)
 | 
			
		||||
you need the command line switch --disable-v2 to fipsalgtest.pl
 | 
			
		||||
 | 
			
		||||
Examine the external symbols in fips/fipscanister.o they should all begin
 | 
			
		||||
with FIPS or fips. One way to check with GNU nm is:
 | 
			
		||||
 | 
			
		||||
	nm -g --defined-only fips/fipscanister.o | grep -v -i fips
 | 
			
		||||
 | 
			
		||||
If you get *any* output at all from this test (i.e. symbols not starting with
 | 
			
		||||
fips or FIPS) please report it.
 | 
			
		||||
 | 
			
		||||
Restricted tarball tests.
 | 
			
		||||
 | 
			
		||||
The validated module will have its own tarball containing sufficient code to
 | 
			
		||||
build fipscanister.o and the associated algorithm tests. You can create a
 | 
			
		||||
similar tarball yourself for testing purposes using the commands below.
 | 
			
		||||
 | 
			
		||||
Standard restricted tarball:
 | 
			
		||||
 | 
			
		||||
make -f Makefile.fips dist
 | 
			
		||||
 | 
			
		||||
Prime field field only ECC tarball:
 | 
			
		||||
 | 
			
		||||
make NOEC2M=1 -f Makefile.fips dist
 | 
			
		||||
 | 
			
		||||
Once you've created the tarball extract into a fresh directory and do:
 | 
			
		||||
 | 
			
		||||
./config
 | 
			
		||||
make
 | 
			
		||||
 | 
			
		||||
You can then run the algorithm tests as above. This build automatically uses
 | 
			
		||||
fipscanisterbuild and no-ec2m as appropriate.
 | 
			
		||||
 | 
			
		||||
FIPS capable OpenSSL test: WARNING PRELIMINARY INSTRUCTIONS, SUBJECT TO CHANGE.
 | 
			
		||||
 | 
			
		||||
At least initially the test module and FIPS capable OpenSSL may change and
 | 
			
		||||
by out of sync. You are advised to check for any changes and pull the latest
 | 
			
		||||
source from CVS if you have problems. See anon CVS and rsync instructions at:
 | 
			
		||||
 | 
			
		||||
http://www.openssl.org/source/repos.html
 | 
			
		||||
 | 
			
		||||
Make or download a restricted tarball from ftp://ftp.openssl.org/snapshot/
 | 
			
		||||
 | 
			
		||||
If required set the environment variable FIPSDIR to an appropriate location
 | 
			
		||||
to install the test module. If cross compiling set other environment
 | 
			
		||||
variables too.
 | 
			
		||||
 | 
			
		||||
In this restricted tarball on a Linux or U*ix like system run:
 | 
			
		||||
 | 
			
		||||
./config
 | 
			
		||||
make
 | 
			
		||||
make install
 | 
			
		||||
 | 
			
		||||
On Windows from a VC++ environment do:
 | 
			
		||||
 | 
			
		||||
ms\do_fips
 | 
			
		||||
 | 
			
		||||
This will build and install the test module and some associated files.
 | 
			
		||||
 | 
			
		||||
Now download the latest version of the OpenSSL 1.0.1 branch from either a
 | 
			
		||||
snapshot or preferably CVS. For Linux do:
 | 
			
		||||
 | 
			
		||||
./config fips [other args]
 | 
			
		||||
make
 | 
			
		||||
 | 
			
		||||
For Windows:
 | 
			
		||||
 | 
			
		||||
perl Configure VC-WIN32 fips [other args]
 | 
			
		||||
ms\do_nasm
 | 
			
		||||
nmake -f ms\ntdll.mak
 | 
			
		||||
 | 
			
		||||
(or ms\nt.mak for a static build).
 | 
			
		||||
 | 
			
		||||
Where [other args] can be any other arguments you use for an OpenSSL build
 | 
			
		||||
such as "shared" or "zlib".
 | 
			
		||||
 | 
			
		||||
This will build the fips capable OpenSSL and link it to the test module. You
 | 
			
		||||
can now try linking and testing applications against the FIPS capable OpenSSL.
 | 
			
		||||
 | 
			
		||||
Please report any problems to either the openssl-dev mailing list or directly
 | 
			
		||||
to me steve@openssl.org . Check the mailing lists regularly to avoid duplicate
 | 
			
		||||
reports.
 | 
			
		||||
 | 
			
		||||
Known issues:
 | 
			
		||||
 | 
			
		||||
Code needs extensively reviewing to ensure it builds correctly on 
 | 
			
		||||
supported platforms and is compliant with FIPS 140-2.
 | 
			
		||||
The "FIPS capable OpenSSL" is still largely untested, it builds and runs
 | 
			
		||||
some simple tests OK on some systems but needs far more "real world" testing.
 | 
			
		||||
							
								
								
									
										8
									
								
								apps/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								apps/.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
openssl
 | 
			
		||||
Makefile.save
 | 
			
		||||
der_chop
 | 
			
		||||
der_chop.bak
 | 
			
		||||
CA.pl
 | 
			
		||||
*.flc
 | 
			
		||||
semantic.cache
 | 
			
		||||
*.dll
 | 
			
		||||
@@ -1,10 +1,37 @@
 | 
			
		||||
#!/usr/local/bin/perl
 | 
			
		||||
#
 | 
			
		||||
# CA - wrapper around ca to make it easier to use
 | 
			
		||||
# CA - wrapper around ca to make it easier to use ... basically ca requires
 | 
			
		||||
#      some setup stuff to be done before you can use it and this makes
 | 
			
		||||
#      things easier between now and when Eric is convinced to fix it :-)
 | 
			
		||||
#
 | 
			
		||||
# CA -newca ... will setup the right stuff
 | 
			
		||||
# CA -newreq[-nodes] ... 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 
 | 
			
		||||
# 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.
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
# 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.
 | 
			
		||||
# 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'.
 | 
			
		||||
# 18-Apr-96 tjh    Original hacking
 | 
			
		||||
#
 | 
			
		||||
# Tim Hudson
 | 
			
		||||
# tjh@cryptsoft.com
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# 27-Apr-98 snh    Translation into perl, fix existing CA bug.
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
# Steve Henson
 | 
			
		||||
# shenson@bigfoot.com
 | 
			
		||||
 | 
			
		||||
# default openssl.cnf file has setup as per the following
 | 
			
		||||
# demoCA ... where everything is stored
 | 
			
		||||
@@ -30,7 +57,6 @@ $CATOP="./demoCA";
 | 
			
		||||
$CAKEY="cakey.pem";
 | 
			
		||||
$CAREQ="careq.pem";
 | 
			
		||||
$CACERT="cacert.pem";
 | 
			
		||||
$CACRL="crl.pem";
 | 
			
		||||
 | 
			
		||||
$DIRMODE = 0777;
 | 
			
		||||
 | 
			
		||||
@@ -39,7 +65,6 @@ $RET = 0;
 | 
			
		||||
foreach (@ARGV) {
 | 
			
		||||
	if ( /^(-\?|-h|-help)$/ ) {
 | 
			
		||||
	    print STDERR "usage: CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify\n";
 | 
			
		||||
	    print STDERR "       CA -crl|-revoke cert-filename [reason]\n";
 | 
			
		||||
	    exit 0;
 | 
			
		||||
	} elsif (/^-newcert$/) {
 | 
			
		||||
	    # create a certificate
 | 
			
		||||
@@ -135,50 +160,17 @@ foreach (@ARGV) {
 | 
			
		||||
	    } else {
 | 
			
		||||
		    system ("$VERIFY -CAfile $CATOP/$CACERT newcert.pem");
 | 
			
		||||
		    $RET=$?;
 | 
			
		||||
		    exit $RET;
 | 
			
		||||
	    	    exit 0;
 | 
			
		||||
	    }
 | 
			
		||||
	} elsif (/^-crl$/) {
 | 
			
		||||
		system ("$CA -gencrl -out $CATOP/crl/$CACRL");
 | 
			
		||||
		$RET=$?;
 | 
			
		||||
		print "Generated CRL is in $CATOP/crl/$CACRL\n" if (!$RET);
 | 
			
		||||
	} elsif (/^-revoke$/) {
 | 
			
		||||
		my $cname = $ARGV[1];
 | 
			
		||||
		if (!defined $cname) {
 | 
			
		||||
			print "Certificate filename is required; reason optional.\n";
 | 
			
		||||
			exit 1;
 | 
			
		||||
		}
 | 
			
		||||
		my $reason = $ARGV[2];
 | 
			
		||||
		$reason = " -crl_reason $reason"
 | 
			
		||||
			if defined $reason && crl_reason_ok($reason);
 | 
			
		||||
		my $cmd = "$CA -revoke \"$cname\"".$reason;
 | 
			
		||||
		system ($cmd);
 | 
			
		||||
		$RET=$?;
 | 
			
		||||
		exit $RET;
 | 
			
		||||
	} else {
 | 
			
		||||
	    print STDERR "Unknown arg $_\n";
 | 
			
		||||
	    print STDERR "usage: CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify\n";
 | 
			
		||||
	    print STDERR "       CA -crl|-revoke cert-filename [reason]\n";
 | 
			
		||||
	    exit 1;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exit $RET;
 | 
			
		||||
 | 
			
		||||
sub crl_reason_ok {
 | 
			
		||||
	my ($r) = shift;
 | 
			
		||||
	if ($r eq 'unspecified' || $r eq 'keyCompromise' ||
 | 
			
		||||
	$r eq 'CACompromise' || $r eq 'affiliationChanged' ||
 | 
			
		||||
	$r eq 'superseded' || $r eq 'cessationOfOperation' ||
 | 
			
		||||
	$r eq 'certificateHold' || $r eq 'removeFromCRL') {
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	print STDERR "Invalid CRL reason; must be one of:\n";
 | 
			
		||||
	print STDERR "    unspecified, keyCompromise, CACompromise,\n";
 | 
			
		||||
	print STDERR "    affiliationChanged, superseded, cessationOfOperation\n";
 | 
			
		||||
	print STDERR "    certificateHold, removeFromCRL";
 | 
			
		||||
	exit 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub cp_pem {
 | 
			
		||||
my ($infile, $outfile, $bound) = @_;
 | 
			
		||||
open IN, $infile;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										331
									
								
								apps/Makefile
									
									
									
									
									
								
							
							
						
						
									
										331
									
								
								apps/Makefile
									
									
									
									
									
								
							@@ -39,7 +39,7 @@ E_EXE=	verify asn1pars req dgst dh dhparam enc passwd gendh errstr \
 | 
			
		||||
	ca crl rsa rsautl dsa dsaparam ec ecparam \
 | 
			
		||||
	x509 genrsa gendsa genpkey s_server s_client speed \
 | 
			
		||||
	s_time version pkcs7 cms crl2pkcs7 sess_id ciphers nseq pkcs12 \
 | 
			
		||||
	pkcs8 pkey pkeyparam pkeyutl spkac smime rand engine ocsp prime ts srp
 | 
			
		||||
	pkcs8 pkey pkeyparam pkeyutl spkac smime rand engine ocsp prime ts
 | 
			
		||||
 | 
			
		||||
PROGS= $(PROGRAM).c
 | 
			
		||||
 | 
			
		||||
@@ -56,7 +56,7 @@ E_OBJ=	verify.o asn1pars.o req.o dgst.o dh.o dhparam.o enc.o passwd.o gendh.o er
 | 
			
		||||
	x509.o genrsa.o gendsa.o genpkey.o s_server.o s_client.o speed.o \
 | 
			
		||||
	s_time.o $(A_OBJ) $(S_OBJ) $(RAND_OBJ) version.o sess_id.o \
 | 
			
		||||
	ciphers.o nseq.o pkcs12.o pkcs8.o pkey.o pkeyparam.o pkeyutl.o \
 | 
			
		||||
	spkac.o smime.o cms.o rand.o engine.o ocsp.o prime.o ts.o srp.o
 | 
			
		||||
	spkac.o smime.o cms.o rand.o engine.o ocsp.o prime.o ts.o
 | 
			
		||||
 | 
			
		||||
E_SRC=	verify.c asn1pars.c req.c dgst.c dh.c enc.c passwd.c gendh.c errstr.c ca.c \
 | 
			
		||||
	pkcs7.c crl2p7.c crl.c \
 | 
			
		||||
@@ -64,7 +64,7 @@ E_SRC=	verify.c asn1pars.c req.c dgst.c dh.c enc.c passwd.c gendh.c errstr.c ca.
 | 
			
		||||
	x509.c genrsa.c gendsa.c genpkey.c s_server.c s_client.c speed.c \
 | 
			
		||||
	s_time.c $(A_SRC) $(S_SRC) $(RAND_SRC) version.c sess_id.c \
 | 
			
		||||
	ciphers.c nseq.c pkcs12.c pkcs8.c pkey.c pkeyparam.c pkeyutl.c \
 | 
			
		||||
	spkac.c smime.c cms.c rand.c engine.c ocsp.c prime.c ts.c srp.c
 | 
			
		||||
	spkac.c smime.c cms.c rand.c engine.c ocsp.c prime.c ts.c
 | 
			
		||||
 | 
			
		||||
SRC=$(E_SRC)
 | 
			
		||||
 | 
			
		||||
@@ -94,6 +94,9 @@ req: sreq.o $(A_OBJ) $(DLIBCRYPTO)
 | 
			
		||||
sreq.o: req.c 
 | 
			
		||||
	$(CC) -c $(INCLUDES) $(CFLAG) -o sreq.o req.c
 | 
			
		||||
 | 
			
		||||
openssl-vms.cnf: openssl.cnf
 | 
			
		||||
	$(PERL) $(TOP)/VMS/VMSify-conf.pl < openssl.cnf > openssl-vms.cnf
 | 
			
		||||
 | 
			
		||||
files:
 | 
			
		||||
	$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
 | 
			
		||||
 | 
			
		||||
@@ -117,19 +120,6 @@ install:
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf.new; \
 | 
			
		||||
	mv -f  $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf.new $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf
 | 
			
		||||
 | 
			
		||||
uninstall:
 | 
			
		||||
	@set -e; for i in $(EXE); \
 | 
			
		||||
	do  \
 | 
			
		||||
		echo $(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i; \
 | 
			
		||||
		$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i; \
 | 
			
		||||
	done;
 | 
			
		||||
	@set -e; for i in $(SCRIPTS); \
 | 
			
		||||
	do  \
 | 
			
		||||
		echo $(RM) $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$i; \
 | 
			
		||||
		$(RM) $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$i; \
 | 
			
		||||
	done
 | 
			
		||||
	$(RM) $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf
 | 
			
		||||
 | 
			
		||||
tags:
 | 
			
		||||
	ctags $(SRC)
 | 
			
		||||
 | 
			
		||||
@@ -140,16 +130,17 @@ links:
 | 
			
		||||
lint:
 | 
			
		||||
	lint -DLINT $(INCLUDES) $(SRC)>fluff
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	@if [ -z "$(THIS)" ]; then \
 | 
			
		||||
	    $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; \
 | 
			
		||||
	else \
 | 
			
		||||
	    $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(SRC); \
 | 
			
		||||
	fi
 | 
			
		||||
update: openssl-vms.cnf local_depend
 | 
			
		||||
 | 
			
		||||
depend: local_depend
 | 
			
		||||
	@if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
 | 
			
		||||
local_depend:
 | 
			
		||||
	@[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(SRC); \
 | 
			
		||||
 | 
			
		||||
dclean:
 | 
			
		||||
	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
 | 
			
		||||
	mv -f Makefile.new $(MAKEFILE)
 | 
			
		||||
	rm -f CA.pl
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f *.o *.obj *.dll lib tags core .pure .nfs* *.old *.bak fluff $(EXE)
 | 
			
		||||
@@ -257,13 +248,13 @@ ciphers.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
ciphers.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
ciphers.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
ciphers.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
ciphers.o: ../include/openssl/sha.h ../include/openssl/srtp.h
 | 
			
		||||
ciphers.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
ciphers.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
ciphers.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
ciphers.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
ciphers.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
ciphers.o: ../include/openssl/x509v3.h apps.h ciphers.c
 | 
			
		||||
ciphers.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
ciphers.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
ciphers.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
ciphers.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
ciphers.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
ciphers.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
ciphers.o: ciphers.c
 | 
			
		||||
cms.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
cms.o: ../include/openssl/buffer.h ../include/openssl/cms.h
 | 
			
		||||
cms.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -362,18 +353,20 @@ dsa.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h dsa.c
 | 
			
		||||
dsaparam.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
dsaparam.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
dsaparam.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
dsaparam.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h
 | 
			
		||||
dsaparam.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
 | 
			
		||||
dsaparam.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
 | 
			
		||||
dsaparam.o: ../include/openssl/err.h ../include/openssl/evp.h
 | 
			
		||||
dsaparam.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
 | 
			
		||||
dsaparam.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
 | 
			
		||||
dsaparam.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
dsaparam.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
dsaparam.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
dsaparam.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
dsaparam.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
dsaparam.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
dsaparam.o: ../include/openssl/dh.h ../include/openssl/dsa.h
 | 
			
		||||
dsaparam.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
 | 
			
		||||
dsaparam.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
 | 
			
		||||
dsaparam.o: ../include/openssl/engine.h ../include/openssl/err.h
 | 
			
		||||
dsaparam.o: ../include/openssl/evp.h ../include/openssl/lhash.h
 | 
			
		||||
dsaparam.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
 | 
			
		||||
dsaparam.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
 | 
			
		||||
dsaparam.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
dsaparam.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
dsaparam.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
 | 
			
		||||
dsaparam.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 | 
			
		||||
dsaparam.o: ../include/openssl/sha.h ../include/openssl/stack.h
 | 
			
		||||
dsaparam.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
 | 
			
		||||
dsaparam.o: ../include/openssl/ui.h ../include/openssl/x509.h
 | 
			
		||||
dsaparam.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
dsaparam.o: dsaparam.c
 | 
			
		||||
ec.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
@@ -437,13 +430,13 @@ engine.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
engine.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
engine.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
engine.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
engine.o: ../include/openssl/sha.h ../include/openssl/srtp.h
 | 
			
		||||
engine.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
engine.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
engine.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
engine.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
engine.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
engine.o: ../include/openssl/x509v3.h apps.h engine.c
 | 
			
		||||
engine.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
engine.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
engine.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
engine.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
engine.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
engine.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
engine.o: engine.c
 | 
			
		||||
errstr.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
errstr.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
errstr.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -458,30 +451,32 @@ errstr.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
errstr.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
errstr.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
errstr.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
errstr.o: ../include/openssl/sha.h ../include/openssl/srtp.h
 | 
			
		||||
errstr.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
errstr.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
errstr.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
errstr.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
errstr.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
errstr.o: ../include/openssl/x509v3.h apps.h errstr.c
 | 
			
		||||
errstr.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
errstr.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
errstr.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
errstr.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
errstr.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
errstr.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
errstr.o: errstr.c
 | 
			
		||||
gendh.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
gendh.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
gendh.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
gendh.o: ../include/openssl/dh.h ../include/openssl/e_os2.h
 | 
			
		||||
gendh.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
 | 
			
		||||
gendh.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
 | 
			
		||||
gendh.o: ../include/openssl/err.h ../include/openssl/evp.h
 | 
			
		||||
gendh.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
 | 
			
		||||
gendh.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
 | 
			
		||||
gendh.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
gendh.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
gendh.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
gendh.o: ../include/openssl/rand.h ../include/openssl/safestack.h
 | 
			
		||||
gendh.o: ../include/openssl/dh.h ../include/openssl/dsa.h
 | 
			
		||||
gendh.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
 | 
			
		||||
gendh.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
 | 
			
		||||
gendh.o: ../include/openssl/engine.h ../include/openssl/err.h
 | 
			
		||||
gendh.o: ../include/openssl/evp.h ../include/openssl/lhash.h
 | 
			
		||||
gendh.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
 | 
			
		||||
gendh.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
 | 
			
		||||
gendh.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
gendh.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
gendh.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
 | 
			
		||||
gendh.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 | 
			
		||||
gendh.o: ../include/openssl/sha.h ../include/openssl/stack.h
 | 
			
		||||
gendh.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
 | 
			
		||||
gendh.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
gendh.o: ../include/openssl/x509v3.h apps.h gendh.c
 | 
			
		||||
gendh.o: ../include/openssl/ui.h ../include/openssl/x509.h
 | 
			
		||||
gendh.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
gendh.o: gendh.c
 | 
			
		||||
gendsa.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
gendsa.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
gendsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -518,6 +513,7 @@ genpkey.o: genpkey.c
 | 
			
		||||
genrsa.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
genrsa.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
genrsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
genrsa.o: ../include/openssl/dh.h ../include/openssl/dsa.h
 | 
			
		||||
genrsa.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
 | 
			
		||||
genrsa.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
 | 
			
		||||
genrsa.o: ../include/openssl/engine.h ../include/openssl/err.h
 | 
			
		||||
@@ -530,8 +526,9 @@ genrsa.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
 | 
			
		||||
genrsa.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 | 
			
		||||
genrsa.o: ../include/openssl/sha.h ../include/openssl/stack.h
 | 
			
		||||
genrsa.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
 | 
			
		||||
genrsa.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
genrsa.o: ../include/openssl/x509v3.h apps.h genrsa.c
 | 
			
		||||
genrsa.o: ../include/openssl/ui.h ../include/openssl/x509.h
 | 
			
		||||
genrsa.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
genrsa.o: genrsa.c
 | 
			
		||||
nseq.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
nseq.o: ../include/openssl/buffer.h ../include/openssl/conf.h
 | 
			
		||||
nseq.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
@@ -562,12 +559,12 @@ ocsp.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
ocsp.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
ocsp.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
 | 
			
		||||
ocsp.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
ocsp.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
 | 
			
		||||
ocsp.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
ocsp.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
ocsp.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
ocsp.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
ocsp.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h ocsp.c
 | 
			
		||||
ocsp.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
ocsp.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
ocsp.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
ocsp.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
ocsp.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
ocsp.o: ../include/openssl/x509v3.h apps.h ocsp.c
 | 
			
		||||
openssl.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
openssl.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
openssl.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -581,9 +578,8 @@ openssl.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
 | 
			
		||||
openssl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
openssl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
openssl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
openssl.o: ../include/openssl/pqueue.h ../include/openssl/rand.h
 | 
			
		||||
openssl.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
openssl.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
 | 
			
		||||
openssl.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
openssl.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
openssl.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
openssl.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
openssl.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
@@ -736,20 +732,21 @@ rand.o: ../include/openssl/x509v3.h apps.h rand.c
 | 
			
		||||
req.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
req.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
req.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
req.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h
 | 
			
		||||
req.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
 | 
			
		||||
req.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
 | 
			
		||||
req.o: ../include/openssl/err.h ../include/openssl/evp.h
 | 
			
		||||
req.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
 | 
			
		||||
req.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
 | 
			
		||||
req.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
req.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
req.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
req.o: ../include/openssl/dh.h ../include/openssl/dsa.h
 | 
			
		||||
req.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
 | 
			
		||||
req.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
 | 
			
		||||
req.o: ../include/openssl/engine.h ../include/openssl/err.h
 | 
			
		||||
req.o: ../include/openssl/evp.h ../include/openssl/lhash.h
 | 
			
		||||
req.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
 | 
			
		||||
req.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
 | 
			
		||||
req.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
req.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
req.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
 | 
			
		||||
req.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 | 
			
		||||
req.o: ../include/openssl/sha.h ../include/openssl/stack.h
 | 
			
		||||
req.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
 | 
			
		||||
req.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
req.o: ../include/openssl/x509v3.h apps.h req.c
 | 
			
		||||
req.o: ../include/openssl/ui.h ../include/openssl/x509.h
 | 
			
		||||
req.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h req.c
 | 
			
		||||
rsa.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
rsa.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
rsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -783,9 +780,8 @@ rsautl.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
 | 
			
		||||
rsautl.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
rsautl.o: ../include/openssl/x509v3.h apps.h rsautl.c
 | 
			
		||||
s_cb.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
s_cb.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
s_cb.o: ../include/openssl/comp.h ../include/openssl/conf.h
 | 
			
		||||
s_cb.o: ../include/openssl/crypto.h ../include/openssl/dh.h
 | 
			
		||||
s_cb.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
s_cb.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
s_cb.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h
 | 
			
		||||
s_cb.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
 | 
			
		||||
s_cb.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
 | 
			
		||||
@@ -798,13 +794,12 @@ s_cb.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
s_cb.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
s_cb.o: ../include/openssl/pqueue.h ../include/openssl/rand.h
 | 
			
		||||
s_cb.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
s_cb.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
 | 
			
		||||
s_cb.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_cb.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_cb.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
s_cb.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
s_cb.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
s_cb.o: s_apps.h s_cb.c
 | 
			
		||||
s_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_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
 | 
			
		||||
@@ -820,8 +815,7 @@ s_client.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
s_client.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
s_client.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
 | 
			
		||||
s_client.o: ../include/openssl/rand.h ../include/openssl/safestack.h
 | 
			
		||||
s_client.o: ../include/openssl/sha.h ../include/openssl/srp.h
 | 
			
		||||
s_client.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
 | 
			
		||||
s_client.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
s_client.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_client.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_client.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
@@ -832,41 +826,41 @@ s_server.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
s_server.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
s_server.o: ../include/openssl/comp.h ../include/openssl/conf.h
 | 
			
		||||
s_server.o: ../include/openssl/crypto.h ../include/openssl/dh.h
 | 
			
		||||
s_server.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h
 | 
			
		||||
s_server.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
 | 
			
		||||
s_server.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
 | 
			
		||||
s_server.o: ../include/openssl/err.h ../include/openssl/evp.h
 | 
			
		||||
s_server.o: ../include/openssl/hmac.h ../include/openssl/kssl.h
 | 
			
		||||
s_server.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
 | 
			
		||||
s_server.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
 | 
			
		||||
s_server.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
s_server.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
s_server.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
s_server.o: ../include/openssl/pqueue.h ../include/openssl/rand.h
 | 
			
		||||
s_server.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 | 
			
		||||
s_server.o: ../include/openssl/sha.h ../include/openssl/srp.h
 | 
			
		||||
s_server.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
 | 
			
		||||
s_server.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_server.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_server.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
s_server.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
s_server.o: ../include/openssl/dsa.h ../include/openssl/dtls1.h
 | 
			
		||||
s_server.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
 | 
			
		||||
s_server.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
 | 
			
		||||
s_server.o: ../include/openssl/engine.h ../include/openssl/err.h
 | 
			
		||||
s_server.o: ../include/openssl/evp.h ../include/openssl/hmac.h
 | 
			
		||||
s_server.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
 | 
			
		||||
s_server.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
 | 
			
		||||
s_server.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
 | 
			
		||||
s_server.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
s_server.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
s_server.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
 | 
			
		||||
s_server.o: ../include/openssl/rand.h ../include/openssl/rsa.h
 | 
			
		||||
s_server.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
s_server.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
s_server.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
s_server.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
s_server.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
s_server.o: ../include/openssl/ui.h ../include/openssl/x509.h
 | 
			
		||||
s_server.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
s_server.o: s_apps.h s_server.c timeouts.h
 | 
			
		||||
s_socket.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
s_socket.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
s_socket.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
s_socket.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h
 | 
			
		||||
s_socket.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
 | 
			
		||||
s_socket.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
 | 
			
		||||
s_socket.o: ../include/openssl/evp.h ../include/openssl/hmac.h
 | 
			
		||||
s_socket.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
 | 
			
		||||
s_socket.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
 | 
			
		||||
s_socket.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
 | 
			
		||||
s_socket.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
s_socket.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
s_socket.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
 | 
			
		||||
s_socket.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
s_socket.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
 | 
			
		||||
s_socket.o: ../e_os.h ../e_os2.h ../include/openssl/asn1.h
 | 
			
		||||
s_socket.o: ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
			
		||||
s_socket.o: ../include/openssl/comp.h ../include/openssl/conf.h
 | 
			
		||||
s_socket.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h
 | 
			
		||||
s_socket.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
 | 
			
		||||
s_socket.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
 | 
			
		||||
s_socket.o: ../include/openssl/engine.h ../include/openssl/evp.h
 | 
			
		||||
s_socket.o: ../include/openssl/hmac.h ../include/openssl/kssl.h
 | 
			
		||||
s_socket.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
 | 
			
		||||
s_socket.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
 | 
			
		||||
s_socket.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
s_socket.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
s_socket.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
s_socket.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
s_socket.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
s_socket.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_socket.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_socket.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
@@ -887,13 +881,13 @@ s_time.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
s_time.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
s_time.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
s_time.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
s_time.o: ../include/openssl/sha.h ../include/openssl/srtp.h
 | 
			
		||||
s_time.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
s_time.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
s_time.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
s_time.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
s_time.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
s_time.o: ../include/openssl/x509v3.h apps.h s_apps.h s_time.c
 | 
			
		||||
s_time.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
s_time.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_time.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_time.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
s_time.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
s_time.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
s_time.o: s_apps.h s_time.c
 | 
			
		||||
sess_id.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
sess_id.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
sess_id.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -908,13 +902,13 @@ sess_id.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
sess_id.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
sess_id.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
sess_id.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
sess_id.o: ../include/openssl/sha.h ../include/openssl/srtp.h
 | 
			
		||||
sess_id.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
sess_id.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
sess_id.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
sess_id.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
sess_id.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
sess_id.o: ../include/openssl/x509v3.h apps.h sess_id.c
 | 
			
		||||
sess_id.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
sess_id.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
sess_id.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
sess_id.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
sess_id.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
sess_id.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
sess_id.o: sess_id.c
 | 
			
		||||
smime.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
smime.o: ../include/openssl/buffer.h ../include/openssl/conf.h
 | 
			
		||||
smime.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
@@ -944,19 +938,19 @@ speed.o: ../include/openssl/err.h ../include/openssl/evp.h
 | 
			
		||||
speed.o: ../include/openssl/hmac.h ../include/openssl/idea.h
 | 
			
		||||
speed.o: ../include/openssl/lhash.h ../include/openssl/md4.h
 | 
			
		||||
speed.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
 | 
			
		||||
speed.o: ../include/openssl/modes.h ../include/openssl/obj_mac.h
 | 
			
		||||
speed.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
 | 
			
		||||
speed.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
speed.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h
 | 
			
		||||
speed.o: ../include/openssl/rand.h ../include/openssl/rc2.h
 | 
			
		||||
speed.o: ../include/openssl/rc4.h ../include/openssl/ripemd.h
 | 
			
		||||
speed.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 | 
			
		||||
speed.o: ../include/openssl/seed.h ../include/openssl/sha.h
 | 
			
		||||
speed.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
speed.o: ../include/openssl/txt_db.h ../include/openssl/ui.h
 | 
			
		||||
speed.o: ../include/openssl/ui_compat.h ../include/openssl/whrlpool.h
 | 
			
		||||
speed.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
speed.o: ../include/openssl/x509v3.h apps.h speed.c testdsa.h testrsa.h
 | 
			
		||||
speed.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
 | 
			
		||||
speed.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
 | 
			
		||||
speed.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
speed.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
 | 
			
		||||
speed.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
 | 
			
		||||
speed.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
 | 
			
		||||
speed.o: ../include/openssl/safestack.h ../include/openssl/seed.h
 | 
			
		||||
speed.o: ../include/openssl/sha.h ../include/openssl/stack.h
 | 
			
		||||
speed.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
 | 
			
		||||
speed.o: ../include/openssl/ui.h ../include/openssl/ui_compat.h
 | 
			
		||||
speed.o: ../include/openssl/whrlpool.h ../include/openssl/x509.h
 | 
			
		||||
speed.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
speed.o: speed.c testdsa.h testrsa.h
 | 
			
		||||
spkac.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
spkac.o: ../include/openssl/buffer.h ../include/openssl/conf.h
 | 
			
		||||
spkac.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
@@ -973,21 +967,6 @@ spkac.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
spkac.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
spkac.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
spkac.o: spkac.c
 | 
			
		||||
srp.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
srp.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
srp.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
srp.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
 | 
			
		||||
srp.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
 | 
			
		||||
srp.o: ../include/openssl/engine.h ../include/openssl/err.h
 | 
			
		||||
srp.o: ../include/openssl/evp.h ../include/openssl/lhash.h
 | 
			
		||||
srp.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
 | 
			
		||||
srp.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
 | 
			
		||||
srp.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
srp.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h
 | 
			
		||||
srp.o: ../include/openssl/sha.h ../include/openssl/srp.h
 | 
			
		||||
srp.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
srp.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
srp.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h srp.c
 | 
			
		||||
ts.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
ts.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
ts.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										329
									
								
								apps/apps.c
									
									
									
									
									
								
							
							
						
						
									
										329
									
								
								apps/apps.c
									
									
									
									
									
								
							@@ -119,7 +119,7 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#if !defined(OPENSSL_SYSNAME_WIN32) && !defined(OPENSSL_SYSNAME_WINCE) && !defined(NETWARE_CLIB)
 | 
			
		||||
#if !defined(OPENSSL_SYSNAME_WIN32) && !defined(NETWARE_CLIB)
 | 
			
		||||
# include <strings.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
@@ -273,8 +273,6 @@ int str2fmt(char *s)
 | 
			
		||||
        return (FORMAT_ASN1);
 | 
			
		||||
    else if ((*s == 'T') || (*s == 't'))
 | 
			
		||||
        return (FORMAT_TEXT);
 | 
			
		||||
    else if ((strcmp(s, "NSS") == 0) || (strcmp(s, "nss") == 0))
 | 
			
		||||
        return (FORMAT_NSS);
 | 
			
		||||
    else if ((*s == 'N') || (*s == 'n'))
 | 
			
		||||
        return (FORMAT_NETSCAPE);
 | 
			
		||||
    else if ((*s == 'S') || (*s == 's'))
 | 
			
		||||
@@ -287,8 +285,6 @@ int str2fmt(char *s)
 | 
			
		||||
        return (FORMAT_PKCS12);
 | 
			
		||||
    else if ((*s == 'E') || (*s == 'e'))
 | 
			
		||||
        return (FORMAT_ENGINE);
 | 
			
		||||
    else if ((*s == 'H') || (*s == 'h'))
 | 
			
		||||
        return FORMAT_HTTP;
 | 
			
		||||
    else if ((*s == 'P') || (*s == 'p')) {
 | 
			
		||||
        if (s[1] == 'V' || s[1] == 'v')
 | 
			
		||||
            return FORMAT_PVK;
 | 
			
		||||
@@ -298,7 +294,7 @@ int str2fmt(char *s)
 | 
			
		||||
        return (FORMAT_UNDEF);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
#if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN16) || defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
void program_name(char *in, char *out, int size)
 | 
			
		||||
{
 | 
			
		||||
    int i, n;
 | 
			
		||||
@@ -780,72 +776,12 @@ static int load_pkcs12(BIO *err, BIO *in, const char *desc,
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int load_cert_crl_http(const char *url, BIO *err,
 | 
			
		||||
                       X509 **pcert, X509_CRL **pcrl)
 | 
			
		||||
{
 | 
			
		||||
    char *host = NULL, *port = NULL, *path = NULL;
 | 
			
		||||
    BIO *bio = NULL;
 | 
			
		||||
    OCSP_REQ_CTX *rctx = NULL;
 | 
			
		||||
    int use_ssl, rv = 0;
 | 
			
		||||
    if (!OCSP_parse_url(url, &host, &port, &path, &use_ssl))
 | 
			
		||||
        goto err;
 | 
			
		||||
    if (use_ssl) {
 | 
			
		||||
        if (err)
 | 
			
		||||
            BIO_puts(err, "https not supported\n");
 | 
			
		||||
        goto err;
 | 
			
		||||
    }
 | 
			
		||||
    bio = BIO_new_connect(host);
 | 
			
		||||
    if (!bio || !BIO_set_conn_port(bio, port))
 | 
			
		||||
        goto err;
 | 
			
		||||
    rctx = OCSP_REQ_CTX_new(bio, 1024);
 | 
			
		||||
    if (!rctx)
 | 
			
		||||
        goto err;
 | 
			
		||||
    if (!OCSP_REQ_CTX_http(rctx, "GET", path))
 | 
			
		||||
        goto err;
 | 
			
		||||
    if (!OCSP_REQ_CTX_add1_header(rctx, "Host", host))
 | 
			
		||||
        goto err;
 | 
			
		||||
    if (pcert) {
 | 
			
		||||
        do {
 | 
			
		||||
            rv = X509_http_nbio(rctx, pcert);
 | 
			
		||||
        }
 | 
			
		||||
        while (rv == -1);
 | 
			
		||||
    } else {
 | 
			
		||||
        do {
 | 
			
		||||
            rv = X509_CRL_http_nbio(rctx, pcrl);
 | 
			
		||||
        } while (rv == -1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 err:
 | 
			
		||||
    if (host)
 | 
			
		||||
        OPENSSL_free(host);
 | 
			
		||||
    if (path)
 | 
			
		||||
        OPENSSL_free(path);
 | 
			
		||||
    if (port)
 | 
			
		||||
        OPENSSL_free(port);
 | 
			
		||||
    if (bio)
 | 
			
		||||
        BIO_free_all(bio);
 | 
			
		||||
    if (rctx)
 | 
			
		||||
        OCSP_REQ_CTX_free(rctx);
 | 
			
		||||
    if (rv != 1) {
 | 
			
		||||
        if (bio && err)
 | 
			
		||||
            BIO_printf(bio_err, "Error loading %s from %s\n",
 | 
			
		||||
                       pcert ? "certificate" : "CRL", url);
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    }
 | 
			
		||||
    return rv;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
X509 *load_cert(BIO *err, const char *file, int format,
 | 
			
		||||
                const char *pass, ENGINE *e, const char *cert_descrip)
 | 
			
		||||
{
 | 
			
		||||
    X509 *x = NULL;
 | 
			
		||||
    BIO *cert;
 | 
			
		||||
 | 
			
		||||
    if (format == FORMAT_HTTP) {
 | 
			
		||||
        load_cert_crl_http(file, err, &x, NULL);
 | 
			
		||||
        return x;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ((cert = BIO_new(BIO_s_file())) == NULL) {
 | 
			
		||||
        ERR_print_errors(err);
 | 
			
		||||
        goto end;
 | 
			
		||||
@@ -903,49 +839,6 @@ X509 *load_cert(BIO *err, const char *file, int format,
 | 
			
		||||
    return (x);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
X509_CRL *load_crl(const char *infile, int format)
 | 
			
		||||
{
 | 
			
		||||
    X509_CRL *x = NULL;
 | 
			
		||||
    BIO *in = NULL;
 | 
			
		||||
 | 
			
		||||
    if (format == FORMAT_HTTP) {
 | 
			
		||||
        load_cert_crl_http(infile, bio_err, NULL, &x);
 | 
			
		||||
        return x;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    if (in == NULL) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
            perror(infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (format == FORMAT_ASN1)
 | 
			
		||||
        x = d2i_X509_CRL_bio(in, NULL);
 | 
			
		||||
    else if (format == FORMAT_PEM)
 | 
			
		||||
        x = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "bad input format specified for input crl\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (x == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to load CRL\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 end:
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    return (x);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
 | 
			
		||||
                   const char *pass, ENGINE *e, const char *key_descrip)
 | 
			
		||||
{
 | 
			
		||||
@@ -2254,11 +2147,6 @@ int args_verify(char ***pargs, int *pargc,
 | 
			
		||||
    int purpose = 0, depth = -1;
 | 
			
		||||
    char **oldargs = *pargs;
 | 
			
		||||
    char *arg = **pargs, *argn = (*pargs)[1];
 | 
			
		||||
    const X509_VERIFY_PARAM *vpm = NULL;
 | 
			
		||||
    time_t at_time = 0;
 | 
			
		||||
    char *hostname = NULL;
 | 
			
		||||
    char *email = NULL;
 | 
			
		||||
    char *ipasc = NULL;
 | 
			
		||||
    if (!strcmp(arg, "-policy")) {
 | 
			
		||||
        if (!argn)
 | 
			
		||||
            *badarg = 1;
 | 
			
		||||
@@ -2285,17 +2173,6 @@ int args_verify(char ***pargs, int *pargc,
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        (*pargs)++;
 | 
			
		||||
    } else if (strcmp(arg, "-verify_name") == 0) {
 | 
			
		||||
        if (!argn)
 | 
			
		||||
            *badarg = 1;
 | 
			
		||||
        else {
 | 
			
		||||
            vpm = X509_VERIFY_PARAM_lookup(argn);
 | 
			
		||||
            if (!vpm) {
 | 
			
		||||
                BIO_printf(err, "unrecognized verify name\n");
 | 
			
		||||
                *badarg = 1;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        (*pargs)++;
 | 
			
		||||
    } else if (strcmp(arg, "-verify_depth") == 0) {
 | 
			
		||||
        if (!argn)
 | 
			
		||||
            *badarg = 1;
 | 
			
		||||
@@ -2307,37 +2184,6 @@ int args_verify(char ***pargs, int *pargc,
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        (*pargs)++;
 | 
			
		||||
    } else if (strcmp(arg, "-attime") == 0) {
 | 
			
		||||
        if (!argn)
 | 
			
		||||
            *badarg = 1;
 | 
			
		||||
        else {
 | 
			
		||||
            long timestamp;
 | 
			
		||||
            /*
 | 
			
		||||
             * interpret the -attime argument as seconds since Epoch
 | 
			
		||||
             */
 | 
			
		||||
            if (sscanf(argn, "%li", ×tamp) != 1) {
 | 
			
		||||
                BIO_printf(bio_err, "Error parsing timestamp %s\n", argn);
 | 
			
		||||
                *badarg = 1;
 | 
			
		||||
            }
 | 
			
		||||
            /* on some platforms time_t may be a float */
 | 
			
		||||
            at_time = (time_t)timestamp;
 | 
			
		||||
        }
 | 
			
		||||
        (*pargs)++;
 | 
			
		||||
    } else if (strcmp(arg, "-verify_hostname") == 0) {
 | 
			
		||||
        if (!argn)
 | 
			
		||||
            *badarg = 1;
 | 
			
		||||
        hostname = argn;
 | 
			
		||||
        (*pargs)++;
 | 
			
		||||
    } else if (strcmp(arg, "-verify_email") == 0) {
 | 
			
		||||
        if (!argn)
 | 
			
		||||
            *badarg = 1;
 | 
			
		||||
        email = argn;
 | 
			
		||||
        (*pargs)++;
 | 
			
		||||
    } else if (strcmp(arg, "-verify_ip") == 0) {
 | 
			
		||||
        if (!argn)
 | 
			
		||||
            *badarg = 1;
 | 
			
		||||
        ipasc = argn;
 | 
			
		||||
        (*pargs)++;
 | 
			
		||||
    } else if (!strcmp(arg, "-ignore_critical"))
 | 
			
		||||
        flags |= X509_V_FLAG_IGNORE_CRITICAL;
 | 
			
		||||
    else if (!strcmp(arg, "-issuer_checks"))
 | 
			
		||||
@@ -2364,16 +2210,6 @@ int args_verify(char ***pargs, int *pargc,
 | 
			
		||||
        flags |= X509_V_FLAG_NOTIFY_POLICY;
 | 
			
		||||
    else if (!strcmp(arg, "-check_ss_sig"))
 | 
			
		||||
        flags |= X509_V_FLAG_CHECK_SS_SIGNATURE;
 | 
			
		||||
    else if (!strcmp(arg, "-trusted_first"))
 | 
			
		||||
        flags |= X509_V_FLAG_TRUSTED_FIRST;
 | 
			
		||||
    else if (!strcmp(arg, "-suiteB_128_only"))
 | 
			
		||||
        flags |= X509_V_FLAG_SUITEB_128_LOS_ONLY;
 | 
			
		||||
    else if (!strcmp(arg, "-suiteB_128"))
 | 
			
		||||
        flags |= X509_V_FLAG_SUITEB_128_LOS;
 | 
			
		||||
    else if (!strcmp(arg, "-suiteB_192"))
 | 
			
		||||
        flags |= X509_V_FLAG_SUITEB_192_LOS;
 | 
			
		||||
    else if (!strcmp(arg, "-partial_chain"))
 | 
			
		||||
        flags |= X509_V_FLAG_PARTIAL_CHAIN;
 | 
			
		||||
    else
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
@@ -2389,9 +2225,6 @@ int args_verify(char ***pargs, int *pargc,
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (vpm)
 | 
			
		||||
        X509_VERIFY_PARAM_set1(*pm, vpm);
 | 
			
		||||
 | 
			
		||||
    if (otmp)
 | 
			
		||||
        X509_VERIFY_PARAM_add0_policy(*pm, otmp);
 | 
			
		||||
    if (flags)
 | 
			
		||||
@@ -2403,18 +2236,6 @@ int args_verify(char ***pargs, int *pargc,
 | 
			
		||||
    if (depth >= 0)
 | 
			
		||||
        X509_VERIFY_PARAM_set_depth(*pm, depth);
 | 
			
		||||
 | 
			
		||||
    if (at_time)
 | 
			
		||||
        X509_VERIFY_PARAM_set_time(*pm, at_time);
 | 
			
		||||
 | 
			
		||||
    if (hostname && !X509_VERIFY_PARAM_set1_host(*pm, hostname, 0))
 | 
			
		||||
        *badarg = 1;
 | 
			
		||||
 | 
			
		||||
    if (email && !X509_VERIFY_PARAM_set1_email(*pm, email, 0))
 | 
			
		||||
        *badarg = 1;
 | 
			
		||||
 | 
			
		||||
    if (ipasc && !X509_VERIFY_PARAM_set1_ip_asc(*pm, ipasc))
 | 
			
		||||
        *badarg = 1;
 | 
			
		||||
 | 
			
		||||
 end:
 | 
			
		||||
 | 
			
		||||
    (*pargs)++;
 | 
			
		||||
@@ -2698,9 +2519,6 @@ void jpake_client_auth(BIO *out, BIO *conn, const char *secret)
 | 
			
		||||
 | 
			
		||||
    BIO_puts(out, "JPAKE authentication succeeded, setting PSK\n");
 | 
			
		||||
 | 
			
		||||
    if (psk_key)
 | 
			
		||||
        OPENSSL_free(psk_key);
 | 
			
		||||
 | 
			
		||||
    psk_key = BN_bn2hex(JPAKE_get_shared_key(ctx));
 | 
			
		||||
 | 
			
		||||
    BIO_pop(bconn);
 | 
			
		||||
@@ -2730,9 +2548,6 @@ void jpake_server_auth(BIO *out, BIO *conn, const char *secret)
 | 
			
		||||
 | 
			
		||||
    BIO_puts(out, "JPAKE authentication succeeded, setting PSK\n");
 | 
			
		||||
 | 
			
		||||
    if (psk_key)
 | 
			
		||||
        OPENSSL_free(psk_key);
 | 
			
		||||
 | 
			
		||||
    psk_key = BN_bn2hex(JPAKE_get_shared_key(ctx));
 | 
			
		||||
 | 
			
		||||
    BIO_pop(bconn);
 | 
			
		||||
@@ -2743,146 +2558,6 @@ void jpake_server_auth(BIO *out, BIO *conn, const char *secret)
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_TLSEXT
 | 
			
		||||
/*-
 | 
			
		||||
 * next_protos_parse parses a comma separated list of strings into a string
 | 
			
		||||
 * in a format suitable for passing to SSL_CTX_set_next_protos_advertised.
 | 
			
		||||
 *   outlen: (output) set to the length of the resulting buffer on success.
 | 
			
		||||
 *   err: (maybe NULL) on failure, an error message line is written to this BIO.
 | 
			
		||||
 *   in: a NUL termianted string like "abc,def,ghi"
 | 
			
		||||
 *
 | 
			
		||||
 *   returns: a malloced buffer or NULL on failure.
 | 
			
		||||
 */
 | 
			
		||||
unsigned char *next_protos_parse(unsigned short *outlen, const char *in)
 | 
			
		||||
{
 | 
			
		||||
    size_t len;
 | 
			
		||||
    unsigned char *out;
 | 
			
		||||
    size_t i, start = 0;
 | 
			
		||||
 | 
			
		||||
    len = strlen(in);
 | 
			
		||||
    if (len >= 65535)
 | 
			
		||||
        return NULL;
 | 
			
		||||
 | 
			
		||||
    out = OPENSSL_malloc(strlen(in) + 1);
 | 
			
		||||
    if (!out)
 | 
			
		||||
        return NULL;
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i <= len; ++i) {
 | 
			
		||||
        if (i == len || in[i] == ',') {
 | 
			
		||||
            if (i - start > 255) {
 | 
			
		||||
                OPENSSL_free(out);
 | 
			
		||||
                return NULL;
 | 
			
		||||
            }
 | 
			
		||||
            out[start] = i - start;
 | 
			
		||||
            start = i + 1;
 | 
			
		||||
        } else
 | 
			
		||||
            out[i + 1] = in[i];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    *outlen = len + 1;
 | 
			
		||||
    return out;
 | 
			
		||||
}
 | 
			
		||||
#endif                          /* ndef OPENSSL_NO_TLSEXT */
 | 
			
		||||
 | 
			
		||||
void print_cert_checks(BIO *bio, X509 *x,
 | 
			
		||||
                       const char *checkhost,
 | 
			
		||||
                       const char *checkemail, const char *checkip)
 | 
			
		||||
{
 | 
			
		||||
    if (x == NULL)
 | 
			
		||||
        return;
 | 
			
		||||
    if (checkhost) {
 | 
			
		||||
        BIO_printf(bio, "Hostname %s does%s match certificate\n",
 | 
			
		||||
                   checkhost, X509_check_host(x, checkhost, 0, 0, NULL)
 | 
			
		||||
                   ? "" : " NOT");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (checkemail) {
 | 
			
		||||
        BIO_printf(bio, "Email %s does%s match certificate\n",
 | 
			
		||||
                   checkemail, X509_check_email(x, checkemail, 0,
 | 
			
		||||
                                                0) ? "" : " NOT");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (checkip) {
 | 
			
		||||
        BIO_printf(bio, "IP %s does%s match certificate\n",
 | 
			
		||||
                   checkip, X509_check_ip_asc(x, checkip, 0) ? "" : " NOT");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Get first http URL from a DIST_POINT structure */
 | 
			
		||||
 | 
			
		||||
static const char *get_dp_url(DIST_POINT *dp)
 | 
			
		||||
{
 | 
			
		||||
    GENERAL_NAMES *gens;
 | 
			
		||||
    GENERAL_NAME *gen;
 | 
			
		||||
    int i, gtype;
 | 
			
		||||
    ASN1_STRING *uri;
 | 
			
		||||
    if (!dp->distpoint || dp->distpoint->type != 0)
 | 
			
		||||
        return NULL;
 | 
			
		||||
    gens = dp->distpoint->name.fullname;
 | 
			
		||||
    for (i = 0; i < sk_GENERAL_NAME_num(gens); i++) {
 | 
			
		||||
        gen = sk_GENERAL_NAME_value(gens, i);
 | 
			
		||||
        uri = GENERAL_NAME_get0_value(gen, >ype);
 | 
			
		||||
        if (gtype == GEN_URI && ASN1_STRING_length(uri) > 6) {
 | 
			
		||||
            char *uptr = (char *)ASN1_STRING_data(uri);
 | 
			
		||||
            if (!strncmp(uptr, "http://", 7))
 | 
			
		||||
                return uptr;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Look through a CRLDP structure and attempt to find an http URL to
 | 
			
		||||
 * downloads a CRL from.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static X509_CRL *load_crl_crldp(STACK_OF(DIST_POINT) *crldp)
 | 
			
		||||
{
 | 
			
		||||
    int i;
 | 
			
		||||
    const char *urlptr = NULL;
 | 
			
		||||
    for (i = 0; i < sk_DIST_POINT_num(crldp); i++) {
 | 
			
		||||
        DIST_POINT *dp = sk_DIST_POINT_value(crldp, i);
 | 
			
		||||
        urlptr = get_dp_url(dp);
 | 
			
		||||
        if (urlptr)
 | 
			
		||||
            return load_crl(urlptr, FORMAT_HTTP);
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Example of downloading CRLs from CRLDP: not usable for real world as it
 | 
			
		||||
 * always downloads, doesn't support non-blocking I/O and doesn't cache
 | 
			
		||||
 * anything.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static STACK_OF(X509_CRL) *crls_http_cb(X509_STORE_CTX *ctx, X509_NAME *nm)
 | 
			
		||||
{
 | 
			
		||||
    X509 *x;
 | 
			
		||||
    STACK_OF(X509_CRL) *crls = NULL;
 | 
			
		||||
    X509_CRL *crl;
 | 
			
		||||
    STACK_OF(DIST_POINT) *crldp;
 | 
			
		||||
    x = X509_STORE_CTX_get_current_cert(ctx);
 | 
			
		||||
    crldp = X509_get_ext_d2i(x, NID_crl_distribution_points, NULL, NULL);
 | 
			
		||||
    crl = load_crl_crldp(crldp);
 | 
			
		||||
    sk_DIST_POINT_pop_free(crldp, DIST_POINT_free);
 | 
			
		||||
    if (!crl)
 | 
			
		||||
        return NULL;
 | 
			
		||||
    crls = sk_X509_CRL_new_null();
 | 
			
		||||
    sk_X509_CRL_push(crls, crl);
 | 
			
		||||
    /* Try to download delta CRL */
 | 
			
		||||
    crldp = X509_get_ext_d2i(x, NID_freshest_crl, NULL, NULL);
 | 
			
		||||
    crl = load_crl_crldp(crldp);
 | 
			
		||||
    sk_DIST_POINT_pop_free(crldp, DIST_POINT_free);
 | 
			
		||||
    if (crl)
 | 
			
		||||
        sk_X509_CRL_push(crls, crl);
 | 
			
		||||
    return crls;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void store_setup_crl_download(X509_STORE *st)
 | 
			
		||||
{
 | 
			
		||||
    X509_STORE_set_lookup_crls_cb(st, crls_http_cb);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Platform-specific sections
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										33
									
								
								apps/apps.h
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								apps/apps.h
									
									
									
									
									
								
							@@ -189,7 +189,6 @@ extern BIO *bio_err;
 | 
			
		||||
                        do { CONF_modules_unload(1); destroy_ui_method(); \
 | 
			
		||||
                        OBJ_cleanup(); EVP_cleanup(); ENGINE_cleanup(); \
 | 
			
		||||
                        CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
 | 
			
		||||
                        RAND_cleanup(); \
 | 
			
		||||
                        ERR_free_strings(); zlib_cleanup();} while(0)
 | 
			
		||||
#  else
 | 
			
		||||
#   define apps_startup() \
 | 
			
		||||
@@ -200,12 +199,11 @@ extern BIO *bio_err;
 | 
			
		||||
                        do { CONF_modules_unload(1); destroy_ui_method(); \
 | 
			
		||||
                        OBJ_cleanup(); EVP_cleanup(); \
 | 
			
		||||
                        CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
 | 
			
		||||
                        RAND_cleanup(); \
 | 
			
		||||
                        ERR_free_strings(); zlib_cleanup(); } while(0)
 | 
			
		||||
#  endif
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# if defined(OPENSSL_SYSNAME_WIN32) || defined(OPENSSL_SYSNAME_WINCE)
 | 
			
		||||
# ifdef OPENSSL_SYSNAME_WIN32
 | 
			
		||||
#  define openssl_fdset(a,b) FD_SET((unsigned int)a, b)
 | 
			
		||||
# else
 | 
			
		||||
#  define openssl_fdset(a,b) FD_SET(a, b)
 | 
			
		||||
@@ -245,9 +243,6 @@ int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2);
 | 
			
		||||
int add_oid_section(BIO *err, CONF *conf);
 | 
			
		||||
X509 *load_cert(BIO *err, const char *file, int format,
 | 
			
		||||
                const char *pass, ENGINE *e, const char *cert_descrip);
 | 
			
		||||
X509_CRL *load_crl(const char *infile, int format);
 | 
			
		||||
int load_cert_crl_http(const char *url, BIO *err,
 | 
			
		||||
                       X509 **pcert, X509_CRL **pcrl);
 | 
			
		||||
EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
 | 
			
		||||
                   const char *pass, ENGINE *e, const char *key_descrip);
 | 
			
		||||
EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin,
 | 
			
		||||
@@ -265,9 +260,8 @@ ENGINE *setup_engine(BIO *err, const char *engine, int debug);
 | 
			
		||||
 | 
			
		||||
# ifndef OPENSSL_NO_OCSP
 | 
			
		||||
OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req,
 | 
			
		||||
                                 const char *host, const char *path,
 | 
			
		||||
                                 const char *port, int use_ssl,
 | 
			
		||||
                                 const STACK_OF(CONF_VALUE) *headers,
 | 
			
		||||
                                 char *host, char *path, char *port,
 | 
			
		||||
                                 int use_ssl, STACK_OF(CONF_VALUE) *headers,
 | 
			
		||||
                                 int req_timeout);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
@@ -324,12 +318,6 @@ int bio_to_mem(unsigned char **out, int maxlen, BIO *in);
 | 
			
		||||
int pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value);
 | 
			
		||||
int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
 | 
			
		||||
                 const char *algname, ENGINE *e, int do_param);
 | 
			
		||||
int do_X509_sign(BIO *err, X509 *x, EVP_PKEY *pkey, const EVP_MD *md,
 | 
			
		||||
                 STACK_OF(OPENSSL_STRING) *sigopts);
 | 
			
		||||
int do_X509_REQ_sign(BIO *err, X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md,
 | 
			
		||||
                     STACK_OF(OPENSSL_STRING) *sigopts);
 | 
			
		||||
int do_X509_CRL_sign(BIO *err, X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md,
 | 
			
		||||
                     STACK_OF(OPENSSL_STRING) *sigopts);
 | 
			
		||||
# ifndef OPENSSL_NO_PSK
 | 
			
		||||
extern char *psk_key;
 | 
			
		||||
# endif
 | 
			
		||||
@@ -338,16 +326,6 @@ void jpake_client_auth(BIO *out, BIO *conn, const char *secret);
 | 
			
		||||
void jpake_server_auth(BIO *out, BIO *conn, const char *secret);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# ifndef OPENSSL_NO_TLSEXT
 | 
			
		||||
unsigned char *next_protos_parse(unsigned short *outlen, const char *in);
 | 
			
		||||
# endif                         /* ndef OPENSSL_NO_TLSEXT */
 | 
			
		||||
 | 
			
		||||
void print_cert_checks(BIO *bio, X509 *x,
 | 
			
		||||
                       const char *checkhost,
 | 
			
		||||
                       const char *checkemail, const char *checkip);
 | 
			
		||||
 | 
			
		||||
void store_setup_crl_download(X509_STORE *st);
 | 
			
		||||
 | 
			
		||||
# define FORMAT_UNDEF    0
 | 
			
		||||
# define FORMAT_ASN1     1
 | 
			
		||||
# define FORMAT_TEXT     2
 | 
			
		||||
@@ -362,8 +340,6 @@ void store_setup_crl_download(X509_STORE *st);
 | 
			
		||||
# define FORMAT_ASN1RSA  10     /* DER RSAPubicKey format */
 | 
			
		||||
# define FORMAT_MSBLOB   11     /* MS Key blob format */
 | 
			
		||||
# define FORMAT_PVK      12     /* MS PVK file format */
 | 
			
		||||
# define FORMAT_HTTP     13     /* Download using HTTP */
 | 
			
		||||
# define FORMAT_NSS      14     /* NSS keylog format */
 | 
			
		||||
 | 
			
		||||
# define EXT_COPY_NONE   0
 | 
			
		||||
# define EXT_COPY_ADD    1
 | 
			
		||||
@@ -382,7 +358,4 @@ int raw_write_stdout(const void *, int);
 | 
			
		||||
# define TM_START        0
 | 
			
		||||
# define TM_STOP         1
 | 
			
		||||
double app_tminterval(int stop, int usertime);
 | 
			
		||||
 | 
			
		||||
# define OPENSSL_NO_SSL_INTERN
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -92,9 +92,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    unsigned int length = 0;
 | 
			
		||||
    long num, tmplen;
 | 
			
		||||
    BIO *in = NULL, *out = NULL, *b64 = NULL, *derout = NULL;
 | 
			
		||||
    int informat, indent = 0, noout = 0, dump = 0, strictpem = 0;
 | 
			
		||||
    char *infile = NULL, *str = NULL, *prog, *oidfile = NULL, *derfile =
 | 
			
		||||
        NULL, *name = NULL, *header = NULL;
 | 
			
		||||
    int informat, indent = 0, noout = 0, dump = 0;
 | 
			
		||||
    char *infile = NULL, *str = NULL, *prog, *oidfile = NULL, *derfile = NULL;
 | 
			
		||||
    char *genstr = NULL, *genconf = NULL;
 | 
			
		||||
    unsigned char *tmpbuf;
 | 
			
		||||
    const unsigned char *ctmpbuf;
 | 
			
		||||
@@ -171,9 +170,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            genconf = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-strictpem") == 0) {
 | 
			
		||||
            strictpem = 1;
 | 
			
		||||
            informat = FORMAT_PEM;
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
@@ -207,9 +203,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                   " -genstr str   string to generate ASN1 structure from\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -genconf file file to generate ASN1 structure from\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -strictpem    do not attempt base64 decode outside PEM markers (-inform \n");
 | 
			
		||||
        BIO_printf(bio_err, "               will be ignored)\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -255,55 +248,44 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (strictpem) {
 | 
			
		||||
        if (PEM_read_bio(in, &name, &header, (unsigned char **)&str, &num) !=
 | 
			
		||||
            1) {
 | 
			
		||||
            BIO_printf(bio_err, "Error reading PEM file\n");
 | 
			
		||||
    if ((buf = BUF_MEM_new()) == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
    if (!BUF_MEM_grow(buf, BUFSIZ * 8))
 | 
			
		||||
        goto end;               /* Pre-allocate :-) */
 | 
			
		||||
 | 
			
		||||
    if (genstr || genconf) {
 | 
			
		||||
        num = do_generate(bio_err, genstr, genconf, buf);
 | 
			
		||||
        if (num < 0) {
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
 | 
			
		||||
        if ((buf = BUF_MEM_new()) == NULL)
 | 
			
		||||
            goto end;
 | 
			
		||||
        if (!BUF_MEM_grow(buf, BUFSIZ * 8))
 | 
			
		||||
            goto end;           /* Pre-allocate :-) */
 | 
			
		||||
 | 
			
		||||
        if (genstr || genconf) {
 | 
			
		||||
            num = do_generate(bio_err, genstr, genconf, buf);
 | 
			
		||||
            if (num < 0) {
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        else {
 | 
			
		||||
 | 
			
		||||
            if (informat == FORMAT_PEM) {
 | 
			
		||||
                BIO *tmp;
 | 
			
		||||
 | 
			
		||||
                if ((b64 = BIO_new(BIO_f_base64())) == NULL)
 | 
			
		||||
                    goto end;
 | 
			
		||||
                BIO_push(b64, in);
 | 
			
		||||
                tmp = in;
 | 
			
		||||
                in = b64;
 | 
			
		||||
                b64 = tmp;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            num = 0;
 | 
			
		||||
            for (;;) {
 | 
			
		||||
                if (!BUF_MEM_grow(buf, (int)num + BUFSIZ))
 | 
			
		||||
                    goto end;
 | 
			
		||||
                i = BIO_read(in, &(buf->data[num]), BUFSIZ);
 | 
			
		||||
                if (i <= 0)
 | 
			
		||||
                    break;
 | 
			
		||||
                num += i;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        str = buf->data;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    else {
 | 
			
		||||
 | 
			
		||||
        if (informat == FORMAT_PEM) {
 | 
			
		||||
            BIO *tmp;
 | 
			
		||||
 | 
			
		||||
            if ((b64 = BIO_new(BIO_f_base64())) == NULL)
 | 
			
		||||
                goto end;
 | 
			
		||||
            BIO_push(b64, in);
 | 
			
		||||
            tmp = in;
 | 
			
		||||
            in = b64;
 | 
			
		||||
            b64 = tmp;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        num = 0;
 | 
			
		||||
        for (;;) {
 | 
			
		||||
            if (!BUF_MEM_grow(buf, (int)num + BUFSIZ))
 | 
			
		||||
                goto end;
 | 
			
		||||
            i = BIO_read(in, &(buf->data[num]), BUFSIZ);
 | 
			
		||||
            if (i <= 0)
 | 
			
		||||
                break;
 | 
			
		||||
            num += i;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    str = buf->data;
 | 
			
		||||
 | 
			
		||||
    /* If any structs to parse go through in sequence */
 | 
			
		||||
 | 
			
		||||
    if (sk_OPENSSL_STRING_num(osk)) {
 | 
			
		||||
@@ -380,12 +362,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    if (buf != NULL)
 | 
			
		||||
        BUF_MEM_free(buf);
 | 
			
		||||
    if (name != NULL)
 | 
			
		||||
        OPENSSL_free(name);
 | 
			
		||||
    if (header != NULL)
 | 
			
		||||
        OPENSSL_free(header);
 | 
			
		||||
    if (strictpem && str != NULL)
 | 
			
		||||
        OPENSSL_free(str);
 | 
			
		||||
    if (at != NULL)
 | 
			
		||||
        ASN1_TYPE_free(at);
 | 
			
		||||
    if (osk != NULL)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										162
									
								
								apps/ca.c
									
									
									
									
									
								
							
							
						
						
									
										162
									
								
								apps/ca.c
									
									
									
									
									
								
							@@ -148,7 +148,7 @@
 | 
			
		||||
static const char *ca_usage[] = {
 | 
			
		||||
    "usage: ca args\n",
 | 
			
		||||
    "\n",
 | 
			
		||||
    " -verbose        - Talk a lot while doing things\n",
 | 
			
		||||
    " -verbose        - Talk alot while doing things\n",
 | 
			
		||||
    " -config file    - A config file\n",
 | 
			
		||||
    " -name arg       - The particular CA definition to use\n",
 | 
			
		||||
    " -gencrl         - Generate a new CRL\n",
 | 
			
		||||
@@ -179,7 +179,7 @@ static const char *ca_usage[] = {
 | 
			
		||||
    " -utf8           - input characters are UTF8 (default ASCII)\n",
 | 
			
		||||
    " -multivalue-rdn - enable support for multivalued RDNs\n",
 | 
			
		||||
    " -extensions ..  - Extension section (override value in config file)\n",
 | 
			
		||||
    " -extfile file   - Configuration file with X509v3 extensions to add\n",
 | 
			
		||||
    " -extfile file   - Configuration file with X509v3 extentions to add\n",
 | 
			
		||||
    " -crlexts ..     - CRL extension section (override value in config file)\n",
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    " -engine e       - use engine e, possibly a hardware device.\n",
 | 
			
		||||
@@ -197,25 +197,23 @@ extern int EF_ALIGNMENT;
 | 
			
		||||
 | 
			
		||||
static void lookup_fail(const char *name, const char *tag);
 | 
			
		||||
static int certify(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509,
 | 
			
		||||
                   const EVP_MD *dgst, STACK_OF(OPENSSL_STRING) *sigopts,
 | 
			
		||||
                   STACK_OF(CONF_VALUE) *policy, CA_DB *db,
 | 
			
		||||
                   BIGNUM *serial, char *subj, unsigned long chtype,
 | 
			
		||||
                   int multirdn, int email_dn, char *startdate, char *enddate,
 | 
			
		||||
                   long days, int batch, char *ext_sect, CONF *conf,
 | 
			
		||||
                   int verbose, unsigned long certopt, unsigned long nameopt,
 | 
			
		||||
                   const EVP_MD *dgst, STACK_OF(CONF_VALUE) *policy,
 | 
			
		||||
                   CA_DB *db, BIGNUM *serial, char *subj,
 | 
			
		||||
                   unsigned long chtype, int multirdn, int email_dn,
 | 
			
		||||
                   char *startdate, char *enddate, long days, int batch,
 | 
			
		||||
                   char *ext_sect, CONF *conf, int verbose,
 | 
			
		||||
                   unsigned long certopt, unsigned long nameopt,
 | 
			
		||||
                   int default_op, int ext_copy, int selfsign);
 | 
			
		||||
static int certify_cert(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509,
 | 
			
		||||
                        const EVP_MD *dgst, STACK_OF(OPENSSL_STRING) *sigopts,
 | 
			
		||||
                        STACK_OF(CONF_VALUE) *policy, CA_DB *db,
 | 
			
		||||
                        BIGNUM *serial, char *subj, unsigned long chtype,
 | 
			
		||||
                        int multirdn, int email_dn, char *startdate,
 | 
			
		||||
                        char *enddate, long days, int batch, char *ext_sect,
 | 
			
		||||
                        CONF *conf, int verbose, unsigned long certopt,
 | 
			
		||||
                        unsigned long nameopt, int default_op, int ext_copy,
 | 
			
		||||
                        ENGINE *e);
 | 
			
		||||
                        const EVP_MD *dgst, STACK_OF(CONF_VALUE) *policy,
 | 
			
		||||
                        CA_DB *db, BIGNUM *serial, char *subj,
 | 
			
		||||
                        unsigned long chtype, int multirdn, int email_dn,
 | 
			
		||||
                        char *startdate, char *enddate, long days, int batch,
 | 
			
		||||
                        char *ext_sect, CONF *conf, int verbose,
 | 
			
		||||
                        unsigned long certopt, unsigned long nameopt,
 | 
			
		||||
                        int default_op, int ext_copy, ENGINE *e);
 | 
			
		||||
static int certify_spkac(X509 **xret, char *infile, EVP_PKEY *pkey,
 | 
			
		||||
                         X509 *x509, const EVP_MD *dgst,
 | 
			
		||||
                         STACK_OF(OPENSSL_STRING) *sigopts,
 | 
			
		||||
                         STACK_OF(CONF_VALUE) *policy, CA_DB *db,
 | 
			
		||||
                         BIGNUM *serial, char *subj, unsigned long chtype,
 | 
			
		||||
                         int multirdn, int email_dn, char *startdate,
 | 
			
		||||
@@ -225,12 +223,12 @@ static int certify_spkac(X509 **xret, char *infile, EVP_PKEY *pkey,
 | 
			
		||||
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(OPENSSL_STRING) *sigopts,
 | 
			
		||||
                   STACK_OF(CONF_VALUE) *policy, CA_DB *db, BIGNUM *serial,
 | 
			
		||||
                   char *subj, unsigned long chtype, int multirdn,
 | 
			
		||||
                   int email_dn, char *startdate, char *enddate, long days,
 | 
			
		||||
                   int batch, int verbose, X509_REQ *req, char *ext_sect,
 | 
			
		||||
                   CONF *conf, unsigned long certopt, unsigned long nameopt,
 | 
			
		||||
                   const EVP_MD *dgst, STACK_OF(CONF_VALUE) *policy,
 | 
			
		||||
                   CA_DB *db, BIGNUM *serial, char *subj,
 | 
			
		||||
                   unsigned long chtype, int multirdn, int email_dn,
 | 
			
		||||
                   char *startdate, char *enddate, long days, int batch,
 | 
			
		||||
                   int verbose, X509_REQ *req, char *ext_sect, CONF *conf,
 | 
			
		||||
                   unsigned long certopt, unsigned long nameopt,
 | 
			
		||||
                   int default_op, int ext_copy, int selfsign);
 | 
			
		||||
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);
 | 
			
		||||
@@ -320,7 +318,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    const EVP_MD *dgst = NULL;
 | 
			
		||||
    STACK_OF(CONF_VALUE) *attribs = NULL;
 | 
			
		||||
    STACK_OF(X509) *cert_sk = NULL;
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *sigopts = NULL;
 | 
			
		||||
#undef BSIZE
 | 
			
		||||
#define BSIZE 256
 | 
			
		||||
    MS_STATIC char buf[3][BSIZE];
 | 
			
		||||
@@ -428,13 +425,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outdir = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-sigopt") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!sigopts)
 | 
			
		||||
                sigopts = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
            if (!sigopts || !sk_OPENSSL_STRING_push(sigopts, *(++argv)))
 | 
			
		||||
                goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-notext") == 0)
 | 
			
		||||
            notext = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-batch") == 0)
 | 
			
		||||
@@ -479,11 +469,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
            dorevoke = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-valid") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
            dorevoke = 2;
 | 
			
		||||
        } else if (strcmp(*argv, "-extensions") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
@@ -664,7 +649,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        ERR_clear_error();
 | 
			
		||||
#ifdef RL_DEBUG
 | 
			
		||||
    if (!p)
 | 
			
		||||
        BIO_printf(bio_err, "DEBUG: unique_subject undefined\n");
 | 
			
		||||
        BIO_printf(bio_err, "DEBUG: unique_subject undefined\n", p);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef RL_DEBUG
 | 
			
		||||
    BIO_printf(bio_err, "DEBUG: configured unique_subject is %d\n",
 | 
			
		||||
@@ -927,7 +912,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        /*****************************************************************/
 | 
			
		||||
    /* Read extensions config file                                   */
 | 
			
		||||
    /* Read extentions config file                                   */
 | 
			
		||||
    if (extfile) {
 | 
			
		||||
        extconf = NCONF_new(NULL);
 | 
			
		||||
        if (NCONF_load(extconf, extfile, &errorline) <= 0) {
 | 
			
		||||
@@ -1105,10 +1090,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        }
 | 
			
		||||
        if (spkac_file != NULL) {
 | 
			
		||||
            total++;
 | 
			
		||||
            j = certify_spkac(&x, spkac_file, pkey, x509, dgst, sigopts,
 | 
			
		||||
                              attribs, db, serial, subj, chtype, multirdn,
 | 
			
		||||
                              email_dn, startdate, enddate, days, extensions,
 | 
			
		||||
                              conf, verbose, certopt, nameopt, default_op,
 | 
			
		||||
            j = certify_spkac(&x, spkac_file, pkey, x509, dgst, attribs, db,
 | 
			
		||||
                              serial, subj, chtype, multirdn, email_dn,
 | 
			
		||||
                              startdate, enddate, days, extensions, conf,
 | 
			
		||||
                              verbose, certopt, nameopt, default_op,
 | 
			
		||||
                              ext_copy);
 | 
			
		||||
            if (j < 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
@@ -1129,8 +1114,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        }
 | 
			
		||||
        if (ss_cert_file != NULL) {
 | 
			
		||||
            total++;
 | 
			
		||||
            j = certify_cert(&x, ss_cert_file, pkey, x509, dgst, sigopts,
 | 
			
		||||
                             attribs,
 | 
			
		||||
            j = certify_cert(&x, ss_cert_file, pkey, x509, dgst, attribs,
 | 
			
		||||
                             db, serial, subj, chtype, multirdn, email_dn,
 | 
			
		||||
                             startdate, enddate, days, batch, extensions,
 | 
			
		||||
                             conf, verbose, certopt, nameopt, default_op,
 | 
			
		||||
@@ -1150,7 +1134,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        }
 | 
			
		||||
        if (infile != NULL) {
 | 
			
		||||
            total++;
 | 
			
		||||
            j = certify(&x, infile, pkey, x509p, dgst, sigopts, attribs, db,
 | 
			
		||||
            j = certify(&x, infile, pkey, x509p, dgst, attribs, db,
 | 
			
		||||
                        serial, subj, chtype, multirdn, email_dn, startdate,
 | 
			
		||||
                        enddate, days, batch, extensions, conf, verbose,
 | 
			
		||||
                        certopt, nameopt, default_op, ext_copy, selfsign);
 | 
			
		||||
@@ -1169,7 +1153,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        }
 | 
			
		||||
        for (i = 0; i < argc; i++) {
 | 
			
		||||
            total++;
 | 
			
		||||
            j = certify(&x, argv[i], pkey, x509p, dgst, sigopts, attribs, db,
 | 
			
		||||
            j = certify(&x, argv[i], pkey, x509p, dgst, attribs, db,
 | 
			
		||||
                        serial, subj, chtype, multirdn, email_dn, startdate,
 | 
			
		||||
                        enddate, days, batch, extensions, conf, verbose,
 | 
			
		||||
                        certopt, nameopt, default_op, ext_copy, selfsign);
 | 
			
		||||
@@ -1321,7 +1305,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            if (!NCONF_get_number(conf, section,
 | 
			
		||||
                                  ENV_DEFAULT_CRL_HOURS, &crlhours))
 | 
			
		||||
                crlhours = 0;
 | 
			
		||||
            ERR_clear_error();
 | 
			
		||||
        }
 | 
			
		||||
        if ((crldays == 0) && (crlhours == 0) && (crlsec == 0)) {
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
@@ -1418,7 +1401,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            crlnumber = NULL;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!do_X509_CRL_sign(bio_err, crl, pkey, dgst, sigopts))
 | 
			
		||||
        if (!X509_CRL_sign(crl, pkey, dgst))
 | 
			
		||||
            goto err;
 | 
			
		||||
 | 
			
		||||
        PEM_write_bio_X509_CRL(Sout, crl);
 | 
			
		||||
@@ -1438,8 +1421,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            revcert = load_cert(bio_err, infile, FORMAT_PEM, NULL, e, infile);
 | 
			
		||||
            if (revcert == NULL)
 | 
			
		||||
                goto err;
 | 
			
		||||
            if (dorevoke == 2)
 | 
			
		||||
                rev_type = -1;
 | 
			
		||||
            j = do_revoke(revcert, db, rev_type, rev_arg);
 | 
			
		||||
            if (j <= 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
@@ -1475,8 +1456,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    BN_free(serial);
 | 
			
		||||
    BN_free(crlnumber);
 | 
			
		||||
    free_index(db);
 | 
			
		||||
    if (sigopts)
 | 
			
		||||
        sk_OPENSSL_STRING_free(sigopts);
 | 
			
		||||
    EVP_PKEY_free(pkey);
 | 
			
		||||
    if (x509)
 | 
			
		||||
        X509_free(x509);
 | 
			
		||||
@@ -1494,12 +1473,12 @@ static void lookup_fail(const char *name, const char *tag)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int certify(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509,
 | 
			
		||||
                   const EVP_MD *dgst, STACK_OF(OPENSSL_STRING) *sigopts,
 | 
			
		||||
                   STACK_OF(CONF_VALUE) *policy, CA_DB *db,
 | 
			
		||||
                   BIGNUM *serial, char *subj, unsigned long chtype,
 | 
			
		||||
                   int multirdn, int email_dn, char *startdate, char *enddate,
 | 
			
		||||
                   long days, int batch, char *ext_sect, CONF *lconf,
 | 
			
		||||
                   int verbose, unsigned long certopt, unsigned long nameopt,
 | 
			
		||||
                   const EVP_MD *dgst, STACK_OF(CONF_VALUE) *policy,
 | 
			
		||||
                   CA_DB *db, BIGNUM *serial, char *subj,
 | 
			
		||||
                   unsigned long chtype, int multirdn, int email_dn,
 | 
			
		||||
                   char *startdate, char *enddate, long days, int batch,
 | 
			
		||||
                   char *ext_sect, CONF *lconf, int verbose,
 | 
			
		||||
                   unsigned long certopt, unsigned long nameopt,
 | 
			
		||||
                   int default_op, int ext_copy, int selfsign)
 | 
			
		||||
{
 | 
			
		||||
    X509_REQ *req = NULL;
 | 
			
		||||
@@ -1550,10 +1529,10 @@ static int certify(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509,
 | 
			
		||||
    } else
 | 
			
		||||
        BIO_printf(bio_err, "Signature ok\n");
 | 
			
		||||
 | 
			
		||||
    ok = do_body(xret, pkey, x509, dgst, sigopts, policy, db, serial, subj,
 | 
			
		||||
                 chtype, multirdn, email_dn, startdate, enddate, days, batch,
 | 
			
		||||
                 verbose, req, ext_sect, lconf, certopt, nameopt, default_op,
 | 
			
		||||
                 ext_copy, selfsign);
 | 
			
		||||
    ok = do_body(xret, pkey, x509, dgst, policy, db, serial, subj, chtype,
 | 
			
		||||
                 multirdn, email_dn, startdate, enddate, days, batch, verbose,
 | 
			
		||||
                 req, ext_sect, lconf, certopt, nameopt, default_op, ext_copy,
 | 
			
		||||
                 selfsign);
 | 
			
		||||
 | 
			
		||||
 err:
 | 
			
		||||
    if (req != NULL)
 | 
			
		||||
@@ -1564,14 +1543,13 @@ static int certify(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int certify_cert(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509,
 | 
			
		||||
                        const EVP_MD *dgst, STACK_OF(OPENSSL_STRING) *sigopts,
 | 
			
		||||
                        STACK_OF(CONF_VALUE) *policy, CA_DB *db,
 | 
			
		||||
                        BIGNUM *serial, char *subj, unsigned long chtype,
 | 
			
		||||
                        int multirdn, int email_dn, char *startdate,
 | 
			
		||||
                        char *enddate, long days, int batch, char *ext_sect,
 | 
			
		||||
                        CONF *lconf, int verbose, unsigned long certopt,
 | 
			
		||||
                        unsigned long nameopt, int default_op, int ext_copy,
 | 
			
		||||
                        ENGINE *e)
 | 
			
		||||
                        const EVP_MD *dgst, STACK_OF(CONF_VALUE) *policy,
 | 
			
		||||
                        CA_DB *db, BIGNUM *serial, char *subj,
 | 
			
		||||
                        unsigned long chtype, int multirdn, int email_dn,
 | 
			
		||||
                        char *startdate, char *enddate, long days, int batch,
 | 
			
		||||
                        char *ext_sect, CONF *lconf, int verbose,
 | 
			
		||||
                        unsigned long certopt, unsigned long nameopt,
 | 
			
		||||
                        int default_op, int ext_copy, ENGINE *e)
 | 
			
		||||
{
 | 
			
		||||
    X509 *req = NULL;
 | 
			
		||||
    X509_REQ *rreq = NULL;
 | 
			
		||||
@@ -1607,9 +1585,9 @@ static int certify_cert(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509,
 | 
			
		||||
    if ((rreq = X509_to_X509_REQ(req, NULL, EVP_md5())) == NULL)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    ok = do_body(xret, pkey, x509, dgst, sigopts, policy, db, serial, subj,
 | 
			
		||||
                 chtype, multirdn, email_dn, startdate, enddate, days, batch,
 | 
			
		||||
                 verbose, rreq, ext_sect, lconf, certopt, nameopt, default_op,
 | 
			
		||||
    ok = do_body(xret, pkey, x509, dgst, policy, db, serial, subj, chtype,
 | 
			
		||||
                 multirdn, email_dn, startdate, enddate, days, batch, verbose,
 | 
			
		||||
                 rreq, ext_sect, lconf, certopt, nameopt, default_op,
 | 
			
		||||
                 ext_copy, 0);
 | 
			
		||||
 | 
			
		||||
 err:
 | 
			
		||||
@@ -1621,12 +1599,12 @@ static int certify_cert(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509,
 | 
			
		||||
                   const EVP_MD *dgst, STACK_OF(OPENSSL_STRING) *sigopts,
 | 
			
		||||
                   STACK_OF(CONF_VALUE) *policy, CA_DB *db, BIGNUM *serial,
 | 
			
		||||
                   char *subj, unsigned long chtype, int multirdn,
 | 
			
		||||
                   int email_dn, char *startdate, char *enddate, long days,
 | 
			
		||||
                   int batch, int verbose, X509_REQ *req, char *ext_sect,
 | 
			
		||||
                   CONF *lconf, unsigned long certopt, unsigned long nameopt,
 | 
			
		||||
                   const EVP_MD *dgst, STACK_OF(CONF_VALUE) *policy,
 | 
			
		||||
                   CA_DB *db, BIGNUM *serial, char *subj,
 | 
			
		||||
                   unsigned long chtype, int multirdn, int email_dn,
 | 
			
		||||
                   char *startdate, char *enddate, long days, int batch,
 | 
			
		||||
                   int verbose, X509_REQ *req, char *ext_sect, CONF *lconf,
 | 
			
		||||
                   unsigned long certopt, unsigned long nameopt,
 | 
			
		||||
                   int default_op, int ext_copy, int selfsign)
 | 
			
		||||
{
 | 
			
		||||
    X509_NAME *name = NULL, *CAname = NULL, *subject = NULL, *dn_subject =
 | 
			
		||||
@@ -1967,12 +1945,8 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509,
 | 
			
		||||
 | 
			
		||||
    if (enddate == NULL)
 | 
			
		||||
        X509_time_adj_ex(X509_get_notAfter(ret), days, 0, NULL);
 | 
			
		||||
    else {
 | 
			
		||||
        int tdays;
 | 
			
		||||
    else
 | 
			
		||||
        ASN1_TIME_set_string(X509_get_notAfter(ret), enddate);
 | 
			
		||||
        ASN1_TIME_diff(&tdays, NULL, NULL, X509_get_notAfter(ret));
 | 
			
		||||
        days = tdays;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!X509_set_subject_name(ret, subject))
 | 
			
		||||
        goto err;
 | 
			
		||||
@@ -2097,7 +2071,7 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509,
 | 
			
		||||
        EVP_PKEY_copy_parameters(pktmp, pkey);
 | 
			
		||||
    EVP_PKEY_free(pktmp);
 | 
			
		||||
 | 
			
		||||
    if (!do_X509_sign(bio_err, ret, pkey, dgst, sigopts))
 | 
			
		||||
    if (!X509_sign(ret, pkey, dgst))
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    /* We now just add it to the database */
 | 
			
		||||
@@ -2190,7 +2164,6 @@ static void write_new_certificate(BIO *bp, X509 *x, int output_der,
 | 
			
		||||
 | 
			
		||||
static int certify_spkac(X509 **xret, char *infile, EVP_PKEY *pkey,
 | 
			
		||||
                         X509 *x509, const EVP_MD *dgst,
 | 
			
		||||
                         STACK_OF(OPENSSL_STRING) *sigopts,
 | 
			
		||||
                         STACK_OF(CONF_VALUE) *policy, CA_DB *db,
 | 
			
		||||
                         BIGNUM *serial, char *subj, unsigned long chtype,
 | 
			
		||||
                         int multirdn, int email_dn, char *startdate,
 | 
			
		||||
@@ -2313,10 +2286,10 @@ static int certify_spkac(X509 **xret, char *infile, EVP_PKEY *pkey,
 | 
			
		||||
 | 
			
		||||
    X509_REQ_set_pubkey(req, pktmp);
 | 
			
		||||
    EVP_PKEY_free(pktmp);
 | 
			
		||||
    ok = do_body(xret, pkey, x509, dgst, sigopts, policy, db, serial, subj,
 | 
			
		||||
                 chtype, multirdn, email_dn, startdate, enddate, days, 1,
 | 
			
		||||
                 verbose, req, ext_sect, lconf, certopt, nameopt, default_op,
 | 
			
		||||
                 ext_copy, 0);
 | 
			
		||||
    ok = do_body(xret, pkey, x509, dgst, policy, db, serial, subj, chtype,
 | 
			
		||||
                 multirdn, email_dn, startdate, enddate, days, 1, verbose,
 | 
			
		||||
                 req, ext_sect, lconf, certopt, nameopt, default_op, ext_copy,
 | 
			
		||||
                 0);
 | 
			
		||||
 err:
 | 
			
		||||
    if (req != NULL)
 | 
			
		||||
        X509_REQ_free(req);
 | 
			
		||||
@@ -2412,20 +2385,13 @@ static int do_revoke(X509 *x509, CA_DB *db, int type, char *value)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Revoke Certificate */
 | 
			
		||||
        if (type == -1)
 | 
			
		||||
            ok = 1;
 | 
			
		||||
        else
 | 
			
		||||
            ok = do_revoke(x509, db, type, value);
 | 
			
		||||
        ok = do_revoke(x509, db, type, value);
 | 
			
		||||
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    } else if (index_name_cmp_noconst(row, rrow)) {
 | 
			
		||||
        BIO_printf(bio_err, "ERROR:name does not match %s\n", row[DB_name]);
 | 
			
		||||
        goto err;
 | 
			
		||||
    } else if (type == -1) {
 | 
			
		||||
        BIO_printf(bio_err, "ERROR:Already present, serial number %s\n",
 | 
			
		||||
                   row[DB_serial]);
 | 
			
		||||
        goto err;
 | 
			
		||||
    } else if (rrow[DB_type][0] == 'R') {
 | 
			
		||||
        BIO_printf(bio_err, "ERROR:Already revoked, serial number %s\n",
 | 
			
		||||
                   row[DB_serial]);
 | 
			
		||||
 
 | 
			
		||||
@@ -59,6 +59,9 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#ifdef OPENSSL_NO_STDIO
 | 
			
		||||
# define APPS_WIN16
 | 
			
		||||
#endif
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
@@ -70,6 +73,7 @@ static const char *ciphers_usage[] = {
 | 
			
		||||
    "usage: ciphers args\n",
 | 
			
		||||
    " -v          - verbose mode, a textual listing of the SSL/TLS ciphers in OpenSSL\n",
 | 
			
		||||
    " -V          - even more verbose\n",
 | 
			
		||||
    " -ssl2       - SSL2 mode\n",
 | 
			
		||||
    " -ssl3       - SSL3 mode\n",
 | 
			
		||||
    " -tls1       - TLS1 mode\n",
 | 
			
		||||
    NULL
 | 
			
		||||
@@ -81,10 +85,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    int ret = 1, i;
 | 
			
		||||
    int verbose = 0, Verbose = 0;
 | 
			
		||||
    int use_supported = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_SSL_TRACE
 | 
			
		||||
    int stdname = 0;
 | 
			
		||||
#endif
 | 
			
		||||
    const char **pp;
 | 
			
		||||
    const char *p;
 | 
			
		||||
    int badops = 0;
 | 
			
		||||
@@ -92,7 +92,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    SSL *ssl = NULL;
 | 
			
		||||
    char *ciphers = NULL;
 | 
			
		||||
    const SSL_METHOD *meth = NULL;
 | 
			
		||||
    STACK_OF(SSL_CIPHER) *sk = NULL;
 | 
			
		||||
    STACK_OF(SSL_CIPHER) *sk;
 | 
			
		||||
    char buf[512];
 | 
			
		||||
    BIO *STDout = NULL;
 | 
			
		||||
 | 
			
		||||
@@ -119,11 +119,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            verbose = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-V") == 0)
 | 
			
		||||
            verbose = Verbose = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-s") == 0)
 | 
			
		||||
            use_supported = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_SSL_TRACE
 | 
			
		||||
        else if (strcmp(*argv, "-stdname") == 0)
 | 
			
		||||
            stdname = verbose = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_SSL2
 | 
			
		||||
        else if (strcmp(*argv, "-ssl2") == 0)
 | 
			
		||||
            meth = SSLv2_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SSL3
 | 
			
		||||
        else if (strcmp(*argv, "-ssl3") == 0)
 | 
			
		||||
@@ -164,15 +162,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    if (ssl == NULL)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    if (use_supported)
 | 
			
		||||
        sk = SSL_get1_supported_ciphers(ssl);
 | 
			
		||||
    else
 | 
			
		||||
        sk = SSL_get_ciphers(ssl);
 | 
			
		||||
 | 
			
		||||
    if (!verbose) {
 | 
			
		||||
        for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
 | 
			
		||||
            SSL_CIPHER *c = sk_SSL_CIPHER_value(sk, i);
 | 
			
		||||
            p = SSL_CIPHER_get_name(c);
 | 
			
		||||
        for (i = 0;; i++) {
 | 
			
		||||
            p = SSL_get_cipher_list(ssl, i);
 | 
			
		||||
            if (p == NULL)
 | 
			
		||||
                break;
 | 
			
		||||
            if (i != 0)
 | 
			
		||||
@@ -182,19 +174,25 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        BIO_printf(STDout, "\n");
 | 
			
		||||
    } else {                    /* verbose */
 | 
			
		||||
 | 
			
		||||
        sk = SSL_get_ciphers(ssl);
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
 | 
			
		||||
            SSL_CIPHER *c;
 | 
			
		||||
 | 
			
		||||
            c = sk_SSL_CIPHER_value(sk, i);
 | 
			
		||||
 | 
			
		||||
            if (Verbose) {
 | 
			
		||||
                unsigned long id = SSL_CIPHER_get_id(c);
 | 
			
		||||
                unsigned long id = c->id;
 | 
			
		||||
                int id0 = (int)(id >> 24);
 | 
			
		||||
                int id1 = (int)((id >> 16) & 0xffL);
 | 
			
		||||
                int id2 = (int)((id >> 8) & 0xffL);
 | 
			
		||||
                int id3 = (int)(id & 0xffL);
 | 
			
		||||
 | 
			
		||||
                if ((id & 0xff000000L) == 0x03000000L) {
 | 
			
		||||
                if ((id & 0xff000000L) == 0x02000000L) {
 | 
			
		||||
                    /* SSL2 cipher */
 | 
			
		||||
                    BIO_printf(STDout, "     0x%02X,0x%02X,0x%02X - ", id1,
 | 
			
		||||
                               id2, id3);
 | 
			
		||||
                } else if ((id & 0xff000000L) == 0x03000000L) {
 | 
			
		||||
                    /* SSL3 cipher */
 | 
			
		||||
                    BIO_printf(STDout, "          0x%02X,0x%02X - ", id2,
 | 
			
		||||
                               id3);
 | 
			
		||||
@@ -204,14 +202,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                               id1, id2, id3);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
#ifndef OPENSSL_NO_SSL_TRACE
 | 
			
		||||
            if (stdname) {
 | 
			
		||||
                const char *nm = SSL_CIPHER_standard_name(c);
 | 
			
		||||
                if (nm == NULL)
 | 
			
		||||
                    nm = "UNKNOWN";
 | 
			
		||||
                BIO_printf(STDout, "%s - ", nm);
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
            BIO_puts(STDout, SSL_CIPHER_description(c, buf, sizeof buf));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -223,8 +214,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    }
 | 
			
		||||
 end:
 | 
			
		||||
    if (use_supported && sk)
 | 
			
		||||
        sk_SSL_CIPHER_free(sk);
 | 
			
		||||
    if (ctx != NULL)
 | 
			
		||||
        SSL_CTX_free(ctx);
 | 
			
		||||
    if (ssl != NULL)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,52 +1,24 @@
 | 
			
		||||
subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = Test Client Cert
 | 
			
		||||
issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Client test cert (512 bit)
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIID5zCCAs+gAwIBAgIJALnu1NlVpZ6yMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV
 | 
			
		||||
BAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMSIwIAYDVQQLDBlGT1IgVEVT
 | 
			
		||||
VElORyBQVVJQT1NFUyBPTkxZMSUwIwYDVQQDDBxPcGVuU1NMIFRlc3QgSW50ZXJt
 | 
			
		||||
ZWRpYXRlIENBMB4XDTExMTIwODE0MDE0OFoXDTIxMTAxNjE0MDE0OFowZDELMAkG
 | 
			
		||||
A1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBU
 | 
			
		||||
RVNUSU5HIFBVUlBPU0VTIE9OTFkxGTAXBgNVBAMMEFRlc3QgQ2xpZW50IENlcnQw
 | 
			
		||||
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0ranbHRLcLVqN+0BzcZpY
 | 
			
		||||
+yOLqxzDWT1LD9eW1stC4NzXX9/DCtSIVyN7YIHdGLrIPr64IDdXXaMRzgZ2rOKs
 | 
			
		||||
lmHCAiFpO/ja99gGCJRxH0xwQatqAULfJVHeUhs7OEGOZc2nWifjqKvGfNTilP7D
 | 
			
		||||
nwi69ipQFq9oS19FmhwVHk2wg7KZGHI1qDyG04UrfCZMRitvS9+UVhPpIPjuiBi2
 | 
			
		||||
x3/FZIpL5gXJvvFK6xHY63oq2asyzBATntBgnP4qJFWWcvRx24wF1PnZabxuVoL2
 | 
			
		||||
bPnQ/KvONDrw3IdqkKhYNTul7jEcu3OlcZIMw+7DiaKJLAzKb/bBF5gm/pwW6As9
 | 
			
		||||
AgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBeAwLAYJYIZI
 | 
			
		||||
AYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQW
 | 
			
		||||
BBSZHKyLoTh7Mb409Zn/mK1ceSDAjDAfBgNVHSMEGDAWgBQ2w2yI55X+sL3szj49
 | 
			
		||||
hqshgYfa2jANBgkqhkiG9w0BAQUFAAOCAQEAD0mL7PtPYgCEuDyOQSbLpeND5hVS
 | 
			
		||||
curxQdGnrJ6Acrhodb7E9ccATokeb0PLx6HBLQUicxhTZIQ9FbO43YkQcOU6C3BB
 | 
			
		||||
IlwskqmtN6+VmrQzNolHCDzvxNZs9lYL2VbGPGqVRyjZeHpoAlf9cQr8PgDb4d4b
 | 
			
		||||
vUx2KAhHQvV2nkmYvKyXcgnRuHggumF87mkxidriGAEFwH4qfOqetUg64WyxP7P2
 | 
			
		||||
QLipm04SyQa7ONtIApfVXgHcE42Py4/f4arzCzMjKe3VyhGkS7nsT55X/fWgTaRm
 | 
			
		||||
CQPkO+H94P958WTvQDt77bQ+D3IvYaVvfil8n6HJMOJfFT0LJuSUbpSXJg==
 | 
			
		||||
MIIB6TCCAVICAQIwDQYJKoZIhvcNAQEEBQAwWzELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYD
 | 
			
		||||
VQQDExJUZXN0IENBICgxMDI0IGJpdCkwHhcNOTcwNjA5MTM1NzU2WhcNOTgwNjA5
 | 
			
		||||
MTM1NzU2WjBjMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
 | 
			
		||||
A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxIzAhBgNVBAMTGkNsaWVudCB0ZXN0IGNl
 | 
			
		||||
cnQgKDUxMiBiaXQpMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALtv55QyzG6i2Plw
 | 
			
		||||
Z1pah7++Gv8L5j6Hnyr/uTZE1NLG0ABDDexmq/R4KedLjFEIYjocDui+IXs62NNt
 | 
			
		||||
XrT8odkCAwEAATANBgkqhkiG9w0BAQQFAAOBgQBwtMmI7oGUG8nKmftQssATViH5
 | 
			
		||||
NRRtoEw07DxJp/LfatHdrhqQB73eGdL5WILZJXk46Xz2e9WMSUjVCSYhdKxtflU3
 | 
			
		||||
UR2Ajv1Oo0sTNdfz0wDqJNirLNtzyhhsaq8qMTrLwXrCP31VxBiigFSQSUFnZyTE
 | 
			
		||||
9TKwhS4GlwbtCfxSKQ==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIIEpQIBAAKCAQEAtK2p2x0S3C1ajftAc3GaWPsji6scw1k9Sw/XltbLQuDc11/f
 | 
			
		||||
wwrUiFcje2CB3Ri6yD6+uCA3V12jEc4GdqzirJZhwgIhaTv42vfYBgiUcR9McEGr
 | 
			
		||||
agFC3yVR3lIbOzhBjmXNp1on46irxnzU4pT+w58IuvYqUBavaEtfRZocFR5NsIOy
 | 
			
		||||
mRhyNag8htOFK3wmTEYrb0vflFYT6SD47ogYtsd/xWSKS+YFyb7xSusR2Ot6Ktmr
 | 
			
		||||
MswQE57QYJz+KiRVlnL0cduMBdT52Wm8blaC9mz50PyrzjQ68NyHapCoWDU7pe4x
 | 
			
		||||
HLtzpXGSDMPuw4miiSwMym/2wReYJv6cFugLPQIDAQABAoIBAAZOyc9MhIwLSU4L
 | 
			
		||||
p4RgQvM4UVVe8/Id+3XTZ8NsXExJbWxXfIhiqGjaIfL8u4vsgRjcl+v1s/jo2/iT
 | 
			
		||||
KMab4o4D8gXD7UavQVDjtjb/ta79WL3SjRl2Uc9YjjMkyq6WmDNQeo2NKDdafCTB
 | 
			
		||||
1uzSJtLNipB8Z53ELPuHJhxX9QMHrMnuha49riQgXZ7buP9iQrHJFhImBjSzbxJx
 | 
			
		||||
L+TI6rkyLSf9Wi0Pd3L27Ob3QWNfNRYNSeTE+08eSRChkur5W0RuXAcuAICdQlCl
 | 
			
		||||
LBvWO/LmmvbzCqiDcgy/TliSb6CGGwgiNG7LJZmlkYNj8laGwalNlYZs3UrVv6NO
 | 
			
		||||
Br2loAECgYEA2kvCvPGj0Dg/6g7WhXDvAkEbcaL1tSeCxBbNH+6HS2UWMWvyTtCn
 | 
			
		||||
/bbD519QIdkvayy1QjEf32GV/UjUVmlULMLBcDy0DGjtL3+XpIhLKWDNxN1v1/ai
 | 
			
		||||
1oz23ZJCOgnk6K4qtFtlRS1XtynjA+rBetvYvLP9SKeFrnpzCgaA2r0CgYEA0+KX
 | 
			
		||||
1ACXDTNH5ySX3kMjSS9xdINf+OOw4CvPHFwbtc9aqk2HePlEsBTz5I/W3rKwXva3
 | 
			
		||||
NqZ/bRqVVeZB/hHKFywgdUQk2Uc5z/S7Lw70/w1HubNTXGU06Ngb6zOFAo/o/TwZ
 | 
			
		||||
zTP1BMIKSOB6PAZPS3l+aLO4FRIRotfFhgRHOoECgYEAmiZbqt8cJaJDB/5YYDzC
 | 
			
		||||
mp3tSk6gIb936Q6M5VqkMYp9pIKsxhk0N8aDCnTU+kIK6SzWBpr3/d9Ecmqmfyq7
 | 
			
		||||
5SvWO3KyVf0WWK9KH0abhOm2BKm2HBQvI0DB5u8sUx2/hsvOnjPYDISbZ11t0MtK
 | 
			
		||||
u35Zy89yMYcSsIYJjG/ROCUCgYEAgI2P9G5PNxEP5OtMwOsW84Y3Xat/hPAQFlI+
 | 
			
		||||
HES+AzbFGWJkeT8zL2nm95tVkFP1sggZ7Kxjz3w7cpx7GX0NkbWSE9O+T51pNASV
 | 
			
		||||
tN1sQ3p5M+/a+cnlqgfEGJVvc7iAcXQPa3LEi5h2yPR49QYXAgG6cifn3dDSpmwn
 | 
			
		||||
SUI7PQECgYEApGCIIpSRPLAEHTGmP87RBL1smurhwmy2s/pghkvUkWehtxg0sGHh
 | 
			
		||||
kuaqDWcskogv+QC0sVdytiLSz8G0DwcEcsHK1Fkyb8A+ayiw6jWJDo2m9+IF4Fww
 | 
			
		||||
1Te6jFPYDESnbhq7+TLGgHGhtwcu5cnb4vSuYXGXKupZGzoLOBbv1Zw=
 | 
			
		||||
MIIBOwIBAAJBALtv55QyzG6i2PlwZ1pah7++Gv8L5j6Hnyr/uTZE1NLG0ABDDexm
 | 
			
		||||
q/R4KedLjFEIYjocDui+IXs62NNtXrT8odkCAwEAAQJAbwXq0vJ/+uyEvsNgxLko
 | 
			
		||||
/V86mGXQ/KrSkeKlL0r4ENxjcyeMAGoKu6J9yMY7+X9+Zm4nxShNfTsf/+Freoe1
 | 
			
		||||
HQIhAPOSm5Q1YI+KIsII2GeVJx1U69+wnd71OasIPakS1L1XAiEAxQAW+J3/JWE0
 | 
			
		||||
ftEYakbhUOKL8tD1OaFZS71/5GdG7E8CIQCefUMmySSvwd6kC0VlATSWbW+d+jp/
 | 
			
		||||
nWmM1KvqnAo5uQIhALqEADu5U1Wvt8UN8UDGBRPQulHWNycuNV45d3nnskWPAiAw
 | 
			
		||||
ueTyr6WsZ5+SD8g/Hy3xuvF3nPmJRH+rwvVihlcFOg==
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										173
									
								
								apps/cms.c
									
									
									
									
									
								
							
							
						
						
									
										173
									
								
								apps/cms.c
									
									
									
									
									
								
							@@ -75,8 +75,6 @@ static void receipt_request_print(BIO *out, CMS_ContentInfo *cms);
 | 
			
		||||
static CMS_ReceiptRequest *make_receipt_request(STACK_OF(OPENSSL_STRING)
 | 
			
		||||
                                                *rr_to, int rr_allorfirst, STACK_OF(OPENSSL_STRING)
 | 
			
		||||
                                                *rr_from);
 | 
			
		||||
static int cms_set_pkey_param(EVP_PKEY_CTX *pctx,
 | 
			
		||||
                              STACK_OF(OPENSSL_STRING) *param);
 | 
			
		||||
 | 
			
		||||
# define SMIME_OP        0x10
 | 
			
		||||
# define SMIME_IP        0x20
 | 
			
		||||
@@ -100,14 +98,6 @@ static int cms_set_pkey_param(EVP_PKEY_CTX *pctx,
 | 
			
		||||
 | 
			
		||||
int verify_err = 0;
 | 
			
		||||
 | 
			
		||||
typedef struct cms_key_param_st cms_key_param;
 | 
			
		||||
 | 
			
		||||
struct cms_key_param_st {
 | 
			
		||||
    int idx;
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *param;
 | 
			
		||||
    cms_key_param *next;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
@@ -122,7 +112,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *sksigners = NULL, *skkeys = NULL;
 | 
			
		||||
    char *certfile = NULL, *keyfile = NULL, *contfile = NULL;
 | 
			
		||||
    char *certsoutfile = NULL;
 | 
			
		||||
    const EVP_CIPHER *cipher = NULL, *wrap_cipher = NULL;
 | 
			
		||||
    const EVP_CIPHER *cipher = NULL;
 | 
			
		||||
    CMS_ContentInfo *cms = NULL, *rcms = NULL;
 | 
			
		||||
    X509_STORE *store = NULL;
 | 
			
		||||
    X509 *cert = NULL, *recip = NULL, *signer = NULL;
 | 
			
		||||
@@ -147,11 +137,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    unsigned char *secret_key = NULL, *secret_keyid = NULL;
 | 
			
		||||
    unsigned char *pwri_pass = NULL, *pwri_tmp = NULL;
 | 
			
		||||
    size_t secret_keylen = 0, secret_keyidlen = 0;
 | 
			
		||||
 | 
			
		||||
    cms_key_param *key_first = NULL, *key_param = NULL;
 | 
			
		||||
 | 
			
		||||
    ASN1_OBJECT *econtent_type = NULL;
 | 
			
		||||
 | 
			
		||||
    X509_VERIFY_PARAM *vpm = NULL;
 | 
			
		||||
@@ -213,8 +200,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            cipher = EVP_des_ede3_cbc();
 | 
			
		||||
        else if (!strcmp(*args, "-des"))
 | 
			
		||||
            cipher = EVP_des_cbc();
 | 
			
		||||
        else if (!strcmp(*args, "-des3-wrap"))
 | 
			
		||||
            wrap_cipher = EVP_des_ede3_wrap();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_SEED
 | 
			
		||||
        else if (!strcmp(*args, "-seed"))
 | 
			
		||||
@@ -235,12 +220,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            cipher = EVP_aes_192_cbc();
 | 
			
		||||
        else if (!strcmp(*args, "-aes256"))
 | 
			
		||||
            cipher = EVP_aes_256_cbc();
 | 
			
		||||
        else if (!strcmp(*args, "-aes128-wrap"))
 | 
			
		||||
            wrap_cipher = EVP_aes_128_wrap();
 | 
			
		||||
        else if (!strcmp(*args, "-aes192-wrap"))
 | 
			
		||||
            wrap_cipher = EVP_aes_192_wrap();
 | 
			
		||||
        else if (!strcmp(*args, "-aes256-wrap"))
 | 
			
		||||
            wrap_cipher = EVP_aes_256_wrap();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
        else if (!strcmp(*args, "-camellia128"))
 | 
			
		||||
@@ -254,8 +233,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            flags |= CMS_DEBUG_DECRYPT;
 | 
			
		||||
        else if (!strcmp(*args, "-text"))
 | 
			
		||||
            flags |= CMS_TEXT;
 | 
			
		||||
        else if (!strcmp(*args, "-asciicrlf"))
 | 
			
		||||
            flags |= CMS_ASCIICRLF;
 | 
			
		||||
        else if (!strcmp(*args, "-nointern"))
 | 
			
		||||
            flags |= CMS_NOINTERN;
 | 
			
		||||
        else if (!strcmp(*args, "-noverify")
 | 
			
		||||
@@ -336,11 +313,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                goto argerr;
 | 
			
		||||
            }
 | 
			
		||||
            secret_keyidlen = (size_t)ltmp;
 | 
			
		||||
        } else if (!strcmp(*args, "-pwri_password")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto argerr;
 | 
			
		||||
            args++;
 | 
			
		||||
            pwri_pass = (unsigned char *)*args;
 | 
			
		||||
        } else if (!strcmp(*args, "-econtent_type")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto argerr;
 | 
			
		||||
@@ -400,17 +372,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        } else if (!strcmp(*args, "-recip")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto argerr;
 | 
			
		||||
            if (operation == SMIME_ENCRYPT) {
 | 
			
		||||
                if (!encerts)
 | 
			
		||||
                    encerts = sk_X509_new_null();
 | 
			
		||||
                cert = load_cert(bio_err, *++args, FORMAT_PEM,
 | 
			
		||||
                                 NULL, e, "recipient certificate file");
 | 
			
		||||
                if (!cert)
 | 
			
		||||
                    goto end;
 | 
			
		||||
                sk_X509_push(encerts, cert);
 | 
			
		||||
                cert = NULL;
 | 
			
		||||
            } else
 | 
			
		||||
                recipfile = *++args;
 | 
			
		||||
            recipfile = *++args;
 | 
			
		||||
        } else if (!strcmp(*args, "-certsout")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto argerr;
 | 
			
		||||
@@ -445,36 +407,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto argerr;
 | 
			
		||||
            keyform = str2fmt(*++args);
 | 
			
		||||
        } else if (!strcmp(*args, "-keyopt")) {
 | 
			
		||||
            int keyidx = -1;
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto argerr;
 | 
			
		||||
            if (operation == SMIME_ENCRYPT) {
 | 
			
		||||
                if (encerts)
 | 
			
		||||
                    keyidx += sk_X509_num(encerts);
 | 
			
		||||
            } else {
 | 
			
		||||
                if (keyfile || signerfile)
 | 
			
		||||
                    keyidx++;
 | 
			
		||||
                if (skkeys)
 | 
			
		||||
                    keyidx += sk_OPENSSL_STRING_num(skkeys);
 | 
			
		||||
            }
 | 
			
		||||
            if (keyidx < 0) {
 | 
			
		||||
                BIO_printf(bio_err, "No key specified\n");
 | 
			
		||||
                goto argerr;
 | 
			
		||||
            }
 | 
			
		||||
            if (key_param == NULL || key_param->idx != keyidx) {
 | 
			
		||||
                cms_key_param *nparam;
 | 
			
		||||
                nparam = OPENSSL_malloc(sizeof(cms_key_param));
 | 
			
		||||
                nparam->idx = keyidx;
 | 
			
		||||
                nparam->param = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
                nparam->next = NULL;
 | 
			
		||||
                if (key_first == NULL)
 | 
			
		||||
                    key_first = nparam;
 | 
			
		||||
                else
 | 
			
		||||
                    key_param->next = nparam;
 | 
			
		||||
                key_param = nparam;
 | 
			
		||||
            }
 | 
			
		||||
            sk_OPENSSL_STRING_push(key_param->param, *++args);
 | 
			
		||||
        } else if (!strcmp(*args, "-rctform")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto argerr;
 | 
			
		||||
@@ -558,13 +490,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    else if (operation == SMIME_DECRYPT) {
 | 
			
		||||
        if (!recipfile && !keyfile && !secret_key && !pwri_pass) {
 | 
			
		||||
        if (!recipfile && !keyfile && !secret_key) {
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "No recipient certificate or key specified\n");
 | 
			
		||||
            badarg = 1;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (operation == SMIME_ENCRYPT) {
 | 
			
		||||
        if (!*args && !secret_key && !pwri_pass && !encerts) {
 | 
			
		||||
        if (!*args && !secret_key) {
 | 
			
		||||
            BIO_printf(bio_err, "No recipient(s) certificate(s) specified\n");
 | 
			
		||||
            badarg = 1;
 | 
			
		||||
        }
 | 
			
		||||
@@ -629,7 +561,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                   "-inkey file    input private key (if not signer or recipient)\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-keyform arg   input private key format (PEM or ENGINE)\n");
 | 
			
		||||
        BIO_printf(bio_err, "-keyopt nm:v   set public key parameters\n");
 | 
			
		||||
        BIO_printf(bio_err, "-out file      output file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-outform arg   output format SMIME (default), PEM or DER\n");
 | 
			
		||||
@@ -643,8 +574,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-CApath dir    trusted certificates directory\n");
 | 
			
		||||
        BIO_printf(bio_err, "-CAfile file   trusted certificates file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-trusted_first use locally trusted certificates first when building trust chain\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-crl_check     check revocation status of signer's certificate using CRLs\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
@@ -715,7 +644,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (*args && !encerts)
 | 
			
		||||
        if (*args)
 | 
			
		||||
            encerts = sk_X509_new_null();
 | 
			
		||||
        while (*args) {
 | 
			
		||||
            if (!(cert = load_cert(bio_err, *args, FORMAT_PEM,
 | 
			
		||||
@@ -867,39 +796,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    } else if (operation == SMIME_COMPRESS) {
 | 
			
		||||
        cms = CMS_compress(in, -1, flags);
 | 
			
		||||
    } else if (operation == SMIME_ENCRYPT) {
 | 
			
		||||
        int i;
 | 
			
		||||
        flags |= CMS_PARTIAL;
 | 
			
		||||
        cms = CMS_encrypt(NULL, in, cipher, flags);
 | 
			
		||||
        cms = CMS_encrypt(encerts, in, cipher, flags);
 | 
			
		||||
        if (!cms)
 | 
			
		||||
            goto end;
 | 
			
		||||
        for (i = 0; i < sk_X509_num(encerts); i++) {
 | 
			
		||||
            CMS_RecipientInfo *ri;
 | 
			
		||||
            cms_key_param *kparam;
 | 
			
		||||
            int tflags = flags;
 | 
			
		||||
            X509 *x = sk_X509_value(encerts, i);
 | 
			
		||||
            for (kparam = key_first; kparam; kparam = kparam->next) {
 | 
			
		||||
                if (kparam->idx == i) {
 | 
			
		||||
                    tflags |= CMS_KEY_PARAM;
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            ri = CMS_add1_recipient_cert(cms, x, tflags);
 | 
			
		||||
            if (!ri)
 | 
			
		||||
                goto end;
 | 
			
		||||
            if (kparam) {
 | 
			
		||||
                EVP_PKEY_CTX *pctx;
 | 
			
		||||
                pctx = CMS_RecipientInfo_get0_pkey_ctx(ri);
 | 
			
		||||
                if (!cms_set_pkey_param(pctx, kparam->param))
 | 
			
		||||
                    goto end;
 | 
			
		||||
            }
 | 
			
		||||
            if (CMS_RecipientInfo_type(ri) == CMS_RECIPINFO_AGREE
 | 
			
		||||
                && wrap_cipher) {
 | 
			
		||||
                EVP_CIPHER_CTX *wctx;
 | 
			
		||||
                wctx = CMS_RecipientInfo_kari_get0_ctx(ri);
 | 
			
		||||
                EVP_EncryptInit_ex(wctx, wrap_cipher, NULL, NULL, NULL);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (secret_key) {
 | 
			
		||||
            if (!CMS_add0_recipient_key(cms, NID_undef,
 | 
			
		||||
                                        secret_key, secret_keylen,
 | 
			
		||||
@@ -910,16 +810,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            secret_key = NULL;
 | 
			
		||||
            secret_keyid = NULL;
 | 
			
		||||
        }
 | 
			
		||||
        if (pwri_pass) {
 | 
			
		||||
            pwri_tmp = (unsigned char *)BUF_strdup((char *)pwri_pass);
 | 
			
		||||
            if (!pwri_tmp)
 | 
			
		||||
                goto end;
 | 
			
		||||
            if (!CMS_add0_recipient_password(cms,
 | 
			
		||||
                                             -1, NID_undef, NID_undef,
 | 
			
		||||
                                             pwri_tmp, -1, NULL))
 | 
			
		||||
                goto end;
 | 
			
		||||
            pwri_tmp = NULL;
 | 
			
		||||
        }
 | 
			
		||||
        if (!(flags & CMS_STREAM)) {
 | 
			
		||||
            if (!CMS_final(cms, in, NULL, flags))
 | 
			
		||||
                goto end;
 | 
			
		||||
@@ -972,11 +862,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            flags |= CMS_REUSE_DIGEST;
 | 
			
		||||
        for (i = 0; i < sk_OPENSSL_STRING_num(sksigners); i++) {
 | 
			
		||||
            CMS_SignerInfo *si;
 | 
			
		||||
            cms_key_param *kparam;
 | 
			
		||||
            int tflags = flags;
 | 
			
		||||
            signerfile = sk_OPENSSL_STRING_value(sksigners, i);
 | 
			
		||||
            keyfile = sk_OPENSSL_STRING_value(skkeys, i);
 | 
			
		||||
 | 
			
		||||
            signer = load_cert(bio_err, signerfile, FORMAT_PEM, NULL,
 | 
			
		||||
                               e, "signer certificate");
 | 
			
		||||
            if (!signer)
 | 
			
		||||
@@ -985,21 +872,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                           "signing key file");
 | 
			
		||||
            if (!key)
 | 
			
		||||
                goto end;
 | 
			
		||||
            for (kparam = key_first; kparam; kparam = kparam->next) {
 | 
			
		||||
                if (kparam->idx == i) {
 | 
			
		||||
                    tflags |= CMS_KEY_PARAM;
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            si = CMS_add1_signer(cms, signer, key, sign_md, tflags);
 | 
			
		||||
            si = CMS_add1_signer(cms, signer, key, sign_md, flags);
 | 
			
		||||
            if (!si)
 | 
			
		||||
                goto end;
 | 
			
		||||
            if (kparam) {
 | 
			
		||||
                EVP_PKEY_CTX *pctx;
 | 
			
		||||
                pctx = CMS_SignerInfo_get0_pkey_ctx(si);
 | 
			
		||||
                if (!cms_set_pkey_param(pctx, kparam->param))
 | 
			
		||||
                    goto end;
 | 
			
		||||
            }
 | 
			
		||||
            if (rr && !CMS_add1_ReceiptRequest(si, rr))
 | 
			
		||||
                goto end;
 | 
			
		||||
            X509_free(signer);
 | 
			
		||||
@@ -1040,13 +915,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (pwri_pass) {
 | 
			
		||||
            if (!CMS_decrypt_set1_password(cms, pwri_pass, -1)) {
 | 
			
		||||
                BIO_puts(bio_err, "Error decrypting CMS using password\n");
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!CMS_decrypt(cms, NULL, NULL, indata, out, flags)) {
 | 
			
		||||
            BIO_printf(bio_err, "Error decrypting CMS structure\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
@@ -1144,8 +1012,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        OPENSSL_free(secret_key);
 | 
			
		||||
    if (secret_keyid)
 | 
			
		||||
        OPENSSL_free(secret_keyid);
 | 
			
		||||
    if (pwri_tmp)
 | 
			
		||||
        OPENSSL_free(pwri_tmp);
 | 
			
		||||
    if (econtent_type)
 | 
			
		||||
        ASN1_OBJECT_free(econtent_type);
 | 
			
		||||
    if (rr)
 | 
			
		||||
@@ -1154,13 +1020,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        sk_OPENSSL_STRING_free(rr_to);
 | 
			
		||||
    if (rr_from)
 | 
			
		||||
        sk_OPENSSL_STRING_free(rr_from);
 | 
			
		||||
    for (key_param = key_first; key_param;) {
 | 
			
		||||
        cms_key_param *tparam;
 | 
			
		||||
        sk_OPENSSL_STRING_free(key_param->param);
 | 
			
		||||
        tparam = key_param->next;
 | 
			
		||||
        OPENSSL_free(key_param);
 | 
			
		||||
        key_param = tparam;
 | 
			
		||||
    }
 | 
			
		||||
    X509_STORE_free(store);
 | 
			
		||||
    X509_free(cert);
 | 
			
		||||
    X509_free(recip);
 | 
			
		||||
@@ -1334,22 +1193,4 @@ static CMS_ReceiptRequest *make_receipt_request(STACK_OF(OPENSSL_STRING)
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int cms_set_pkey_param(EVP_PKEY_CTX *pctx,
 | 
			
		||||
                              STACK_OF(OPENSSL_STRING) *param)
 | 
			
		||||
{
 | 
			
		||||
    char *keyopt;
 | 
			
		||||
    int i;
 | 
			
		||||
    if (sk_OPENSSL_STRING_num(param) <= 0)
 | 
			
		||||
        return 1;
 | 
			
		||||
    for (i = 0; i < sk_OPENSSL_STRING_num(param); i++) {
 | 
			
		||||
        keyopt = sk_OPENSSL_STRING_value(param, i);
 | 
			
		||||
        if (pkey_ctrl_string(pctx, keyopt) <= 0) {
 | 
			
		||||
            BIO_printf(bio_err, "parameter error \"%s\"\n", keyopt);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										92
									
								
								apps/crl.c
									
									
									
									
									
								
							
							
						
						
									
										92
									
								
								apps/crl.c
									
									
									
									
									
								
							@@ -96,6 +96,7 @@ static const char *crl_usage[] = {
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static X509_CRL *load_crl(char *file, int format);
 | 
			
		||||
static BIO *bio_out = NULL;
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
@@ -105,10 +106,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    unsigned long nmflag = 0;
 | 
			
		||||
    X509_CRL *x = NULL;
 | 
			
		||||
    char *CAfile = NULL, *CApath = NULL;
 | 
			
		||||
    int ret = 1, i, num, badops = 0, badsig = 0;
 | 
			
		||||
    int ret = 1, i, num, badops = 0;
 | 
			
		||||
    BIO *out = NULL;
 | 
			
		||||
    int informat, outformat, keyformat;
 | 
			
		||||
    char *infile = NULL, *outfile = NULL, *crldiff = NULL, *keyfile = NULL;
 | 
			
		||||
    int informat, outformat;
 | 
			
		||||
    char *infile = NULL, *outfile = NULL;
 | 
			
		||||
    int hash = 0, issuer = 0, lastupdate = 0, nextupdate = 0, noout =
 | 
			
		||||
        0, text = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_MD5
 | 
			
		||||
@@ -146,7 +147,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
    keyformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
@@ -173,18 +173,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-gendelta") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            crldiff = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-key") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            keyfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-keyform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            keyformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
@@ -226,8 +214,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            fingerprint = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-crlnumber") == 0)
 | 
			
		||||
            crlnumber = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-badsig") == 0)
 | 
			
		||||
            badsig = 1;
 | 
			
		||||
        else if ((md_alg = EVP_get_digestbyname(*argv + 1))) {
 | 
			
		||||
            /* ok */
 | 
			
		||||
            digest = md_alg;
 | 
			
		||||
@@ -295,33 +281,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            BIO_printf(bio_err, "verify OK\n");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (crldiff) {
 | 
			
		||||
        X509_CRL *newcrl, *delta;
 | 
			
		||||
        if (!keyfile) {
 | 
			
		||||
            BIO_puts(bio_err, "Missing CRL signing key\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        newcrl = load_crl(crldiff, informat);
 | 
			
		||||
        if (!newcrl)
 | 
			
		||||
            goto end;
 | 
			
		||||
        pkey = load_key(bio_err, keyfile, keyformat, 0, NULL, NULL,
 | 
			
		||||
                        "CRL signing key");
 | 
			
		||||
        if (!pkey) {
 | 
			
		||||
            X509_CRL_free(newcrl);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        delta = X509_CRL_diff(x, newcrl, pkey, digest, 0);
 | 
			
		||||
        X509_CRL_free(newcrl);
 | 
			
		||||
        EVP_PKEY_free(pkey);
 | 
			
		||||
        if (delta) {
 | 
			
		||||
            X509_CRL_free(x);
 | 
			
		||||
            x = delta;
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_puts(bio_err, "Error creating delta CRL\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (num) {
 | 
			
		||||
        for (i = 1; i <= num; i++) {
 | 
			
		||||
            if (issuer == i) {
 | 
			
		||||
@@ -410,9 +369,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (badsig)
 | 
			
		||||
        x->signature->data[x->signature->length - 1] ^= 0x1;
 | 
			
		||||
 | 
			
		||||
    if (outformat == FORMAT_ASN1)
 | 
			
		||||
        i = (int)i2d_X509_CRL_bio(out, x);
 | 
			
		||||
    else if (outformat == FORMAT_PEM)
 | 
			
		||||
@@ -427,8 +383,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (ret != 0)
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    BIO_free_all(bio_out);
 | 
			
		||||
    bio_out = NULL;
 | 
			
		||||
@@ -440,3 +394,41 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static X509_CRL *load_crl(char *infile, int format)
 | 
			
		||||
{
 | 
			
		||||
    X509_CRL *x = NULL;
 | 
			
		||||
    BIO *in = NULL;
 | 
			
		||||
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    if (in == NULL) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
            perror(infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (format == FORMAT_ASN1)
 | 
			
		||||
        x = d2i_X509_CRL_bio(in, NULL);
 | 
			
		||||
    else if (format == FORMAT_PEM)
 | 
			
		||||
        x = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "bad input format specified for input crl\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (x == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to load CRL\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 end:
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    return (x);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
# This is a file that will be filled by the openssl srp routine.
 | 
			
		||||
# You can initialize the file with additional groups, these are
 | 
			
		||||
# records starting with a I followed by the g and N values and the id.
 | 
			
		||||
# The exact values ... you have to dig this out from the source of srp.c
 | 
			
		||||
# or srp_vfy.c
 | 
			
		||||
# The last value of an I is used as the default group for new users.  
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
unique_subject = yes
 | 
			
		||||
							
								
								
									
										51
									
								
								apps/dgst.c
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								apps/dgst.c
									
									
									
									
									
								
							@@ -103,7 +103,7 @@ int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    ENGINE *e = NULL, *impl = NULL;
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    unsigned char *buf = NULL;
 | 
			
		||||
    int i, err = 1;
 | 
			
		||||
    const EVP_MD *md = NULL, *m;
 | 
			
		||||
@@ -124,11 +124,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    char *passargin = NULL, *passin = NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
    int engine_impl = 0;
 | 
			
		||||
#endif
 | 
			
		||||
    char *hmac_key = NULL;
 | 
			
		||||
    char *mac_name = NULL;
 | 
			
		||||
    int non_fips_allow = 0;
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *sigopts = NULL, *macopts = NULL;
 | 
			
		||||
 | 
			
		||||
    apps_startup();
 | 
			
		||||
@@ -200,8 +198,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                break;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
            e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
        } else if (strcmp(*argv, "-engine_impl") == 0)
 | 
			
		||||
            engine_impl = 1;
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
        else if (strcmp(*argv, "-hex") == 0)
 | 
			
		||||
            out_bin = 0;
 | 
			
		||||
@@ -209,10 +206,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            out_bin = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-d") == 0)
 | 
			
		||||
            debug = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-fips-fingerprint"))
 | 
			
		||||
            hmac_key = "etaonrishdlcupfm";
 | 
			
		||||
        else if (strcmp(*argv, "-non-fips-allow") == 0)
 | 
			
		||||
            non_fips_allow = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-hmac")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                break;
 | 
			
		||||
@@ -259,8 +252,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        BIO_printf(bio_err, "-d              to output debug info\n");
 | 
			
		||||
        BIO_printf(bio_err, "-hex            output as hex dump\n");
 | 
			
		||||
        BIO_printf(bio_err, "-binary         output in binary form\n");
 | 
			
		||||
        BIO_printf(bio_err, "-hmac arg       set the HMAC key to arg\n");
 | 
			
		||||
        BIO_printf(bio_err, "-non-fips-allow allow use of non FIPS digest\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-sign   file    sign digest using private key in file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
@@ -286,10 +277,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        EVP_MD_do_all_sorted(list_md_fn, bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    if (engine_impl)
 | 
			
		||||
        impl = e;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    bmd = BIO_new(BIO_f_md());
 | 
			
		||||
@@ -363,7 +350,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    if (mac_name) {
 | 
			
		||||
        EVP_PKEY_CTX *mac_ctx = NULL;
 | 
			
		||||
        int r = 0;
 | 
			
		||||
        if (!init_gen_str(bio_err, &mac_ctx, mac_name, impl, 0))
 | 
			
		||||
        if (!init_gen_str(bio_err, &mac_ctx, mac_name, e, 0))
 | 
			
		||||
            goto mac_end;
 | 
			
		||||
        if (macopts) {
 | 
			
		||||
            char *macopt;
 | 
			
		||||
@@ -390,14 +377,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (non_fips_allow) {
 | 
			
		||||
        EVP_MD_CTX *md_ctx;
 | 
			
		||||
        BIO_get_md_ctx(bmd, &md_ctx);
 | 
			
		||||
        EVP_MD_CTX_set_flags(md_ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (hmac_key) {
 | 
			
		||||
        sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, impl,
 | 
			
		||||
        sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, e,
 | 
			
		||||
                                      (unsigned char *)hmac_key, -1);
 | 
			
		||||
        if (!sigkey)
 | 
			
		||||
            goto end;
 | 
			
		||||
@@ -413,9 +394,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (do_verify)
 | 
			
		||||
            r = EVP_DigestVerifyInit(mctx, &pctx, md, impl, sigkey);
 | 
			
		||||
            r = EVP_DigestVerifyInit(mctx, &pctx, md, NULL, sigkey);
 | 
			
		||||
        else
 | 
			
		||||
            r = EVP_DigestSignInit(mctx, &pctx, md, impl, sigkey);
 | 
			
		||||
            r = EVP_DigestSignInit(mctx, &pctx, md, NULL, sigkey);
 | 
			
		||||
        if (!r) {
 | 
			
		||||
            BIO_printf(bio_err, "Error setting context\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
@@ -435,15 +416,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    }
 | 
			
		||||
    /* we use md as a filter, reading from 'in' */
 | 
			
		||||
    else {
 | 
			
		||||
        EVP_MD_CTX *mctx = NULL;
 | 
			
		||||
        if (!BIO_get_md_ctx(bmd, &mctx)) {
 | 
			
		||||
            BIO_printf(bio_err, "Error getting context\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (md == NULL)
 | 
			
		||||
            md = EVP_md5();
 | 
			
		||||
        if (!EVP_DigestInit_ex(mctx, md, impl)) {
 | 
			
		||||
        if (!BIO_set_md(bmd, md)) {
 | 
			
		||||
            BIO_printf(bio_err, "Error setting digest %s\n", pname);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
@@ -490,8 +465,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                    EVP_PKEY_asn1_get0_info(NULL, NULL,
 | 
			
		||||
                                            NULL, NULL, &sig_name, ameth);
 | 
			
		||||
            }
 | 
			
		||||
            if (md)
 | 
			
		||||
                md_name = EVP_MD_name(md);
 | 
			
		||||
            md_name = EVP_MD_name(md);
 | 
			
		||||
        }
 | 
			
		||||
        err = 0;
 | 
			
		||||
        for (i = 0; i < argc; i++) {
 | 
			
		||||
@@ -589,12 +563,9 @@ int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
			
		||||
            BIO_printf(out, "%02x", buf[i]);
 | 
			
		||||
        BIO_printf(out, " *%s\n", file);
 | 
			
		||||
    } else {
 | 
			
		||||
        if (sig_name) {
 | 
			
		||||
            BIO_puts(out, sig_name);
 | 
			
		||||
            if (md_name)
 | 
			
		||||
                BIO_printf(out, "-%s", md_name);
 | 
			
		||||
            BIO_printf(out, "(%s)= ", file);
 | 
			
		||||
        } else if (md_name)
 | 
			
		||||
        if (sig_name)
 | 
			
		||||
            BIO_printf(out, "%s-%s(%s)= ", sig_name, md_name, file);
 | 
			
		||||
        else if (md_name)
 | 
			
		||||
            BIO_printf(out, "%s(%s)= ", md_name, file);
 | 
			
		||||
        else
 | 
			
		||||
            BIO_printf(out, "(%s)= ", file);
 | 
			
		||||
 
 | 
			
		||||
@@ -130,7 +130,7 @@
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG    dhparam_main
 | 
			
		||||
 | 
			
		||||
# define DEFBITS 2048
 | 
			
		||||
# define DEFBITS 512
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
@@ -144,7 +144,7 @@
 | 
			
		||||
 * -C
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static int dh_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
@@ -254,7 +254,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -5            generate parameters using  5 as the generator value\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " numbits       number of bits in to generate (default 2048)\n");
 | 
			
		||||
                   " numbits       number of bits in to generate (default 512)\n");
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -engine e     use engine e, possibly a hardware device.\n");
 | 
			
		||||
@@ -294,14 +294,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
    if (num) {
 | 
			
		||||
 | 
			
		||||
        BN_GENCB *cb;
 | 
			
		||||
        cb = BN_GENCB_new();
 | 
			
		||||
        if (!cb) {
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        BN_GENCB_set(cb, dh_cb, bio_err);
 | 
			
		||||
        BN_GENCB cb;
 | 
			
		||||
        BN_GENCB_set(&cb, dh_cb, bio_err);
 | 
			
		||||
        if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) {
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
@@ -318,10 +312,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                       "Generating DSA parameters, %d bit long prime\n", num);
 | 
			
		||||
            if (!dsa
 | 
			
		||||
                || !DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL,
 | 
			
		||||
                                               cb)) {
 | 
			
		||||
                                               &cb)) {
 | 
			
		||||
                if (dsa)
 | 
			
		||||
                    DSA_free(dsa);
 | 
			
		||||
                BN_GENCB_free(cb);
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
@@ -329,7 +322,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            dh = DSA_dup_DH(dsa);
 | 
			
		||||
            DSA_free(dsa);
 | 
			
		||||
            if (dh == NULL) {
 | 
			
		||||
                BN_GENCB_free(cb);
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
@@ -341,14 +333,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                       "Generating DH parameters, %d bit long safe prime, generator %d\n",
 | 
			
		||||
                       num, g);
 | 
			
		||||
            BIO_printf(bio_err, "This is going to take a long time\n");
 | 
			
		||||
            if (!dh || !DH_generate_parameters_ex(dh, num, g, cb)) {
 | 
			
		||||
                BN_GENCB_free(cb);
 | 
			
		||||
            if (!dh || !DH_generate_parameters_ex(dh, num, g, &cb)) {
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        BN_GENCB_free(cb);
 | 
			
		||||
        app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
    } else {
 | 
			
		||||
 | 
			
		||||
@@ -499,12 +489,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    if (!noout) {
 | 
			
		||||
        if (outformat == FORMAT_ASN1)
 | 
			
		||||
            i = i2d_DHparams_bio(out, dh);
 | 
			
		||||
        else if (outformat == FORMAT_PEM) {
 | 
			
		||||
            if (dh->q)
 | 
			
		||||
                i = PEM_write_bio_DHxparams(out, dh);
 | 
			
		||||
            else
 | 
			
		||||
                i = PEM_write_bio_DHparams(out, dh);
 | 
			
		||||
        } else {
 | 
			
		||||
        else if (outformat == FORMAT_PEM)
 | 
			
		||||
            i = PEM_write_bio_DHparams(out, dh);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
@@ -527,7 +514,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* dh_cb is identical to dsa_cb in apps/dsaparam.c */
 | 
			
		||||
static int dh_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
{
 | 
			
		||||
    char c = '*';
 | 
			
		||||
 | 
			
		||||
@@ -539,8 +526,11 @@ static int dh_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
        c = '*';
 | 
			
		||||
    if (p == 3)
 | 
			
		||||
        c = '\n';
 | 
			
		||||
    BIO_write(BN_GENCB_get_arg(cb), &c, 1);
 | 
			
		||||
    (void)BIO_flush(BN_GENCB_get_arg(cb));
 | 
			
		||||
    BIO_write(cb->arg, &c, 1);
 | 
			
		||||
    (void)BIO_flush(cb->arg);
 | 
			
		||||
# ifdef LINT
 | 
			
		||||
    p = n;
 | 
			
		||||
# endif
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -57,6 +57,13 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */
 | 
			
		||||
/*
 | 
			
		||||
 * Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code
 | 
			
		||||
 */
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
# undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
# include <assert.h>
 | 
			
		||||
@@ -101,7 +108,7 @@ static void timebomb_sigalarm(int foo)
 | 
			
		||||
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
static int dsa_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
@@ -114,8 +121,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    char *infile, *outfile, *prog, *inrand = NULL;
 | 
			
		||||
    int numbits = -1, num, genkey = 0;
 | 
			
		||||
    int need_rand = 0;
 | 
			
		||||
    int non_fips_allow = 0;
 | 
			
		||||
    BN_GENCB *cb = NULL;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
@@ -186,8 +191,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            need_rand = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-non-fips-allow") == 0)
 | 
			
		||||
            non_fips_allow = 1;
 | 
			
		||||
        else if (sscanf(*argv, "%d", &num) == 1) {
 | 
			
		||||
            /* generate a key */
 | 
			
		||||
            numbits = num;
 | 
			
		||||
@@ -272,20 +275,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (numbits > 0) {
 | 
			
		||||
        cb = BN_GENCB_new();
 | 
			
		||||
        if (!cb) {
 | 
			
		||||
            BIO_printf(bio_err, "Error allocating BN_GENCB object\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        BN_GENCB_set(cb, dsa_cb, bio_err);
 | 
			
		||||
        BN_GENCB cb;
 | 
			
		||||
        BN_GENCB_set(&cb, dsa_cb, bio_err);
 | 
			
		||||
        assert(need_rand);
 | 
			
		||||
        dsa = DSA_new();
 | 
			
		||||
        if (!dsa) {
 | 
			
		||||
            BIO_printf(bio_err, "Error allocating DSA object\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (non_fips_allow)
 | 
			
		||||
            dsa->flags |= DSA_FLAG_NON_FIPS_ALLOW;
 | 
			
		||||
        BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\n",
 | 
			
		||||
                   num);
 | 
			
		||||
        BIO_printf(bio_err, "This could take some time\n");
 | 
			
		||||
@@ -304,7 +301,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            alarm(timebomb);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        if (!DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL, cb)) {
 | 
			
		||||
        if (!DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL, &cb)) {
 | 
			
		||||
# ifdef GENCB_TEST
 | 
			
		||||
            if (stop_keygen_flag) {
 | 
			
		||||
                BIO_printf(bio_err, "DSA key generation time-stopped\n");
 | 
			
		||||
@@ -313,7 +310,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
# endif
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            BIO_printf(bio_err, "Error, DSA key generation failed\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
@@ -409,13 +405,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        assert(need_rand);
 | 
			
		||||
        if ((dsakey = DSAparams_dup(dsa)) == NULL)
 | 
			
		||||
            goto end;
 | 
			
		||||
        if (non_fips_allow)
 | 
			
		||||
            dsakey->flags |= DSA_FLAG_NON_FIPS_ALLOW;
 | 
			
		||||
        if (!DSA_generate_key(dsakey)) {
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            DSA_free(dsakey);
 | 
			
		||||
        if (!DSA_generate_key(dsakey))
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (outformat == FORMAT_ASN1)
 | 
			
		||||
            i = i2d_DSAPrivateKey_bio(out, dsakey);
 | 
			
		||||
        else if (outformat == FORMAT_PEM)
 | 
			
		||||
@@ -423,7 +414,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                                            NULL);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            DSA_free(dsakey);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        DSA_free(dsakey);
 | 
			
		||||
@@ -432,8 +422,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (cb != NULL)
 | 
			
		||||
        BN_GENCB_free(cb);
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
@@ -444,7 +432,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int dsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
{
 | 
			
		||||
    char c = '*';
 | 
			
		||||
 | 
			
		||||
@@ -456,8 +444,11 @@ static int dsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
        c = '*';
 | 
			
		||||
    if (p == 3)
 | 
			
		||||
        c = '\n';
 | 
			
		||||
    BIO_write(BN_GENCB_get_arg(cb), &c, 1);
 | 
			
		||||
    (void)BIO_flush(BN_GENCB_get_arg(cb));
 | 
			
		||||
    BIO_write(cb->arg, &c, 1);
 | 
			
		||||
    (void)BIO_flush(cb->arg);
 | 
			
		||||
# ifdef LINT
 | 
			
		||||
    p = n;
 | 
			
		||||
# endif
 | 
			
		||||
# ifdef GENCB_TEST
 | 
			
		||||
    if (stop_keygen_flag)
 | 
			
		||||
        return 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -370,9 +370,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        } else
 | 
			
		||||
            nid = OBJ_sn2nid(curve_name);
 | 
			
		||||
 | 
			
		||||
        if (nid == 0)
 | 
			
		||||
            nid = EC_curve_nist2nid(curve_name);
 | 
			
		||||
 | 
			
		||||
        if (nid == 0) {
 | 
			
		||||
            BIO_printf(bio_err, "unknown curve name (%s)\n", curve_name);
 | 
			
		||||
            goto end;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										31
									
								
								apps/enc.c
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								apps/enc.c
									
									
									
									
									
								
							@@ -130,7 +130,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
    const EVP_MD *dgst = NULL;
 | 
			
		||||
    int non_fips_allow = 0;
 | 
			
		||||
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
@@ -266,10 +265,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            md = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-non-fips-allow") == 0)
 | 
			
		||||
            non_fips_allow = 1;
 | 
			
		||||
        else if ((argv[0][0] == '-') &&
 | 
			
		||||
                 ((c = EVP_get_cipherbyname(&(argv[0][1]))) != NULL)) {
 | 
			
		||||
        } else if ((argv[0][0] == '-') &&
 | 
			
		||||
                   ((c = EVP_get_cipherbyname(&(argv[0][1]))) != NULL)) {
 | 
			
		||||
            cipher = c;
 | 
			
		||||
        } else if (strcmp(*argv, "-none") == 0)
 | 
			
		||||
            cipher = NULL;
 | 
			
		||||
@@ -326,18 +323,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (cipher && EVP_CIPHER_flags(cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) {
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "AEAD ciphers not supported by the enc utility\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (cipher && (EVP_CIPHER_mode(cipher) == EVP_CIPH_XTS_MODE)) {
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "Ciphers in XTS mode are not supported by the enc utility\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (md && (dgst = EVP_get_digestbyname(md)) == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "%s is an unsupported message digest type\n", md);
 | 
			
		||||
        goto end;
 | 
			
		||||
@@ -537,12 +522,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                sptr = salt;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!EVP_BytesToKey(cipher, dgst, sptr,
 | 
			
		||||
                                (unsigned char *)str,
 | 
			
		||||
                                strlen(str), 1, key, iv)) {
 | 
			
		||||
                BIO_printf(bio_err, "EVP_BytesToKey failed\n");
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
            EVP_BytesToKey(cipher, dgst, sptr,
 | 
			
		||||
                           (unsigned char *)str, strlen(str), 1, key, iv);
 | 
			
		||||
            /*
 | 
			
		||||
             * zero the complete buffer or the string passed from the command
 | 
			
		||||
             * line bug picked up by Larry J. Hughes Jr. <hughes@indiana.edu>
 | 
			
		||||
@@ -580,10 +561,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
         */
 | 
			
		||||
 | 
			
		||||
        BIO_get_cipher_ctx(benc, &ctx);
 | 
			
		||||
 | 
			
		||||
        if (non_fips_allow)
 | 
			
		||||
            EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPH_FLAG_NON_FIPS_ALLOW);
 | 
			
		||||
 | 
			
		||||
        if (!EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, enc)) {
 | 
			
		||||
            BIO_printf(bio_err, "Error setting cipher %s\n",
 | 
			
		||||
                       EVP_CIPHER_name(cipher));
 | 
			
		||||
 
 | 
			
		||||
@@ -60,6 +60,9 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#ifdef OPENSSL_NO_STDIO
 | 
			
		||||
# define APPS_WIN16
 | 
			
		||||
#endif
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										33
									
								
								apps/gendh.c
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								apps/gendh.c
									
									
									
									
									
								
							@@ -58,6 +58,13 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
/*
 | 
			
		||||
 * Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code
 | 
			
		||||
 */
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
# undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
@@ -73,17 +80,17 @@
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
# define DEFBITS 2048
 | 
			
		||||
# define DEFBITS 512
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG gendh_main
 | 
			
		||||
 | 
			
		||||
static int dh_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    BN_GENCB *cb = NULL;
 | 
			
		||||
    BN_GENCB cb;
 | 
			
		||||
    DH *dh = NULL;
 | 
			
		||||
    int ret = 1, num = DEFBITS;
 | 
			
		||||
    int g = 2;
 | 
			
		||||
@@ -96,16 +103,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
    BN_GENCB_set(&cb, dh_cb, bio_err);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
    cb = BN_GENCB_new();
 | 
			
		||||
    if (!cb)
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
    BN_GENCB_set(cb, dh_cb, bio_err);
 | 
			
		||||
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
@@ -199,7 +201,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    BIO_printf(bio_err, "This is going to take a long time\n");
 | 
			
		||||
 | 
			
		||||
    if (((dh = DH_new()) == NULL)
 | 
			
		||||
        || !DH_generate_parameters_ex(dh, num, g, cb))
 | 
			
		||||
        || !DH_generate_parameters_ex(dh, num, g, &cb))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
    app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
@@ -214,13 +216,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (dh != NULL)
 | 
			
		||||
        DH_free(dh);
 | 
			
		||||
    if (cb != NULL)
 | 
			
		||||
        BN_GENCB_free(cb);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int dh_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
{
 | 
			
		||||
    char c = '*';
 | 
			
		||||
 | 
			
		||||
@@ -232,8 +232,11 @@ static int dh_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
        c = '*';
 | 
			
		||||
    if (p == 3)
 | 
			
		||||
        c = '\n';
 | 
			
		||||
    BIO_write(BN_GENCB_get_arg(cb), &c, 1);
 | 
			
		||||
    (void)BIO_flush(BN_GENCB_get_arg(cb));
 | 
			
		||||
    BIO_write(cb->arg, &c, 1);
 | 
			
		||||
    (void)BIO_flush(cb->arg);
 | 
			
		||||
# ifdef LINT
 | 
			
		||||
    p = n;
 | 
			
		||||
# endif
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
#else                           /* !OPENSSL_NO_DH */
 | 
			
		||||
 
 | 
			
		||||
@@ -398,5 +398,8 @@ static int genpkey_cb(EVP_PKEY_CTX *ctx)
 | 
			
		||||
        c = '\n';
 | 
			
		||||
    BIO_write(b, &c, 1);
 | 
			
		||||
    (void)BIO_flush(b);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
    p = n;
 | 
			
		||||
#endif
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -57,6 +57,13 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
/*
 | 
			
		||||
 * Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code
 | 
			
		||||
 */
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
# undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
@@ -73,28 +80,27 @@
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
# include <openssl/rand.h>
 | 
			
		||||
 | 
			
		||||
# define DEFBITS 2048
 | 
			
		||||
# define DEFBITS 512
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG genrsa_main
 | 
			
		||||
 | 
			
		||||
static int genrsa_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    BN_GENCB *cb = NULL;
 | 
			
		||||
    BN_GENCB cb;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    int non_fips_allow = 0;
 | 
			
		||||
    int num = DEFBITS;
 | 
			
		||||
    int i, num = DEFBITS;
 | 
			
		||||
    long l;
 | 
			
		||||
    const EVP_CIPHER *enc = NULL;
 | 
			
		||||
    unsigned long f4 = RSA_F4;
 | 
			
		||||
    char *outfile = NULL;
 | 
			
		||||
    char *passargout = NULL, *passout = NULL;
 | 
			
		||||
    char *hexe, *dece;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
@@ -102,16 +108,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    BIO *out = NULL;
 | 
			
		||||
    BIGNUM *bn = BN_new();
 | 
			
		||||
    RSA *rsa = NULL;
 | 
			
		||||
 | 
			
		||||
    if (!bn)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    cb = BN_GENCB_new();
 | 
			
		||||
    if (!cb)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
    BN_GENCB_set(cb, genrsa_cb, bio_err);
 | 
			
		||||
    BN_GENCB_set(&cb, genrsa_cb, bio_err);
 | 
			
		||||
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
@@ -183,9 +185,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargout = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-non-fips-allow") == 0)
 | 
			
		||||
            non_fips_allow = 1;
 | 
			
		||||
        else
 | 
			
		||||
        } else
 | 
			
		||||
            break;
 | 
			
		||||
        argv++;
 | 
			
		||||
        argc--;
 | 
			
		||||
@@ -278,23 +278,24 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    if (!rsa)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    if (non_fips_allow)
 | 
			
		||||
        rsa->flags |= RSA_FLAG_NON_FIPS_ALLOW;
 | 
			
		||||
 | 
			
		||||
    if (!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, cb))
 | 
			
		||||
    if (!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, &cb))
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 | 
			
		||||
    hexe = BN_bn2hex(rsa->e);
 | 
			
		||||
    dece = BN_bn2dec(rsa->e);
 | 
			
		||||
    if (hexe && dece) {
 | 
			
		||||
        BIO_printf(bio_err, "e is %s (0x%s)\n", dece, hexe);
 | 
			
		||||
    /*
 | 
			
		||||
     * We need to do the following for when the base number size is < long,
 | 
			
		||||
     * esp windows 3.1 :-(.
 | 
			
		||||
     */
 | 
			
		||||
    l = 0L;
 | 
			
		||||
    for (i = 0; i < rsa->e->top; i++) {
 | 
			
		||||
# ifndef SIXTY_FOUR_BIT
 | 
			
		||||
        l <<= BN_BITS4;
 | 
			
		||||
        l <<= BN_BITS4;
 | 
			
		||||
# endif
 | 
			
		||||
        l += rsa->e->d[i];
 | 
			
		||||
    }
 | 
			
		||||
    if (hexe)
 | 
			
		||||
        OPENSSL_free(hexe);
 | 
			
		||||
    if (dece)
 | 
			
		||||
        OPENSSL_free(dece);
 | 
			
		||||
    BIO_printf(bio_err, "e is %ld (0x%lX)\n", l, l);
 | 
			
		||||
    {
 | 
			
		||||
        PW_CB_DATA cb_data;
 | 
			
		||||
        cb_data.password = passout;
 | 
			
		||||
@@ -309,8 +310,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 err:
 | 
			
		||||
    if (bn)
 | 
			
		||||
        BN_free(bn);
 | 
			
		||||
    if (cb)
 | 
			
		||||
        BN_GENCB_free(cb);
 | 
			
		||||
    if (rsa)
 | 
			
		||||
        RSA_free(rsa);
 | 
			
		||||
    if (out)
 | 
			
		||||
@@ -323,7 +322,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int genrsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
{
 | 
			
		||||
    char c = '*';
 | 
			
		||||
 | 
			
		||||
@@ -335,8 +334,11 @@ static int genrsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
        c = '*';
 | 
			
		||||
    if (p == 3)
 | 
			
		||||
        c = '\n';
 | 
			
		||||
    BIO_write(BN_GENCB_get_arg(cb), &c, 1);
 | 
			
		||||
    (void)BIO_flush(BN_GENCB_get_arg(cb));
 | 
			
		||||
    BIO_write(cb->arg, &c, 1);
 | 
			
		||||
    (void)BIO_flush(cb->arg);
 | 
			
		||||
# ifdef LINT
 | 
			
		||||
    p = n;
 | 
			
		||||
# endif
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
#else                           /* !OPENSSL_NO_RSA */
 | 
			
		||||
 
 | 
			
		||||
@@ -184,7 +184,7 @@ $ LIB_OPENSSL = "VERIFY,ASN1PARS,REQ,DGST,DH,DHPARAM,ENC,PASSWD,GENDH,ERRSTR,"+-
 | 
			
		||||
	      	"X509,GENRSA,GENDSA,GENPKEY,S_SERVER,S_CLIENT,SPEED,"+-
 | 
			
		||||
	      	"S_TIME,APPS,S_CB,S_SOCKET,APP_RAND,VERSION,SESS_ID,"+-
 | 
			
		||||
	      	"CIPHERS,NSEQ,PKCS12,PKCS8,PKEY,PKEYPARAM,PKEYUTL,"+ -
 | 
			
		||||
	      	"SPKAC,SMIME,CMS,RAND,ENGINE,OCSP,PRIME,TS,SRP"
 | 
			
		||||
	      	"SPKAC,SMIME,CMS,RAND,ENGINE,OCSP,PRIME,TS"
 | 
			
		||||
$!
 | 
			
		||||
$ LIB_OPENSSL = LIB_OPENSSL+ ",VMS_DECC_INIT"
 | 
			
		||||
$!
 | 
			
		||||
@@ -773,9 +773,12 @@ $ CCDEFS = "MONOLITH"
 | 
			
		||||
$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
 | 
			
		||||
$ CCEXTRAFLAGS = ""
 | 
			
		||||
$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
 | 
			
		||||
$ CCDISABLEWARNINGS = "" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
 | 
			
		||||
$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
 | 
			
		||||
	CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
 | 
			
		||||
$ CCDISABLEWARNINGS = "" !!! "MAYLOSEDATA3" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
 | 
			
		||||
$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. ""
 | 
			
		||||
$ THEN
 | 
			
		||||
$     IF CCDISABLEWARNINGS .NES. "" THEN CCDISABLEWARNINGS = CCDISABLEWARNINGS + ","
 | 
			
		||||
$     CCDISABLEWARNINGS = CCDISABLEWARNINGS + USER_CCDISABLEWARNINGS
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If We Have A ZLIB Option.
 | 
			
		||||
$!
 | 
			
		||||
@@ -1064,6 +1067,18 @@ $! Finish up the definition of CC.
 | 
			
		||||
$!
 | 
			
		||||
$ IF COMPILER .EQS. "DECC"
 | 
			
		||||
$ THEN
 | 
			
		||||
$!  Not all compiler versions support MAYLOSEDATA3.
 | 
			
		||||
$   OPT_TEST = "MAYLOSEDATA3"
 | 
			
		||||
$   DEFINE /USER_MODE SYS$ERROR NL:
 | 
			
		||||
$   DEFINE /USER_MODE SYS$OUTPUT NL:
 | 
			
		||||
$   'CC' /NOCROSS_REFERENCE /NOLIST /NOOBJECT -
 | 
			
		||||
      /WARNINGS = DISABLE = ('OPT_TEST', EMPTYFILE) NL:
 | 
			
		||||
$   IF ($SEVERITY)
 | 
			
		||||
$   THEN
 | 
			
		||||
$     IF CCDISABLEWARNINGS .NES. "" THEN -
 | 
			
		||||
        CCDISABLEWARNINGS = CCDISABLEWARNINGS+ ","
 | 
			
		||||
$     CCDISABLEWARNINGS = CCDISABLEWARNINGS+ OPT_TEST
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$   IF CCDISABLEWARNINGS .NES. ""
 | 
			
		||||
$   THEN
 | 
			
		||||
$     CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										106
									
								
								apps/ocsp.c
									
									
									
									
									
								
							
							
						
						
									
										106
									
								
								apps/ocsp.c
									
									
									
									
									
								
							@@ -110,17 +110,16 @@ static int print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req,
 | 
			
		||||
 | 
			
		||||
static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req,
 | 
			
		||||
                              CA_DB *db, X509 *ca, X509 *rcert,
 | 
			
		||||
                              EVP_PKEY *rkey, const EVP_MD *md,
 | 
			
		||||
                              STACK_OF(X509) *rother, unsigned long flags,
 | 
			
		||||
                              int nmin, int ndays, int badsig);
 | 
			
		||||
                              EVP_PKEY *rkey, STACK_OF(X509) *rother,
 | 
			
		||||
                              unsigned long flags, int nmin, int ndays);
 | 
			
		||||
 | 
			
		||||
static char **lookup_serial(CA_DB *db, ASN1_INTEGER *ser);
 | 
			
		||||
static BIO *init_responder(const char *port);
 | 
			
		||||
static BIO *init_responder(char *port);
 | 
			
		||||
static int do_responder(OCSP_REQUEST **preq, BIO **pcbio, BIO *acbio,
 | 
			
		||||
                        const char *port);
 | 
			
		||||
                        char *port);
 | 
			
		||||
static int send_ocsp_response(BIO *cbio, OCSP_RESPONSE *resp);
 | 
			
		||||
static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, const char *path,
 | 
			
		||||
                                      const STACK_OF(CONF_VALUE) *headers,
 | 
			
		||||
static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, char *path,
 | 
			
		||||
                                      STACK_OF(CONF_VALUE) *headers,
 | 
			
		||||
                                      OCSP_REQUEST *req, int req_timeout);
 | 
			
		||||
 | 
			
		||||
# undef PROG
 | 
			
		||||
@@ -155,14 +154,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    long nsec = MAX_VALIDITY_PERIOD, maxage = -1;
 | 
			
		||||
    char *CAfile = NULL, *CApath = NULL;
 | 
			
		||||
    X509_STORE *store = NULL;
 | 
			
		||||
    X509_VERIFY_PARAM *vpm = NULL;
 | 
			
		||||
    STACK_OF(X509) *sign_other = NULL, *verify_other = NULL, *rother = NULL;
 | 
			
		||||
    char *sign_certfile = NULL, *verify_certfile = NULL, *rcertfile = NULL;
 | 
			
		||||
    unsigned long sign_flags = 0, verify_flags = 0, rflags = 0;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    int accept_count = -1;
 | 
			
		||||
    int badarg = 0;
 | 
			
		||||
    int badsig = 0;
 | 
			
		||||
    int i;
 | 
			
		||||
    int ignore_err = 0;
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *reqnames = NULL;
 | 
			
		||||
@@ -173,7 +170,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    char *rca_filename = NULL;
 | 
			
		||||
    CA_DB *rdb = NULL;
 | 
			
		||||
    int nmin = 0, ndays = -1;
 | 
			
		||||
    const EVP_MD *cert_id_md = NULL, *rsign_md = NULL;
 | 
			
		||||
    const EVP_MD *cert_id_md = NULL;
 | 
			
		||||
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
@@ -267,8 +264,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            verify_flags |= OCSP_TRUSTOTHER;
 | 
			
		||||
        else if (!strcmp(*args, "-no_intern"))
 | 
			
		||||
            verify_flags |= OCSP_NOINTERN;
 | 
			
		||||
        else if (!strcmp(*args, "-badsig"))
 | 
			
		||||
            badsig = 1;
 | 
			
		||||
        else if (!strcmp(*args, "-text")) {
 | 
			
		||||
            req_text = 1;
 | 
			
		||||
            resp_text = 1;
 | 
			
		||||
@@ -325,10 +320,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                CApath = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (args_verify(&args, NULL, &badarg, bio_err, &vpm)) {
 | 
			
		||||
            if (badarg)
 | 
			
		||||
                goto end;
 | 
			
		||||
            continue;
 | 
			
		||||
        } else if (!strcmp(*args, "-validity_period")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
@@ -474,14 +465,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                rcertfile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-rmd")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                rsign_md = EVP_get_digestbyname(*args);
 | 
			
		||||
                if (!rsign_md)
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if ((cert_id_md = EVP_get_digestbyname((*args) + 1)) == NULL) {
 | 
			
		||||
            badarg = 1;
 | 
			
		||||
        }
 | 
			
		||||
@@ -535,8 +518,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                   "-CApath dir          trusted certificates directory\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-CAfile file         trusted certificates file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-trusted_first       use locally trusted CA's first when building trust chain\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-VAfile file         validator certificates file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
@@ -601,10 +582,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        add_nonce = 0;
 | 
			
		||||
 | 
			
		||||
    if (!req && reqin) {
 | 
			
		||||
        if (!strcmp(reqin, "-"))
 | 
			
		||||
            derbio = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
        else
 | 
			
		||||
            derbio = BIO_new_file(reqin, "rb");
 | 
			
		||||
        derbio = BIO_new_file(reqin, "rb");
 | 
			
		||||
        if (!derbio) {
 | 
			
		||||
            BIO_printf(bio_err, "Error Opening OCSP request file\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
@@ -701,10 +679,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        OCSP_REQUEST_print(out, req, 0);
 | 
			
		||||
 | 
			
		||||
    if (reqout) {
 | 
			
		||||
        if (!strcmp(reqout, "-"))
 | 
			
		||||
            derbio = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
        else
 | 
			
		||||
            derbio = BIO_new_file(reqout, "wb");
 | 
			
		||||
        derbio = BIO_new_file(reqout, "wb");
 | 
			
		||||
        if (!derbio) {
 | 
			
		||||
            BIO_printf(bio_err, "Error opening file %s\n", reqout);
 | 
			
		||||
            goto end;
 | 
			
		||||
@@ -729,7 +704,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
    if (rdb) {
 | 
			
		||||
        i = make_ocsp_response(&resp, req, rdb, rca_cert, rsigner, rkey,
 | 
			
		||||
                               rsign_md, rother, rflags, nmin, ndays, badsig);
 | 
			
		||||
                               rother, rflags, nmin, ndays);
 | 
			
		||||
        if (cbio)
 | 
			
		||||
            send_ocsp_response(cbio, resp);
 | 
			
		||||
    } else if (host) {
 | 
			
		||||
@@ -744,10 +719,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        goto end;
 | 
			
		||||
# endif
 | 
			
		||||
    } else if (respin) {
 | 
			
		||||
        if (!strcmp(respin, "-"))
 | 
			
		||||
            derbio = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
        else
 | 
			
		||||
            derbio = BIO_new_file(respin, "rb");
 | 
			
		||||
        derbio = BIO_new_file(respin, "rb");
 | 
			
		||||
        if (!derbio) {
 | 
			
		||||
            BIO_printf(bio_err, "Error Opening OCSP response file\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
@@ -767,10 +739,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 done_resp:
 | 
			
		||||
 | 
			
		||||
    if (respout) {
 | 
			
		||||
        if (!strcmp(respout, "-"))
 | 
			
		||||
            derbio = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
        else
 | 
			
		||||
            derbio = BIO_new_file(respout, "wb");
 | 
			
		||||
        derbio = BIO_new_file(respout, "wb");
 | 
			
		||||
        if (!derbio) {
 | 
			
		||||
            BIO_printf(bio_err, "Error opening file %s\n", respout);
 | 
			
		||||
            goto end;
 | 
			
		||||
@@ -807,10 +776,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            resp = NULL;
 | 
			
		||||
            goto redo_accept;
 | 
			
		||||
        }
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    } else if (ridx_filename) {
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -818,8 +783,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        store = setup_verify(bio_err, CAfile, CApath);
 | 
			
		||||
    if (!store)
 | 
			
		||||
        goto end;
 | 
			
		||||
    if (vpm)
 | 
			
		||||
        X509_STORE_set1_param(store, vpm);
 | 
			
		||||
    if (verify_certfile) {
 | 
			
		||||
        verify_other = load_certs(bio_err, verify_certfile, FORMAT_PEM,
 | 
			
		||||
                                  NULL, e, "validator certificate");
 | 
			
		||||
@@ -834,38 +797,37 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
    if (!noverify) {
 | 
			
		||||
        if (req && ((i = OCSP_check_nonce(req, bs)) <= 0)) {
 | 
			
		||||
            if (i == -1)
 | 
			
		||||
                BIO_printf(bio_err, "WARNING: no nonce in response\n");
 | 
			
		||||
            else {
 | 
			
		||||
                BIO_printf(bio_err, "Nonce Verify error\n");
 | 
			
		||||
                ret = 1;
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        i = OCSP_basic_verify(bs, verify_other, store, verify_flags);
 | 
			
		||||
        if (i < 0)
 | 
			
		||||
            i = OCSP_basic_verify(bs, NULL, store, 0);
 | 
			
		||||
 | 
			
		||||
        if (i <= 0) {
 | 
			
		||||
            BIO_printf(bio_err, "Response Verify Failure\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            ret = 1;
 | 
			
		||||
        } else
 | 
			
		||||
            BIO_printf(bio_err, "Response verify OK\n");
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!print_ocsp_summary(out, bs, req, reqnames, ids, nsec, maxage))
 | 
			
		||||
        ret = 1;
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
 end:
 | 
			
		||||
    ERR_print_errors(bio_err);
 | 
			
		||||
    X509_free(signer);
 | 
			
		||||
    X509_STORE_free(store);
 | 
			
		||||
    if (vpm)
 | 
			
		||||
        X509_VERIFY_PARAM_free(vpm);
 | 
			
		||||
    EVP_PKEY_free(key);
 | 
			
		||||
    EVP_PKEY_free(rkey);
 | 
			
		||||
    X509_free(issuer);
 | 
			
		||||
@@ -1020,9 +982,8 @@ static int print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req,
 | 
			
		||||
 | 
			
		||||
static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req,
 | 
			
		||||
                              CA_DB *db, X509 *ca, X509 *rcert,
 | 
			
		||||
                              EVP_PKEY *rkey, const EVP_MD *rmd,
 | 
			
		||||
                              STACK_OF(X509) *rother, unsigned long flags,
 | 
			
		||||
                              int nmin, int ndays, int badsig)
 | 
			
		||||
                              EVP_PKEY *rkey, STACK_OF(X509) *rother,
 | 
			
		||||
                              unsigned long flags, int nmin, int ndays)
 | 
			
		||||
{
 | 
			
		||||
    ASN1_TIME *thisupd = NULL, *nextupd = NULL;
 | 
			
		||||
    OCSP_CERTID *cid, *ca_id = NULL;
 | 
			
		||||
@@ -1106,10 +1067,7 @@ static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req,
 | 
			
		||||
 | 
			
		||||
    OCSP_copy_nonce(bs, req);
 | 
			
		||||
 | 
			
		||||
    OCSP_basic_sign(bs, rcert, rkey, rmd, rother, flags);
 | 
			
		||||
 | 
			
		||||
    if (badsig)
 | 
			
		||||
        bs->signature->data[bs->signature->length - 1] ^= 0x1;
 | 
			
		||||
    OCSP_basic_sign(bs, rcert, rkey, NULL, rother, flags);
 | 
			
		||||
 | 
			
		||||
    *resp = OCSP_response_create(OCSP_RESPONSE_STATUS_SUCCESSFUL, bs);
 | 
			
		||||
 | 
			
		||||
@@ -1145,7 +1103,7 @@ static char **lookup_serial(CA_DB *db, ASN1_INTEGER *ser)
 | 
			
		||||
 | 
			
		||||
/* Quick and dirty OCSP server: read in and parse input request */
 | 
			
		||||
 | 
			
		||||
static BIO *init_responder(const char *port)
 | 
			
		||||
static BIO *init_responder(char *port)
 | 
			
		||||
{
 | 
			
		||||
    BIO *acbio = NULL, *bufbio = NULL;
 | 
			
		||||
    bufbio = BIO_new(BIO_f_buffer());
 | 
			
		||||
@@ -1177,7 +1135,7 @@ static BIO *init_responder(const char *port)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int do_responder(OCSP_REQUEST **preq, BIO **pcbio, BIO *acbio,
 | 
			
		||||
                        const char *port)
 | 
			
		||||
                        char *port)
 | 
			
		||||
{
 | 
			
		||||
    int have_post = 0, len;
 | 
			
		||||
    OCSP_REQUEST *req = NULL;
 | 
			
		||||
@@ -1238,8 +1196,8 @@ static int send_ocsp_response(BIO *cbio, OCSP_RESPONSE *resp)
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, const char *path,
 | 
			
		||||
                                      const STACK_OF(CONF_VALUE) *headers,
 | 
			
		||||
static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, char *path,
 | 
			
		||||
                                      STACK_OF(CONF_VALUE) *headers,
 | 
			
		||||
                                      OCSP_REQUEST *req, int req_timeout)
 | 
			
		||||
{
 | 
			
		||||
    int fd;
 | 
			
		||||
@@ -1326,9 +1284,8 @@ static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, const char *path,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req,
 | 
			
		||||
                                 const char *host, const char *path,
 | 
			
		||||
                                 const char *port, int use_ssl,
 | 
			
		||||
                                 const STACK_OF(CONF_VALUE) *headers,
 | 
			
		||||
                                 char *host, char *path, char *port,
 | 
			
		||||
                                 int use_ssl, STACK_OF(CONF_VALUE) *headers,
 | 
			
		||||
                                 int req_timeout)
 | 
			
		||||
{
 | 
			
		||||
    BIO *cbio = NULL;
 | 
			
		||||
@@ -1343,7 +1300,16 @@ OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req,
 | 
			
		||||
        BIO_set_conn_port(cbio, port);
 | 
			
		||||
    if (use_ssl == 1) {
 | 
			
		||||
        BIO *sbio;
 | 
			
		||||
# if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
        ctx = SSL_CTX_new(SSLv23_client_method());
 | 
			
		||||
# elif !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
        ctx = SSL_CTX_new(SSLv3_client_method());
 | 
			
		||||
# elif !defined(OPENSSL_NO_SSL2)
 | 
			
		||||
        ctx = SSL_CTX_new(SSLv2_client_method());
 | 
			
		||||
# else
 | 
			
		||||
        BIO_printf(err, "SSL is disabled\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
# endif
 | 
			
		||||
        if (ctx == NULL) {
 | 
			
		||||
            BIO_printf(err, "Error creating SSL context.\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@ certs		= $dir.certs]		# Where the issued certs are kept
 | 
			
		||||
crl_dir		= $dir.crl]		# Where the issued crl are kept
 | 
			
		||||
database	= $dir]index.txt	# database index file.
 | 
			
		||||
#unique_subject	= no			# Set to 'no' to allow creation of
 | 
			
		||||
					# several certs with same subject.
 | 
			
		||||
					# several ctificates with same subject.
 | 
			
		||||
new_certs_dir	= $dir.newcerts]		# default place for new certs.
 | 
			
		||||
 | 
			
		||||
certificate	= $dir]cacert.pem 	# The CA certificate
 | 
			
		||||
@@ -55,7 +55,7 @@ crl		= $dir]crl.pem 		# The current CRL
 | 
			
		||||
private_key	= $dir.private]cakey.pem# The private key
 | 
			
		||||
RANDFILE	= $dir.private].rand	# private random number file
 | 
			
		||||
 | 
			
		||||
x509_extensions	= usr_cert		# The extensions to add to the cert
 | 
			
		||||
x509_extensions	= usr_cert		# The extentions to add to the cert
 | 
			
		||||
 | 
			
		||||
# Comment out the following two lines for the "traditional"
 | 
			
		||||
# (and highly broken) format.
 | 
			
		||||
@@ -103,11 +103,11 @@ emailAddress		= optional
 | 
			
		||||
 | 
			
		||||
####################################################################
 | 
			
		||||
[ req ]
 | 
			
		||||
default_bits		= 2048
 | 
			
		||||
default_bits		= 1024
 | 
			
		||||
default_keyfile 	= privkey.pem
 | 
			
		||||
distinguished_name	= req_distinguished_name
 | 
			
		||||
attributes		= req_attributes
 | 
			
		||||
x509_extensions	= v3_ca	# The extensions to add to the self signed cert
 | 
			
		||||
x509_extensions	= v3_ca	# The extentions to add to the self signed cert
 | 
			
		||||
 | 
			
		||||
# Passwords for private keys if not present they will be prompted for
 | 
			
		||||
# input_password = secret
 | 
			
		||||
 
 | 
			
		||||
@@ -117,7 +117,6 @@
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/crypto.h>
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
#include <openssl/lhash.h>
 | 
			
		||||
#include <openssl/conf.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
@@ -131,9 +130,6 @@
 | 
			
		||||
#include "progs.h"
 | 
			
		||||
#include "s_apps.h"
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#ifdef OPENSSL_FIPS
 | 
			
		||||
# include <openssl/fips.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The LHASH callbacks ("hash" & "cmp") have been replaced by functions with
 | 
			
		||||
@@ -308,19 +304,6 @@ int main(int Argc, char *ARGV[])
 | 
			
		||||
        CRYPTO_set_locking_callback(lock_dbg_cb);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (getenv("OPENSSL_FIPS")) {
 | 
			
		||||
#ifdef OPENSSL_FIPS
 | 
			
		||||
        if (!FIPS_mode_set(1)) {
 | 
			
		||||
            ERR_load_crypto_strings();
 | 
			
		||||
            ERR_print_errors(BIO_new_fp(stderr, BIO_NOCLOSE));
 | 
			
		||||
            EXIT(1);
 | 
			
		||||
        }
 | 
			
		||||
#else
 | 
			
		||||
        fprintf(stderr, "FIPS mode not supported.\n");
 | 
			
		||||
        EXIT(1);
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
    /* Lets load up our environment a little */
 | 
			
		||||
@@ -428,6 +411,9 @@ int main(int Argc, char *ARGV[])
 | 
			
		||||
    if (arg.data != NULL)
 | 
			
		||||
        OPENSSL_free(arg.data);
 | 
			
		||||
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
 | 
			
		||||
    CRYPTO_mem_leaks(bio_err);
 | 
			
		||||
    if (bio_err != NULL) {
 | 
			
		||||
        BIO_free(bio_err);
 | 
			
		||||
        bio_err = NULL;
 | 
			
		||||
@@ -438,9 +424,6 @@ int main(int Argc, char *ARGV[])
 | 
			
		||||
        OPENSSL_free(Argv);
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    CRYPTO_mem_leaks(bio_err);
 | 
			
		||||
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -663,14 +646,14 @@ static void list_md(BIO *out)
 | 
			
		||||
    EVP_MD_do_all_sorted(list_md_fn, out);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int function_cmp(const FUNCTION * a, const FUNCTION * b)
 | 
			
		||||
static int MS_CALLBACK function_cmp(const FUNCTION * a, const FUNCTION * b)
 | 
			
		||||
{
 | 
			
		||||
    return strncmp(a->name, b->name, 8);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static IMPLEMENT_LHASH_COMP_FN(function, FUNCTION)
 | 
			
		||||
 | 
			
		||||
static unsigned long function_hash(const FUNCTION * a)
 | 
			
		||||
static unsigned long MS_CALLBACK function_hash(const FUNCTION * a)
 | 
			
		||||
{
 | 
			
		||||
    return lh_strhash(a->name);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@ certs		= $dir/certs		# Where the issued certs are kept
 | 
			
		||||
crl_dir		= $dir/crl		# Where the issued crl are kept
 | 
			
		||||
database	= $dir/index.txt	# database index file.
 | 
			
		||||
#unique_subject	= no			# Set to 'no' to allow creation of
 | 
			
		||||
					# several certs with same subject.
 | 
			
		||||
					# several ctificates with same subject.
 | 
			
		||||
new_certs_dir	= $dir/newcerts		# default place for new certs.
 | 
			
		||||
 | 
			
		||||
certificate	= $dir/cacert.pem 	# The CA certificate
 | 
			
		||||
@@ -55,7 +55,7 @@ crl		= $dir/crl.pem 		# The current CRL
 | 
			
		||||
private_key	= $dir/private/cakey.pem# The private key
 | 
			
		||||
RANDFILE	= $dir/private/.rand	# private random number file
 | 
			
		||||
 | 
			
		||||
x509_extensions	= usr_cert		# The extensions to add to the cert
 | 
			
		||||
x509_extensions	= usr_cert		# The extentions to add to the cert
 | 
			
		||||
 | 
			
		||||
# Comment out the following two lines for the "traditional"
 | 
			
		||||
# (and highly broken) format.
 | 
			
		||||
@@ -103,11 +103,11 @@ emailAddress		= optional
 | 
			
		||||
 | 
			
		||||
####################################################################
 | 
			
		||||
[ req ]
 | 
			
		||||
default_bits		= 2048
 | 
			
		||||
default_bits		= 1024
 | 
			
		||||
default_keyfile 	= privkey.pem
 | 
			
		||||
distinguished_name	= req_distinguished_name
 | 
			
		||||
attributes		= req_attributes
 | 
			
		||||
x509_extensions	= v3_ca	# The extensions to add to the self signed cert
 | 
			
		||||
x509_extensions	= v3_ca	# The extentions to add to the self signed cert
 | 
			
		||||
 | 
			
		||||
# Passwords for private keys if not present they will be prompted for
 | 
			
		||||
# input_password = secret
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										43
									
								
								apps/pkcs8.c
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								apps/pkcs8.c
									
									
									
									
									
								
							@@ -57,7 +57,6 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
@@ -125,16 +124,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                }
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-v2prf")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                pbe_nid = OBJ_txt2nid(*args);
 | 
			
		||||
                if (!EVP_PBE_find(EVP_PBE_TYPE_PRF, pbe_nid, NULL, NULL, 0)) {
 | 
			
		||||
                    BIO_printf(bio_err, "Unknown PRF algorithm %s\n", *args);
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
                }
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-inform")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
@@ -151,14 +140,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            topk8 = 1;
 | 
			
		||||
        else if (!strcmp(*args, "-noiter"))
 | 
			
		||||
            iter = 1;
 | 
			
		||||
        else if (!strcmp(*args, "-iter")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                iter = atoi(*(++args));
 | 
			
		||||
                if (iter <= 0)
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-nocrypt"))
 | 
			
		||||
        else if (!strcmp(*args, "-nocrypt"))
 | 
			
		||||
            nocrypt = 1;
 | 
			
		||||
        else if (!strcmp(*args, "-nooct"))
 | 
			
		||||
            p8_broken = PKCS8_NO_OCTET;
 | 
			
		||||
@@ -167,22 +149,19 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        else if (!strcmp(*args, "-embed"))
 | 
			
		||||
            p8_broken = PKCS8_EMBEDDED_PARAM;
 | 
			
		||||
        else if (!strcmp(*args, "-passin")) {
 | 
			
		||||
            if (args[1])
 | 
			
		||||
                passargin = *(++args);
 | 
			
		||||
            else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargin = *(++args);
 | 
			
		||||
        } else if (!strcmp(*args, "-passout")) {
 | 
			
		||||
            if (args[1])
 | 
			
		||||
                passargout = *(++args);
 | 
			
		||||
            else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargout = *(++args);
 | 
			
		||||
        }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*args, "-engine") == 0) {
 | 
			
		||||
            if (args[1])
 | 
			
		||||
                engine = *(++args);
 | 
			
		||||
            else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++args);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
        else if (!strcmp(*args, "-in")) {
 | 
			
		||||
@@ -203,6 +182,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (badarg) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "Usage pkcs8 [options]\n");
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
@@ -220,7 +200,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                   "-embed          use (nonstandard) embedded DSA parameters format\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-nsdb           use (nonstandard) DSA Netscape DB format\n");
 | 
			
		||||
        BIO_printf(bio_err, "-iter count     use count as iteration count\n");
 | 
			
		||||
        BIO_printf(bio_err, "-noiter         use 1 as iteration count\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-nocrypt        use or expect unencrypted private key\n");
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +1,18 @@
 | 
			
		||||
-----BEGIN PRIVATE KEY-----
 | 
			
		||||
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMo7DFNMqywUA1O/
 | 
			
		||||
qvWqCOm6rGrUAcR+dKsSXw6y2qiKO7APDDyotc0b4Mxwqjga98npex2RBIwUoCGJ
 | 
			
		||||
iEmMXo/a8RbXVUZ+ZwcAX7PC+XeXVC5qoajaBBkd2MvYmib/2PqnNrgvhHsUL5dO
 | 
			
		||||
xhC7cRqxLM/g45k3Yyw+nGa+WkTdAgMBAAECgYBMBT5w4dVG0I8foGFnz+9hzWab
 | 
			
		||||
Ee9IKjE5TcKmB93ilXQyjrWO5+zPmbc7ou6aAKk9IaPCTY1kCyzW7pho7Xdt+RFq
 | 
			
		||||
TgVXGZZfqtixO7f2/5oqZAkd00eOn9ZrhBpVMu4yXbbDvhDyFe4/oy0HGDjRUhxa
 | 
			
		||||
Lf6ZlBuTherxm4eFkQJBAPBQwRs9UtqaMAQlagA9pV5UsQjV1WT4IxDURMPfXgCd
 | 
			
		||||
ETNkB6pP0SmxQm5xhv9N2HY1UtoWpug9s0OU5IJB15sCQQDXbfbjiujNbuOxCFNw
 | 
			
		||||
68JZaCFVdNovyOWORkpenQLNEjVkmTCS9OayK09ADEYtsdpUGKeF+2EYBNkFr5px
 | 
			
		||||
CajnAkBMYI4PNz1HBuwt1SpMa0tMoMQnV7bbwVV7usskKbC5pzHZUHhzM6z5gEHp
 | 
			
		||||
0iEisT4Ty7zKXZqsgzefSgoaMAzzAkEAoCIaUhtwXzwdPfvNYnOs3J6doJMimECB
 | 
			
		||||
+lbfcyLM8TimvadtRt+KGEg/OYGmLNM2UiqdY+duzdbUpvhYGcwvYwJAQvaoi9z2
 | 
			
		||||
CkiwSs/PFrLaNlfLJmXRsUBzmiWYoh6+IQJJorEXz7ewI72ee9RBO4s746cgUFwH
 | 
			
		||||
Ri+qO+HhZFUBqQ==
 | 
			
		||||
-----END PRIVATE KEY-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
Proc-Type: 4,ENCRYPTED
 | 
			
		||||
DEK-Info: DES-EDE3-CBC,BA26229A1653B7FF
 | 
			
		||||
 | 
			
		||||
6nhWG8PKhTPO/s3ZvjUa6226NlKdvPDZFsNXOOoSUs9ejxpb/aj5huhs6qRYzsz9
 | 
			
		||||
Year47uaAZYhGD0vAagnNiBnYmjWEpN9G/wQxG7pgZThK1ZxDi63qn8aQ8UjuGHo
 | 
			
		||||
F6RpnnBQIAnWTWqr/Qsybtc5EoNkrj/Cpx0OfbSr6gZsFBCxwX1R1hT3/mhJ45f3
 | 
			
		||||
XMofY32Vdfx9/vtw1O7HmlHXQnXaqnbd9/nn1EpvFJG9+UjPoW7gV4jCOLuR4deE
 | 
			
		||||
jS8hm+cpkwXmFtk3VGjT9tQXPpMv3JpYfBqgGQoMAJ5Toq0DWcHi6Wg08PsD8lgy
 | 
			
		||||
vmTioPsRg+JGkJkJ8GnusgLpQdlQJbjzd7wGE6ElUFLfOxLo8bLlRHoriHNdWYhh
 | 
			
		||||
JjY0LyeTkovcmWxVjImc6ZyBz5Ly4t0BYf1gq3OkjsV91Q1taBxnhiavfizqMCAf
 | 
			
		||||
PPB3sLQnlXG77TOXkNxpqbZfEYrVZW2Nsqqdn8s07Uj4IMONZyq2odYKWFPMJBiM
 | 
			
		||||
POYwXjMAOcmFMTHYsVlhcUJuV6LOuipw/FEbTtPH/MYMxLe4zx65dYo1rb4iLKLS
 | 
			
		||||
gMtB0o/Wl4Xno3ZXh1ucicYnV2J7NpVcjVq+3SFiCRu2SrSkZHZ23EPS13Ec6fcz
 | 
			
		||||
8X/YGA2vTJ8MAOozAzQUwHQYvLk7bIoQVekqDq4p0AZQbhdspHpArCk0Ifqqzg/v
 | 
			
		||||
Uyky/zZiQYanzDenTSRVI/8wac3olxpU8QvbySxYqmbkgq6bTpXJfYFQfnAttEsC
 | 
			
		||||
dA4S5UFgyOPZluxCAM4yaJF3Ft6neutNwftuJQMbgCUi9vYg2tGdSw==
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								apps/progs.h
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								apps/progs.h
									
									
									
									
									
								
							@@ -46,7 +46,6 @@ extern int engine_main(int argc, char *argv[]);
 | 
			
		||||
extern int ocsp_main(int argc, char *argv[]);
 | 
			
		||||
extern int prime_main(int argc, char *argv[]);
 | 
			
		||||
extern int ts_main(int argc, char *argv[]);
 | 
			
		||||
extern int srp_main(int argc, char *argv[]);
 | 
			
		||||
 | 
			
		||||
#define FUNC_TYPE_GENERAL       1
 | 
			
		||||
#define FUNC_TYPE_MD            2
 | 
			
		||||
@@ -148,9 +147,6 @@ FUNCTION functions[] = {
 | 
			
		||||
#endif
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "prime", prime_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "ts", ts_main},
 | 
			
		||||
#ifndef OPENSSL_NO_SRP
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "srp", srp_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_MD2
 | 
			
		||||
    {FUNC_TYPE_MD, "md2", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
@@ -172,18 +168,6 @@ FUNCTION functions[] = {
 | 
			
		||||
#ifndef OPENSSL_NO_RMD160
 | 
			
		||||
    {FUNC_TYPE_MD, "rmd160", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SHA224
 | 
			
		||||
    {FUNC_TYPE_MD, "sha224", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SHA256
 | 
			
		||||
    {FUNC_TYPE_MD, "sha256", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SHA384
 | 
			
		||||
    {FUNC_TYPE_MD, "sha384", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SHA512
 | 
			
		||||
    {FUNC_TYPE_MD, "sha512", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "aes-128-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -51,13 +51,11 @@ foreach (@ARGV)
 | 
			
		||||
		{ print "#ifndef OPENSSL_NO_CMS\n${str}#endif\n"; }
 | 
			
		||||
	elsif ( ($_ =~ /^ocsp$/))
 | 
			
		||||
		{ print "#ifndef OPENSSL_NO_OCSP\n${str}#endif\n"; }
 | 
			
		||||
	elsif ( ($_ =~ /^srp$/))
 | 
			
		||||
		{ print "#ifndef OPENSSL_NO_SRP\n${str}#endif\n"; }
 | 
			
		||||
	else
 | 
			
		||||
		{ print $str; }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
foreach ("md2","md4","md5","sha","sha1","mdc2","rmd160","sha224","sha256","sha384","sha512")
 | 
			
		||||
foreach ("md2","md4","md5","sha","sha1","mdc2","rmd160")
 | 
			
		||||
	{
 | 
			
		||||
	push(@files,$_);
 | 
			
		||||
	printf "#ifndef OPENSSL_NO_".uc($_)."\n\t{FUNC_TYPE_MD,\"".$_."\",dgst_main},\n#endif\n";
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										105
									
								
								apps/req.c
									
									
									
									
									
								
							
							
						
						
									
										105
									
								
								apps/req.c
									
									
									
									
									
								
							@@ -56,10 +56,21 @@
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code
 | 
			
		||||
 */
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
# undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#ifdef OPENSSL_NO_STDIO
 | 
			
		||||
# define APPS_WIN16
 | 
			
		||||
#endif
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
@@ -158,7 +169,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    EVP_PKEY_CTX *genctx = NULL;
 | 
			
		||||
    const char *keyalg = NULL;
 | 
			
		||||
    char *keyalgstr = NULL;
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *pkeyopts = NULL, *sigopts = NULL;
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *pkeyopts = NULL;
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
    int i = 0, badops = 0, newreq = 0, verbose = 0, pkey_type = -1;
 | 
			
		||||
    long newkey = -1;
 | 
			
		||||
@@ -284,13 +295,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                pkeyopts = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
            if (!pkeyopts || !sk_OPENSSL_STRING_push(pkeyopts, *(++argv)))
 | 
			
		||||
                goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-sigopt") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!sigopts)
 | 
			
		||||
                sigopts = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
            if (!sigopts || !sk_OPENSSL_STRING_push(sigopts, *(++argv)))
 | 
			
		||||
                goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-batch") == 0)
 | 
			
		||||
            batch = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-newhdr") == 0)
 | 
			
		||||
@@ -814,8 +818,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            i = do_X509_sign(bio_err, x509ss, pkey, digest, sigopts);
 | 
			
		||||
            if (!i) {
 | 
			
		||||
            if (!(i = X509_sign(x509ss, pkey, digest))) {
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
@@ -835,8 +838,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                           req_exts);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
            i = do_X509_REQ_sign(bio_err, req, pkey, digest, sigopts);
 | 
			
		||||
            if (!i) {
 | 
			
		||||
            if (!(i = X509_REQ_sign(req, pkey, digest))) {
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
@@ -844,7 +846,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (subj && x509) {
 | 
			
		||||
        BIO_printf(bio_err, "Cannot modify certificate subject\n");
 | 
			
		||||
        BIO_printf(bio_err, "Cannot modifiy certificate subject\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -1017,8 +1019,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        EVP_PKEY_CTX_free(genctx);
 | 
			
		||||
    if (pkeyopts)
 | 
			
		||||
        sk_OPENSSL_STRING_free(pkeyopts);
 | 
			
		||||
    if (sigopts)
 | 
			
		||||
        sk_OPENSSL_STRING_free(sigopts);
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    if (gen_eng)
 | 
			
		||||
        ENGINE_free(gen_eng);
 | 
			
		||||
@@ -1079,13 +1079,15 @@ static int make_REQ(X509_REQ *req, EVP_PKEY *pkey, char *subj, int multirdn,
 | 
			
		||||
    if (!X509_REQ_set_version(req, 0L))
 | 
			
		||||
        goto err;               /* version 1 */
 | 
			
		||||
 | 
			
		||||
    if (subj)
 | 
			
		||||
        i = build_subject(req, subj, chtype, multirdn);
 | 
			
		||||
    else if (no_prompt)
 | 
			
		||||
    if (no_prompt)
 | 
			
		||||
        i = auto_info(req, dn_sk, attr_sk, attribs, chtype);
 | 
			
		||||
    else
 | 
			
		||||
        i = prompt_info(req, dn_sk, dn_sect, attr_sk, attr_sect, attribs,
 | 
			
		||||
                        chtype);
 | 
			
		||||
    else {
 | 
			
		||||
        if (subj)
 | 
			
		||||
            i = build_subject(req, subj, chtype, multirdn);
 | 
			
		||||
        else
 | 
			
		||||
            i = prompt_info(req, dn_sk, dn_sect, attr_sk, attr_sect, attribs,
 | 
			
		||||
                            chtype);
 | 
			
		||||
    }
 | 
			
		||||
    if (!i)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
@@ -1654,63 +1656,8 @@ static int genpkey_cb(EVP_PKEY_CTX *ctx)
 | 
			
		||||
        c = '\n';
 | 
			
		||||
    BIO_write(b, &c, 1);
 | 
			
		||||
    (void)BIO_flush(b);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
    p = n;
 | 
			
		||||
#endif
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int do_sign_init(BIO *err, EVP_MD_CTX *ctx, EVP_PKEY *pkey,
 | 
			
		||||
                        const EVP_MD *md, STACK_OF(OPENSSL_STRING) *sigopts)
 | 
			
		||||
{
 | 
			
		||||
    EVP_PKEY_CTX *pkctx = NULL;
 | 
			
		||||
    int i;
 | 
			
		||||
    EVP_MD_CTX_init(ctx);
 | 
			
		||||
    if (!EVP_DigestSignInit(ctx, &pkctx, md, NULL, pkey))
 | 
			
		||||
        return 0;
 | 
			
		||||
    for (i = 0; i < sk_OPENSSL_STRING_num(sigopts); i++) {
 | 
			
		||||
        char *sigopt = sk_OPENSSL_STRING_value(sigopts, i);
 | 
			
		||||
        if (pkey_ctrl_string(pkctx, sigopt) <= 0) {
 | 
			
		||||
            BIO_printf(err, "parameter error \"%s\"\n", sigopt);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int do_X509_sign(BIO *err, X509 *x, EVP_PKEY *pkey, const EVP_MD *md,
 | 
			
		||||
                 STACK_OF(OPENSSL_STRING) *sigopts)
 | 
			
		||||
{
 | 
			
		||||
    int rv;
 | 
			
		||||
    EVP_MD_CTX mctx;
 | 
			
		||||
    EVP_MD_CTX_init(&mctx);
 | 
			
		||||
    rv = do_sign_init(err, &mctx, pkey, md, sigopts);
 | 
			
		||||
    if (rv > 0)
 | 
			
		||||
        rv = X509_sign_ctx(x, &mctx);
 | 
			
		||||
    EVP_MD_CTX_cleanup(&mctx);
 | 
			
		||||
    return rv > 0 ? 1 : 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int do_X509_REQ_sign(BIO *err, X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md,
 | 
			
		||||
                     STACK_OF(OPENSSL_STRING) *sigopts)
 | 
			
		||||
{
 | 
			
		||||
    int rv;
 | 
			
		||||
    EVP_MD_CTX mctx;
 | 
			
		||||
    EVP_MD_CTX_init(&mctx);
 | 
			
		||||
    rv = do_sign_init(err, &mctx, pkey, md, sigopts);
 | 
			
		||||
    if (rv > 0)
 | 
			
		||||
        rv = X509_REQ_sign_ctx(x, &mctx);
 | 
			
		||||
    EVP_MD_CTX_cleanup(&mctx);
 | 
			
		||||
    return rv > 0 ? 1 : 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int do_X509_CRL_sign(BIO *err, X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md,
 | 
			
		||||
                     STACK_OF(OPENSSL_STRING) *sigopts)
 | 
			
		||||
{
 | 
			
		||||
    int rv;
 | 
			
		||||
    EVP_MD_CTX mctx;
 | 
			
		||||
    EVP_MD_CTX_init(&mctx);
 | 
			
		||||
    rv = do_sign_init(err, &mctx, pkey, md, sigopts);
 | 
			
		||||
    if (rv > 0)
 | 
			
		||||
        rv = X509_CRL_sign_ctx(x, &mctx);
 | 
			
		||||
    EVP_MD_CTX_cleanup(&mctx);
 | 
			
		||||
    return rv > 0 ? 1 : 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -152,70 +152,33 @@ typedef fd_mask fd_set;
 | 
			
		||||
#define PROTOCOL        "tcp"
 | 
			
		||||
 | 
			
		||||
int do_server(int port, int type, int *ret,
 | 
			
		||||
              int (*cb) (char *hostname, int s, int stype,
 | 
			
		||||
                         unsigned char *context), unsigned char *context,
 | 
			
		||||
              int naccept);
 | 
			
		||||
#ifndef NO_SYS_UN_H
 | 
			
		||||
int do_server_unix(const char *path, int *ret,
 | 
			
		||||
                   int (*cb) (char *hostname, int s, int stype,
 | 
			
		||||
                              unsigned char *context), unsigned char *context,
 | 
			
		||||
                   int naccept);
 | 
			
		||||
#endif
 | 
			
		||||
              int (*cb) (char *hostname, int s, unsigned char *context),
 | 
			
		||||
              unsigned char *context);
 | 
			
		||||
#ifdef HEADER_X509_H
 | 
			
		||||
int verify_callback(int ok, X509_STORE_CTX *ctx);
 | 
			
		||||
int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HEADER_SSL_H
 | 
			
		||||
int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file);
 | 
			
		||||
int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key,
 | 
			
		||||
                       STACK_OF(X509) *chain, int build_chain);
 | 
			
		||||
int ssl_print_sigalgs(BIO *out, SSL *s);
 | 
			
		||||
int ssl_print_point_formats(BIO *out, SSL *s);
 | 
			
		||||
int ssl_print_curves(BIO *out, SSL *s, int noshared);
 | 
			
		||||
#endif
 | 
			
		||||
int ssl_print_tmp_key(BIO *out, SSL *s);
 | 
			
		||||
int init_client(int *sock, const char *server, int port, int type);
 | 
			
		||||
#ifndef NO_SYS_UN_H
 | 
			
		||||
int init_client_unix(int *sock, const char *server);
 | 
			
		||||
int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key);
 | 
			
		||||
#endif
 | 
			
		||||
int init_client(int *sock, char *server, int port, int type);
 | 
			
		||||
int should_retry(int i);
 | 
			
		||||
int extract_port(const char *str, short *port_ptr);
 | 
			
		||||
int extract_port(char *str, short *port_ptr);
 | 
			
		||||
int extract_host_port(char *str, char **host_ptr, unsigned char *ip,
 | 
			
		||||
                      short *p);
 | 
			
		||||
 | 
			
		||||
long bio_dump_callback(BIO *bio, int cmd, const char *argp,
 | 
			
		||||
                       int argi, long argl, long ret);
 | 
			
		||||
long MS_CALLBACK bio_dump_callback(BIO *bio, int cmd, const char *argp,
 | 
			
		||||
                                   int argi, long argl, long ret);
 | 
			
		||||
 | 
			
		||||
#ifdef HEADER_SSL_H
 | 
			
		||||
void apps_ssl_info_callback(const SSL *s, int where, int ret);
 | 
			
		||||
void msg_cb(int write_p, int version, int content_type, const void *buf,
 | 
			
		||||
            size_t len, SSL *ssl, void *arg);
 | 
			
		||||
void tlsext_cb(SSL *s, int client_server, int type, unsigned char *data,
 | 
			
		||||
               int len, void *arg);
 | 
			
		||||
void MS_CALLBACK apps_ssl_info_callback(const SSL *s, int where, int ret);
 | 
			
		||||
void MS_CALLBACK msg_cb(int write_p, int version, int content_type,
 | 
			
		||||
                        const void *buf, size_t len, SSL *ssl, void *arg);
 | 
			
		||||
void MS_CALLBACK tlsext_cb(SSL *s, int client_server, int type,
 | 
			
		||||
                           unsigned char *data, int len, void *arg);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int generate_cookie_callback(SSL *ssl, unsigned char *cookie,
 | 
			
		||||
                             unsigned int *cookie_len);
 | 
			
		||||
int verify_cookie_callback(SSL *ssl, unsigned char *cookie,
 | 
			
		||||
                           unsigned int cookie_len);
 | 
			
		||||
 | 
			
		||||
typedef struct ssl_excert_st SSL_EXCERT;
 | 
			
		||||
 | 
			
		||||
void ssl_ctx_set_excert(SSL_CTX *ctx, SSL_EXCERT *exc);
 | 
			
		||||
void ssl_excert_free(SSL_EXCERT *exc);
 | 
			
		||||
int args_excert(char ***pargs, int *pargc,
 | 
			
		||||
                int *badarg, BIO *err, SSL_EXCERT **pexc);
 | 
			
		||||
int load_excert(SSL_EXCERT **pexc, BIO *err);
 | 
			
		||||
void print_ssl_summary(BIO *bio, SSL *s);
 | 
			
		||||
#ifdef HEADER_SSL_H
 | 
			
		||||
int args_ssl(char ***pargs, int *pargc, SSL_CONF_CTX *cctx,
 | 
			
		||||
             int *badarg, BIO *err, STACK_OF(OPENSSL_STRING) **pstr);
 | 
			
		||||
int args_ssl_call(SSL_CTX *ctx, BIO *err, SSL_CONF_CTX *cctx,
 | 
			
		||||
                  STACK_OF(OPENSSL_STRING) *str, int no_ecdhe, int no_jpake);
 | 
			
		||||
int ssl_ctx_add_crls(SSL_CTX *ctx, STACK_OF(X509_CRL) *crls,
 | 
			
		||||
                     int crl_download);
 | 
			
		||||
int ssl_load_stores(SSL_CTX *ctx, const char *vfyCApath,
 | 
			
		||||
                    const char *vfyCAfile, const char *chCApath,
 | 
			
		||||
                    const char *chCAfile, STACK_OF(X509_CRL) *crls,
 | 
			
		||||
                    int crl_download);
 | 
			
		||||
void ssl_ctx_security_debug(SSL_CTX *ctx, BIO *out, int verbose);
 | 
			
		||||
#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);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1164
									
								
								apps/s_cb.c
									
									
									
									
									
								
							
							
						
						
									
										1164
									
								
								apps/s_cb.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										849
									
								
								apps/s_client.c
									
									
									
									
									
								
							
							
						
						
									
										849
									
								
								apps/s_client.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1295
									
								
								apps/s_server.c
									
									
									
									
									
								
							
							
						
						
									
										1295
									
								
								apps/s_server.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										240
									
								
								apps/s_socket.c
									
									
									
									
									
								
							
							
						
						
									
										240
									
								
								apps/s_socket.c
									
									
									
									
									
								
							@@ -64,6 +64,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
 | 
			
		||||
@@ -95,20 +101,21 @@ typedef unsigned int u_int;
 | 
			
		||||
#  include "netdb.h"
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
static struct hostent *GetHostByName(const char *name);
 | 
			
		||||
static struct hostent *GetHostByName(char *name);
 | 
			
		||||
# if defined(OPENSSL_SYS_WINDOWS) || (defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK))
 | 
			
		||||
static void ssl_sock_cleanup(void);
 | 
			
		||||
# endif
 | 
			
		||||
static int ssl_sock_init(void);
 | 
			
		||||
static int init_client_ip(int *sock, const unsigned char ip[4], int port,
 | 
			
		||||
                          int type);
 | 
			
		||||
static int init_client_ip(int *sock, unsigned char ip[4], int port, int type);
 | 
			
		||||
static int init_server(int *sock, int port, int type);
 | 
			
		||||
static int init_server_long(int *sock, int port, char *ip, int type);
 | 
			
		||||
static int do_accept(int acc_sock, int *sock, char **host);
 | 
			
		||||
static int host_ip(const char *str, unsigned char ip[4]);
 | 
			
		||||
# ifndef NO_SYS_UN_H
 | 
			
		||||
static int init_server_unix(int *sock, const char *path);
 | 
			
		||||
static int do_accept_unix(int acc_sock, int *sock);
 | 
			
		||||
static int host_ip(char *str, unsigned char ip[4]);
 | 
			
		||||
 | 
			
		||||
# ifdef OPENSSL_SYS_WIN16
 | 
			
		||||
#  define SOCKET_PROTOCOL 0     /* more microsoft stupidity */
 | 
			
		||||
# else
 | 
			
		||||
#  define SOCKET_PROTOCOL IPPROTO_TCP
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# if defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK)
 | 
			
		||||
@@ -119,6 +126,34 @@ static int wsa_init_done = 0;
 | 
			
		||||
static struct WSAData wsa_state;
 | 
			
		||||
static int wsa_init_done = 0;
 | 
			
		||||
 | 
			
		||||
#  ifdef OPENSSL_SYS_WIN16
 | 
			
		||||
static HWND topWnd = 0;
 | 
			
		||||
static FARPROC lpTopWndProc = NULL;
 | 
			
		||||
static FARPROC lpTopHookProc = NULL;
 | 
			
		||||
extern HINSTANCE _hInstance;    /* nice global CRT provides */
 | 
			
		||||
 | 
			
		||||
static LONG FAR PASCAL topHookProc(HWND hwnd, UINT message, WPARAM wParam,
 | 
			
		||||
                                   LPARAM lParam)
 | 
			
		||||
{
 | 
			
		||||
    if (hwnd == topWnd) {
 | 
			
		||||
        switch (message) {
 | 
			
		||||
        case WM_DESTROY:
 | 
			
		||||
        case WM_CLOSE:
 | 
			
		||||
            SetWindowLong(topWnd, GWL_WNDPROC, (LONG) lpTopWndProc);
 | 
			
		||||
            ssl_sock_cleanup();
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return CallWindowProc(lpTopWndProc, hwnd, message, wParam, lParam);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static BOOL CALLBACK enumproc(HWND hwnd, LPARAM lParam)
 | 
			
		||||
{
 | 
			
		||||
    topWnd = hwnd;
 | 
			
		||||
    return (FALSE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#  endif                        /* OPENSSL_SYS_WIN32 */
 | 
			
		||||
# endif                         /* OPENSSL_SYS_WINDOWS */
 | 
			
		||||
 | 
			
		||||
# ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
@@ -164,6 +199,13 @@ static int ssl_sock_init(void)
 | 
			
		||||
                       err);
 | 
			
		||||
            return (0);
 | 
			
		||||
        }
 | 
			
		||||
#  ifdef OPENSSL_SYS_WIN16
 | 
			
		||||
        EnumTaskWindows(GetCurrentTask(), enumproc, 0L);
 | 
			
		||||
        lpTopWndProc = (FARPROC) GetWindowLong(topWnd, GWL_WNDPROC);
 | 
			
		||||
        lpTopHookProc = MakeProcInstance((FARPROC) topHookProc, _hInstance);
 | 
			
		||||
 | 
			
		||||
        SetWindowLong(topWnd, GWL_WNDPROC, (LONG) lpTopHookProc);
 | 
			
		||||
#  endif                        /* OPENSSL_SYS_WIN16 */
 | 
			
		||||
    }
 | 
			
		||||
# elif defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK)
 | 
			
		||||
    WORD wVerReq;
 | 
			
		||||
@@ -189,18 +231,17 @@ static int ssl_sock_init(void)
 | 
			
		||||
    return (1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int init_client(int *sock, const char *host, int port, int type)
 | 
			
		||||
int init_client(int *sock, char *host, int port, int type)
 | 
			
		||||
{
 | 
			
		||||
    unsigned char ip[4];
 | 
			
		||||
 | 
			
		||||
    ip[0] = ip[1] = ip[2] = ip[3] = 0;
 | 
			
		||||
    if (!host_ip(host, &(ip[0])))
 | 
			
		||||
        return 0;
 | 
			
		||||
    return init_client_ip(sock, ip, port, type);
 | 
			
		||||
    if (!host_ip(host, &(ip[0]))) {
 | 
			
		||||
        return (0);
 | 
			
		||||
    }
 | 
			
		||||
    return (init_client_ip(sock, ip, port, type));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int init_client_ip(int *sock, const unsigned char ip[4], int port,
 | 
			
		||||
                          int type)
 | 
			
		||||
static int init_client_ip(int *sock, unsigned char ip[4], int port, int type)
 | 
			
		||||
{
 | 
			
		||||
    unsigned long addr;
 | 
			
		||||
    struct sockaddr_in them;
 | 
			
		||||
@@ -219,7 +260,7 @@ static int init_client_ip(int *sock, const unsigned char ip[4], int port,
 | 
			
		||||
    them.sin_addr.s_addr = htonl(addr);
 | 
			
		||||
 | 
			
		||||
    if (type == SOCK_STREAM)
 | 
			
		||||
        s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 | 
			
		||||
        s = socket(AF_INET, SOCK_STREAM, SOCKET_PROTOCOL);
 | 
			
		||||
    else                        /* ( type == SOCK_DGRAM) */
 | 
			
		||||
        s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
 | 
			
		||||
 | 
			
		||||
@@ -227,7 +268,7 @@ static int init_client_ip(int *sock, const unsigned char ip[4], int port,
 | 
			
		||||
        perror("socket");
 | 
			
		||||
        return (0);
 | 
			
		||||
    }
 | 
			
		||||
# if defined(SO_KEEPALIVE)
 | 
			
		||||
# if defined(SO_KEEPALIVE) && !defined(OPENSSL_SYS_MPE)
 | 
			
		||||
    if (type == SOCK_STREAM) {
 | 
			
		||||
        i = 0;
 | 
			
		||||
        i = setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (char *)&i, sizeof(i));
 | 
			
		||||
@@ -248,41 +289,9 @@ static int init_client_ip(int *sock, const unsigned char ip[4], int port,
 | 
			
		||||
    return (1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# ifndef NO_SYS_UN_H
 | 
			
		||||
int init_client_unix(int *sock, const char *server)
 | 
			
		||||
{
 | 
			
		||||
    struct sockaddr_un them;
 | 
			
		||||
    int s;
 | 
			
		||||
 | 
			
		||||
    if (strlen(server) > (UNIX_PATH_MAX + 1))
 | 
			
		||||
        return (0);
 | 
			
		||||
    if (!ssl_sock_init())
 | 
			
		||||
        return (0);
 | 
			
		||||
 | 
			
		||||
    s = socket(AF_UNIX, SOCK_STREAM, 0);
 | 
			
		||||
    if (s == INVALID_SOCKET) {
 | 
			
		||||
        perror("socket");
 | 
			
		||||
        return (0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    memset((char *)&them, 0, sizeof(them));
 | 
			
		||||
    them.sun_family = AF_UNIX;
 | 
			
		||||
    strcpy(them.sun_path, server);
 | 
			
		||||
 | 
			
		||||
    if (connect(s, (struct sockaddr *)&them, sizeof(them)) == -1) {
 | 
			
		||||
        closesocket(s);
 | 
			
		||||
        perror("connect");
 | 
			
		||||
        return (0);
 | 
			
		||||
    }
 | 
			
		||||
    *sock = s;
 | 
			
		||||
    return (1);
 | 
			
		||||
}
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
int do_server(int port, int type, int *ret,
 | 
			
		||||
              int (*cb) (char *hostname, int s, int stype,
 | 
			
		||||
                         unsigned char *context), unsigned char *context,
 | 
			
		||||
              int naccept)
 | 
			
		||||
              int (*cb) (char *hostname, int s, unsigned char *context),
 | 
			
		||||
              unsigned char *context)
 | 
			
		||||
{
 | 
			
		||||
    int sock;
 | 
			
		||||
    char *name = NULL;
 | 
			
		||||
@@ -298,67 +307,24 @@ int do_server(int port, int type, int *ret,
 | 
			
		||||
    }
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (type == SOCK_STREAM) {
 | 
			
		||||
# ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
 | 
			
		||||
            if (do_accept(accept_socket, &sock, NULL) == 0)
 | 
			
		||||
# else
 | 
			
		||||
            if (do_accept(accept_socket, &sock, &name) == 0)
 | 
			
		||||
# endif
 | 
			
		||||
            {
 | 
			
		||||
            if (do_accept(accept_socket, &sock, &name) == 0) {
 | 
			
		||||
                SHUTDOWN(accept_socket);
 | 
			
		||||
                return (0);
 | 
			
		||||
            }
 | 
			
		||||
        } else
 | 
			
		||||
            sock = accept_socket;
 | 
			
		||||
        i = (*cb) (name, sock, type, context);
 | 
			
		||||
        i = (*cb) (name, sock, context);
 | 
			
		||||
        if (name != NULL)
 | 
			
		||||
            OPENSSL_free(name);
 | 
			
		||||
        if (type == SOCK_STREAM)
 | 
			
		||||
            SHUTDOWN2(sock);
 | 
			
		||||
        if (naccept != -1)
 | 
			
		||||
            naccept--;
 | 
			
		||||
        if (i < 0 || naccept == 0) {
 | 
			
		||||
        if (i < 0) {
 | 
			
		||||
            SHUTDOWN2(accept_socket);
 | 
			
		||||
            return (i);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# ifndef NO_SYS_UN_H
 | 
			
		||||
int do_server_unix(const char *path, int *ret,
 | 
			
		||||
                   int (*cb) (char *hostname, int s, int stype,
 | 
			
		||||
                              unsigned char *context), unsigned char *context,
 | 
			
		||||
                   int naccept)
 | 
			
		||||
{
 | 
			
		||||
    int sock;
 | 
			
		||||
    int accept_socket = 0;
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    if (!init_server_unix(&accept_socket, path))
 | 
			
		||||
        return (0);
 | 
			
		||||
 | 
			
		||||
    if (ret != NULL)
 | 
			
		||||
        *ret = accept_socket;
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (do_accept_unix(accept_socket, &sock) == 0) {
 | 
			
		||||
            SHUTDOWN(accept_socket);
 | 
			
		||||
            i = 0;
 | 
			
		||||
            goto out;
 | 
			
		||||
        }
 | 
			
		||||
        i = (*cb) (NULL, sock, 0, context);
 | 
			
		||||
        SHUTDOWN2(sock);
 | 
			
		||||
        if (naccept != -1)
 | 
			
		||||
            naccept--;
 | 
			
		||||
        if (i < 0 || naccept == 0) {
 | 
			
		||||
            SHUTDOWN2(accept_socket);
 | 
			
		||||
            goto out;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 out:
 | 
			
		||||
    unlink(path);
 | 
			
		||||
    return (i);
 | 
			
		||||
}
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
static int init_server_long(int *sock, int port, char *ip, int type)
 | 
			
		||||
{
 | 
			
		||||
    int ret = 0;
 | 
			
		||||
@@ -382,7 +348,7 @@ static int init_server_long(int *sock, int port, char *ip, int type)
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
    if (type == SOCK_STREAM)
 | 
			
		||||
        s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 | 
			
		||||
        s = socket(AF_INET, SOCK_STREAM, SOCKET_PROTOCOL);
 | 
			
		||||
    else                        /* type == SOCK_DGRAM */
 | 
			
		||||
        s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
 | 
			
		||||
 | 
			
		||||
@@ -417,50 +383,6 @@ static int init_server(int *sock, int port, int type)
 | 
			
		||||
    return (init_server_long(sock, port, NULL, type));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# ifndef NO_SYS_UN_H
 | 
			
		||||
static int init_server_unix(int *sock, const char *path)
 | 
			
		||||
{
 | 
			
		||||
    int ret = 0;
 | 
			
		||||
    struct sockaddr_un server;
 | 
			
		||||
    int s = -1;
 | 
			
		||||
 | 
			
		||||
    if (strlen(path) > (UNIX_PATH_MAX + 1))
 | 
			
		||||
        return (0);
 | 
			
		||||
    if (!ssl_sock_init())
 | 
			
		||||
        return (0);
 | 
			
		||||
 | 
			
		||||
    s = socket(AF_UNIX, SOCK_STREAM, 0);
 | 
			
		||||
    if (s == INVALID_SOCKET)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    memset((char *)&server, 0, sizeof(server));
 | 
			
		||||
    server.sun_family = AF_UNIX;
 | 
			
		||||
    strcpy(server.sun_path, path);
 | 
			
		||||
 | 
			
		||||
    if (bind(s, (struct sockaddr *)&server, sizeof(server)) == -1) {
 | 
			
		||||
#  ifndef OPENSSL_SYS_WINDOWS
 | 
			
		||||
        perror("bind");
 | 
			
		||||
#  endif
 | 
			
		||||
        goto err;
 | 
			
		||||
    }
 | 
			
		||||
    /* Make it 128 for linux */
 | 
			
		||||
    if (listen(s, 128) == -1) {
 | 
			
		||||
#  ifndef OPENSSL_SYS_WINDOWS
 | 
			
		||||
        perror("listen");
 | 
			
		||||
#  endif
 | 
			
		||||
        unlink(path);
 | 
			
		||||
        goto err;
 | 
			
		||||
    }
 | 
			
		||||
    *sock = s;
 | 
			
		||||
    ret = 1;
 | 
			
		||||
 err:
 | 
			
		||||
    if ((ret == 0) && (s != -1)) {
 | 
			
		||||
        SHUTDOWN(s);
 | 
			
		||||
    }
 | 
			
		||||
    return (ret);
 | 
			
		||||
}
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
static int do_accept(int acc_sock, int *sock, char **host)
 | 
			
		||||
{
 | 
			
		||||
    int ret;
 | 
			
		||||
@@ -552,33 +474,6 @@ static int do_accept(int acc_sock, int *sock, char **host)
 | 
			
		||||
    return (1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# ifndef NO_SYS_UN_H
 | 
			
		||||
static int do_accept_unix(int acc_sock, int *sock)
 | 
			
		||||
{
 | 
			
		||||
    int ret;
 | 
			
		||||
 | 
			
		||||
    if (!ssl_sock_init())
 | 
			
		||||
        return (0);
 | 
			
		||||
 | 
			
		||||
 redoit:
 | 
			
		||||
    ret = accept(acc_sock, NULL, NULL);
 | 
			
		||||
    if (ret == INVALID_SOCKET) {
 | 
			
		||||
        if (errno == EINTR) {
 | 
			
		||||
            /*
 | 
			
		||||
             * check_timeout();
 | 
			
		||||
             */
 | 
			
		||||
            goto redoit;
 | 
			
		||||
        }
 | 
			
		||||
        fprintf(stderr, "errno=%d ", errno);
 | 
			
		||||
        perror("accept");
 | 
			
		||||
        return (0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    *sock = ret;
 | 
			
		||||
    return (1);
 | 
			
		||||
}
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
int extract_host_port(char *str, char **host_ptr, unsigned char *ip,
 | 
			
		||||
                      short *port_ptr)
 | 
			
		||||
{
 | 
			
		||||
@@ -604,7 +499,7 @@ int extract_host_port(char *str, char **host_ptr, unsigned char *ip,
 | 
			
		||||
    return (0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int host_ip(const char *str, unsigned char ip[4])
 | 
			
		||||
static int host_ip(char *str, unsigned char ip[4])
 | 
			
		||||
{
 | 
			
		||||
    unsigned int in[4];
 | 
			
		||||
    int i;
 | 
			
		||||
@@ -631,7 +526,8 @@ static int host_ip(const char *str, unsigned char ip[4])
 | 
			
		||||
            BIO_printf(bio_err, "gethostbyname failure\n");
 | 
			
		||||
            goto err;
 | 
			
		||||
        }
 | 
			
		||||
        if (he->h_addrtype != AF_INET) {
 | 
			
		||||
        /* cast to short because of win16 winsock definition */
 | 
			
		||||
        if ((short)he->h_addrtype != AF_INET) {
 | 
			
		||||
            BIO_printf(bio_err, "gethostbyname addr is not AF_INET\n");
 | 
			
		||||
            return (0);
 | 
			
		||||
        }
 | 
			
		||||
@@ -645,7 +541,7 @@ static int host_ip(const char *str, unsigned char ip[4])
 | 
			
		||||
    return (0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int extract_port(const char *str, short *port_ptr)
 | 
			
		||||
int extract_port(char *str, short *port_ptr)
 | 
			
		||||
{
 | 
			
		||||
    int i;
 | 
			
		||||
    struct servent *s;
 | 
			
		||||
@@ -674,7 +570,7 @@ static struct ghbn_cache_st {
 | 
			
		||||
static unsigned long ghbn_hits = 0L;
 | 
			
		||||
static unsigned long ghbn_miss = 0L;
 | 
			
		||||
 | 
			
		||||
static struct hostent *GetHostByName(const char *name)
 | 
			
		||||
static struct hostent *GetHostByName(char *name)
 | 
			
		||||
{
 | 
			
		||||
    struct hostent *ret;
 | 
			
		||||
    int i, lowi = 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -69,6 +69,9 @@
 | 
			
		||||
 | 
			
		||||
#define USE_SOCKETS
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#ifdef OPENSSL_NO_STDIO
 | 
			
		||||
# define APPS_WIN16
 | 
			
		||||
#endif
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
@@ -187,6 +190,7 @@ static void s_time_usage(void)
 | 
			
		||||
           SSL_CONNECT_NAME);
 | 
			
		||||
#ifdef FIONBIO
 | 
			
		||||
    printf("-nbio         - Run with non-blocking IO\n");
 | 
			
		||||
    printf("-ssl2         - Just use SSLv2\n");
 | 
			
		||||
    printf("-ssl3         - Just use SSLv3\n");
 | 
			
		||||
    printf("-bugs         - Turn on SSL bug compatibility\n");
 | 
			
		||||
    printf("-new          - Just time new connections\n");
 | 
			
		||||
@@ -285,6 +289,10 @@ static int parseArgs(int argc, char **argv)
 | 
			
		||||
            }
 | 
			
		||||
        } else if (strcmp(*argv, "-bugs") == 0)
 | 
			
		||||
            st_bugs = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_SSL2
 | 
			
		||||
        else if (strcmp(*argv, "-ssl2") == 0)
 | 
			
		||||
            s_time_meth = SSLv2_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SSL3
 | 
			
		||||
        else if (strcmp(*argv, "-ssl3") == 0)
 | 
			
		||||
            s_time_meth = SSLv3_client_method();
 | 
			
		||||
@@ -349,7 +357,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
    s_time_meth = SSLv23_client_method();
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
    s_time_meth = SSLv3_client_method();
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL2)
 | 
			
		||||
    s_time_meth = SSLv2_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    /* parse the command line arguments */
 | 
			
		||||
    if (parseArgs(argc, argv) < 0)
 | 
			
		||||
@@ -432,6 +446,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                ver = 't';
 | 
			
		||||
            else if (ver == SSL3_VERSION)
 | 
			
		||||
                ver = '3';
 | 
			
		||||
            else if (ver == SSL2_VERSION)
 | 
			
		||||
                ver = '2';
 | 
			
		||||
            else
 | 
			
		||||
                ver = '*';
 | 
			
		||||
        }
 | 
			
		||||
@@ -525,6 +541,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                ver = 't';
 | 
			
		||||
            else if (ver == SSL3_VERSION)
 | 
			
		||||
                ver = '3';
 | 
			
		||||
            else if (ver == SSL2_VERSION)
 | 
			
		||||
                ver = '2';
 | 
			
		||||
            else
 | 
			
		||||
                ver = '*';
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										413
									
								
								apps/server.pem
									
									
									
									
									
								
							
							
						
						
									
										413
									
								
								apps/server.pem
									
									
									
									
									
								
							@@ -1,52 +1,369 @@
 | 
			
		||||
subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = Test Server Cert
 | 
			
		||||
issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
 | 
			
		||||
subject= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Server test cert (512 bit)
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIID5zCCAs+gAwIBAgIJALnu1NlVpZ6zMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV
 | 
			
		||||
BAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMSIwIAYDVQQLDBlGT1IgVEVT
 | 
			
		||||
VElORyBQVVJQT1NFUyBPTkxZMSUwIwYDVQQDDBxPcGVuU1NMIFRlc3QgSW50ZXJt
 | 
			
		||||
ZWRpYXRlIENBMB4XDTExMTIwODE0MDE0OFoXDTIxMTAxNjE0MDE0OFowZDELMAkG
 | 
			
		||||
A1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBU
 | 
			
		||||
RVNUSU5HIFBVUlBPU0VTIE9OTFkxGTAXBgNVBAMMEFRlc3QgU2VydmVyIENlcnQw
 | 
			
		||||
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDzhPOSNtyyRspmeuUpxfNJ
 | 
			
		||||
KCLTuf7g3uQ4zu4iHOmRO5TQci+HhVlLZrHF9XqFXcIP0y4pWDbMSGuiorUmzmfi
 | 
			
		||||
R7bfSdI/+qIQt8KXRH6HNG1t8ou0VSvWId5TS5Dq/er5ODUr9OaaDva7EquHIcMv
 | 
			
		||||
vPQGuI+OEAcnleVCy9HVEIySrO4P3CNIicnGkwwiAud05yUAq/gPXBC1hTtmlPD7
 | 
			
		||||
TVcGVSEiJdvzqqlgv02qedGrkki6GY4S7GjZxrrf7Foc2EP+51LJzwLQx3/JfrCU
 | 
			
		||||
41NEWAsu/Sl0tQabXESN+zJ1pDqoZ3uHMgpQjeGiE0olr+YcsSW/tJmiU9OiAr8R
 | 
			
		||||
AgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBeAwLAYJYIZI
 | 
			
		||||
AYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQW
 | 
			
		||||
BBSCvM8AABPR9zklmifnr9LvIBturDAfBgNVHSMEGDAWgBQ2w2yI55X+sL3szj49
 | 
			
		||||
hqshgYfa2jANBgkqhkiG9w0BAQUFAAOCAQEAqb1NV0B0/pbpK9Z4/bNjzPQLTRLK
 | 
			
		||||
WnSNm/Jh5v0GEUOE/Beg7GNjNrmeNmqxAlpqWz9qoeoFZax+QBpIZYjROU3TS3fp
 | 
			
		||||
yLsrnlr0CDQ5R7kCCDGa8dkXxemmpZZLbUCpW2Uoy8sAA4JjN9OtsZY7dvUXFgJ7
 | 
			
		||||
vVNTRnI01ghknbtD+2SxSQd3CWF6QhcRMAzZJ1z1cbbwGDDzfvGFPzJ+Sq+zEPds
 | 
			
		||||
xoVLLSetCiBc+40ZcDS5dV98h9XD7JMTQfxzA7mNGv73JoZJA6nFgj+ADSlJsY/t
 | 
			
		||||
JBv+z1iQRueoh9Qeee+ZbRifPouCB8FDx+AltvHTANdAq0t/K3o+pplMVA==
 | 
			
		||||
MIIB6TCCAVICAQYwDQYJKoZIhvcNAQEEBQAwWzELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYD
 | 
			
		||||
VQQDExJUZXN0IENBICgxMDI0IGJpdCkwHhcNMDAxMDE2MjIzMTAzWhcNMDMwMTE0
 | 
			
		||||
MjIzMTAzWjBjMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
 | 
			
		||||
A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxIzAhBgNVBAMTGlNlcnZlciB0ZXN0IGNl
 | 
			
		||||
cnQgKDUxMiBiaXQpMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ+zw4Qnlf8SMVIP
 | 
			
		||||
Fe9GEcStgOY2Ww/dgNdhjeD8ckUJNP5VZkVDTGiXav6ooKXfX3j/7tdkuD8Ey2//
 | 
			
		||||
Kv7+ue0CAwEAATANBgkqhkiG9w0BAQQFAAOBgQCT0grFQeZaqYb5EYfk20XixZV4
 | 
			
		||||
GmyAbXMftG1Eo7qGiMhYzRwGNWxEYojf5PZkYZXvSqZ/ZXHXa4g59jK/rJNnaVGM
 | 
			
		||||
k+xIX8mxQvlV0n5O9PIha5BX5teZnkHKgL8aKKLKW1BK7YTngsfSzzaeame5iKfz
 | 
			
		||||
itAE+OjGF+PFKbwX8Q==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIIEpAIBAAKCAQEA84TzkjbcskbKZnrlKcXzSSgi07n+4N7kOM7uIhzpkTuU0HIv
 | 
			
		||||
h4VZS2axxfV6hV3CD9MuKVg2zEhroqK1Js5n4ke230nSP/qiELfCl0R+hzRtbfKL
 | 
			
		||||
tFUr1iHeU0uQ6v3q+Tg1K/Tmmg72uxKrhyHDL7z0BriPjhAHJ5XlQsvR1RCMkqzu
 | 
			
		||||
D9wjSInJxpMMIgLndOclAKv4D1wQtYU7ZpTw+01XBlUhIiXb86qpYL9NqnnRq5JI
 | 
			
		||||
uhmOEuxo2ca63+xaHNhD/udSyc8C0Md/yX6wlONTRFgLLv0pdLUGm1xEjfsydaQ6
 | 
			
		||||
qGd7hzIKUI3hohNKJa/mHLElv7SZolPTogK/EQIDAQABAoIBAADq9FwNtuE5IRQn
 | 
			
		||||
zGtO4q7Y5uCzZ8GDNYr9RKp+P2cbuWDbvVAecYq2NV9QoIiWJOAYZKklOvekIju3
 | 
			
		||||
r0UZLA0PRiIrTg6NrESx3JrjWDK8QNlUO7CPTZ39/K+FrmMkV9lem9yxjJjyC34D
 | 
			
		||||
AQB+YRTx+l14HppjdxNwHjAVQpIx/uO2F5xAMuk32+3K+pq9CZUtrofe1q4Agj9R
 | 
			
		||||
5s8mSy9pbRo9kW9wl5xdEotz1LivFOEiqPUJTUq5J5PeMKao3vdK726XI4Z455Nm
 | 
			
		||||
W2/MA0YV0ug2FYinHcZdvKM6dimH8GLfa3X8xKRfzjGjTiMSwsdjgMa4awY3tEHH
 | 
			
		||||
674jhAECgYEA/zqMrc0zsbNk83sjgaYIug5kzEpN4ic020rSZsmQxSCerJTgNhmg
 | 
			
		||||
utKSCt0Re09Jt3LqG48msahX8ycqDsHNvlEGPQSbMu9IYeO3Wr3fAm75GEtFWePY
 | 
			
		||||
BhM73I7gkRt4s8bUiUepMG/wY45c5tRF23xi8foReHFFe9MDzh8fJFECgYEA9EFX
 | 
			
		||||
4qAik1pOJGNei9BMwmx0I0gfVEIgu0tzeVqT45vcxbxr7RkTEaDoAG6PlbWP6D9a
 | 
			
		||||
WQNLp4gsgRM90ZXOJ4up5DsAWDluvaF4/omabMA+MJJ5kGZ0gCj5rbZbKqUws7x8
 | 
			
		||||
bp+6iBfUPJUbcqNqFmi/08Yt7vrDnMnyMw2A/sECgYEAiiuRMxnuzVm34hQcsbhH
 | 
			
		||||
6ymVqf7j0PW2qK0F4H1ocT9qhzWFd+RB3kHWrCjnqODQoI6GbGr/4JepHUpre1ex
 | 
			
		||||
4UEN5oSS3G0ru0rC3U4C59dZ5KwDHFm7ffZ1pr52ljfQDUsrjjIMRtuiwNK2OoRa
 | 
			
		||||
WSsqiaL+SDzSB+nBmpnAizECgYBdt/y6rerWUx4MhDwwtTnel7JwHyo2MDFS6/5g
 | 
			
		||||
n8qC2Lj6/fMDRE22w+CA2esp7EJNQJGv+b27iFpbJEDh+/Lf5YzIT4MwVskQ5bYB
 | 
			
		||||
JFcmRxUVmf4e09D7o705U/DjCgMH09iCsbLmqQ38ONIRSHZaJtMDtNTHD1yi+jF+
 | 
			
		||||
OT43gQKBgQC/2OHZoko6iRlNOAQ/tMVFNq7fL81GivoQ9F1U0Qr+DH3ZfaH8eIkX
 | 
			
		||||
xT0ToMPJUzWAn8pZv0snA0um6SIgvkCuxO84OkANCVbttzXImIsL7pFzfcwV/ERK
 | 
			
		||||
UM6j0ZuSMFOCr/lGPAoOQU0fskidGEHi1/kW+suSr28TqsyYZpwBDQ==
 | 
			
		||||
MIIBPAIBAAJBAJ+zw4Qnlf8SMVIPFe9GEcStgOY2Ww/dgNdhjeD8ckUJNP5VZkVD
 | 
			
		||||
TGiXav6ooKXfX3j/7tdkuD8Ey2//Kv7+ue0CAwEAAQJAN6W31vDEP2DjdqhzCDDu
 | 
			
		||||
OA4NACqoiFqyblo7yc2tM4h4xMbC3Yx5UKMN9ZkCtX0gzrz6DyF47bdKcWBzNWCj
 | 
			
		||||
gQIhANEoojVt7hq+SQ6MCN6FTAysGgQf56Q3TYoJMoWvdiXVAiEAw3e3rc+VJpOz
 | 
			
		||||
rHuDo6bgpjUAAXM+v3fcpsfZSNO6V7kCIQCtbVjanpUwvZkMI9by02oUk9taki3b
 | 
			
		||||
PzPfAfNPYAbCJQIhAJXNQDWyqwn/lGmR11cqY2y9nZ1+5w3yHGatLrcDnQHxAiEA
 | 
			
		||||
vnlEGo8K85u+KwIOimM48ZG8oTk7iFdkqLJR1utT3aU=
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
subject=/C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
 | 
			
		||||
issuer= /C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
 | 
			
		||||
notBefore=950413210656Z
 | 
			
		||||
notAfter =970412210656Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICCDCCAXECAQAwDQYJKoZIhvcNAQEEBQAwTjELMAkGA1UEBhMCVVMxHzAdBgNV
 | 
			
		||||
BAoUFkFUJlQgQmVsbCBMYWJvcmF0b3JpZXMxHjAcBgNVBAsUFVByb3RvdHlwZSBS
 | 
			
		||||
ZXNlYXJjaCBDQTAeFw05NTA0MTMyMTA2NTZaFw05NzA0MTIyMTA2NTZaME4xCzAJ
 | 
			
		||||
BgNVBAYTAlVTMR8wHQYDVQQKFBZBVCZUIEJlbGwgTGFib3JhdG9yaWVzMR4wHAYD
 | 
			
		||||
VQQLFBVQcm90b3R5cGUgUmVzZWFyY2ggQ0EwgZwwDQYJKoZIhvcNAQEBBQADgYoA
 | 
			
		||||
MIGGAoGAebOmgtSCl+wCYZc86UGYeTLY8cjmW2P0FN8ToT/u2pECCoFdrlycX0OR
 | 
			
		||||
3wt0ZhpFXLVNeDnHwEE9veNUih7pCL2ZBFqoIoQkB1lZmXRiVtjGonz8BLm/qrFM
 | 
			
		||||
YHb0lme/Ol+s118mwKVxnn6bSAeI/OXKhLaVdYZWk+aEaxEDkVkCAQ8wDQYJKoZI
 | 
			
		||||
hvcNAQEEBQADgYEAAZMG14lZmZ8bahkaHaTV9dQf4p2FZiQTFwHP9ZyGsXPC+LT5
 | 
			
		||||
dG5iTaRmyjNIJdPWohZDl97kAci79aBndvuEvRKOjLHs3WRGBIwERnAcnY9Mz8u/
 | 
			
		||||
zIHK23PjYVxGGaZd669OJwD0CYyqH22HH9nFUGaoJdsv39ChW0NRdLE9+y8=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICJjCCAY8CAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
 | 
			
		||||
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTc0M1oXDTAxMDYw
 | 
			
		||||
OTEzNTc0M1owWzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
 | 
			
		||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYDVQQDExJUZXN0IENBICgxMDI0
 | 
			
		||||
IGJpdCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKO7o8t116VP6cgybTsZ
 | 
			
		||||
DCZhr95nYlZuya3aCi1IKoztqwWnjbmDFIriOqGFPrZQ+moMETC9D59iRW/dFXSv
 | 
			
		||||
1F65ka/XY2hLh9exCCo7XuUcDs53Qp3bI3AmMqHjgzE8oO3ajyJAzJkTTOUecQU2
 | 
			
		||||
mw/gI4tMM0LqWMQS7luTy4+xAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAM7achv3v
 | 
			
		||||
hLQJcv/65eGEpBXM40ZDVoFQFFJWaY5p883HTqLB1x4FdzsXHH0QKBTcKpWwqyu4
 | 
			
		||||
YDm3fb8oDugw72bCzfyZK/zVZPR/hVlqI/fvU109Qoc+7oPvIXWky71HfcK6ZBCA
 | 
			
		||||
q30KIqGM/uoM60INq97qjDmCJapagcNBGQs=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIICXQIBAAKBgQCju6PLddelT+nIMm07GQwmYa/eZ2JWbsmt2gotSCqM7asFp425
 | 
			
		||||
gxSK4jqhhT62UPpqDBEwvQ+fYkVv3RV0r9ReuZGv12NoS4fXsQgqO17lHA7Od0Kd
 | 
			
		||||
2yNwJjKh44MxPKDt2o8iQMyZE0zlHnEFNpsP4COLTDNC6ljEEu5bk8uPsQIDAQAB
 | 
			
		||||
AoGAVZmpFZsDZfr0l2S9tLLwpjRWNOlKATQkno6q2WesT0eGLQufTciY+c8ypfU6
 | 
			
		||||
hyio8r5iUl/VhhdjhAtKx1mRpiotftHo/eYf8rtsrnprOnWG0bWjLjtIoMbcxGn2
 | 
			
		||||
J3bN6LJmbJMjDs0eJ3KnTu646F3nDUw2oGAwmpzKXA1KAP0CQQDRvQhxk2D3Pehs
 | 
			
		||||
HvG665u2pB5ipYQngEFlZO7RHJZzJOZEWSLuuMqaF/7pTfA5jiBvWqCgJeCRRInL
 | 
			
		||||
21ru4dlPAkEAx9jj7BgKn5TYnMoBSSe0afjsV9oApVpN1Nacb1YDtCwy+scp3++s
 | 
			
		||||
nFxlv98wxIlSdpwMUn+AUWfjiWR7Tu/G/wJBAJ/KjwZIrFVxewP0x2ILYsTRYLzz
 | 
			
		||||
MS4PDsO7FB+I0i7DbBOifXS2oNSpd3I0CNMwrxFnUHzynpbOStVfN3ZL5w0CQQCa
 | 
			
		||||
pwFahxBRhkJKsxhjoFJBX9yl75JoY4Wvm5Tbo9ih6UJaRx3kqfkN14L2BKYcsZgb
 | 
			
		||||
KY9vmDOYy6iNfjDeWTfJAkBkfPUb8oTJ/nSP5zN6sqGxSY4krc4xLxpRmxoJ8HL2
 | 
			
		||||
XfhqXkTzbU13RX9JJ/NZ8vQN9Vm2NhxRGJocQkmcdVtJ
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
MIICYDCCAiACAgEoMAkGBSsOAwINBQAwfDELMAkGA1UEBhMCVVMxNjA0BgNVBAoT
 | 
			
		||||
LU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFuZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZ
 | 
			
		||||
MBcGA1UECxMQVGVzdCBFbnZpcm9ubWVudDEaMBgGA1UECxMRRFNTLU5BU0EtUGls
 | 
			
		||||
b3QtQ0EwHhcNOTYwMjI2MTYzMjQ1WhcNOTcwMjI1MTYzMjQ1WjB8MQswCQYDVQQG
 | 
			
		||||
EwJVUzE2MDQGA1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFk
 | 
			
		||||
bWluaXN0cmF0aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MRowGAYDVQQL
 | 
			
		||||
ExFEU1MtTkFTQS1QaWxvdC1DQTCB8jAJBgUrDgMCDAUAA4HkADCB4AJBAMA/ssKb
 | 
			
		||||
hPNUG7ZlASfVwEJU21O5OyF/iyBzgHI1O8eOhJGUYO8cc8wDMjR508Mr9cp6Uhl/
 | 
			
		||||
ZB7FV5GkLNEnRHYCQQDUEaSg45P2qrDwixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLb
 | 
			
		||||
bn3QK74T2IxY1yY+kCNq8XrIqf5fJJzIH0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3
 | 
			
		||||
fVd0geUCQQCzCFUQAh+ZkEmp5804cs6ZWBhrUAfnra8lJItYo9xPcXgdIfLfibcX
 | 
			
		||||
R71UsyO77MRD7B0+Ag2tq794IleCVcEEMAkGBSsOAwINBQADLwAwLAIUUayDfreR
 | 
			
		||||
Yh2WeU86/pHNdkUC1IgCFEfxe1f0oMpxJyrJ5XIxTi7vGdoK
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICGTCCAdgCAwCqTDAJBgUrDgMCDQUAMHwxCzAJBgNVBAYTAlVTMTYwNAYDVQQK
 | 
			
		||||
Ey1OYXRpb25hbCBBZXJvbmF1dGljcyBhbmQgU3BhY2UgQWRtaW5pc3RyYXRpb24x
 | 
			
		||||
GTAXBgNVBAsTEFRlc3QgRW52aXJvbm1lbnQxGjAYBgNVBAsTEURTUy1OQVNBLVBp
 | 
			
		||||
bG90LUNBMB4XDTk2MDUxNDE3MDE0MVoXDTk3MDUxNDE3MDE0MVowMzELMAkGA1UE
 | 
			
		||||
BhMCQVUxDzANBgNVBAoTBk1pbmNvbTETMBEGA1UEAxMKRXJpYyBZb3VuZzCB8jAJ
 | 
			
		||||
BgUrDgMCDAUAA4HkADCB4AJBAKbfHz6vE6pXXMTpswtGUec2tvnfLJUsoxE9qs4+
 | 
			
		||||
ObZX7LmLvragNPUeiTJx7UOWZ5DfBj6bXLc8eYne0lP1g3ACQQDUEaSg45P2qrDw
 | 
			
		||||
ixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLbbn3QK74T2IxY1yY+kCNq8XrIqf5fJJzI
 | 
			
		||||
H0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3fVd0geUCQQCzCFUQAh+ZkEmp5804cs6Z
 | 
			
		||||
WBhrUAfnra8lJItYo9xPcXgdIfLfibcXR71UsyO77MRD7B0+Ag2tq794IleCVcEE
 | 
			
		||||
MAkGBSsOAwINBQADMAAwLQIUWsuuJRE3VT4ueWkWMAJMJaZjj1ECFQCYY0zX4bzM
 | 
			
		||||
LC7obsrHD8XAHG+ZRG==
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICTTCCAbagAwIBAgIBADANBgkqhkiG9w0BAQQFADBMMQswCQYDVQQGEwJHQjEM
 | 
			
		||||
MAoGA1UEChMDVUNMMRgwFgYDVQQLEw9JQ0UtVEVMIFByb2plY3QxFTATBgNVBAMT
 | 
			
		||||
DFRydXN0RmFjdG9yeTAeFw05NzA0MjIxNDM5MTRaFw05ODA0MjIxNDM5MTRaMEwx
 | 
			
		||||
CzAJBgNVBAYTAkdCMQwwCgYDVQQKEwNVQ0wxGDAWBgNVBAsTD0lDRS1URUwgUHJv
 | 
			
		||||
amVjdDEVMBMGA1UEAxMMVHJ1c3RGYWN0b3J5MIGcMAoGBFUIAQECAgQAA4GNADCB
 | 
			
		||||
iQKBgQCEieR8NcXkUW1f0G6aC6u0i8q/98JqS6RxK5YmHIGKCkuTWAUjzLfUa4dt
 | 
			
		||||
U9igGCjTuxaDqlzEim+t/02pmiBZT9HaX++35MjQPUWmsChcYU5WyzGErXi+rQaw
 | 
			
		||||
zlwS73zM8qiPj/97lXYycWhgL0VaiDSPxRXEUdWoaGruom4mNQIDAQABo0IwQDAd
 | 
			
		||||
BgNVHQ4EFgQUHal1LZr7oVg5z6lYzrhTgZRCmcUwDgYDVR0PAQH/BAQDAgH2MA8G
 | 
			
		||||
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAfaggfl6FZoioecjv0dq8
 | 
			
		||||
/DXo/u11iMZvXn08gjX/zl2b4wtPbShOSY5FhkSm8GeySasz+/Nwb/uzfnIhokWi
 | 
			
		||||
lfPZHtlCWtXbIy/TN51eJyq04ceDCQDWvLC2enVg9KB+GJ34b5c5VaPRzq8MBxsA
 | 
			
		||||
S7ELuYGtmYgYm9NZOIr7yU0=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB6jCCAZQCAgEtMA0GCSqGSIb3DQEBBAUAMIGAMQswCQYDVQQGEwJVUzE2MDQG
 | 
			
		||||
A1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFkbWluaXN0cmF0
 | 
			
		||||
aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MR4wHAYDVQQLExVNRDUtUlNB
 | 
			
		||||
LU5BU0EtUGlsb3QtQ0EwHhcNOTYwNDMwMjIwNTAwWhcNOTcwNDMwMjIwNTAwWjCB
 | 
			
		||||
gDELMAkGA1UEBhMCVVMxNjA0BgNVBAoTLU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFu
 | 
			
		||||
ZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZMBcGA1UECxMQVGVzdCBFbnZpcm9ubWVu
 | 
			
		||||
dDEeMBwGA1UECxMVTUQ1LVJTQS1OQVNBLVBpbG90LUNBMFkwCgYEVQgBAQICAgAD
 | 
			
		||||
SwAwSAJBALmmX5+GqAvcrWK13rfDrNX9UfeA7f+ijyBgeFQjYUoDpFqapw4nzQBL
 | 
			
		||||
bAXug8pKkRwa2Zh8YODhXsRWu2F/UckCAwEAATANBgkqhkiG9w0BAQQFAANBAH9a
 | 
			
		||||
OBA+QCsjxXgnSqHx04gcU8S49DVUb1f2XVoLnHlIb8RnX0k5O6mpHT5eti9bLkiW
 | 
			
		||||
GJNMJ4L0AJ/ac+SmHZc=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICajCCAdMCBDGA0QUwDQYJKoZIhvcNAQEEBQAwfTELMAkGA1UEBhMCQ2ExDzAN
 | 
			
		||||
BgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmlsaXR5IEFjY2VwdGVkMR8w
 | 
			
		||||
HQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRwwGgYDVQQDExNFbnRydXN0
 | 
			
		||||
IERlbW8gV2ViIENBMB4XDTk2MDQyNjEzMzUwMVoXDTA2MDQyNjEzMzUwMVowfTEL
 | 
			
		||||
MAkGA1UEBhMCQ2ExDzANBgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmls
 | 
			
		||||
aXR5IEFjY2VwdGVkMR8wHQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRww
 | 
			
		||||
GgYDVQQDExNFbnRydXN0IERlbW8gV2ViIENBMIGdMA0GCSqGSIb3DQEBAQUAA4GL
 | 
			
		||||
ADCBhwKBgQCaroS7O1DA0hm4IefNYU1cx/nqOmzEnk291d1XqznDeF4wEgakbkCc
 | 
			
		||||
zTKxK791yNpXG5RmngqH7cygDRTHZJ6mfCRn0wGC+AI00F2vYTGqPGRQL1N3lZT0
 | 
			
		||||
YDKFC0SQeMMjFIZ1aeQigroFQnHo0VB3zWIMpNkka8PY9lxHZAmWwQIBAzANBgkq
 | 
			
		||||
hkiG9w0BAQQFAAOBgQBAx0UMVA1s54lMQyXjMX5kj99FJN5itb8bK1Rk+cegPQPF
 | 
			
		||||
cWO9SEWyEjjBjIkjjzAwBkaEszFsNGxemxtXvwjIm1xEUMTVlPEWTs2qnDvAUA9W
 | 
			
		||||
YqhWbhH0toGT36236QAsqCZ76rbTRVSSX2BHyJwJMG2tCRv7kRJ//NIgxj3H4w==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICJzCCAZACAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
 | 
			
		||||
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTczN1oXDTAxMDYw
 | 
			
		||||
OTEzNTczN1owXDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
 | 
			
		||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYDVQQDExNUZXN0IFBDQSAoMTAy
 | 
			
		||||
NCBiaXQpMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdoWk/3+WcMlfjIrkg
 | 
			
		||||
40ketmnQaEogQe1LLcuOJV6rKfUSAsPgwgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp
 | 
			
		||||
22Jp85PmemiDzyUIStwk72qhp1imbANZvlmlCFKiQrjUyuDfu4TABmn+kkt3vR1Y
 | 
			
		||||
BEOGt+IFye1UBVSATVdRJ2UVhwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABNA1u/S
 | 
			
		||||
Cg/LJZWb7GliiKJsvuhxlE4E5JxQF2zMub/CSNbF97//tYSyj96sxeFQxZXbcjm9
 | 
			
		||||
xt6mr/xNLA4szNQMJ4P+L7b5e/jC5DSqlwS+CUYJgaFs/SP+qJoCSu1bR3IM9XWO
 | 
			
		||||
cRBpDmcBbYLkSyB92WURvsZ1LtjEcn+cdQVI
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIICXAIBAAKBgQCdoWk/3+WcMlfjIrkg40ketmnQaEogQe1LLcuOJV6rKfUSAsPg
 | 
			
		||||
wgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp22Jp85PmemiDzyUIStwk72qhp1imbANZ
 | 
			
		||||
vlmlCFKiQrjUyuDfu4TABmn+kkt3vR1YBEOGt+IFye1UBVSATVdRJ2UVhwIDAQAB
 | 
			
		||||
AoGAba4fTtuap5l7/8ZsbE7Z1O32KJY4ZcOZukLOLUUhXxXduT+FTgGWujc0/rgc
 | 
			
		||||
z9qYCLlNZHOouMYTgtSfYvuMuLZ11VIt0GYH+nRioLShE59Yy+zCRyC+gPigS1kz
 | 
			
		||||
xvo14AsOIPYV14Tk/SsHyq6E0eTk7VzaIE197giiINUERPECQQDSKmtPTh/lRKw7
 | 
			
		||||
HSZSM0I1mFWn/1zqrAbontRQY5w98QWIOe5qmzYyFbPXYT3d9BzlsMyhgiRNoBbD
 | 
			
		||||
yvohSHXJAkEAwAHx6ezAZeWWzD5yXD36nyjpkVCw7Tk7TSmOceLJMWt1QcrCfqlS
 | 
			
		||||
xA5jjpQ6Z8suU5DdtWAryM2sAir1WisYzwJAd6Zcx56jvAQ3xcPXsE6scBTVFzrj
 | 
			
		||||
7FqZ6E+cclPzfLQ+QQsyOBE7bpI6e/FJppY26XGZXo3YGzV8IGXrt40oOQJALETG
 | 
			
		||||
h86EFXo3qGOFbmsDy4pdP5nBERCu8X1xUCSfintiD4c2DInxgS5oGclnJeMcjTvL
 | 
			
		||||
QjQoJCX3UJCi/OUO1QJBAKgcDHWjMvt+l1pjJBsSEZ0HX9AAIIVx0RQmbFGS+F2Q
 | 
			
		||||
hhu5l77WnnZOQ9vvhV5u7NPCUF9nhU3jh60qWWO8mkc=
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
subject=/C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
 | 
			
		||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
 | 
			
		||||
notBefore=941104185834Z
 | 
			
		||||
notAfter =991103185834Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICIzCCAZACBQJBAAAWMA0GCSqGSIb3DQEBAgUAMFwxCzAJBgNVBAYTAlVTMSAw
 | 
			
		||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVy
 | 
			
		||||
Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDQxODU4MzRaFw05
 | 
			
		||||
OTExMDMxODU4MzRaMFwxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBT
 | 
			
		||||
ZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9u
 | 
			
		||||
IEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCk+4Fie84QJ93o
 | 
			
		||||
975sbsZwmdu41QUDaSiCnHJ/lj+O7Kwpkj+KFPhCdr69XQO5kNTQvAayUTNfxMK/
 | 
			
		||||
touPmbZiImDd298ggrTKoi8tUO2UMt7gVY3UaOLgTNLNBRYulWZcYVI4HlGogqHE
 | 
			
		||||
7yXpCuaLK44xZtn42f29O2nZ6wIDAQABMA0GCSqGSIb3DQEBAgUAA34AdrW2EP4j
 | 
			
		||||
9/dZYkuwX5zBaLxJu7NJbyFHXSudVMQAKD+YufKKg5tgf+tQx6sFEC097TgCwaVI
 | 
			
		||||
0v5loMC86qYjFmZsGySp8+x5NRhPJsjjr1BKx6cxa9B8GJ1Qv6km+iYrRpwUqbtb
 | 
			
		||||
MJhCKLVLU7tDCZJAuqiqWqTGtotXTcU=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
subject=/C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
 | 
			
		||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
 | 
			
		||||
notBefore=941109235417Z
 | 
			
		||||
notAfter =991231235417Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICKTCCAZYCBQJBAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMSAw
 | 
			
		||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJl
 | 
			
		||||
IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDkyMzU0MTda
 | 
			
		||||
Fw05OTEyMzEyMzU0MTdaMF8xCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0
 | 
			
		||||
YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJlIFNlcnZlciBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCSznrB
 | 
			
		||||
roM+WqqJg1esJQF2DK2ujiw3zus1eGRUA+WEQFHJv48I4oqCCNIWhjdV6bEhAq12
 | 
			
		||||
aIGaBaJLyUslZiJWbIgHj/eBWW2EB2VwE3F2Ppt3TONQiVaYSLkdpykaEy5KEVmc
 | 
			
		||||
HhXVSVQsczppgrGXOZxtcGdI5d0t1sgeewIDAQABMA0GCSqGSIb3DQEBAgUAA34A
 | 
			
		||||
iNHReSHO4ovo+MF9NFM/YYPZtgs4F7boviGNjwC4i1N+RGceIr2XJ+CchcxK9oU7
 | 
			
		||||
suK+ktPlDemvXA4MRpX/oRxePug2WHpzpgr4IhFrwwk4fia7c+8AvQKk8xQNMD9h
 | 
			
		||||
cHsg/jKjn7P0Z1LctO6EjJY2IN6BCINxIYoPnqk=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
subject=/C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
 | 
			
		||||
	/OU=Certification Services Division/CN=Thawte Server CA
 | 
			
		||||
	/Email=server-certs@thawte.com
 | 
			
		||||
issuer= /C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
 | 
			
		||||
	/OU=Certification Services Division/CN=Thawte Server CA
 | 
			
		||||
	/Email=server-certs@thawte.com
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIC+TCCAmICAQAwDQYJKoZIhvcNAQEEBQAwgcQxCzAJBgNVBAYTAlpBMRUwEwYD
 | 
			
		||||
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
 | 
			
		||||
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
 | 
			
		||||
dmljZXMgRGl2aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkq
 | 
			
		||||
hkiG9w0BCQEWF3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMB4XDTk2MDcyNzE4MDc1
 | 
			
		||||
N1oXDTk4MDcyNzE4MDc1N1owgcQxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0
 | 
			
		||||
ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMUVGhhd3RlIENv
 | 
			
		||||
bnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
 | 
			
		||||
aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkqhkiG9w0BCQEW
 | 
			
		||||
F3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
 | 
			
		||||
iQKBgQDTpFBuyP9Wa+bPXbbqDGh1R6KqwtqEJfyo9EdR2oW1IHSUhh4PdcnpCGH1
 | 
			
		||||
Bm0wbhUZAulSwGLbTZme4moMRDjN/r7jZAlwxf6xaym2L0nIO9QnBCUQly/nkG3A
 | 
			
		||||
KEKZ10xD3sP1IW1Un13DWOHA5NlbsLjctHvfNjrCtWYiEtaHDQIDAQABMA0GCSqG
 | 
			
		||||
SIb3DQEBBAUAA4GBAIsvn7ifX3RUIrvYXtpI4DOfARkTogwm6o7OwVdl93yFhDcX
 | 
			
		||||
7h5t0XZ11MUAMziKdde3rmTvzUYIUCYoY5b032IwGMTvdiclK+STN6NP2m5nvFAM
 | 
			
		||||
qJT5gC5O+j/jBuZRQ4i0AMYQr5F4lT8oBJnhgafw6PL8aDY2vMHGSPl9+7uf
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIDDTCCAnYCAQAwDQYJKoZIhvcNAQEEBQAwgc4xCzAJBgNVBAYTAlpBMRUwEwYD
 | 
			
		||||
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
 | 
			
		||||
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
 | 
			
		||||
dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBD
 | 
			
		||||
QTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTAeFw05
 | 
			
		||||
NjA3MjcxODA3MTRaFw05ODA3MjcxODA3MTRaMIHOMQswCQYDVQQGEwJaQTEVMBMG
 | 
			
		||||
A1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xHTAbBgNVBAoT
 | 
			
		||||
FFRoYXd0ZSBDb25zdWx0aW5nIGNjMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNl
 | 
			
		||||
cnZpY2VzIERpdmlzaW9uMSEwHwYDVQQDExhUaGF3dGUgUHJlbWl1bSBTZXJ2ZXIg
 | 
			
		||||
Q0ExKDAmBgkqhkiG9w0BCQEWGXByZW1pdW0tc2VydmVyQHRoYXd0ZS5jb20wgZ8w
 | 
			
		||||
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANI2NmqL18JbntqBQWKPOO5JBFXW0O8c
 | 
			
		||||
G5UWR+8YSDU6UvQragaPOy/qVuOvho2eF/eetGV1Ak3vywmiIVHYm9Bn0LoNkgYU
 | 
			
		||||
c9STy5cqAJxcTgy8+hVS/PJEbtoRSm4Iny8t4/mqOoZztkZTWMiJBb2DEbhzP6oH
 | 
			
		||||
jfRCTedAnRw3AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAutFIgTRZVYerIZfL9lvR
 | 
			
		||||
w9Eifvvo5KTZ3h+Bj+VzNnyw4Qc/IyXkPOu6SIiH9LQ3sCmWBdxpe+qr4l77rLj2
 | 
			
		||||
GYuMtESFfn1XVALzkYgC7JcPuTOjMfIiMByt+uFf8AV8x0IW/Qkuv+hEQcyM9vxK
 | 
			
		||||
3VZdLbCVIhNoEsysrxCpxcI=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
Tims test GCI CA
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB8DCCAZoCAQAwDQYJKoZIhvcNAQEEBQAwgYIxCzAJBgNVBAYTAkFVMRMwEQYD
 | 
			
		||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
 | 
			
		||||
cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2RldmVsb3BtZW50MRkwFwYDVQQDExBD
 | 
			
		||||
cnlwdFNvZnQgRGV2IENBMB4XDTk3MDMyMjEzMzQwNFoXDTk4MDMyMjEzMzQwNFow
 | 
			
		||||
gYIxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhC
 | 
			
		||||
cmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2Rl
 | 
			
		||||
dmVsb3BtZW50MRkwFwYDVQQDExBDcnlwdFNvZnQgRGV2IENBMFwwDQYJKoZIhvcN
 | 
			
		||||
AQEBBQADSwAwSAJBAOAOAqogG5QwAmLhzyO4CoRnx/wVy4NZP4dxJy83O1EnL0rw
 | 
			
		||||
OdsamJKvPOLHgSXo3gDu9uVyvCf/QJmZAmC5ml8CAwEAATANBgkqhkiG9w0BAQQF
 | 
			
		||||
AANBADRRS/GVdd7rAqRW6SdmgLJduOU2yq3avBu99kRqbp9A/dLu6r6jU+eP4oOA
 | 
			
		||||
TfdbFZtAAD2Hx9jUtY3tfdrJOb8= 
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICVjCCAgACAQAwDQYJKoZIhvcNAQEEBQAwgbUxCzAJBgNVBAYTAkFVMRMwEQYD
 | 
			
		||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
 | 
			
		||||
cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsTI1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9O
 | 
			
		||||
IEFVVEhPUklUSUVTMTQwMgYDVQQDEytaRVJPIFZBTFVFIENBIC0gREVNT05TVFJB
 | 
			
		||||
VElPTiBQVVJQT1NFUyBPTkxZMB4XDTk3MDQwMzEzMjI1NFoXDTk4MDQwMzEzMjI1
 | 
			
		||||
NFowgbUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQH
 | 
			
		||||
EwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsT
 | 
			
		||||
I1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9OIEFVVEhPUklUSUVTMTQwMgYDVQQDEyta
 | 
			
		||||
RVJPIFZBTFVFIENBIC0gREVNT05TVFJBVElPTiBQVVJQT1NFUyBPTkxZMFwwDQYJ
 | 
			
		||||
KoZIhvcNAQEBBQADSwAwSAJBAOZ7T7yqP/tyspcko3yPY1y0Cm2EmwNvzW4QgVXR
 | 
			
		||||
Fjs3HmJ4xtSpXdo6mwcGezL3Abt/aQXaxv9PU8xt+Jr0OFUCAwEAATANBgkqhkiG
 | 
			
		||||
9w0BAQQFAANBAOQpYmGgyCqCy1OljgJhCqQOu627oVlHzK1L+t9vBaMfn40AVUR4
 | 
			
		||||
WzQVWO31KTgi5vTK1U+3h46fgUWqQ0h+6rU=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIAwgKADAgECAgEAMA0GCSqGSIb3DQEBBAUAMGIxETAPBgNVBAcTCEludGVybmV0
 | 
			
		||||
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xh
 | 
			
		||||
c3MgMSBDQSAtIEluZGl2aWR1YWwgU3Vic2NyaWJlcjAeFw05NjA0MDgxMDIwMjda
 | 
			
		||||
Fw05NzA0MDgxMDIwMjdaMGIxETAPBgNVBAcTCEludGVybmV0MRcwFQYDVQQKEw5W
 | 
			
		||||
ZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xhc3MgMSBDQSAtIElu
 | 
			
		||||
ZGl2aWR1YWwgU3Vic2NyaWJlcjCAMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2
 | 
			
		||||
FKbPTdAFDdjKI9BvqrQpkmOOLPhvltcunXZLEbE2jVfJw/0cxrr+Hgi6M8qV6r7j
 | 
			
		||||
W80GqLd5HUQq7XPysVKDaBBwZJHXPmv5912dFEObbpdFmIFH0S3L3bty10w/cari
 | 
			
		||||
QPJUObwW7s987LrbP2wqsxaxhhKdrpM01bjV0Pc+qQIDAQABAAAAADANBgkqhkiG
 | 
			
		||||
9w0BAQQFAAOBgQA+1nJryNt8VBRjRr07ArDAV/3jAH7GjDc9jsrxZS68ost9v06C
 | 
			
		||||
TvTNKGL+LISNmFLXl+JXhgGB0JZ9fvyYzNgHQ46HBUng1H6voalfJgS2KdEo50wW
 | 
			
		||||
8EFZYMDkT1k4uynwJqkVN2QJK/2q4/A/VCov5h6SlM8Affg2W+1TLqvqkwAA
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
 subject=/L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
 | 
			
		||||
 issuer= /L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIEkzCCA/ygAwIBAgIRANDTUpSRL3nTFeMrMayFSPAwDQYJKoZIhvcNAQECBQAw
 | 
			
		||||
YjERMA8GA1UEBxMISW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQw
 | 
			
		||||
MgYDVQQLEytWZXJpU2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3Jp
 | 
			
		||||
YmVyMB4XDTk2MDYwNDAwMDAwMFoXDTk4MDYwNDIzNTk1OVowYjERMA8GA1UEBxMI
 | 
			
		||||
SW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQLEytWZXJp
 | 
			
		||||
U2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3JpYmVyMIGfMA0GCSqG
 | 
			
		||||
SIb3DQEBAQUAA4GNADCBiQKBgQC6A+2czKGRcYMfm8gdnk+0de99TDDzsqo0v5nb
 | 
			
		||||
RsbUmMcdRQ7nsMbRWe0SAb/9QoLTZ/cJ0iOBqdrkz7UpqqKarVoTSdlSMVM92tWp
 | 
			
		||||
3bJncZHQD1t4xd6lQVdI1/T6R+5J0T1ukOdsI9Jmf+F28S6g3R3L1SFwiHKeZKZv
 | 
			
		||||
z+793wIDAQABo4ICRzCCAkMwggIpBgNVHQMBAf8EggIdMIICGTCCAhUwggIRBgtg
 | 
			
		||||
hkgBhvhFAQcBATCCAgAWggGrVGhpcyBjZXJ0aWZpY2F0ZSBpbmNvcnBvcmF0ZXMg
 | 
			
		||||
YnkgcmVmZXJlbmNlLCBhbmQgaXRzIHVzZSBpcyBzdHJpY3RseSBzdWJqZWN0IHRv
 | 
			
		||||
LCB0aGUgVmVyaVNpZ24gQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQg
 | 
			
		||||
KENQUyksIGF2YWlsYWJsZSBhdDogaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL0NQ
 | 
			
		||||
Uy0xLjA7IGJ5IEUtbWFpbCBhdCBDUFMtcmVxdWVzdHNAdmVyaXNpZ24uY29tOyBv
 | 
			
		||||
ciBieSBtYWlsIGF0IFZlcmlTaWduLCBJbmMuLCAyNTkzIENvYXN0IEF2ZS4sIE1v
 | 
			
		||||
dW50YWluIFZpZXcsIENBIDk0MDQzIFVTQSBUZWwuICsxICg0MTUpIDk2MS04ODMw
 | 
			
		||||
IENvcHlyaWdodCAoYykgMTk5NiBWZXJpU2lnbiwgSW5jLiAgQWxsIFJpZ2h0cyBS
 | 
			
		||||
ZXNlcnZlZC4gQ0VSVEFJTiBXQVJSQU5USUVTIERJU0NMQUlNRUQgYW5kIExJQUJJ
 | 
			
		||||
TElUWSBMSU1JVEVELqAOBgxghkgBhvhFAQcBAQGhDgYMYIZIAYb4RQEHAQECMC8w
 | 
			
		||||
LRYraHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvQ1BTLTEuMDAU
 | 
			
		||||
BglghkgBhvhCAQEBAf8EBAMCAgQwDQYJKoZIhvcNAQECBQADgYEApRJRkNBqLLgs
 | 
			
		||||
53IR/d18ODdLOWMTZ+QOOxBrq460iBEdUwgF8vmPRX1ku7UiDeNzaLlurE6eFqHq
 | 
			
		||||
2zPyK5j60zfTLVJMWKcQWwTJLjHtXrW8pxhNtFc6Fdvy5ZkHnC/9NIl7/t4U6WqB
 | 
			
		||||
p4y+p7SdMIkEwIZfds0VbnQyX5MRUJY=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
 subject=/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
			
		||||
 issuer= /C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICMTCCAZoCBQKhAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
 | 
			
		||||
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMg
 | 
			
		||||
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
 | 
			
		||||
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
 | 
			
		||||
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyVxZ
 | 
			
		||||
nvIbigEUtBDfBEDb41evakVAj4QMC9Ez2dkRz+4CWB8l9yqoRAWq7AMfeH+ek7ma
 | 
			
		||||
AKojfdashaJjRcdyJ8z0TMZ1cdI5709C8HXfCpDGjiBvmA/4rCNfcCk2pMmG57Ga
 | 
			
		||||
IMtTpYXnPb59mv4kRTPcdhXtD6JxZExlLoFoRacCAwEAATANBgkqhkiG9w0BAQIF
 | 
			
		||||
AAOBgQB1Zmw+0c2B27X4LzZRtvdCvM1Cr9wO+hVs+GeTVzrrtpLotgHKjLeOQ7RJ
 | 
			
		||||
Zfk+7r11Ri7J/CVdqMcvi5uPaM+0nJcYwE3vH9mvgrPmZLiEXIqaB1JDYft0nls6
 | 
			
		||||
NvxMsvwaPxUupVs8G5DsiCnkWRb5zget7Ond2tIxik/W2O8XjQ==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 subject=/C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
 | 
			
		||||
 issuer= /C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICMTCCAZoCBQKmAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
 | 
			
		||||
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMg
 | 
			
		||||
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
 | 
			
		||||
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
 | 
			
		||||
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LJ1
 | 
			
		||||
9njQrlpQ9OlQqZ+M1++RlHDo0iSQdomF1t+s5gEXMoDwnZNHvJplnR+Xrr/phnVj
 | 
			
		||||
IIm9gFidBAydqMEk6QvlMXi9/C0MN2qeeIDpRnX57aP7E3vIwUzSo+/1PLBij0pd
 | 
			
		||||
O92VZ48TucE81qcmm+zDO3rZTbxtm+gVAePwR6kCAwEAATANBgkqhkiG9w0BAQIF
 | 
			
		||||
AAOBgQBT3dPwnCR+QKri/AAa19oM/DJhuBUNlvP6Vxt/M3yv6ZiaYch6s7f/sdyZ
 | 
			
		||||
g9ysEvxwyR84Qu1E9oAuW2szaayc01znX1oYx7EteQSWQZGZQbE8DbqEOcY7l/Am
 | 
			
		||||
yY7uvcxClf8exwI/VAx49byqYHwCaejcrOICdmHEPgPq0ook0Q==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										420
									
								
								apps/server2.pem
									
									
									
									
									
								
							
							
						
						
									
										420
									
								
								apps/server2.pem
									
									
									
									
									
								
							@@ -1,52 +1,376 @@
 | 
			
		||||
subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = Test Server Cert #2
 | 
			
		||||
issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Server test cert (1024 bit)
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIID6jCCAtKgAwIBAgIJALnu1NlVpZ60MA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV
 | 
			
		||||
BAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMSIwIAYDVQQLDBlGT1IgVEVT
 | 
			
		||||
VElORyBQVVJQT1NFUyBPTkxZMSUwIwYDVQQDDBxPcGVuU1NMIFRlc3QgSW50ZXJt
 | 
			
		||||
ZWRpYXRlIENBMB4XDTExMTIwODE0MDE0OFoXDTIxMTAxNjE0MDE0OFowZzELMAkG
 | 
			
		||||
A1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBU
 | 
			
		||||
RVNUSU5HIFBVUlBPU0VTIE9OTFkxHDAaBgNVBAMME1Rlc3QgU2VydmVyIENlcnQg
 | 
			
		||||
IzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrdi7j9yctG+L4EjBy
 | 
			
		||||
gjPmEqZzOJEQba26MoQGzglU7e5Xf59Rb/hgVQuKAoiZe7/R8rK4zJ4W7iXdXw0L
 | 
			
		||||
qBpyG8B5aGKeI32w+A9TcBApoXXL2CrYQEQjZwUIpLlYBIi2NkJj3nVkq5dgl1gO
 | 
			
		||||
ALiQ+W8jg3kzg5Ec9rimp9r93N8wsSL3awsafurmYCvOf7leHaMP1WJ/zDRGUNHG
 | 
			
		||||
/WtDjXc8ZUG1+6EXU9Jc2Fs+2Omf7fcN0l00AK/wPg8OaNS0rKyGq9JdIT9FRGV1
 | 
			
		||||
bXe/rx58FaE5CItdwCSYhJvF/O95LWQoxJXye5bCFLmvDTEyVq9FMSCptfsmbXjE
 | 
			
		||||
ZGsXAgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBeAwLAYJ
 | 
			
		||||
YIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1Ud
 | 
			
		||||
DgQWBBR52UaWWTKzZGDH/X4mWNcuqeQVazAfBgNVHSMEGDAWgBQ2w2yI55X+sL3s
 | 
			
		||||
zj49hqshgYfa2jANBgkqhkiG9w0BAQUFAAOCAQEANBW+XYLlHBqVY/31ie+3gRlS
 | 
			
		||||
LPfy4SIqn0t3RJjagT29MXprblBO2cbMO8VGjkQdKGpmMXjxbht2arOOUXRHX4n/
 | 
			
		||||
XTyn/QHEf0bcwIITMReO3DZUPAEw8hSjn9xEOM0IRVOCP+mH5fi74QzzQaZVCyYg
 | 
			
		||||
5VtLKdww/+sc0nCbKl2KWgDluriH0nfVx95qgW3mg9dhXRr0zmf1w2zkBHYpARYL
 | 
			
		||||
Dew6Z8EE4tS3HJu8/qM6meWzNtrfonQ3eiiMxjZBxzV46jchBwa2z9XYhP6AmpPb
 | 
			
		||||
oeTSzcQNbWsxaGYzWo46oLDUZmJOwSBawbS31bZNMCoPIY6ukoesCzFSsUKZww==
 | 
			
		||||
MIICLjCCAZcCAQEwDQYJKoZIhvcNAQEEBQAwWzELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYD
 | 
			
		||||
VQQDExJUZXN0IENBICgxMDI0IGJpdCkwHhcNOTcwNjA5MTM1NzU0WhcNOTgwNjA5
 | 
			
		||||
MTM1NzU0WjBkMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
 | 
			
		||||
A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxJDAiBgNVBAMTG1NlcnZlciB0ZXN0IGNl
 | 
			
		||||
cnQgKDEwMjQgYml0KTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsxH1PBPm
 | 
			
		||||
RkxrR11eV4bzNi4N9n11CI8nV29+ARlT1+qDe/mjVUvXlmsr1v/vf71G9GgqopSa
 | 
			
		||||
6RXrICLVdk/FYYYzhPvl1M+OrjaXDFO8BzBAF1Lnz6c7aRZvGRJNrRSr2nZEkqDf
 | 
			
		||||
JW9dY7r2VZEpD5QeuaRYUnuECkqeieB65GMCAwEAATANBgkqhkiG9w0BAQQFAAOB
 | 
			
		||||
gQCWsOta6C0wiVzXz8wPmJKyTrurMlgUss2iSuW9366iwofZddsNg7FXniMzkIf6
 | 
			
		||||
dp7jnmWZwKZ9cXsNUS2o4OL07qOk2HOywC0YsNZQsOBu1CBTYYkIefDiKFL1zQHh
 | 
			
		||||
8lwwNd4NP+OE3NzUNkCfh4DnFfg9WHkXUlD5UpxNRJ4gJA==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIIEowIBAAKCAQEA63Yu4/cnLRvi+BIwcoIz5hKmcziREG2tujKEBs4JVO3uV3+f
 | 
			
		||||
UW/4YFULigKImXu/0fKyuMyeFu4l3V8NC6gachvAeWhiniN9sPgPU3AQKaF1y9gq
 | 
			
		||||
2EBEI2cFCKS5WASItjZCY951ZKuXYJdYDgC4kPlvI4N5M4ORHPa4pqfa/dzfMLEi
 | 
			
		||||
92sLGn7q5mArzn+5Xh2jD9Vif8w0RlDRxv1rQ413PGVBtfuhF1PSXNhbPtjpn+33
 | 
			
		||||
DdJdNACv8D4PDmjUtKyshqvSXSE/RURldW13v68efBWhOQiLXcAkmISbxfzveS1k
 | 
			
		||||
KMSV8nuWwhS5rw0xMlavRTEgqbX7Jm14xGRrFwIDAQABAoIBAHLsTPihIfLnYIE5
 | 
			
		||||
x4GsQQ5zXeBw5ITDM37ktwHnQDC+rIzyUl1aLD1AZRBoKinXd4lOTqLZ4/NHKx4A
 | 
			
		||||
DYr58mZtWyUmqLOMmQVuHXTZBlp7XtYuXMMNovQwjQlp9LicBeoBU6gQ5PVMtubD
 | 
			
		||||
F4xGF89Sn0cTHW3iMkqTtQ5KcR1j57OcJO0FEb1vPvk2MXI5ZyAatUYE7YacbEzd
 | 
			
		||||
rg02uIwx3FqNSkuSI79uz4hMdV5TPtuhxx9nTwj9aLUhXFeZ0mn2PVgVzEnnMoJb
 | 
			
		||||
+znlsZDgzDlJqdaD744YGWh8Z3OEssB35KfzFcdOeO6yH8lmv2Zfznk7pNPT7LTb
 | 
			
		||||
Lae9VgkCgYEA92p1qnAB3NtJtNcaW53i0S5WJgS1hxWKvUDx3lTB9s8X9fHpqL1a
 | 
			
		||||
E94fDfWzp/hax6FefUKIvBOukPLQ6bYjTMiFoOHzVirghAIuIUoMI5VtLhwD1hKs
 | 
			
		||||
Lr7l/dptMgKb1nZHyXoKHRBthsy3K4+udsPi8TzMvYElgEqyQIe/Rk0CgYEA86GL
 | 
			
		||||
8HC6zLszzKERDPBxrboRmoFvVUCTQDhsfj1M8aR3nQ8V5LkdIJc7Wqm/Ggfk9QRf
 | 
			
		||||
rJ8M2WUMlU5CNnCn/KCrKzCNZIReze3fV+HnKdbcXGLvgbHPrhnz8yYehUFG+RGq
 | 
			
		||||
bVyDWRU94T38izy2s5qMYrMJWZEYyXncSPbfcPMCgYAtaXfxcZ+V5xYPQFARMtiX
 | 
			
		||||
5nZfggvDoJuXgx0h3tK/N2HBfcaSdzbaYLG4gTmZggc/jwnl2dl5E++9oSPhUdIG
 | 
			
		||||
3ONSFUbxsOsGr9PBvnKd8WZZyUCXAVRjPBzAzF+whzQNWCZy/5htnz9LN7YDI9s0
 | 
			
		||||
5113Q96cheDZPFydZY0hHQKBgQDVbEhNukM5xCiNcu+f2SaMnLp9EjQ4h5g3IvaP
 | 
			
		||||
5B16daw/Dw8LzcohWboqIxeAsze0GD/D1ZUJAEd0qBjC3g+a9BjefervCjKOzXng
 | 
			
		||||
38mEUm+6EwVjJSQcjSmycEs+Sr/kwr/8i5WYvU32+jk4tFgMoC+o6tQe/Uesf68k
 | 
			
		||||
z/dPVwKBgGbF7Vv1/3SmhlOy+zYyvJ0CrWtKxH9QP6tLIEgEpd8x7YTSuCH94yok
 | 
			
		||||
kToMXYA3sWNPt22GbRDZ+rcp4c7HkDx6I6vpdP9aQEwJTp0EPy0sgWr2XwYmreIQ
 | 
			
		||||
NFmkk8Itn9EY2R9VBaP7GLv5kvwxDdLAnmwGmzVtbmaVdxCaBwUk
 | 
			
		||||
MIICXgIBAAKBgQCzEfU8E+ZGTGtHXV5XhvM2Lg32fXUIjydXb34BGVPX6oN7+aNV
 | 
			
		||||
S9eWayvW/+9/vUb0aCqilJrpFesgItV2T8VhhjOE++XUz46uNpcMU7wHMEAXUufP
 | 
			
		||||
pztpFm8ZEk2tFKvadkSSoN8lb11juvZVkSkPlB65pFhSe4QKSp6J4HrkYwIDAQAB
 | 
			
		||||
AoGBAKy8jvb0Lzby8q11yNLf7+78wCVdYi7ugMHcYA1JVFK8+zb1WfSm44FLQo/0
 | 
			
		||||
dSChAjgz36TTexeLODPYxleJndjVcOMVzsLJjSM8dLpXsTS4FCeMbhw2s2u+xqKY
 | 
			
		||||
bbPWfk+HOTyJjfnkcC5Nbg44eOmruq0gSmBeUXVM5UntlTnxAkEA7TGCA3h7kx5E
 | 
			
		||||
Bl4zl2pc3gPAGt+dyfk5Po9mGJUUXhF5p2zueGmYWW74TmOWB1kzt4QRdYMzFePq
 | 
			
		||||
zfDNXEa1CwJBAMFErdY0xp0UJ13WwBbUTk8rujqQdHtjw0klhpbuKkjxu2hN0wwM
 | 
			
		||||
6p0D9qxF7JHaghqVRI0fAW/EE0OzdHMR9QkCQQDNR26dMFXKsoPu+vItljj/UEGf
 | 
			
		||||
QG7gERiQ4yxaFBPHgdpGo0kT31eh9x9hQGDkxTe0GNG/YSgCRvm8+C3TMcKXAkBD
 | 
			
		||||
dhGn36wkUFCddMSAM4NSJ1VN8/Z0y5HzCmI8dM3VwGtGMUQlxKxwOl30LEQzdS5M
 | 
			
		||||
0SWojNYXiT2gOBfBwtbhAkEAhafl5QEOIgUz+XazS/IlZ8goNKdDVfYgK3mHHjvv
 | 
			
		||||
nY5G+AuGebdNkXJr4KSWxDcN+C2i47zuj4QXA16MAOandA==
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
subject=/C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
 | 
			
		||||
issuer= /C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
 | 
			
		||||
notBefore=950413210656Z
 | 
			
		||||
notAfter =970412210656Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICCDCCAXECAQAwDQYJKoZIhvcNAQEEBQAwTjELMAkGA1UEBhMCVVMxHzAdBgNV
 | 
			
		||||
BAoUFkFUJlQgQmVsbCBMYWJvcmF0b3JpZXMxHjAcBgNVBAsUFVByb3RvdHlwZSBS
 | 
			
		||||
ZXNlYXJjaCBDQTAeFw05NTA0MTMyMTA2NTZaFw05NzA0MTIyMTA2NTZaME4xCzAJ
 | 
			
		||||
BgNVBAYTAlVTMR8wHQYDVQQKFBZBVCZUIEJlbGwgTGFib3JhdG9yaWVzMR4wHAYD
 | 
			
		||||
VQQLFBVQcm90b3R5cGUgUmVzZWFyY2ggQ0EwgZwwDQYJKoZIhvcNAQEBBQADgYoA
 | 
			
		||||
MIGGAoGAebOmgtSCl+wCYZc86UGYeTLY8cjmW2P0FN8ToT/u2pECCoFdrlycX0OR
 | 
			
		||||
3wt0ZhpFXLVNeDnHwEE9veNUih7pCL2ZBFqoIoQkB1lZmXRiVtjGonz8BLm/qrFM
 | 
			
		||||
YHb0lme/Ol+s118mwKVxnn6bSAeI/OXKhLaVdYZWk+aEaxEDkVkCAQ8wDQYJKoZI
 | 
			
		||||
hvcNAQEEBQADgYEAAZMG14lZmZ8bahkaHaTV9dQf4p2FZiQTFwHP9ZyGsXPC+LT5
 | 
			
		||||
dG5iTaRmyjNIJdPWohZDl97kAci79aBndvuEvRKOjLHs3WRGBIwERnAcnY9Mz8u/
 | 
			
		||||
zIHK23PjYVxGGaZd669OJwD0CYyqH22HH9nFUGaoJdsv39ChW0NRdLE9+y8=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICJjCCAY8CAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
 | 
			
		||||
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTc0M1oXDTAxMDYw
 | 
			
		||||
OTEzNTc0M1owWzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
 | 
			
		||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYDVQQDExJUZXN0IENBICgxMDI0
 | 
			
		||||
IGJpdCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKO7o8t116VP6cgybTsZ
 | 
			
		||||
DCZhr95nYlZuya3aCi1IKoztqwWnjbmDFIriOqGFPrZQ+moMETC9D59iRW/dFXSv
 | 
			
		||||
1F65ka/XY2hLh9exCCo7XuUcDs53Qp3bI3AmMqHjgzE8oO3ajyJAzJkTTOUecQU2
 | 
			
		||||
mw/gI4tMM0LqWMQS7luTy4+xAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAM7achv3v
 | 
			
		||||
hLQJcv/65eGEpBXM40ZDVoFQFFJWaY5p883HTqLB1x4FdzsXHH0QKBTcKpWwqyu4
 | 
			
		||||
YDm3fb8oDugw72bCzfyZK/zVZPR/hVlqI/fvU109Qoc+7oPvIXWky71HfcK6ZBCA
 | 
			
		||||
q30KIqGM/uoM60INq97qjDmCJapagcNBGQs=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIICXQIBAAKBgQCju6PLddelT+nIMm07GQwmYa/eZ2JWbsmt2gotSCqM7asFp425
 | 
			
		||||
gxSK4jqhhT62UPpqDBEwvQ+fYkVv3RV0r9ReuZGv12NoS4fXsQgqO17lHA7Od0Kd
 | 
			
		||||
2yNwJjKh44MxPKDt2o8iQMyZE0zlHnEFNpsP4COLTDNC6ljEEu5bk8uPsQIDAQAB
 | 
			
		||||
AoGAVZmpFZsDZfr0l2S9tLLwpjRWNOlKATQkno6q2WesT0eGLQufTciY+c8ypfU6
 | 
			
		||||
hyio8r5iUl/VhhdjhAtKx1mRpiotftHo/eYf8rtsrnprOnWG0bWjLjtIoMbcxGn2
 | 
			
		||||
J3bN6LJmbJMjDs0eJ3KnTu646F3nDUw2oGAwmpzKXA1KAP0CQQDRvQhxk2D3Pehs
 | 
			
		||||
HvG665u2pB5ipYQngEFlZO7RHJZzJOZEWSLuuMqaF/7pTfA5jiBvWqCgJeCRRInL
 | 
			
		||||
21ru4dlPAkEAx9jj7BgKn5TYnMoBSSe0afjsV9oApVpN1Nacb1YDtCwy+scp3++s
 | 
			
		||||
nFxlv98wxIlSdpwMUn+AUWfjiWR7Tu/G/wJBAJ/KjwZIrFVxewP0x2ILYsTRYLzz
 | 
			
		||||
MS4PDsO7FB+I0i7DbBOifXS2oNSpd3I0CNMwrxFnUHzynpbOStVfN3ZL5w0CQQCa
 | 
			
		||||
pwFahxBRhkJKsxhjoFJBX9yl75JoY4Wvm5Tbo9ih6UJaRx3kqfkN14L2BKYcsZgb
 | 
			
		||||
KY9vmDOYy6iNfjDeWTfJAkBkfPUb8oTJ/nSP5zN6sqGxSY4krc4xLxpRmxoJ8HL2
 | 
			
		||||
XfhqXkTzbU13RX9JJ/NZ8vQN9Vm2NhxRGJocQkmcdVtJ
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
MIICYDCCAiACAgEoMAkGBSsOAwINBQAwfDELMAkGA1UEBhMCVVMxNjA0BgNVBAoT
 | 
			
		||||
LU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFuZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZ
 | 
			
		||||
MBcGA1UECxMQVGVzdCBFbnZpcm9ubWVudDEaMBgGA1UECxMRRFNTLU5BU0EtUGls
 | 
			
		||||
b3QtQ0EwHhcNOTYwMjI2MTYzMjQ1WhcNOTcwMjI1MTYzMjQ1WjB8MQswCQYDVQQG
 | 
			
		||||
EwJVUzE2MDQGA1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFk
 | 
			
		||||
bWluaXN0cmF0aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MRowGAYDVQQL
 | 
			
		||||
ExFEU1MtTkFTQS1QaWxvdC1DQTCB8jAJBgUrDgMCDAUAA4HkADCB4AJBAMA/ssKb
 | 
			
		||||
hPNUG7ZlASfVwEJU21O5OyF/iyBzgHI1O8eOhJGUYO8cc8wDMjR508Mr9cp6Uhl/
 | 
			
		||||
ZB7FV5GkLNEnRHYCQQDUEaSg45P2qrDwixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLb
 | 
			
		||||
bn3QK74T2IxY1yY+kCNq8XrIqf5fJJzIH0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3
 | 
			
		||||
fVd0geUCQQCzCFUQAh+ZkEmp5804cs6ZWBhrUAfnra8lJItYo9xPcXgdIfLfibcX
 | 
			
		||||
R71UsyO77MRD7B0+Ag2tq794IleCVcEEMAkGBSsOAwINBQADLwAwLAIUUayDfreR
 | 
			
		||||
Yh2WeU86/pHNdkUC1IgCFEfxe1f0oMpxJyrJ5XIxTi7vGdoK
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICGTCCAdgCAwCqTDAJBgUrDgMCDQUAMHwxCzAJBgNVBAYTAlVTMTYwNAYDVQQK
 | 
			
		||||
Ey1OYXRpb25hbCBBZXJvbmF1dGljcyBhbmQgU3BhY2UgQWRtaW5pc3RyYXRpb24x
 | 
			
		||||
GTAXBgNVBAsTEFRlc3QgRW52aXJvbm1lbnQxGjAYBgNVBAsTEURTUy1OQVNBLVBp
 | 
			
		||||
bG90LUNBMB4XDTk2MDUxNDE3MDE0MVoXDTk3MDUxNDE3MDE0MVowMzELMAkGA1UE
 | 
			
		||||
BhMCQVUxDzANBgNVBAoTBk1pbmNvbTETMBEGA1UEAxMKRXJpYyBZb3VuZzCB8jAJ
 | 
			
		||||
BgUrDgMCDAUAA4HkADCB4AJBAKbfHz6vE6pXXMTpswtGUec2tvnfLJUsoxE9qs4+
 | 
			
		||||
ObZX7LmLvragNPUeiTJx7UOWZ5DfBj6bXLc8eYne0lP1g3ACQQDUEaSg45P2qrDw
 | 
			
		||||
ixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLbbn3QK74T2IxY1yY+kCNq8XrIqf5fJJzI
 | 
			
		||||
H0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3fVd0geUCQQCzCFUQAh+ZkEmp5804cs6Z
 | 
			
		||||
WBhrUAfnra8lJItYo9xPcXgdIfLfibcXR71UsyO77MRD7B0+Ag2tq794IleCVcEE
 | 
			
		||||
MAkGBSsOAwINBQADMAAwLQIUWsuuJRE3VT4ueWkWMAJMJaZjj1ECFQCYY0zX4bzM
 | 
			
		||||
LC7obsrHD8XAHG+ZRG==
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICTTCCAbagAwIBAgIBADANBgkqhkiG9w0BAQQFADBMMQswCQYDVQQGEwJHQjEM
 | 
			
		||||
MAoGA1UEChMDVUNMMRgwFgYDVQQLEw9JQ0UtVEVMIFByb2plY3QxFTATBgNVBAMT
 | 
			
		||||
DFRydXN0RmFjdG9yeTAeFw05NzA0MjIxNDM5MTRaFw05ODA0MjIxNDM5MTRaMEwx
 | 
			
		||||
CzAJBgNVBAYTAkdCMQwwCgYDVQQKEwNVQ0wxGDAWBgNVBAsTD0lDRS1URUwgUHJv
 | 
			
		||||
amVjdDEVMBMGA1UEAxMMVHJ1c3RGYWN0b3J5MIGcMAoGBFUIAQECAgQAA4GNADCB
 | 
			
		||||
iQKBgQCEieR8NcXkUW1f0G6aC6u0i8q/98JqS6RxK5YmHIGKCkuTWAUjzLfUa4dt
 | 
			
		||||
U9igGCjTuxaDqlzEim+t/02pmiBZT9HaX++35MjQPUWmsChcYU5WyzGErXi+rQaw
 | 
			
		||||
zlwS73zM8qiPj/97lXYycWhgL0VaiDSPxRXEUdWoaGruom4mNQIDAQABo0IwQDAd
 | 
			
		||||
BgNVHQ4EFgQUHal1LZr7oVg5z6lYzrhTgZRCmcUwDgYDVR0PAQH/BAQDAgH2MA8G
 | 
			
		||||
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAfaggfl6FZoioecjv0dq8
 | 
			
		||||
/DXo/u11iMZvXn08gjX/zl2b4wtPbShOSY5FhkSm8GeySasz+/Nwb/uzfnIhokWi
 | 
			
		||||
lfPZHtlCWtXbIy/TN51eJyq04ceDCQDWvLC2enVg9KB+GJ34b5c5VaPRzq8MBxsA
 | 
			
		||||
S7ELuYGtmYgYm9NZOIr7yU0=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB6jCCAZQCAgEtMA0GCSqGSIb3DQEBBAUAMIGAMQswCQYDVQQGEwJVUzE2MDQG
 | 
			
		||||
A1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFkbWluaXN0cmF0
 | 
			
		||||
aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MR4wHAYDVQQLExVNRDUtUlNB
 | 
			
		||||
LU5BU0EtUGlsb3QtQ0EwHhcNOTYwNDMwMjIwNTAwWhcNOTcwNDMwMjIwNTAwWjCB
 | 
			
		||||
gDELMAkGA1UEBhMCVVMxNjA0BgNVBAoTLU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFu
 | 
			
		||||
ZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZMBcGA1UECxMQVGVzdCBFbnZpcm9ubWVu
 | 
			
		||||
dDEeMBwGA1UECxMVTUQ1LVJTQS1OQVNBLVBpbG90LUNBMFkwCgYEVQgBAQICAgAD
 | 
			
		||||
SwAwSAJBALmmX5+GqAvcrWK13rfDrNX9UfeA7f+ijyBgeFQjYUoDpFqapw4nzQBL
 | 
			
		||||
bAXug8pKkRwa2Zh8YODhXsRWu2F/UckCAwEAATANBgkqhkiG9w0BAQQFAANBAH9a
 | 
			
		||||
OBA+QCsjxXgnSqHx04gcU8S49DVUb1f2XVoLnHlIb8RnX0k5O6mpHT5eti9bLkiW
 | 
			
		||||
GJNMJ4L0AJ/ac+SmHZc=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICajCCAdMCBDGA0QUwDQYJKoZIhvcNAQEEBQAwfTELMAkGA1UEBhMCQ2ExDzAN
 | 
			
		||||
BgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmlsaXR5IEFjY2VwdGVkMR8w
 | 
			
		||||
HQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRwwGgYDVQQDExNFbnRydXN0
 | 
			
		||||
IERlbW8gV2ViIENBMB4XDTk2MDQyNjEzMzUwMVoXDTA2MDQyNjEzMzUwMVowfTEL
 | 
			
		||||
MAkGA1UEBhMCQ2ExDzANBgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmls
 | 
			
		||||
aXR5IEFjY2VwdGVkMR8wHQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRww
 | 
			
		||||
GgYDVQQDExNFbnRydXN0IERlbW8gV2ViIENBMIGdMA0GCSqGSIb3DQEBAQUAA4GL
 | 
			
		||||
ADCBhwKBgQCaroS7O1DA0hm4IefNYU1cx/nqOmzEnk291d1XqznDeF4wEgakbkCc
 | 
			
		||||
zTKxK791yNpXG5RmngqH7cygDRTHZJ6mfCRn0wGC+AI00F2vYTGqPGRQL1N3lZT0
 | 
			
		||||
YDKFC0SQeMMjFIZ1aeQigroFQnHo0VB3zWIMpNkka8PY9lxHZAmWwQIBAzANBgkq
 | 
			
		||||
hkiG9w0BAQQFAAOBgQBAx0UMVA1s54lMQyXjMX5kj99FJN5itb8bK1Rk+cegPQPF
 | 
			
		||||
cWO9SEWyEjjBjIkjjzAwBkaEszFsNGxemxtXvwjIm1xEUMTVlPEWTs2qnDvAUA9W
 | 
			
		||||
YqhWbhH0toGT36236QAsqCZ76rbTRVSSX2BHyJwJMG2tCRv7kRJ//NIgxj3H4w==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICJzCCAZACAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
 | 
			
		||||
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTczN1oXDTAxMDYw
 | 
			
		||||
OTEzNTczN1owXDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
 | 
			
		||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYDVQQDExNUZXN0IFBDQSAoMTAy
 | 
			
		||||
NCBiaXQpMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdoWk/3+WcMlfjIrkg
 | 
			
		||||
40ketmnQaEogQe1LLcuOJV6rKfUSAsPgwgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp
 | 
			
		||||
22Jp85PmemiDzyUIStwk72qhp1imbANZvlmlCFKiQrjUyuDfu4TABmn+kkt3vR1Y
 | 
			
		||||
BEOGt+IFye1UBVSATVdRJ2UVhwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABNA1u/S
 | 
			
		||||
Cg/LJZWb7GliiKJsvuhxlE4E5JxQF2zMub/CSNbF97//tYSyj96sxeFQxZXbcjm9
 | 
			
		||||
xt6mr/xNLA4szNQMJ4P+L7b5e/jC5DSqlwS+CUYJgaFs/SP+qJoCSu1bR3IM9XWO
 | 
			
		||||
cRBpDmcBbYLkSyB92WURvsZ1LtjEcn+cdQVI
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIICXAIBAAKBgQCdoWk/3+WcMlfjIrkg40ketmnQaEogQe1LLcuOJV6rKfUSAsPg
 | 
			
		||||
wgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp22Jp85PmemiDzyUIStwk72qhp1imbANZ
 | 
			
		||||
vlmlCFKiQrjUyuDfu4TABmn+kkt3vR1YBEOGt+IFye1UBVSATVdRJ2UVhwIDAQAB
 | 
			
		||||
AoGAba4fTtuap5l7/8ZsbE7Z1O32KJY4ZcOZukLOLUUhXxXduT+FTgGWujc0/rgc
 | 
			
		||||
z9qYCLlNZHOouMYTgtSfYvuMuLZ11VIt0GYH+nRioLShE59Yy+zCRyC+gPigS1kz
 | 
			
		||||
xvo14AsOIPYV14Tk/SsHyq6E0eTk7VzaIE197giiINUERPECQQDSKmtPTh/lRKw7
 | 
			
		||||
HSZSM0I1mFWn/1zqrAbontRQY5w98QWIOe5qmzYyFbPXYT3d9BzlsMyhgiRNoBbD
 | 
			
		||||
yvohSHXJAkEAwAHx6ezAZeWWzD5yXD36nyjpkVCw7Tk7TSmOceLJMWt1QcrCfqlS
 | 
			
		||||
xA5jjpQ6Z8suU5DdtWAryM2sAir1WisYzwJAd6Zcx56jvAQ3xcPXsE6scBTVFzrj
 | 
			
		||||
7FqZ6E+cclPzfLQ+QQsyOBE7bpI6e/FJppY26XGZXo3YGzV8IGXrt40oOQJALETG
 | 
			
		||||
h86EFXo3qGOFbmsDy4pdP5nBERCu8X1xUCSfintiD4c2DInxgS5oGclnJeMcjTvL
 | 
			
		||||
QjQoJCX3UJCi/OUO1QJBAKgcDHWjMvt+l1pjJBsSEZ0HX9AAIIVx0RQmbFGS+F2Q
 | 
			
		||||
hhu5l77WnnZOQ9vvhV5u7NPCUF9nhU3jh60qWWO8mkc=
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
subject=/C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
 | 
			
		||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
 | 
			
		||||
notBefore=941104185834Z
 | 
			
		||||
notAfter =991103185834Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICIzCCAZACBQJBAAAWMA0GCSqGSIb3DQEBAgUAMFwxCzAJBgNVBAYTAlVTMSAw
 | 
			
		||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVy
 | 
			
		||||
Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDQxODU4MzRaFw05
 | 
			
		||||
OTExMDMxODU4MzRaMFwxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBT
 | 
			
		||||
ZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9u
 | 
			
		||||
IEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCk+4Fie84QJ93o
 | 
			
		||||
975sbsZwmdu41QUDaSiCnHJ/lj+O7Kwpkj+KFPhCdr69XQO5kNTQvAayUTNfxMK/
 | 
			
		||||
touPmbZiImDd298ggrTKoi8tUO2UMt7gVY3UaOLgTNLNBRYulWZcYVI4HlGogqHE
 | 
			
		||||
7yXpCuaLK44xZtn42f29O2nZ6wIDAQABMA0GCSqGSIb3DQEBAgUAA34AdrW2EP4j
 | 
			
		||||
9/dZYkuwX5zBaLxJu7NJbyFHXSudVMQAKD+YufKKg5tgf+tQx6sFEC097TgCwaVI
 | 
			
		||||
0v5loMC86qYjFmZsGySp8+x5NRhPJsjjr1BKx6cxa9B8GJ1Qv6km+iYrRpwUqbtb
 | 
			
		||||
MJhCKLVLU7tDCZJAuqiqWqTGtotXTcU=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
subject=/C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
 | 
			
		||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
 | 
			
		||||
notBefore=941109235417Z
 | 
			
		||||
notAfter =991231235417Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICKTCCAZYCBQJBAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMSAw
 | 
			
		||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJl
 | 
			
		||||
IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDkyMzU0MTda
 | 
			
		||||
Fw05OTEyMzEyMzU0MTdaMF8xCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0
 | 
			
		||||
YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJlIFNlcnZlciBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCSznrB
 | 
			
		||||
roM+WqqJg1esJQF2DK2ujiw3zus1eGRUA+WEQFHJv48I4oqCCNIWhjdV6bEhAq12
 | 
			
		||||
aIGaBaJLyUslZiJWbIgHj/eBWW2EB2VwE3F2Ppt3TONQiVaYSLkdpykaEy5KEVmc
 | 
			
		||||
HhXVSVQsczppgrGXOZxtcGdI5d0t1sgeewIDAQABMA0GCSqGSIb3DQEBAgUAA34A
 | 
			
		||||
iNHReSHO4ovo+MF9NFM/YYPZtgs4F7boviGNjwC4i1N+RGceIr2XJ+CchcxK9oU7
 | 
			
		||||
suK+ktPlDemvXA4MRpX/oRxePug2WHpzpgr4IhFrwwk4fia7c+8AvQKk8xQNMD9h
 | 
			
		||||
cHsg/jKjn7P0Z1LctO6EjJY2IN6BCINxIYoPnqk=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
subject=/C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
 | 
			
		||||
	/OU=Certification Services Division/CN=Thawte Server CA
 | 
			
		||||
	/Email=server-certs@thawte.com
 | 
			
		||||
issuer= /C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
 | 
			
		||||
	/OU=Certification Services Division/CN=Thawte Server CA
 | 
			
		||||
	/Email=server-certs@thawte.com
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIC+TCCAmICAQAwDQYJKoZIhvcNAQEEBQAwgcQxCzAJBgNVBAYTAlpBMRUwEwYD
 | 
			
		||||
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
 | 
			
		||||
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
 | 
			
		||||
dmljZXMgRGl2aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkq
 | 
			
		||||
hkiG9w0BCQEWF3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMB4XDTk2MDcyNzE4MDc1
 | 
			
		||||
N1oXDTk4MDcyNzE4MDc1N1owgcQxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0
 | 
			
		||||
ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMUVGhhd3RlIENv
 | 
			
		||||
bnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
 | 
			
		||||
aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkqhkiG9w0BCQEW
 | 
			
		||||
F3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
 | 
			
		||||
iQKBgQDTpFBuyP9Wa+bPXbbqDGh1R6KqwtqEJfyo9EdR2oW1IHSUhh4PdcnpCGH1
 | 
			
		||||
Bm0wbhUZAulSwGLbTZme4moMRDjN/r7jZAlwxf6xaym2L0nIO9QnBCUQly/nkG3A
 | 
			
		||||
KEKZ10xD3sP1IW1Un13DWOHA5NlbsLjctHvfNjrCtWYiEtaHDQIDAQABMA0GCSqG
 | 
			
		||||
SIb3DQEBBAUAA4GBAIsvn7ifX3RUIrvYXtpI4DOfARkTogwm6o7OwVdl93yFhDcX
 | 
			
		||||
7h5t0XZ11MUAMziKdde3rmTvzUYIUCYoY5b032IwGMTvdiclK+STN6NP2m5nvFAM
 | 
			
		||||
qJT5gC5O+j/jBuZRQ4i0AMYQr5F4lT8oBJnhgafw6PL8aDY2vMHGSPl9+7uf
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIDDTCCAnYCAQAwDQYJKoZIhvcNAQEEBQAwgc4xCzAJBgNVBAYTAlpBMRUwEwYD
 | 
			
		||||
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
 | 
			
		||||
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
 | 
			
		||||
dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBD
 | 
			
		||||
QTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTAeFw05
 | 
			
		||||
NjA3MjcxODA3MTRaFw05ODA3MjcxODA3MTRaMIHOMQswCQYDVQQGEwJaQTEVMBMG
 | 
			
		||||
A1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xHTAbBgNVBAoT
 | 
			
		||||
FFRoYXd0ZSBDb25zdWx0aW5nIGNjMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNl
 | 
			
		||||
cnZpY2VzIERpdmlzaW9uMSEwHwYDVQQDExhUaGF3dGUgUHJlbWl1bSBTZXJ2ZXIg
 | 
			
		||||
Q0ExKDAmBgkqhkiG9w0BCQEWGXByZW1pdW0tc2VydmVyQHRoYXd0ZS5jb20wgZ8w
 | 
			
		||||
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANI2NmqL18JbntqBQWKPOO5JBFXW0O8c
 | 
			
		||||
G5UWR+8YSDU6UvQragaPOy/qVuOvho2eF/eetGV1Ak3vywmiIVHYm9Bn0LoNkgYU
 | 
			
		||||
c9STy5cqAJxcTgy8+hVS/PJEbtoRSm4Iny8t4/mqOoZztkZTWMiJBb2DEbhzP6oH
 | 
			
		||||
jfRCTedAnRw3AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAutFIgTRZVYerIZfL9lvR
 | 
			
		||||
w9Eifvvo5KTZ3h+Bj+VzNnyw4Qc/IyXkPOu6SIiH9LQ3sCmWBdxpe+qr4l77rLj2
 | 
			
		||||
GYuMtESFfn1XVALzkYgC7JcPuTOjMfIiMByt+uFf8AV8x0IW/Qkuv+hEQcyM9vxK
 | 
			
		||||
3VZdLbCVIhNoEsysrxCpxcI=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
Tims test GCI CA
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB8DCCAZoCAQAwDQYJKoZIhvcNAQEEBQAwgYIxCzAJBgNVBAYTAkFVMRMwEQYD
 | 
			
		||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
 | 
			
		||||
cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2RldmVsb3BtZW50MRkwFwYDVQQDExBD
 | 
			
		||||
cnlwdFNvZnQgRGV2IENBMB4XDTk3MDMyMjEzMzQwNFoXDTk4MDMyMjEzMzQwNFow
 | 
			
		||||
gYIxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhC
 | 
			
		||||
cmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2Rl
 | 
			
		||||
dmVsb3BtZW50MRkwFwYDVQQDExBDcnlwdFNvZnQgRGV2IENBMFwwDQYJKoZIhvcN
 | 
			
		||||
AQEBBQADSwAwSAJBAOAOAqogG5QwAmLhzyO4CoRnx/wVy4NZP4dxJy83O1EnL0rw
 | 
			
		||||
OdsamJKvPOLHgSXo3gDu9uVyvCf/QJmZAmC5ml8CAwEAATANBgkqhkiG9w0BAQQF
 | 
			
		||||
AANBADRRS/GVdd7rAqRW6SdmgLJduOU2yq3avBu99kRqbp9A/dLu6r6jU+eP4oOA
 | 
			
		||||
TfdbFZtAAD2Hx9jUtY3tfdrJOb8= 
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICVjCCAgACAQAwDQYJKoZIhvcNAQEEBQAwgbUxCzAJBgNVBAYTAkFVMRMwEQYD
 | 
			
		||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
 | 
			
		||||
cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsTI1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9O
 | 
			
		||||
IEFVVEhPUklUSUVTMTQwMgYDVQQDEytaRVJPIFZBTFVFIENBIC0gREVNT05TVFJB
 | 
			
		||||
VElPTiBQVVJQT1NFUyBPTkxZMB4XDTk3MDQwMzEzMjI1NFoXDTk4MDQwMzEzMjI1
 | 
			
		||||
NFowgbUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQH
 | 
			
		||||
EwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsT
 | 
			
		||||
I1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9OIEFVVEhPUklUSUVTMTQwMgYDVQQDEyta
 | 
			
		||||
RVJPIFZBTFVFIENBIC0gREVNT05TVFJBVElPTiBQVVJQT1NFUyBPTkxZMFwwDQYJ
 | 
			
		||||
KoZIhvcNAQEBBQADSwAwSAJBAOZ7T7yqP/tyspcko3yPY1y0Cm2EmwNvzW4QgVXR
 | 
			
		||||
Fjs3HmJ4xtSpXdo6mwcGezL3Abt/aQXaxv9PU8xt+Jr0OFUCAwEAATANBgkqhkiG
 | 
			
		||||
9w0BAQQFAANBAOQpYmGgyCqCy1OljgJhCqQOu627oVlHzK1L+t9vBaMfn40AVUR4
 | 
			
		||||
WzQVWO31KTgi5vTK1U+3h46fgUWqQ0h+6rU=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIAwgKADAgECAgEAMA0GCSqGSIb3DQEBBAUAMGIxETAPBgNVBAcTCEludGVybmV0
 | 
			
		||||
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xh
 | 
			
		||||
c3MgMSBDQSAtIEluZGl2aWR1YWwgU3Vic2NyaWJlcjAeFw05NjA0MDgxMDIwMjda
 | 
			
		||||
Fw05NzA0MDgxMDIwMjdaMGIxETAPBgNVBAcTCEludGVybmV0MRcwFQYDVQQKEw5W
 | 
			
		||||
ZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xhc3MgMSBDQSAtIElu
 | 
			
		||||
ZGl2aWR1YWwgU3Vic2NyaWJlcjCAMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2
 | 
			
		||||
FKbPTdAFDdjKI9BvqrQpkmOOLPhvltcunXZLEbE2jVfJw/0cxrr+Hgi6M8qV6r7j
 | 
			
		||||
W80GqLd5HUQq7XPysVKDaBBwZJHXPmv5912dFEObbpdFmIFH0S3L3bty10w/cari
 | 
			
		||||
QPJUObwW7s987LrbP2wqsxaxhhKdrpM01bjV0Pc+qQIDAQABAAAAADANBgkqhkiG
 | 
			
		||||
9w0BAQQFAAOBgQA+1nJryNt8VBRjRr07ArDAV/3jAH7GjDc9jsrxZS68ost9v06C
 | 
			
		||||
TvTNKGL+LISNmFLXl+JXhgGB0JZ9fvyYzNgHQ46HBUng1H6voalfJgS2KdEo50wW
 | 
			
		||||
8EFZYMDkT1k4uynwJqkVN2QJK/2q4/A/VCov5h6SlM8Affg2W+1TLqvqkwAA
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
 subject=/L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
 | 
			
		||||
 issuer= /L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIEkzCCA/ygAwIBAgIRANDTUpSRL3nTFeMrMayFSPAwDQYJKoZIhvcNAQECBQAw
 | 
			
		||||
YjERMA8GA1UEBxMISW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQw
 | 
			
		||||
MgYDVQQLEytWZXJpU2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3Jp
 | 
			
		||||
YmVyMB4XDTk2MDYwNDAwMDAwMFoXDTk4MDYwNDIzNTk1OVowYjERMA8GA1UEBxMI
 | 
			
		||||
SW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQLEytWZXJp
 | 
			
		||||
U2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3JpYmVyMIGfMA0GCSqG
 | 
			
		||||
SIb3DQEBAQUAA4GNADCBiQKBgQC6A+2czKGRcYMfm8gdnk+0de99TDDzsqo0v5nb
 | 
			
		||||
RsbUmMcdRQ7nsMbRWe0SAb/9QoLTZ/cJ0iOBqdrkz7UpqqKarVoTSdlSMVM92tWp
 | 
			
		||||
3bJncZHQD1t4xd6lQVdI1/T6R+5J0T1ukOdsI9Jmf+F28S6g3R3L1SFwiHKeZKZv
 | 
			
		||||
z+793wIDAQABo4ICRzCCAkMwggIpBgNVHQMBAf8EggIdMIICGTCCAhUwggIRBgtg
 | 
			
		||||
hkgBhvhFAQcBATCCAgAWggGrVGhpcyBjZXJ0aWZpY2F0ZSBpbmNvcnBvcmF0ZXMg
 | 
			
		||||
YnkgcmVmZXJlbmNlLCBhbmQgaXRzIHVzZSBpcyBzdHJpY3RseSBzdWJqZWN0IHRv
 | 
			
		||||
LCB0aGUgVmVyaVNpZ24gQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQg
 | 
			
		||||
KENQUyksIGF2YWlsYWJsZSBhdDogaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL0NQ
 | 
			
		||||
Uy0xLjA7IGJ5IEUtbWFpbCBhdCBDUFMtcmVxdWVzdHNAdmVyaXNpZ24uY29tOyBv
 | 
			
		||||
ciBieSBtYWlsIGF0IFZlcmlTaWduLCBJbmMuLCAyNTkzIENvYXN0IEF2ZS4sIE1v
 | 
			
		||||
dW50YWluIFZpZXcsIENBIDk0MDQzIFVTQSBUZWwuICsxICg0MTUpIDk2MS04ODMw
 | 
			
		||||
IENvcHlyaWdodCAoYykgMTk5NiBWZXJpU2lnbiwgSW5jLiAgQWxsIFJpZ2h0cyBS
 | 
			
		||||
ZXNlcnZlZC4gQ0VSVEFJTiBXQVJSQU5USUVTIERJU0NMQUlNRUQgYW5kIExJQUJJ
 | 
			
		||||
TElUWSBMSU1JVEVELqAOBgxghkgBhvhFAQcBAQGhDgYMYIZIAYb4RQEHAQECMC8w
 | 
			
		||||
LRYraHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvQ1BTLTEuMDAU
 | 
			
		||||
BglghkgBhvhCAQEBAf8EBAMCAgQwDQYJKoZIhvcNAQECBQADgYEApRJRkNBqLLgs
 | 
			
		||||
53IR/d18ODdLOWMTZ+QOOxBrq460iBEdUwgF8vmPRX1ku7UiDeNzaLlurE6eFqHq
 | 
			
		||||
2zPyK5j60zfTLVJMWKcQWwTJLjHtXrW8pxhNtFc6Fdvy5ZkHnC/9NIl7/t4U6WqB
 | 
			
		||||
p4y+p7SdMIkEwIZfds0VbnQyX5MRUJY=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
 subject=/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
			
		||||
 issuer= /C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICMTCCAZoCBQKhAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
 | 
			
		||||
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMg
 | 
			
		||||
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
 | 
			
		||||
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
 | 
			
		||||
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyVxZ
 | 
			
		||||
nvIbigEUtBDfBEDb41evakVAj4QMC9Ez2dkRz+4CWB8l9yqoRAWq7AMfeH+ek7ma
 | 
			
		||||
AKojfdashaJjRcdyJ8z0TMZ1cdI5709C8HXfCpDGjiBvmA/4rCNfcCk2pMmG57Ga
 | 
			
		||||
IMtTpYXnPb59mv4kRTPcdhXtD6JxZExlLoFoRacCAwEAATANBgkqhkiG9w0BAQIF
 | 
			
		||||
AAOBgQB1Zmw+0c2B27X4LzZRtvdCvM1Cr9wO+hVs+GeTVzrrtpLotgHKjLeOQ7RJ
 | 
			
		||||
Zfk+7r11Ri7J/CVdqMcvi5uPaM+0nJcYwE3vH9mvgrPmZLiEXIqaB1JDYft0nls6
 | 
			
		||||
NvxMsvwaPxUupVs8G5DsiCnkWRb5zget7Ond2tIxik/W2O8XjQ==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 subject=/C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
 | 
			
		||||
 issuer= /C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICMTCCAZoCBQKmAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
 | 
			
		||||
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMg
 | 
			
		||||
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
 | 
			
		||||
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
 | 
			
		||||
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LJ1
 | 
			
		||||
9njQrlpQ9OlQqZ+M1++RlHDo0iSQdomF1t+s5gEXMoDwnZNHvJplnR+Xrr/phnVj
 | 
			
		||||
IIm9gFidBAydqMEk6QvlMXi9/C0MN2qeeIDpRnX57aP7E3vIwUzSo+/1PLBij0pd
 | 
			
		||||
O92VZ48TucE81qcmm+zDO3rZTbxtm+gVAePwR6kCAwEAATANBgkqhkiG9w0BAQIF
 | 
			
		||||
AAOBgQBT3dPwnCR+QKri/AAa19oM/DJhuBUNlvP6Vxt/M3yv6ZiaYch6s7f/sdyZ
 | 
			
		||||
g9ysEvxwyR84Qu1E9oAuW2szaayc01znX1oYx7EteQSWQZGZQbE8DbqEOcY7l/Am
 | 
			
		||||
yY7uvcxClf8exwI/VAx49byqYHwCaejcrOICdmHEPgPq0ook0Q==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 
 | 
			
		||||
@@ -73,12 +73,12 @@ static const char *sess_id_usage[] = {
 | 
			
		||||
    "usage: sess_id args\n",
 | 
			
		||||
    "\n",
 | 
			
		||||
    " -inform arg     - input format - default PEM (DER or PEM)\n",
 | 
			
		||||
    " -outform arg    - output format - default PEM (PEM, DER or NSS)\n",
 | 
			
		||||
    " -outform arg    - output format - default PEM\n",
 | 
			
		||||
    " -in arg         - input file - default stdin\n",
 | 
			
		||||
    " -out arg        - output file - default stdout\n",
 | 
			
		||||
    " -text           - print ssl session id details\n",
 | 
			
		||||
    " -cert           - output certificate \n",
 | 
			
		||||
    " -noout          - no output of encoded session info\n",
 | 
			
		||||
    " -noout          - no CRL output\n",
 | 
			
		||||
    " -context arg    - set the session ID context\n",
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
@@ -90,7 +90,6 @@ int MAIN(int, char **);
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    SSL_SESSION *x = NULL;
 | 
			
		||||
    X509 *peer = NULL;
 | 
			
		||||
    int ret = 1, i, num, badops = 0;
 | 
			
		||||
    BIO *out = NULL;
 | 
			
		||||
    int informat, outformat;
 | 
			
		||||
@@ -158,15 +157,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    if (x == NULL) {
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    peer = SSL_SESSION_get0_peer(x);
 | 
			
		||||
 | 
			
		||||
    if (context) {
 | 
			
		||||
        size_t ctx_len = strlen(context);
 | 
			
		||||
        if (ctx_len > SSL_MAX_SID_CTX_LENGTH) {
 | 
			
		||||
        x->sid_ctx_length = strlen(context);
 | 
			
		||||
        if (x->sid_ctx_length > SSL_MAX_SID_CTX_LENGTH) {
 | 
			
		||||
            BIO_printf(bio_err, "Context too long\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        SSL_SESSION_set1_id_context(x, (unsigned char *)context, ctx_len);
 | 
			
		||||
        memcpy(x->sid_ctx, context, x->sid_ctx_length);
 | 
			
		||||
    }
 | 
			
		||||
#ifdef undef
 | 
			
		||||
    /* just testing for memory leaks :-) */
 | 
			
		||||
@@ -216,10 +214,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        SSL_SESSION_print(out, x);
 | 
			
		||||
 | 
			
		||||
        if (cert) {
 | 
			
		||||
            if (peer == NULL)
 | 
			
		||||
            if (x->peer == NULL)
 | 
			
		||||
                BIO_puts(out, "No certificate present\n");
 | 
			
		||||
            else
 | 
			
		||||
                X509_print(out, peer);
 | 
			
		||||
                X509_print(out, x->peer);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -228,8 +226,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            i = i2d_SSL_SESSION_bio(out, x);
 | 
			
		||||
        else if (outformat == FORMAT_PEM)
 | 
			
		||||
            i = PEM_write_bio_SSL_SESSION(out, x);
 | 
			
		||||
        else if (outformat == FORMAT_NSS)
 | 
			
		||||
            i = SSL_SESSION_print_keylog(out, x);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
@@ -238,11 +234,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            BIO_printf(bio_err, "unable to write SSL_SESSION\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (!noout && (peer != NULL)) { /* just print the certificate */
 | 
			
		||||
    } else if (!noout && (x->peer != NULL)) { /* just print the certificate */
 | 
			
		||||
        if (outformat == FORMAT_ASN1)
 | 
			
		||||
            i = (int)i2d_X509_bio(out, peer);
 | 
			
		||||
            i = (int)i2d_X509_bio(out, x->peer);
 | 
			
		||||
        else if (outformat == FORMAT_PEM)
 | 
			
		||||
            i = PEM_write_bio_X509(out, peer);
 | 
			
		||||
            i = PEM_write_bio_X509(out, x->peer);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
 
 | 
			
		||||
@@ -441,8 +441,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-CApath dir    trusted certificates directory\n");
 | 
			
		||||
        BIO_printf(bio_err, "-CAfile file   trusted certificates file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-trusted_first use locally trusted CA's first when building trust chain\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-crl_check     check revocation status of signer's certificate using CRLs\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
@@ -634,12 +632,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            p7 = PKCS7_sign(NULL, NULL, other, in, flags);
 | 
			
		||||
            if (!p7)
 | 
			
		||||
                goto end;
 | 
			
		||||
            if (flags & PKCS7_NOCERTS) {
 | 
			
		||||
                for (i = 0; i < sk_X509_num(other); i++) {
 | 
			
		||||
                    X509 *x = sk_X509_value(other, i);
 | 
			
		||||
                    PKCS7_add_certificate(p7, x);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } else
 | 
			
		||||
            flags |= PKCS7_REUSE_DIGEST;
 | 
			
		||||
        for (i = 0; i < sk_OPENSSL_STRING_num(sksigners); i++) {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										359
									
								
								apps/speed.c
									
									
									
									
									
								
							
							
						
						
									
										359
									
								
								apps/speed.c
									
									
									
									
									
								
							@@ -74,10 +74,9 @@
 | 
			
		||||
#ifndef OPENSSL_NO_SPEED
 | 
			
		||||
 | 
			
		||||
# undef SECONDS
 | 
			
		||||
# define SECONDS                 3
 | 
			
		||||
# define PRIME_SECONDS   10
 | 
			
		||||
# define RSA_SECONDS             10
 | 
			
		||||
# define DSA_SECONDS             10
 | 
			
		||||
# define SECONDS         3
 | 
			
		||||
# define RSA_SECONDS     10
 | 
			
		||||
# define DSA_SECONDS     10
 | 
			
		||||
# define ECDSA_SECONDS   10
 | 
			
		||||
# define ECDH_SECONDS    10
 | 
			
		||||
 | 
			
		||||
@@ -93,6 +92,9 @@
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include <math.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# ifdef OPENSSL_NO_STDIO
 | 
			
		||||
#  define APPS_WIN16
 | 
			
		||||
# endif
 | 
			
		||||
# include <openssl/crypto.h>
 | 
			
		||||
# include <openssl/rand.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
@@ -106,16 +108,8 @@
 | 
			
		||||
#  include <signal.h>
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# if defined(_WIN32) || defined(__CYGWIN__)
 | 
			
		||||
# ifdef _WIN32
 | 
			
		||||
#  include <windows.h>
 | 
			
		||||
#  if defined(__CYGWIN__) && !defined(_WIN32)
 | 
			
		||||
  /*
 | 
			
		||||
   * <windows.h> should define _WIN32, which normally is mutually exclusive
 | 
			
		||||
   * with __CYGWIN__, but if it didn't...
 | 
			
		||||
   */
 | 
			
		||||
#   define _WIN32
 | 
			
		||||
  /* this is done because Cygwin alarm() fails sometimes. */
 | 
			
		||||
#  endif
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
@@ -147,7 +141,7 @@
 | 
			
		||||
# ifndef OPENSSL_NO_SHA
 | 
			
		||||
#  include <openssl/sha.h>
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_RMD160
 | 
			
		||||
# ifndef OPENSSL_NO_RIPEMD
 | 
			
		||||
#  include <openssl/ripemd.h>
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_WHIRLPOOL
 | 
			
		||||
@@ -189,12 +183,9 @@
 | 
			
		||||
# ifndef OPENSSL_NO_ECDH
 | 
			
		||||
#  include <openssl/ecdh.h>
 | 
			
		||||
# endif
 | 
			
		||||
# include <openssl/modes.h>
 | 
			
		||||
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
 | 
			
		||||
# ifndef HAVE_FORK
 | 
			
		||||
#  if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
#  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
 | 
			
		||||
@@ -208,10 +199,8 @@
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# undef BUFSIZE
 | 
			
		||||
# define BUFSIZE (1024*8+1)
 | 
			
		||||
# define MAX_MISALIGNMENT 63
 | 
			
		||||
 | 
			
		||||
static volatile int run = 0;
 | 
			
		||||
# define BUFSIZE ((long)1024*8+1)
 | 
			
		||||
int run = 0;
 | 
			
		||||
 | 
			
		||||
static int mr = 0;
 | 
			
		||||
static int usertime = 1;
 | 
			
		||||
@@ -225,10 +214,9 @@ static void print_result(int alg, int run_no, int count, double time_used);
 | 
			
		||||
static int do_multi(int multi);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# define ALGOR_NUM       30
 | 
			
		||||
# define ALGOR_NUM       29
 | 
			
		||||
# define SIZE_NUM        5
 | 
			
		||||
# define PRIME_NUM       3
 | 
			
		||||
# define RSA_NUM         7
 | 
			
		||||
# define RSA_NUM         4
 | 
			
		||||
# define DSA_NUM         3
 | 
			
		||||
 | 
			
		||||
# define EC_NUM       16
 | 
			
		||||
@@ -241,7 +229,7 @@ static const char *names[ALGOR_NUM] = {
 | 
			
		||||
    "aes-128 cbc", "aes-192 cbc", "aes-256 cbc",
 | 
			
		||||
    "camellia-128 cbc", "camellia-192 cbc", "camellia-256 cbc",
 | 
			
		||||
    "evp", "sha256", "sha512", "whirlpool",
 | 
			
		||||
    "aes-128 ige", "aes-192 ige", "aes-256 ige", "ghash"
 | 
			
		||||
    "aes-128 ige", "aes-192 ige", "aes-256 ige"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static double results[ALGOR_NUM][SIZE_NUM];
 | 
			
		||||
@@ -278,6 +266,9 @@ static SIGRETTYPE sig_done(int sig)
 | 
			
		||||
{
 | 
			
		||||
    signal(SIGALRM, sig_done);
 | 
			
		||||
    run = 0;
 | 
			
		||||
#  ifdef LINT
 | 
			
		||||
    sig = sig;
 | 
			
		||||
#  endif
 | 
			
		||||
}
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
@@ -286,17 +277,13 @@ static SIGRETTYPE sig_done(int sig)
 | 
			
		||||
 | 
			
		||||
# if defined(_WIN32)
 | 
			
		||||
 | 
			
		||||
#  if !defined(SIGALRM)
 | 
			
		||||
#   define SIGALRM
 | 
			
		||||
#  endif
 | 
			
		||||
#  define SIGALRM
 | 
			
		||||
static unsigned int lapse, schlock;
 | 
			
		||||
static void alarm_win32(unsigned int secs)
 | 
			
		||||
static void alarm(unsigned int secs)
 | 
			
		||||
{
 | 
			
		||||
    lapse = secs * 1000;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#  define alarm alarm_win32
 | 
			
		||||
 | 
			
		||||
static DWORD WINAPI sleepy(VOID * arg)
 | 
			
		||||
{
 | 
			
		||||
    schlock = 1;
 | 
			
		||||
@@ -307,10 +294,8 @@ static DWORD WINAPI sleepy(VOID * arg)
 | 
			
		||||
 | 
			
		||||
static double Time_F(int s)
 | 
			
		||||
{
 | 
			
		||||
    double ret;
 | 
			
		||||
    static HANDLE thr;
 | 
			
		||||
 | 
			
		||||
    if (s == START) {
 | 
			
		||||
        HANDLE thr;
 | 
			
		||||
        schlock = 0;
 | 
			
		||||
        thr = CreateThread(NULL, 4096, sleepy, NULL, 0, NULL);
 | 
			
		||||
        if (thr == NULL) {
 | 
			
		||||
@@ -318,26 +303,18 @@ static double Time_F(int s)
 | 
			
		||||
            BIO_printf(bio_err, "unable to CreateThread (%d)", ret);
 | 
			
		||||
            ExitProcess(ret);
 | 
			
		||||
        }
 | 
			
		||||
        CloseHandle(thr);       /* detach the thread */
 | 
			
		||||
        while (!schlock)
 | 
			
		||||
            Sleep(0);           /* scheduler spinlock */
 | 
			
		||||
        ret = app_tminterval(s, usertime);
 | 
			
		||||
    } else {
 | 
			
		||||
        ret = app_tminterval(s, usertime);
 | 
			
		||||
        if (run)
 | 
			
		||||
            TerminateThread(thr, 0);
 | 
			
		||||
        CloseHandle(thr);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return ret;
 | 
			
		||||
    return app_tminterval(s, usertime);
 | 
			
		||||
}
 | 
			
		||||
# else
 | 
			
		||||
 | 
			
		||||
static double Time_F(int s)
 | 
			
		||||
{
 | 
			
		||||
    double ret = app_tminterval(s, usertime);
 | 
			
		||||
    if (s == STOP)
 | 
			
		||||
        alarm(0);
 | 
			
		||||
    return ret;
 | 
			
		||||
    return app_tminterval(s, usertime);
 | 
			
		||||
}
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
@@ -358,13 +335,10 @@ static void *KDF1_SHA1(const void *in, size_t inlen, void *out,
 | 
			
		||||
}
 | 
			
		||||
# endif                         /* OPENSSL_NO_ECDH */
 | 
			
		||||
 | 
			
		||||
static void multiblock_speed(const EVP_CIPHER *evp_cipher);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    unsigned char *buf_malloc = NULL, *buf2_malloc = NULL;
 | 
			
		||||
    unsigned char *buf = NULL, *buf2 = NULL;
 | 
			
		||||
    int mret = 1;
 | 
			
		||||
    long count = 0, save_count = 0;
 | 
			
		||||
@@ -401,7 +375,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
# ifndef OPENSSL_NO_WHIRLPOOL
 | 
			
		||||
    unsigned char whirlpool[WHIRLPOOL_DIGEST_LENGTH];
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_RMD160
 | 
			
		||||
# ifndef OPENSSL_NO_RIPEMD
 | 
			
		||||
    unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_RC4
 | 
			
		||||
@@ -508,22 +482,15 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
# define D_IGE_128_AES   26
 | 
			
		||||
# define D_IGE_192_AES   27
 | 
			
		||||
# define D_IGE_256_AES   28
 | 
			
		||||
# define D_GHASH         29
 | 
			
		||||
    double d = 0.0;
 | 
			
		||||
    long c[ALGOR_NUM][SIZE_NUM];
 | 
			
		||||
 | 
			
		||||
# ifndef OPENSSL_SYS_WIN32
 | 
			
		||||
# endif
 | 
			
		||||
# define R_DSA_512       0
 | 
			
		||||
# define R_DSA_1024      1
 | 
			
		||||
# define R_DSA_2048      2
 | 
			
		||||
# define R_RSA_512       0
 | 
			
		||||
# define R_RSA_1024      1
 | 
			
		||||
# define R_RSA_2048      2
 | 
			
		||||
# define R_RSA_3072      3
 | 
			
		||||
# define R_RSA_4096      4
 | 
			
		||||
# define R_RSA_7680      5
 | 
			
		||||
# define R_RSA_15360     6
 | 
			
		||||
# define R_RSA_4096      3
 | 
			
		||||
 | 
			
		||||
# define R_EC_P160    0
 | 
			
		||||
# define R_EC_P192    1
 | 
			
		||||
@@ -546,16 +513,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    RSA *rsa_key[RSA_NUM];
 | 
			
		||||
    long rsa_c[RSA_NUM][2];
 | 
			
		||||
    static unsigned int rsa_bits[RSA_NUM] = {
 | 
			
		||||
        512, 1024, 2048, 3072, 4096, 7680, 15360
 | 
			
		||||
        512, 1024, 2048, 4096
 | 
			
		||||
    };
 | 
			
		||||
    static unsigned char *rsa_data[RSA_NUM] = {
 | 
			
		||||
        test512, test1024, test2048, test3072, test4096, test7680, test15360
 | 
			
		||||
        test512, test1024, test2048, test4096
 | 
			
		||||
    };
 | 
			
		||||
    static int rsa_data_length[RSA_NUM] = {
 | 
			
		||||
        sizeof(test512), sizeof(test1024),
 | 
			
		||||
        sizeof(test2048), sizeof(test3072),
 | 
			
		||||
        sizeof(test4096), sizeof(test7680),
 | 
			
		||||
        sizeof(test15360)
 | 
			
		||||
        sizeof(test2048), sizeof(test4096)
 | 
			
		||||
    };
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_DSA
 | 
			
		||||
@@ -649,8 +614,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
# ifndef NO_FORK
 | 
			
		||||
    int multi = 0;
 | 
			
		||||
# endif
 | 
			
		||||
    int multiblock = 0;
 | 
			
		||||
    int misalign = MAX_MISALIGNMENT + 1;
 | 
			
		||||
 | 
			
		||||
# ifndef TIMES
 | 
			
		||||
    usertime = -1;
 | 
			
		||||
@@ -685,22 +648,15 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        rsa_key[i] = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
    if ((buf_malloc =
 | 
			
		||||
         (unsigned char *)OPENSSL_malloc(BUFSIZE + misalign)) == NULL) {
 | 
			
		||||
    if ((buf = (unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "out of memory\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if ((buf2_malloc =
 | 
			
		||||
         (unsigned char *)OPENSSL_malloc(BUFSIZE + misalign)) == NULL) {
 | 
			
		||||
    if ((buf2 = (unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "out of memory\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    misalign = 0;               /* set later and buf/buf2 are adjusted
 | 
			
		||||
                                 * accordingly */
 | 
			
		||||
    buf = buf_malloc;
 | 
			
		||||
    buf2 = buf2_malloc;
 | 
			
		||||
 | 
			
		||||
    memset(c, 0, sizeof(c));
 | 
			
		||||
    memset(DES_iv, 0, sizeof(DES_iv));
 | 
			
		||||
    memset(iv, 0, sizeof(iv));
 | 
			
		||||
@@ -788,26 +744,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            mr = 1;
 | 
			
		||||
            j--;                /* Otherwise, -mr gets confused with an
 | 
			
		||||
                                 * algorithm. */
 | 
			
		||||
        } else if (argc > 0 && !strcmp(*argv, "-mb")) {
 | 
			
		||||
            multiblock = 1;
 | 
			
		||||
            j--;
 | 
			
		||||
        } else if (argc > 0 && !strcmp(*argv, "-misalign")) {
 | 
			
		||||
            argc--;
 | 
			
		||||
            argv++;
 | 
			
		||||
            if (argc == 0) {
 | 
			
		||||
                BIO_printf(bio_err, "no misalignment given\n");
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
            misalign = atoi(argv[0]);
 | 
			
		||||
            if (misalign < 0 || misalign > MAX_MISALIGNMENT) {
 | 
			
		||||
                BIO_printf(bio_err,
 | 
			
		||||
                           "misalignment is outsize permitted range 0-%d\n",
 | 
			
		||||
                           MAX_MISALIGNMENT);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
            buf = buf_malloc + misalign;
 | 
			
		||||
            buf2 = buf2_malloc + misalign;
 | 
			
		||||
            j--;
 | 
			
		||||
        } else
 | 
			
		||||
# ifndef OPENSSL_NO_MD2
 | 
			
		||||
        if (strcmp(*argv, "md2") == 0)
 | 
			
		||||
@@ -856,7 +792,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            doit[D_WHIRLPOOL] = 1;
 | 
			
		||||
        else
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_RMD160
 | 
			
		||||
# ifndef OPENSSL_NO_RIPEMD
 | 
			
		||||
        if (strcmp(*argv, "ripemd") == 0)
 | 
			
		||||
            doit[D_RMD160] = 1;
 | 
			
		||||
        else if (strcmp(*argv, "rmd160") == 0)
 | 
			
		||||
@@ -927,14 +863,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            rsa_doit[R_RSA_1024] = 2;
 | 
			
		||||
        else if (strcmp(*argv, "rsa2048") == 0)
 | 
			
		||||
            rsa_doit[R_RSA_2048] = 2;
 | 
			
		||||
        else if (strcmp(*argv, "rsa3072") == 0)
 | 
			
		||||
            rsa_doit[R_RSA_3072] = 2;
 | 
			
		||||
        else if (strcmp(*argv, "rsa4096") == 0)
 | 
			
		||||
            rsa_doit[R_RSA_4096] = 2;
 | 
			
		||||
        else if (strcmp(*argv, "rsa7680") == 0)
 | 
			
		||||
            rsa_doit[R_RSA_7680] = 2;
 | 
			
		||||
        else if (strcmp(*argv, "rsa15360") == 0)
 | 
			
		||||
            rsa_doit[R_RSA_15360] = 2;
 | 
			
		||||
        else
 | 
			
		||||
# ifndef OPENSSL_NO_RC2
 | 
			
		||||
        if (strcmp(*argv, "rc2-cbc") == 0)
 | 
			
		||||
@@ -993,8 +923,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            doit[D_CBC_128_AES] = 1;
 | 
			
		||||
            doit[D_CBC_192_AES] = 1;
 | 
			
		||||
            doit[D_CBC_256_AES] = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "ghash") == 0) {
 | 
			
		||||
            doit[D_GHASH] = 1;
 | 
			
		||||
        } else
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
@@ -1009,10 +937,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            rsa_doit[R_RSA_512] = 1;
 | 
			
		||||
            rsa_doit[R_RSA_1024] = 1;
 | 
			
		||||
            rsa_doit[R_RSA_2048] = 1;
 | 
			
		||||
            rsa_doit[R_RSA_3072] = 1;
 | 
			
		||||
            rsa_doit[R_RSA_4096] = 1;
 | 
			
		||||
            rsa_doit[R_RSA_7680] = 1;
 | 
			
		||||
            rsa_doit[R_RSA_15360] = 1;
 | 
			
		||||
        } else
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_DSA
 | 
			
		||||
@@ -1129,12 +1054,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
# ifndef OPENSSL_NO_WHIRLPOOL
 | 
			
		||||
            BIO_printf(bio_err, "whirlpool");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_RMD160
 | 
			
		||||
# ifndef OPENSSL_NO_RIPEMD160
 | 
			
		||||
            BIO_printf(bio_err, "rmd160");
 | 
			
		||||
# endif
 | 
			
		||||
# if !defined(OPENSSL_NO_MD2) || !defined(OPENSSL_NO_MDC2) || \
 | 
			
		||||
    !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \
 | 
			
		||||
    !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RMD160) || \
 | 
			
		||||
    !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160) || \
 | 
			
		||||
    !defined(OPENSSL_NO_WHIRLPOOL)
 | 
			
		||||
            BIO_printf(bio_err, "\n");
 | 
			
		||||
# endif
 | 
			
		||||
@@ -1176,9 +1101,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            BIO_printf(bio_err, "\n");
 | 
			
		||||
 | 
			
		||||
# ifndef OPENSSL_NO_RSA
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "rsa512   rsa1024  rsa2048  rsa3072  rsa4096\n");
 | 
			
		||||
            BIO_printf(bio_err, "rsa7680  rsa15360\n");
 | 
			
		||||
            BIO_printf(bio_err, "rsa512   rsa1024  rsa2048  rsa4096\n");
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# ifndef OPENSSL_NO_DSA
 | 
			
		||||
@@ -1252,12 +1175,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "-mr             "
 | 
			
		||||
                       "produce machine readable output.\n");
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "-mb             "
 | 
			
		||||
                       "perform multi-block benchmark (for specific ciphers)\n");
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "-misalign n     "
 | 
			
		||||
                       "perform benchmark with misaligned data\n");
 | 
			
		||||
# ifndef NO_FORK
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "-multi n        " "run n benchmarks in parallel.\n");
 | 
			
		||||
@@ -1412,27 +1329,24 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    c[D_IGE_128_AES][0] = count;
 | 
			
		||||
    c[D_IGE_192_AES][0] = count;
 | 
			
		||||
    c[D_IGE_256_AES][0] = count;
 | 
			
		||||
    c[D_GHASH][0] = count;
 | 
			
		||||
 | 
			
		||||
    for (i = 1; i < SIZE_NUM; i++) {
 | 
			
		||||
        c[D_MD2][i] = c[D_MD2][0] * 4 * lengths[0] / lengths[i];
 | 
			
		||||
        c[D_MDC2][i] = c[D_MDC2][0] * 4 * lengths[0] / lengths[i];
 | 
			
		||||
        c[D_MD4][i] = c[D_MD4][0] * 4 * lengths[0] / lengths[i];
 | 
			
		||||
        c[D_MD5][i] = c[D_MD5][0] * 4 * lengths[0] / lengths[i];
 | 
			
		||||
        c[D_HMAC][i] = c[D_HMAC][0] * 4 * lengths[0] / lengths[i];
 | 
			
		||||
        c[D_SHA1][i] = c[D_SHA1][0] * 4 * lengths[0] / lengths[i];
 | 
			
		||||
        c[D_RMD160][i] = c[D_RMD160][0] * 4 * lengths[0] / lengths[i];
 | 
			
		||||
        c[D_SHA256][i] = c[D_SHA256][0] * 4 * lengths[0] / lengths[i];
 | 
			
		||||
        c[D_SHA512][i] = c[D_SHA512][0] * 4 * lengths[0] / lengths[i];
 | 
			
		||||
        c[D_WHIRLPOOL][i] = c[D_WHIRLPOOL][0] * 4 * lengths[0] / lengths[i];
 | 
			
		||||
    }
 | 
			
		||||
    for (i = 1; i < SIZE_NUM; i++) {
 | 
			
		||||
        long l0, l1;
 | 
			
		||||
 | 
			
		||||
        l0 = (long)lengths[0];
 | 
			
		||||
        l1 = (long)lengths[i];
 | 
			
		||||
 | 
			
		||||
        c[D_MD2][i] = c[D_MD2][0] * 4 * l0 / l1;
 | 
			
		||||
        c[D_MDC2][i] = c[D_MDC2][0] * 4 * l0 / l1;
 | 
			
		||||
        c[D_MD4][i] = c[D_MD4][0] * 4 * l0 / l1;
 | 
			
		||||
        c[D_MD5][i] = c[D_MD5][0] * 4 * l0 / l1;
 | 
			
		||||
        c[D_HMAC][i] = c[D_HMAC][0] * 4 * l0 / l1;
 | 
			
		||||
        c[D_SHA1][i] = c[D_SHA1][0] * 4 * l0 / l1;
 | 
			
		||||
        c[D_RMD160][i] = c[D_RMD160][0] * 4 * l0 / l1;
 | 
			
		||||
        c[D_SHA256][i] = c[D_SHA256][0] * 4 * l0 / l1;
 | 
			
		||||
        c[D_SHA512][i] = c[D_SHA512][0] * 4 * l0 / l1;
 | 
			
		||||
        c[D_WHIRLPOOL][i] = c[D_WHIRLPOOL][0] * 4 * l0 / l1;
 | 
			
		||||
 | 
			
		||||
        l0 = (long)lengths[i - 1];
 | 
			
		||||
 | 
			
		||||
        l1 = (long)lengths[i];
 | 
			
		||||
        c[D_RC4][i] = c[D_RC4][i - 1] * l0 / l1;
 | 
			
		||||
        c[D_CBC_DES][i] = c[D_CBC_DES][i - 1] * l0 / l1;
 | 
			
		||||
        c[D_EDE3_DES][i] = c[D_EDE3_DES][i - 1] * l0 / l1;
 | 
			
		||||
@@ -1452,7 +1366,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        c[D_IGE_192_AES][i] = c[D_IGE_192_AES][i - 1] * l0 / l1;
 | 
			
		||||
        c[D_IGE_256_AES][i] = c[D_IGE_256_AES][i - 1] * l0 / l1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#   ifndef OPENSSL_NO_RSA
 | 
			
		||||
    rsa_c[R_RSA_512][0] = count / 2000;
 | 
			
		||||
    rsa_c[R_RSA_512][1] = count / 400;
 | 
			
		||||
@@ -1584,7 +1497,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#   error "You cannot disable DES on systems without SIGALRM."
 | 
			
		||||
#  endif                        /* OPENSSL_NO_DES */
 | 
			
		||||
# else
 | 
			
		||||
#  define COND(c) (run && count<0x7fffffff)
 | 
			
		||||
#  define COND(c) (run)
 | 
			
		||||
#  define COUNT(d) (count)
 | 
			
		||||
#  ifndef _WIN32
 | 
			
		||||
    signal(SIGALRM, sig_done);
 | 
			
		||||
@@ -1638,7 +1551,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            print_message(names[D_MD5], c[D_MD5][j], lengths[j]);
 | 
			
		||||
            Time_F(START);
 | 
			
		||||
            for (count = 0, run = 1; COND(c[D_MD5][j]); count++)
 | 
			
		||||
                MD5(buf, lengths[j], md5);
 | 
			
		||||
                EVP_Digest(&(buf[0]), (unsigned long)lengths[j], &(md5[0]),
 | 
			
		||||
                           NULL, EVP_get_digestbyname("md5"), NULL);
 | 
			
		||||
            d = Time_F(STOP);
 | 
			
		||||
            print_result(D_MD5, j, count, d);
 | 
			
		||||
        }
 | 
			
		||||
@@ -1673,12 +1587,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            print_message(names[D_SHA1], c[D_SHA1][j], lengths[j]);
 | 
			
		||||
            Time_F(START);
 | 
			
		||||
            for (count = 0, run = 1; COND(c[D_SHA1][j]); count++)
 | 
			
		||||
#  if 0
 | 
			
		||||
                EVP_Digest(buf, (unsigned long)lengths[j], &(sha[0]), NULL,
 | 
			
		||||
                           EVP_sha1(), NULL);
 | 
			
		||||
#  else
 | 
			
		||||
                SHA1(buf, lengths[j], sha);
 | 
			
		||||
#  endif
 | 
			
		||||
            d = Time_F(STOP);
 | 
			
		||||
            print_result(D_SHA1, j, count, d);
 | 
			
		||||
        }
 | 
			
		||||
@@ -1723,7 +1633,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    }
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# ifndef OPENSSL_NO_RMD160
 | 
			
		||||
# ifndef OPENSSL_NO_RIPEMD
 | 
			
		||||
    if (doit[D_RMD160]) {
 | 
			
		||||
        for (j = 0; j < SIZE_NUM; j++) {
 | 
			
		||||
            print_message(names[D_RMD160], c[D_RMD160][j], lengths[j]);
 | 
			
		||||
@@ -1854,21 +1764,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            print_result(D_IGE_256_AES, j, count, d);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (doit[D_GHASH]) {
 | 
			
		||||
        GCM128_CONTEXT *ctx =
 | 
			
		||||
            CRYPTO_gcm128_new(&aes_ks1, (block128_f) AES_encrypt);
 | 
			
		||||
        CRYPTO_gcm128_setiv(ctx, (unsigned char *)"0123456789ab", 12);
 | 
			
		||||
 | 
			
		||||
        for (j = 0; j < SIZE_NUM; j++) {
 | 
			
		||||
            print_message(names[D_GHASH], c[D_GHASH][j], lengths[j]);
 | 
			
		||||
            Time_F(START);
 | 
			
		||||
            for (count = 0, run = 1; COND(c[D_GHASH][j]); count++)
 | 
			
		||||
                CRYPTO_gcm128_aad(ctx, buf, lengths[j]);
 | 
			
		||||
            d = Time_F(STOP);
 | 
			
		||||
            print_result(D_GHASH, j, count, d);
 | 
			
		||||
        }
 | 
			
		||||
        CRYPTO_gcm128_release(ctx);
 | 
			
		||||
    }
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
    if (doit[D_CBC_128_CML]) {
 | 
			
		||||
@@ -1996,20 +1891,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
    if (doit[D_EVP]) {
 | 
			
		||||
# ifdef EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
 | 
			
		||||
        if (multiblock && evp_cipher) {
 | 
			
		||||
            if (!
 | 
			
		||||
                (EVP_CIPHER_flags(evp_cipher) &
 | 
			
		||||
                 EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK)) {
 | 
			
		||||
                fprintf(stderr, "%s is not multi-block capable\n",
 | 
			
		||||
                        OBJ_nid2ln(evp_cipher->nid));
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
            multiblock_speed(evp_cipher);
 | 
			
		||||
            mret = 0;
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        for (j = 0; j < SIZE_NUM; j++) {
 | 
			
		||||
            if (evp_cipher) {
 | 
			
		||||
                EVP_CIPHER_CTX ctx;
 | 
			
		||||
@@ -2061,8 +1942,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            print_result(D_EVP, j, count, d);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
# ifndef OPENSSL_SYS_WIN32
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
    RAND_pseudo_bytes(buf, 36);
 | 
			
		||||
# ifndef OPENSSL_NO_RSA
 | 
			
		||||
    for (j = 0; j < RSA_NUM; j++) {
 | 
			
		||||
@@ -2547,10 +2427,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
 end:
 | 
			
		||||
    ERR_print_errors(bio_err);
 | 
			
		||||
    if (buf_malloc != NULL)
 | 
			
		||||
        OPENSSL_free(buf_malloc);
 | 
			
		||||
    if (buf2_malloc != NULL)
 | 
			
		||||
        OPENSSL_free(buf2_malloc);
 | 
			
		||||
    if (buf != NULL)
 | 
			
		||||
        OPENSSL_free(buf);
 | 
			
		||||
    if (buf2 != NULL)
 | 
			
		||||
        OPENSSL_free(buf2);
 | 
			
		||||
# ifndef OPENSSL_NO_RSA
 | 
			
		||||
    for (i = 0; i < RSA_NUM; i++)
 | 
			
		||||
        if (rsa_key[i] != NULL)
 | 
			
		||||
@@ -2594,6 +2474,9 @@ static void print_message(const char *s, long num, int length)
 | 
			
		||||
               : "Doing %s %ld times on %d size blocks: ", s, num, length);
 | 
			
		||||
    (void)BIO_flush(bio_err);
 | 
			
		||||
# endif
 | 
			
		||||
# ifdef LINT
 | 
			
		||||
    num = num;
 | 
			
		||||
# endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void pkey_print_message(const char *str, const char *str2, long num,
 | 
			
		||||
@@ -2604,13 +2487,16 @@ static void pkey_print_message(const char *str, const char *str2, long num,
 | 
			
		||||
               mr ? "+DTP:%d:%s:%s:%d\n"
 | 
			
		||||
               : "Doing %d bit %s %s's for %ds: ", bits, str, str2, tm);
 | 
			
		||||
    (void)BIO_flush(bio_err);
 | 
			
		||||
    alarm(tm);
 | 
			
		||||
    alarm(RSA_SECONDS);
 | 
			
		||||
# else
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               mr ? "+DNP:%ld:%d:%s:%s\n"
 | 
			
		||||
               : "Doing %ld %d bit %s %s's: ", num, bits, str, str2);
 | 
			
		||||
    (void)BIO_flush(bio_err);
 | 
			
		||||
# endif
 | 
			
		||||
# ifdef LINT
 | 
			
		||||
    num = num;
 | 
			
		||||
# endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void print_result(int alg, int run_no, int count, double time_used)
 | 
			
		||||
@@ -2718,25 +2604,6 @@ static int do_multi(int multi)
 | 
			
		||||
                k = atoi(sstrsep(&p, sep));
 | 
			
		||||
                sstrsep(&p, sep);
 | 
			
		||||
 | 
			
		||||
                d = atof(sstrsep(&p, sep));
 | 
			
		||||
                if (n)
 | 
			
		||||
                    rsa_results[k][0] = 1 / (1 / rsa_results[k][0] + 1 / d);
 | 
			
		||||
                else
 | 
			
		||||
                    rsa_results[k][0] = d;
 | 
			
		||||
 | 
			
		||||
                d = atof(sstrsep(&p, sep));
 | 
			
		||||
                if (n)
 | 
			
		||||
                    rsa_results[k][1] = 1 / (1 / rsa_results[k][1] + 1 / d);
 | 
			
		||||
                else
 | 
			
		||||
                    rsa_results[k][1] = d;
 | 
			
		||||
            } else if (!strncmp(buf, "+F2:", 4)) {
 | 
			
		||||
                int k;
 | 
			
		||||
                double d;
 | 
			
		||||
 | 
			
		||||
                p = buf + 4;
 | 
			
		||||
                k = atoi(sstrsep(&p, sep));
 | 
			
		||||
                sstrsep(&p, sep);
 | 
			
		||||
 | 
			
		||||
                d = atof(sstrsep(&p, sep));
 | 
			
		||||
                if (n)
 | 
			
		||||
                    rsa_results[k][0] = 1 / (1 / rsa_results[k][0] + 1 / d);
 | 
			
		||||
@@ -2825,104 +2692,4 @@ static int do_multi(int multi)
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
static void multiblock_speed(const EVP_CIPHER *evp_cipher)
 | 
			
		||||
{
 | 
			
		||||
    static int mblengths[] =
 | 
			
		||||
        { 8 * 1024, 2 * 8 * 1024, 4 * 8 * 1024, 8 * 8 * 1024, 8 * 16 * 1024 };
 | 
			
		||||
    int j, count, num = sizeof(lengths) / sizeof(lengths[0]);
 | 
			
		||||
    const char *alg_name;
 | 
			
		||||
    unsigned char *inp, *out, no_key[32], no_iv[16];
 | 
			
		||||
    EVP_CIPHER_CTX ctx;
 | 
			
		||||
    double d = 0.0;
 | 
			
		||||
 | 
			
		||||
    inp = OPENSSL_malloc(mblengths[num - 1]);
 | 
			
		||||
    out = OPENSSL_malloc(mblengths[num - 1] + 1024);
 | 
			
		||||
 | 
			
		||||
    EVP_CIPHER_CTX_init(&ctx);
 | 
			
		||||
    EVP_EncryptInit_ex(&ctx, evp_cipher, NULL, no_key, no_iv);
 | 
			
		||||
    EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_AEAD_SET_MAC_KEY, sizeof(no_key),
 | 
			
		||||
                        no_key);
 | 
			
		||||
    alg_name = OBJ_nid2ln(evp_cipher->nid);
 | 
			
		||||
 | 
			
		||||
    for (j = 0; j < num; j++) {
 | 
			
		||||
        print_message(alg_name, 0, mblengths[j]);
 | 
			
		||||
        Time_F(START);
 | 
			
		||||
        for (count = 0, run = 1; run && count < 0x7fffffff; count++) {
 | 
			
		||||
            unsigned char aad[13];
 | 
			
		||||
            EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM mb_param;
 | 
			
		||||
            size_t len = mblengths[j];
 | 
			
		||||
            int packlen;
 | 
			
		||||
 | 
			
		||||
            memset(aad, 0, 8);  /* avoid uninitialized values */
 | 
			
		||||
            aad[8] = 23;        /* SSL3_RT_APPLICATION_DATA */
 | 
			
		||||
            aad[9] = 3;         /* version */
 | 
			
		||||
            aad[10] = 2;
 | 
			
		||||
            aad[11] = 0;        /* length */
 | 
			
		||||
            aad[12] = 0;
 | 
			
		||||
            mb_param.out = NULL;
 | 
			
		||||
            mb_param.inp = aad;
 | 
			
		||||
            mb_param.len = len;
 | 
			
		||||
            mb_param.interleave = 8;
 | 
			
		||||
 | 
			
		||||
            packlen = EVP_CIPHER_CTX_ctrl(&ctx,
 | 
			
		||||
                                          EVP_CTRL_TLS1_1_MULTIBLOCK_AAD,
 | 
			
		||||
                                          sizeof(mb_param), &mb_param);
 | 
			
		||||
 | 
			
		||||
            if (packlen > 0) {
 | 
			
		||||
                mb_param.out = out;
 | 
			
		||||
                mb_param.inp = inp;
 | 
			
		||||
                mb_param.len = len;
 | 
			
		||||
                EVP_CIPHER_CTX_ctrl(&ctx,
 | 
			
		||||
                                    EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT,
 | 
			
		||||
                                    sizeof(mb_param), &mb_param);
 | 
			
		||||
            } else {
 | 
			
		||||
                int pad;
 | 
			
		||||
 | 
			
		||||
                RAND_bytes(out, 16);
 | 
			
		||||
                len += 16;
 | 
			
		||||
                aad[11] = len >> 8;
 | 
			
		||||
                aad[12] = len;
 | 
			
		||||
                pad = EVP_CIPHER_CTX_ctrl(&ctx,
 | 
			
		||||
                                          EVP_CTRL_AEAD_TLS1_AAD, 13, aad);
 | 
			
		||||
                EVP_Cipher(&ctx, out, inp, len + pad);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        d = Time_F(STOP);
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   mr ? "+R:%d:%s:%f\n"
 | 
			
		||||
                   : "%d %s's in %.2fs\n", count, "evp", d);
 | 
			
		||||
        results[D_EVP][j] = ((double)count) / d * mblengths[j];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (mr) {
 | 
			
		||||
        fprintf(stdout, "+H");
 | 
			
		||||
        for (j = 0; j < num; j++)
 | 
			
		||||
            fprintf(stdout, ":%d", mblengths[j]);
 | 
			
		||||
        fprintf(stdout, "\n");
 | 
			
		||||
        fprintf(stdout, "+F:%d:%s", D_EVP, alg_name);
 | 
			
		||||
        for (j = 0; j < num; j++)
 | 
			
		||||
            fprintf(stdout, ":%.2f", results[D_EVP][j]);
 | 
			
		||||
        fprintf(stdout, "\n");
 | 
			
		||||
    } else {
 | 
			
		||||
        fprintf(stdout,
 | 
			
		||||
                "The 'numbers' are in 1000s of bytes per second processed.\n");
 | 
			
		||||
        fprintf(stdout, "type                    ");
 | 
			
		||||
        for (j = 0; j < num; j++)
 | 
			
		||||
            fprintf(stdout, "%7d bytes", mblengths[j]);
 | 
			
		||||
        fprintf(stdout, "\n");
 | 
			
		||||
        fprintf(stdout, "%-24s", alg_name);
 | 
			
		||||
 | 
			
		||||
        for (j = 0; j < num; j++) {
 | 
			
		||||
            if (results[D_EVP][j] > 10000)
 | 
			
		||||
                fprintf(stdout, " %11.2fk", results[D_EVP][j] / 1e3);
 | 
			
		||||
            else
 | 
			
		||||
                fprintf(stdout, " %11.2f ", results[D_EVP][j]);
 | 
			
		||||
        }
 | 
			
		||||
        fprintf(stdout, "\n");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    OPENSSL_free(inp);
 | 
			
		||||
    OPENSSL_free(out);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										756
									
								
								apps/srp.c
									
									
									
									
									
								
							
							
						
						
									
										756
									
								
								apps/srp.c
									
									
									
									
									
								
							@@ -1,756 +0,0 @@
 | 
			
		||||
/* apps/srp.c */
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Peter Sylvester (peter.sylvester@edelweb.fr) for the EdelKey
 | 
			
		||||
 * project and contributed to the OpenSSL project 2004.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2004 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
 *    the documentation and/or other materials provided with the
 | 
			
		||||
 *    distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this
 | 
			
		||||
 *    software must display the following acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
			
		||||
 *    endorse or promote products derived from this software without
 | 
			
		||||
 *    prior written permission. For written permission, please contact
 | 
			
		||||
 *    licensing@OpenSSL.org.
 | 
			
		||||
 *
 | 
			
		||||
 * 5. Products derived from this software may not be called "OpenSSL"
 | 
			
		||||
 *    nor may "OpenSSL" appear in their names without prior written
 | 
			
		||||
 *    permission of the OpenSSL Project.
 | 
			
		||||
 *
 | 
			
		||||
 * 6. Redistributions of any form whatsoever must retain the following
 | 
			
		||||
 *    acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
			
		||||
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
			
		||||
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
			
		||||
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
			
		||||
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 * ====================================================================
 | 
			
		||||
 *
 | 
			
		||||
 * This product includes cryptographic software written by Eric Young
 | 
			
		||||
 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_SRP
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <stdlib.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include <openssl/conf.h>
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/txt_db.h>
 | 
			
		||||
# include <openssl/buffer.h>
 | 
			
		||||
# include <openssl/srp.h>
 | 
			
		||||
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG srp_main
 | 
			
		||||
 | 
			
		||||
# define BASE_SECTION    "srp"
 | 
			
		||||
# define CONFIG_FILE "openssl.cnf"
 | 
			
		||||
 | 
			
		||||
# define ENV_RANDFILE            "RANDFILE"
 | 
			
		||||
 | 
			
		||||
# define ENV_DATABASE            "srpvfile"
 | 
			
		||||
# define ENV_DEFAULT_SRP         "default_srp"
 | 
			
		||||
 | 
			
		||||
static char *srp_usage[] = {
 | 
			
		||||
    "usage: srp [args] [user] \n",
 | 
			
		||||
    "\n",
 | 
			
		||||
    " -verbose        Talk a lot while doing things\n",
 | 
			
		||||
    " -config file    A config file\n",
 | 
			
		||||
    " -name arg       The particular srp definition to use\n",
 | 
			
		||||
    " -srpvfile arg   The srp verifier file name\n",
 | 
			
		||||
    " -add            add an user and srp verifier\n",
 | 
			
		||||
    " -modify         modify the srp verifier of an existing user\n",
 | 
			
		||||
    " -delete         delete user from verifier file\n",
 | 
			
		||||
    " -list           list user\n",
 | 
			
		||||
    " -gn arg         g and N values to be used for new verifier\n",
 | 
			
		||||
    " -userinfo arg   additional info to be set for user\n",
 | 
			
		||||
    " -passin arg     input file pass phrase source\n",
 | 
			
		||||
    " -passout arg    output file pass phrase source\n",
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    " -engine e         - use engine e, possibly a hardware device.\n",
 | 
			
		||||
# endif
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
# ifdef EFENCE
 | 
			
		||||
extern int EF_PROTECT_FREE;
 | 
			
		||||
extern int EF_PROTECT_BELOW;
 | 
			
		||||
extern int EF_ALIGNMENT;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
static CONF *conf = NULL;
 | 
			
		||||
static char *section = NULL;
 | 
			
		||||
 | 
			
		||||
# define VERBOSE if (verbose)
 | 
			
		||||
# define VVERBOSE if (verbose>1)
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
static int get_index(CA_DB *db, char *id, char type)
 | 
			
		||||
{
 | 
			
		||||
    char **pp;
 | 
			
		||||
    int i;
 | 
			
		||||
    if (id == NULL)
 | 
			
		||||
        return -1;
 | 
			
		||||
    if (type == DB_SRP_INDEX)
 | 
			
		||||
        for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) {
 | 
			
		||||
            pp = sk_OPENSSL_PSTRING_value(db->db->data, i);
 | 
			
		||||
            if (pp[DB_srptype][0] == DB_SRP_INDEX
 | 
			
		||||
                && !strcmp(id, pp[DB_srpid]))
 | 
			
		||||
                return i;
 | 
			
		||||
    } else
 | 
			
		||||
        for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) {
 | 
			
		||||
            pp = sk_OPENSSL_PSTRING_value(db->db->data, i);
 | 
			
		||||
 | 
			
		||||
            if (pp[DB_srptype][0] != DB_SRP_INDEX
 | 
			
		||||
                && !strcmp(id, pp[DB_srpid]))
 | 
			
		||||
                return i;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void print_entry(CA_DB *db, BIO *bio, int indx, int verbose, char *s)
 | 
			
		||||
{
 | 
			
		||||
    if (indx >= 0 && verbose) {
 | 
			
		||||
        int j;
 | 
			
		||||
        char **pp = sk_OPENSSL_PSTRING_value(db->db->data, indx);
 | 
			
		||||
        BIO_printf(bio, "%s \"%s\"\n", s, pp[DB_srpid]);
 | 
			
		||||
        for (j = 0; j < DB_NUMBER; j++) {
 | 
			
		||||
            BIO_printf(bio_err, "  %d = \"%s\"\n", j, pp[j]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void print_index(CA_DB *db, BIO *bio, int indexindex, int verbose)
 | 
			
		||||
{
 | 
			
		||||
    print_entry(db, bio, indexindex, verbose, "g N entry");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void print_user(CA_DB *db, BIO *bio, int userindex, int verbose)
 | 
			
		||||
{
 | 
			
		||||
    if (verbose > 0) {
 | 
			
		||||
        char **pp = sk_OPENSSL_PSTRING_value(db->db->data, userindex);
 | 
			
		||||
 | 
			
		||||
        if (pp[DB_srptype][0] != 'I') {
 | 
			
		||||
            print_entry(db, bio, userindex, verbose, "User entry");
 | 
			
		||||
            print_entry(db, bio, get_index(db, pp[DB_srpgN], 'I'), verbose,
 | 
			
		||||
                        "g N entry");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int update_index(CA_DB *db, BIO *bio, char **row)
 | 
			
		||||
{
 | 
			
		||||
    char **irow;
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    if ((irow =
 | 
			
		||||
         (char **)OPENSSL_malloc(sizeof(char *) * (DB_NUMBER + 1))) == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "Memory allocation failure\n");
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < DB_NUMBER; i++) {
 | 
			
		||||
        irow[i] = row[i];
 | 
			
		||||
        row[i] = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    irow[DB_NUMBER] = NULL;
 | 
			
		||||
 | 
			
		||||
    if (!TXT_DB_insert(db->db, irow)) {
 | 
			
		||||
        BIO_printf(bio, "failed to update srpvfile\n");
 | 
			
		||||
        BIO_printf(bio, "TXT_DB error number %ld\n", db->db->error);
 | 
			
		||||
        OPENSSL_free(irow);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void lookup_fail(const char *name, const char *tag)
 | 
			
		||||
{
 | 
			
		||||
    BIO_printf(bio_err, "variable lookup failed for %s::%s\n", name, tag);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char *srp_verify_user(const char *user, const char *srp_verifier,
 | 
			
		||||
                             char *srp_usersalt, const char *g, const char *N,
 | 
			
		||||
                             const char *passin, BIO *bio, int verbose)
 | 
			
		||||
{
 | 
			
		||||
    char password[1024];
 | 
			
		||||
    PW_CB_DATA cb_tmp;
 | 
			
		||||
    char *verifier = NULL;
 | 
			
		||||
    char *gNid = NULL;
 | 
			
		||||
 | 
			
		||||
    cb_tmp.prompt_info = user;
 | 
			
		||||
    cb_tmp.password = passin;
 | 
			
		||||
 | 
			
		||||
    if (password_callback(password, 1024, 0, &cb_tmp) > 0) {
 | 
			
		||||
        VERBOSE BIO_printf(bio,
 | 
			
		||||
                           "Validating\n"
 | 
			
		||||
                           " user=\"%s\"\n"
 | 
			
		||||
                           " srp_verifier=\"%s\"\n"
 | 
			
		||||
                           " srp_usersalt=\"%s\"\n"
 | 
			
		||||
                           " g=\"%s\"\n N=\"%s\"\n",
 | 
			
		||||
                           user, srp_verifier, srp_usersalt, g, N);
 | 
			
		||||
        BIO_printf(bio, "Pass %s\n", password);
 | 
			
		||||
 | 
			
		||||
        OPENSSL_assert(srp_usersalt != NULL);
 | 
			
		||||
        if (!(gNid = SRP_create_verifier(user, password, &srp_usersalt,
 | 
			
		||||
                                         &verifier, N, g))) {
 | 
			
		||||
            BIO_printf(bio, "Internal error validating SRP verifier\n");
 | 
			
		||||
        } else {
 | 
			
		||||
            if (strcmp(verifier, srp_verifier))
 | 
			
		||||
                gNid = NULL;
 | 
			
		||||
            OPENSSL_free(verifier);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return gNid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char *srp_create_user(char *user, char **srp_verifier,
 | 
			
		||||
                             char **srp_usersalt, char *g, char *N,
 | 
			
		||||
                             char *passout, BIO *bio, int verbose)
 | 
			
		||||
{
 | 
			
		||||
    char password[1024];
 | 
			
		||||
    PW_CB_DATA cb_tmp;
 | 
			
		||||
    char *gNid = NULL;
 | 
			
		||||
    char *salt = NULL;
 | 
			
		||||
    cb_tmp.prompt_info = user;
 | 
			
		||||
    cb_tmp.password = passout;
 | 
			
		||||
 | 
			
		||||
    if (password_callback(password, 1024, 1, &cb_tmp) > 0) {
 | 
			
		||||
        VERBOSE BIO_printf(bio,
 | 
			
		||||
                           "Creating\n"
 | 
			
		||||
                           " user=\"%s\"\n"
 | 
			
		||||
                           " g=\"%s\"\n" " N=\"%s\"\n", user, g, N);
 | 
			
		||||
        if (!(gNid = SRP_create_verifier(user, password, &salt,
 | 
			
		||||
                                         srp_verifier, N, g))) {
 | 
			
		||||
            BIO_printf(bio, "Internal error creating SRP verifier\n");
 | 
			
		||||
        } else
 | 
			
		||||
            *srp_usersalt = salt;
 | 
			
		||||
        VVERBOSE BIO_printf(bio, "gNid=%s salt =\"%s\"\n verifier =\"%s\"\n",
 | 
			
		||||
                            gNid, salt, *srp_verifier);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    return gNid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    int add_user = 0;
 | 
			
		||||
    int list_user = 0;
 | 
			
		||||
    int delete_user = 0;
 | 
			
		||||
    int modify_user = 0;
 | 
			
		||||
    char *user = NULL;
 | 
			
		||||
 | 
			
		||||
    char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
    char *passin = NULL, *passout = NULL;
 | 
			
		||||
    char *gN = NULL;
 | 
			
		||||
    int gNindex = -1;
 | 
			
		||||
    char **gNrow = NULL;
 | 
			
		||||
    int maxgN = -1;
 | 
			
		||||
 | 
			
		||||
    char *userinfo = NULL;
 | 
			
		||||
 | 
			
		||||
    int badops = 0;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    int errors = 0;
 | 
			
		||||
    int verbose = 0;
 | 
			
		||||
    int doupdatedb = 0;
 | 
			
		||||
    char *configfile = NULL;
 | 
			
		||||
    char *dbfile = NULL;
 | 
			
		||||
    CA_DB *db = NULL;
 | 
			
		||||
    char **pp;
 | 
			
		||||
    int i;
 | 
			
		||||
    long errorline = -1;
 | 
			
		||||
    char *randfile = NULL;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    char *tofree = NULL;
 | 
			
		||||
    DB_ATTR db_attr;
 | 
			
		||||
 | 
			
		||||
# ifdef EFENCE
 | 
			
		||||
    EF_PROTECT_FREE = 1;
 | 
			
		||||
    EF_PROTECT_BELOW = 1;
 | 
			
		||||
    EF_ALIGNMENT = 0;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
    conf = NULL;
 | 
			
		||||
    section = NULL;
 | 
			
		||||
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1 && badops == 0) {
 | 
			
		||||
        if (strcmp(*argv, "-verbose") == 0)
 | 
			
		||||
            verbose++;
 | 
			
		||||
        else if (strcmp(*argv, "-config") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            configfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-name") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            section = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-srpvfile") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            dbfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-add") == 0)
 | 
			
		||||
            add_user = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-delete") == 0)
 | 
			
		||||
            delete_user = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-modify") == 0)
 | 
			
		||||
            modify_user = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-list") == 0)
 | 
			
		||||
            list_user = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-gn") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            gN = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-userinfo") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            userinfo = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passin") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargin = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passout") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargout = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
        else if (**argv == '-') {
 | 
			
		||||
 bad:
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        } else
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (dbfile && configfile) {
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-dbfile and -configfile cannot be specified together.\n");
 | 
			
		||||
        badops = 1;
 | 
			
		||||
    }
 | 
			
		||||
    if (add_user + delete_user + modify_user + list_user != 1) {
 | 
			
		||||
        BIO_printf(bio_err, "Exactly one of the options "
 | 
			
		||||
                   "-add, -delete, -modify -list must be specified.\n");
 | 
			
		||||
        badops = 1;
 | 
			
		||||
    }
 | 
			
		||||
    if (delete_user + modify_user + delete_user == 1 && argc <= 0) {
 | 
			
		||||
        BIO_printf(bio_err, "Need at least one user for options "
 | 
			
		||||
                   "-add, -delete, -modify. \n");
 | 
			
		||||
        badops = 1;
 | 
			
		||||
    }
 | 
			
		||||
    if ((passin || passout) && argc != 1) {
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-passin, -passout arguments only valid with one user.\n");
 | 
			
		||||
        badops = 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (badops) {
 | 
			
		||||
        for (pp = srp_usage; (*pp != NULL); pp++)
 | 
			
		||||
            BIO_printf(bio_err, "%s", *pp);
 | 
			
		||||
 | 
			
		||||
        BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR,
 | 
			
		||||
                   LIST_SEPARATOR_CHAR);
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 load the file (or the files in the directory) into\n");
 | 
			
		||||
        BIO_printf(bio_err, "                 the random number generator\n");
 | 
			
		||||
        goto err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
        goto err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!dbfile) {
 | 
			
		||||
 | 
			
		||||
        /*****************************************************************/
 | 
			
		||||
        tofree = NULL;
 | 
			
		||||
        if (configfile == NULL)
 | 
			
		||||
            configfile = getenv("OPENSSL_CONF");
 | 
			
		||||
        if (configfile == NULL)
 | 
			
		||||
            configfile = getenv("SSLEAY_CONF");
 | 
			
		||||
        if (configfile == NULL) {
 | 
			
		||||
            const char *s = X509_get_default_cert_area();
 | 
			
		||||
            size_t len;
 | 
			
		||||
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
            len = strlen(s) + sizeof(CONFIG_FILE);
 | 
			
		||||
            tofree = OPENSSL_malloc(len);
 | 
			
		||||
            strcpy(tofree, s);
 | 
			
		||||
# else
 | 
			
		||||
            len = strlen(s) + sizeof(CONFIG_FILE) + 1;
 | 
			
		||||
            tofree = OPENSSL_malloc(len);
 | 
			
		||||
            BUF_strlcpy(tofree, s, len);
 | 
			
		||||
            BUF_strlcat(tofree, "/", len);
 | 
			
		||||
# endif
 | 
			
		||||
            BUF_strlcat(tofree, CONFIG_FILE, len);
 | 
			
		||||
            configfile = tofree;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        VERBOSE BIO_printf(bio_err, "Using configuration from %s\n",
 | 
			
		||||
                           configfile);
 | 
			
		||||
        conf = NCONF_new(NULL);
 | 
			
		||||
        if (NCONF_load(conf, configfile, &errorline) <= 0) {
 | 
			
		||||
            if (errorline <= 0)
 | 
			
		||||
                BIO_printf(bio_err, "error loading the config file '%s'\n",
 | 
			
		||||
                           configfile);
 | 
			
		||||
            else
 | 
			
		||||
                BIO_printf(bio_err, "error on line %ld of config file '%s'\n",
 | 
			
		||||
                           errorline, configfile);
 | 
			
		||||
            goto err;
 | 
			
		||||
        }
 | 
			
		||||
        if (tofree) {
 | 
			
		||||
            OPENSSL_free(tofree);
 | 
			
		||||
            tofree = NULL;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!load_config(bio_err, conf))
 | 
			
		||||
            goto err;
 | 
			
		||||
 | 
			
		||||
        /* Lets get the config section we are using */
 | 
			
		||||
        if (section == NULL) {
 | 
			
		||||
            VERBOSE BIO_printf(bio_err,
 | 
			
		||||
                               "trying to read " ENV_DEFAULT_SRP
 | 
			
		||||
                               " in \" BASE_SECTION \"\n");
 | 
			
		||||
 | 
			
		||||
            section = NCONF_get_string(conf, BASE_SECTION, ENV_DEFAULT_SRP);
 | 
			
		||||
            if (section == NULL) {
 | 
			
		||||
                lookup_fail(BASE_SECTION, ENV_DEFAULT_SRP);
 | 
			
		||||
                goto err;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (randfile == NULL && conf)
 | 
			
		||||
            randfile = NCONF_get_string(conf, BASE_SECTION, "RANDFILE");
 | 
			
		||||
 | 
			
		||||
        VERBOSE BIO_printf(bio_err,
 | 
			
		||||
                           "trying to read " ENV_DATABASE
 | 
			
		||||
                           " in section \"%s\"\n", section);
 | 
			
		||||
 | 
			
		||||
        if ((dbfile = NCONF_get_string(conf, section, ENV_DATABASE)) == NULL) {
 | 
			
		||||
            lookup_fail(section, ENV_DATABASE);
 | 
			
		||||
            goto err;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    if (randfile == NULL)
 | 
			
		||||
        ERR_clear_error();
 | 
			
		||||
    else
 | 
			
		||||
        app_RAND_load_file(randfile, bio_err, 0);
 | 
			
		||||
 | 
			
		||||
    VERBOSE BIO_printf(bio_err, "Trying to read SRP verifier file \"%s\"\n",
 | 
			
		||||
                       dbfile);
 | 
			
		||||
 | 
			
		||||
    db = load_index(dbfile, &db_attr);
 | 
			
		||||
    if (db == NULL)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    /* Lets check some fields */
 | 
			
		||||
    for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) {
 | 
			
		||||
        pp = sk_OPENSSL_PSTRING_value(db->db->data, i);
 | 
			
		||||
 | 
			
		||||
        if (pp[DB_srptype][0] == DB_SRP_INDEX) {
 | 
			
		||||
            maxgN = i;
 | 
			
		||||
            if (gNindex < 0 && gN != NULL && !strcmp(gN, pp[DB_srpid]))
 | 
			
		||||
                gNindex = i;
 | 
			
		||||
 | 
			
		||||
            print_index(db, bio_err, i, verbose > 1);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    VERBOSE BIO_printf(bio_err, "Database initialised\n");
 | 
			
		||||
 | 
			
		||||
    if (gNindex >= 0) {
 | 
			
		||||
        gNrow = sk_OPENSSL_PSTRING_value(db->db->data, gNindex);
 | 
			
		||||
        print_entry(db, bio_err, gNindex, verbose > 1, "Default g and N");
 | 
			
		||||
    } else if (maxgN > 0 && !SRP_get_default_gN(gN)) {
 | 
			
		||||
        BIO_printf(bio_err, "No g and N value for index \"%s\"\n", gN);
 | 
			
		||||
        goto err;
 | 
			
		||||
    } else {
 | 
			
		||||
        VERBOSE BIO_printf(bio_err, "Database has no g N information.\n");
 | 
			
		||||
        gNrow = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    VVERBOSE BIO_printf(bio_err, "Starting user processing\n");
 | 
			
		||||
 | 
			
		||||
    if (argc > 0)
 | 
			
		||||
        user = *(argv++);
 | 
			
		||||
 | 
			
		||||
    while (list_user || user) {
 | 
			
		||||
        int userindex = -1;
 | 
			
		||||
        if (user)
 | 
			
		||||
            VVERBOSE BIO_printf(bio_err, "Processing user \"%s\"\n", user);
 | 
			
		||||
        if ((userindex = get_index(db, user, 'U')) >= 0) {
 | 
			
		||||
            print_user(db, bio_err, userindex, (verbose > 0) || list_user);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (list_user) {
 | 
			
		||||
            if (user == NULL) {
 | 
			
		||||
                BIO_printf(bio_err, "List all users\n");
 | 
			
		||||
 | 
			
		||||
                for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) {
 | 
			
		||||
                    print_user(db, bio_err, i, 1);
 | 
			
		||||
                }
 | 
			
		||||
                list_user = 0;
 | 
			
		||||
            } else if (userindex < 0) {
 | 
			
		||||
                BIO_printf(bio_err,
 | 
			
		||||
                           "user \"%s\" does not exist, ignored. t\n", user);
 | 
			
		||||
                errors++;
 | 
			
		||||
            }
 | 
			
		||||
        } else if (add_user) {
 | 
			
		||||
            if (userindex >= 0) {
 | 
			
		||||
                /* reactivation of a new user */
 | 
			
		||||
                char **row =
 | 
			
		||||
                    sk_OPENSSL_PSTRING_value(db->db->data, userindex);
 | 
			
		||||
                BIO_printf(bio_err, "user \"%s\" reactivated.\n", user);
 | 
			
		||||
                row[DB_srptype][0] = 'V';
 | 
			
		||||
 | 
			
		||||
                doupdatedb = 1;
 | 
			
		||||
            } else {
 | 
			
		||||
                char *row[DB_NUMBER];
 | 
			
		||||
                char *gNid;
 | 
			
		||||
                row[DB_srpverifier] = NULL;
 | 
			
		||||
                row[DB_srpsalt] = NULL;
 | 
			
		||||
                row[DB_srpinfo] = NULL;
 | 
			
		||||
                if (!(gNid = srp_create_user(user, &(row[DB_srpverifier]),
 | 
			
		||||
                                             &(row[DB_srpsalt]),
 | 
			
		||||
                                             gNrow ? gNrow[DB_srpsalt] : gN,
 | 
			
		||||
                                             gNrow ? gNrow[DB_srpverifier] :
 | 
			
		||||
                                             NULL, passout, bio_err,
 | 
			
		||||
                                             verbose))) {
 | 
			
		||||
                    BIO_printf(bio_err,
 | 
			
		||||
                               "Cannot create srp verifier for user \"%s\","
 | 
			
		||||
                               " operation abandoned .\n", user);
 | 
			
		||||
                    errors++;
 | 
			
		||||
                    goto err;
 | 
			
		||||
                }
 | 
			
		||||
                row[DB_srpid] = BUF_strdup(user);
 | 
			
		||||
                row[DB_srptype] = BUF_strdup("v");
 | 
			
		||||
                row[DB_srpgN] = BUF_strdup(gNid);
 | 
			
		||||
 | 
			
		||||
                if (!row[DB_srpid] || !row[DB_srpgN] || !row[DB_srptype]
 | 
			
		||||
                    || !row[DB_srpverifier] || !row[DB_srpsalt]
 | 
			
		||||
                    || (userinfo
 | 
			
		||||
                        && (!(row[DB_srpinfo] = BUF_strdup(userinfo))))
 | 
			
		||||
                    || !update_index(db, bio_err, row)) {
 | 
			
		||||
                    if (row[DB_srpid])
 | 
			
		||||
                        OPENSSL_free(row[DB_srpid]);
 | 
			
		||||
                    if (row[DB_srpgN])
 | 
			
		||||
                        OPENSSL_free(row[DB_srpgN]);
 | 
			
		||||
                    if (row[DB_srpinfo])
 | 
			
		||||
                        OPENSSL_free(row[DB_srpinfo]);
 | 
			
		||||
                    if (row[DB_srptype])
 | 
			
		||||
                        OPENSSL_free(row[DB_srptype]);
 | 
			
		||||
                    if (row[DB_srpverifier])
 | 
			
		||||
                        OPENSSL_free(row[DB_srpverifier]);
 | 
			
		||||
                    if (row[DB_srpsalt])
 | 
			
		||||
                        OPENSSL_free(row[DB_srpsalt]);
 | 
			
		||||
                    goto err;
 | 
			
		||||
                }
 | 
			
		||||
                doupdatedb = 1;
 | 
			
		||||
            }
 | 
			
		||||
        } else if (modify_user) {
 | 
			
		||||
            if (userindex < 0) {
 | 
			
		||||
                BIO_printf(bio_err,
 | 
			
		||||
                           "user \"%s\" does not exist, operation ignored.\n",
 | 
			
		||||
                           user);
 | 
			
		||||
                errors++;
 | 
			
		||||
            } else {
 | 
			
		||||
 | 
			
		||||
                char **row =
 | 
			
		||||
                    sk_OPENSSL_PSTRING_value(db->db->data, userindex);
 | 
			
		||||
                char type = row[DB_srptype][0];
 | 
			
		||||
                if (type == 'v') {
 | 
			
		||||
                    BIO_printf(bio_err,
 | 
			
		||||
                               "user \"%s\" already updated, operation ignored.\n",
 | 
			
		||||
                               user);
 | 
			
		||||
                    errors++;
 | 
			
		||||
                } else {
 | 
			
		||||
                    char *gNid;
 | 
			
		||||
 | 
			
		||||
                    if (row[DB_srptype][0] == 'V') {
 | 
			
		||||
                        int user_gN;
 | 
			
		||||
                        char **irow = NULL;
 | 
			
		||||
                        VERBOSE BIO_printf(bio_err,
 | 
			
		||||
                                           "Verifying password for user \"%s\"\n",
 | 
			
		||||
                                           user);
 | 
			
		||||
                        if ((user_gN =
 | 
			
		||||
                             get_index(db, row[DB_srpgN], DB_SRP_INDEX)) >= 0)
 | 
			
		||||
                            irow =
 | 
			
		||||
                                sk_OPENSSL_PSTRING_value(db->db->data,
 | 
			
		||||
                                                         userindex);
 | 
			
		||||
 | 
			
		||||
                        if (!srp_verify_user
 | 
			
		||||
                            (user, row[DB_srpverifier], row[DB_srpsalt],
 | 
			
		||||
                             irow ? irow[DB_srpsalt] : row[DB_srpgN],
 | 
			
		||||
                             irow ? irow[DB_srpverifier] : NULL, passin,
 | 
			
		||||
                             bio_err, verbose)) {
 | 
			
		||||
                            BIO_printf(bio_err,
 | 
			
		||||
                                       "Invalid password for user \"%s\", operation abandoned.\n",
 | 
			
		||||
                                       user);
 | 
			
		||||
                            errors++;
 | 
			
		||||
                            goto err;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    VERBOSE BIO_printf(bio_err,
 | 
			
		||||
                                       "Password for user \"%s\" ok.\n",
 | 
			
		||||
                                       user);
 | 
			
		||||
 | 
			
		||||
                    if (!(gNid = srp_create_user(user, &(row[DB_srpverifier]),
 | 
			
		||||
                                                 &(row[DB_srpsalt]),
 | 
			
		||||
                                                 gNrow ? gNrow[DB_srpsalt] :
 | 
			
		||||
                                                 NULL,
 | 
			
		||||
                                                 gNrow ? gNrow[DB_srpverifier]
 | 
			
		||||
                                                 : NULL, passout, bio_err,
 | 
			
		||||
                                                 verbose))) {
 | 
			
		||||
                        BIO_printf(bio_err,
 | 
			
		||||
                                   "Cannot create srp verifier for user \"%s\","
 | 
			
		||||
                                   " operation abandoned.\n", user);
 | 
			
		||||
                        errors++;
 | 
			
		||||
                        goto err;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    row[DB_srptype][0] = 'v';
 | 
			
		||||
                    row[DB_srpgN] = BUF_strdup(gNid);
 | 
			
		||||
 | 
			
		||||
                    if (!row[DB_srpid] || !row[DB_srpgN] || !row[DB_srptype]
 | 
			
		||||
                        || !row[DB_srpverifier] || !row[DB_srpsalt]
 | 
			
		||||
                        || (userinfo
 | 
			
		||||
                            && (!(row[DB_srpinfo] = BUF_strdup(userinfo)))))
 | 
			
		||||
                        goto err;
 | 
			
		||||
 | 
			
		||||
                    doupdatedb = 1;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } else if (delete_user) {
 | 
			
		||||
            if (userindex < 0) {
 | 
			
		||||
                BIO_printf(bio_err,
 | 
			
		||||
                           "user \"%s\" does not exist, operation ignored. t\n",
 | 
			
		||||
                           user);
 | 
			
		||||
                errors++;
 | 
			
		||||
            } else {
 | 
			
		||||
                char **xpp =
 | 
			
		||||
                    sk_OPENSSL_PSTRING_value(db->db->data, userindex);
 | 
			
		||||
                BIO_printf(bio_err, "user \"%s\" revoked. t\n", user);
 | 
			
		||||
 | 
			
		||||
                xpp[DB_srptype][0] = 'R';
 | 
			
		||||
 | 
			
		||||
                doupdatedb = 1;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (--argc > 0)
 | 
			
		||||
            user = *(argv++);
 | 
			
		||||
        else {
 | 
			
		||||
            user = NULL;
 | 
			
		||||
            list_user = 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    VERBOSE BIO_printf(bio_err, "User procession done.\n");
 | 
			
		||||
 | 
			
		||||
    if (doupdatedb) {
 | 
			
		||||
        /* Lets check some fields */
 | 
			
		||||
        for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) {
 | 
			
		||||
            pp = sk_OPENSSL_PSTRING_value(db->db->data, i);
 | 
			
		||||
 | 
			
		||||
            if (pp[DB_srptype][0] == 'v') {
 | 
			
		||||
                pp[DB_srptype][0] = 'V';
 | 
			
		||||
                print_user(db, bio_err, i, verbose);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        VERBOSE BIO_printf(bio_err, "Trying to update srpvfile.\n");
 | 
			
		||||
        if (!save_index(dbfile, "new", db))
 | 
			
		||||
            goto err;
 | 
			
		||||
 | 
			
		||||
        VERBOSE BIO_printf(bio_err, "Temporary srpvfile created.\n");
 | 
			
		||||
        if (!rotate_index(dbfile, "new", "old"))
 | 
			
		||||
            goto err;
 | 
			
		||||
 | 
			
		||||
        VERBOSE BIO_printf(bio_err, "srpvfile updated.\n");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ret = (errors != 0);
 | 
			
		||||
 err:
 | 
			
		||||
    if (errors != 0)
 | 
			
		||||
        VERBOSE BIO_printf(bio_err, "User errors %d.\n", errors);
 | 
			
		||||
 | 
			
		||||
    VERBOSE BIO_printf(bio_err, "SRP terminating with code %d.\n", ret);
 | 
			
		||||
    if (tofree)
 | 
			
		||||
        OPENSSL_free(tofree);
 | 
			
		||||
    if (ret)
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    if (randfile)
 | 
			
		||||
        app_RAND_write_file(randfile, bio_err);
 | 
			
		||||
    if (conf)
 | 
			
		||||
        NCONF_free(conf);
 | 
			
		||||
    if (db)
 | 
			
		||||
        free_index(db);
 | 
			
		||||
 | 
			
		||||
    OBJ_cleanup();
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										1492
									
								
								apps/testrsa.h
									
									
									
									
									
								
							
							
						
						
									
										1492
									
								
								apps/testrsa.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										11
									
								
								apps/ts.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								apps/ts.c
									
									
									
									
									
								
							@@ -105,7 +105,7 @@ static TS_RESP *create_response(CONF *conf, const char *section, char *engine,
 | 
			
		||||
                                char *queryfile, char *passin, char *inkey,
 | 
			
		||||
                                char *signer, char *chain,
 | 
			
		||||
                                const char *policy);
 | 
			
		||||
static ASN1_INTEGER *serial_cb(TS_RESP_CTX *ctx, void *data);
 | 
			
		||||
static ASN1_INTEGER *MS_CALLBACK serial_cb(TS_RESP_CTX *ctx, void *data);
 | 
			
		||||
static ASN1_INTEGER *next_serial(const char *serialfile);
 | 
			
		||||
static int save_ts_serial(const char *serialfile, ASN1_INTEGER *serial);
 | 
			
		||||
 | 
			
		||||
@@ -118,7 +118,7 @@ static TS_VERIFY_CTX *create_verify_ctx(char *data, char *digest,
 | 
			
		||||
                                        char *ca_path, char *ca_file,
 | 
			
		||||
                                        char *untrusted);
 | 
			
		||||
static X509_STORE *create_cert_store(char *ca_path, char *ca_file);
 | 
			
		||||
static int verify_cb(int ok, X509_STORE_CTX *ctx);
 | 
			
		||||
static int MS_CALLBACK verify_cb(int ok, X509_STORE_CTX *ctx);
 | 
			
		||||
 | 
			
		||||
/* Main function definition. */
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
@@ -591,8 +591,7 @@ static int create_digest(BIO *input, char *digest, const EVP_MD *md,
 | 
			
		||||
        while ((length = BIO_read(input, buffer, sizeof(buffer))) > 0) {
 | 
			
		||||
            EVP_DigestUpdate(&md_ctx, buffer, length);
 | 
			
		||||
        }
 | 
			
		||||
        if (!EVP_DigestFinal(&md_ctx, *md_value, NULL))
 | 
			
		||||
            return 0;
 | 
			
		||||
        EVP_DigestFinal(&md_ctx, *md_value, NULL);
 | 
			
		||||
    } else {
 | 
			
		||||
        /* Digest bytes are specified with digest. */
 | 
			
		||||
        long digest_len;
 | 
			
		||||
@@ -859,7 +858,7 @@ static TS_RESP *create_response(CONF *conf, const char *section, char *engine,
 | 
			
		||||
    return response;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static ASN1_INTEGER *serial_cb(TS_RESP_CTX *ctx, void *data)
 | 
			
		||||
static ASN1_INTEGER *MS_CALLBACK serial_cb(TS_RESP_CTX *ctx, void *data)
 | 
			
		||||
{
 | 
			
		||||
    const char *serial_file = (const char *)data;
 | 
			
		||||
    ASN1_INTEGER *serial = next_serial(serial_file);
 | 
			
		||||
@@ -1100,7 +1099,7 @@ static X509_STORE *create_cert_store(char *ca_path, char *ca_file)
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int verify_cb(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
static int MS_CALLBACK verify_cb(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
{
 | 
			
		||||
    /*-
 | 
			
		||||
    char buf[256];
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
#!/usr/bin/perl -w
 | 
			
		||||
# Written by Zoltan Glozik <zglozik@stones.com>.
 | 
			
		||||
# Copyright (c) 2002 The OpenTSA Project.  All rights reserved.
 | 
			
		||||
$::version = '$Id: tsget,v 1.3 2009/09/07 17:57:18 steve Exp $';
 | 
			
		||||
$::version = '$Id: tsget,v 1.1.2.2 2009/09/07 17:57:02 steve Exp $';
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use IO::Handle;
 | 
			
		||||
 
 | 
			
		||||
@@ -69,10 +69,10 @@
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG    verify_main
 | 
			
		||||
 | 
			
		||||
static int cb(int ok, X509_STORE_CTX *ctx);
 | 
			
		||||
static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx);
 | 
			
		||||
static int check(X509_STORE *ctx, char *file,
 | 
			
		||||
                 STACK_OF(X509) *uchain, STACK_OF(X509) *tchain,
 | 
			
		||||
                 STACK_OF(X509_CRL) *crls, ENGINE *e, int show_chain);
 | 
			
		||||
                 STACK_OF(X509_CRL) *crls, ENGINE *e);
 | 
			
		||||
static int v_verbose = 0, vflags = 0;
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
@@ -88,7 +88,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    X509_STORE *cert_ctx = NULL;
 | 
			
		||||
    X509_LOOKUP *lookup = NULL;
 | 
			
		||||
    X509_VERIFY_PARAM *vpm = NULL;
 | 
			
		||||
    int crl_download = 0, show_chain = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
@@ -137,10 +136,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                if (argc-- < 1)
 | 
			
		||||
                    goto end;
 | 
			
		||||
                crlfile = *(++argv);
 | 
			
		||||
            } else if (strcmp(*argv, "-crl_download") == 0)
 | 
			
		||||
                crl_download = 1;
 | 
			
		||||
            else if (strcmp(*argv, "-show_chain") == 0)
 | 
			
		||||
                show_chain = 1;
 | 
			
		||||
            }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
            else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
                if (--argc < 1)
 | 
			
		||||
@@ -217,31 +213,20 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (crl_download)
 | 
			
		||||
        store_setup_crl_download(cert_ctx);
 | 
			
		||||
 | 
			
		||||
    ret = 0;
 | 
			
		||||
    if (argc < 1) {
 | 
			
		||||
        if (1 !=
 | 
			
		||||
            check(cert_ctx, NULL, untrusted, trusted, crls, e, show_chain))
 | 
			
		||||
            ret = -1;
 | 
			
		||||
    } else {
 | 
			
		||||
    if (argc < 1)
 | 
			
		||||
        check(cert_ctx, NULL, untrusted, trusted, crls, e);
 | 
			
		||||
    else
 | 
			
		||||
        for (i = 0; i < argc; i++)
 | 
			
		||||
            if (1 !=
 | 
			
		||||
                check(cert_ctx, argv[i], untrusted, trusted, crls, e,
 | 
			
		||||
                      show_chain))
 | 
			
		||||
                ret = -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
            check(cert_ctx, argv[i], untrusted, trusted, crls, e);
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (ret == 1) {
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "usage: verify [-verbose] [-CApath path] [-CAfile file] [-trusted_first] [-purpose purpose] [-crl_check]");
 | 
			
		||||
                   "usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check]");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        BIO_printf(bio_err, " [-engine e]");
 | 
			
		||||
#endif
 | 
			
		||||
        BIO_printf(bio_err, " cert1 cert2 ...\n");
 | 
			
		||||
 | 
			
		||||
        BIO_printf(bio_err, "recognized usages:\n");
 | 
			
		||||
        for (i = 0; i < X509_PURPOSE_get_count(); i++) {
 | 
			
		||||
            X509_PURPOSE *ptmp;
 | 
			
		||||
@@ -250,15 +235,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                       X509_PURPOSE_get0_sname(ptmp),
 | 
			
		||||
                       X509_PURPOSE_get0_name(ptmp));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        BIO_printf(bio_err, "recognized verify names:\n");
 | 
			
		||||
        for (i = 0; i < X509_VERIFY_PARAM_get_count(); i++) {
 | 
			
		||||
            const X509_VERIFY_PARAM *vptmp;
 | 
			
		||||
            vptmp = X509_VERIFY_PARAM_get0(i);
 | 
			
		||||
            BIO_printf(bio_err, "\t%-10s\n",
 | 
			
		||||
                       X509_VERIFY_PARAM_get0_name(vptmp));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    if (vpm)
 | 
			
		||||
        X509_VERIFY_PARAM_free(vpm);
 | 
			
		||||
@@ -268,17 +244,16 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    sk_X509_pop_free(trusted, X509_free);
 | 
			
		||||
    sk_X509_CRL_pop_free(crls, X509_CRL_free);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret < 0 ? 2 : ret);
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int check(X509_STORE *ctx, char *file,
 | 
			
		||||
                 STACK_OF(X509) *uchain, STACK_OF(X509) *tchain,
 | 
			
		||||
                 STACK_OF(X509_CRL) *crls, ENGINE *e, int show_chain)
 | 
			
		||||
                 STACK_OF(X509_CRL) *crls, ENGINE *e)
 | 
			
		||||
{
 | 
			
		||||
    X509 *x = NULL;
 | 
			
		||||
    int i = 0, ret = 0;
 | 
			
		||||
    X509_STORE_CTX *csc;
 | 
			
		||||
    STACK_OF(X509) *chain = NULL;
 | 
			
		||||
 | 
			
		||||
    x = load_cert(bio_err, file, FORMAT_PEM, NULL, e, "certificate file");
 | 
			
		||||
    if (x == NULL)
 | 
			
		||||
@@ -300,8 +275,6 @@ static int check(X509_STORE *ctx, char *file,
 | 
			
		||||
    if (crls)
 | 
			
		||||
        X509_STORE_CTX_set0_crls(csc, crls);
 | 
			
		||||
    i = X509_verify_cert(csc);
 | 
			
		||||
    if (i > 0 && show_chain)
 | 
			
		||||
        chain = X509_STORE_CTX_get1_chain(csc);
 | 
			
		||||
    X509_STORE_CTX_free(csc);
 | 
			
		||||
 | 
			
		||||
    ret = 0;
 | 
			
		||||
@@ -311,25 +284,13 @@ static int check(X509_STORE *ctx, char *file,
 | 
			
		||||
        ret = 1;
 | 
			
		||||
    } else
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    if (chain) {
 | 
			
		||||
        printf("Chain:\n");
 | 
			
		||||
        for (i = 0; i < sk_X509_num(chain); i++) {
 | 
			
		||||
            X509 *cert = sk_X509_value(chain, i);
 | 
			
		||||
            printf("depth=%d: ", i);
 | 
			
		||||
            X509_NAME_print_ex_fp(stdout,
 | 
			
		||||
                                  X509_get_subject_name(cert),
 | 
			
		||||
                                  0, XN_FLAG_ONELINE);
 | 
			
		||||
            printf("\n");
 | 
			
		||||
        }
 | 
			
		||||
        sk_X509_pop_free(chain, X509_free);
 | 
			
		||||
    }
 | 
			
		||||
    if (x != NULL)
 | 
			
		||||
        X509_free(x);
 | 
			
		||||
 | 
			
		||||
    return (ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int cb(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
{
 | 
			
		||||
    int cert_error = X509_STORE_CTX_get_error(ctx);
 | 
			
		||||
    X509 *current_cert = X509_STORE_CTX_get_current_cert(ctx);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										113
									
								
								apps/x509.c
									
									
									
									
									
								
							
							
						
						
									
										113
									
								
								apps/x509.c
									
									
									
									
									
								
							@@ -60,6 +60,9 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#ifdef OPENSSL_NO_STDIO
 | 
			
		||||
# define APPS_WIN16
 | 
			
		||||
#endif
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/asn1.h>
 | 
			
		||||
@@ -147,25 +150,18 @@ static const char *x509_usage[] = {
 | 
			
		||||
    " -engine e       - use engine e, possibly a hardware device.\n",
 | 
			
		||||
#endif
 | 
			
		||||
    " -certopt arg    - various certificate text options\n",
 | 
			
		||||
    " -checkhost host - check certificate matches \"host\"\n",
 | 
			
		||||
    " -checkemail email - check certificate matches \"email\"\n",
 | 
			
		||||
    " -checkip ipaddr - check certificate matches \"ipaddr\"\n",
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int callb(int ok, X509_STORE_CTX *ctx);
 | 
			
		||||
static int MS_CALLBACK callb(int ok, X509_STORE_CTX *ctx);
 | 
			
		||||
static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext,
 | 
			
		||||
                const EVP_MD *digest, CONF *conf, char *section);
 | 
			
		||||
static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
 | 
			
		||||
                        X509 *x, X509 *xca, EVP_PKEY *pkey,
 | 
			
		||||
                        STACK_OF(OPENSSL_STRING) *sigopts, char *serial,
 | 
			
		||||
                        X509 *x, X509 *xca, EVP_PKEY *pkey, char *serial,
 | 
			
		||||
                        int create, int days, int clrext, CONF *conf,
 | 
			
		||||
                        char *section, ASN1_INTEGER *sno);
 | 
			
		||||
static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt);
 | 
			
		||||
static int reqfile = 0;
 | 
			
		||||
#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
 | 
			
		||||
static int force_version = 2;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
@@ -176,17 +172,15 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    X509_REQ *req = NULL;
 | 
			
		||||
    X509 *x = NULL, *xca = NULL;
 | 
			
		||||
    ASN1_OBJECT *objtmp;
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *sigopts = NULL;
 | 
			
		||||
    EVP_PKEY *Upkey = NULL, *CApkey = NULL, *fkey = NULL;
 | 
			
		||||
    EVP_PKEY *Upkey = NULL, *CApkey = NULL;
 | 
			
		||||
    ASN1_INTEGER *sno = NULL;
 | 
			
		||||
    int i, num, badops = 0, badsig = 0;
 | 
			
		||||
    int i, num, badops = 0;
 | 
			
		||||
    BIO *out = NULL;
 | 
			
		||||
    BIO *STDout = NULL;
 | 
			
		||||
    STACK_OF(ASN1_OBJECT) *trust = NULL, *reject = NULL;
 | 
			
		||||
    int informat, outformat, keyformat, CAformat, CAkeyformat;
 | 
			
		||||
    char *infile = NULL, *outfile = NULL, *keyfile = NULL, *CAfile = NULL;
 | 
			
		||||
    char *CAkeyfile = NULL, *CAserial = NULL;
 | 
			
		||||
    char *fkeyfile = NULL;
 | 
			
		||||
    char *alias = NULL;
 | 
			
		||||
    int text = 0, serial = 0, subject = 0, issuer = 0, startdate =
 | 
			
		||||
        0, enddate = 0;
 | 
			
		||||
@@ -212,9 +206,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    int need_rand = 0;
 | 
			
		||||
    int checkend = 0, checkoffset = 0;
 | 
			
		||||
    unsigned long nmflag = 0, certflag = 0;
 | 
			
		||||
    char *checkhost = NULL;
 | 
			
		||||
    char *checkemail = NULL;
 | 
			
		||||
    char *checkip = NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
@@ -274,27 +265,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            CAkeyformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-sigopt") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!sigopts)
 | 
			
		||||
                sigopts = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
            if (!sigopts || !sk_OPENSSL_STRING_push(sigopts, *(++argv)))
 | 
			
		||||
                goto bad;
 | 
			
		||||
        }
 | 
			
		||||
#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
 | 
			
		||||
        else if (strcmp(*argv, "-force_version") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            force_version = atoi(*(++argv)) - 1;
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
        else if (strcmp(*argv, "-days") == 0) {
 | 
			
		||||
        } else if (strcmp(*argv, "-days") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            days = atoi(*(++argv));
 | 
			
		||||
            if (days == 0) {
 | 
			
		||||
                BIO_printf(bio_err, "bad number of days\n");
 | 
			
		||||
                BIO_printf(STDout, "bad number of days\n");
 | 
			
		||||
                goto bad;
 | 
			
		||||
            }
 | 
			
		||||
        } else if (strcmp(*argv, "-passin") == 0) {
 | 
			
		||||
@@ -342,10 +318,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!(sno = s2i_ASN1_INTEGER(NULL, *(++argv))))
 | 
			
		||||
                goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-force_pubkey") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            fkeyfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-addtrust") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
@@ -443,18 +415,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            checkoffset = atoi(*(++argv));
 | 
			
		||||
            checkend = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-checkhost") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            checkhost = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-checkemail") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            checkemail = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-checkip") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            checkip = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-trustout") == 0)
 | 
			
		||||
@@ -478,8 +438,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#endif
 | 
			
		||||
        else if (strcmp(*argv, "-ocspid") == 0)
 | 
			
		||||
            ocspid = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-badsig") == 0)
 | 
			
		||||
            badsig = 1;
 | 
			
		||||
        else if ((md_alg = EVP_get_digestbyname(*argv + 1))) {
 | 
			
		||||
            /* ok */
 | 
			
		||||
            digest = md_alg;
 | 
			
		||||
@@ -517,13 +475,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (fkeyfile) {
 | 
			
		||||
        fkey = load_pubkey(bio_err, fkeyfile, keyformat, 0,
 | 
			
		||||
                           NULL, e, "Forced key");
 | 
			
		||||
        if (fkey == NULL)
 | 
			
		||||
            goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ((CAkeyfile == NULL) && (CA_flag) && (CAformat == FORMAT_PEM)) {
 | 
			
		||||
        CAkeyfile = CAfile;
 | 
			
		||||
    } else if ((CA_flag) && (CAkeyfile == NULL)) {
 | 
			
		||||
@@ -645,13 +596,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
        X509_gmtime_adj(X509_get_notBefore(x), 0);
 | 
			
		||||
        X509_time_adj_ex(X509_get_notAfter(x), days, 0, NULL);
 | 
			
		||||
        if (fkey)
 | 
			
		||||
            X509_set_pubkey(x, fkey);
 | 
			
		||||
        else {
 | 
			
		||||
            pkey = X509_REQ_get_pubkey(req);
 | 
			
		||||
            X509_set_pubkey(x, pkey);
 | 
			
		||||
            EVP_PKEY_free(pkey);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        pkey = X509_REQ_get_pubkey(req);
 | 
			
		||||
        X509_set_pubkey(x, pkey);
 | 
			
		||||
        EVP_PKEY_free(pkey);
 | 
			
		||||
    } else
 | 
			
		||||
        x = load_cert(bio_err, infile, informat, NULL, e, "Certificate");
 | 
			
		||||
 | 
			
		||||
@@ -868,7 +816,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
                OPENSSL_free(m);
 | 
			
		||||
            } else if (text == i) {
 | 
			
		||||
                X509_print_ex(STDout, x, nmflag, certflag);
 | 
			
		||||
                X509_print_ex(out, x, nmflag, certflag);
 | 
			
		||||
            } else if (startdate == i) {
 | 
			
		||||
                BIO_puts(STDout, "notBefore=");
 | 
			
		||||
                ASN1_TIME_print(STDout, X509_get_notBefore(x));
 | 
			
		||||
@@ -924,9 +872,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
                assert(need_rand);
 | 
			
		||||
                if (!x509_certify(ctx, CAfile, digest, x, xca,
 | 
			
		||||
                                  CApkey, sigopts,
 | 
			
		||||
                                  CAserial, CA_createserial, days, clrext,
 | 
			
		||||
                                  extconf, extsect, sno))
 | 
			
		||||
                                  CApkey, CAserial, CA_createserial, days,
 | 
			
		||||
                                  clrext, extconf, extsect, sno))
 | 
			
		||||
                    goto end;
 | 
			
		||||
            } else if (x509req == i) {
 | 
			
		||||
                EVP_PKEY *pk;
 | 
			
		||||
@@ -975,16 +922,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    print_cert_checks(STDout, x, checkhost, checkemail, checkip);
 | 
			
		||||
 | 
			
		||||
    if (noout) {
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (badsig)
 | 
			
		||||
        x->signature->data[x->signature->length - 1] ^= 0x1;
 | 
			
		||||
 | 
			
		||||
    if (outformat == FORMAT_ASN1)
 | 
			
		||||
        i = i2d_X509_bio(out, x);
 | 
			
		||||
    else if (outformat == FORMAT_PEM) {
 | 
			
		||||
@@ -1025,9 +967,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    X509_free(xca);
 | 
			
		||||
    EVP_PKEY_free(Upkey);
 | 
			
		||||
    EVP_PKEY_free(CApkey);
 | 
			
		||||
    EVP_PKEY_free(fkey);
 | 
			
		||||
    if (sigopts)
 | 
			
		||||
        sk_OPENSSL_STRING_free(sigopts);
 | 
			
		||||
    X509_REQ_free(rq);
 | 
			
		||||
    ASN1_INTEGER_free(sno);
 | 
			
		||||
    sk_ASN1_OBJECT_pop_free(trust, ASN1_OBJECT_free);
 | 
			
		||||
@@ -1085,11 +1024,9 @@ static ASN1_INTEGER *x509_load_serial(char *CAfile, char *serialfile,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
 | 
			
		||||
                        X509 *x, X509 *xca, EVP_PKEY *pkey,
 | 
			
		||||
                        STACK_OF(OPENSSL_STRING) *sigopts,
 | 
			
		||||
                        char *serialfile, int create,
 | 
			
		||||
                        int days, int clrext, CONF *conf, char *section,
 | 
			
		||||
                        ASN1_INTEGER *sno)
 | 
			
		||||
                        X509 *x, X509 *xca, EVP_PKEY *pkey, char *serialfile,
 | 
			
		||||
                        int create, int days, int clrext, CONF *conf,
 | 
			
		||||
                        char *section, ASN1_INTEGER *sno)
 | 
			
		||||
{
 | 
			
		||||
    int ret = 0;
 | 
			
		||||
    ASN1_INTEGER *bs = NULL;
 | 
			
		||||
@@ -1145,18 +1082,14 @@ static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
 | 
			
		||||
 | 
			
		||||
    if (conf) {
 | 
			
		||||
        X509V3_CTX ctx2;
 | 
			
		||||
#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
 | 
			
		||||
        X509_set_version(x, force_version);
 | 
			
		||||
#else
 | 
			
		||||
        X509_set_version(x, 2); /* version 3 certificate */
 | 
			
		||||
#endif
 | 
			
		||||
        X509V3_set_ctx(&ctx2, xca, x, NULL, NULL, 0);
 | 
			
		||||
        X509V3_set_nconf(&ctx2, conf);
 | 
			
		||||
        if (!X509V3_EXT_add_nconf(conf, &ctx2, section, x))
 | 
			
		||||
            goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!do_X509_sign(bio_err, x, pkey, digest, sigopts))
 | 
			
		||||
    if (!X509_sign(x, pkey, digest))
 | 
			
		||||
        goto end;
 | 
			
		||||
    ret = 1;
 | 
			
		||||
 end:
 | 
			
		||||
@@ -1168,7 +1101,7 @@ static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int callb(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
static int MS_CALLBACK callb(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
{
 | 
			
		||||
    int err;
 | 
			
		||||
    X509 *err_cert;
 | 
			
		||||
@@ -1234,11 +1167,7 @@ static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext,
 | 
			
		||||
    }
 | 
			
		||||
    if (conf) {
 | 
			
		||||
        X509V3_CTX ctx;
 | 
			
		||||
#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
 | 
			
		||||
        X509_set_version(x, force_version);
 | 
			
		||||
#else
 | 
			
		||||
        X509_set_version(x, 2); /* version 3 certificate */
 | 
			
		||||
#endif
 | 
			
		||||
        X509V3_set_ctx(&ctx, x, x, NULL, NULL, 0);
 | 
			
		||||
        X509V3_set_nconf(&ctx, conf);
 | 
			
		||||
        if (!X509V3_EXT_add_nconf(conf, &ctx, section, x))
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								bugs/dggccbug.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								bugs/dggccbug.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
/* NOCW */
 | 
			
		||||
/* dggccbug.c */
 | 
			
		||||
/* bug found by Eric Young (eay@cryptsoft.com) - May 1995 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * There is a bug in gcc version 2.5.8 (88open OCS/BCS, DG-2.5.8.3, Oct 14
 | 
			
		||||
 * 1994) as shipped with DGUX 5.4R3.10 that can be bypassed by defining
 | 
			
		||||
 * DG_GCC_BUG in my code. The bug manifests itself by the vaule of a pointer
 | 
			
		||||
 * that is used only by reference, not having it's value change when it is
 | 
			
		||||
 * used to check for exiting the loop.  Probably caused by there being 2
 | 
			
		||||
 * copies of the valiable, one in a register and one being an address that is
 | 
			
		||||
 * passed.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * compare the out put from
 | 
			
		||||
 * gcc dggccbug.c; ./a.out
 | 
			
		||||
 * and
 | 
			
		||||
 * gcc -O dggccbug.c; ./a.out
 | 
			
		||||
 * compile with -DFIXBUG to remove the bug when optimising.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void inc(a)
 | 
			
		||||
int *a;
 | 
			
		||||
{
 | 
			
		||||
    (*a)++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main()
 | 
			
		||||
{
 | 
			
		||||
    int p = 0;
 | 
			
		||||
#ifdef FIXBUG
 | 
			
		||||
    int dummy;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    while (p < 3) {
 | 
			
		||||
        fprintf(stderr, "%08X\n", p);
 | 
			
		||||
        inc(&p);
 | 
			
		||||
#ifdef FIXBUG
 | 
			
		||||
        dummy += p;
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -17,10 +17,10 @@ is returned as 1.
 | 
			
		||||
=====
 | 
			
		||||
I have not tested the following but it is reported by holtzman@mit.edu.
 | 
			
		||||
 | 
			
		||||
SSLref clients wait to receive a server-verify before they send a
 | 
			
		||||
SSLref clients wait to recieve a server-verify before they send a
 | 
			
		||||
client-finished.  Besides this not being evident from the examples in
 | 
			
		||||
2.2.1, it makes more sense to always send all packets you can before
 | 
			
		||||
reading.  SSLeay was waiting in the server to receive a client-finish
 | 
			
		||||
reading.  SSLeay was waiting in the server to recieve a client-finish
 | 
			
		||||
before sending the server-verify :-).  I have changed SSLeay to send a
 | 
			
		||||
server-verify before trying to read the client-finished.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										171
									
								
								config
									
									
									
									
									
								
							
							
						
						
									
										171
									
								
								config
									
									
									
									
									
								
							@@ -102,6 +102,10 @@ fi
 | 
			
		||||
# Now we simply scan though... In most cases, the SYSTEM info is enough
 | 
			
		||||
#
 | 
			
		||||
case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
			
		||||
    MPE/iX:*)
 | 
			
		||||
	MACHINE=`echo "$MACHINE" | sed -e 's/-/_/g'`
 | 
			
		||||
	echo "parisc-hp-MPE/iX"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
    A/UX:*)
 | 
			
		||||
	echo "m68k-apple-aux3"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
@@ -118,6 +122,18 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
			
		||||
	echo "${MACHINE}-ibm-aix3"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    BeOS:*:BePC)
 | 
			
		||||
    if [ -e /boot/develop/headers/be/bone ]; then
 | 
			
		||||
		echo "beos-x86-bone"; exit 0
 | 
			
		||||
	else
 | 
			
		||||
		echo "beos-x86-r5"; exit 0
 | 
			
		||||
	fi
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    dgux:*)
 | 
			
		||||
	echo "${MACHINE}-dg-dgux"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    HI-UX:*)
 | 
			
		||||
	echo "${MACHINE}-hi-hiux"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
@@ -304,6 +320,10 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
			
		||||
	echo "${MACHINE}-unknown-ultrix"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    SINIX*|ReliantUNIX*)
 | 
			
		||||
	echo "${MACHINE}-siemens-sysv4"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    POSIX-BC*)
 | 
			
		||||
	echo "${MACHINE}-siemens-sysv4"; exit 0   # Here, $MACHINE == "BS2000"
 | 
			
		||||
	;;
 | 
			
		||||
@@ -320,6 +340,10 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
			
		||||
	echo "${MACHINE}-v11-${SYSTEM}"; exit 0;
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    NEWS-OS:4.*)
 | 
			
		||||
	echo "mips-sony-newsos4"; exit 0;
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    MINGW*)
 | 
			
		||||
	echo "${MACHINE}-whatever-mingw"; exit 0;
 | 
			
		||||
	;;
 | 
			
		||||
@@ -335,8 +359,16 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
			
		||||
	exit 0
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    vxworks*)
 | 
			
		||||
       echo "${MACHINE}-whatever-vxworks"; exit 0;
 | 
			
		||||
    *"CRAY T3E")
 | 
			
		||||
       echo "t3e-cray-unicosmk"; exit 0;
 | 
			
		||||
       ;;
 | 
			
		||||
 | 
			
		||||
    *CRAY*)
 | 
			
		||||
       echo "j90-cray-unicos"; exit 0;
 | 
			
		||||
       ;;
 | 
			
		||||
 | 
			
		||||
    NONSTOP_KERNEL*)
 | 
			
		||||
       echo "nsr-tandem-nsk"; exit 0;
 | 
			
		||||
       ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
@@ -346,7 +378,7 @@ esac
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# Do the Apollo stuff first. Here, we just simply assume
 | 
			
		||||
# that the existence of the /usr/apollo directory is proof
 | 
			
		||||
# that the existance of the /usr/apollo directory is proof
 | 
			
		||||
# enough
 | 
			
		||||
if [ -d /usr/apollo ]; then
 | 
			
		||||
    echo "whatever-apollo-whatever"
 | 
			
		||||
@@ -375,18 +407,23 @@ exit 0
 | 
			
		||||
# this is where the translation occurs into SSLeay terms
 | 
			
		||||
# ---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
GCCVER=`(gcc -dumpversion) 2>/dev/null`
 | 
			
		||||
if [ "$GCCVER" != "" ]; then
 | 
			
		||||
  # then strip off whatever prefix egcs prepends the number with...
 | 
			
		||||
  # Hopefully, this will work for any future prefixes as well.
 | 
			
		||||
  GCCVER=`echo $GCCVER | LC_ALL=C sed 's/^[a-zA-Z]*\-//'`
 | 
			
		||||
  # Since gcc 3.1 gcc --version behaviour has changed.  gcc -dumpversion
 | 
			
		||||
  # does give us what we want though, so we use that.  We just just the
 | 
			
		||||
  # major and minor version numbers.
 | 
			
		||||
  # peak single digit before and after first dot, e.g. 2.95.1 gives 29
 | 
			
		||||
  GCCVER=`echo $GCCVER | sed 's/\([0-9]\)\.\([0-9]\).*/\1\2/'`
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Only set CC if not supplied already
 | 
			
		||||
if [ -z "$CROSS_COMPILE$CC" ]; then
 | 
			
		||||
  GCCVER=`sh -c "gcc -dumpversion" 2>/dev/null`
 | 
			
		||||
if [ -z "$CC" ]; then
 | 
			
		||||
# figure out if gcc is available and if so we use it otherwise
 | 
			
		||||
# we fallback to whatever cc does on the system
 | 
			
		||||
  if [ "$GCCVER" != "" ]; then
 | 
			
		||||
    # then strip off whatever prefix egcs prepends the number with...
 | 
			
		||||
    # Hopefully, this will work for any future prefixes as well.
 | 
			
		||||
    GCCVER=`echo $GCCVER | LC_ALL=C sed 's/^[a-zA-Z]*\-//'`
 | 
			
		||||
    # Since gcc 3.1 gcc --version behaviour has changed.  gcc -dumpversion
 | 
			
		||||
    # does give us what we want though, so we use that.  We just just the
 | 
			
		||||
    # major and minor version numbers.
 | 
			
		||||
    # peak single digit before and after first dot, e.g. 2.95.1 gives 29
 | 
			
		||||
    GCCVER=`echo $GCCVER | sed 's/\([0-9]\)\.\([0-9]\).*/\1\2/'`
 | 
			
		||||
    CC=gcc
 | 
			
		||||
  else
 | 
			
		||||
    CC=cc
 | 
			
		||||
@@ -502,7 +539,7 @@ case "$GUESSOS" in
 | 
			
		||||
  ppc-apple-rhapsody) OUT="rhapsody-ppc-cc" ;;
 | 
			
		||||
  ppc-apple-darwin*)
 | 
			
		||||
	ISA64=`(sysctl -n hw.optional.64bitops) 2>/dev/null`
 | 
			
		||||
	if [ "$ISA64" = "1" -a -z "$KERNEL_BITS" ]; then
 | 
			
		||||
	if [ "$ISA64" = "1" ]; then
 | 
			
		||||
	    echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
			
		||||
	    echo "         invoke './Configure darwin64-ppc-cc' *manually*."
 | 
			
		||||
	    if [ "$TEST" = "false" -a -t 1 ]; then
 | 
			
		||||
@@ -510,14 +547,10 @@ case "$GUESSOS" in
 | 
			
		||||
	      (trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
	    fi
 | 
			
		||||
	fi
 | 
			
		||||
	if [ "$ISA64" = "1" -a "$KERNEL_BITS" = "64" ]; then
 | 
			
		||||
	    OUT="darwin64-ppc-cc"
 | 
			
		||||
	else
 | 
			
		||||
	    OUT="darwin-ppc-cc"
 | 
			
		||||
	fi ;;
 | 
			
		||||
	OUT="darwin-ppc-cc" ;;
 | 
			
		||||
  i?86-apple-darwin*)
 | 
			
		||||
	ISA64=`(sysctl -n hw.optional.x86_64) 2>/dev/null`
 | 
			
		||||
	if [ "$ISA64" = "1" -a -z "$KERNEL_BITS" ]; then
 | 
			
		||||
	if [ "$ISA64" = "1" ]; then
 | 
			
		||||
	    echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
			
		||||
	    echo "         invoke './Configure darwin64-x86_64-cc' *manually*."
 | 
			
		||||
	    if [ "$TEST" = "false" -a -t 1 ]; then
 | 
			
		||||
@@ -525,19 +558,7 @@ case "$GUESSOS" in
 | 
			
		||||
	      (trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
	    fi
 | 
			
		||||
	fi
 | 
			
		||||
	if [ "$ISA64" = "1" -a "$KERNEL_BITS" = "64" ]; then
 | 
			
		||||
	    OUT="darwin64-x86_64-cc"
 | 
			
		||||
	else
 | 
			
		||||
	    OUT="darwin-i386-cc"
 | 
			
		||||
	fi ;;
 | 
			
		||||
  armv6+7-*-iphoneos)
 | 
			
		||||
	options="$options -arch%20armv6 -arch%20armv7"
 | 
			
		||||
	OUT="iphoneos-cross" ;;
 | 
			
		||||
  *-*-iphoneos)
 | 
			
		||||
	options="$options -arch%20${MACHINE}"
 | 
			
		||||
	OUT="iphoneos-cross" ;;
 | 
			
		||||
  arm64-*-iphoneos|*-*-ios64)
 | 
			
		||||
	OUT="ios64-cross" ;;
 | 
			
		||||
	OUT="darwin-i386-cc" ;;
 | 
			
		||||
  alpha-*-linux2)
 | 
			
		||||
        ISA=`awk '/cpu model/{print$4;exit(0);}' /proc/cpuinfo`
 | 
			
		||||
	case ${ISA:-generic} in
 | 
			
		||||
@@ -553,38 +574,15 @@ case "$GUESSOS" in
 | 
			
		||||
	fi
 | 
			
		||||
	;;
 | 
			
		||||
  ppc64-*-linux2)
 | 
			
		||||
	if [ -z "$KERNEL_BITS" ]; then
 | 
			
		||||
	    echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
			
		||||
	    echo "         invoke './Configure linux-ppc64' *manually*."
 | 
			
		||||
	    if [ "$TEST" = "false" -a -t 1 ]; then
 | 
			
		||||
		echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
		(trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
	    fi
 | 
			
		||||
	fi
 | 
			
		||||
	if [ "$KERNEL_BITS" = "64" ]; then
 | 
			
		||||
	    OUT="linux-ppc64"
 | 
			
		||||
	else
 | 
			
		||||
	    OUT="linux-ppc"
 | 
			
		||||
	    (echo "__LP64__" | gcc -E -x c - 2>/dev/null | grep "^__LP64__" 2>&1 > /dev/null) || options="$options -m32"
 | 
			
		||||
	fi
 | 
			
		||||
	;;
 | 
			
		||||
  ppc64le-*-linux2) OUT="linux-ppc64le" ;;
 | 
			
		||||
  ppc-*-linux2) OUT="linux-ppc" ;;
 | 
			
		||||
  mips64*-*-linux2)
 | 
			
		||||
	echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
			
		||||
	echo "         invoke './Configure linux64-mips64' *manually*."
 | 
			
		||||
	echo "         invoke './Configure linux-ppc64' *manually*."
 | 
			
		||||
	if [ "$TEST" = "false" -a -t 1 ]; then
 | 
			
		||||
	    echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
	    (trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
	fi
 | 
			
		||||
	OUT="linux-mips64"
 | 
			
		||||
	OUT="linux-ppc"
 | 
			
		||||
	;;
 | 
			
		||||
  mips*-*-linux2) OUT="linux-mips32" ;;
 | 
			
		||||
  ppc60x-*-vxworks*) OUT="vxworks-ppc60x" ;;
 | 
			
		||||
  ppcgen-*-vxworks*) OUT="vxworks-ppcgen" ;;
 | 
			
		||||
  pentium-*-vxworks*) OUT="vxworks-pentium" ;;
 | 
			
		||||
  simlinux-*-vxworks*) OUT="vxworks-simlinux" ;;
 | 
			
		||||
  mips-*-vxworks*) OUT="vxworks-mips";;
 | 
			
		||||
  ppc-*-linux2) OUT="linux-ppc" ;;
 | 
			
		||||
  ia64-*-linux?) OUT="linux-ia64" ;;
 | 
			
		||||
  sparc64-*-linux2)
 | 
			
		||||
	echo "WARNING! If you *know* that your GNU C supports 64-bit/V9 ABI"
 | 
			
		||||
@@ -626,25 +624,12 @@ case "$GUESSOS" in
 | 
			
		||||
	options="$options -DB_ENDIAN -mschedule=$CPUSCHEDULE -march=$CPUARCH"
 | 
			
		||||
	OUT="linux-generic32" ;;
 | 
			
		||||
  armv[1-3]*-*-linux2) OUT="linux-generic32" ;;
 | 
			
		||||
  armv[7-9]*-*-linux2) OUT="linux-armv4"; options="$options -march=armv7-a" ;;
 | 
			
		||||
  arm*-*-linux2) OUT="linux-armv4" ;;
 | 
			
		||||
  aarch64-*-linux2) OUT="linux-aarch64" ;;
 | 
			
		||||
  sh*b-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN" ;;
 | 
			
		||||
  sh*-*-linux2)  OUT="linux-generic32"; options="$options -DL_ENDIAN" ;;
 | 
			
		||||
  m68k*-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN" ;;
 | 
			
		||||
  s390-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN" ;;
 | 
			
		||||
  s390x-*-linux2)
 | 
			
		||||
	# To be uncommented when glibc bug is fixed, see Configure...
 | 
			
		||||
	#if egrep -e '^features.* highgprs' /proc/cpuinfo >/dev/null ; then
 | 
			
		||||
	#  echo "WARNING! If you wish to build \"highgprs\" 32-bit library, then you"
 | 
			
		||||
	#  echo "         have to invoke './Configure linux32-s390x' *manually*."
 | 
			
		||||
	#  if [ "$TEST" = "false" -a -t -1 ]; then
 | 
			
		||||
	#    echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
	#    (trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
	#  fi
 | 
			
		||||
	#fi
 | 
			
		||||
	OUT="linux64-s390x"
 | 
			
		||||
	;;
 | 
			
		||||
  s390x-*-linux2) OUT="linux-s390x" ;;
 | 
			
		||||
  x86_64-*-linux?) OUT="linux-x86_64" ;;
 | 
			
		||||
  *86-*-linux2) OUT="linux-elf"
 | 
			
		||||
	if [ "$GCCVER" -gt 28 ]; then
 | 
			
		||||
@@ -663,7 +648,7 @@ case "$GUESSOS" in
 | 
			
		||||
  sun4[uv]*-*-solaris2)
 | 
			
		||||
	OUT="solaris-sparcv9-$CC"
 | 
			
		||||
	ISA64=`(isalist) 2>/dev/null | grep sparcv9`
 | 
			
		||||
	if [ "$ISA64" != "" -a "$KERNEL_BITS" = "" ]; then
 | 
			
		||||
	if [ "$ISA64" != "" ]; then
 | 
			
		||||
	    if [ "$CC" = "cc" -a $CCVER -ge 50 ]; then
 | 
			
		||||
		echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
			
		||||
		echo "         invoke './Configure solaris64-sparcv9-cc' *manually*."
 | 
			
		||||
@@ -693,16 +678,13 @@ case "$GUESSOS" in
 | 
			
		||||
		fi
 | 
			
		||||
	    fi
 | 
			
		||||
	fi
 | 
			
		||||
	if [ "$ISA64" != "" -a "$KERNEL_BITS" = "64" ]; then
 | 
			
		||||
	    OUT="solaris64-sparcv9-$CC"
 | 
			
		||||
	fi
 | 
			
		||||
	;;
 | 
			
		||||
  sun4m-*-solaris2)	OUT="solaris-sparcv8-$CC" ;;
 | 
			
		||||
  sun4d-*-solaris2)	OUT="solaris-sparcv8-$CC" ;;
 | 
			
		||||
  sun4*-*-solaris2)	OUT="solaris-sparcv7-$CC" ;;
 | 
			
		||||
  *86*-*-solaris2)
 | 
			
		||||
	ISA64=`(isalist) 2>/dev/null | grep amd64`
 | 
			
		||||
	if [ "$ISA64" != "" -a ${KERNEL_BITS:-64} -eq 64 ]; then
 | 
			
		||||
	if [ "$ISA64" != "" ]; then
 | 
			
		||||
	    OUT="solaris64-x86_64-$CC"
 | 
			
		||||
	else
 | 
			
		||||
	    OUT="solaris-x86-$CC"
 | 
			
		||||
@@ -748,21 +730,26 @@ case "$GUESSOS" in
 | 
			
		||||
	EXE=".pm"
 | 
			
		||||
	OUT="vos-$CC" ;;
 | 
			
		||||
  BS2000-siemens-sysv4) OUT="BS2000-OSD" ;;
 | 
			
		||||
  RM*-siemens-sysv4) OUT="ReliantUNIX" ;;
 | 
			
		||||
  *-siemens-sysv4) OUT="SINIX" ;;
 | 
			
		||||
  *-hpux1*)
 | 
			
		||||
	if [ $CC = "gcc" -a $GCC_BITS = "64" ]; then
 | 
			
		||||
	    OUT="hpux64-parisc2-gcc"
 | 
			
		||||
	fi
 | 
			
		||||
	[ "$KERNEL_BITS" ] || KERNEL_BITS=`(getconf KERNEL_BITS) 2>/dev/null`
 | 
			
		||||
	KERNEL_BITS=`(getconf KERNEL_BITS) 2>/dev/null`
 | 
			
		||||
	KERNEL_BITS=${KERNEL_BITS:-32}
 | 
			
		||||
	CPU_VERSION=`(getconf CPU_VERSION) 2>/dev/null`
 | 
			
		||||
	CPU_VERSION=${CPU_VERSION:-0}
 | 
			
		||||
	# See <sys/unistd.h> for further info on CPU_VERSION.
 | 
			
		||||
	if   [ $CPU_VERSION -ge 768 ]; then	# IA-64 CPU
 | 
			
		||||
	     if [ $KERNEL_BITS -eq 64 -a "$CC" = "cc" ]; then
 | 
			
		||||
	        OUT="hpux64-ia64-cc"
 | 
			
		||||
             else
 | 
			
		||||
	        OUT="hpux-ia64-cc"
 | 
			
		||||
             fi
 | 
			
		||||
	     echo "WARNING! 64-bit ABI is the default configured ABI on HP-UXi."
 | 
			
		||||
	     echo "         If you wish to build 32-bit library, the you have to"
 | 
			
		||||
	     echo "         invoke './Configure hpux-ia64-cc' *manually*."
 | 
			
		||||
	     if [ "$TEST" = "false" -a -t 1 ]; then
 | 
			
		||||
		echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
		(trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
	     fi
 | 
			
		||||
	     OUT="hpux64-ia64-cc"
 | 
			
		||||
	elif [ $CPU_VERSION -ge 532 ]; then	# PA-RISC 2.x CPU
 | 
			
		||||
	     OUT=${OUT:-"hpux-parisc2-${CC}"}
 | 
			
		||||
	     if [ $KERNEL_BITS -eq 64 -a "$CC" = "cc" ]; then
 | 
			
		||||
@@ -783,7 +770,7 @@ case "$GUESSOS" in
 | 
			
		||||
	options="$options -D_REENTRANT" ;;
 | 
			
		||||
  *-hpux)	OUT="hpux-parisc-$CC" ;;
 | 
			
		||||
  *-aix)
 | 
			
		||||
	[ "$KERNEL_BITS" ] || KERNEL_BITS=`(getconf KERNEL_BITMODE) 2>/dev/null`
 | 
			
		||||
	KERNEL_BITS=`(getconf KERNEL_BITMODE) 2>/dev/null`
 | 
			
		||||
	KERNEL_BITS=${KERNEL_BITS:-32}
 | 
			
		||||
	OBJECT_MODE=${OBJECT_MODE:-32}
 | 
			
		||||
	if [ "$CC" = "gcc" ]; then
 | 
			
		||||
@@ -813,16 +800,20 @@ case "$GUESSOS" in
 | 
			
		||||
	fi
 | 
			
		||||
	;;
 | 
			
		||||
  # these are all covered by the catchall below
 | 
			
		||||
  # *-dgux) OUT="dgux" ;;
 | 
			
		||||
  mips-sony-newsos4) OUT="newsos4-gcc" ;;
 | 
			
		||||
  *-*-cygwin_pre1.3) OUT="Cygwin-pre1.3" ;;
 | 
			
		||||
  *-*-cygwin) OUT="Cygwin" ;;
 | 
			
		||||
  t3e-cray-unicosmk) OUT="cray-t3e" ;;
 | 
			
		||||
  j90-cray-unicos) OUT="cray-j90" ;;
 | 
			
		||||
  nsr-tandem-nsk) OUT="tandem-c89" ;;
 | 
			
		||||
  beos-*) OUT="$GUESSOS" ;;
 | 
			
		||||
  x86pc-*-qnx6) OUT="QNX6-i386" ;;
 | 
			
		||||
  *-*-qnx6) OUT="QNX6" ;;
 | 
			
		||||
  x86-*-android|i?86-*-android) OUT="android-x86" ;;
 | 
			
		||||
  armv[7-9]*-*-android) OUT="android-armv7" ;;
 | 
			
		||||
  *) OUT=`echo $GUESSOS | awk -F- '{print $3}'`;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
# NB: This atalla support has been superseded by the ENGINE support
 | 
			
		||||
# NB: This atalla support has been superceded by the ENGINE support
 | 
			
		||||
# That contains its own header and definitions anyway. Support can
 | 
			
		||||
# be enabled or disabled on any supported platform without external
 | 
			
		||||
# headers, eg. by adding the "hw-atalla" switch to ./config or
 | 
			
		||||
@@ -834,10 +825,6 @@ esac
 | 
			
		||||
#  options="$options -DATALLA"
 | 
			
		||||
#fi
 | 
			
		||||
 | 
			
		||||
if [ -n "$CONFIG_OPTIONS" ]; then
 | 
			
		||||
  options="$options $CONFIG_OPTIONS"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if expr "$options" : '.*no\-asm' > /dev/null; then :; else
 | 
			
		||||
  sh -c "$CROSS_COMPILE${CC:-gcc} -Wa,--help -c -o /tmp/null.$$.o -x assembler /dev/null && rm /tmp/null.$$.o" 2>&1 | \
 | 
			
		||||
  grep \\--noexecstack >/dev/null && \
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								crypto/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								crypto/.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
lib
 | 
			
		||||
buildinf.h
 | 
			
		||||
opensslconf.h
 | 
			
		||||
Makefile.save
 | 
			
		||||
*.flc
 | 
			
		||||
semantic.cache
 | 
			
		||||
*cpuid.s
 | 
			
		||||
uplink-cof.s
 | 
			
		||||
@@ -7,7 +7,7 @@ TOP=		..
 | 
			
		||||
CC=		cc
 | 
			
		||||
INCLUDE=	-I. -I$(TOP) -I../include $(ZLIB_INCLUDE)
 | 
			
		||||
# INCLUDES targets sudbirs!
 | 
			
		||||
INCLUDES=	-I.. -I../.. -I../modes -I../asn1 -I../evp -I../include -I../../include $(ZLIB_INCLUDE)
 | 
			
		||||
INCLUDES=	-I.. -I../.. -I../asn1 -I../evp -I../../include $(ZLIB_INCLUDE)
 | 
			
		||||
CFLAG=		-g
 | 
			
		||||
MAKEDEPPROG=	makedepend
 | 
			
		||||
MAKEDEPEND=	$(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
 | 
			
		||||
@@ -35,18 +35,14 @@ TEST=constant_time_test.c
 | 
			
		||||
 | 
			
		||||
LIB= $(TOP)/libcrypto.a
 | 
			
		||||
SHARED_LIB= libcrypto$(SHLIB_EXT)
 | 
			
		||||
LIBSRC=	cryptlib.c mem.c mem_clr.c mem_dbg.c cversion.c ex_data.c cpt_err.c \
 | 
			
		||||
	ebcdic.c uid.c o_time.c o_str.c o_dir.c thr_id.c lock.c fips_ers.c \
 | 
			
		||||
	o_init.c o_fips.c
 | 
			
		||||
LIBOBJ= cryptlib.o mem.o mem_dbg.o cversion.o ex_data.o cpt_err.o \
 | 
			
		||||
	ebcdic.o uid.o o_time.o o_str.o o_dir.o thr_id.o lock.o fips_ers.o \
 | 
			
		||||
	o_init.o o_fips.o $(CPUID_OBJ)
 | 
			
		||||
LIBSRC=	cryptlib.c mem.c mem_clr.c mem_dbg.c cversion.c ex_data.c cpt_err.c ebcdic.c uid.c o_time.c o_str.c o_dir.c
 | 
			
		||||
LIBOBJ= cryptlib.o mem.o mem_dbg.o cversion.o ex_data.o cpt_err.o ebcdic.o uid.o o_time.o o_str.o o_dir.o $(CPUID_OBJ)
 | 
			
		||||
 | 
			
		||||
SRC= $(LIBSRC)
 | 
			
		||||
 | 
			
		||||
EXHEADER= crypto.h opensslv.h opensslconf.h ebcdic.h symhacks.h \
 | 
			
		||||
	ossl_typ.h
 | 
			
		||||
HEADER=	cryptlib.h buildinf.h md32_common.h o_str.h o_dir.h \
 | 
			
		||||
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)
 | 
			
		||||
@@ -56,13 +52,6 @@ top:
 | 
			
		||||
 | 
			
		||||
all: shared
 | 
			
		||||
 | 
			
		||||
fips: cryptlib.o thr_id.o uid.o $(CPUID_OBJ)
 | 
			
		||||
	[ -n "$(SDIRS)" ] && for i in $(SDIRS) ; do \
 | 
			
		||||
		    ( obj=`$(PERL) $(TOP)/util/fipsobj.pl $$i` && \
 | 
			
		||||
			cd $$i && echo "making fips in $(DIR)/$$i..." && \
 | 
			
		||||
		    $(MAKE) -e TOP=../.. DIR=$$i INCLUDES='$(INCLUDES)' $$obj ) || exit 1; \
 | 
			
		||||
		done;
 | 
			
		||||
 | 
			
		||||
buildinf.h: ../Makefile
 | 
			
		||||
	$(PERL) $(TOP)/util/mkbuildinf.pl "$(CC) $(CFLAGS)" "$(PLATFORM)" >buildinf.h
 | 
			
		||||
 | 
			
		||||
@@ -75,23 +64,28 @@ applink.o:	$(TOP)/ms/applink.c
 | 
			
		||||
uplink.o:	$(TOP)/ms/uplink.c applink.o
 | 
			
		||||
	$(CC) $(CFLAGS) -c -o $@ $(TOP)/ms/uplink.c
 | 
			
		||||
 | 
			
		||||
uplink-x86.s:	$(TOP)/ms/uplink-x86.pl
 | 
			
		||||
	$(PERL) $(TOP)/ms/uplink-x86.pl $(PERLASM_SCHEME) > $@
 | 
			
		||||
uplink-cof.s:	$(TOP)/ms/uplink.pl
 | 
			
		||||
	$(PERL) $(TOP)/ms/uplink.pl coff > $@
 | 
			
		||||
 | 
			
		||||
x86_64cpuid.s:	x86_64cpuid.pl;	$(PERL) x86_64cpuid.pl $(PERLASM_SCHEME) > $@
 | 
			
		||||
ia64cpuid.s:	ia64cpuid.S;	$(CC) $(CFLAGS) -E ia64cpuid.S > $@
 | 
			
		||||
x86_64cpuid.s: x86_64cpuid.pl
 | 
			
		||||
	$(PERL) x86_64cpuid.pl $(PERLASM_SCHEME) > $@
 | 
			
		||||
ia64cpuid.s: ia64cpuid.S
 | 
			
		||||
	$(CC) $(CFLAGS) -E ia64cpuid.S > $@
 | 
			
		||||
ppccpuid.s:	ppccpuid.pl;	$(PERL) ppccpuid.pl $(PERLASM_SCHEME) $@
 | 
			
		||||
pariscid.s:	pariscid.pl;	$(PERL) pariscid.pl $(PERLASM_SCHEME) $@
 | 
			
		||||
alphacpuid.s:	alphacpuid.pl
 | 
			
		||||
	(preproc=$$$$.$@.S; trap "rm $$preproc" INT; \
 | 
			
		||||
	$(PERL) alphacpuid.pl > $$preproc && \
 | 
			
		||||
	$(CC) -E -P $$preproc > $@ && rm $$preproc)
 | 
			
		||||
	$(PERL) $< | $(CC) -E - | tee $@ > /dev/null
 | 
			
		||||
 | 
			
		||||
testapps:
 | 
			
		||||
	[ -z "$(THIS)" ] || (	if echo $(SDIRS) | fgrep ' des '; \
 | 
			
		||||
				then cd des && $(MAKE) -e des; fi )
 | 
			
		||||
	[ -z "$(THIS)" ] || ( cd pkcs7 && $(MAKE) -e testapps );
 | 
			
		||||
	@if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
 | 
			
		||||
 | 
			
		||||
subdirs:
 | 
			
		||||
	@target=all; $(RECURSIVE_MAKE)
 | 
			
		||||
 | 
			
		||||
files:
 | 
			
		||||
	$(PERL) $(TOP)/util/files.pl "CPUID_OBJ=$(CPUID_OBJ)" Makefile >> $(TOP)/MINFO
 | 
			
		||||
	$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
 | 
			
		||||
	@target=files; $(RECURSIVE_MAKE)
 | 
			
		||||
 | 
			
		||||
links:
 | 
			
		||||
@@ -124,17 +118,20 @@ install:
 | 
			
		||||
	done;
 | 
			
		||||
	@target=install; $(RECURSIVE_MAKE)
 | 
			
		||||
 | 
			
		||||
uninstall:
 | 
			
		||||
 | 
			
		||||
lint:
 | 
			
		||||
	@target=lint; $(RECURSIVE_MAKE)
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
update: local_depend
 | 
			
		||||
	@[ -z "$(THIS)" ] || (set -e; target=update; $(RECURSIVE_MAKE) )
 | 
			
		||||
	@if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
 | 
			
		||||
 | 
			
		||||
depend: local_depend
 | 
			
		||||
	@[ -z "$(THIS)" ] || (set -e; target=depend; $(RECURSIVE_MAKE) )
 | 
			
		||||
	@if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
 | 
			
		||||
local_depend:
 | 
			
		||||
	@[ -z "$(THIS)" -o -f buildinf.h ] || touch buildinf.h # fake buildinf.h if it does not exist
 | 
			
		||||
	@[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDE) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
 | 
			
		||||
	@[ -z "$(THIS)" -o -s buildinf.h ] || rm buildinf.h
 | 
			
		||||
	@[ -z "$(THIS)" ] || (set -e; target=depend; $(RECURSIVE_MAKE) )
 | 
			
		||||
	@if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f buildinf.h *.s *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 | 
			
		||||
@@ -143,6 +140,7 @@ clean:
 | 
			
		||||
dclean:
 | 
			
		||||
	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
 | 
			
		||||
	mv -f Makefile.new $(MAKEFILE)
 | 
			
		||||
	rm -f opensslconf.h
 | 
			
		||||
	@target=dclean; $(RECURSIVE_MAKE)
 | 
			
		||||
 | 
			
		||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
 | 
			
		||||
@@ -175,14 +173,6 @@ ex_data.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
ex_data.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h
 | 
			
		||||
ex_data.o: ../include/openssl/stack.h ../include/openssl/symhacks.h cryptlib.h
 | 
			
		||||
ex_data.o: ex_data.c
 | 
			
		||||
fips_ers.o: ../include/openssl/opensslconf.h fips_ers.c
 | 
			
		||||
lock.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
			
		||||
lock.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
lock.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
			
		||||
lock.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
lock.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h
 | 
			
		||||
lock.o: ../include/openssl/stack.h ../include/openssl/symhacks.h cryptlib.h
 | 
			
		||||
lock.o: lock.c
 | 
			
		||||
mem.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
			
		||||
mem.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
mem.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
			
		||||
@@ -203,32 +193,10 @@ mem_dbg.o: ../include/openssl/stack.h ../include/openssl/symhacks.h cryptlib.h
 | 
			
		||||
mem_dbg.o: mem_dbg.c
 | 
			
		||||
o_dir.o: ../e_os.h ../include/openssl/e_os2.h ../include/openssl/opensslconf.h
 | 
			
		||||
o_dir.o: LPdir_unix.c o_dir.c o_dir.h
 | 
			
		||||
o_fips.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
			
		||||
o_fips.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
o_fips.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
			
		||||
o_fips.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
o_fips.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h
 | 
			
		||||
o_fips.o: ../include/openssl/stack.h ../include/openssl/symhacks.h cryptlib.h
 | 
			
		||||
o_fips.o: o_fips.c
 | 
			
		||||
o_init.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/crypto.h
 | 
			
		||||
o_init.o: ../include/openssl/e_os2.h ../include/openssl/err.h
 | 
			
		||||
o_init.o: ../include/openssl/lhash.h ../include/openssl/opensslconf.h
 | 
			
		||||
o_init.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
o_init.o: ../include/openssl/safestack.h ../include/openssl/stack.h
 | 
			
		||||
o_init.o: ../include/openssl/symhacks.h o_init.c
 | 
			
		||||
o_str.o: ../e_os.h ../include/openssl/e_os2.h ../include/openssl/opensslconf.h
 | 
			
		||||
o_str.o: o_str.c o_str.h
 | 
			
		||||
o_time.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
o_time.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
o_time.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h
 | 
			
		||||
o_time.o: ../include/openssl/stack.h ../include/openssl/symhacks.h o_time.c
 | 
			
		||||
thr_id.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
			
		||||
thr_id.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
thr_id.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
			
		||||
thr_id.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
thr_id.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h
 | 
			
		||||
thr_id.o: ../include/openssl/stack.h ../include/openssl/symhacks.h cryptlib.h
 | 
			
		||||
thr_id.o: thr_id.c
 | 
			
		||||
o_time.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h o_time.c
 | 
			
		||||
o_time.o: o_time.h
 | 
			
		||||
uid.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
uid.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
uid.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								crypto/aes/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								crypto/aes/.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
lib
 | 
			
		||||
Makefile.save
 | 
			
		||||
*.flc
 | 
			
		||||
semantic.cache
 | 
			
		||||
aes-*.s
 | 
			
		||||
@@ -24,8 +24,8 @@ APPS=
 | 
			
		||||
 | 
			
		||||
LIB=$(TOP)/libcrypto.a
 | 
			
		||||
LIBSRC=aes_core.c aes_misc.c aes_ecb.c aes_cbc.c aes_cfb.c aes_ofb.c \
 | 
			
		||||
       aes_ige.c aes_wrap.c
 | 
			
		||||
LIBOBJ=aes_misc.o aes_ecb.o aes_cfb.o aes_ofb.o aes_ige.o aes_wrap.o \
 | 
			
		||||
       aes_ctr.c aes_ige.c aes_wrap.c
 | 
			
		||||
LIBOBJ=aes_misc.o aes_ecb.o aes_cfb.o aes_ofb.o aes_ctr.o aes_ige.o aes_wrap.o \
 | 
			
		||||
       $(AES_ENC)
 | 
			
		||||
 | 
			
		||||
SRC= $(LIBSRC)
 | 
			
		||||
@@ -50,56 +50,21 @@ aes-ia64.s: asm/aes-ia64.S
 | 
			
		||||
 | 
			
		||||
aes-586.s:	asm/aes-586.pl ../perlasm/x86asm.pl
 | 
			
		||||
	$(PERL) asm/aes-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
 | 
			
		||||
vpaes-x86.s:	asm/vpaes-x86.pl ../perlasm/x86asm.pl
 | 
			
		||||
	$(PERL) asm/vpaes-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
 | 
			
		||||
aesni-x86.s:	asm/aesni-x86.pl ../perlasm/x86asm.pl
 | 
			
		||||
	$(PERL) asm/aesni-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
 | 
			
		||||
 | 
			
		||||
aes-x86_64.s: asm/aes-x86_64.pl
 | 
			
		||||
	$(PERL) asm/aes-x86_64.pl $(PERLASM_SCHEME) > $@
 | 
			
		||||
vpaes-x86_64.s:	asm/vpaes-x86_64.pl
 | 
			
		||||
	$(PERL) asm/vpaes-x86_64.pl $(PERLASM_SCHEME) > $@
 | 
			
		||||
bsaes-x86_64.s:	asm/bsaes-x86_64.pl
 | 
			
		||||
	$(PERL) asm/bsaes-x86_64.pl $(PERLASM_SCHEME) > $@
 | 
			
		||||
aesni-x86_64.s: asm/aesni-x86_64.pl
 | 
			
		||||
	$(PERL) asm/aesni-x86_64.pl $(PERLASM_SCHEME) > $@
 | 
			
		||||
aesni-sha1-x86_64.s:	asm/aesni-sha1-x86_64.pl
 | 
			
		||||
	$(PERL) asm/aesni-sha1-x86_64.pl $(PERLASM_SCHEME) > $@
 | 
			
		||||
aesni-sha256-x86_64.s:	asm/aesni-sha256-x86_64.pl
 | 
			
		||||
	$(PERL) asm/aesni-sha256-x86_64.pl $(PERLASM_SCHEME) > $@
 | 
			
		||||
aesni-mb-x86_64.s:	asm/aesni-mb-x86_64.pl
 | 
			
		||||
	$(PERL) asm/aesni-mb-x86_64.pl $(PERLASM_SCHEME) > $@
 | 
			
		||||
 | 
			
		||||
aes-sparcv9.s: asm/aes-sparcv9.pl
 | 
			
		||||
	$(PERL) asm/aes-sparcv9.pl $(CFLAGS) > $@
 | 
			
		||||
aest4-sparcv9.s: asm/aest4-sparcv9.pl
 | 
			
		||||
	$(PERL) asm/aest4-sparcv9.pl $(CFLAGS) > $@
 | 
			
		||||
 | 
			
		||||
aes-ppc.s:	asm/aes-ppc.pl
 | 
			
		||||
	$(PERL) asm/aes-ppc.pl $(PERLASM_SCHEME) $@
 | 
			
		||||
vpaes-ppc.s:	asm/vpaes-ppc.pl
 | 
			
		||||
	$(PERL) asm/vpaes-ppc.pl $(PERLASM_SCHEME) $@
 | 
			
		||||
aesp8-ppc.s:	asm/aesp8-ppc.pl
 | 
			
		||||
	$(PERL) asm/aesp8-ppc.pl $(PERLASM_SCHEME) $@
 | 
			
		||||
 | 
			
		||||
aes-parisc.s:	asm/aes-parisc.pl
 | 
			
		||||
	$(PERL) asm/aes-parisc.pl $(PERLASM_SCHEME) $@
 | 
			
		||||
 | 
			
		||||
aes-mips.S:	asm/aes-mips.pl
 | 
			
		||||
	$(PERL) asm/aes-mips.pl $(PERLASM_SCHEME) $@
 | 
			
		||||
 | 
			
		||||
aesv8-armx.S:	asm/aesv8-armx.pl
 | 
			
		||||
	$(PERL) asm/aesv8-armx.pl $(PERLASM_SCHEME) $@
 | 
			
		||||
aesv8-armx.o:	aesv8-armx.S
 | 
			
		||||
 | 
			
		||||
# GNU make "catch all"
 | 
			
		||||
aes-%.S:	asm/aes-%.pl;	$(PERL) $< $(PERLASM_SCHEME) $@
 | 
			
		||||
aes-armv4.o:	aes-armv4.S
 | 
			
		||||
bsaes-%.S:	asm/bsaes-%.pl;	$(PERL) $< $(PERLASM_SCHEME) $@
 | 
			
		||||
bsaes-armv7.o:	bsaes-armv7.S
 | 
			
		||||
aes-%.s:	asm/aes-%.pl;	$(PERL) $< $(CFLAGS) > $@
 | 
			
		||||
 | 
			
		||||
files:
 | 
			
		||||
	$(PERL) $(TOP)/util/files.pl "AES_ENC=$(AES_ENC)" Makefile >> $(TOP)/MINFO
 | 
			
		||||
	$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
 | 
			
		||||
 | 
			
		||||
links:
 | 
			
		||||
	@$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
 | 
			
		||||
@@ -122,6 +87,8 @@ tests:
 | 
			
		||||
lint:
 | 
			
		||||
	lint -DLINT $(INCLUDES) $(SRC)>fluff
 | 
			
		||||
 | 
			
		||||
update: depend
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
 | 
			
		||||
	$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
 | 
			
		||||
@@ -139,11 +106,10 @@ aes_cbc.o: ../../include/openssl/aes.h ../../include/openssl/modes.h
 | 
			
		||||
aes_cbc.o: ../../include/openssl/opensslconf.h aes_cbc.c
 | 
			
		||||
aes_cfb.o: ../../include/openssl/aes.h ../../include/openssl/modes.h
 | 
			
		||||
aes_cfb.o: ../../include/openssl/opensslconf.h aes_cfb.c
 | 
			
		||||
aes_core.o: ../../include/openssl/aes.h ../../include/openssl/crypto.h
 | 
			
		||||
aes_core.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
 | 
			
		||||
aes_core.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
aes_core.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
aes_core.o: ../../include/openssl/symhacks.h aes_core.c aes_locl.h
 | 
			
		||||
aes_core.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
 | 
			
		||||
aes_core.o: ../../include/openssl/opensslconf.h aes_core.c aes_locl.h
 | 
			
		||||
aes_ctr.o: ../../include/openssl/aes.h ../../include/openssl/modes.h
 | 
			
		||||
aes_ctr.o: ../../include/openssl/opensslconf.h aes_ctr.c
 | 
			
		||||
aes_ecb.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
 | 
			
		||||
aes_ecb.o: ../../include/openssl/opensslconf.h aes_ecb.c aes_locl.h
 | 
			
		||||
aes_ige.o: ../../e_os.h ../../include/openssl/aes.h ../../include/openssl/bio.h
 | 
			
		||||
@@ -162,7 +128,7 @@ aes_wrap.o: ../../e_os.h ../../include/openssl/aes.h
 | 
			
		||||
aes_wrap.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 | 
			
		||||
aes_wrap.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
 | 
			
		||||
aes_wrap.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
 | 
			
		||||
aes_wrap.o: ../../include/openssl/modes.h ../../include/openssl/opensslconf.h
 | 
			
		||||
aes_wrap.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
aes_wrap.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
aes_wrap.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
aes_wrap.o: ../../include/openssl/symhacks.h ../cryptlib.h aes_wrap.c
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								crypto/aes/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								crypto/aes/README
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
This is an OpenSSL-compatible version of AES (also called Rijndael).
 | 
			
		||||
aes_core.c is basically the same as rijndael-alg-fst.c but with an
 | 
			
		||||
API that looks like the rest of the OpenSSL symmetric cipher suite.
 | 
			
		||||
@@ -114,13 +114,11 @@ void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
                        size_t length, const AES_KEY *key,
 | 
			
		||||
                        unsigned char *ivec, int *num);
 | 
			
		||||
# if 0
 | 
			
		||||
void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
                        size_t length, const AES_KEY *key,
 | 
			
		||||
                        unsigned char ivec[AES_BLOCK_SIZE],
 | 
			
		||||
                        unsigned char ecount_buf[AES_BLOCK_SIZE],
 | 
			
		||||
                        unsigned int *num);
 | 
			
		||||
# endif
 | 
			
		||||
/* NB: the IV is _two_ blocks long */
 | 
			
		||||
void AES_ige_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
                     size_t length, const AES_KEY *key,
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,6 @@
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <openssl/crypto.h>
 | 
			
		||||
#include <openssl/aes.h>
 | 
			
		||||
#include "aes_locl.h"
 | 
			
		||||
 | 
			
		||||
@@ -1209,7 +1208,7 @@ int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 | 
			
		||||
                        AES_KEY *key)
 | 
			
		||||
{
 | 
			
		||||
    u32 *rk;
 | 
			
		||||
    int i = 0;
 | 
			
		||||
   	int i = 0;
 | 
			
		||||
    u32 temp;
 | 
			
		||||
 | 
			
		||||
    if (!userKey || !key)
 | 
			
		||||
@@ -1309,7 +1308,6 @@ int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 | 
			
		||||
int AES_set_decrypt_key(const unsigned char *userKey, const int bits,
 | 
			
		||||
                        AES_KEY *key)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    u32 *rk;
 | 
			
		||||
    int i, j, status;
 | 
			
		||||
    u32 temp;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,6 @@
 | 
			
		||||
/* ssl_utst.c */
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project.
 | 
			
		||||
 */
 | 
			
		||||
/* crypto/aes/aes_ctr.c -*- mode:C; c-file-style: "eay" -*- */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2014 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
@@ -53,20 +49,15 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "ssl_locl.h"
 | 
			
		||||
#include <openssl/aes.h>
 | 
			
		||||
#include <openssl/modes.h>
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_UNIT_TEST
 | 
			
		||||
 | 
			
		||||
static const struct openssl_ssl_test_functions ssl_test_functions = {
 | 
			
		||||
    ssl_init_wbio_buffer,
 | 
			
		||||
    ssl3_setup_buffers,
 | 
			
		||||
    tls1_process_heartbeat,
 | 
			
		||||
    dtls1_process_heartbeat
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const struct openssl_ssl_test_functions *SSL_test_functions(void)
 | 
			
		||||
void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
                        size_t length, const AES_KEY *key,
 | 
			
		||||
                        unsigned char ivec[AES_BLOCK_SIZE],
 | 
			
		||||
                        unsigned char ecount_buf[AES_BLOCK_SIZE],
 | 
			
		||||
                        unsigned int *num)
 | 
			
		||||
{
 | 
			
		||||
    return &ssl_test_functions;
 | 
			
		||||
    CRYPTO_ctr128_encrypt(in, out, length, key, ivec, ecount_buf, num,
 | 
			
		||||
                          (block128_f) AES_encrypt);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -54,19 +54,197 @@
 | 
			
		||||
 | 
			
		||||
#include "cryptlib.h"
 | 
			
		||||
#include <openssl/aes.h>
 | 
			
		||||
#include <openssl/modes.h>
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
 | 
			
		||||
static const unsigned char default_iv[] = {
 | 
			
		||||
    0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int AES_wrap_key(AES_KEY *key, const unsigned char *iv,
 | 
			
		||||
                 unsigned char *out,
 | 
			
		||||
                 const unsigned char *in, unsigned int inlen)
 | 
			
		||||
{
 | 
			
		||||
    return CRYPTO_128_wrap(key, iv, out, in, inlen, (block128_f) AES_encrypt);
 | 
			
		||||
    unsigned char *A, B[16], *R;
 | 
			
		||||
    unsigned int i, j, t;
 | 
			
		||||
    if ((inlen & 0x7) || (inlen < 8))
 | 
			
		||||
        return -1;
 | 
			
		||||
    A = B;
 | 
			
		||||
    t = 1;
 | 
			
		||||
    memcpy(out + 8, in, inlen);
 | 
			
		||||
    if (!iv)
 | 
			
		||||
        iv = default_iv;
 | 
			
		||||
 | 
			
		||||
    memcpy(A, iv, 8);
 | 
			
		||||
 | 
			
		||||
    for (j = 0; j < 6; j++) {
 | 
			
		||||
        R = out + 8;
 | 
			
		||||
        for (i = 0; i < inlen; i += 8, t++, R += 8) {
 | 
			
		||||
            memcpy(B + 8, R, 8);
 | 
			
		||||
            AES_encrypt(B, B, key);
 | 
			
		||||
            A[7] ^= (unsigned char)(t & 0xff);
 | 
			
		||||
            if (t > 0xff) {
 | 
			
		||||
                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);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    memcpy(out, A, 8);
 | 
			
		||||
    return inlen + 8;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int AES_unwrap_key(AES_KEY *key, const unsigned char *iv,
 | 
			
		||||
                   unsigned char *out,
 | 
			
		||||
                   const unsigned char *in, unsigned int inlen)
 | 
			
		||||
{
 | 
			
		||||
    return CRYPTO_128_unwrap(key, iv, out, in, inlen,
 | 
			
		||||
                             (block128_f) AES_decrypt);
 | 
			
		||||
    unsigned char *A, B[16], *R;
 | 
			
		||||
    unsigned int i, j, t;
 | 
			
		||||
    inlen -= 8;
 | 
			
		||||
    if (inlen & 0x7)
 | 
			
		||||
        return -1;
 | 
			
		||||
    if (inlen < 8)
 | 
			
		||||
        return -1;
 | 
			
		||||
    A = B;
 | 
			
		||||
    t = 6 * (inlen >> 3);
 | 
			
		||||
    memcpy(A, in, 8);
 | 
			
		||||
    memcpy(out, in + 8, inlen);
 | 
			
		||||
    for (j = 0; j < 6; j++) {
 | 
			
		||||
        R = out + inlen - 8;
 | 
			
		||||
        for (i = 0; i < inlen; i += 8, t--, R -= 8) {
 | 
			
		||||
            A[7] ^= (unsigned char)(t & 0xff);
 | 
			
		||||
            if (t > 0xff) {
 | 
			
		||||
                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);
 | 
			
		||||
            memcpy(R, B + 8, 8);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (!iv)
 | 
			
		||||
        iv = default_iv;
 | 
			
		||||
    if (memcmp(A, iv, 8)) {
 | 
			
		||||
        OPENSSL_cleanse(out, inlen);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
    return inlen;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef AES_WRAP_TEST
 | 
			
		||||
 | 
			
		||||
int AES_wrap_unwrap_test(const unsigned char *kek, int keybits,
 | 
			
		||||
                         const unsigned char *iv,
 | 
			
		||||
                         const unsigned char *eout,
 | 
			
		||||
                         const unsigned char *key, int keylen)
 | 
			
		||||
{
 | 
			
		||||
    unsigned char *otmp = NULL, *ptmp = NULL;
 | 
			
		||||
    int r, ret = 0;
 | 
			
		||||
    AES_KEY wctx;
 | 
			
		||||
    otmp = OPENSSL_malloc(keylen + 8);
 | 
			
		||||
    ptmp = OPENSSL_malloc(keylen);
 | 
			
		||||
    if (!otmp || !ptmp)
 | 
			
		||||
        return 0;
 | 
			
		||||
    if (AES_set_encrypt_key(kek, keybits, &wctx))
 | 
			
		||||
        goto err;
 | 
			
		||||
    r = AES_wrap_key(&wctx, iv, otmp, key, keylen);
 | 
			
		||||
    if (r <= 0)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    if (eout && memcmp(eout, otmp, keylen))
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    if (AES_set_decrypt_key(kek, keybits, &wctx))
 | 
			
		||||
        goto err;
 | 
			
		||||
    r = AES_unwrap_key(&wctx, iv, ptmp, otmp, r);
 | 
			
		||||
 | 
			
		||||
    if (memcmp(key, ptmp, keylen))
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    ret = 1;
 | 
			
		||||
 | 
			
		||||
 err:
 | 
			
		||||
    if (otmp)
 | 
			
		||||
        OPENSSL_free(otmp);
 | 
			
		||||
    if (ptmp)
 | 
			
		||||
        OPENSSL_free(ptmp);
 | 
			
		||||
 | 
			
		||||
    return ret;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    static const unsigned char kek[] = {
 | 
			
		||||
        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
 | 
			
		||||
        0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
 | 
			
		||||
        0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
 | 
			
		||||
        0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const unsigned char key[] = {
 | 
			
		||||
        0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
 | 
			
		||||
        0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
 | 
			
		||||
        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
 | 
			
		||||
        0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const unsigned char e1[] = {
 | 
			
		||||
        0x1f, 0xa6, 0x8b, 0x0a, 0x81, 0x12, 0xb4, 0x47,
 | 
			
		||||
        0xae, 0xf3, 0x4b, 0xd8, 0xfb, 0x5a, 0x7b, 0x82,
 | 
			
		||||
        0x9d, 0x3e, 0x86, 0x23, 0x71, 0xd2, 0xcf, 0xe5
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const unsigned char e2[] = {
 | 
			
		||||
        0x96, 0x77, 0x8b, 0x25, 0xae, 0x6c, 0xa4, 0x35,
 | 
			
		||||
        0xf9, 0x2b, 0x5b, 0x97, 0xc0, 0x50, 0xae, 0xd2,
 | 
			
		||||
        0x46, 0x8a, 0xb8, 0xa1, 0x7a, 0xd8, 0x4e, 0x5d
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const unsigned char e3[] = {
 | 
			
		||||
        0x64, 0xe8, 0xc3, 0xf9, 0xce, 0x0f, 0x5b, 0xa2,
 | 
			
		||||
        0x63, 0xe9, 0x77, 0x79, 0x05, 0x81, 0x8a, 0x2a,
 | 
			
		||||
        0x93, 0xc8, 0x19, 0x1e, 0x7d, 0x6e, 0x8a, 0xe7
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const unsigned char e4[] = {
 | 
			
		||||
        0x03, 0x1d, 0x33, 0x26, 0x4e, 0x15, 0xd3, 0x32,
 | 
			
		||||
        0x68, 0xf2, 0x4e, 0xc2, 0x60, 0x74, 0x3e, 0xdc,
 | 
			
		||||
        0xe1, 0xc6, 0xc7, 0xdd, 0xee, 0x72, 0x5a, 0x93,
 | 
			
		||||
        0x6b, 0xa8, 0x14, 0x91, 0x5c, 0x67, 0x62, 0xd2
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const unsigned char e5[] = {
 | 
			
		||||
        0xa8, 0xf9, 0xbc, 0x16, 0x12, 0xc6, 0x8b, 0x3f,
 | 
			
		||||
        0xf6, 0xe6, 0xf4, 0xfb, 0xe3, 0x0e, 0x71, 0xe4,
 | 
			
		||||
        0x76, 0x9c, 0x8b, 0x80, 0xa3, 0x2c, 0xb8, 0x95,
 | 
			
		||||
        0x8c, 0xd5, 0xd1, 0x7d, 0x6b, 0x25, 0x4d, 0xa1
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const unsigned char e6[] = {
 | 
			
		||||
        0x28, 0xc9, 0xf4, 0x04, 0xc4, 0xb8, 0x10, 0xf4,
 | 
			
		||||
        0xcb, 0xcc, 0xb3, 0x5c, 0xfb, 0x87, 0xf8, 0x26,
 | 
			
		||||
        0x3f, 0x57, 0x86, 0xe2, 0xd8, 0x0e, 0xd3, 0x26,
 | 
			
		||||
        0xcb, 0xc7, 0xf0, 0xe7, 0x1a, 0x99, 0xf4, 0x3b,
 | 
			
		||||
        0xfb, 0x98, 0x8b, 0x9b, 0x7a, 0x02, 0xdd, 0x21
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    AES_KEY wctx, xctx;
 | 
			
		||||
    int ret;
 | 
			
		||||
    ret = AES_wrap_unwrap_test(kek, 128, NULL, e1, key, 16);
 | 
			
		||||
    fprintf(stderr, "Key test result %d\n", ret);
 | 
			
		||||
    ret = AES_wrap_unwrap_test(kek, 192, NULL, e2, key, 16);
 | 
			
		||||
    fprintf(stderr, "Key test result %d\n", ret);
 | 
			
		||||
    ret = AES_wrap_unwrap_test(kek, 256, NULL, e3, key, 16);
 | 
			
		||||
    fprintf(stderr, "Key test result %d\n", ret);
 | 
			
		||||
    ret = AES_wrap_unwrap_test(kek, 192, NULL, e4, key, 24);
 | 
			
		||||
    fprintf(stderr, "Key test result %d\n", ret);
 | 
			
		||||
    ret = AES_wrap_unwrap_test(kek, 256, NULL, e5, key, 24);
 | 
			
		||||
    fprintf(stderr, "Key test result %d\n", ret);
 | 
			
		||||
    ret = AES_wrap_unwrap_test(kek, 256, NULL, e6, key, 32);
 | 
			
		||||
    fprintf(stderr, "Key test result %d\n", ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -89,10 +89,8 @@ typedef unsigned long long u64;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#undef ROTATE
 | 
			
		||||
#if defined(_MSC_VER)
 | 
			
		||||
# define ROTATE(a,n)    _lrotl(a,n)
 | 
			
		||||
#elif defined(__ICC)
 | 
			
		||||
# define ROTATE(a,n)    _rotl(a,n)
 | 
			
		||||
#if defined(_MSC_VER) || defined(__ICC)
 | 
			
		||||
# define ROTATE(a,n)	_lrotl(a,n)
 | 
			
		||||
#elif defined(__GNUC__) && __GNUC__>=2
 | 
			
		||||
# if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
 | 
			
		||||
#   define ROTATE(a,n)  ({ register unsigned int ret;   \
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user