Compare commits
	
		
			5217 Commits
		
	
	
		
			OpenSSL_0_
			...
			STATE_afte
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					a372f9bf25 | ||
| 
						 | 
					fdaea9ed2e | ||
| 
						 | 
					5daec7ea0e | ||
| 
						 | 
					e9224c7177 | ||
| 
						 | 
					e90e719739 | ||
| 
						 | 
					7ba666fa0e | ||
| 
						 | 
					86a62cf15c | ||
| 
						 | 
					b11405723d | ||
| 
						 | 
					4c3a2b4f8a | ||
| 
						 | 
					bbf8198feb | ||
| 
						 | 
					3dda0dd2a2 | ||
| 
						 | 
					fa63a98ad8 | ||
| 
						 | 
					1fc73fef48 | ||
| 
						 | 
					90543bd07a | ||
| 
						 | 
					43ecece595 | ||
| 
						 | 
					4ba8cabf62 | ||
| 
						 | 
					f68bb3c51f | ||
| 
						 | 
					6d4ac67ac1 | ||
| 
						 | 
					b84d5b72f1 | ||
| 
						 | 
					8cbccedf7c | ||
| 
						 | 
					1c24347062 | ||
| 
						 | 
					9ef888130d | ||
| 
						 | 
					4387f47832 | ||
| 
						 | 
					38d6e4bb50 | ||
| 
						 | 
					ced621e3c2 | ||
| 
						 | 
					85940ea8ea | ||
| 
						 | 
					439ae4d398 | ||
| 
						 | 
					4fbe40c54f | ||
| 
						 | 
					578ca7e4cd | ||
| 
						 | 
					7e8c30b589 | ||
| 
						 | 
					2b32b28191 | ||
| 
						 | 
					532215f2db | ||
| 
						 | 
					5319be4438 | ||
| 
						 | 
					f7a3e73ef6 | ||
| 
						 | 
					ff3345cb72 | ||
| 
						 | 
					716b2079dc | ||
| 
						 | 
					e7b6228fd3 | ||
| 
						 | 
					2053c43de2 | ||
| 
						 | 
					1c3e4a3660 | ||
| 
						 | 
					4707991520 | ||
| 
						 | 
					7a1f92fdc3 | ||
| 
						 | 
					e7a285694e | ||
| 
						 | 
					6ab285bf4c | ||
| 
						 | 
					1d3159bcca | ||
| 
						 | 
					f60ceb54eb | ||
| 
						 | 
					0f995b2f40 | ||
| 
						 | 
					848f735ae4 | ||
| 
						 | 
					a678430602 | ||
| 
						 | 
					e9b553dac1 | ||
| 
						 | 
					db3758923b | ||
| 
						 | 
					5e4a75e79f | ||
| 
						 | 
					43d601641f | ||
| 
						 | 
					55f78baf32 | ||
| 
						 | 
					6c359479d7 | ||
| 
						 | 
					4579924b7e | ||
| 
						 | 
					2047bda6fb | ||
| 
						 | 
					406c6f6962 | ||
| 
						 | 
					df29cc8f77 | ||
| 
						 | 
					ec7164133d | ||
| 
						 | 
					ba8ad07490 | ||
| 
						 | 
					17582ccf21 | ||
| 
						 | 
					31be2daa06 | ||
| 
						 | 
					de868e0b94 | ||
| 
						 | 
					15994b034a | ||
| 
						 | 
					922fa76e26 | ||
| 
						 | 
					19aa370573 | ||
| 
						 | 
					d020e701bb | ||
| 
						 | 
					364ff369d1 | ||
| 
						 | 
					8a09b3866a | ||
| 
						 | 
					137445140b | ||
| 
						 | 
					6a8afe2201 | ||
| 
						 | 
					1e3a9b650f | ||
| 
						 | 
					229dc0ee31 | ||
| 
						 | 
					fcc764639d | ||
| 
						 | 
					821385ad00 | ||
| 
						 | 
					25ff76d565 | ||
| 
						 | 
					9801fb61d0 | ||
| 
						 | 
					20199ca809 | ||
| 
						 | 
					711f1a3c26 | ||
| 
						 | 
					a1d85309ee | ||
| 
						 | 
					450cee5c3a | ||
| 
						 | 
					a2dbcf3644 | ||
| 
						 | 
					4663355496 | ||
| 
						 | 
					9dc610495c | ||
| 
						 | 
					055076cd4f | ||
| 
						 | 
					527497a722 | ||
| 
						 | 
					32d21c1ef6 | ||
| 
						 | 
					629b58b7fb | ||
| 
						 | 
					7fa2a81d34 | ||
| 
						 | 
					7f66ab4783 | ||
| 
						 | 
					95189389b0 | ||
| 
						 | 
					b4b82ab465 | ||
| 
						 | 
					89618e7a0d | ||
| 
						 | 
					b87e2576b5 | ||
| 
						 | 
					0bf23d9b20 | ||
| 
						 | 
					813f256783 | ||
| 
						 | 
					bfa96bc20e | ||
| 
						 | 
					6f17f16fd5 | ||
| 
						 | 
					84034f7aec | ||
| 
						 | 
					acce40c585 | ||
| 
						 | 
					6dc78bf7e8 | ||
| 
						 | 
					ce4f169ff9 | ||
| 
						 | 
					c566205319 | ||
| 
						 | 
					eaf6c61c9f | ||
| 
						 | 
					4c53d11d7f | ||
| 
						 | 
					1d647444e3 | ||
| 
						 | 
					c1eeb6078f | ||
| 
						 | 
					953db08416 | ||
| 
						 | 
					0a5942093e | ||
| 
						 | 
					d78254aa28 | ||
| 
						 | 
					af67804bef | ||
| 
						 | 
					35a6db8640 | ||
| 
						 | 
					56dc24d483 | ||
| 
						 | 
					84d828ab70 | ||
| 
						 | 
					cfae3d94e9 | ||
| 
						 | 
					b9c23cca01 | ||
| 
						 | 
					c863201780 | ||
| 
						 | 
					cb21d001c9 | ||
| 
						 | 
					c7faede37b | ||
| 
						 | 
					d4e573f305 | ||
| 
						 | 
					e20afbb340 | ||
| 
						 | 
					2b2ab52354 | ||
| 
						 | 
					8d6e60486f | ||
| 
						 | 
					1f30946481 | ||
| 
						 | 
					b1697f189b | ||
| 
						 | 
					17a202add7 | ||
| 
						 | 
					3bd16a8902 | ||
| 
						 | 
					555d75252a | ||
| 
						 | 
					eaad02a747 | ||
| 
						 | 
					97101fafd5 | ||
| 
						 | 
					403f1bdc70 | ||
| 
						 | 
					d574d83993 | ||
| 
						 | 
					83411793b6 | ||
| 
						 | 
					65caee44ff | ||
| 
						 | 
					738554331b | ||
| 
						 | 
					3f083ef0eb | ||
| 
						 | 
					17ed6c06a7 | ||
| 
						 | 
					c112323dd5 | ||
| 
						 | 
					0709385d3c | ||
| 
						 | 
					54a656ef08 | ||
| 
						 | 
					8f797f14b8 | ||
| 
						 | 
					c0d64de660 | ||
| 
						 | 
					c1ce8cf3b8 | ||
| 
						 | 
					2d780dfd81 | ||
| 
						 | 
					b6fee5c2fb | ||
| 
						 | 
					10fa047622 | ||
| 
						 | 
					04f0a6ba39 | ||
| 
						 | 
					eb43641dd3 | ||
| 
						 | 
					d479dc1d02 | ||
| 
						 | 
					7fb8d254fe | ||
| 
						 | 
					c99935e32c | ||
| 
						 | 
					2232e262bf | ||
| 
						 | 
					137e7e3aa1 | ||
| 
						 | 
					ba36b61d3d | ||
| 
						 | 
					ccb13ded84 | ||
| 
						 | 
					9ea1b87862 | ||
| 
						 | 
					688cf84d1f | ||
| 
						 | 
					69ce48c307 | ||
| 
						 | 
					06b7c8d5ba | ||
| 
						 | 
					6722b62b36 | ||
| 
						 | 
					7d80b27949 | ||
| 
						 | 
					d742bd882e | ||
| 
						 | 
					97a06ad9ef | ||
| 
						 | 
					756b9a0046 | ||
| 
						 | 
					96c930dd2f | ||
| 
						 | 
					c81a15099a | ||
| 
						 | 
					a8c125550c | ||
| 
						 | 
					3782350c14 | ||
| 
						 | 
					d6257073aa | ||
| 
						 | 
					ddff68bee7 | ||
| 
						 | 
					491659c436 | ||
| 
						 | 
					8d6fc30bc7 | ||
| 
						 | 
					56824b9658 | ||
| 
						 | 
					892e9625d3 | ||
| 
						 | 
					e2916b2540 | ||
| 
						 | 
					1810d2088e | ||
| 
						 | 
					d618f703ec | ||
| 
						 | 
					896e4fef30 | ||
| 
						 | 
					38c7271a39 | ||
| 
						 | 
					5e3247d8bc | ||
| 
						 | 
					b53e44e572 | ||
| 
						 | 
					e5f4d8279d | ||
| 
						 | 
					86e8b56ac4 | ||
| 
						 | 
					bff1567623 | ||
| 
						 | 
					db199abd9e | ||
| 
						 | 
					b6d0defb98 | ||
| 
						 | 
					ad22b914d6 | ||
| 
						 | 
					f216fae545 | ||
| 
						 | 
					242823c9bc | ||
| 
						 | 
					40efa67248 | ||
| 
						 | 
					769fedc3ad | ||
| 
						 | 
					9c3db400dc | ||
| 
						 | 
					d9ec9d990f | ||
| 
						 | 
					b5148cf1f7 | ||
| 
						 | 
					90a617e050 | ||
| 
						 | 
					259cdf2af9 | ||
| 
						 | 
					6c950e0dc9 | ||
| 
						 | 
					62dd6f161a | ||
| 
						 | 
					6aba658cd8 | ||
| 
						 | 
					accb0c6edb | ||
| 
						 | 
					e0db2eed8d | ||
| 
						 | 
					00a357ab20 | ||
| 
						 | 
					8ee4845b65 | ||
| 
						 | 
					19b8d06a79 | ||
| 
						 | 
					5c6bf03117 | ||
| 
						 | 
					f72ed6153b | ||
| 
						 | 
					d652a0957f | ||
| 
						 | 
					fbcd27907b | ||
| 
						 | 
					a551bea52e | ||
| 
						 | 
					6cb686208e | ||
| 
						 | 
					bd1fb77245 | ||
| 
						 | 
					d610d27f30 | ||
| 
						 | 
					96b35c9e26 | ||
| 
						 | 
					907a8f1e6e | ||
| 
						 | 
					e1c191fe44 | ||
| 
						 | 
					5aa3429c5d | ||
| 
						 | 
					ffd418f217 | ||
| 
						 | 
					0711be1696 | ||
| 
						 | 
					7521ab3d0b | ||
| 
						 | 
					0587ec2645 | ||
| 
						 | 
					b76d66fbf6 | ||
| 
						 | 
					06f851f721 | ||
| 
						 | 
					f6661d391c | ||
| 
						 | 
					284b216b3a | ||
| 
						 | 
					05dbe6ee1f | ||
| 
						 | 
					871d0f5126 | ||
| 
						 | 
					5be1264b7e | ||
| 
						 | 
					314c667050 | ||
| 
						 | 
					28c8a911bd | ||
| 
						 | 
					437d1ed49f | ||
| 
						 | 
					12fd8be2c4 | ||
| 
						 | 
					8258f7b361 | ||
| 
						 | 
					e15ea3d9e1 | ||
| 
						 | 
					677532629d | ||
| 
						 | 
					57d8ff79b2 | ||
| 
						 | 
					4b14ed760d | ||
| 
						 | 
					79a6260a11 | ||
| 
						 | 
					a0bf8f2008 | ||
| 
						 | 
					408bf2f0c4 | ||
| 
						 | 
					874fee478c | ||
| 
						 | 
					90d9a69bb1 | ||
| 
						 | 
					4006c56036 | ||
| 
						 | 
					1729588435 | ||
| 
						 | 
					6f7c2cb31e | ||
| 
						 | 
					a4629f4136 | ||
| 
						 | 
					56b5f687e4 | ||
| 
						 | 
					caa4f47f61 | ||
| 
						 | 
					36757b4438 | ||
| 
						 | 
					75871dda4b | ||
| 
						 | 
					506fec1a95 | ||
| 
						 | 
					aae329c447 | ||
| 
						 | 
					02acf1409e | ||
| 
						 | 
					6ac3309c74 | ||
| 
						 | 
					1b15cfa11d | ||
| 
						 | 
					76dfca879f | ||
| 
						 | 
					7cdc7bacea | ||
| 
						 | 
					fbd78b5c08 | ||
| 
						 | 
					fbcd0da597 | ||
| 
						 | 
					665dc3924d | ||
| 
						 | 
					4bdacff25b | ||
| 
						 | 
					ecd45314b8 | ||
| 
						 | 
					3e06fb754e | ||
| 
						 | 
					b2e20a31ea | ||
| 
						 | 
					38e19a4220 | ||
| 
						 | 
					f28164fefd | ||
| 
						 | 
					2eaabb718b | ||
| 
						 | 
					5572f482e7 | ||
| 
						 | 
					729f0a277e | ||
| 
						 | 
					c55d759168 | ||
| 
						 | 
					b7910992d8 | ||
| 
						 | 
					cf3b8b52f1 | ||
| 
						 | 
					42b06fbaca | ||
| 
						 | 
					2245cd87d4 | ||
| 
						 | 
					c199837c54 | ||
| 
						 | 
					83699c4784 | ||
| 
						 | 
					30afcc072a | ||
| 
						 | 
					832f9304fd | ||
| 
						 | 
					fa4bde98d2 | ||
| 
						 | 
					ca80756c70 | ||
| 
						 | 
					ef0baf60aa | ||
| 
						 | 
					7ba3a4c3d2 | ||
| 
						 | 
					29e48c18b7 | ||
| 
						 | 
					982dfb7d10 | ||
| 
						 | 
					8c4b69d3ab | ||
| 
						 | 
					0e2cc42cfb | ||
| 
						 | 
					1e5c205ccb | ||
| 
						 | 
					4c82171a8e | ||
| 
						 | 
					88c80b3e75 | ||
| 
						 | 
					27bad5ad3d | ||
| 
						 | 
					6a89a25c27 | ||
| 
						 | 
					001ab3abad | ||
| 
						 | 
					ec8ad2bb96 | ||
| 
						 | 
					5fbb02fcb1 | ||
| 
						 | 
					4e1b50e219 | ||
| 
						 | 
					d7b2342a6a | ||
| 
						 | 
					7e9db7cefc | ||
| 
						 | 
					d30e4c5b0b | ||
| 
						 | 
					9de6bb8abc | ||
| 
						 | 
					72e04bd13f | ||
| 
						 | 
					4ec0448122 | ||
| 
						 | 
					842d8e209b | ||
| 
						 | 
					292fcd5c7b | ||
| 
						 | 
					74e3931f84 | ||
| 
						 | 
					12dadc555f | ||
| 
						 | 
					b75b2225e5 | ||
| 
						 | 
					12f27bd414 | ||
| 
						 | 
					69deec58fb | ||
| 
						 | 
					1e976bdc46 | ||
| 
						 | 
					9946fceb9d | ||
| 
						 | 
					6fed88113b | ||
| 
						 | 
					97ebe047d0 | ||
| 
						 | 
					fc6a6a1030 | ||
| 
						 | 
					3d840c827f | ||
| 
						 | 
					a2a1a04e53 | ||
| 
						 | 
					f86abc2e80 | ||
| 
						 | 
					7104c376ae | ||
| 
						 | 
					0638ced5cc | ||
| 
						 | 
					e984b2af64 | ||
| 
						 | 
					70e96dcf59 | ||
| 
						 | 
					2c696b2ddc | ||
| 
						 | 
					9a48b07ee4 | ||
| 
						 | 
					230fd6b7b6 | ||
| 
						 | 
					20b33a015f | ||
| 
						 | 
					293d5082c7 | ||
| 
						 | 
					929f116733 | ||
| 
						 | 
					ba5ba5490d | ||
| 
						 | 
					b8565a9af9 | ||
| 
						 | 
					94960c8421 | ||
| 
						 | 
					6859cf7459 | ||
| 
						 | 
					2018681b33 | ||
| 
						 | 
					e204516178 | ||
| 
						 | 
					153aecf91a | ||
| 
						 | 
					cd98ab6491 | ||
| 
						 | 
					b3823ac64b | ||
| 
						 | 
					5d9470ff8e | ||
| 
						 | 
					e78f137899 | ||
| 
						 | 
					40e66398db | ||
| 
						 | 
					6e32d0a74b | ||
| 
						 | 
					a4f53a1c73 | ||
| 
						 | 
					a90ae02454 | ||
| 
						 | 
					4c8f79a33e | ||
| 
						 | 
					7cc6ec7af7 | ||
| 
						 | 
					c2bbf275b2 | ||
| 
						 | 
					9226e2187c | ||
| 
						 | 
					48921e00fc | ||
| 
						 | 
					f804930150 | ||
| 
						 | 
					3403caf3da | ||
| 
						 | 
					ba11121731 | ||
| 
						 | 
					ed5e37c309 | ||
| 
						 | 
					65b1d31df5 | ||
| 
						 | 
					b499ed06d2 | ||
| 
						 | 
					6ff7c95843 | ||
| 
						 | 
					41cc7096b8 | ||
| 
						 | 
					c237de058f | ||
| 
						 | 
					e2aeb8174b | ||
| 
						 | 
					34f1f2a81c | ||
| 
						 | 
					c96f0fd2d1 | ||
| 
						 | 
					8aefe253a7 | ||
| 
						 | 
					7e31164ae0 | ||
| 
						 | 
					ad55f581f9 | ||
| 
						 | 
					d4a8f90cab | ||
| 
						 | 
					41ab00bedf | ||
| 
						 | 
					fc85ac20c7 | ||
| 
						 | 
					e88479243c | ||
| 
						 | 
					c787525ac8 | ||
| 
						 | 
					9a2601033d | ||
| 
						 | 
					fbb311a7d2 | ||
| 
						 | 
					f309c1ae50 | ||
| 
						 | 
					82a20fb0f0 | ||
| 
						 | 
					428112ef10 | ||
| 
						 | 
					64376cd8ff | ||
| 
						 | 
					cc8aa08b02 | ||
| 
						 | 
					1c4e4e4f56 | ||
| 
						 | 
					3f6db7f518 | ||
| 
						 | 
					8435a755fd | ||
| 
						 | 
					52c29b7b99 | ||
| 
						 | 
					c6bf63da7c | ||
| 
						 | 
					0fd05a2f0f | ||
| 
						 | 
					1fd0338b49 | ||
| 
						 | 
					b2be73e4e8 | ||
| 
						 | 
					37f5fcf85c | ||
| 
						 | 
					f742e497dd | ||
| 
						 | 
					dcc426fcfe | ||
| 
						 | 
					7eb18f1237 | ||
| 
						 | 
					265e892fed | ||
| 
						 | 
					623e9e66c0 | ||
| 
						 | 
					90f5a2b6fe | ||
| 
						 | 
					bf625abe29 | ||
| 
						 | 
					b44069730b | ||
| 
						 | 
					749d055eba | ||
| 
						 | 
					49a0f77867 | ||
| 
						 | 
					2af52de7b5 | ||
| 
						 | 
					629d860cbc | ||
| 
						 | 
					056cc163f5 | ||
| 
						 | 
					e09efcf71a | ||
| 
						 | 
					763b4dcc66 | ||
| 
						 | 
					83348e0b80 | ||
| 
						 | 
					f13ddd5d0a | ||
| 
						 | 
					18a31aa861 | ||
| 
						 | 
					b2a4e959c9 | ||
| 
						 | 
					f17ef241d1 | ||
| 
						 | 
					aa1e56b0b9 | ||
| 
						 | 
					7ef524ea1c | ||
| 
						 | 
					0c7141a343 | ||
| 
						 | 
					5488bb6197 | ||
| 
						 | 
					8e28c67155 | ||
| 
						 | 
					36969082bb | ||
| 
						 | 
					4fde69b066 | ||
| 
						 | 
					fd9a4dbe94 | ||
| 
						 | 
					f0db0ed35d | ||
| 
						 | 
					6d24cbf452 | ||
| 
						 | 
					5454829ae6 | ||
| 
						 | 
					da0bca6466 | ||
| 
						 | 
					4705bd9b37 | ||
| 
						 | 
					5bd90983bc | ||
| 
						 | 
					329f981582 | ||
| 
						 | 
					cece7adcee | ||
| 
						 | 
					74cc4903ef | ||
| 
						 | 
					41fdcfa71e | ||
| 
						 | 
					60cc56b1a9 | ||
| 
						 | 
					f912e9293f | ||
| 
						 | 
					56939728b7 | ||
| 
						 | 
					ea26226046 | ||
| 
						 | 
					17f6279317 | ||
| 
						 | 
					e172d60ddb | ||
| 
						 | 
					f8fe7fa491 | ||
| 
						 | 
					fbe792f0ac | ||
| 
						 | 
					14a7cfb32a | ||
| 
						 | 
					7a8645d171 | ||
| 
						 | 
					5bf738737d | ||
| 
						 | 
					415e03aa6f | ||
| 
						 | 
					ac120e20e3 | ||
| 
						 | 
					3f90e45079 | ||
| 
						 | 
					9dcc441a5f | ||
| 
						 | 
					db4f691f9f | ||
| 
						 | 
					d28735a05b | ||
| 
						 | 
					183847747a | ||
| 
						 | 
					bac6012308 | ||
| 
						 | 
					aaa384ca1a | ||
| 
						 | 
					f908226898 | ||
| 
						 | 
					909abce800 | ||
| 
						 | 
					33d4e690cc | ||
| 
						 | 
					848c849584 | ||
| 
						 | 
					102c8f47bf | ||
| 
						 | 
					d3bcbba45c | ||
| 
						 | 
					0903e56196 | ||
| 
						 | 
					95ecacf8a2 | ||
| 
						 | 
					be8a280e0b | ||
| 
						 | 
					6fb60a84dd | ||
| 
						 | 
					5af7d1a3b8 | ||
| 
						 | 
					35b73a1f20 | ||
| 
						 | 
					9e4f9b36fc | ||
| 
						 | 
					84d7e365a0 | ||
| 
						 | 
					64c3da230f | ||
| 
						 | 
					7793f30e09 | ||
| 
						 | 
					714df32e33 | ||
| 
						 | 
					1dc920c8de | ||
| 
						 | 
					16dc1cfb5c | ||
| 
						 | 
					819ff32dc4 | ||
| 
						 | 
					5574e0ed41 | ||
| 
						 | 
					042e57d562 | ||
| 
						 | 
					ba8fb52183 | ||
| 
						 | 
					f6f9961819 | ||
| 
						 | 
					e74e9c48de | ||
| 
						 | 
					179add2b07 | ||
| 
						 | 
					456bc309d8 | ||
| 
						 | 
					a7535a2727 | ||
| 
						 | 
					44c09667ff | ||
| 
						 | 
					da9b972466 | ||
| 
						 | 
					bd45950f4a | ||
| 
						 | 
					f70cf11819 | ||
| 
						 | 
					5575f781ad | ||
| 
						 | 
					0472883cc2 | ||
| 
						 | 
					87e8feca95 | ||
| 
						 | 
					e70a39830c | ||
| 
						 | 
					ba25198517 | ||
| 
						 | 
					6297bcd74c | ||
| 
						 | 
					dd7ab82e75 | ||
| 
						 | 
					c046fffa16 | ||
| 
						 | 
					3aecef7697 | ||
| 
						 | 
					b218af2b27 | ||
| 
						 | 
					77c46bbf29 | ||
| 
						 | 
					02750ff56f | ||
| 
						 | 
					0bee0e6294 | ||
| 
						 | 
					12593e6f45 | ||
| 
						 | 
					819a040f44 | ||
| 
						 | 
					546405bece | ||
| 
						 | 
					f013c7f2a6 | ||
| 
						 | 
					1cc67fa80c | ||
| 
						 | 
					eefa6e4e2b | ||
| 
						 | 
					6d9116f83d | ||
| 
						 | 
					8be4e173e8 | ||
| 
						 | 
					648765ba2f | ||
| 
						 | 
					c6ccf055ba | ||
| 
						 | 
					1649d85d10 | ||
| 
						 | 
					cd72dcd925 | ||
| 
						 | 
					7a5ed919ad | ||
| 
						 | 
					799d7a34cf | ||
| 
						 | 
					20adcfa058 | ||
| 
						 | 
					02b7ec88bb | ||
| 
						 | 
					0af9a89cef | ||
| 
						 | 
					db802c60e3 | ||
| 
						 | 
					503f3b1a21 | ||
| 
						 | 
					402bcde847 | ||
| 
						 | 
					ec9ea6a3c8 | ||
| 
						 | 
					7e6617611f | ||
| 
						 | 
					ca6dde5d3d | ||
| 
						 | 
					8e6cbcd7c0 | ||
| 
						 | 
					9335a5f7c0 | ||
| 
						 | 
					32bf74e30e | ||
| 
						 | 
					6643f275e2 | ||
| 
						 | 
					cd4c36adb8 | ||
| 
						 | 
					311e209931 | ||
| 
						 | 
					fe5eb6707f | ||
| 
						 | 
					f5db08e57a | ||
| 
						 | 
					8cfdb960f0 | ||
| 
						 | 
					ebccb429de | ||
| 
						 | 
					7dbed652fc | ||
| 
						 | 
					6789b41d86 | ||
| 
						 | 
					0487cb234c | ||
| 
						 | 
					80e1495b99 | ||
| 
						 | 
					041843e47e | ||
| 
						 | 
					c2aa4f2081 | ||
| 
						 | 
					b23f50e67e | ||
| 
						 | 
					7fe03ed3a3 | ||
| 
						 | 
					9466fa6750 | ||
| 
						 | 
					cead7f36da | ||
| 
						 | 
					cbecb3ac37 | ||
| 
						 | 
					5dbd3efce7 | ||
| 
						 | 
					876811e2af | ||
| 
						 | 
					b57c98df7b | ||
| 
						 | 
					c4da6dd38a | ||
| 
						 | 
					2edcb4ac71 | ||
| 
						 | 
					0c4d9b2fbc | ||
| 
						 | 
					5012158adf | ||
| 
						 | 
					5c9396e37c | ||
| 
						 | 
					7b63c0fa8c | ||
| 
						 | 
					063a8905bf | ||
| 
						 | 
					cd7562091d | ||
| 
						 | 
					d1d0be3cd2 | ||
| 
						 | 
					2c8ad4f1af | ||
| 
						 | 
					121dea3f85 | ||
| 
						 | 
					ea4f109c99 | ||
| 
						 | 
					7650934f21 | ||
| 
						 | 
					40c5cae24a | ||
| 
						 | 
					cce9396dc9 | ||
| 
						 | 
					47f3eafb8d | ||
| 
						 | 
					53fc93dda6 | ||
| 
						 | 
					17085b022c | ||
| 
						 | 
					4367eb8706 | ||
| 
						 | 
					0a8a99785b | ||
| 
						 | 
					a9d96b98cb | ||
| 
						 | 
					ae689b6b27 | ||
| 
						 | 
					60d160da2d | ||
| 
						 | 
					05086644c4 | ||
| 
						 | 
					fb96d9d90d | ||
| 
						 | 
					e1a32c1807 | ||
| 
						 | 
					5585f4eca4 | ||
| 
						 | 
					e8b4d05f61 | ||
| 
						 | 
					0df748e7e2 | ||
| 
						 | 
					1fbcfbe693 | ||
| 
						 | 
					34ab17b669 | ||
| 
						 | 
					4942ef6f0e | ||
| 
						 | 
					9ae08a9c04 | ||
| 
						 | 
					76f8a1f51d | ||
| 
						 | 
					9d358821e5 | ||
| 
						 | 
					a6c6874a1a | ||
| 
						 | 
					a947f2d2b6 | ||
| 
						 | 
					94e19e7111 | ||
| 
						 | 
					04677ce024 | ||
| 
						 | 
					407adb5b17 | ||
| 
						 | 
					da0616cd13 | ||
| 
						 | 
					1c02ca537a | ||
| 
						 | 
					3f2f3d4264 | ||
| 
						 | 
					c4c2c61e8c | ||
| 
						 | 
					5f3d6f70f6 | ||
| 
						 | 
					ece0bdf1fd | ||
| 
						 | 
					97e4b1883e | ||
| 
						 | 
					a2b38b3022 | ||
| 
						 | 
					d51092f42b | ||
| 
						 | 
					bdb6171334 | ||
| 
						 | 
					1d4547a43d | ||
| 
						 | 
					65ee74fbc7 | ||
| 
						 | 
					c21506ba02 | ||
| 
						 | 
					00f1628eac | ||
| 
						 | 
					c69d103956 | ||
| 
						 | 
					d56f92ee78 | ||
| 
						 | 
					d5492d9b47 | ||
| 
						 | 
					451dc18f10 | ||
| 
						 | 
					127dca46a0 | ||
| 
						 | 
					e888074bb4 | ||
| 
						 | 
					1ef5026ef9 | ||
| 
						 | 
					40889b9cd3 | ||
| 
						 | 
					99889b46c9 | ||
| 
						 | 
					82869b3c8d | ||
| 
						 | 
					e8233e699b | ||
| 
						 | 
					04cc76660a | ||
| 
						 | 
					e1f7ea25d2 | ||
| 
						 | 
					8586df1efb | ||
| 
						 | 
					b8e0e12399 | ||
| 
						 | 
					254ef80db1 | ||
| 
						 | 
					f9de8446a0 | ||
| 
						 | 
					d15711efc6 | ||
| 
						 | 
					25ace3ed25 | ||
| 
						 | 
					012c86ab74 | ||
| 
						 | 
					458c29175e | ||
| 
						 | 
					8a5dbb0a2e | ||
| 
						 | 
					532203cdb0 | ||
| 
						 | 
					870d3d5595 | ||
| 
						 | 
					c6c0e4cb32 | ||
| 
						 | 
					8f6f347848 | ||
| 
						 | 
					0f7b63c834 | ||
| 
						 | 
					345731731a | ||
| 
						 | 
					b2c04539a1 | ||
| 
						 | 
					d13363af60 | ||
| 
						 | 
					b6fc2386f0 | ||
| 
						 | 
					9f353dd662 | ||
| 
						 | 
					b49053cae2 | ||
| 
						 | 
					c8062c3a5e | ||
| 
						 | 
					05c08fc708 | ||
| 
						 | 
					0990a0851a | ||
| 
						 | 
					bb0db9c491 | ||
| 
						 | 
					966a753997 | ||
| 
						 | 
					0f829bd111 | ||
| 
						 | 
					a5200a1b8f | ||
| 
						 | 
					6631a7e7f1 | ||
| 
						 | 
					010da5c015 | ||
| 
						 | 
					fbb56e5b1d | ||
| 
						 | 
					78055aa6a5 | ||
| 
						 | 
					e6bd5e8a6d | ||
| 
						 | 
					94f1b50c0f | ||
| 
						 | 
					bd54d55c1d | ||
| 
						 | 
					09c70c3261 | ||
| 
						 | 
					1ed0c6621b | ||
| 
						 | 
					5f8453587e | ||
| 
						 | 
					d6e2d12c74 | ||
| 
						 | 
					305a1afcf7 | ||
| 
						 | 
					9cdf87f194 | ||
| 
						 | 
					a81e9d3dc4 | ||
| 
						 | 
					6b7e0a9987 | ||
| 
						 | 
					8b57fb1208 | ||
| 
						 | 
					2962243d19 | ||
| 
						 | 
					dbdc5d14d3 | ||
| 
						 | 
					6cbe638294 | ||
| 
						 | 
					07c08ed42c | ||
| 
						 | 
					17b226a672 | ||
| 
						 | 
					f33ca23e2f | ||
| 
						 | 
					6d79659dd7 | ||
| 
						 | 
					c56fb0f1a3 | ||
| 
						 | 
					08241a5814 | ||
| 
						 | 
					3d27b1fa85 | ||
| 
						 | 
					6298bf9073 | ||
| 
						 | 
					9a26adf598 | ||
| 
						 | 
					64ad04eb2d | ||
| 
						 | 
					349b293353 | ||
| 
						 | 
					fd91256316 | ||
| 
						 | 
					a9a025d08c | ||
| 
						 | 
					b605e3ada3 | ||
| 
						 | 
					02cbedc387 | ||
| 
						 | 
					e5d814d040 | ||
| 
						 | 
					b09f4fb271 | ||
| 
						 | 
					1f4eada3b4 | ||
| 
						 | 
					b935754cb0 | ||
| 
						 | 
					396bc53593 | ||
| 
						 | 
					7711de24f9 | ||
| 
						 | 
					eee6c81af8 | ||
| 
						 | 
					b89670ef0e | ||
| 
						 | 
					0fccb00b5b | ||
| 
						 | 
					72da660ddb | ||
| 
						 | 
					46ffee4792 | ||
| 
						 | 
					c0a953650b | ||
| 
						 | 
					0424fe1a8f | ||
| 
						 | 
					544a2aea4b | ||
| 
						 | 
					60e5f36d27 | ||
| 
						 | 
					2469361c0f | ||
| 
						 | 
					6fa865a325 | ||
| 
						 | 
					e9ba69631b | ||
| 
						 | 
					d80a8d1919 | ||
| 
						 | 
					d0ff2a237b | ||
| 
						 | 
					6e5dd63c77 | ||
| 
						 | 
					dc014d43af | ||
| 
						 | 
					2f9cf160e4 | ||
| 
						 | 
					336c35dc9e | ||
| 
						 | 
					72b5215645 | ||
| 
						 | 
					06bed64317 | ||
| 
						 | 
					c559759265 | ||
| 
						 | 
					b4000e8ad8 | ||
| 
						 | 
					21d5ed98d5 | ||
| 
						 | 
					e9a182fa30 | ||
| 
						 | 
					b6db386ffd | ||
| 
						 | 
					2c975b501d | ||
| 
						 | 
					279fe3b1c5 | ||
| 
						 | 
					98a9092af1 | ||
| 
						 | 
					87108f5af9 | ||
| 
						 | 
					f257d984b7 | ||
| 
						 | 
					b889d6a8e8 | ||
| 
						 | 
					47234cd3d2 | ||
| 
						 | 
					2c8d0dccfc | ||
| 
						 | 
					a4f576a378 | ||
| 
						 | 
					3def5a010e | ||
| 
						 | 
					294bd1e2f3 | ||
| 
						 | 
					253ef2187c | ||
| 
						 | 
					c0455cbb18 | ||
| 
						 | 
					17e2c77a77 | ||
| 
						 | 
					b52f3818f4 | ||
| 
						 | 
					cc12975514 | ||
| 
						 | 
					9738f395c6 | ||
| 
						 | 
					d4294c8984 | ||
| 
						 | 
					8df61b5011 | ||
| 
						 | 
					f1e6643751 | ||
| 
						 | 
					6991bf196c | ||
| 
						 | 
					822a4c1bdb | ||
| 
						 | 
					a5868b3fe2 | ||
| 
						 | 
					4edfacb983 | ||
| 
						 | 
					c6efe6f59e | ||
| 
						 | 
					35c2b3a9ac | ||
| 
						 | 
					af9675e75a | ||
| 
						 | 
					8b2f9cdfad | ||
| 
						 | 
					01682a8b3c | ||
| 
						 | 
					8b07f23c30 | ||
| 
						 | 
					45932ad508 | ||
| 
						 | 
					ce94682ce1 | ||
| 
						 | 
					2d7ab7e9ea | ||
| 
						 | 
					6176df94ed | ||
| 
						 | 
					a8f8788248 | ||
| 
						 | 
					d5d007abe3 | ||
| 
						 | 
					151457ab16 | ||
| 
						 | 
					dde3e83129 | ||
| 
						 | 
					8f182fdc69 | ||
| 
						 | 
					1064acafc4 | ||
| 
						 | 
					ff8e412ceb | ||
| 
						 | 
					e9cbcb1d98 | ||
| 
						 | 
					ea7fc0311c | ||
| 
						 | 
					30911232c1 | ||
| 
						 | 
					2940a1298e | ||
| 
						 | 
					f916052eab | ||
| 
						 | 
					2fb3f002d0 | ||
| 
						 | 
					82b0bf0b87 | ||
| 
						 | 
					3a7cef3e76 | ||
| 
						 | 
					592c0e0273 | ||
| 
						 | 
					08b977b5a5 | ||
| 
						 | 
					85fb12d554 | ||
| 
						 | 
					b975183c41 | ||
| 
						 | 
					083100e2ab | ||
| 
						 | 
					241d2ba1da | ||
| 
						 | 
					e4fb49775b | ||
| 
						 | 
					381a146dc6 | ||
| 
						 | 
					b4a262832a | ||
| 
						 | 
					6d498d478e | ||
| 
						 | 
					d0561b5c2d | ||
| 
						 | 
					4f4b192402 | ||
| 
						 | 
					0ae1661ba2 | ||
| 
						 | 
					4e9ef338fc | ||
| 
						 | 
					d16e1131b4 | ||
| 
						 | 
					a18894d159 | ||
| 
						 | 
					dfee50ecd9 | ||
| 
						 | 
					10189984f9 | ||
| 
						 | 
					d8425465a3 | ||
| 
						 | 
					1fc02dcf6a | ||
| 
						 | 
					83d092f785 | ||
| 
						 | 
					4825092bbe | ||
| 
						 | 
					bbd79bdf03 | ||
| 
						 | 
					a096e9b719 | ||
| 
						 | 
					ddab25a90d | ||
| 
						 | 
					ffbe98b763 | ||
| 
						 | 
					d7a9bb0a2a | ||
| 
						 | 
					0d81c69b8e | ||
| 
						 | 
					401cd0af0f | ||
| 
						 | 
					c7b41e67f0 | ||
| 
						 | 
					003144a8e8 | ||
| 
						 | 
					af1cb47e65 | ||
| 
						 | 
					e8e7fbdb16 | ||
| 
						 | 
					d5c21afd4b | ||
| 
						 | 
					1afa967909 | ||
| 
						 | 
					85b7b80434 | ||
| 
						 | 
					fe0f662310 | ||
| 
						 | 
					90453438ff | ||
| 
						 | 
					2e63f3b733 | ||
| 
						 | 
					125cc35b59 | ||
| 
						 | 
					7e58aa7d71 | ||
| 
						 | 
					be3d90de02 | ||
| 
						 | 
					82652aaf17 | ||
| 
						 | 
					17d6bb8158 | ||
| 
						 | 
					11c26ecf81 | ||
| 
						 | 
					99d5b23023 | ||
| 
						 | 
					611ba3f4a1 | ||
| 
						 | 
					af28dd6c75 | ||
| 
						 | 
					e79ec456be | ||
| 
						 | 
					3e268d2717 | ||
| 
						 | 
					c46acbacde | ||
| 
						 | 
					304d90425f | ||
| 
						 | 
					bfaa8a89e1 | ||
| 
						 | 
					de941e289e | ||
| 
						 | 
					1d28453529 | ||
| 
						 | 
					690ecff795 | ||
| 
						 | 
					234c73767d | ||
| 
						 | 
					497810cae7 | ||
| 
						 | 
					cbc9d9713d | ||
| 
						 | 
					98fa4fe8c5 | ||
| 
						 | 
					0b4c91c0fc | ||
| 
						 | 
					b9b43196e1 | ||
| 
						 | 
					bf6a9e66d6 | ||
| 
						 | 
					0c372b94f7 | ||
| 
						 | 
					26e1237380 | ||
| 
						 | 
					4882171df5 | ||
| 
						 | 
					931627e6a0 | ||
| 
						 | 
					274a2c9970 | ||
| 
						 | 
					006fcc22a8 | ||
| 
						 | 
					709c51c424 | ||
| 
						 | 
					9bc448546e | ||
| 
						 | 
					0dc092334b | ||
| 
						 | 
					36c194638e | ||
| 
						 | 
					45fb737950 | ||
| 
						 | 
					a01273bae3 | ||
| 
						 | 
					2c17323e15 | ||
| 
						 | 
					870694b3da | ||
| 
						 | 
					87a4b4d1f4 | ||
| 
						 | 
					8ecf5104b3 | ||
| 
						 | 
					2b3aeffbbd | ||
| 
						 | 
					2c2f9e2cc3 | ||
| 
						 | 
					2d9b1b3ffa | ||
| 
						 | 
					f070480275 | ||
| 
						 | 
					49f1597de2 | ||
| 
						 | 
					b44e425f39 | ||
| 
						 | 
					93683c3cf8 | ||
| 
						 | 
					a08ee55e2d | ||
| 
						 | 
					3bac6d9479 | ||
| 
						 | 
					5c5143de48 | ||
| 
						 | 
					c8cd7d9e0f | ||
| 
						 | 
					e0a6cdcf30 | ||
| 
						 | 
					a0ecb9b8fc | ||
| 
						 | 
					4bf4bc784f | ||
| 
						 | 
					9437fef8cc | ||
| 
						 | 
					16b0384bd2 | ||
| 
						 | 
					87ebdd8a71 | ||
| 
						 | 
					7d68189d8a | ||
| 
						 | 
					26414ee013 | ||
| 
						 | 
					5c62f68e14 | ||
| 
						 | 
					0d22b5dace | ||
| 
						 | 
					023ec151df | ||
| 
						 | 
					59dbdb51dc | ||
| 
						 | 
					92d1bc09cb | ||
| 
						 | 
					d62bfb39cd | ||
| 
						 | 
					ce4b274aa1 | ||
| 
						 | 
					334f1842fc | ||
| 
						 | 
					b12540520d | ||
| 
						 | 
					0d7b9b8b7e | ||
| 
						 | 
					31188ee1a8 | ||
| 
						 | 
					4a3e6bce79 | ||
| 
						 | 
					a3829cb720 | ||
| 
						 | 
					e84be9b495 | ||
| 
						 | 
					3a3ca3f515 | ||
| 
						 | 
					032c49b8b3 | ||
| 
						 | 
					3208ff58ca | ||
| 
						 | 
					6707d22a40 | ||
| 
						 | 
					3647bee263 | ||
| 
						 | 
					e2aebccba1 | ||
| 
						 | 
					3e563bcea7 | ||
| 
						 | 
					92f91ff48b | ||
| 
						 | 
					b3dfaaa143 | ||
| 
						 | 
					5b7848a345 | ||
| 
						 | 
					915c6a21ba | ||
| 
						 | 
					58706d595b | ||
| 
						 | 
					236be53269 | ||
| 
						 | 
					1fc1bd382b | ||
| 
						 | 
					a60033f106 | ||
| 
						 | 
					3613e6fc57 | ||
| 
						 | 
					f8e21776f9 | ||
| 
						 | 
					006723cf76 | ||
| 
						 | 
					aa89bcd279 | ||
| 
						 | 
					f19759a182 | ||
| 
						 | 
					d009bcbfb6 | ||
| 
						 | 
					4b71f63ac0 | ||
| 
						 | 
					3adb8c3854 | ||
| 
						 | 
					02e666d59f | ||
| 
						 | 
					5b2d6ff07e | ||
| 
						 | 
					877b2fbd3c | ||
| 
						 | 
					afeab58a3c | ||
| 
						 | 
					744c49a81b | ||
| 
						 | 
					9c5b91fd0b | ||
| 
						 | 
					290d3eab76 | ||
| 
						 | 
					46dae77c23 | ||
| 
						 | 
					a6cd870784 | ||
| 
						 | 
					97879bcd57 | ||
| 
						 | 
					ab1dee1efc | ||
| 
						 | 
					e072aa535d | ||
| 
						 | 
					48f9859d2a | ||
| 
						 | 
					48b5083ca0 | ||
| 
						 | 
					cd64618674 | ||
| 
						 | 
					5d7e960adf | ||
| 
						 | 
					f0d6ee6be8 | ||
| 
						 | 
					e65991f977 | ||
| 
						 | 
					3e83e686ba | ||
| 
						 | 
					8f06b00373 | ||
| 
						 | 
					1dea1f4509 | ||
| 
						 | 
					44411db8e0 | ||
| 
						 | 
					23ac7a1407 | ||
| 
						 | 
					dda640835f | ||
| 
						 | 
					6cc3700314 | ||
| 
						 | 
					cc1489d2f2 | ||
| 
						 | 
					016029c69f | ||
| 
						 | 
					516b848286 | ||
| 
						 | 
					c4202285ef | ||
| 
						 | 
					49e045482a | ||
| 
						 | 
					d8309efc72 | ||
| 
						 | 
					f43acc8a50 | ||
| 
						 | 
					ba47f5c9b0 | ||
| 
						 | 
					4d94ae00d5 | ||
| 
						 | 
					60d8bae30d | ||
| 
						 | 
					0caec9e8f8 | ||
| 
						 | 
					4f85a2e21e | ||
| 
						 | 
					945e15a253 | ||
| 
						 | 
					1fe198b6f9 | ||
| 
						 | 
					78d6603aad | ||
| 
						 | 
					7241ae1a0a | ||
| 
						 | 
					5f58d6a5e0 | ||
| 
						 | 
					acfe628b6e | ||
| 
						 | 
					182d8435f0 | ||
| 
						 | 
					4de920c91d | ||
| 
						 | 
					3cd039dd8f | ||
| 
						 | 
					81269a81ee | ||
| 
						 | 
					3537525e00 | ||
| 
						 | 
					d38f3ad1ee | ||
| 
						 | 
					e083f91497 | ||
| 
						 | 
					ba2cad19cf | ||
| 
						 | 
					db0a1efcc9 | ||
| 
						 | 
					9074521458 | ||
| 
						 | 
					f924200e1b | ||
| 
						 | 
					de2f6e4dae | ||
| 
						 | 
					44bdb056d4 | ||
| 
						 | 
					c31bbf1e68 | ||
| 
						 | 
					5e68f8ce15 | ||
| 
						 | 
					b9a3ef4c6e | ||
| 
						 | 
					1955b87423 | ||
| 
						 | 
					866eedb936 | ||
| 
						 | 
					f701551f36 | ||
| 
						 | 
					adc4df3616 | ||
| 
						 | 
					1199e2d8cf | ||
| 
						 | 
					0f180d1d1d | ||
| 
						 | 
					072569e0f1 | ||
| 
						 | 
					ba9786e4b8 | ||
| 
						 | 
					613599ffff | ||
| 
						 | 
					c9c21d3b89 | ||
| 
						 | 
					d0d046eca2 | ||
| 
						 | 
					2a81428489 | ||
| 
						 | 
					7073e9e2a0 | ||
| 
						 | 
					d866df33a1 | ||
| 
						 | 
					b77fcddb6b | ||
| 
						 | 
					f6fbd470e3 | ||
| 
						 | 
					63810d8566 | ||
| 
						 | 
					123c401967 | ||
| 
						 | 
					a3fffd648b | ||
| 
						 | 
					2d57b73a50 | ||
| 
						 | 
					f14845d999 | ||
| 
						 | 
					80bb905d3d | ||
| 
						 | 
					a297985f42 | ||
| 
						 | 
					404dcc5e8e | ||
| 
						 | 
					8242a6a9fc | ||
| 
						 | 
					17bcb8d465 | ||
| 
						 | 
					72165799a8 | ||
| 
						 | 
					f1c2a9de45 | ||
| 
						 | 
					52b66a622d | ||
| 
						 | 
					273db408a8 | ||
| 
						 | 
					957b6db3b1 | ||
| 
						 | 
					a14e2d9dfe | ||
| 
						 | 
					a8b94d6409 | ||
| 
						 | 
					fe19c448f0 | ||
| 
						 | 
					fcf6473199 | ||
| 
						 | 
					1285221370 | ||
| 
						 | 
					5dcf517d84 | ||
| 
						 | 
					9b2f486c9e | ||
| 
						 | 
					24995f3a10 | ||
| 
						 | 
					0fc5cf0870 | ||
| 
						 | 
					f78d4a35f8 | ||
| 
						 | 
					df5eaa8a52 | ||
| 
						 | 
					6ce46d69f5 | ||
| 
						 | 
					575e664a7c | ||
| 
						 | 
					7389c848d4 | ||
| 
						 | 
					4d393410f3 | ||
| 
						 | 
					bd69750360 | ||
| 
						 | 
					c9501c223f | ||
| 
						 | 
					9dd5ae6553 | ||
| 
						 | 
					e1e876072d | ||
| 
						 | 
					dd2589494f | ||
| 
						 | 
					1cfa8a397f | ||
| 
						 | 
					bdae099862 | ||
| 
						 | 
					cca28b291c | ||
| 
						 | 
					062d3e39e7 | ||
| 
						 | 
					e29f478a7a | ||
| 
						 | 
					1b58b616e3 | ||
| 
						 | 
					c70d381775 | ||
| 
						 | 
					508d8b1617 | ||
| 
						 | 
					8c74b5e56c | ||
| 
						 | 
					c59ba5b528 | ||
| 
						 | 
					45d87a1ffe | ||
| 
						 | 
					a3feb21bbe | ||
| 
						 | 
					37530362fa | ||
| 
						 | 
					fd69886aed | ||
| 
						 | 
					fd795679bb | ||
| 
						 | 
					e523f5f389 | ||
| 
						 | 
					e4dd79bbc8 | ||
| 
						 | 
					bc37d996fc | ||
| 
						 | 
					31cafe53c9 | ||
| 
						 | 
					dc4ddcd2bb | ||
| 
						 | 
					5256b021f3 | ||
| 
						 | 
					1bb68d62ab | ||
| 
						 | 
					4ab1e7ceaf | ||
| 
						 | 
					06623ff028 | ||
| 
						 | 
					67d48c8cc8 | ||
| 
						 | 
					d59fb0dd2f | ||
| 
						 | 
					245f44e2ab | ||
| 
						 | 
					e5d6528a12 | ||
| 
						 | 
					980afccf98 | ||
| 
						 | 
					9bd2cd745f | ||
| 
						 | 
					015fbde807 | ||
| 
						 | 
					ba1b888384 | ||
| 
						 | 
					6f9079fd50 | ||
| 
						 | 
					c938563a81 | ||
| 
						 | 
					40928698bb | ||
| 
						 | 
					138d8ab0c7 | ||
| 
						 | 
					47cc5525a2 | ||
| 
						 | 
					67fec850e1 | ||
| 
						 | 
					82db6e1646 | ||
| 
						 | 
					e7227322b3 | ||
| 
						 | 
					a5595fde9a | ||
| 
						 | 
					95f8c7195c | ||
| 
						 | 
					dcbbf83dba | ||
| 
						 | 
					3c89d78dba | ||
| 
						 | 
					84fcd6f83e | ||
| 
						 | 
					a92ae07091 | ||
| 
						 | 
					68809d3969 | ||
| 
						 | 
					d6a89fcf88 | ||
| 
						 | 
					ef5f6a08ff | ||
| 
						 | 
					7c517a04b1 | ||
| 
						 | 
					d78e52987e | ||
| 
						 | 
					755cc53a6e | ||
| 
						 | 
					1226c472b7 | ||
| 
						 | 
					4d7072f4b5 | ||
| 
						 | 
					b5348a095d | ||
| 
						 | 
					66df02fd98 | ||
| 
						 | 
					206eb6a11d | ||
| 
						 | 
					f11fd3f4e1 | ||
| 
						 | 
					29b108f939 | ||
| 
						 | 
					31106cc750 | ||
| 
						 | 
					ff3fa48fc7 | ||
| 
						 | 
					87166e1fb6 | ||
| 
						 | 
					f3e24baddf | ||
| 
						 | 
					a6977ee73d | ||
| 
						 | 
					d4704d5245 | ||
| 
						 | 
					8f0edcb3d2 | ||
| 
						 | 
					35e25255e0 | ||
| 
						 | 
					c3fbf5d9a8 | ||
| 
						 | 
					55e42c93a8 | ||
| 
						 | 
					6a0dec9584 | ||
| 
						 | 
					21a85f1977 | ||
| 
						 | 
					322de0c8c1 | ||
| 
						 | 
					6a9af68b56 | ||
| 
						 | 
					b6e4dac217 | ||
| 
						 | 
					8a0a9392ab | ||
| 
						 | 
					bcbe4e5254 | ||
| 
						 | 
					47ff5c6279 | ||
| 
						 | 
					898f856c44 | ||
| 
						 | 
					883b0c2274 | ||
| 
						 | 
					4f94d1a8b1 | ||
| 
						 | 
					1d4581c2dd | ||
| 
						 | 
					c05940edc7 | ||
| 
						 | 
					c507a16e49 | ||
| 
						 | 
					308f028e28 | ||
| 
						 | 
					e4a6cf421a | ||
| 
						 | 
					329636d6e3 | ||
| 
						 | 
					9163b8fb23 | ||
| 
						 | 
					a542db90c6 | ||
| 
						 | 
					a7ce69dbd7 | ||
| 
						 | 
					9d93ce246c | ||
| 
						 | 
					76c4336c43 | ||
| 
						 | 
					e71adb85c5 | ||
| 
						 | 
					033c51f0a3 | ||
| 
						 | 
					452d1595a6 | ||
| 
						 | 
					0d197a833c | ||
| 
						 | 
					e0031b80ee | ||
| 
						 | 
					b19941ab05 | ||
| 
						 | 
					752938daab | ||
| 
						 | 
					c78515f55e | ||
| 
						 | 
					3ba1f11147 | ||
| 
						 | 
					bbc206fdf7 | ||
| 
						 | 
					2bd065dfbe | ||
| 
						 | 
					6d7dbc12f2 | ||
| 
						 | 
					83c40e7fc0 | ||
| 
						 | 
					b5fe234588 | ||
| 
						 | 
					e1a00d7d1d | ||
| 
						 | 
					acf60ef707 | ||
| 
						 | 
					c85a157854 | ||
| 
						 | 
					0c5d16e4f5 | ||
| 
						 | 
					bd2af5e707 | ||
| 
						 | 
					58d55afa6f | ||
| 
						 | 
					6343e2fac3 | ||
| 
						 | 
					b476df64a1 | ||
| 
						 | 
					1d46b6b3b9 | ||
| 
						 | 
					bbb35447c4 | ||
| 
						 | 
					6276f1e100 | ||
| 
						 | 
					5b8a57ecae | ||
| 
						 | 
					817dfc18a3 | ||
| 
						 | 
					0b0b2a8087 | ||
| 
						 | 
					c23d16ac19 | ||
| 
						 | 
					1b28ed575b | ||
| 
						 | 
					135c0af1bb | ||
| 
						 | 
					475918410b | ||
| 
						 | 
					3102792161 | ||
| 
						 | 
					a291182757 | ||
| 
						 | 
					b26ca3408c | ||
| 
						 | 
					83978bd37a | ||
| 
						 | 
					a3790c0d01 | ||
| 
						 | 
					63b6090f7c | ||
| 
						 | 
					c5571db0c2 | ||
| 
						 | 
					e0457d5f7c | ||
| 
						 | 
					ae52ec9869 | ||
| 
						 | 
					0b33bc6b72 | ||
| 
						 | 
					7aa983c6db | ||
| 
						 | 
					2b90b1f344 | ||
| 
						 | 
					65123f8064 | ||
| 
						 | 
					1d8634b110 | ||
| 
						 | 
					29e0c30c2a | ||
| 
						 | 
					cf82191d77 | ||
| 
						 | 
					3a8a0a3945 | ||
| 
						 | 
					c5d4ab7e35 | ||
| 
						 | 
					b955dbd325 | ||
| 
						 | 
					45582d1e2b | ||
| 
						 | 
					60c50cbf9c | ||
| 
						 | 
					3a3619b46a | ||
| 
						 | 
					b83eddc578 | ||
| 
						 | 
					7f558334ad | ||
| 
						 | 
					6229a5607c | ||
| 
						 | 
					6acc3b9689 | ||
| 
						 | 
					66aa856698 | ||
| 
						 | 
					f559f31bef | ||
| 
						 | 
					3210b4fd14 | ||
| 
						 | 
					a7b42009c4 | ||
| 
						 | 
					7b5ffd6834 | ||
| 
						 | 
					9b55da73ca | ||
| 
						 | 
					e7156ff2e8 | ||
| 
						 | 
					437db75b94 | ||
| 
						 | 
					1586365835 | ||
| 
						 | 
					7d5b04db4e | ||
| 
						 | 
					48b0cf8b10 | ||
| 
						 | 
					b693f941fd | ||
| 
						 | 
					c602e7f4e8 | ||
| 
						 | 
					1fc6d41bf6 | ||
| 
						 | 
					a41477f92e | ||
| 
						 | 
					5f68c5feef | ||
| 
						 | 
					ee84a5a7fb | ||
| 
						 | 
					66d3e7481e | ||
| 
						 | 
					0e21156333 | ||
| 
						 | 
					f533b7780e | ||
| 
						 | 
					cc2f5a8022 | ||
| 
						 | 
					b441bf9226 | ||
| 
						 | 
					2a9aca32dc | ||
| 
						 | 
					89da653fa6 | ||
| 
						 | 
					af50b58c3f | ||
| 
						 | 
					4d635a7001 | ||
| 
						 | 
					ce15d5a9dc | ||
| 
						 | 
					ba1c602281 | ||
| 
						 | 
					cfc781be6e | ||
| 
						 | 
					84acc3c2bc | ||
| 
						 | 
					c2e4f17c1a | ||
| 
						 | 
					979689aa5c | ||
| 
						 | 
					a3faebd104 | ||
| 
						 | 
					025c7737b2 | ||
| 
						 | 
					513d4b4c16 | ||
| 
						 | 
					7ef701519b | ||
| 
						 | 
					50d194af4d | ||
| 
						 | 
					287973746e | ||
| 
						 | 
					f1558bb424 | ||
| 
						 | 
					6ca487992b | ||
| 
						 | 
					cf3a5cebd7 | ||
| 
						 | 
					a661b65357 | ||
| 
						 | 
					98e6654938 | ||
| 
						 | 
					cecd263878 | ||
| 
						 | 
					31fe950d2b | ||
| 
						 | 
					db6a87d8cc | ||
| 
						 | 
					7beb408771 | ||
| 
						 | 
					51008ffce1 | ||
| 
						 | 
					3811eed8d5 | ||
| 
						 | 
					581f1c8494 | ||
| 
						 | 
					41ebed27fa | ||
| 
						 | 
					bf21446a2a | ||
| 
						 | 
					e72d734d5f | ||
| 
						 | 
					20d2186c87 | ||
| 
						 | 
					9ba3ec9176 | ||
| 
						 | 
					8f71fb8d98 | ||
| 
						 | 
					48948d53b6 | ||
| 
						 | 
					dbec19622e | ||
| 
						 | 
					2ce15df528 | ||
| 
						 | 
					681bfae499 | ||
| 
						 | 
					5dd955dcd2 | ||
| 
						 | 
					56fa8e69cf | ||
| 
						 | 
					67d0738aba | ||
| 
						 | 
					b8a61e7362 | ||
| 
						 | 
					dd5e774664 | ||
| 
						 | 
					6b86bad5ef | ||
| 
						 | 
					712557128b | ||
| 
						 | 
					3009e9f9ef | ||
| 
						 | 
					b30245dae0 | ||
| 
						 | 
					116daf4c2f | ||
| 
						 | 
					cb40bdaf57 | ||
| 
						 | 
					4b12506891 | ||
| 
						 | 
					cf98440178 | ||
| 
						 | 
					c500d44735 | ||
| 
						 | 
					18eda73234 | ||
| 
						 | 
					7526e2c043 | ||
| 
						 | 
					6d52f260bf | ||
| 
						 | 
					752f2b6785 | ||
| 
						 | 
					e1c279b63d | ||
| 
						 | 
					467889703a | ||
| 
						 | 
					3a457cca86 | ||
| 
						 | 
					285046ec51 | ||
| 
						 | 
					f8000b9345 | ||
| 
						 | 
					77a8eb352f | ||
| 
						 | 
					114697bef3 | ||
| 
						 | 
					2aa9043ad3 | ||
| 
						 | 
					1a095560f7 | ||
| 
						 | 
					f329b8d73b | ||
| 
						 | 
					3d90a32429 | ||
| 
						 | 
					e3a7463c5d | ||
| 
						 | 
					796c6eadcb | ||
| 
						 | 
					b485e5b7e3 | ||
| 
						 | 
					d1cc7b8f22 | ||
| 
						 | 
					1cf9d58cb4 | ||
| 
						 | 
					0cff933416 | ||
| 
						 | 
					c41b29e5db | ||
| 
						 | 
					65fb3fa630 | ||
| 
						 | 
					0b0f08dbc7 | ||
| 
						 | 
					5c32657c80 | ||
| 
						 | 
					07cee70258 | ||
| 
						 | 
					4ba163cbf9 | ||
| 
						 | 
					2bfb2398e3 | ||
| 
						 | 
					a4a8f7b3ef | ||
| 
						 | 
					34c66925aa | ||
| 
						 | 
					cb7fd76f57 | ||
| 
						 | 
					de822715b2 | ||
| 
						 | 
					89f534e1d3 | ||
| 
						 | 
					d46c1a8126 | ||
| 
						 | 
					e32587d5a6 | ||
| 
						 | 
					7876e4488f | ||
| 
						 | 
					1a19f83d4c | ||
| 
						 | 
					db8c838c6a | ||
| 
						 | 
					37da54b10e | ||
| 
						 | 
					0fea7ed4a4 | ||
| 
						 | 
					dbeac560aa | ||
| 
						 | 
					89eeccacde | ||
| 
						 | 
					c9fc143972 | ||
| 
						 | 
					004aa803a9 | ||
| 
						 | 
					c921a5e1d4 | ||
| 
						 | 
					0b4b9a11f5 | ||
| 
						 | 
					d7e0299792 | ||
| 
						 | 
					9dfdf0ad1d | ||
| 
						 | 
					3b04cdd706 | ||
| 
						 | 
					11a57c7be5 | ||
| 
						 | 
					b370230b78 | ||
| 
						 | 
					50a381b789 | ||
| 
						 | 
					534aaf3731 | ||
| 
						 | 
					6dc5d570d0 | ||
| 
						 | 
					cb78486d97 | ||
| 
						 | 
					9c9aa4f145 | ||
| 
						 | 
					b6d1e52d45 | ||
| 
						 | 
					f185e725a0 | ||
| 
						 | 
					591ccf586d | ||
| 
						 | 
					b7061c61b0 | ||
| 
						 | 
					8a428200a6 | ||
| 
						 | 
					10b2328fea | ||
| 
						 | 
					98c2a26ea6 | ||
| 
						 | 
					965b6dad44 | ||
| 
						 | 
					a3d8c0fc5d | ||
| 
						 | 
					a32d795aae | ||
| 
						 | 
					ef3dc028ef | ||
| 
						 | 
					2413a3975f | ||
| 
						 | 
					3b0b5abae3 | ||
| 
						 | 
					b49124f6d9 | ||
| 
						 | 
					2260ad21fb | ||
| 
						 | 
					6b0e9facf4 | ||
| 
						 | 
					c404ff7955 | ||
| 
						 | 
					8e2f6b79ea | ||
| 
						 | 
					ee60d9fb28 | ||
| 
						 | 
					be6d77005f | ||
| 
						 | 
					b263b66746 | ||
| 
						 | 
					5294dd705d | ||
| 
						 | 
					2b67158673 | ||
| 
						 | 
					db744f8950 | ||
| 
						 | 
					e059b19ddb | ||
| 
						 | 
					997a54c981 | ||
| 
						 | 
					b78e502104 | ||
| 
						 | 
					b6d0054a52 | ||
| 
						 | 
					117df10db4 | ||
| 
						 | 
					d300bcca7f | ||
| 
						 | 
					d59c3e5046 | ||
| 
						 | 
					6d8566f2eb | ||
| 
						 | 
					4e1b0d8904 | ||
| 
						 | 
					8ce2912fbc | ||
| 
						 | 
					1372965e2e | ||
| 
						 | 
					1a1422643b | ||
| 
						 | 
					409960491d | ||
| 
						 | 
					96bd6f730a | ||
| 
						 | 
					c0f5dd070b | ||
| 
						 | 
					9d7a8d3578 | ||
| 
						 | 
					4dec4f646d | ||
| 
						 | 
					2cb924b052 | ||
| 
						 | 
					51ac0cfe44 | ||
| 
						 | 
					16e819e1d8 | ||
| 
						 | 
					1023cfe70d | ||
| 
						 | 
					8e0a2d8461 | ||
| 
						 | 
					e13ae96d7c | ||
| 
						 | 
					9f29ec4721 | ||
| 
						 | 
					b9a20b5057 | ||
| 
						 | 
					c2222c2ea2 | ||
| 
						 | 
					336da5642d | ||
| 
						 | 
					8573fa1806 | ||
| 
						 | 
					a52c2fb296 | ||
| 
						 | 
					41450b27f2 | ||
| 
						 | 
					e72d5983f2 | ||
| 
						 | 
					5a85385387 | ||
| 
						 | 
					5e54b4f364 | ||
| 
						 | 
					5ba372b17c | ||
| 
						 | 
					f9b0f47c0c | ||
| 
						 | 
					4deeadf7dc | ||
| 
						 | 
					384eff877c | ||
| 
						 | 
					68dbba9817 | ||
| 
						 | 
					ea7150b070 | ||
| 
						 | 
					cb42ce0b67 | ||
| 
						 | 
					e8330cf5ac | ||
| 
						 | 
					7d34470458 | ||
| 
						 | 
					f1047cebea | ||
| 
						 | 
					da8a2e6f90 | ||
| 
						 | 
					546ec5a9b3 | ||
| 
						 | 
					e3fefbfd56 | ||
| 
						 | 
					3b80e3aa9e | ||
| 
						 | 
					14cfde9c83 | ||
| 
						 | 
					9cabef963c | ||
| 
						 | 
					ce9eab79a7 | ||
| 
						 | 
					e9e202cfa8 | ||
| 
						 | 
					d83ae69455 | ||
| 
						 | 
					bb4f7a8d52 | ||
| 
						 | 
					619b2c03dc | ||
| 
						 | 
					aa4c2de10e | ||
| 
						 | 
					6c36f7a9f2 | ||
| 
						 | 
					78f7923580 | ||
| 
						 | 
					978ebf0141 | ||
| 
						 | 
					a9ed4da8eb | ||
| 
						 | 
					e1a4814cd4 | ||
| 
						 | 
					3cad81f6fe | ||
| 
						 | 
					4450107afb | ||
| 
						 | 
					908efd3b73 | ||
| 
						 | 
					1a7691c059 | ||
| 
						 | 
					f524ddbe04 | ||
| 
						 | 
					541814c403 | ||
| 
						 | 
					5013540224 | ||
| 
						 | 
					94cb5ee63c | ||
| 
						 | 
					fc9c61bc3b | ||
| 
						 | 
					e815d3015e | ||
| 
						 | 
					dc2a33d680 | ||
| 
						 | 
					7ba45bf133 | ||
| 
						 | 
					d98a4b7366 | ||
| 
						 | 
					889a54c467 | ||
| 
						 | 
					9d07fd03e3 | ||
| 
						 | 
					a8a1878256 | ||
| 
						 | 
					5b46eee0f5 | ||
| 
						 | 
					e5e6a94fbf | ||
| 
						 | 
					d9ff889073 | ||
| 
						 | 
					e4decc418a | ||
| 
						 | 
					cf5bfbfc21 | ||
| 
						 | 
					567fef894e | ||
| 
						 | 
					6ee2a1365e | ||
| 
						 | 
					435037d4e4 | ||
| 
						 | 
					c5de8996cc | ||
| 
						 | 
					2dc5383a20 | ||
| 
						 | 
					9391f97715 | ||
| 
						 | 
					5b16639538 | ||
| 
						 | 
					1738bb61e1 | ||
| 
						 | 
					91b3f0e691 | ||
| 
						 | 
					6ac4e8bd6e | ||
| 
						 | 
					983495c4b2 | ||
| 
						 | 
					931a23a5a5 | ||
| 
						 | 
					72849dce81 | ||
| 
						 | 
					2618893114 | ||
| 
						 | 
					36026dfc01 | ||
| 
						 | 
					79aa04ef27 | ||
| 
						 | 
					3a0799977b | ||
| 
						 | 
					e19ea55783 | ||
| 
						 | 
					8716dbea40 | ||
| 
						 | 
					e9bc66c84f | ||
| 
						 | 
					c078798c60 | ||
| 
						 | 
					de73cca923 | ||
| 
						 | 
					b1051789d6 | ||
| 
						 | 
					4db73c1bb8 | ||
| 
						 | 
					3ae34e3a8c | ||
| 
						 | 
					1f3b65801b | ||
| 
						 | 
					5e2c4e23f4 | ||
| 
						 | 
					35780c2139 | ||
| 
						 | 
					ceff5fec5a | ||
| 
						 | 
					4897dc4056 | ||
| 
						 | 
					35e33f0e52 | ||
| 
						 | 
					a844e27baa | ||
| 
						 | 
					0783bf151c | ||
| 
						 | 
					566bdf2bda | ||
| 
						 | 
					eb6dc02b23 | ||
| 
						 | 
					78435364ec | ||
| 
						 | 
					5cbc2e8bc1 | ||
| 
						 | 
					e7cf7fcd21 | ||
| 
						 | 
					bb8aab0211 | ||
| 
						 | 
					0fbf5f7102 | ||
| 
						 | 
					f1b2807478 | ||
| 
						 | 
					faacb092f8 | ||
| 
						 | 
					b439a74620 | ||
| 
						 | 
					3132ab8ce6 | ||
| 
						 | 
					bfd7bb3eb6 | ||
| 
						 | 
					11c8f0b79d | ||
| 
						 | 
					c4068186ac | ||
| 
						 | 
					0a93a68020 | ||
| 
						 | 
					f2ab7d1392 | ||
| 
						 | 
					c41ab9ade5 | ||
| 
						 | 
					141e584998 | ||
| 
						 | 
					336736ef35 | ||
| 
						 | 
					df7cb13525 | ||
| 
						 | 
					d93eb21c7c | ||
| 
						 | 
					a403188f92 | ||
| 
						 | 
					82b2230527 | ||
| 
						 | 
					a8a004987c | ||
| 
						 | 
					0e36019977 | ||
| 
						 | 
					354c3ace73 | ||
| 
						 | 
					52129c0b0b | ||
| 
						 | 
					a52877a2f1 | ||
| 
						 | 
					cdd7c3ce92 | ||
| 
						 | 
					c1497b4d19 | ||
| 
						 | 
					b2ed462934 | ||
| 
						 | 
					bb766a0ad6 | ||
| 
						 | 
					b65f851318 | ||
| 
						 | 
					35bf35411c | ||
| 
						 | 
					54fbc77dc8 | ||
| 
						 | 
					9e09eebf94 | ||
| 
						 | 
					45a2f93906 | ||
| 
						 | 
					6982c0da4e | ||
| 
						 | 
					b7727ee616 | ||
| 
						 | 
					f0446ca8d7 | ||
| 
						 | 
					6bc847e49e | ||
| 
						 | 
					3f1c4e49a3 | ||
| 
						 | 
					37a7cd1a11 | ||
| 
						 | 
					3a2d9c4dd0 | ||
| 
						 | 
					e51d1321fc | ||
| 
						 | 
					b9fdb3eb99 | ||
| 
						 | 
					d66ace9da5 | ||
| 
						 | 
					db75357110 | ||
| 
						 | 
					0713f8abe6 | ||
| 
						 | 
					93d9121a77 | ||
| 
						 | 
					92dad6cc84 | ||
| 
						 | 
					61454a9f8c | ||
| 
						 | 
					bb2297a41d | ||
| 
						 | 
					75e98d0563 | ||
| 
						 | 
					e9eb000c53 | ||
| 
						 | 
					1ba01caaa3 | ||
| 
						 | 
					5cd6571fae | ||
| 
						 | 
					6383bbe525 | ||
| 
						 | 
					06da6e4977 | ||
| 
						 | 
					b72faddc47 | ||
| 
						 | 
					d92f0bb6e9 | ||
| 
						 | 
					710e5d5639 | ||
| 
						 | 
					6da980e2b5 | ||
| 
						 | 
					37f599bcec | ||
| 
						 | 
					8408f4fbc7 | ||
| 
						 | 
					534164ef90 | ||
| 
						 | 
					e32c852e1e | ||
| 
						 | 
					dbfc0f8c2b | ||
| 
						 | 
					3728974460 | ||
| 
						 | 
					fdc2bbcacb | ||
| 
						 | 
					c2a3358b60 | ||
| 
						 | 
					882e891284 | ||
| 
						 | 
					05bbf78afd | ||
| 
						 | 
					99ecb90a99 | ||
| 
						 | 
					dbad169019 | ||
| 
						 | 
					3ba5d1cf2e | ||
| 
						 | 
					be2e2c3297 | ||
| 
						 | 
					ed0015284b | ||
| 
						 | 
					6d03b73e35 | ||
| 
						 | 
					622d3d3592 | ||
| 
						 | 
					0e06354402 | ||
| 
						 | 
					62c271610b | ||
| 
						 | 
					db089ad60d | ||
| 
						 | 
					1f0c9ad7e1 | ||
| 
						 | 
					06efc222f9 | ||
| 
						 | 
					de3333bae4 | ||
| 
						 | 
					924875e53b | ||
| 
						 | 
					3a64458217 | ||
| 
						 | 
					ea71c22731 | ||
| 
						 | 
					dc706cd35f | ||
| 
						 | 
					1241126adf | ||
| 
						 | 
					19da130053 | ||
| 
						 | 
					a75b191502 | ||
| 
						 | 
					e5cb260365 | ||
| 
						 | 
					6aecef815c | ||
| 
						 | 
					daba492c3a | ||
| 
						 | 
					24cff6ced5 | ||
| 
						 | 
					ac7b42610f | ||
| 
						 | 
					7abe76e1bd | ||
| 
						 | 
					7bc03ded12 | ||
| 
						 | 
					ea3b8af50a | ||
| 
						 | 
					badb910f3c | ||
| 
						 | 
					3866752e7e | ||
| 
						 | 
					3e3dac9f97 | ||
| 
						 | 
					397ba0f08a | ||
| 
						 | 
					07ad8f5d17 | ||
| 
						 | 
					47c3448a97 | ||
| 
						 | 
					4db48ec0bd | ||
| 
						 | 
					c518ade1fd | ||
| 
						 | 
					acdf4afb91 | ||
| 
						 | 
					6d3dec92fb | ||
| 
						 | 
					2d3b6a5be7 | ||
| 
						 | 
					81d1998e09 | ||
| 
						 | 
					6b46ca135a | ||
| 
						 | 
					fa293e4e4b | ||
| 
						 | 
					24cbf3efc6 | ||
| 
						 | 
					534a1ed0cb | ||
| 
						 | 
					ee306a1332 | ||
| 
						 | 
					45442167b0 | ||
| 
						 | 
					131645ecce | ||
| 
						 | 
					f1ca5f5b89 | ||
| 
						 | 
					e452de9d87 | ||
| 
						 | 
					a0256f462a | ||
| 
						 | 
					82d5d46c14 | ||
| 
						 | 
					0665dd6852 | ||
| 
						 | 
					98fc09b18a | ||
| 
						 | 
					192ebef8cf | ||
| 
						 | 
					b01ab14338 | ||
| 
						 | 
					2a96235bf7 | ||
| 
						 | 
					1cf9bf00f4 | ||
| 
						 | 
					a5224c3420 | ||
| 
						 | 
					af436bc158 | ||
| 
						 | 
					ab603c6987 | ||
| 
						 | 
					9c11a0e541 | ||
| 
						 | 
					8de83bf876 | ||
| 
						 | 
					679df234b7 | ||
| 
						 | 
					26eaab0990 | ||
| 
						 | 
					7be96d7c9f | ||
| 
						 | 
					d11493934c | ||
| 
						 | 
					c62da732a4 | ||
| 
						 | 
					a1a63a4239 | ||
| 
						 | 
					103a434386 | ||
| 
						 | 
					567671e291 | ||
| 
						 | 
					d8a750ee7f | ||
| 
						 | 
					9c10b2c8d3 | ||
| 
						 | 
					56a106115f | ||
| 
						 | 
					e9ad0d2c31 | ||
| 
						 | 
					97639f0d73 | ||
| 
						 | 
					e3a4f8b84c | ||
| 
						 | 
					7e99812432 | ||
| 
						 | 
					2a1ef75435 | ||
| 
						 | 
					c148d70978 | ||
| 
						 | 
					7b6055d1af | ||
| 
						 | 
					f31b12503e | ||
| 
						 | 
					f82197ad75 | ||
| 
						 | 
					3f37e73bae | ||
| 
						 | 
					0774f470d9 | ||
| 
						 | 
					d7a9e91688 | ||
| 
						 | 
					601cb9be20 | ||
| 
						 | 
					f3229ee19a | ||
| 
						 | 
					219a3580b7 | ||
| 
						 | 
					d63c6bd397 | ||
| 
						 | 
					fdb61e583a | ||
| 
						 | 
					b8e2f83ae6 | ||
| 
						 | 
					93dbd83570 | ||
| 
						 | 
					5be022712a | ||
| 
						 | 
					43f9391bcc | ||
| 
						 | 
					c1c971654b | ||
| 
						 | 
					72b1072fbd | ||
| 
						 | 
					3bfd99bfbb | ||
| 
						 | 
					a169e82065 | ||
| 
						 | 
					c80410c50c | ||
| 
						 | 
					dc01b6b1f2 | ||
| 
						 | 
					b7a26e6daf | ||
| 
						 | 
					ce16450a89 | ||
| 
						 | 
					9d2e51c199 | ||
| 
						 | 
					1e325f6149 | ||
| 
						 | 
					c458a33196 | ||
| 
						 | 
					7953b8ff1b | ||
| 
						 | 
					b1460627f3 | ||
| 
						 | 
					5abc8ae6f9 | ||
| 
						 | 
					6a184a6098 | ||
| 
						 | 
					3d5e97f560 | ||
| 
						 | 
					54c7559a7e | ||
| 
						 | 
					0c9de428ae | ||
| 
						 | 
					f13def508c | ||
| 
						 | 
					1ae6ddac91 | ||
| 
						 | 
					55dcfa421c | ||
| 
						 | 
					c04f8cf44a | ||
| 
						 | 
					870d986131 | ||
| 
						 | 
					4f272c17f5 | ||
| 
						 | 
					fd3e027faa | ||
| 
						 | 
					235dd0a22a | ||
| 
						 | 
					b589977b9e | ||
| 
						 | 
					291e4a6ebe | ||
| 
						 | 
					2d2ed9dffd | ||
| 
						 | 
					8ada6e7705 | ||
| 
						 | 
					7f657f342a | ||
| 
						 | 
					20e8f0ee27 | ||
| 
						 | 
					429266b7e4 | ||
| 
						 | 
					2c7bc88d78 | ||
| 
						 | 
					54f7ebe789 | ||
| 
						 | 
					dd499e74de | ||
| 
						 | 
					19a6e8b32c | ||
| 
						 | 
					ed5538dc2b | ||
| 
						 | 
					b8ffcf49ed | ||
| 
						 | 
					eb929eef14 | ||
| 
						 | 
					2cd3ad9bdd | ||
| 
						 | 
					323f289c48 | ||
| 
						 | 
					a45e4a5537 | ||
| 
						 | 
					b7fe2f9675 | ||
| 
						 | 
					6dcd1c9109 | ||
| 
						 | 
					2fe5adc36c | ||
| 
						 | 
					839590f576 | ||
| 
						 | 
					e0a8d1f94e | ||
| 
						 | 
					9ad0f6812f | ||
| 
						 | 
					a3376fe8fc | ||
| 
						 | 
					3cc1f498a1 | ||
| 
						 | 
					c6c0035ea5 | ||
| 
						 | 
					531d630b5c | ||
| 
						 | 
					853b1eb424 | ||
| 
						 | 
					09a2615fb2 | ||
| 
						 | 
					285b42756a | ||
| 
						 | 
					508f15cdab | ||
| 
						 | 
					52c0d30078 | ||
| 
						 | 
					10997ee8ab | ||
| 
						 | 
					8a774dc9a6 | ||
| 
						 | 
					200bc9e3e8 | ||
| 
						 | 
					7dd0ee0495 | ||
| 
						 | 
					76569fc662 | ||
| 
						 | 
					f2a253e0dd | ||
| 
						 | 
					0ad0eaf61c | ||
| 
						 | 
					47b0f48dd9 | ||
| 
						 | 
					44e48abc44 | ||
| 
						 | 
					f420de027f | ||
| 
						 | 
					ecf186065c | ||
| 
						 | 
					20e021bf41 | ||
| 
						 | 
					8ca2ae775d | ||
| 
						 | 
					ee8aa8217a | ||
| 
						 | 
					2b49dd1e8f | ||
| 
						 | 
					30a54b9085 | ||
| 
						 | 
					1e7e62f8cd | ||
| 
						 | 
					5352823fbf | ||
| 
						 | 
					20251f01ea | ||
| 
						 | 
					528f6b81db | ||
| 
						 | 
					27bfba299e | ||
| 
						 | 
					1690863acc | ||
| 
						 | 
					397211323c | ||
| 
						 | 
					a87f50fb5a | ||
| 
						 | 
					31bc51c8cf | ||
| 
						 | 
					be487c429e | ||
| 
						 | 
					80340f1fe9 | ||
| 
						 | 
					d918f85146 | ||
| 
						 | 
					a95541d61e | ||
| 
						 | 
					30b4c2724e | ||
| 
						 | 
					2adc929367 | ||
| 
						 | 
					7e97837274 | ||
| 
						 | 
					4cb73bf8e4 | ||
| 
						 | 
					79bb8d0077 | ||
| 
						 | 
					6c1a3e4f58 | ||
| 
						 | 
					76c919c1a3 | ||
| 
						 | 
					98405f240b | ||
| 
						 | 
					181355616e | ||
| 
						 | 
					b49a5b2dc0 | ||
| 
						 | 
					713f226114 | ||
| 
						 | 
					d57d85ff35 | ||
| 
						 | 
					74daa124c2 | ||
| 
						 | 
					b8e35bd66e | ||
| 
						 | 
					e8734731d3 | ||
| 
						 | 
					9e0fcabeca | ||
| 
						 | 
					6482dec1bb | ||
| 
						 | 
					81b5eeed6a | ||
| 
						 | 
					365359dd79 | ||
| 
						 | 
					2757be06de | ||
| 
						 | 
					d0afe49d3e | ||
| 
						 | 
					81b31b7087 | ||
| 
						 | 
					2643b122fc | ||
| 
						 | 
					88db657ac2 | ||
| 
						 | 
					1f0af2c073 | ||
| 
						 | 
					2ed2d1515e | ||
| 
						 | 
					bb5b16a36c | ||
| 
						 | 
					5892855c5f | ||
| 
						 | 
					a6e859e9ec | ||
| 
						 | 
					99c65cef0f | ||
| 
						 | 
					496da8b918 | ||
| 
						 | 
					739862384c | ||
| 
						 | 
					0a647c2b8b | ||
| 
						 | 
					429e4f0de8 | ||
| 
						 | 
					2d10c7156c | ||
| 
						 | 
					299053becd | ||
| 
						 | 
					1449bda052 | ||
| 
						 | 
					56bb1a7c83 | ||
| 
						 | 
					96aaf806d8 | ||
| 
						 | 
					d70e5100c0 | ||
| 
						 | 
					4831e626aa | ||
| 
						 | 
					33ab4699ba | ||
| 
						 | 
					595cc5b4b8 | ||
| 
						 | 
					29fb08c2de | ||
| 
						 | 
					7babdf2029 | ||
| 
						 | 
					4b3270f78e | ||
| 
						 | 
					3351b8d007 | ||
| 
						 | 
					4b49bf6a93 | ||
| 
						 | 
					926a56bfe3 | ||
| 
						 | 
					d6f188be71 | ||
| 
						 | 
					016cadfb54 | ||
| 
						 | 
					bdee69f718 | ||
| 
						 | 
					ff43e2e155 | ||
| 
						 | 
					f53948856e | ||
| 
						 | 
					14056ee2ee | ||
| 
						 | 
					b545dc6775 | ||
| 
						 | 
					027902999e | ||
| 
						 | 
					9a310a5d4e | ||
| 
						 | 
					a63d5eaab2 | ||
| 
						 | 
					6af59bc095 | ||
| 
						 | 
					24cc290b85 | ||
| 
						 | 
					8e264a933f | ||
| 
						 | 
					f0b54fefe9 | ||
| 
						 | 
					cf2d9e09b3 | ||
| 
						 | 
					d02408ad8a | ||
| 
						 | 
					7ae551fd03 | ||
| 
						 | 
					c2e45f6ddf | ||
| 
						 | 
					f9a4ad4fa6 | ||
| 
						 | 
					10645a4f13 | ||
| 
						 | 
					06cb0353e5 | ||
| 
						 | 
					b41f836e5f | ||
| 
						 | 
					26a81abffc | ||
| 
						 | 
					ab03b0df4c | ||
| 
						 | 
					e5a77633cf | ||
| 
						 | 
					6f8a82c7af | ||
| 
						 | 
					7a7f47ea80 | ||
| 
						 | 
					0ce5f3e4f5 | ||
| 
						 | 
					21023745e2 | ||
| 
						 | 
					a679116f6f | ||
| 
						 | 
					3988bb34aa | ||
| 
						 | 
					9e78e6c3f8 | ||
| 
						 | 
					3caff6092a | ||
| 
						 | 
					0d96bf8950 | ||
| 
						 | 
					91dc71f98d | ||
| 
						 | 
					b7b6c047ca | ||
| 
						 | 
					0ea659475c | ||
| 
						 | 
					1e20bb0648 | ||
| 
						 | 
					c962479bdf | ||
| 
						 | 
					b31ccc362c | ||
| 
						 | 
					0cd5866726 | ||
| 
						 | 
					2a8a10eda6 | ||
| 
						 | 
					f11bc84080 | ||
| 
						 | 
					e2f3ae1252 | ||
| 
						 | 
					40fcda292f | ||
| 
						 | 
					59bc3126c5 | ||
| 
						 | 
					4d6115a5cc | ||
| 
						 | 
					3a25b96caf | ||
| 
						 | 
					6e6d04e29a | ||
| 
						 | 
					48ff225300 | ||
| 
						 | 
					a4a9d97a3e | ||
| 
						 | 
					404f952aa3 | ||
| 
						 | 
					dcd87618ab | ||
| 
						 | 
					d54bf14559 | ||
| 
						 | 
					ea3a429efe | ||
| 
						 | 
					e3f1223fe4 | ||
| 
						 | 
					7ef6e3fe2f | ||
| 
						 | 
					197322455d | ||
| 
						 | 
					4f19a0672b | ||
| 
						 | 
					854e076df8 | ||
| 
						 | 
					cb2a0e1319 | ||
| 
						 | 
					638b0d4277 | ||
| 
						 | 
					f2346808de | ||
| 
						 | 
					d7818facb9 | ||
| 
						 | 
					bcf95a2183 | ||
| 
						 | 
					f7181a9179 | ||
| 
						 | 
					9237ba8b66 | ||
| 
						 | 
					95874603b0 | ||
| 
						 | 
					ed2e24d564 | ||
| 
						 | 
					c9fd77e9dd | ||
| 
						 | 
					a9d2bc4902 | ||
| 
						 | 
					c3bdbcf639 | ||
| 
						 | 
					d9a770e6ea | ||
| 
						 | 
					35feed50f0 | ||
| 
						 | 
					a116afa42e | ||
| 
						 | 
					b4542fb307 | ||
| 
						 | 
					1f224bf029 | ||
| 
						 | 
					4d231b4359 | ||
| 
						 | 
					ac0f1d0b14 | ||
| 
						 | 
					124d8cf701 | ||
| 
						 | 
					7d0d0996aa | ||
| 
						 | 
					9cddbf14db | ||
| 
						 | 
					5f1fddbbe7 | ||
| 
						 | 
					027e257b1d | ||
| 
						 | 
					93f117003e | ||
| 
						 | 
					42748c084e | ||
| 
						 | 
					77dd9c1850 | ||
| 
						 | 
					83d968df60 | ||
| 
						 | 
					4ac881ede3 | ||
| 
						 | 
					ccd2cd3e64 | ||
| 
						 | 
					6186ef9338 | ||
| 
						 | 
					6bcac6e578 | ||
| 
						 | 
					967d95f096 | ||
| 
						 | 
					26c7750827 | ||
| 
						 | 
					5a16d270ab | ||
| 
						 | 
					3a465d5ec9 | ||
| 
						 | 
					413a4a0461 | ||
| 
						 | 
					a95d2c5133 | ||
| 
						 | 
					1876cc32ae | ||
| 
						 | 
					4e2a08ddd4 | ||
| 
						 | 
					61e2c34a10 | ||
| 
						 | 
					e56b54a376 | ||
| 
						 | 
					0da945bb20 | ||
| 
						 | 
					69443d0da0 | ||
| 
						 | 
					e4dc18d7e5 | ||
| 
						 | 
					3f86a2b147 | ||
| 
						 | 
					fd664b9fc6 | ||
| 
						 | 
					722ca2781c | ||
| 
						 | 
					1c72eebf89 | ||
| 
						 | 
					69ce8bb952 | ||
| 
						 | 
					50b8ba0201 | ||
| 
						 | 
					c9fd9152bd | ||
| 
						 | 
					f891abccf2 | ||
| 
						 | 
					e2effdbc6b | ||
| 
						 | 
					b10ae320f7 | ||
| 
						 | 
					5d3ab9b096 | ||
| 
						 | 
					4fea8145e2 | ||
| 
						 | 
					884e26080f | ||
| 
						 | 
					9946491fcc | ||
| 
						 | 
					ae6dfff5bf | ||
| 
						 | 
					307bf4dae2 | ||
| 
						 | 
					96d65fc022 | ||
| 
						 | 
					080b8cadfa | ||
| 
						 | 
					7cdd2aa128 | ||
| 
						 | 
					7d7672f119 | ||
| 
						 | 
					6a5b52efa0 | ||
| 
						 | 
					6d864b7030 | ||
| 
						 | 
					71a39dd4be | ||
| 
						 | 
					500230ee94 | ||
| 
						 | 
					347177e052 | ||
| 
						 | 
					b7883fbb6e | ||
| 
						 | 
					a77e023ab4 | ||
| 
						 | 
					812cb5638c | ||
| 
						 | 
					77a0f1d727 | ||
| 
						 | 
					b9a18f3b8d | ||
| 
						 | 
					73aeb61c3f | ||
| 
						 | 
					3041903844 | ||
| 
						 | 
					ad8ee98617 | ||
| 
						 | 
					bc29d0e5d4 | ||
| 
						 | 
					f89aebb1c4 | ||
| 
						 | 
					1d7fb4f0c5 | ||
| 
						 | 
					81a6c7817f | ||
| 
						 | 
					5238fccc15 | ||
| 
						 | 
					fba9046490 | ||
| 
						 | 
					8a2908a24a | ||
| 
						 | 
					e8b12f7a6f | ||
| 
						 | 
					271da5a2e0 | ||
| 
						 | 
					26fbabf3d1 | ||
| 
						 | 
					37cdcb4d8a | ||
| 
						 | 
					57b6534e53 | ||
| 
						 | 
					8bf49ea170 | ||
| 
						 | 
					02ee8626fb | ||
| 
						 | 
					6276e5b41b | ||
| 
						 | 
					51740b12ae | ||
| 
						 | 
					6e6783056e | ||
| 
						 | 
					791bd0cd2b | ||
| 
						 | 
					e890dcdb19 | ||
| 
						 | 
					5ddcb8664a | ||
| 
						 | 
					09c4b4e0b7 | ||
| 
						 | 
					368101778e | ||
| 
						 | 
					535d79da63 | ||
| 
						 | 
					4f69172d25 | ||
| 
						 | 
					eb272ac0b0 | ||
| 
						 | 
					63c43dcc59 | ||
| 
						 | 
					8562801137 | ||
| 
						 | 
					5d8094143e | ||
| 
						 | 
					bb6dcb54f9 | ||
| 
						 | 
					0a3ea5d34a | ||
| 
						 | 
					a5e4c0bb9e | ||
| 
						 | 
					cad4b840c8 | ||
| 
						 | 
					37a92e9ce4 | ||
| 
						 | 
					1896ce3558 | ||
| 
						 | 
					0357422d14 | ||
| 
						 | 
					d3ee37c5d9 | ||
| 
						 | 
					f51cf14b85 | ||
| 
						 | 
					194dd04699 | ||
| 
						 | 
					14f7ee4916 | ||
| 
						 | 
					a29d78e90b | ||
| 
						 | 
					5b054c6955 | ||
| 
						 | 
					10654d3a74 | ||
| 
						 | 
					6017e604f8 | ||
| 
						 | 
					3837491174 | ||
| 
						 | 
					86a921af06 | ||
| 
						 | 
					616df35633 | ||
| 
						 | 
					e44fcedadf | ||
| 
						 | 
					6f8f443170 | ||
| 
						 | 
					d18af3f37e | ||
| 
						 | 
					48fe4d6233 | ||
| 
						 | 
					7b8250053b | ||
| 
						 | 
					251cb4cfed | ||
| 
						 | 
					24a93e6cdd | ||
| 
						 | 
					40e15f9d78 | ||
| 
						 | 
					b4f682d32f | ||
| 
						 | 
					83d0e5e512 | ||
| 
						 | 
					4e20b1a656 | ||
| 
						 | 
					cc5ba6a7b6 | ||
| 
						 | 
					0396479dec | ||
| 
						 | 
					e34cfcf7e1 | ||
| 
						 | 
					1358835050 | ||
| 
						 | 
					754d494bef | ||
| 
						 | 
					42909e3968 | ||
| 
						 | 
					c108108028 | ||
| 
						 | 
					5451e0d924 | ||
| 
						 | 
					4ea3855514 | ||
| 
						 | 
					20a9b1a7cf | ||
| 
						 | 
					156e85578d | ||
| 
						 | 
					b28ec12420 | ||
| 
						 | 
					bb62a8b0c5 | ||
| 
						 | 
					a75d8bebd2 | ||
| 
						 | 
					b72ff47037 | ||
| 
						 | 
					a2b03690a8 | ||
| 
						 | 
					abb48d5a5f | ||
| 
						 | 
					0e99546424 | ||
| 
						 | 
					bd9e2e4c53 | ||
| 
						 | 
					ff612904d2 | ||
| 
						 | 
					429cf462d0 | ||
| 
						 | 
					c62b26fdc6 | ||
| 
						 | 
					e0a9ba9c3c | ||
| 
						 | 
					2dc769a1c1 | ||
| 
						 | 
					4f98cbabde | ||
| 
						 | 
					98499135d7 | ||
| 
						 | 
					3285076c8e | ||
| 
						 | 
					3b4cfea688 | ||
| 
						 | 
					de10f6900d | ||
| 
						 | 
					adfe54b7be | ||
| 
						 | 
					b576337e8b | ||
| 
						 | 
					4de633dd5f | ||
| 
						 | 
					91f29a38a0 | ||
| 
						 | 
					1d5bd6cf71 | ||
| 
						 | 
					226cc7ded4 | ||
| 
						 | 
					e869d4bd32 | ||
| 
						 | 
					60428dbf0a | ||
| 
						 | 
					70d70a3c81 | ||
| 
						 | 
					f1f25544e0 | ||
| 
						 | 
					2e0db07627 | ||
| 
						 | 
					58fc62296f | ||
| 
						 | 
					df9cc1535e | ||
| 
						 | 
					c4b36ff474 | ||
| 
						 | 
					f418f8c17c | ||
| 
						 | 
					5277d7cb7c | ||
| 
						 | 
					0657bf9c14 | ||
| 
						 | 
					5b438e9b0f | ||
| 
						 | 
					7b4c588f58 | ||
| 
						 | 
					1d00800e88 | ||
| 
						 | 
					774530f412 | ||
| 
						 | 
					fb171e534e | ||
| 
						 | 
					7d7db13e67 | ||
| 
						 | 
					45abac85a9 | ||
| 
						 | 
					24b8dc9a55 | ||
| 
						 | 
					d8c79c7f72 | ||
| 
						 | 
					3a12ce0137 | ||
| 
						 | 
					9bd35f6376 | ||
| 
						 | 
					62763f682b | ||
| 
						 | 
					38e3c5815c | ||
| 
						 | 
					f8fe20e0d9 | ||
| 
						 | 
					65e8167079 | ||
| 
						 | 
					757a8b4621 | ||
| 
						 | 
					5cac59b6c1 | ||
| 
						 | 
					bad4058574 | ||
| 
						 | 
					d8c2adae57 | ||
| 
						 | 
					786e0c2424 | ||
| 
						 | 
					794103d285 | ||
| 
						 | 
					c454dbcd32 | ||
| 
						 | 
					f3a3106807 | ||
| 
						 | 
					62dc5aad06 | ||
| 
						 | 
					45ecfb1973 | ||
| 
						 | 
					f23478c314 | ||
| 
						 | 
					3d2e469cfa | ||
| 
						 | 
					bf401a2aef | ||
| 
						 | 
					06a2b07bb0 | ||
| 
						 | 
					8700e7b3cf | ||
| 
						 | 
					7f19d42e9d | ||
| 
						 | 
					d7bbd31efe | ||
| 
						 | 
					fafc7f9875 | ||
| 
						 | 
					d88a26c489 | ||
| 
						 | 
					64b48877fa | ||
| 
						 | 
					b31cc2d9f7 | ||
| 
						 | 
					f196522159 | ||
| 
						 | 
					4ff18c8c3e | ||
| 
						 | 
					db4a465974 | ||
| 
						 | 
					3cdc8ad07a | ||
| 
						 | 
					2c1571b4ff | ||
| 
						 | 
					6767a53669 | ||
| 
						 | 
					ba93fd6a38 | ||
| 
						 | 
					d7c06e9ec7 | ||
| 
						 | 
					386828d029 | ||
| 
						 | 
					d339187b1a | ||
| 
						 | 
					61fca8b69b | ||
| 
						 | 
					bb5ea36b96 | ||
| 
						 | 
					e3a9164073 | ||
| 
						 | 
					f85c9904c6 | ||
| 
						 | 
					48bf4aae24 | ||
| 
						 | 
					6231576088 | ||
| 
						 | 
					4270144b39 | ||
| 
						 | 
					5031a89dc3 | ||
| 
						 | 
					bbd1c84e6e | ||
| 
						 | 
					a2cf08cc23 | ||
| 
						 | 
					d3a73875e2 | ||
| 
						 | 
					41d2a336ee | ||
| 
						 | 
					627774fd87 | ||
| 
						 | 
					a5bc1e8568 | ||
| 
						 | 
					c38171ba1f | ||
| 
						 | 
					bb3ee8e75d | ||
| 
						 | 
					32654e792b | ||
| 
						 | 
					19f2192136 | ||
| 
						 | 
					1961b327eb | ||
| 
						 | 
					2ae87d465e | ||
| 
						 | 
					e3ef8d2e6b | ||
| 
						 | 
					65a87c7d01 | ||
| 
						 | 
					72e3c20c14 | ||
| 
						 | 
					ec0f19597e | ||
| 
						 | 
					fa2b8db499 | ||
| 
						 | 
					1aa0d94781 | ||
| 
						 | 
					dc644fe229 | ||
| 
						 | 
					47ddf355b4 | ||
| 
						 | 
					941181ec0f | ||
| 
						 | 
					d399fdf877 | ||
| 
						 | 
					487550b61d | ||
| 
						 | 
					35618bf6ad | ||
| 
						 | 
					460fe31f0c | ||
| 
						 | 
					14565bedaf | ||
| 
						 | 
					02cc82ff8a | ||
| 
						 | 
					38f3b3e29c | ||
| 
						 | 
					4dc719fc37 | ||
| 
						 | 
					48f2ef8d00 | ||
| 
						 | 
					be1bd9239f | ||
| 
						 | 
					b8feddae71 | ||
| 
						 | 
					a9daa46758 | ||
| 
						 | 
					569afce4b0 | ||
| 
						 | 
					a9aa3d580c | ||
| 
						 | 
					56a6ccc84f | ||
| 
						 | 
					03c4d82fa1 | ||
| 
						 | 
					7ab1a39181 | ||
| 
						 | 
					56dde3ebe6 | ||
| 
						 | 
					6525ced540 | ||
| 
						 | 
					32d0ad41a4 | ||
| 
						 | 
					e28e42a549 | ||
| 
						 | 
					ff055b5c89 | ||
| 
						 | 
					d8770f3ece | ||
| 
						 | 
					4981372d03 | ||
| 
						 | 
					3ebac273f5 | ||
| 
						 | 
					5af18f65f4 | ||
| 
						 | 
					a9b34991d9 | ||
| 
						 | 
					bc36ee6227 | ||
| 
						 | 
					f2bc668429 | ||
| 
						 | 
					8120813066 | ||
| 
						 | 
					7242cd8f8f | ||
| 
						 | 
					12c2fe8d53 | ||
| 
						 | 
					28143c66e1 | ||
| 
						 | 
					335c4f0966 | ||
| 
						 | 
					5003a61b9f | ||
| 
						 | 
					7bd51947e5 | ||
| 
						 | 
					4901b41653 | ||
| 
						 | 
					74cd365b03 | ||
| 
						 | 
					2affbab9fc | ||
| 
						 | 
					cf1b7d9664 | ||
| 
						 | 
					649c5a2b09 | ||
| 
						 | 
					07247321c6 | ||
| 
						 | 
					0c43540433 | ||
| 
						 | 
					acba75c59d | ||
| 
						 | 
					267a1927eb | ||
| 
						 | 
					b0c8638650 | ||
| 
						 | 
					b36c170d1b | ||
| 
						 | 
					934397ec66 | ||
| 
						 | 
					0f8631495d | ||
| 
						 | 
					95ffe86dbc | ||
| 
						 | 
					87b79c3ef3 | ||
| 
						 | 
					52d160d85d | ||
| 
						 | 
					54ff1e6ae5 | ||
| 
						 | 
					a6b7ffddac | ||
| 
						 | 
					f30d34f3a8 | ||
| 
						 | 
					84a2173797 | ||
| 
						 | 
					52b621db88 | ||
| 
						 | 
					a6ed5dd674 | ||
| 
						 | 
					1417f2dccb | ||
| 
						 | 
					f2e5ca84d4 | ||
| 
						 | 
					36fafffae2 | ||
| 
						 | 
					cdc7b8cc60 | ||
| 
						 | 
					720235eeec | ||
| 
						 | 
					8e495e4ac7 | ||
| 
						 | 
					2afbd6fa08 | ||
| 
						 | 
					f282ca7413 | ||
| 
						 | 
					67c1801924 | ||
| 
						 | 
					46a58ab946 | ||
| 
						 | 
					94fcd01349 | ||
| 
						 | 
					9a04387362 | ||
| 
						 | 
					282d8b1c38 | ||
| 
						 | 
					41ecaba97e | ||
| 
						 | 
					96dfab9e0e | ||
| 
						 | 
					1b65ce7db3 | ||
| 
						 | 
					7b9cb4a224 | ||
| 
						 | 
					bc2dfde4b3 | ||
| 
						 | 
					ec9dc137e7 | ||
| 
						 | 
					620cea37e0 | ||
| 
						 | 
					c15e036398 | ||
| 
						 | 
					ccb08f98ae | ||
| 
						 | 
					e306892994 | ||
| 
						 | 
					836f996010 | ||
| 
						 | 
					1613c4d3bf | ||
| 
						 | 
					b5f6d9dc6e | ||
| 
						 | 
					c063f2c5ec | ||
| 
						 | 
					c47c619680 | ||
| 
						 | 
					93cd57a578 | ||
| 
						 | 
					49ce63cd7c | ||
| 
						 | 
					b3f2e399d2 | ||
| 
						 | 
					8c950429a9 | ||
| 
						 | 
					c2bf70a27c | ||
| 
						 | 
					9235adbf47 | ||
| 
						 | 
					a71b5abfa4 | ||
| 
						 | 
					928cc3a6de | ||
| 
						 | 
					466e4249ab | ||
| 
						 | 
					9fbc45b159 | ||
| 
						 | 
					792e2ce7f4 | ||
| 
						 | 
					3952584571 | ||
| 
						 | 
					a5d2acfc79 | ||
| 
						 | 
					35ed8cb8b6 | ||
| 
						 | 
					7edc5ed90a | ||
| 
						 | 
					420125f996 | ||
| 
						 | 
					57e7d3ce15 | ||
| 
						 | 
					a8ebe4697e | ||
| 
						 | 
					deb2c1a1c5 | ||
| 
						 | 
					d4219c485b | ||
| 
						 | 
					73fc98a7bf | ||
| 
						 | 
					259810e05b | ||
| 
						 | 
					171cc53a96 | ||
| 
						 | 
					9eea2be6f1 | ||
| 
						 | 
					69a03c1799 | ||
| 
						 | 
					4327aae816 | ||
| 
						 | 
					741a9690df | ||
| 
						 | 
					e24e40657f | ||
| 
						 | 
					448361a86c | ||
| 
						 | 
					26e083ccb7 | ||
| 
						 | 
					4978361212 | ||
| 
						 | 
					247c1361f3 | ||
| 
						 | 
					1618bc7921 | ||
| 
						 | 
					1b843d3c69 | ||
| 
						 | 
					0bc6597d4d | ||
| 
						 | 
					2b916952a8 | ||
| 
						 | 
					02e4fbed3d | ||
| 
						 | 
					7403c34b0b | ||
| 
						 | 
					9022f2403b | ||
| 
						 | 
					08f3f07212 | ||
| 
						 | 
					8cbceba610 | ||
| 
						 | 
					88ce56f8c1 | ||
| 
						 | 
					664d83bb23 | ||
| 
						 | 
					8cff6331c9 | ||
| 
						 | 
					cd6aa710b5 | ||
| 
						 | 
					903872d65e | ||
| 
						 | 
					16a44ae7e9 | ||
| 
						 | 
					739423fceb | ||
| 
						 | 
					78f3a2aad7 | ||
| 
						 | 
					b847024026 | ||
| 
						 | 
					50d5199120 | ||
| 
						 | 
					9020b86250 | ||
| 
						 | 
					a342cc5a70 | ||
| 
						 | 
					67c3cf0675 | ||
| 
						 | 
					9a875a3574 | ||
| 
						 | 
					a43cf9fae9 | ||
| 
						 | 
					9ae9c221de | ||
| 
						 | 
					4256650d68 | ||
| 
						 | 
					ae0665b8f1 | ||
| 
						 | 
					75802000c8 | ||
| 
						 | 
					325ae88efb | ||
| 
						 | 
					a25b265d27 | ||
| 
						 | 
					d0a8af61b1 | ||
| 
						 | 
					e58d808a4c | ||
| 
						 | 
					751b5e8ff2 | ||
| 
						 | 
					36f74d60b3 | ||
| 
						 | 
					9756da13dd | ||
| 
						 | 
					893b76c544 | ||
| 
						 | 
					b5a6f0a92d | ||
| 
						 | 
					ba8e28248f | ||
| 
						 | 
					bfcec27d61 | ||
| 
						 | 
					8e8972bb68 | ||
| 
						 | 
					57108f0ad5 | ||
| 
						 | 
					73758d435b | ||
| 
						 | 
					90f63e8f83 | ||
| 
						 | 
					e8af92fcb1 | ||
| 
						 | 
					361ef5f4dc | ||
| 
						 | 
					b3466895e6 | ||
| 
						 | 
					81f169e95c | ||
| 
						 | 
					a068630a20 | ||
| 
						 | 
					dfebac32c0 | ||
| 
						 | 
					ab5db00717 | ||
| 
						 | 
					6308af199d | ||
| 
						 | 
					8e5b6314ef | ||
| 
						 | 
					b4b1bdd5d3 | ||
| 
						 | 
					5782ceb298 | ||
| 
						 | 
					cc85ec447b | ||
| 
						 | 
					c67cdb50d2 | ||
| 
						 | 
					af5473c45a | ||
| 
						 | 
					f2c46006e7 | ||
| 
						 | 
					69e42952e1 | ||
| 
						 | 
					adf87b2df5 | ||
| 
						 | 
					40753f760d | ||
| 
						 | 
					d199858e89 | ||
| 
						 | 
					10a2975a27 | ||
| 
						 | 
					9b4dc8308f | ||
| 
						 | 
					b93642c5cc | ||
| 
						 | 
					a5435e8b29 | ||
| 
						 | 
					72e2d9138c | ||
| 
						 | 
					1dd080bca4 | ||
| 
						 | 
					f648590991 | ||
| 
						 | 
					a14280d41e | ||
| 
						 | 
					91b842c972 | ||
| 
						 | 
					eddf82a36a | ||
| 
						 | 
					673b3fde82 | ||
| 
						 | 
					a87e50a945 | ||
| 
						 | 
					b62a0c4cab | ||
| 
						 | 
					c06648f7f0 | ||
| 
						 | 
					cd56182b41 | ||
| 
						 | 
					65a22e8e4d | ||
| 
						 | 
					cbf0f45f90 | ||
| 
						 | 
					b2293b1e9b | ||
| 
						 | 
					04e53c273f | ||
| 
						 | 
					599c03530a | ||
| 
						 | 
					56a67adb64 | ||
| 
						 | 
					28e5428d5d | ||
| 
						 | 
					3c91484052 | ||
| 
						 | 
					98d517c5da | ||
| 
						 | 
					18602745de | ||
| 
						 | 
					ad2e032049 | ||
| 
						 | 
					601140b363 | ||
| 
						 | 
					e02cc10ea4 | ||
| 
						 | 
					b5524a3ac3 | ||
| 
						 | 
					0c61e299b3 | ||
| 
						 | 
					0b33bc65cd | ||
| 
						 | 
					0f5fa24a7c | ||
| 
						 | 
					8e96183506 | ||
| 
						 | 
					a8312c0e24 | ||
| 
						 | 
					bf0d176e48 | ||
| 
						 | 
					ec5add8784 | ||
| 
						 | 
					856d456a71 | ||
| 
						 | 
					7f2113a2d5 | ||
| 
						 | 
					97f56446a3 | ||
| 
						 | 
					5d92be8cc6 | ||
| 
						 | 
					e102a3dcfd | ||
| 
						 | 
					ecbe07817a | ||
| 
						 | 
					71db02813c | ||
| 
						 | 
					a6574c21eb | ||
| 
						 | 
					26da3e65ac | ||
| 
						 | 
					21cd437886 | ||
| 
						 | 
					f09628e42f | ||
| 
						 | 
					6f346c7115 | ||
| 
						 | 
					d8ecc56c9d | ||
| 
						 | 
					4e1209ebf8 | ||
| 
						 | 
					78d3b819f0 | ||
| 
						 | 
					200b24e391 | ||
| 
						 | 
					1690c2b26e | ||
| 
						 | 
					701adceb12 | ||
| 
						 | 
					3f07fe09b5 | ||
| 
						 | 
					f86c5c9ac7 | ||
| 
						 | 
					66a0def81b | ||
| 
						 | 
					73e92de577 | ||
| 
						 | 
					09ab755c55 | ||
| 
						 | 
					ec558b6548 | ||
| 
						 | 
					037a9f9c1a | ||
| 
						 | 
					29e1fdf3f2 | ||
| 
						 | 
					28ddfc61dc | ||
| 
						 | 
					725c88879c | ||
| 
						 | 
					a0aae68cf6 | ||
| 
						 | 
					57d2f21782 | ||
| 
						 | 
					895959b736 | ||
| 
						 | 
					3c07b4c2ee | ||
| 
						 | 
					1cc0b0a66a | ||
| 
						 | 
					beb23252a6 | ||
| 
						 | 
					3ba25ee86a | ||
| 
						 | 
					0be35f5c51 | ||
| 
						 | 
					60f7492646 | ||
| 
						 | 
					1456d1860e | ||
| 
						 | 
					5755cab49d | ||
| 
						 | 
					975842f9fb | ||
| 
						 | 
					126fe085db | ||
| 
						 | 
					123d24d600 | ||
| 
						 | 
					3880cd35ad | ||
| 
						 | 
					cb38052b3a | ||
| 
						 | 
					f640ee90c3 | ||
| 
						 | 
					09f4278d25 | ||
| 
						 | 
					1f47ec53a2 | ||
| 
						 | 
					959f67d6a4 | ||
| 
						 | 
					b2e7419a1d | ||
| 
						 | 
					6546fdfaf8 | ||
| 
						 | 
					3a3ca1d474 | ||
| 
						 | 
					7522254b48 | ||
| 
						 | 
					f1a6a0d4dd | ||
| 
						 | 
					9c67ab2f26 | ||
| 
						 | 
					1a7b2d33f4 | ||
| 
						 | 
					6e2dad1cc7 | ||
| 
						 | 
					2c0d10123e | ||
| 
						 | 
					3ac82faae5 | ||
| 
						 | 
					c08523d862 | ||
| 
						 | 
					137e601277 | ||
| 
						 | 
					09f4bd2a39 | ||
| 
						 | 
					2fc0d1f15e | ||
| 
						 | 
					2a86064f95 | ||
| 
						 | 
					016d7d250a | ||
| 
						 | 
					2c15d426b9 | ||
| 
						 | 
					bdcfe1d165 | ||
| 
						 | 
					3b28dbce7e | ||
| 
						 | 
					5a4fbc69c3 | ||
| 
						 | 
					7e7c8952b5 | ||
| 
						 | 
					de487514ae | ||
| 
						 | 
					06db4253e2 | ||
| 
						 | 
					4ce7894c4a | ||
| 
						 | 
					36f554d43c | ||
| 
						 | 
					8d28d5f81b | ||
| 
						 | 
					53b407da84 | ||
| 
						 | 
					765e531159 | ||
| 
						 | 
					de282fe3ba | ||
| 
						 | 
					36ac656a1b | ||
| 
						 | 
					2aff7727f7 | ||
| 
						 | 
					cc93ae3ef4 | ||
| 
						 | 
					34d69d3b23 | ||
| 
						 | 
					daea0ff8a9 | ||
| 
						 | 
					448701473a | ||
| 
						 | 
					572f0017d5 | ||
| 
						 | 
					df2c442a6d | ||
| 
						 | 
					23e2947cc8 | ||
| 
						 | 
					44b51ca36c | ||
| 
						 | 
					bbf848ce8d | ||
| 
						 | 
					d0fa136ce2 | ||
| 
						 | 
					15156cce0e | ||
| 
						 | 
					9d6b1ce644 | ||
| 
						 | 
					66ebbb6a56 | ||
| 
						 | 
					c5e48d8b01 | ||
| 
						 | 
					8dea52fa42 | ||
| 
						 | 
					f7356b677b | ||
| 
						 | 
					80d89e6a6a | ||
| 
						 | 
					bc5f2740d2 | ||
| 
						 | 
					aa66eba7c8 | ||
| 
						 | 
					f27b45d237 | ||
| 
						 | 
					3bb4736289 | ||
| 
						 | 
					bac685417a | ||
| 
						 | 
					1a4d6400ae | ||
| 
						 | 
					322006dcb1 | ||
| 
						 | 
					db01d55671 | ||
| 
						 | 
					0a52d38b31 | ||
| 
						 | 
					902d1051b1 | ||
| 
						 | 
					f67868ff4c | ||
| 
						 | 
					a6576c56dd | ||
| 
						 | 
					240f516939 | ||
| 
						 | 
					ef8f14a882 | ||
| 
						 | 
					aecb0b018f | ||
| 
						 | 
					e4d56bab5b | ||
| 
						 | 
					1435ccfba1 | ||
| 
						 | 
					d766a23deb | ||
| 
						 | 
					b1e21f8fac | ||
| 
						 | 
					9347ba487c | ||
| 
						 | 
					c28500900e | ||
| 
						 | 
					e4c5391ddb | ||
| 
						 | 
					0c34556cbd | ||
| 
						 | 
					b50118ca3e | ||
| 
						 | 
					a57ecb95f6 | ||
| 
						 | 
					428a55a0fe | ||
| 
						 | 
					cc74659fcc | ||
| 
						 | 
					90e7ce363a | ||
| 
						 | 
					a47b505e37 | ||
| 
						 | 
					9f49524331 | ||
| 
						 | 
					6a2347ee45 | ||
| 
						 | 
					e5164b7041 | ||
| 
						 | 
					ebff44b83a | ||
| 
						 | 
					c0e7c3aab9 | ||
| 
						 | 
					733777275b | ||
| 
						 | 
					f1919c3df9 | ||
| 
						 | 
					97b1719583 | ||
| 
						 | 
					b0dc680f71 | ||
| 
						 | 
					addb309ad6 | ||
| 
						 | 
					152a689cf9 | ||
| 
						 | 
					35a99b6380 | ||
| 
						 | 
					dfa46e502d | ||
| 
						 | 
					c21c35e6a4 | ||
| 
						 | 
					b26f84cbbd | ||
| 
						 | 
					0dba0613ea | ||
| 
						 | 
					e0c875081e | ||
| 
						 | 
					ea1b7fe6d4 | ||
| 
						 | 
					db88223baa | ||
| 
						 | 
					d29b63bc9b | ||
| 
						 | 
					1946cd8bc2 | ||
| 
						 | 
					111482cf2e | ||
| 
						 | 
					52a1bab2d9 | ||
| 
						 | 
					0826c85f4c | ||
| 
						 | 
					385d81380c | ||
| 
						 | 
					862e973b50 | ||
| 
						 | 
					2efff10cfa | ||
| 
						 | 
					33479d275a | ||
| 
						 | 
					3e7a6396ed | ||
| 
						 | 
					5a12df5c40 | ||
| 
						 | 
					b5a25a430a | ||
| 
						 | 
					592c784ffe | ||
| 
						 | 
					17e757478a | ||
| 
						 | 
					a023052580 | ||
| 
						 | 
					4b757c830d | ||
| 
						 | 
					9b7a552f4b | ||
| 
						 | 
					8df788c97f | ||
| 
						 | 
					12cfcc128c | ||
| 
						 | 
					f9b3bff6f7 | ||
| 
						 | 
					fc2e05c2d5 | ||
| 
						 | 
					b2993bdea1 | ||
| 
						 | 
					470fa98f8a | ||
| 
						 | 
					de6e207db6 | ||
| 
						 | 
					1363155145 | ||
| 
						 | 
					db5bda670f | ||
| 
						 | 
					0ae485dc07 | ||
| 
						 | 
					19cda70045 | ||
| 
						 | 
					4751717cd8 | ||
| 
						 | 
					bd68b6b1f6 | ||
| 
						 | 
					cd9b7d7c35 | ||
| 
						 | 
					058123afb6 | ||
| 
						 | 
					a4614bf06d | ||
| 
						 | 
					23f80f46a4 | ||
| 
						 | 
					c4438dc0e5 | ||
| 
						 | 
					04ca16890b | ||
| 
						 | 
					20f88b9bd4 | ||
| 
						 | 
					25439b76ad | ||
| 
						 | 
					3465dd3853 | ||
| 
						 | 
					ac445acf69 | ||
| 
						 | 
					77ac92d00a | ||
| 
						 | 
					73c2522c7c | ||
| 
						 | 
					6b5d39e82d | ||
| 
						 | 
					cd2eebfd64 | ||
| 
						 | 
					06676624fc | ||
| 
						 | 
					ef8b601789 | ||
| 
						 | 
					01e62900c7 | ||
| 
						 | 
					d50f1bdfac | ||
| 
						 | 
					38b40c624c | ||
| 
						 | 
					eb1f1b0a34 | ||
| 
						 | 
					a9376dbff9 | ||
| 
						 | 
					14697d9d6d | ||
| 
						 | 
					c6a926d9e2 | ||
| 
						 | 
					c1db5bfc08 | ||
| 
						 | 
					429b8162c6 | ||
| 
						 | 
					0dd2254d76 | ||
| 
						 | 
					03a0848922 | ||
| 
						 | 
					9161672950 | ||
| 
						 | 
					a08bcccc67 | ||
| 
						 | 
					bdec3c5323 | ||
| 
						 | 
					53d286797c | ||
| 
						 | 
					b6cafbd7d8 | ||
| 
						 | 
					499e167fda | ||
| 
						 | 
					0135e33511 | ||
| 
						 | 
					f2cc7559dd | ||
| 
						 | 
					fe8686ba4b | ||
| 
						 | 
					4aa69fe0b6 | ||
| 
						 | 
					b984cd2b01 | ||
| 
						 | 
					adcc64cd9e | ||
| 
						 | 
					c94b6de017 | ||
| 
						 | 
					000e21779c | ||
| 
						 | 
					f1d6f64c8e | ||
| 
						 | 
					d79cab27a5 | ||
| 
						 | 
					24b44446e2 | ||
| 
						 | 
					87739b2c53 | ||
| 
						 | 
					c782089611 | ||
| 
						 | 
					265592b99a | ||
| 
						 | 
					077ff61eef | ||
| 
						 | 
					dcbd0d74d5 | ||
| 
						 | 
					1ec0a3862e | ||
| 
						 | 
					946cd9a540 | ||
| 
						 | 
					0ac87024e3 | ||
| 
						 | 
					7abe830501 | ||
| 
						 | 
					5acaa49504 | ||
| 
						 | 
					535b9b5724 | ||
| 
						 | 
					78a0c1f18d | ||
| 
						 | 
					6cc5e19d47 | ||
| 
						 | 
					7e0c5264e7 | ||
| 
						 | 
					73343ac38a | ||
| 
						 | 
					d53d271728 | ||
| 
						 | 
					37fc8c3747 | ||
| 
						 | 
					01412ec600 | ||
| 
						 | 
					c4f3542abf | ||
| 
						 | 
					c799770060 | ||
| 
						 | 
					cd26e6c79d | ||
| 
						 | 
					4e773226f5 | ||
| 
						 | 
					646d56956b | ||
| 
						 | 
					0cc1115643 | ||
| 
						 | 
					257341b5b4 | ||
| 
						 | 
					83f2571782 | ||
| 
						 | 
					baa257f1ed | ||
| 
						 | 
					e06cc57118 | ||
| 
						 | 
					0450d28759 | ||
| 
						 | 
					7f56097c65 | ||
| 
						 | 
					7396958515 | ||
| 
						 | 
					3c758be86e | ||
| 
						 | 
					227385b719 | ||
| 
						 | 
					f7a059316f | ||
| 
						 | 
					b1d6e3f551 | ||
| 
						 | 
					db70a3fd6e | ||
| 
						 | 
					28fd5c60de | ||
| 
						 | 
					cbd48ba626 | ||
| 
						 | 
					67d93e6f49 | ||
| 
						 | 
					afb83c45e6 | ||
| 
						 | 
					43fcc1b096 | ||
| 
						 | 
					d5695a26a6 | ||
| 
						 | 
					8bfc8f934f | ||
| 
						 | 
					ef02b10a16 | ||
| 
						 | 
					803e4e93d4 | ||
| 
						 | 
					60b8607727 | ||
| 
						 | 
					159564ae9f | ||
| 
						 | 
					cd1bf28e2c | ||
| 
						 | 
					74e10aa58b | ||
| 
						 | 
					5f524accc1 | ||
| 
						 | 
					451e60e99f | ||
| 
						 | 
					89c16ab53e | ||
| 
						 | 
					820aaa5fc5 | ||
| 
						 | 
					993ea851f5 | ||
| 
						 | 
					305db17b5f | ||
| 
						 | 
					6a8ba34f9d | ||
| 
						 | 
					f777408fc5 | ||
| 
						 | 
					2984b0ae24 | ||
| 
						 | 
					3d6001f7b9 | ||
| 
						 | 
					f6a8898fc3 | ||
| 
						 | 
					757e392d4e | ||
| 
						 | 
					2f9f0c72de | ||
| 
						 | 
					cb4ae6c0d3 | ||
| 
						 | 
					359fd02fec | ||
| 
						 | 
					e1a8ac495b | ||
| 
						 | 
					0b5806b5f5 | ||
| 
						 | 
					ccb9643f02 | ||
| 
						 | 
					7f7b8d6871 | ||
| 
						 | 
					bb7e632aef | ||
| 
						 | 
					55d892e373 | ||
| 
						 | 
					f971ccb264 | ||
| 
						 | 
					a4aba800d9 | ||
| 
						 | 
					669cefdd35 | ||
| 
						 | 
					7be7c2eda5 | ||
| 
						 | 
					8de2910b5c | ||
| 
						 | 
					74489a3668 | ||
| 
						 | 
					e06433d9ba | ||
| 
						 | 
					e0bf5c11ea | ||
| 
						 | 
					58f0f52e67 | ||
| 
						 | 
					55b3c877c7 | ||
| 
						 | 
					bbbc96a87e | ||
| 
						 | 
					5e4ca4220e | ||
| 
						 | 
					e5828cd46f | ||
| 
						 | 
					7081f3bd89 | ||
| 
						 | 
					0413ba429c | ||
| 
						 | 
					29c1f0615b | ||
| 
						 | 
					10e473e930 | ||
| 
						 | 
					e7ef1a561a | ||
| 
						 | 
					458d356db9 | ||
| 
						 | 
					020fc820dc | ||
| 
						 | 
					bc8a9f1f0f | ||
| 
						 | 
					6b77e6d7f3 | ||
| 
						 | 
					361c7f2b52 | ||
| 
						 | 
					9f6fe8dbe7 | ||
| 
						 | 
					ee78e1fc8b | ||
| 
						 | 
					864170286a | ||
| 
						 | 
					02af65b347 | ||
| 
						 | 
					2f13ee21ea | ||
| 
						 | 
					1d833a9910 | ||
| 
						 | 
					11c0f1201c | ||
| 
						 | 
					69e7805f54 | ||
| 
						 | 
					e264cfe17a | ||
| 
						 | 
					8224b0cbe5 | ||
| 
						 | 
					15d52ddb55 | ||
| 
						 | 
					d48f487e2c | ||
| 
						 | 
					ce23b0f73e | ||
| 
						 | 
					d313047f63 | ||
| 
						 | 
					d1855cc7af | ||
| 
						 | 
					14c6d27d63 | ||
| 
						 | 
					dcea8e12e2 | ||
| 
						 | 
					26b264795d | ||
| 
						 | 
					501ebf16b6 | ||
| 
						 | 
					815c83f70a | ||
| 
						 | 
					92125ffaec | ||
| 
						 | 
					7db2fcaa81 | ||
| 
						 | 
					7d09713d09 | ||
| 
						 | 
					3aba98e787 | ||
| 
						 | 
					32d862ede4 | ||
| 
						 | 
					a44f26d5c9 | ||
| 
						 | 
					3e126d3610 | ||
| 
						 | 
					5660eb489e | ||
| 
						 | 
					7c155330de | ||
| 
						 | 
					8bb4ad88d8 | ||
| 
						 | 
					eb64730b9c | ||
| 
						 | 
					34a1488220 | ||
| 
						 | 
					5270e7025e | ||
| 
						 | 
					1df586bec2 | ||
| 
						 | 
					551e5990d2 | ||
| 
						 | 
					d9efa3616a | ||
| 
						 | 
					51c8dc37dd | ||
| 
						 | 
					28967cf079 | ||
| 
						 | 
					a2bbe59401 | ||
| 
						 | 
					421cb50b2d | ||
| 
						 | 
					0fa504b68d | ||
| 
						 | 
					705bfcf8e7 | ||
| 
						 | 
					4fb40db932 | ||
| 
						 | 
					9dd0463852 | ||
| 
						 | 
					5cb5715f97 | ||
| 
						 | 
					e9a583aa26 | ||
| 
						 | 
					f3f316f13f | ||
| 
						 | 
					99b1aaf2ec | ||
| 
						 | 
					53400da75c | ||
| 
						 | 
					2b59a6ac14 | ||
| 
						 | 
					48d89b560c | ||
| 
						 | 
					b5a43800ef | ||
| 
						 | 
					0fd44e2ddb | ||
| 
						 | 
					0a2221f9ad | ||
| 
						 | 
					567f17cfe0 | ||
| 
						 | 
					627ec355d8 | ||
| 
						 | 
					4184a78761 | ||
| 
						 | 
					bbdc9c98a8 | ||
| 
						 | 
					11b62699a1 | ||
| 
						 | 
					14a74a21f0 | ||
| 
						 | 
					c8cda405e7 | ||
| 
						 | 
					befb3e7a4d | ||
| 
						 | 
					c6f1787bbd | ||
| 
						 | 
					9bd3bd227f | ||
| 
						 | 
					d0ef53bd2d | ||
| 
						 | 
					8d3f155a66 | ||
| 
						 | 
					ef0ab7f94f | ||
| 
						 | 
					bf55ece1c1 | ||
| 
						 | 
					51754ec835 | ||
| 
						 | 
					1bc5dd3efc | ||
| 
						 | 
					0ded1638ba | ||
| 
						 | 
					71d525c9f6 | ||
| 
						 | 
					3ab5651112 | ||
| 
						 | 
					82ce0b2308 | ||
| 
						 | 
					a22fb399cb | ||
| 
						 | 
					8df8f27513 | ||
| 
						 | 
					cde70093ac | ||
| 
						 | 
					5f97f508e4 | ||
| 
						 | 
					553615f500 | ||
| 
						 | 
					924046ce75 | ||
| 
						 | 
					9e2c0f41d7 | ||
| 
						 | 
					5ef67042f9 | ||
| 
						 | 
					53fe8d5be5 | ||
| 
						 | 
					8c23788dd1 | ||
| 
						 | 
					ef76e3dbda | ||
| 
						 | 
					7ba839bfe2 | ||
| 
						 | 
					d2dcf4f40d | ||
| 
						 | 
					75a382bd90 | ||
| 
						 | 
					5b0a0544f2 | ||
| 
						 | 
					a0ec9cf6d5 | ||
| 
						 | 
					e9ebf346c4 | ||
| 
						 | 
					8ca533e378 | ||
| 
						 | 
					d0c9858914 | ||
| 
						 | 
					356c06c776 | ||
| 
						 | 
					ef71cb6daf | ||
| 
						 | 
					2e7e3d6ce9 | ||
| 
						 | 
					a269d312da | ||
| 
						 | 
					a87aa87bcc | ||
| 
						 | 
					6df3553255 | ||
| 
						 | 
					2eaad87f36 | ||
| 
						 | 
					b7af080fb1 | ||
| 
						 | 
					3a0afe1eed | ||
| 
						 | 
					086a32d754 | ||
| 
						 | 
					544ebbceb4 | ||
| 
						 | 
					6d0dcbedb1 | ||
| 
						 | 
					88aeb646bd | ||
| 
						 | 
					46b1b91309 | ||
| 
						 | 
					be054868a1 | ||
| 
						 | 
					0acc90e5f7 | ||
| 
						 | 
					4e20a4e688 | ||
| 
						 | 
					9ef9e78520 | ||
| 
						 | 
					393e826ec3 | ||
| 
						 | 
					c5e8580e7b | ||
| 
						 | 
					16221173c8 | ||
| 
						 | 
					0e8f2fdfdd | ||
| 
						 | 
					fec8c79a7e | ||
| 
						 | 
					56245be46d | ||
| 
						 | 
					eb206eb8be | ||
| 
						 | 
					fda05b2155 | ||
| 
						 | 
					8c4ab6d5ae | ||
| 
						 | 
					8fdec3e558 | ||
| 
						 | 
					69431c2998 | ||
| 
						 | 
					90d7fc1de4 | ||
| 
						 | 
					bb28bcdf98 | ||
| 
						 | 
					d49da3aa5b | ||
| 
						 | 
					fc55bf3b20 | ||
| 
						 | 
					03dbae0d20 | ||
| 
						 | 
					5a5accdd64 | ||
| 
						 | 
					f1192b7f2e | ||
| 
						 | 
					dbba890cf1 | ||
| 
						 | 
					3f8b90c345 | ||
| 
						 | 
					28a63d3e6f | ||
| 
						 | 
					318e09356b | ||
| 
						 | 
					6b3a4ffe36 | ||
| 
						 | 
					7f6e0a4c09 | ||
| 
						 | 
					6cffb201f3 | ||
| 
						 | 
					4b0f00b7ce | ||
| 
						 | 
					4aa4f333ed | ||
| 
						 | 
					a04cfb72d5 | ||
| 
						 | 
					1cbb729fdc | ||
| 
						 | 
					d176986488 | ||
| 
						 | 
					c759ddd676 | ||
| 
						 | 
					9cfab47b18 | ||
| 
						 | 
					6e3dfc1f3b | ||
| 
						 | 
					ef63568e94 | ||
| 
						 | 
					d40898dfab | ||
| 
						 | 
					422e5a4807 | ||
| 
						 | 
					6397710486 | ||
| 
						 | 
					10bb0dbfec | ||
| 
						 | 
					c19b6c922a | ||
| 
						 | 
					c5f8bbbc0b | ||
| 
						 | 
					4759abc5f2 | ||
| 
						 | 
					e31e385ce3 | ||
| 
						 | 
					b22bda21a1 | ||
| 
						 | 
					b38d84d867 | ||
| 
						 | 
					50b14a38f5 | ||
| 
						 | 
					edb0d64367 | ||
| 
						 | 
					33b1a4c218 | ||
| 
						 | 
					645749ef98 | ||
| 
						 | 
					9a0c0d3f74 | ||
| 
						 | 
					7cae5f9fc8 | ||
| 
						 | 
					18edda0f92 | ||
| 
						 | 
					89681b183d | ||
| 
						 | 
					c8973693ab | ||
| 
						 | 
					4e87e05b25 | ||
| 
						 | 
					fe03519704 | ||
| 
						 | 
					b004872c59 | ||
| 
						 | 
					933f32cc4d | ||
| 
						 | 
					c6def253b4 | ||
| 
						 | 
					dd3430a6e9 | ||
| 
						 | 
					cb1fbf8e6a | ||
| 
						 | 
					51012a0969 | ||
| 
						 | 
					a45bd29535 | ||
| 
						 | 
					688fbf5475 | ||
| 
						 | 
					f4364e0730 | ||
| 
						 | 
					fae8762630 | ||
| 
						 | 
					28178bcf24 | ||
| 
						 | 
					cec7fe4da6 | ||
| 
						 | 
					c15602f48e | ||
| 
						 | 
					3b2cbbcb9a | ||
| 
						 | 
					c69c47b9fe | ||
| 
						 | 
					5d1a5ddb65 | ||
| 
						 | 
					f97cc10372 | ||
| 
						 | 
					a3829b8650 | ||
| 
						 | 
					615513ba52 | ||
| 
						 | 
					2bd8aaefa4 | ||
| 
						 | 
					252d333fc1 | ||
| 
						 | 
					2aa4e2e2d4 | ||
| 
						 | 
					c6cda0bdb7 | ||
| 
						 | 
					730e37edb6 | ||
| 
						 | 
					4b6e6ab91c | ||
| 
						 | 
					24842e0586 | ||
| 
						 | 
					159cf04e86 | ||
| 
						 | 
					676432d4e1 | ||
| 
						 | 
					1e72b77994 | ||
| 
						 | 
					1cf3bbaea6 | ||
| 
						 | 
					d448429e52 | ||
| 
						 | 
					4534fb1c86 | ||
| 
						 | 
					362f2b69ff | ||
| 
						 | 
					3c184d8180 | ||
| 
						 | 
					a440d6636f | ||
| 
						 | 
					91e8cc6216 | ||
| 
						 | 
					d0c2ebf414 | ||
| 
						 | 
					e17b712894 | ||
| 
						 | 
					1d95fb659d | ||
| 
						 | 
					62324627aa | ||
| 
						 | 
					623eea376a | ||
| 
						 | 
					5ef8093732 | ||
| 
						 | 
					6d50071e84 | ||
| 
						 | 
					60dae9985d | ||
| 
						 | 
					df320c4473 | ||
| 
						 | 
					3aa477f6ec | ||
| 
						 | 
					282f92f7dd | ||
| 
						 | 
					8e913bff55 | ||
| 
						 | 
					07fcf422a1 | ||
| 
						 | 
					da542e1bf7 | ||
| 
						 | 
					93fe6e13a3 | ||
| 
						 | 
					2c281ebb6c | ||
| 
						 | 
					37b08e8365 | ||
| 
						 | 
					318f962928 | ||
| 
						 | 
					acb5b34328 | ||
| 
						 | 
					c1629c9ea2 | ||
| 
						 | 
					1e4e549296 | ||
| 
						 | 
					439fb8e1e0 | ||
| 
						 | 
					53e44d90c7 | ||
| 
						 | 
					32751b8ab1 | ||
| 
						 | 
					5ce0e07da7 | ||
| 
						 | 
					1c86d93ca5 | ||
| 
						 | 
					ea4e4149af | ||
| 
						 | 
					0e05f54516 | ||
| 
						 | 
					095aadc43f | ||
| 
						 | 
					68a1c6b0d9 | ||
| 
						 | 
					bda702ef83 | ||
| 
						 | 
					a4129c6e33 | ||
| 
						 | 
					848f3d40c8 | ||
| 
						 | 
					1949e78336 | ||
| 
						 | 
					2273d6b657 | ||
| 
						 | 
					e39c194387 | ||
| 
						 | 
					e1b78bc64d | ||
| 
						 | 
					e65c84abb0 | ||
| 
						 | 
					8eec1389fb | ||
| 
						 | 
					e38dabbc0c | ||
| 
						 | 
					54731d75d7 | ||
| 
						 | 
					18f2259499 | ||
| 
						 | 
					1d84fd64fc | ||
| 
						 | 
					03ed26afdd | ||
| 
						 | 
					775bcebde5 | ||
| 
						 | 
					7fcc8326e3 | ||
| 
						 | 
					cc99526db1 | ||
| 
						 | 
					72660f5f15 | ||
| 
						 | 
					bace212474 | ||
| 
						 | 
					e117a890ca | ||
| 
						 | 
					5614bb91f5 | ||
| 
						 | 
					7abee0cedf | ||
| 
						 | 
					6dcbaf5857 | ||
| 
						 | 
					baa080d46a | ||
| 
						 | 
					02ef611ef3 | ||
| 
						 | 
					24b8bf2163 | ||
| 
						 | 
					e37c27d239 | ||
| 
						 | 
					270f4f6d63 | ||
| 
						 | 
					e147c6fef8 | ||
| 
						 | 
					cea81a62ff | ||
| 
						 | 
					c0366d89f6 | ||
| 
						 | 
					523d778aef | ||
| 
						 | 
					5b7417dbe1 | ||
| 
						 | 
					5401c4c2bf | ||
| 
						 | 
					c11dead17c | ||
| 
						 | 
					4041156461 | ||
| 
						 | 
					279fff0d7f | ||
| 
						 | 
					54f10e6adc | ||
| 
						 | 
					fb1cba063d | ||
| 
						 | 
					e4daf9dfce | ||
| 
						 | 
					8a26980b07 | ||
| 
						 | 
					1e27f4b68c | ||
| 
						 | 
					03ea28c985 | ||
| 
						 | 
					0f92cae9bc | ||
| 
						 | 
					a9740b7da6 | ||
| 
						 | 
					d572cb6c1c | ||
| 
						 | 
					05c2b37176 | ||
| 
						 | 
					8c0514f741 | ||
| 
						 | 
					2aff74dd68 | ||
| 
						 | 
					b924f04784 | ||
| 
						 | 
					d63b8db852 | ||
| 
						 | 
					2959f292db | ||
| 
						 | 
					965c17756a | ||
| 
						 | 
					0c415ddd67 | ||
| 
						 | 
					16e91fe8ab | ||
| 
						 | 
					74d2b0f112 | ||
| 
						 | 
					d40a9e8257 | ||
| 
						 | 
					ec6a40e278 | ||
| 
						 | 
					4a6367ae66 | ||
| 
						 | 
					bed1847b6a | ||
| 
						 | 
					4d0c6b2936 | ||
| 
						 | 
					25a73f2690 | ||
| 
						 | 
					b1ccd57b18 | ||
| 
						 | 
					5fd0cd9a9b | ||
| 
						 | 
					97d8e82c4c | ||
| 
						 | 
					d7b9c76c72 | ||
| 
						 | 
					0baed24c1b | ||
| 
						 | 
					4f7068c165 | ||
| 
						 | 
					b144a5e907 | ||
| 
						 | 
					c5a3b7e790 | ||
| 
						 | 
					a652ffc4b5 | ||
| 
						 | 
					eec79f9bab | ||
| 
						 | 
					a1b15ac21f | ||
| 
						 | 
					709e85953d | ||
| 
						 | 
					84b65340e1 | ||
| 
						 | 
					f50c11ca40 | ||
| 
						 | 
					cfd3bb1785 | ||
| 
						 | 
					62ab514e98 | ||
| 
						 | 
					724f9694a6 | ||
| 
						 | 
					948d0125db | ||
| 
						 | 
					9fc2570677 | ||
| 
						 | 
					79d2eb64bb | ||
| 
						 | 
					1974a58fe0 | ||
| 
						 | 
					827dbcb150 | ||
| 
						 | 
					47770c4dfb | ||
| 
						 | 
					7228920ca8 | ||
| 
						 | 
					61f175f4ba | ||
| 
						 | 
					26b0d15628 | ||
| 
						 | 
					15387be289 | ||
| 
						 | 
					f684090cbe | ||
| 
						 | 
					b7c190d97b | ||
| 
						 | 
					82aec1cc35 | ||
| 
						 | 
					75cb225989 | ||
| 
						 | 
					36124b1087 | ||
| 
						 | 
					1af407e78f | ||
| 
						 | 
					2b40660ec1 | ||
| 
						 | 
					f5882ce758 | ||
| 
						 | 
					34417732fa | ||
| 
						 | 
					b894b13059 | ||
| 
						 | 
					bbb720034a | ||
| 
						 | 
					4af6e2432b | ||
| 
						 | 
					f3f53c8ca5 | ||
| 
						 | 
					2f043896d1 | ||
| 
						 | 
					29eb7d9ce0 | ||
| 
						 | 
					34216c0422 | ||
| 
						 | 
					22c7ea4068 | ||
| 
						 | 
					29dc25e88a | ||
| 
						 | 
					0572abbf53 | ||
| 
						 | 
					7d95ff76e6 | ||
| 
						 | 
					affadbef0b | ||
| 
						 | 
					397bd0938a | ||
| 
						 | 
					bbb8de0966 | ||
| 
						 | 
					5e38616380 | ||
| 
						 | 
					54705b3992 | ||
| 
						 | 
					4ed601b172 | ||
| 
						 | 
					04a3ae5592 | ||
| 
						 | 
					bd08a2bd0c | ||
| 
						 | 
					55ac522068 | ||
| 
						 | 
					ccc265eaa7 | ||
| 
						 | 
					a545c6f6b1 | ||
| 
						 | 
					5b774c67d3 | ||
| 
						 | 
					7049ef5f90 | ||
| 
						 | 
					7df1c720f6 | ||
| 
						 | 
					b3756cf0e9 | ||
| 
						 | 
					065866b28d | ||
| 
						 | 
					dcb1ef5c22 | ||
| 
						 | 
					d428bf8c56 | ||
| 
						 | 
					d096b524af | ||
| 
						 | 
					c9b51693dc | ||
| 
						 | 
					cae0ae2e4b | ||
| 
						 | 
					469938cb40 | ||
| 
						 | 
					eaa2818189 | ||
| 
						 | 
					622ec449e5 | ||
| 
						 | 
					bb531a0a1c | ||
| 
						 | 
					e6629837a9 | ||
| 
						 | 
					97a377b973 | ||
| 
						 | 
					6fd5a04729 | ||
| 
						 | 
					0f4e21360d | ||
| 
						 | 
					d03e0f3411 | ||
| 
						 | 
					12dc462520 | ||
| 
						 | 
					967f4ca847 | ||
| 
						 | 
					368f85545e | ||
| 
						 | 
					c59cb511f3 | ||
| 
						 | 
					fa1194d30a | ||
| 
						 | 
					25b93b9def | ||
| 
						 | 
					b98ebe0fa5 | ||
| 
						 | 
					3009458e2f | ||
| 
						 | 
					5ce42a7e68 | ||
| 
						 | 
					9ee1c838cb | ||
| 
						 | 
					88364bc2bc | ||
| 
						 | 
					35140f3354 | ||
| 
						 | 
					15c2e1260b | ||
| 
						 | 
					d309394447 | ||
| 
						 | 
					d4fbe3182d | ||
| 
						 | 
					5584fa1709 | ||
| 
						 | 
					2d978cbd30 | ||
| 
						 | 
					0a3f67e3b0 | ||
| 
						 | 
					ea58130d1a | ||
| 
						 | 
					3132e196bd | ||
| 
						 | 
					51b66427c9 | ||
| 
						 | 
					69764d720a | ||
| 
						 | 
					fcc6a1c4ec | ||
| 
						 | 
					55bad949ed | ||
| 
						 | 
					bb1c9dcc3b | ||
| 
						 | 
					aa04f1d7ad | ||
| 
						 | 
					f4b45b76ef | ||
| 
						 | 
					554097ff7f | ||
| 
						 | 
					96f3b56c8c | ||
| 
						 | 
					ee087bb8eb | ||
| 
						 | 
					e5acb2bd2e | ||
| 
						 | 
					173e243aae | ||
| 
						 | 
					cc244b371d | ||
| 
						 | 
					bd4e152791 | ||
| 
						 | 
					aa826d88e1 | ||
| 
						 | 
					37569e64e8 | ||
| 
						 | 
					a657546f9c | ||
| 
						 | 
					8083e1bd9e | ||
| 
						 | 
					8b4e27e26e | ||
| 
						 | 
					d6ade7422a | ||
| 
						 | 
					ca1e465f6d | ||
| 
						 | 
					f6c1c9e95d | ||
| 
						 | 
					2dbef509e2 | ||
| 
						 | 
					a4125514f5 | ||
| 
						 | 
					033d001e90 | ||
| 
						 | 
					284ef5f357 | ||
| 
						 | 
					47ff5de8c2 | ||
| 
						 | 
					34f0fe9de0 | ||
| 
						 | 
					ccb9aae905 | ||
| 
						 | 
					f4316c36df | ||
| 
						 | 
					8886f118db | ||
| 
						 | 
					f944e7845c | ||
| 
						 | 
					6b7a83c7b0 | ||
| 
						 | 
					f6cd2d38c0 | ||
| 
						 | 
					d55a3cf19d | ||
| 
						 | 
					fa729135d8 | ||
| 
						 | 
					b436a98257 | ||
| 
						 | 
					2d789604b8 | ||
| 
						 | 
					c4558f8291 | ||
| 
						 | 
					2ad3c4c89e | ||
| 
						 | 
					3866db2d5a | ||
| 
						 | 
					8ad7635ec9 | ||
| 
						 | 
					c0722725f9 | ||
| 
						 | 
					25063f1d9b | ||
| 
						 | 
					fd13f0ee52 | ||
| 
						 | 
					b364e5d27b | ||
| 
						 | 
					16ece03a2e | ||
| 
						 | 
					094fe66d9f | ||
| 
						 | 
					27d7260075 | ||
| 
						 | 
					a338e21bd1 | ||
| 
						 | 
					5789f8f780 | ||
| 
						 | 
					9b2961573a | ||
| 
						 | 
					d5870bbe23 | ||
| 
						 | 
					c2bbf9cf6c | ||
| 
						 | 
					8f0d68fa27 | ||
| 
						 | 
					d54f8c8cf6 | ||
| 
						 | 
					e0b0dc11df | ||
| 
						 | 
					75c4f7e097 | ||
| 
						 | 
					904cb691f3 | ||
| 
						 | 
					3f2599d97d | ||
| 
						 | 
					186a6f4876 | ||
| 
						 | 
					69b5d3c51f | ||
| 
						 | 
					2bfb4dbce4 | ||
| 
						 | 
					4e74239cca | ||
| 
						 | 
					f365611ca3 | ||
| 
						 | 
					523c83ec9a | ||
| 
						 | 
					20d242b0de | ||
| 
						 | 
					dffd72f171 | ||
| 
						 | 
					3b3bc455d0 | ||
| 
						 | 
					e871dcbc23 | ||
| 
						 | 
					adbd4ed16d | ||
| 
						 | 
					1f4643a2f4 | ||
| 
						 | 
					8ba92cfe81 | ||
| 
						 | 
					fc57ebc057 | ||
| 
						 | 
					e958c5afe7 | ||
| 
						 | 
					431b0cce7d | ||
| 
						 | 
					1023b1220e | ||
| 
						 | 
					ff4e9d91d9 | ||
| 
						 | 
					ce2d00b2b4 | ||
| 
						 | 
					90ae4673a5 | ||
| 
						 | 
					2a98f41708 | ||
| 
						 | 
					fb0b844a7d | ||
| 
						 | 
					ac57d15b75 | ||
| 
						 | 
					4dd4535441 | ||
| 
						 | 
					8415060e1e | ||
| 
						 | 
					1a797ac67c | ||
| 
						 | 
					130832150c | ||
| 
						 | 
					7ef8206859 | ||
| 
						 | 
					438fa2fdc1 | ||
| 
						 | 
					0f4805f515 | ||
| 
						 | 
					562ba1715a | ||
| 
						 | 
					55b7688ef5 | ||
| 
						 | 
					3b21161922 | ||
| 
						 | 
					95a9fea711 | ||
| 
						 | 
					e73a6965e3 | ||
| 
						 | 
					9bc629208f | ||
| 
						 | 
					4b88270ba8 | ||
| 
						 | 
					c79223040d | ||
| 
						 | 
					a8b07aa4e9 | ||
| 
						 | 
					3f39e5ae6c | ||
| 
						 | 
					3aceb94b9e | ||
| 
						 | 
					fb3e1eeb93 | ||
| 
						 | 
					f03aa651c0 | ||
| 
						 | 
					5d07c20d8e | ||
| 
						 | 
					4ee1eb7bd4 | ||
| 
						 | 
					e9a68cfbc3 | ||
| 
						 | 
					d3ed8ceb3d | ||
| 
						 | 
					569e7f6ef2 | ||
| 
						 | 
					f20ee31477 | ||
| 
						 | 
					1e55286996 | ||
| 
						 | 
					9ef876f269 | ||
| 
						 | 
					24bec03beb | ||
| 
						 | 
					c3b1424cc0 | ||
| 
						 | 
					8ba6d1b0cc | ||
| 
						 | 
					1c4f90a05d | ||
| 
						 | 
					44317f04b1 | ||
| 
						 | 
					b7b40c3120 | ||
| 
						 | 
					e366f2b876 | ||
| 
						 | 
					fd75eb50c0 | ||
| 
						 | 
					a91dedca48 | ||
| 
						 | 
					482a9d41b9 | ||
| 
						 | 
					a71e2621bc | ||
| 
						 | 
					b908bd4e15 | ||
| 
						 | 
					ef33b97050 | ||
| 
						 | 
					814ed26cfa | ||
| 
						 | 
					6da6a11331 | ||
| 
						 | 
					3dd985ee2a | ||
| 
						 | 
					f1d92d941e | ||
| 
						 | 
					dc434bbcb0 | ||
| 
						 | 
					947b3b8baf | ||
| 
						 | 
					f8989a2155 | ||
| 
						 | 
					6dad7bd69c | ||
| 
						 | 
					208f3688e0 | ||
| 
						 | 
					b598ea93e7 | ||
| 
						 | 
					7e6502a6cb | ||
| 
						 | 
					9887c71c41 | ||
| 
						 | 
					62187daf9f | ||
| 
						 | 
					e7cae74725 | ||
| 
						 | 
					e6441154fc | ||
| 
						 | 
					849c0e3046 | ||
| 
						 | 
					b368eddd04 | ||
| 
						 | 
					823d8a6eb1 | ||
| 
						 | 
					bc596a7418 | ||
| 
						 | 
					be5d92e014 | ||
| 
						 | 
					c32364f54c | ||
| 
						 | 
					1921eaad64 | ||
| 
						 | 
					26a3a48d65 | ||
| 
						 | 
					de42b6a7a8 | ||
| 
						 | 
					922ebc7b0d | ||
| 
						 | 
					b194041adf | ||
| 
						 | 
					db82b8f9bd | ||
| 
						 | 
					a9ef75c50d | ||
| 
						 | 
					7edd20916a | ||
| 
						 | 
					e41c8d6ad4 | ||
| 
						 | 
					ccd86b68ef | ||
| 
						 | 
					7bb7043580 | ||
| 
						 | 
					f3e9b338e0 | ||
| 
						 | 
					cbb6ad9d10 | ||
| 
						 | 
					727daea783 | ||
| 
						 | 
					2453890463 | ||
| 
						 | 
					78e2426859 | ||
| 
						 | 
					602ef2ae00 | ||
| 
						 | 
					31efc3a78d | ||
| 
						 | 
					a4e31088ce | ||
| 
						 | 
					e20d7d7167 | ||
| 
						 | 
					b108611622 | ||
| 
						 | 
					15e98129b2 | ||
| 
						 | 
					af463e7e19 | ||
| 
						 | 
					01296a6de0 | ||
| 
						 | 
					2ace287dea | ||
| 
						 | 
					939fff6799 | ||
| 
						 | 
					361ee9733f | ||
| 
						 | 
					49528751b8 | ||
| 
						 | 
					547bf7f983 | ||
| 
						 | 
					fbecbc8cfb | ||
| 
						 | 
					5da2f69f41 | ||
| 
						 | 
					57ae2e2428 | ||
| 
						 | 
					380d3aa6be | ||
| 
						 | 
					4c0aee5a75 | ||
| 
						 | 
					8c343cf861 | ||
| 
						 | 
					4dbe060f2c | ||
| 
						 | 
					e212226828 | ||
| 
						 | 
					e9e6b88b35 | ||
| 
						 | 
					360370d953 | ||
| 
						 | 
					1fab73ac85 | ||
| 
						 | 
					be06a9348d | ||
| 
						 | 
					7f0606016c | ||
| 
						 | 
					7b224903f4 | ||
| 
						 | 
					93d8bfcdc4 | ||
| 
						 | 
					2c05c494c0 | ||
| 
						 | 
					2933ed4df7 | ||
| 
						 | 
					b4b41f48d1 | ||
| 
						 | 
					447a9638b7 | ||
| 
						 | 
					4d29312ce1 | ||
| 
						 | 
					c129544f0f | ||
| 
						 | 
					063c0502ef | ||
| 
						 | 
					2ea0910031 | ||
| 
						 | 
					33399fdee2 | ||
| 
						 | 
					a45623c447 | ||
| 
						 | 
					145d39fbe5 | ||
| 
						 | 
					d9586857d6 | ||
| 
						 | 
					c95b7a723f | ||
| 
						 | 
					5569e1c39a | ||
| 
						 | 
					89269c84fe | ||
| 
						 | 
					608c31c60d | ||
| 
						 | 
					6d7cce481e | ||
| 
						 | 
					6d52cf2149 | ||
| 
						 | 
					439df5087f | ||
| 
						 | 
					0d3b0afe9e | ||
| 
						 | 
					abc9400e10 | ||
| 
						 | 
					371acb22e6 | ||
| 
						 | 
					5de603abc8 | ||
| 
						 | 
					f2716dada0 | ||
| 
						 | 
					b4604683fa | ||
| 
						 | 
					0e1c06128a | ||
| 
						 | 
					0c109ea2cb | ||
| 
						 | 
					911ea946cb | ||
| 
						 | 
					c22e4b19e6 | ||
| 
						 | 
					991f0706d8 | ||
| 
						 | 
					fd73a2121c | ||
| 
						 | 
					50e4e9283d | ||
| 
						 | 
					8530712dff | ||
| 
						 | 
					0cb957a684 | ||
| 
						 | 
					a331a305e9 | ||
| 
						 | 
					316e6a66f2 | ||
| 
						 | 
					c4d0df0c4f | ||
| 
						 | 
					aa9fb57b99 | ||
| 
						 | 
					6596268675 | ||
| 
						 | 
					b50e1bd3c3 | ||
| 
						 | 
					82271cee5b | ||
| 
						 | 
					22a415478f | ||
| 
						 | 
					dcba2534fa | ||
| 
						 | 
					b222eb6443 | ||
| 
						 | 
					3973628ea6 | ||
| 
						 | 
					7fc840cc85 | ||
| 
						 | 
					4adcfa052f | ||
| 
						 | 
					09451b6857 | ||
| 
						 | 
					21346b7a04 | ||
| 
						 | 
					ebbaebf784 | ||
| 
						 | 
					da414db464 | ||
| 
						 | 
					deb4d50e51 | ||
| 
						 | 
					ffb488781f | ||
| 
						 | 
					b9e6391582 | ||
| 
						 | 
					2c8c4ce2e0 | ||
| 
						 | 
					bc36f18117 | ||
| 
						 | 
					e5c84d5152 | ||
| 
						 | 
					d49f3797a5 | ||
| 
						 | 
					b87ef9460b | ||
| 
						 | 
					a9831305d8 | ||
| 
						 | 
					7a807ad8a7 | ||
| 
						 | 
					d86b6915be | ||
| 
						 | 
					05e15b046f | ||
| 
						 | 
					1d90f28029 | ||
| 
						 | 
					8acdd759b9 | ||
| 
						 | 
					46b3bd5454 | ||
| 
						 | 
					51175595b3 | ||
| 
						 | 
					eca57e925a | ||
| 
						 | 
					bc2aadad84 | ||
| 
						 | 
					6ef4d9d512 | ||
| 
						 | 
					9ec0126ed2 | ||
| 
						 | 
					8f4fac7f96 | ||
| 
						 | 
					02859fb74a | ||
| 
						 | 
					3e3844b554 | ||
| 
						 | 
					c90341a155 | ||
| 
						 | 
					7c6c052e68 | ||
| 
						 | 
					5e61580bbd | ||
| 
						 | 
					561c71a76b | ||
| 
						 | 
					c2359eb18c | ||
| 
						 | 
					cf194c1f68 | ||
| 
						 | 
					b841e0acd8 | ||
| 
						 | 
					35af460fef | ||
| 
						 | 
					7ae634de49 | ||
| 
						 | 
					8311d32378 | ||
| 
						 | 
					eff5f6124c | ||
| 
						 | 
					edbcba6c6b | ||
| 
						 | 
					3bc90f2373 | ||
| 
						 | 
					98e04f9eeb | ||
| 
						 | 
					6e9aee5724 | ||
| 
						 | 
					b475baffb2 | ||
| 
						 | 
					617d71bc12 | ||
| 
						 | 
					9cead2f2a5 | ||
| 
						 | 
					ce24e726b4 | ||
| 
						 | 
					7d05b51ade | ||
| 
						 | 
					9b77955be9 | ||
| 
						 | 
					60e9a78437 | ||
| 
						 | 
					3fbde72468 | ||
| 
						 | 
					67a8142ce0 | ||
| 
						 | 
					afee764c4a | ||
| 
						 | 
					2d99cee790 | ||
| 
						 | 
					1adfda4151 | ||
| 
						 | 
					f09ba50ec3 | ||
| 
						 | 
					67b2f21382 | ||
| 
						 | 
					3bead95bae | ||
| 
						 | 
					6e1c21abe4 | ||
| 
						 | 
					8f0edcda9e | ||
| 
						 | 
					0b6d88b3b8 | ||
| 
						 | 
					46e80a30e0 | ||
| 
						 | 
					fd430ae94c | ||
| 
						 | 
					1d6750b759 | ||
| 
						 | 
					6e56312f1a | ||
| 
						 | 
					90cc4e29b3 | ||
| 
						 | 
					97197984aa | ||
| 
						 | 
					0806278561 | ||
| 
						 | 
					e8dbc15933 | ||
| 
						 | 
					0fa197d8bc | ||
| 
						 | 
					fd72d831b7 | ||
| 
						 | 
					1bb30673f9 | ||
| 
						 | 
					87351c586e | ||
| 
						 | 
					72fbca2c47 | ||
| 
						 | 
					555b22cfca | ||
| 
						 | 
					513393f8d4 | ||
| 
						 | 
					e77066ea0a | ||
| 
						 | 
					d12cd41900 | ||
| 
						 | 
					17b99efcb0 | ||
| 
						 | 
					afc48ea543 | ||
| 
						 | 
					b313adc4b6 | ||
| 
						 | 
					623bb80b77 | ||
| 
						 | 
					f69ef67c2b | ||
| 
						 | 
					cdbd4a7229 | ||
| 
						 | 
					71b4d8971b | ||
| 
						 | 
					88220dcb21 | ||
| 
						 | 
					b7a81df46a | ||
| 
						 | 
					21173cf936 | ||
| 
						 | 
					35a79ecbae | ||
| 
						 | 
					311c6efa81 | ||
| 
						 | 
					c81ccaddad | ||
| 
						 | 
					fc450b24b4 | ||
| 
						 | 
					be1755f1cf | ||
| 
						 | 
					3cf4f5d05e | ||
| 
						 | 
					a1a96e54a4 | ||
| 
						 | 
					a6aa71ff5f | ||
| 
						 | 
					87b89b799f | ||
| 
						 | 
					f3f3cc0cca | ||
| 
						 | 
					c97b11f4b3 | ||
| 
						 | 
					2501b335fa | ||
| 
						 | 
					48b83a2504 | ||
| 
						 | 
					e55818b9d3 | ||
| 
						 | 
					ea82355258 | ||
| 
						 | 
					1f39d082c6 | ||
| 
						 | 
					edb93ae643 | ||
| 
						 | 
					395df2fe30 | ||
| 
						 | 
					7af4816f0e | ||
| 
						 | 
					369782ac50 | ||
| 
						 | 
					fc79993620 | ||
| 
						 | 
					7043a4fc4a | ||
| 
						 | 
					50c16ed350 | ||
| 
						 | 
					6e22639f46 | ||
| 
						 | 
					cde245bdcd | ||
| 
						 | 
					1f515cfe09 | ||
| 
						 | 
					ee7f80c580 | ||
| 
						 | 
					158ef04857 | ||
| 
						 | 
					511e596b8a | ||
| 
						 | 
					2202d75ed7 | ||
| 
						 | 
					299e7c9145 | ||
| 
						 | 
					fb51beb591 | ||
| 
						 | 
					cc497fb04a | ||
| 
						 | 
					98ff3937bb | ||
| 
						 | 
					82dccbd72a | ||
| 
						 | 
					448e2f9ba7 | ||
| 
						 | 
					24aaff588a | ||
| 
						 | 
					d8779db47b | ||
| 
						 | 
					2db90e3ad3 | ||
| 
						 | 
					cff4cbaaa7 | ||
| 
						 | 
					2d708bf61d | ||
| 
						 | 
					1fff621bd7 | ||
| 
						 | 
					5241a83b2d | ||
| 
						 | 
					008fee3838 | ||
| 
						 | 
					8824ec7cd5 | ||
| 
						 | 
					80870566cf | ||
| 
						 | 
					5d8118d218 | ||
| 
						 | 
					8a270a0f41 | ||
| 
						 | 
					c13ee21492 | ||
| 
						 | 
					df1ff3f1b3 | ||
| 
						 | 
					7694ddcbc0 | ||
| 
						 | 
					66b9c3cae0 | ||
| 
						 | 
					46c4647e3c | ||
| 
						 | 
					d58d6c2783 | ||
| 
						 | 
					95fabd2fbc | ||
| 
						 | 
					7d2509b6df | ||
| 
						 | 
					65b002f399 | ||
| 
						 | 
					bc23b70e47 | ||
| 
						 | 
					41f0aae69b | ||
| 
						 | 
					ee607d338a | ||
| 
						 | 
					e11f0de67f | ||
| 
						 | 
					563f1503a8 | ||
| 
						 | 
					88f17a5e98 | ||
| 
						 | 
					863fe2ecac | ||
| 
						 | 
					3a6a39c373 | ||
| 
						 | 
					cee814f9d5 | ||
| 
						 | 
					bf8479d22f | ||
| 
						 | 
					4a56f7493c | ||
| 
						 | 
					f95808e8a5 | ||
| 
						 | 
					b70dcdfc3f | ||
| 
						 | 
					4991d07cf3 | ||
| 
						 | 
					9e03333fd5 | ||
| 
						 | 
					9f06706bf7 | ||
| 
						 | 
					153a59f46d | ||
| 
						 | 
					2d5e449a18 | ||
| 
						 | 
					e458958280 | ||
| 
						 | 
					ce301b6b0b | ||
| 
						 | 
					0dd3989868 | ||
| 
						 | 
					a10c512afa | ||
| 
						 | 
					9f5d2069a4 | ||
| 
						 | 
					e4947bfec7 | ||
| 
						 | 
					837174dd63 | ||
| 
						 | 
					97025c5fc0 | ||
| 
						 | 
					e743a5134e | ||
| 
						 | 
					97853bd5c1 | ||
| 
						 | 
					c61252001b | ||
| 
						 | 
					9886f42014 | ||
| 
						 | 
					b7e1636171 | ||
| 
						 | 
					3bf7ef5389 | ||
| 
						 | 
					f71732627a | ||
| 
						 | 
					daf4e53e86 | ||
| 
						 | 
					068fdce877 | ||
| 
						 | 
					fa0ca35b95 | ||
| 
						 | 
					48fe0eec67 | ||
| 
						 | 
					4c4d87f95f | ||
| 
						 | 
					4013f3bf1e | ||
| 
						 | 
					fe10275da8 | ||
| 
						 | 
					de83c12253 | ||
| 
						 | 
					59fc2b0fc2 | ||
| 
						 | 
					5ba7c902e5 | ||
| 
						 | 
					3916800fef | ||
| 
						 | 
					1a2450bfc3 | ||
| 
						 | 
					cf7fa82897 | ||
| 
						 | 
					e45b3305b7 | ||
| 
						 | 
					0cff255077 | ||
| 
						 | 
					0a150c5c9f | ||
| 
						 | 
					c7fecee8b5 | ||
| 
						 | 
					7f1120994e | ||
| 
						 | 
					938d90db71 | ||
| 
						 | 
					d796041832 | ||
| 
						 | 
					37634c8bc9 | ||
| 
						 | 
					741e600c12 | ||
| 
						 | 
					bb2276abf7 | ||
| 
						 | 
					41918458c0 | ||
| 
						 | 
					d6f68fa314 | ||
| 
						 | 
					645820f273 | ||
| 
						 | 
					d9c88a3902 | ||
| 
						 | 
					a8883854a3 | ||
| 
						 | 
					84d14408bf | ||
| 
						 | 
					7c472f706e | ||
| 
						 | 
					df83eeb710 | ||
| 
						 | 
					743e7be913 | ||
| 
						 | 
					5eb8ca4d92 | ||
| 
						 | 
					2d092edf5e | ||
| 
						 | 
					5ee0d9c4a3 | ||
| 
						 | 
					84339237d1 | ||
| 
						 | 
					0056ef5d01 | ||
| 
						 | 
					41b8994e99 | ||
| 
						 | 
					582e592924 | ||
| 
						 | 
					8782a42627 | ||
| 
						 | 
					0b8fa44ef0 | ||
| 
						 | 
					7a2dfc2a20 | ||
| 
						 | 
					99a97051d4 | ||
| 
						 | 
					410243f197 | ||
| 
						 | 
					24282b87f1 | ||
| 
						 | 
					afbd0746cf | ||
| 
						 | 
					55f7d65db0 | ||
| 
						 | 
					f1a617edc9 | ||
| 
						 | 
					47722fe636 | ||
| 
						 | 
					27b782732f | ||
| 
						 | 
					19c057da2e | ||
| 
						 | 
					2c51f2d909 | ||
| 
						 | 
					dd8ec7cc69 | ||
| 
						 | 
					569be0710b | ||
| 
						 | 
					0816bc220b | ||
| 
						 | 
					010712ff23 | ||
| 
						 | 
					0ea3465576 | ||
| 
						 | 
					96723a3a68 | ||
| 
						 | 
					e33f347ac6 | ||
| 
						 | 
					fee2dc8ec9 | ||
| 
						 | 
					e64dceab74 | ||
| 
						 | 
					c9e1fe33be | ||
| 
						 | 
					2da0c11926 | ||
| 
						 | 
					a4709b3d88 | ||
| 
						 | 
					865874f2dd | ||
| 
						 | 
					82b931860a | ||
| 
						 | 
					11750113c6 | ||
| 
						 | 
					74cdf6f73a | ||
| 
						 | 
					8e8125c57c | ||
| 
						 | 
					42a9af38e7 | ||
| 
						 | 
					1b7aee1d4e | ||
| 
						 | 
					4ba48ec4d0 | ||
| 
						 | 
					c257cce913 | ||
| 
						 | 
					88b04f03cf | ||
| 
						 | 
					b546cff875 | ||
| 
						 | 
					4cdd275f63 | ||
| 
						 | 
					6eec83bcf9 | ||
| 
						 | 
					facf472744 | ||
| 
						 | 
					3aefe30469 | ||
| 
						 | 
					c7fea63467 | ||
| 
						 | 
					4cce82446c | ||
| 
						 | 
					fd74679ae2 | ||
| 
						 | 
					587bb0e02e | ||
| 
						 | 
					2eb5bc5c6d | ||
| 
						 | 
					8f6dc9c50f | ||
| 
						 | 
					c850925cdf | ||
| 
						 | 
					707ef52e21 | ||
| 
						 | 
					e485afdab5 | ||
| 
						 | 
					fc2b051796 | ||
| 
						 | 
					cee0bbc709 | ||
| 
						 | 
					405896785d | ||
| 
						 | 
					2e98ec5651 | ||
| 
						 | 
					47f87f536a | ||
| 
						 | 
					981cdfab86 | ||
| 
						 | 
					13bf48c77a | ||
| 
						 | 
					a1a426ea20 | ||
| 
						 | 
					4f07317ffa | ||
| 
						 | 
					cde28e18bf | ||
| 
						 | 
					6209ada910 | ||
| 
						 | 
					2e904727c2 | ||
| 
						 | 
					1a8b087ad7 | ||
| 
						 | 
					5ee6cc1162 | ||
| 
						 | 
					a5770be6ae | ||
| 
						 | 
					0a9d53e9eb | ||
| 
						 | 
					688938fbb4 | ||
| 
						 | 
					9b95f1df4b | ||
| 
						 | 
					94de04192d | ||
| 
						 | 
					1070e0e2ee | ||
| 
						 | 
					1b199605c4 | ||
| 
						 | 
					f27e41349f | ||
| 
						 | 
					775c63fc02 | ||
| 
						 | 
					db209ec295 | ||
| 
						 | 
					0202197dbf | ||
| 
						 | 
					63933136ab | ||
| 
						 | 
					6ee6fdf555 | ||
| 
						 | 
					c131593d48 | ||
| 
						 | 
					6d0d5431d4 | ||
| 
						 | 
					7bd3a58022 | ||
| 
						 | 
					921c9bd539 | ||
| 
						 | 
					8072c135cb | ||
| 
						 | 
					1472f300d5 | ||
| 
						 | 
					60b8e17568 | ||
| 
						 | 
					a1990dd76d | ||
| 
						 | 
					cb464c38b2 | ||
| 
						 | 
					9a5a7401e9 | ||
| 
						 | 
					234b5e9611 | ||
| 
						 | 
					8ab59e7a49 | ||
| 
						 | 
					668ba7d63f | ||
| 
						 | 
					c7cb16a8ff | ||
| 
						 | 
					47c177c7b3 | ||
| 
						 | 
					b755955a53 | ||
| 
						 | 
					7c0dc41c38 | ||
| 
						 | 
					1b8b0a8294 | ||
| 
						 | 
					c29b6d560b | ||
| 
						 | 
					1340db6569 | ||
| 
						 | 
					9da65c3280 | ||
| 
						 | 
					dc8c8cda4d | ||
| 
						 | 
					2d2d31394a | ||
| 
						 | 
					1e7396beeb | ||
| 
						 | 
					582afb4bd7 | ||
| 
						 | 
					f63500c09c | ||
| 
						 | 
					f36e02b2ef | ||
| 
						 | 
					3e0f27f3c9 | ||
| 
						 | 
					17dddc0596 | ||
| 
						 | 
					b91f8a482c | ||
| 
						 | 
					e0b8b39f3a | ||
| 
						 | 
					87a025cbb4 | ||
| 
						 | 
					3167f68faf | ||
| 
						 | 
					d52c973498 | ||
| 
						 | 
					dbe7113308 | ||
| 
						 | 
					1c890fa864 | ||
| 
						 | 
					b08b07b8ae | ||
| 
						 | 
					4621a00063 | ||
| 
						 | 
					7dce5a727a | ||
| 
						 | 
					3813046dc5 | ||
| 
						 | 
					a6fc578bd5 | ||
| 
						 | 
					e01eed0fae | ||
| 
						 | 
					5946ede512 | ||
| 
						 | 
					e5599db448 | ||
| 
						 | 
					26fb2b4b44 | ||
| 
						 | 
					5e7bec63eb | ||
| 
						 | 
					4101054ab5 | ||
| 
						 | 
					fea217f96f | ||
| 
						 | 
					cacbb51ee1 | ||
| 
						 | 
					40134e22d0 | ||
| 
						 | 
					a3b17baf4e | ||
| 
						 | 
					b478e91fda | ||
| 
						 | 
					935a50e886 | ||
| 
						 | 
					b05c7211cb | ||
| 
						 | 
					c6709c6b0f | ||
| 
						 | 
					fbb41ae0ad | ||
| 
						 | 
					766d78c8f5 | ||
| 
						 | 
					c04949e978 | ||
| 
						 | 
					505b5a0ee0 | ||
| 
						 | 
					e8973060ee | ||
| 
						 | 
					a3321387c1 | ||
| 
						 | 
					9fd4ee5d7c | ||
| 
						 | 
					f6de86dc3d | ||
| 
						 | 
					1a33f6da8b | ||
| 
						 | 
					0dd0cbf554 | ||
| 
						 | 
					a610374cb2 | ||
| 
						 | 
					a7b991bd68 | ||
| 
						 | 
					a4cfd178f9 | ||
| 
						 | 
					2c0ff02fba | ||
| 
						 | 
					29a5374fb6 | ||
| 
						 | 
					4d524e10b4 | ||
| 
						 | 
					c6a33c6f61 | ||
| 
						 | 
					07fb39c32e | ||
| 
						 | 
					8d5b4ee1ca | ||
| 
						 | 
					331b59214b | ||
| 
						 | 
					4c5fac4ac4 | ||
| 
						 | 
					390ead1e9a | ||
| 
						 | 
					ac9c1bcb81 | ||
| 
						 | 
					4ec2d4d2b3 | ||
| 
						 | 
					5921ea3bcf | ||
| 
						 | 
					2dbb3ccd5c | ||
| 
						 | 
					9f7f1ff75e | ||
| 
						 | 
					b6891e9c35 | ||
| 
						 | 
					d7f0ab5ff4 | ||
| 
						 | 
					49976df599 | ||
| 
						 | 
					e6a58767c5 | ||
| 
						 | 
					9ae2ad23e6 | ||
| 
						 | 
					4a26329b4c | ||
| 
						 | 
					71308c3bb5 | ||
| 
						 | 
					720b590f56 | ||
| 
						 | 
					cdf20e0839 | ||
| 
						 | 
					88886fd305 | ||
| 
						 | 
					2b670ea298 | ||
| 
						 | 
					be7ae17560 | ||
| 
						 | 
					c1ce32f1bf | ||
| 
						 | 
					f9a7c34f4b | ||
| 
						 | 
					41e68ef25f | ||
| 
						 | 
					3142c86d65 | ||
| 
						 | 
					4b42658082 | ||
| 
						 | 
					3f2b5a88ad | ||
| 
						 | 
					43e9d805e8 | ||
| 
						 | 
					de4b598946 | ||
| 
						 | 
					17ef291661 | ||
| 
						 | 
					261b5d96ad | ||
| 
						 | 
					fc6d523f0a | ||
| 
						 | 
					72b60351f1 | ||
| 
						 | 
					1b8a8088a5 | ||
| 
						 | 
					a2a0158959 | ||
| 
						 | 
					e7ecc7d4dd | ||
| 
						 | 
					8bd5b7944e | ||
| 
						 | 
					745c70e565 | ||
| 
						 | 
					9dd2b2a940 | ||
| 
						 | 
					10a926c1eb | ||
| 
						 | 
					d3442bc780 | ||
| 
						 | 
					dab6f09573 | ||
| 
						 | 
					45206340d3 | ||
| 
						 | 
					b35e9050f2 | ||
| 
						 | 
					9f7b1b24e2 | ||
| 
						 | 
					4ec19e203c | ||
| 
						 | 
					d754b3850f | ||
| 
						 | 
					853f757ece | ||
| 
						 | 
					ae1bb4e572 | ||
| 
						 | 
					fb77c6fb45 | ||
| 
						 | 
					7fa1343e93 | ||
| 
						 | 
					ad86060357 | ||
| 
						 | 
					e5b4462f47 | ||
| 
						 | 
					26dc267f8c | ||
| 
						 | 
					a91451ef13 | ||
| 
						 | 
					fb044c592d | ||
| 
						 | 
					4328d51d08 | ||
| 
						 | 
					8a208cba97 | ||
| 
						 | 
					5c2ec54f12 | ||
| 
						 | 
					73c5591944 | ||
| 
						 | 
					c417db4675 | ||
| 
						 | 
					671cf7f54a | ||
| 
						 | 
					cd3c54e50f | ||
| 
						 | 
					a3fe382e2d | ||
| 
						 | 
					bd03b99b9b | ||
| 
						 | 
					8691ff97a1 | ||
| 
						 | 
					bd44570322 | ||
| 
						 | 
					e1c55191cb | ||
| 
						 | 
					02d034cc24 | ||
| 
						 | 
					2aca27a9a8 | ||
| 
						 | 
					bc80c86031 | ||
| 
						 | 
					f8bbcf3af0 | ||
| 
						 | 
					89cee61b45 | ||
| 
						 | 
					de469ef21e | ||
| 
						 | 
					ea96c4bc7f | ||
| 
						 | 
					207c7df746 | ||
| 
						 | 
					5f5b8d2bcd | ||
| 
						 | 
					c6ce792fc5 | ||
| 
						 | 
					c9080477ec | ||
| 
						 | 
					bcba6cc60f | ||
| 
						 | 
					d13e4eb0b5 | ||
| 
						 | 
					07fc35519e | ||
| 
						 | 
					3ebf0be142 | ||
| 
						 | 
					cbcc5c01f9 | ||
| 
						 | 
					e6e7b5f3df | ||
| 
						 | 
					b1f8affbd5 | ||
| 
						 | 
					efb416299f | ||
| 
						 | 
					f6814ea43a | ||
| 
						 | 
					5160448b98 | ||
| 
						 | 
					667ac4ec6a | ||
| 
						 | 
					bb325c7d6a | ||
| 
						 | 
					0a751d8ce8 | ||
| 
						 | 
					a5d9c6e4fe | ||
| 
						 | 
					8ce288a881 | ||
| 
						 | 
					cf0694015e | ||
| 
						 | 
					0cd4498b8f | ||
| 
						 | 
					f07fb9b24b | ||
| 
						 | 
					1e8f28c491 | ||
| 
						 | 
					7948febeca | ||
| 
						 | 
					ff8a4c47ce | ||
| 
						 | 
					4e539aaa1e | ||
| 
						 | 
					4facdbb5fa | ||
| 
						 | 
					1c6fbf9ea2 | ||
| 
						 | 
					3cbe1980fd | ||
| 
						 | 
					6d9ca500d8 | ||
| 
						 | 
					fcb20be846 | ||
| 
						 | 
					cae55bfc68 | ||
| 
						 | 
					0fad6cb7e7 | ||
| 
						 | 
					7cf6e2a35b | ||
| 
						 | 
					8652d1c22e | ||
| 
						 | 
					4a6222d71b | ||
| 
						 | 
					e290c7d4e0 | ||
| 
						 | 
					29a28ee503 | ||
| 
						 | 
					66430207a4 | ||
| 
						 | 
					eb5a6a55c5 | ||
| 
						 | 
					37e48b88ad | ||
| 
						 | 
					6535eb1728 | ||
| 
						 | 
					9b141126d4 | ||
| 
						 | 
					7e708ebee0 | ||
| 
						 | 
					c236e66d62 | ||
| 
						 | 
					981b87f712 | ||
| 
						 | 
					d716308288 | ||
| 
						 | 
					af57d84312 | ||
| 
						 | 
					53002dc691 | ||
| 
						 | 
					f50c049707 | ||
| 
						 | 
					b136aa5423 | ||
| 
						 | 
					ce76ce43ae | ||
| 
						 | 
					b20b78b720 | ||
| 
						 | 
					657e60fa00 | ||
| 
						 | 
					9dbc41d7ee | ||
| 
						 | 
					82fc1d9c28 | ||
| 
						 | 
					7999c65c9b | ||
| 
						 | 
					bfe30e4d1b | ||
| 
						 | 
					aff0825c61 | ||
| 
						 | 
					e74231ed9e | ||
| 
						 | 
					fb81ac5e6b | ||
| 
						 | 
					54a34aecc3 | ||
| 
						 | 
					1399f17a07 | ||
| 
						 | 
					0bde1089f8 | ||
| 
						 | 
					cf802b983f | ||
| 
						 | 
					20ead2c6f7 | ||
| 
						 | 
					fef47a1d1e | ||
| 
						 | 
					ee25d40bea | ||
| 
						 | 
					cb5b7850ac | ||
| 
						 | 
					fe7cd1647d | ||
| 
						 | 
					1c8337abe3 | ||
| 
						 | 
					2c5fe5b12a | ||
| 
						 | 
					f40c02d908 | ||
| 
						 | 
					8efb60144d | ||
| 
						 | 
					388f2f56f2 | ||
| 
						 | 
					f5a8d67872 | ||
| 
						 | 
					89ec98e0ce | ||
| 
						 | 
					6671fe16ee | ||
| 
						 | 
					4e3b0992da | ||
| 
						 | 
					98d0b2e375 | ||
| 
						 | 
					51ca375e7e | ||
| 
						 | 
					1749d8a039 | ||
| 
						 | 
					9d1a01be8f | ||
| 
						 | 
					74235cc9ec | ||
| 
						 | 
					da0fc5bf0f | ||
| 
						 | 
					cdd43b5ba5 | ||
| 
						 | 
					1baa94907c | ||
| 
						 | 
					7865b871c0 | ||
| 
						 | 
					a87030a1ed | ||
| 
						 | 
					15701211b5 | ||
| 
						 | 
					1e264ff325 | ||
| 
						 | 
					f27c5509f7 | ||
| 
						 | 
					e1314b5716 | ||
| 
						 | 
					07e6dbde66 | ||
| 
						 | 
					1f36fe2835 | ||
| 
						 | 
					aa3353fda2 | ||
| 
						 | 
					2af9fd006d | ||
| 
						 | 
					90644dd74d | ||
| 
						 | 
					75b0edaafa | ||
| 
						 | 
					f95a9f678a | ||
| 
						 | 
					0b3300f866 | ||
| 
						 | 
					953aa79040 | ||
| 
						 | 
					01d16b54c2 | ||
| 
						 | 
					3ac60a612e | ||
| 
						 | 
					294b3c1a9c | ||
| 
						 | 
					6c2c3e9ba9 | ||
| 
						 | 
					157be2b67d | ||
| 
						 | 
					5d6e31dbe6 | ||
| 
						 | 
					38e33cef15 | ||
| 
						 | 
					0c23524963 | ||
| 
						 | 
					480116f062 | ||
| 
						 | 
					2233bed1cb | ||
| 
						 | 
					ec1258dd44 | ||
| 
						 | 
					b99b110766 | ||
| 
						 | 
					6e0cad8d34 | ||
| 
						 | 
					5f5e96d92b | ||
| 
						 | 
					38b1fa8995 | ||
| 
						 | 
					387ca353fa | ||
| 
						 | 
					d629757a84 | ||
| 
						 | 
					fc58fa8bb8 | ||
| 
						 | 
					e93f9a3284 | ||
| 
						 | 
					bb075f8833 | ||
| 
						 | 
					52732b38da | ||
| 
						 | 
					ada3cc4a8f | ||
| 
						 | 
					a598cd1ab4 | ||
| 
						 | 
					2557eaeac8 | ||
| 
						 | 
					a46faa2bfd | ||
| 
						 | 
					aabbb7451b | ||
| 
						 | 
					4a1a3440a4 | ||
| 
						 | 
					1d7d74647a | ||
| 
						 | 
					05ccd698b9 | ||
| 
						 | 
					f13b93d3b4 | ||
| 
						 | 
					7be5af1ddf | ||
| 
						 | 
					baf32381b5 | ||
| 
						 | 
					1675f6eb05 | ||
| 
						 | 
					8548d44270 | ||
| 
						 | 
					fd38fecc1a | ||
| 
						 | 
					3bec05e933 | ||
| 
						 | 
					223fc8654a | ||
| 
						 | 
					0e930f25d2 | ||
| 
						 | 
					dd9d233e2a | ||
| 
						 | 
					dd8dec69b8 | ||
| 
						 | 
					ce052b6c3b | ||
| 
						 | 
					e84c2d2679 | ||
| 
						 | 
					fabce04122 | ||
| 
						 | 
					64287002ce | ||
| 
						 | 
					c88a900fa1 | ||
| 
						 | 
					2a99e8b9df | ||
| 
						 | 
					99e812cb93 | ||
| 
						 | 
					fcb76baeb0 | ||
| 
						 | 
					4486d0cd7a | ||
| 
						 | 
					09483c58e3 | ||
| 
						 | 
					bda70ed430 | ||
| 
						 | 
					018e57c74d | ||
| 
						 | 
					3604a4d3d1 | ||
| 
						 | 
					3779469192 | ||
| 
						 | 
					0b5cfe32e9 | ||
| 
						 | 
					cc8709a090 | ||
| 
						 | 
					2c8aeddc5d | ||
| 
						 | 
					720b3598d6 | ||
| 
						 | 
					60b5245360 | ||
| 
						 | 
					5d82c5b3f4 | ||
| 
						 | 
					674b8eec4c | ||
| 
						 | 
					033db22d57 | ||
| 
						 | 
					af6f388180 | ||
| 
						 | 
					af5eb82979 | ||
| 
						 | 
					435b72dd4f | ||
| 
						 | 
					8100490a72 | ||
| 
						 | 
					dd46d58f65 | ||
| 
						 | 
					e7f97e2d22 | ||
| 
						 | 
					731d9c5fb5 | ||
| 
						 | 
					4699af98e6 | ||
| 
						 | 
					b25c8db872 | ||
| 
						 | 
					b838465135 | ||
| 
						 | 
					6481f3d29d | ||
| 
						 | 
					4146aa6b42 | ||
| 
						 | 
					4f392a200e | ||
| 
						 | 
					97c1f605f4 | ||
| 
						 | 
					281959aa61 | ||
| 
						 | 
					6e6bc352b1 | ||
| 
						 | 
					77b47b9036 | ||
| 
						 | 
					721b5b2a5c | ||
| 
						 | 
					a9188d4e17 | ||
| 
						 | 
					ea5e7bcf63 | ||
| 
						 | 
					c89cb36dbf | ||
| 
						 | 
					7be760be38 | ||
| 
						 | 
					7256ce6a8c | ||
| 
						 | 
					fb8d5a16a3 | ||
| 
						 | 
					9c86df6a98 | ||
| 
						 | 
					2697557764 | ||
| 
						 | 
					b058a08085 | ||
| 
						 | 
					e7399bf592 | ||
| 
						 | 
					cef80e8c14 | ||
| 
						 | 
					aa82db4fb4 | ||
| 
						 | 
					b0bb2b914a | ||
| 
						 | 
					88618bac73 | ||
| 
						 | 
					373b575f5a | ||
| 
						 | 
					e1798f856d | ||
| 
						 | 
					243ba4095c | ||
| 
						 | 
					29ccd81f58 | ||
| 
						 | 
					b9d82f4735 | ||
| 
						 | 
					d593983da4 | ||
| 
						 | 
					9597902a91 | ||
| 
						 | 
					7d388202bd | ||
| 
						 | 
					691401fc53 | ||
| 
						 | 
					4fd2ead09d | ||
| 
						 | 
					b46c3e9b69 | ||
| 
						 | 
					ed84dfab00 | ||
| 
						 | 
					375a7a9383 | ||
| 
						 | 
					105c0be00f | ||
| 
						 | 
					7f5b6f0f19 | ||
| 
						 | 
					0c50e02b30 | ||
| 
						 | 
					a8eeb155b5 | ||
| 
						 | 
					2f878669b7 | ||
| 
						 | 
					f2b86c955c | ||
| 
						 | 
					11afb40c01 | ||
| 
						 | 
					2c736d077b | ||
| 
						 | 
					0983760dfc | ||
| 
						 | 
					a873356c00 | ||
| 
						 | 
					eb952088f0 | ||
| 
						 | 
					22e219d90f | ||
| 
						 | 
					036c8d7e7b | ||
| 
						 | 
					6a3fff5ecf | ||
| 
						 | 
					76aa0ddc86 | ||
| 
						 | 
					e4b7645631 | ||
| 
						 | 
					90308e7072 | ||
| 
						 | 
					2186cd8ef1 | ||
| 
						 | 
					de73e397f8 | ||
| 
						 | 
					cbfa4c32c0 | ||
| 
						 | 
					f1d712ce80 | ||
| 
						 | 
					cc96f6b7a4 | ||
| 
						 | 
					3cc6cdea0f | ||
| 
						 | 
					c51ae173a6 | ||
| 
						 | 
					7e3d8df1bb | ||
| 
						 | 
					efeca6aa32 | ||
| 
						 | 
					4b08eaf5c7 | ||
| 
						 | 
					25f923ddd1 | ||
| 
						 | 
					150a4320d8 | ||
| 
						 | 
					a2151c5b9a | ||
| 
						 | 
					752d706aaf | ||
| 
						 | 
					c3ed3b6eab | ||
| 
						 | 
					c708302516 | ||
| 
						 | 
					3ea4404fd7 | ||
| 
						 | 
					7328b0a89d | ||
| 
						 | 
					ef7eaa4cb0 | ||
| 
						 | 
					dad666fbbe | ||
| 
						 | 
					5b58baee3c | ||
| 
						 | 
					69396b4199 | ||
| 
						 | 
					918a8a16fa | ||
| 
						 | 
					d2b6c3f31f | ||
| 
						 | 
					63da21c01b | ||
| 
						 | 
					b64e735b08 | ||
| 
						 | 
					9ea76b951d | ||
| 
						 | 
					0f583f69f3 | ||
| 
						 | 
					fc6be0fa56 | ||
| 
						 | 
					2fdf5d7c23 | ||
| 
						 | 
					1f2f922455 | ||
| 
						 | 
					19d2bb574b | ||
| 
						 | 
					35f4850ae0 | ||
| 
						 | 
					add9e2544a | ||
| 
						 | 
					b38f9f66c3 | ||
| 
						 | 
					ca03109c3a | ||
| 
						 | 
					9fb617e252 | ||
| 
						 | 
					f2d9a32cf4 | ||
| 
						 | 
					245206eadd | ||
| 
						 | 
					c44f754047 | ||
| 
						 | 
					023f77002f | ||
| 
						 | 
					3a4f14f3d1 | ||
| 
						 | 
					37b0d5d05d | ||
| 
						 | 
					1eab9a1fbb | ||
| 
						 | 
					2e97d4f9f5 | ||
| 
						 | 
					bdf5e18317 | ||
| 
						 | 
					3d14b9d04a | ||
| 
						 | 
					20432eae41 | ||
| 
						 | 
					47134b7864 | ||
| 
						 | 
					45fd4dbb84 | ||
| 
						 | 
					9535f8c165 | ||
| 
						 | 
					891e465607 | ||
| 
						 | 
					f45f40ffff | ||
| 
						 | 
					6447cce372 | ||
| 
						 | 
					76997b7dd0 | ||
| 
						 | 
					e6f3c5850e | ||
| 
						 | 
					b96eb06f79 | ||
| 
						 | 
					36217a9424 | ||
| 
						 | 
					12aefe78f0 | ||
| 
						 | 
					525f51f6c9 | ||
| 
						 | 
					78baa17ad0 | ||
| 
						 | 
					a9e9db8153 | ||
| 
						 | 
					e76f935ead | ||
| 
						 | 
					15df5802fd | ||
| 
						 | 
					099bf0e959 | ||
| 
						 | 
					404fb7149e | ||
| 
						 | 
					a7c5241f5f | ||
| 
						 | 
					099f1b32c8 | ||
| 
						 | 
					9a1e34e5de | ||
| 
						 | 
					2b6313d0da | ||
| 
						 | 
					75acc288ca | ||
| 
						 | 
					0cd08cce17 | ||
| 
						 | 
					03c48fa07b | ||
| 
						 | 
					f3a2a04496 | ||
| 
						 | 
					d8df48a9bc | ||
| 
						 | 
					78bf1920a2 | ||
| 
						 | 
					3db1f2d5be | ||
| 
						 | 
					e8f48dbacc | ||
| 
						 | 
					08807172b2 | ||
| 
						 | 
					9ac42ed8fc | ||
| 
						 | 
					1ad9bdf253 | ||
| 
						 | 
					8a1580096b | ||
| 
						 | 
					a5ec86d16c | ||
| 
						 | 
					1887988497 | ||
| 
						 | 
					3fc9635ea7 | ||
| 
						 | 
					3b14cb717d | ||
| 
						 | 
					55f30198ad | ||
| 
						 | 
					2449961ab2 | ||
| 
						 | 
					b216664f66 | ||
| 
						 | 
					d8223efd04 | ||
| 
						 | 
					e3775a33c1 | ||
| 
						 | 
					a4af39ac44 | ||
| 
						 | 
					63daa2aaf4 | ||
| 
						 | 
					a2121e0aee | ||
| 
						 | 
					55ec5861c8 | ||
| 
						 | 
					5a9a4b299c | ||
| 
						 | 
					bc3baeacca | ||
| 
						 | 
					9f382899b2 | ||
| 
						 | 
					cd9860af26 | ||
| 
						 | 
					23fb9bc0eb | ||
| 
						 | 
					cddfe788fb | ||
| 
						 | 
					21131f00d7 | ||
| 
						 | 
					6ea5314007 | ||
| 
						 | 
					dd4134101f | ||
| 
						 | 
					08cba61011 | ||
| 
						 | 
					fea9afbfc7 | ||
| 
						 | 
					5f2f0b5596 | ||
| 
						 | 
					7b418a474c | ||
| 
						 | 
					bb7cd4e3eb | ||
| 
						 | 
					13938aceca | ||
| 
						 | 
					51630a3706 | ||
| 
						 | 
					74ecf9e2bb | ||
| 
						 | 
					21f775522b | ||
| 
						 | 
					9868232ae1 | ||
| 
						 | 
					d4cec6a13d | ||
| 
						 | 
					1126239111 | ||
| 
						 | 
					6d3724d3b0 | ||
| 
						 | 
					52664f5081 | ||
| 
						 | 
					a716d72734 | ||
| 
						 | 
					44eca70641 | ||
| 
						 | 
					5ef738240a | ||
| 
						 | 
					1088e27ca8 | ||
| 
						 | 
					4f23052492 | ||
| 
						 | 
					f76d8c4747 | ||
| 
						 | 
					b1fe6ca175 | ||
| 
						 | 
					91895a5938 | ||
| 
						 | 
					6d1b637ba1 | ||
| 
						 | 
					fd699ac55f | ||
| 
						 | 
					e947f39689 | ||
| 
						 | 
					b7cfcfb7f8 | ||
| 
						 | 
					06556a1744 | ||
| 
						 | 
					4abc5c624a | ||
| 
						 | 
					a0e9f529a4 | ||
| 
						 | 
					0286d94454 | ||
| 
						 | 
					938ead8f88 | ||
| 
						 | 
					6828f02c9a | ||
| 
						 | 
					47d216940c | ||
| 
						 | 
					01aad2c80a | ||
| 
						 | 
					71d7526b72 | ||
| 
						 | 
					1f575f1b1d | ||
| 
						 | 
					f18a93ab04 | ||
| 
						 | 
					03da458a06 | ||
| 
						 | 
					f48158b854 | ||
| 
						 | 
					b3e1a4c68c | ||
| 
						 | 
					849c0fe240 | ||
| 
						 | 
					ca0e2bc973 | ||
| 
						 | 
					13427e4561 | ||
| 
						 | 
					02ab618c97 | ||
| 
						 | 
					82a2d07262 | ||
| 
						 | 
					c96ab5101a | ||
| 
						 | 
					954ef7ef69 | ||
| 
						 | 
					c4471290c0 | ||
| 
						 | 
					5e76807bbd | ||
| 
						 | 
					af29811edd | ||
| 
						 | 
					53b1899e3c | ||
| 
						 | 
					174a4a8c89 | ||
| 
						 | 
					aba3e65f2c | ||
| 
						 | 
					0d9cfe1ae7 | ||
| 
						 | 
					95fdc5eef9 | ||
| 
						 | 
					5fe2085bba | ||
| 
						 | 
					a0ad17bb6c | ||
| 
						 | 
					ce1b4fe146 | ||
| 
						 | 
					ce2c95b2a2 | ||
| 
						 | 
					b05eaeb545 | ||
| 
						 | 
					9716a8f9f2 | ||
| 
						 | 
					74400f7348 | ||
| 
						 | 
					62ac293801 | ||
| 
						 | 
					c1e744b912 | ||
| 
						 | 
					847c52e47f | ||
| 
						 | 
					99e87569fd | ||
| 
						 | 
					640588bbfb | ||
| 
						 | 
					a31011e8e0 | ||
| 
						 | 
					38899535f8 | ||
| 
						 | 
					b6b1f0d0aa | ||
| 
						 | 
					798757762a | ||
| 
						 | 
					a5fcd09e75 | ||
| 
						 | 
					f769ce3ea4 | ||
| 
						 | 
					042a93e443 | ||
| 
						 | 
					cbb448c945 | ||
| 
						 | 
					462f79ec44 | ||
| 
						 | 
					08e9c1af6c | ||
| 
						 | 
					023c8d0b0a | ||
| 
						 | 
					673b102c5b | ||
| 
						 | 
					56a3fec1b1 | ||
| 
						 | 
					4654ef985b | ||
| 
						 | 
					0b62b30233 | ||
| 
						 | 
					7e102e28e1 | ||
| 
						 | 
					2dae04d038 | ||
| 
						 | 
					def38e38ec | ||
| 
						 | 
					d71c6bc5a4 | ||
| 
						 | 
					2d681b779c | ||
| 
						 | 
					3908cdf442 | ||
| 
						 | 
					3ea23631d4 | ||
| 
						 | 
					393f2c651d | ||
| 
						 | 
					f846335657 | ||
| 
						 | 
					2b024cd242 | ||
| 
						 | 
					18c77bf29e | ||
| 
						 | 
					4579dd5dc6 | ||
| 
						 | 
					c91e125934 | ||
| 
						 | 
					d4cf2f1882 | ||
| 
						 | 
					de808df47b | ||
| 
						 | 
					8e1589ece5 | ||
| 
						 | 
					49e747e670 | ||
| 
						 | 
					39b30b6ab7 | ||
| 
						 | 
					e405b8d120 | ||
| 
						 | 
					6cc4ee03df | ||
| 
						 | 
					8569c322be | ||
| 
						 | 
					dd73193c83 | ||
| 
						 | 
					4ad378ea43 | ||
| 
						 | 
					0ca6d7c6b1 | ||
| 
						 | 
					0f7e6fe10c | ||
| 
						 | 
					ca7fea9656 | ||
| 
						 | 
					eb02599870 | ||
| 
						 | 
					f4e723f3e7 | ||
| 
						 | 
					96c2201bef | ||
| 
						 | 
					cd357c75b2 | ||
| 
						 | 
					06f4536a61 | ||
| 
						 | 
					bf1966354a | ||
| 
						 | 
					1c80019a2c | ||
| 
						 | 
					090d848ea8 | ||
| 
						 | 
					9a0f732d75 | ||
| 
						 | 
					d79812b0fa | ||
| 
						 | 
					0d3118bed3 | ||
| 
						 | 
					4dd60b3b96 | ||
| 
						 | 
					d0f2876c3f | ||
| 
						 | 
					ac7da00048 | ||
| 
						 | 
					17f389bbbf | ||
| 
						 | 
					5bdae1675c | ||
| 
						 | 
					cb0369d885 | ||
| 
						 | 
					778f1092dd | ||
| 
						 | 
					5671876d1d | ||
| 
						 | 
					6f7af1524e | ||
| 
						 | 
					ac3e3cdc96 | ||
| 
						 | 
					953ad1bc10 | ||
| 
						 | 
					c82c1d4a9d | ||
| 
						 | 
					63d3f44abf | ||
| 
						 | 
					d680ba8617 | ||
| 
						 | 
					396f631458 | ||
| 
						 | 
					0d64ea89f7 | ||
| 
						 | 
					c1cd88a0eb | ||
| 
						 | 
					4a61a64f50 | ||
| 
						 | 
					6882a96446 | ||
| 
						 | 
					c1082a90bb | ||
| 
						 | 
					b7d7440cf5 | ||
| 
						 | 
					9bb2560cf7 | ||
| 
						 | 
					b82ccbb7a0 | ||
| 
						 | 
					a785abc324 | ||
| 
						 | 
					092ec334f0 | ||
| 
						 | 
					232616efce | ||
| 
						 | 
					a32640b0f4 | ||
| 
						 | 
					69fb1c3f9d | ||
| 
						 | 
					7f7c318cfc | ||
| 
						 | 
					aef838fc95 | ||
| 
						 | 
					b74ba295da | ||
| 
						 | 
					ba3a6e7262 | ||
| 
						 | 
					f70df1b887 | ||
| 
						 | 
					074309b7ee | ||
| 
						 | 
					77fa04a9bc | ||
| 
						 | 
					497cc4b35e | ||
| 
						 | 
					1e4149350c | ||
| 
						 | 
					8ce97163a2 | ||
| 
						 | 
					ac8b4ee04a | ||
| 
						 | 
					2d4287da34 | ||
| 
						 | 
					2d0c55eda2 | ||
| 
						 | 
					28e0be13f6 | ||
| 
						 | 
					b357e95cc4 | ||
| 
						 | 
					1cbde6e4fa | ||
| 
						 | 
					87a25f9032 | ||
| 
						 | 
					f9150e5421 | ||
| 
						 | 
					c79b16e11d | ||
| 
						 | 
					43ca6c02dc | ||
| 
						 | 
					0bbd03525e | ||
| 
						 | 
					7b65c3298f | ||
| 
						 | 
					13066cee60 | ||
| 
						 | 
					c0711f7f0f | ||
| 
						 | 
					8484721adb | ||
| 
						 | 
					de1915e48c | ||
| 
						 | 
					6e4a3b5529 | ||
| 
						 | 
					c6c3450643 | ||
| 
						 | 
					2cfa692136 | ||
| 
						 | 
					364836ca1c | ||
| 
						 | 
					0b7618888b | ||
| 
						 | 
					5c1d0b314a | ||
| 
						 | 
					2b7af70139 | ||
| 
						 | 
					1bf0b46b13 | ||
| 
						 | 
					27ad06a627 | ||
| 
						 | 
					cab161c85f | ||
| 
						 | 
					99cc4f075c | ||
| 
						 | 
					690233bccc | ||
| 
						 | 
					fd52057729 | ||
| 
						 | 
					8b94634428 | ||
| 
						 | 
					019a7aba4a | ||
| 
						 | 
					87c49f622e | ||
| 
						 | 
					29159a42d2 | ||
| 
						 | 
					1b1a6e7808 | ||
| 
						 | 
					385be6eb20 | ||
| 
						 | 
					d91e201e96 | ||
| 
						 | 
					2c720c746b | ||
| 
						 | 
					be1027e108 | ||
| 
						 | 
					447174741c | ||
| 
						 | 
					9a577e29e8 | ||
| 
						 | 
					dfbaf95618 | ||
| 
						 | 
					204cf1abb0 | ||
| 
						 | 
					5e63691972 | ||
| 
						 | 
					a9642be663 | ||
| 
						 | 
					f1e3dc2284 | ||
| 
						 | 
					70d65fe0e0 | ||
| 
						 | 
					6368c8b7d6 | ||
| 
						 | 
					1d5edd0882 | ||
| 
						 | 
					246528ae56 | ||
| 
						 | 
					670fc9d2f0 | ||
| 
						 | 
					ab3f0c6658 | ||
| 
						 | 
					9639515871 | ||
| 
						 | 
					5a97a0b6e4 | ||
| 
						 | 
					1bdb8633c1 | ||
| 
						 | 
					c97cbcb35b | ||
| 
						 | 
					9918762413 | ||
| 
						 | 
					ed7f60fbf9 | ||
| 
						 | 
					a12258fcd2 | ||
| 
						 | 
					e42979f2c5 | ||
| 
						 | 
					b1816a0408 | ||
| 
						 | 
					1a677f7aea | ||
| 
						 | 
					48c843c367 | ||
| 
						 | 
					90f14e251e | ||
| 
						 | 
					e9185df40e | ||
| 
						 | 
					ef54bde85b | ||
| 
						 | 
					5067cce541 | ||
| 
						 | 
					41a6fdea80 | ||
| 
						 | 
					ab8f6b415f | ||
| 
						 | 
					97e84e38df | ||
| 
						 | 
					316d5cdc85 | ||
| 
						 | 
					4c8319c0f5 | ||
| 
						 | 
					50ccbc13f6 | ||
| 
						 | 
					3518b4cd08 | ||
| 
						 | 
					a851544169 | ||
| 
						 | 
					2b8e4959fb | ||
| 
						 | 
					f3e67ac1bc | ||
| 
						 | 
					927ddaffeb | ||
| 
						 | 
					a63a3f58fd | ||
| 
						 | 
					f3db3d172f | ||
| 
						 | 
					e014492646 | ||
| 
						 | 
					4c22909e31 | ||
| 
						 | 
					8d85b33eb5 | ||
| 
						 | 
					0dd25e3606 | ||
| 
						 | 
					a40f6dce87 | ||
| 
						 | 
					08dbdb85ee | ||
| 
						 | 
					922180d794 | ||
| 
						 | 
					12ea44704a | ||
| 
						 | 
					4320afe3be | ||
| 
						 | 
					fd556cbfb6 | ||
| 
						 | 
					4f75a6e574 | ||
| 
						 | 
					7463ca9acc | ||
| 
						 | 
					571199434c | ||
| 
						 | 
					37b7185b5d | ||
| 
						 | 
					8c197cc55e | ||
| 
						 | 
					3e3d2ea2fc | ||
| 
						 | 
					770d19b862 | ||
| 
						 | 
					5965902e6e | ||
| 
						 | 
					7fbd8db184 | ||
| 
						 | 
					2e0fc87599 | ||
| 
						 | 
					488c06579e | ||
| 
						 | 
					9715f4786d | ||
| 
						 | 
					96821cedd7 | ||
| 
						 | 
					1656ef2997 | ||
| 
						 | 
					da8fa72f99 | ||
| 
						 | 
					6841fb0d1e | ||
| 
						 | 
					a0618e3e5e | ||
| 
						 | 
					ccb8a026c0 | ||
| 
						 | 
					fccbb9b34f | ||
| 
						 | 
					15a4b40c7f | ||
| 
						 | 
					f66c303201 | ||
| 
						 | 
					40e29b1976 | ||
| 
						 | 
					22341d4085 | ||
| 
						 | 
					cad4e62b24 | ||
| 
						 | 
					49b8142262 | ||
| 
						 | 
					f0e8ae723c | ||
| 
						 | 
					93c106c4b9 | ||
| 
						 | 
					74678cc2f8 | ||
| 
						 | 
					664b99853c | ||
| 
						 | 
					16bc9fea4d | ||
| 
						 | 
					ae6767430e | ||
| 
						 | 
					cea538154b | ||
| 
						 | 
					5f12fc006e | ||
| 
						 | 
					7363455fac | ||
| 
						 | 
					eaccfe8b29 | ||
| 
						 | 
					d2759c2135 | ||
| 
						 | 
					9c962484fe | ||
| 
						 | 
					e391116a48 | ||
| 
						 | 
					458cddc104 | ||
| 
						 | 
					3dff94c2e4 | ||
| 
						 | 
					dc347119e6 | ||
| 
						 | 
					6434450cd6 | ||
| 
						 | 
					f6f0420dfe | ||
| 
						 | 
					cfa3747ba9 | ||
| 
						 | 
					4f6235f701 | ||
| 
						 | 
					9a3bbbce91 | ||
| 
						 | 
					c69e361f1c | ||
| 
						 | 
					b5b22731f1 | ||
| 
						 | 
					924154d9f2 | ||
| 
						 | 
					b617a5be59 | ||
| 
						 | 
					7eea36bb48 | ||
| 
						 | 
					bbdb543844 | ||
| 
						 | 
					5059658219 | ||
| 
						 | 
					d9f0016bc5 | ||
| 
						 | 
					6b521df33c | ||
| 
						 | 
					72e2ffee20 | ||
| 
						 | 
					3a55fc1aab | ||
| 
						 | 
					8735ee6f5d | ||
| 
						 | 
					6519b2cb92 | ||
| 
						 | 
					03cd49447f | ||
| 
						 | 
					f598cd13a3 | ||
| 
						 | 
					f513939ebb | ||
| 
						 | 
					0ab8beb480 | ||
| 
						 | 
					f7daafa442 | ||
| 
						 | 
					f8be08d200 | ||
| 
						 | 
					777ab7e611 | ||
| 
						 | 
					a026fd201f | ||
| 
						 | 
					9e935d7e4c | ||
| 
						 | 
					975d3dc2ca | ||
| 
						 | 
					6888f2b35c | ||
| 
						 | 
					fbabb75207 | ||
| 
						 | 
					1489ccf695 | ||
| 
						 | 
					11302c699d | ||
| 
						 | 
					5685dcd445 | ||
| 
						 | 
					c91b5c717c | ||
| 
						 | 
					e334d78b87 | ||
| 
						 | 
					b2f82c3fe3 | ||
| 
						 | 
					11b1adadbd | ||
| 
						 | 
					1afd8b3942 | ||
| 
						 | 
					e105643595 | ||
| 
						 | 
					e0371fe4dc | ||
| 
						 | 
					5271ebd9a3 | ||
| 
						 | 
					5676d8cb76 | ||
| 
						 | 
					ce8b257413 | ||
| 
						 | 
					e371828067 | ||
| 
						 | 
					7722424462 | ||
| 
						 | 
					a14d1a03ec | ||
| 
						 | 
					ff1b7e09bc | ||
| 
						 | 
					731cae1428 | ||
| 
						 | 
					2765813cf6 | ||
| 
						 | 
					9c729e0a6d | ||
| 
						 | 
					baac3b4b5f | ||
| 
						 | 
					227cd06ffe | ||
| 
						 | 
					9b67b4b3ca | ||
| 
						 | 
					034292ad6a | ||
| 
						 | 
					946cbf67af | ||
| 
						 | 
					170afce58d | ||
| 
						 | 
					dbd665c210 | ||
| 
						 | 
					66ab08b1cf | ||
| 
						 | 
					0c5a65639d | ||
| 
						 | 
					f76a8084df | ||
| 
						 | 
					10cea23bd4 | ||
| 
						 | 
					a6c1b3a9ac | ||
| 
						 | 
					ba404b5e86 | ||
| 
						 | 
					8623f693d9 | ||
| 
						 | 
					11af1a2758 | ||
| 
						 | 
					9209c9fc1a | ||
| 
						 | 
					a111306bbc | ||
| 
						 | 
					2de625408a | ||
| 
						 | 
					56f74f2ec3 | ||
| 
						 | 
					8050bc7955 | ||
| 
						 | 
					9c789ad188 | ||
| 
						 | 
					2eae234023 | ||
| 
						 | 
					6c82fda2dd | ||
| 
						 | 
					d486601f41 | ||
| 
						 | 
					b52d109518 | ||
| 
						 | 
					31b4896209 | ||
| 
						 | 
					11e4b79a3a | ||
| 
						 | 
					9239e45ba6 | ||
| 
						 | 
					d7fcc7f6c6 | ||
| 
						 | 
					e0f12c41de | ||
| 
						 | 
					5b5dd0c057 | ||
| 
						 | 
					95d29597b7 | ||
| 
						 | 
					9bce3070ac | ||
| 
						 | 
					a9ffce0a25 | ||
| 
						 | 
					8e9eae0f8a | ||
| 
						 | 
					565d1065c3 | ||
| 
						 | 
					86b0c475d7 | ||
| 
						 | 
					84757d677f | ||
| 
						 | 
					522aefbb5a | ||
| 
						 | 
					74a6c7f384 | ||
| 
						 | 
					247cf8d279 | ||
| 
						 | 
					b7d135b353 | ||
| 
						 | 
					d58d092bc9 | ||
| 
						 | 
					9d9b559ef0 | ||
| 
						 | 
					06018c4685 | ||
| 
						 | 
					5f6d0ea210 | ||
| 
						 | 
					5a2e24bad8 | ||
| 
						 | 
					2330e18bf1 | ||
| 
						 | 
					0b977773d2 | ||
| 
						 | 
					62c419d603 | ||
| 
						 | 
					adc7fe123b | ||
| 
						 | 
					f352de9f1d | ||
| 
						 | 
					f62676b92d | ||
| 
						 | 
					32933c961b | ||
| 
						 | 
					a7bd03960c | ||
| 
						 | 
					5765e24f14 | ||
| 
						 | 
					3bcfce2881 | ||
| 
						 | 
					df63a389a5 | ||
| 
						 | 
					4e6ec1da04 | ||
| 
						 | 
					7740a1c6ef | ||
| 
						 | 
					c77f47abfa | ||
| 
						 | 
					8151f52add | ||
| 
						 | 
					e766a681aa | ||
| 
						 | 
					9e952fc877 | ||
| 
						 | 
					05861c77e7 | ||
| 
						 | 
					233bf734d3 | ||
| 
						 | 
					9fe6729b46 | ||
| 
						 | 
					72fbe87dc6 | ||
| 
						 | 
					cfce2335e9 | ||
| 
						 | 
					908eb7b85a | ||
| 
						 | 
					bf0870ac73 | ||
| 
						 | 
					f947eb318e | ||
| 
						 | 
					93fd0fd61f | ||
| 
						 | 
					bebf2787ea | ||
| 
						 | 
					f439123f38 | ||
| 
						 | 
					c035b0c3b2 | ||
| 
						 | 
					f058888738 | ||
| 
						 | 
					eabea024e8 | ||
| 
						 | 
					8eb57af5fe | ||
| 
						 | 
					1aad3392e5 | ||
| 
						 | 
					ba9f280885 | ||
| 
						 | 
					ce9449cf50 | ||
| 
						 | 
					97e4a93245 | ||
| 
						 | 
					3928b6bf48 | ||
| 
						 | 
					b1c4fe3625 | ||
| 
						 | 
					9e06f6f601 | ||
| 
						 | 
					d4443edc57 | ||
| 
						 | 
					6576774b51 | ||
| 
						 | 
					861b0ddd27 | ||
| 
						 | 
					3a66e306e4 | ||
| 
						 | 
					272c933315 | ||
| 
						 | 
					47aae74e4a | ||
| 
						 | 
					cf2562e772 | ||
| 
						 | 
					8e21c14607 | ||
| 
						 | 
					2bd83ca1c9 | ||
| 
						 | 
					69cbf46811 | ||
| 
						 | 
					095ce35378 | ||
| 
						 | 
					e7871ffaa8 | ||
| 
						 | 
					8d8a8041ec | ||
| 
						 | 
					3cbb7937fa | ||
| 
						 | 
					600dec1586 | ||
| 
						 | 
					b0c6fb8064 | ||
| 
						 | 
					ef8335d900 | ||
| 
						 | 
					505cdbec5c | ||
| 
						 | 
					167f3af2ce | ||
| 
						 | 
					84c15db551 | ||
| 
						 | 
					ca570cfdbc | ||
| 
						 | 
					af258e0dec | ||
| 
						 | 
					1ec7ac3ce7 | ||
| 
						 | 
					885982dc6e | ||
| 
						 | 
					a53955d8ab | ||
| 
						 | 
					9231f47796 | ||
| 
						 | 
					5c03115af1 | ||
| 
						 | 
					91174a91b9 | ||
| 
						 | 
					1e44804e33 | ||
| 
						 | 
					eaeb1870d4 | ||
| 
						 | 
					3a0d23c87e | ||
| 
						 | 
					b4f76582d4 | ||
| 
						 | 
					213a75dbf2 | ||
| 
						 | 
					5c0a48655f | ||
| 
						 | 
					8188e1537b | ||
| 
						 | 
					8f0edcd142 | ||
| 
						 | 
					a1195a19f5 | ||
| 
						 | 
					b05b50e67b | ||
| 
						 | 
					778ec213fb | ||
| 
						 | 
					7eeb37e1e4 | ||
| 
						 | 
					0a78c29760 | ||
| 
						 | 
					246ffa4571 | ||
| 
						 | 
					748365eed7 | ||
| 
						 | 
					6d114240b9 | ||
| 
						 | 
					426edadf98 | ||
| 
						 | 
					62aa714f00 | ||
| 
						 | 
					a8aae85a80 | ||
| 
						 | 
					b6436ff2c2 | ||
| 
						 | 
					02ee237fdf | ||
| 
						 | 
					0cceb1c708 | ||
| 
						 | 
					7e258a56da | ||
| 
						 | 
					fc875472d0 | ||
| 
						 | 
					e5e932d212 | ||
| 
						 | 
					ee8ba0b26c | ||
| 
						 | 
					838d25a1ec | ||
| 
						 | 
					5132cadf21 | ||
| 
						 | 
					80c38957bc | ||
| 
						 | 
					033d858cc2 | ||
| 
						 | 
					31fab3e8da | ||
| 
						 | 
					4da88a8d92 | ||
| 
						 | 
					8e228dc56a | ||
| 
						 | 
					436a376bb0 | ||
| 
						 | 
					2e36cc41ef | ||
| 
						 | 
					410aa5227b | ||
| 
						 | 
					054009a638 | ||
| 
						 | 
					71f080935a | ||
| 
						 | 
					e95f626827 | ||
| 
						 | 
					472bde404f | ||
| 
						 | 
					1850a49bd0 | ||
| 
						 | 
					bec9e0da7a | ||
| 
						 | 
					5ece777974 | ||
| 
						 | 
					58c7977cfa | ||
| 
						 | 
					b14d0e0590 | ||
| 
						 | 
					f3c751067a | ||
| 
						 | 
					f9073fce9b | ||
| 
						 | 
					288d2fb959 | ||
| 
						 | 
					6720e9472f | ||
| 
						 | 
					9890b00082 | ||
| 
						 | 
					58dc480ffd | ||
| 
						 | 
					d2eec3a610 | ||
| 
						 | 
					557068c087 | ||
| 
						 | 
					767d6bfb87 | ||
| 
						 | 
					09befa1905 | ||
| 
						 | 
					982baa7be9 | ||
| 
						 | 
					e09632f986 | ||
| 
						 | 
					24abc46963 | ||
| 
						 | 
					bdc98ffba9 | ||
| 
						 | 
					38424743ce | ||
| 
						 | 
					1dfad80565 | ||
| 
						 | 
					8876bc0548 | ||
| 
						 | 
					3550ec4f1f | ||
| 
						 | 
					9a193d8825 | ||
| 
						 | 
					0dc42a1e74 | ||
| 
						 | 
					4b55c2a3a9 | ||
| 
						 | 
					470df4b905 | ||
| 
						 | 
					96a099f93e | ||
| 
						 | 
					95f9968e5e | ||
| 
						 | 
					7e70181723 | ||
| 
						 | 
					d76c85a301 | ||
| 
						 | 
					31a352d191 | ||
| 
						 | 
					d6847aed10 | ||
| 
						 | 
					17e3dd1c62 | ||
| 
						 | 
					9dff4cc051 | ||
| 
						 | 
					60ed228e71 | ||
| 
						 | 
					c1c96de01c | ||
| 
						 | 
					6b6596202b | ||
| 
						 | 
					1444ba8d78 | ||
| 
						 | 
					1fac96e4d6 | ||
| 
						 | 
					4d5d543e3c | ||
| 
						 | 
					da70ff710c | ||
| 
						 | 
					7a01a45bc4 | ||
| 
						 | 
					21f213edfb | ||
| 
						 | 
					e14d4443a2 | ||
| 
						 | 
					257e206da6 | ||
| 
						 | 
					a2cb72537a | ||
| 
						 | 
					62de849772 | ||
| 
						 | 
					405b4a7edb | ||
| 
						 | 
					33d50ef662 | ||
| 
						 | 
					06064bb512 | ||
| 
						 | 
					e90c772946 | ||
| 
						 | 
					15a99e3d9d | ||
| 
						 | 
					767f68cc80 | ||
| 
						 | 
					e84240d422 | ||
| 
						 | 
					054810ec0e | ||
| 
						 | 
					b67358328e | ||
| 
						 | 
					35f7324c23 | ||
| 
						 | 
					b0759f8712 | ||
| 
						 | 
					a2b21737b9 | ||
| 
						 | 
					12ba413c08 | ||
| 
						 | 
					5d818c3051 | ||
| 
						 | 
					09ad8001be | ||
| 
						 | 
					75573c44e5 | ||
| 
						 | 
					9c2e306af3 | ||
| 
						 | 
					fb92ba64a0 | ||
| 
						 | 
					bc2e519a89 | ||
| 
						 | 
					92afda6ccc | ||
| 
						 | 
					a03dd7a68f | ||
| 
						 | 
					703126f027 | ||
| 
						 | 
					2cf9fcdac9 | ||
| 
						 | 
					75fa9917d0 | ||
| 
						 | 
					db2b98359b | ||
| 
						 | 
					673eadec2c | ||
| 
						 | 
					27a186cd5d | ||
| 
						 | 
					3f45ed82dc | ||
| 
						 | 
					8e93f12ee8 | ||
| 
						 | 
					4aeb94b801 | ||
| 
						 | 
					b975f15d54 | ||
| 
						 | 
					1b266dabf5 | ||
| 
						 | 
					f43c814917 | ||
| 
						 | 
					55519bbb2d | ||
| 
						 | 
					edf0bfb52b | ||
| 
						 | 
					e186bf96b4 | ||
| 
						 | 
					ee86c3f53d | ||
| 
						 | 
					e1a228fbce | ||
| 
						 | 
					84d148778e | ||
| 
						 | 
					84fa704c6f | ||
| 
						 | 
					a74c55cd8f | ||
| 
						 | 
					ac7d07851c | ||
| 
						 | 
					62bad77124 | ||
| 
						 | 
					e1999b1dab | ||
| 
						 | 
					3398f6cc21 | ||
| 
						 | 
					7f0dae3276 | ||
| 
						 | 
					127640b449 | ||
| 
						 | 
					cdfb093fc3 | ||
| 
						 | 
					cbbd384040 | ||
| 
						 | 
					fa470a84a0 | ||
| 
						 | 
					2a4a0a340d | ||
| 
						 | 
					64a3b11be6 | ||
| 
						 | 
					79479f0240 | ||
| 
						 | 
					21419a7413 | ||
| 
						 | 
					531b2cf7e9 | ||
| 
						 | 
					ad2cb8b4f6 | ||
| 
						 | 
					d3407350d8 | ||
| 
						 | 
					e2e3d5ce0c | ||
| 
						 | 
					8aa5b77c87 | ||
| 
						 | 
					1ad2ecb66f | ||
| 
						 | 
					2a82c7cf25 | ||
| 
						 | 
					d36bcdf5ca | ||
| 
						 | 
					3ae76679c7 | ||
| 
						 | 
					e6d0b6eca3 | ||
| 
						 | 
					0c0334b0e3 | ||
| 
						 | 
					dbd1e38482 | ||
| 
						 | 
					1b24cca969 | ||
| 
						 | 
					7de82c29c8 | ||
| 
						 | 
					608217d8d0 | ||
| 
						 | 
					2adca9cdc6 | ||
| 
						 | 
					09feda5cec | ||
| 
						 | 
					ce457a54ff | ||
| 
						 | 
					90ba7e21e1 | ||
| 
						 | 
					224551f732 | ||
| 
						 | 
					b56bce4fc7 | ||
| 
						 | 
					0981259ada | ||
| 
						 | 
					5c83b4c93f | ||
| 
						 | 
					75e0770d96 | ||
| 
						 | 
					f7fd2ff72e | ||
| 
						 | 
					bd3576d2dd | ||
| 
						 | 
					7d7d2cbcb0 | ||
| 
						 | 
					8d111f4a47 | ||
| 
						 | 
					8a41eb70cc | ||
| 
						 | 
					31ff97b28a | ||
| 
						 | 
					8bc1431edd | ||
| 
						 | 
					f5eac85edc | ||
| 
						 | 
					d53ff9abf3 | ||
| 
						 | 
					dcbe935125 | ||
| 
						 | 
					2ec765c81d | ||
| 
						 | 
					d797727b20 | ||
| 
						 | 
					54a29df0ec | ||
| 
						 | 
					fa2b248f23 | ||
| 
						 | 
					7af62c3cbb | ||
| 
						 | 
					ff71222024 | ||
| 
						 | 
					b31b04d951 | ||
| 
						 | 
					10243d97fd | ||
| 
						 | 
					d5a2ea4b73 | ||
| 
						 | 
					3f5868d23c | ||
| 
						 | 
					898110db6d | ||
| 
						 | 
					66e08777bd | ||
| 
						 | 
					1c3e0a1976 | ||
| 
						 | 
					84a370a400 | ||
| 
						 | 
					93c5624f04 | ||
| 
						 | 
					699dbecaf7 | ||
| 
						 | 
					397f703892 | ||
| 
						 | 
					884e8ec615 | ||
| 
						 | 
					9d5cceac6f | ||
| 
						 | 
					ca8e5b9b8a | ||
| 
						 | 
					8d1157c71c | ||
| 
						 | 
					c8b4185079 | ||
| 
						 | 
					1c10afc32a | ||
| 
						 | 
					8450bddfaf | ||
| 
						 | 
					a0d0c6a61b | ||
| 
						 | 
					303c002898 | ||
| 
						 | 
					a5ab0532ca | ||
| 
						 | 
					e40b7abeed | ||
| 
						 | 
					7e797a06c3 | ||
| 
						 | 
					8cf6522820 | ||
| 
						 | 
					2126f5e04d | ||
| 
						 | 
					33f7bc9683 | ||
| 
						 | 
					5a9bab32b9 | ||
| 
						 | 
					0894315642 | ||
| 
						 | 
					a2aa81683f | ||
| 
						 | 
					7d5d27b9a3 | ||
| 
						 | 
					12d7d32f24 | ||
| 
						 | 
					5b640028cb | ||
| 
						 | 
					135a1dcaac | ||
| 
						 | 
					559b52ac46 | ||
| 
						 | 
					ce0d9f049a | ||
| 
						 | 
					5612f93f37 | ||
| 
						 | 
					4769633350 | ||
| 
						 | 
					fb3214f92f | ||
| 
						 | 
					6ceba838e2 | ||
| 
						 | 
					31a674d8c9 | ||
| 
						 | 
					b282fdae25 | ||
| 
						 | 
					c2eb65ba7c | ||
| 
						 | 
					52c4409240 | ||
| 
						 | 
					f020bef164 | ||
| 
						 | 
					4565c3e36f | ||
| 
						 | 
					5fd1e150f7 | ||
| 
						 | 
					98f1c689a5 | ||
| 
						 | 
					8e7f966bf3 | ||
| 
						 | 
					744029c154 | ||
| 
						 | 
					ef0a535485 | ||
| 
						 | 
					49dce898f0 | ||
| 
						 | 
					4f5fac8011 | ||
| 
						 | 
					d872c55c20 | ||
| 
						 | 
					afd1f9e80b | ||
| 
						 | 
					9de649ff05 | ||
| 
						 | 
					aeef69b102 | ||
| 
						 | 
					9263e88294 | ||
| 
						 | 
					dee75ecf9c | ||
| 
						 | 
					20b85fdd76 | ||
| 
						 | 
					0f3e604589 | ||
| 
						 | 
					661b361b4b | ||
| 
						 | 
					0b3f827cf5 | ||
| 
						 | 
					8051996a5b | ||
| 
						 | 
					5b1b044606 | ||
| 
						 | 
					dc1f607aff | ||
| 
						 | 
					d35ea5b00b | ||
| 
						 | 
					d500de1672 | ||
| 
						 | 
					b3ca645f47 | ||
| 
						 | 
					65d4927b8d | ||
| 
						 | 
					3a1a8467bd | ||
| 
						 | 
					8e8a8a5f5f | ||
| 
						 | 
					7f89714e64 | ||
| 
						 | 
					69bb35ed72 | ||
| 
						 | 
					0fda2e3788 | ||
| 
						 | 
					c9e4bc2f07 | ||
| 
						 | 
					dd1462fd18 | ||
| 
						 | 
					f223f0c054 | ||
| 
						 | 
					b1fe6b43f4 | ||
| 
						 | 
					4eb77b2679 | ||
| 
						 | 
					81c8ee091c | ||
| 
						 | 
					0e88cb260b | ||
| 
						 | 
					801294f873 | ||
| 
						 | 
					7185e2d6cd | ||
| 
						 | 
					7e05db957f | ||
| 
						 | 
					dea9babc59 | ||
| 
						 | 
					299b36eaa4 | ||
| 
						 | 
					c66527497c | ||
| 
						 | 
					0494855723 | ||
| 
						 | 
					e5f3045fbf | ||
| 
						 | 
					9f5f32c9b0 | ||
| 
						 | 
					5dfc369ffc | ||
| 
						 | 
					87bc2c00f8 | ||
| 
						 | 
					5f8d5c967f | ||
| 
						 | 
					a79b03ce6f | ||
| 
						 | 
					d575d2924c | ||
| 
						 | 
					836b286fe9 | ||
| 
						 | 
					191a585342 | ||
| 
						 | 
					6dc08dd681 | ||
| 
						 | 
					1314c344ac | ||
| 
						 | 
					cc98d9b68c | ||
| 
						 | 
					bf6841f5c1 | ||
| 
						 | 
					0d029f79f0 | ||
| 
						 | 
					6e6acfd4b9 | ||
| 
						 | 
					dd500770e2 | ||
| 
						 | 
					45b8be21bc | ||
| 
						 | 
					e9b9fa1846 | ||
| 
						 | 
					d10c5c2209 | ||
| 
						 | 
					065e106f25 | ||
| 
						 | 
					ddeee82c63 | ||
| 
						 | 
					bcaa88342b | ||
| 
						 | 
					0973910fbb | ||
| 
						 | 
					73bfb9ad6a | ||
| 
						 | 
					8b1a3a9238 | ||
| 
						 | 
					01378334dc | ||
| 
						 | 
					1e103eafb3 | ||
| 
						 | 
					8cd8a7b7a2 | ||
| 
						 | 
					67a4728511 | ||
| 
						 | 
					0c28ae22f1 | ||
| 
						 | 
					b5929507e3 | ||
| 
						 | 
					61f217eec2 | ||
| 
						 | 
					d02f751ce1 | ||
| 
						 | 
					79df9d6272 | ||
| 
						 | 
					281c52c054 | ||
| 
						 | 
					6184255d0c | ||
| 
						 | 
					f5d7a031a3 | ||
| 
						 | 
					b64f825671 | ||
| 
						 | 
					73d2257d97 | ||
| 
						 | 
					540e6c172e | ||
| 
						 | 
					b736d909ee | ||
| 
						 | 
					a9be3af5ad | ||
| 
						 | 
					47339f6179 | ||
| 
						 | 
					a1e464f94a | ||
| 
						 | 
					c74b3a6037 | ||
| 
						 | 
					5043fc9fd5 | ||
| 
						 | 
					8e945b5efb | ||
| 
						 | 
					cd46aa4ae7 | ||
| 
						 | 
					4c0c739288 | ||
| 
						 | 
					45050a7f3d | ||
| 
						 | 
					a75b81ad95 | ||
| 
						 | 
					9c4711c73a | ||
| 
						 | 
					b0b7b1c5ae | ||
| 
						 | 
					462ba4f6b6 | ||
| 
						 | 
					5460ffdf82 | ||
| 
						 | 
					0b86eb3ea6 | ||
| 
						 | 
					574e991aa5 | ||
| 
						 | 
					4fd53220b6 | ||
| 
						 | 
					7393480047 | ||
| 
						 | 
					50cfd175c9 | ||
| 
						 | 
					eaecdc71eb | ||
| 
						 | 
					c76b0f751f | ||
| 
						 | 
					2b6405faa5 | ||
| 
						 | 
					6e781e8e07 | ||
| 
						 | 
					ad38bedbac | ||
| 
						 | 
					0c6c96d44f | ||
| 
						 | 
					7ebf7674be | ||
| 
						 | 
					6d31193858 | ||
| 
						 | 
					dd3c43c532 | ||
| 
						 | 
					09be75a480 | ||
| 
						 | 
					ca20f59bd0 | ||
| 
						 | 
					bf57da0717 | ||
| 
						 | 
					018b4ee9bb | ||
| 
						 | 
					6d2fa146a9 | ||
| 
						 | 
					ab96338315 | ||
| 
						 | 
					92df96077e | ||
| 
						 | 
					ec577822f9 | ||
| 
						 | 
					806115771c | ||
| 
						 | 
					995e79e317 | ||
| 
						 | 
					e27cc13f8e | ||
| 
						 | 
					4321a4ff7a | ||
| 
						 | 
					c6fdd7dc26 | ||
| 
						 | 
					61f5b6f338 | ||
| 
						 | 
					779cc0bca9 | ||
| 
						 | 
					169cc7a112 | ||
| 
						 | 
					1a01cad3ae | ||
| 
						 | 
					5d3bb220c8 | ||
| 
						 | 
					abb3e53f9b | ||
| 
						 | 
					9d07a3c9a5 | ||
| 
						 | 
					ff6a143b37 | ||
| 
						 | 
					85f48f7e93 | ||
| 
						 | 
					6cda1005f8 | ||
| 
						 | 
					90b8bbb8da | ||
| 
						 | 
					5cc146f344 | ||
| 
						 | 
					4cd401e401 | ||
| 
						 | 
					d943e37241 | ||
| 
						 | 
					59b82e4f69 | ||
| 
						 | 
					8e10f2b3ac | ||
| 
						 | 
					cb145b995b | ||
| 
						 | 
					4997138a06 | ||
| 
						 | 
					95dc05bc6d | ||
| 
						 | 
					f36cd05b22 | ||
| 
						 | 
					b30ff644ad | ||
| 
						 | 
					8fb04b9803 | ||
| 
						 | 
					8310d7df75 | ||
| 
						 | 
					bb8e7ab756 | ||
| 
						 | 
					99f53c826d | ||
| 
						 | 
					2dcf04d160 | ||
| 
						 | 
					f5fedc0497 | ||
| 
						 | 
					e4aac1cb68 | ||
| 
						 | 
					8d8dbb67db | ||
| 
						 | 
					6b691a5c85 | ||
| 
						 | 
					3edd7ed15d | ||
| 
						 | 
					0ae645db10 | ||
| 
						 | 
					434c5dd37c | ||
| 
						 | 
					a723979da8 | ||
| 
						 | 
					df82f5c85c | ||
| 
						 | 
					46e8ddaf64 | ||
| 
						 | 
					22a4f969b9 | ||
| 
						 | 
					5e85b6abaf | ||
| 
						 | 
					c933b45e02 | ||
| 
						 | 
					6c5d4168ff | ||
| 
						 | 
					d0521390a5 | ||
| 
						 | 
					41b731f2f8 | ||
| 
						 | 
					8de421b6d9 | ||
| 
						 | 
					9587030eb9 | ||
| 
						 | 
					c83e523d7f | ||
| 
						 | 
					e778802f53 | ||
| 
						 | 
					d77b3054cd | ||
| 
						 | 
					cfdcfede9c | ||
| 
						 | 
					1d48dd0019 | ||
| 
						 | 
					c5db363e1b | ||
| 
						 | 
					ddb25f88c2 | ||
| 
						 | 
					2fef6785c6 | ||
| 
						 | 
					953937bdc6 | ||
| 
						 | 
					abed0b8a1f | ||
| 
						 | 
					28db340142 | ||
| 
						 | 
					c1cf1eecdb | ||
| 
						 | 
					28a98809d1 | ||
| 
						 | 
					d91f8c3ce8 | ||
| 
						 | 
					9e7bd9b5fe | ||
| 
						 | 
					f0f1b4e400 | ||
| 
						 | 
					8f7de4f04c | ||
| 
						 | 
					52a48254c7 | ||
| 
						 | 
					0490a86d01 | ||
| 
						 | 
					baf748ba09 | ||
| 
						 | 
					dd5ae70333 | ||
| 
						 | 
					5fbe91d86b | ||
| 
						 | 
					5fd4e2b16b | ||
| 
						 | 
					f73e07cf42 | ||
| 
						 | 
					a36a1a5146 | ||
| 
						 | 
					f9a2593163 | ||
| 
						 | 
					2f0cd19533 | ||
| 
						 | 
					268c2102e3 | ||
| 
						 | 
					4211a99ba0 | ||
| 
						 | 
					fc8ee06b4d | ||
| 
						 | 
					7c7c88515f | ||
| 
						 | 
					c0035435a9 | ||
| 
						 | 
					3bb307c10c | ||
| 
						 | 
					94c95d04c6 | ||
| 
						 | 
					5a88a6eabf | ||
| 
						 | 
					215c24fc8e | ||
| 
						 | 
					c7ac31e26e | ||
| 
						 | 
					9d892e2855 | ||
| 
						 | 
					28847dd153 | ||
| 
						 | 
					a5a47e4afb | ||
| 
						 | 
					a8da89186c | ||
| 
						 | 
					dae08db4a0 | ||
| 
						 | 
					adbfb08354 | ||
| 
						 | 
					d2e26dccd1 | ||
| 
						 | 
					acafc0b4ae | ||
| 
						 | 
					3f90e6793f | ||
| 
						 | 
					44a25707fd | ||
| 
						 | 
					fa3da3cf09 | ||
| 
						 | 
					bacad008eb | ||
| 
						 | 
					bc9cd58e8a | ||
| 
						 | 
					f4ea5ec563 | ||
| 
						 | 
					1ad86e8e7d | ||
| 
						 | 
					f4371a650a | ||
| 
						 | 
					20232a9ca5 | ||
| 
						 | 
					e8d628156f | ||
| 
						 | 
					121bd68d1c | ||
| 
						 | 
					cf897932ca | ||
| 
						 | 
					a0960a1d5b | ||
| 
						 | 
					ba8608012a | ||
| 
						 | 
					2fb50a2905 | ||
| 
						 | 
					e709e485d7 | ||
| 
						 | 
					96219db838 | ||
| 
						 | 
					b822aa562f | ||
| 
						 | 
					99aab1619f | ||
| 
						 | 
					6b01fa6490 | ||
| 
						 | 
					45ee1ef628 | ||
| 
						 | 
					3dcc1ffc52 | ||
| 
						 | 
					2613c1fa2f | ||
| 
						 | 
					6d02d8e444 | ||
| 
						 | 
					4f49cc7493 | ||
| 
						 | 
					71308064cc | ||
| 
						 | 
					0f247decd0 | ||
| 
						 | 
					bc37a6b81c | ||
| 
						 | 
					ee0508d411 | ||
| 
						 | 
					7c0f3d09b3 | ||
| 
						 | 
					67d5ac039f | ||
| 
						 | 
					8d8c7266d4 | ||
| 
						 | 
					cfcefcbe2a | ||
| 
						 | 
					4b518c2601 | ||
| 
						 | 
					2f0eae31af | ||
| 
						 | 
					785cdf2048 | ||
| 
						 | 
					ba423adddd | ||
| 
						 | 
					67da3df72e | ||
| 
						 | 
					0e9fc7115b | ||
| 
						 | 
					1b276f3012 | ||
| 
						 | 
					85b283fff5 | ||
| 
						 | 
					d343d272f5 | ||
| 
						 | 
					8af354d449 | ||
| 
						 | 
					36108adbb8 | ||
| 
						 | 
					f5904406d0 | ||
| 
						 | 
					6e9f108dd7 | ||
| 
						 | 
					72e442a3a6 | ||
| 
						 | 
					74355a3554 | ||
| 
						 | 
					eee591a466 | ||
| 
						 | 
					738769ff43 | ||
| 
						 | 
					4109b97c4b | ||
| 
						 | 
					e42263c226 | ||
| 
						 | 
					8b8839ba88 | ||
| 
						 | 
					4f0a2bce80 | ||
| 
						 | 
					e98b5b58a0 | ||
| 
						 | 
					d56128f014 | ||
| 
						 | 
					5ea177cfbc | ||
| 
						 | 
					b4cadc6e13 | ||
| 
						 | 
					0f423567a7 | ||
| 
						 | 
					f4f2fe40e8 | ||
| 
						 | 
					afb2306346 | ||
| 
						 | 
					e2e044faa1 | ||
| 
						 | 
					0b415fb0ed | ||
| 
						 | 
					199d59e5a1 | ||
| 
						 | 
					b29524c15b | ||
| 
						 | 
					b4899bb1fa | ||
| 
						 | 
					2a04d1e453 | ||
| 
						 | 
					999e5715f2 | ||
| 
						 | 
					29c0fccba8 | ||
| 
						 | 
					463dc742ff | ||
| 
						 | 
					cadf126b99 | ||
| 
						 | 
					bc420ac592 | ||
| 
						 | 
					abd4c91527 | ||
| 
						 | 
					47c389e7cc | ||
| 
						 | 
					7e37e72a3d | ||
| 
						 | 
					637691e6b4 | ||
| 
						 | 
					381380206b | ||
| 
						 | 
					035eb85d2f | ||
| 
						 | 
					f11f8d580e | ||
| 
						 | 
					defba77f39 | ||
| 
						 | 
					83ec54b40d | ||
| 
						 | 
					e476f4256a | ||
| 
						 | 
					047f1a4466 | ||
| 
						 | 
					38ef9a0c70 | ||
| 
						 | 
					15542b2847 | ||
| 
						 | 
					b241fefd98 | ||
| 
						 | 
					cbb7792613 | ||
| 
						 | 
					5d11adc8af | ||
| 
						 | 
					d4d2f98c59 | ||
| 
						 | 
					0cc395796b | ||
| 
						 | 
					6420b77fec | ||
| 
						 | 
					6e0642407d | ||
| 
						 | 
					86fd166eeb | ||
| 
						 | 
					cdb8115660 | ||
| 
						 | 
					6b50354041 | ||
| 
						 | 
					d10f052be5 | ||
| 
						 | 
					5a0611297b | ||
| 
						 | 
					54d9976c79 | ||
| 
						 | 
					c0e538e117 | ||
| 
						 | 
					84107e6ca8 | ||
| 
						 | 
					9ea0e64de7 | ||
| 
						 | 
					a5e035b54a | ||
| 
						 | 
					1f0f37b0a4 | ||
| 
						 | 
					dd56626ecc | ||
| 
						 | 
					efadf60f9c | ||
| 
						 | 
					26a0846fc1 | ||
| 
						 | 
					05dc84b82b | ||
| 
						 | 
					7d3ce7ba37 | ||
| 
						 | 
					cba5068d10 | ||
| 
						 | 
					f2595f5402 | ||
| 
						 | 
					1756d405cc | ||
| 
						 | 
					116e315303 | ||
| 
						 | 
					bc3482442a | ||
| 
						 | 
					a49034aba9 | ||
| 
						 | 
					03e20a1a44 | ||
| 
						 | 
					3eb0ed6d91 | ||
| 
						 | 
					6242bb9c63 | ||
| 
						 | 
					63493c7b06 | ||
| 
						 | 
					f415fa3243 | ||
| 
						 | 
					dfca822f79 | ||
| 
						 | 
					2c6ccde1f7 | ||
| 
						 | 
					3b52c2e715 | ||
| 
						 | 
					1c308226fe | ||
| 
						 | 
					0b903ec018 | ||
| 
						 | 
					0de6fd7361 | ||
| 
						 | 
					bb8f3c5879 | ||
| 
						 | 
					988788f697 | ||
| 
						 | 
					f9b2e53052 | ||
| 
						 | 
					79a474e8f2 | ||
| 
						 | 
					924acc5451 | ||
| 
						 | 
					d00b7aad5a | ||
| 
						 | 
					9985bed331 | ||
| 
						 | 
					789285aa96 | ||
| 
						 | 
					a06c602e6f | ||
| 
						 | 
					8d697db1d0 | ||
| 
						 | 
					06c6849124 | ||
| 
						 | 
					726bae3f0f | ||
| 
						 | 
					eb90a483ad | ||
| 
						 | 
					49bc262459 | ||
| 
						 | 
					b4f10a7e92 | ||
| 
						 | 
					4f43d0e71f | ||
| 
						 | 
					1efa9c33c0 | ||
| 
						 | 
					74d7abc2ab | ||
| 
						 | 
					c707fb2741 | ||
| 
						 | 
					aa2b6baf4f | ||
| 
						 | 
					7283ecea22 | ||
| 
						 | 
					754048577b | ||
| 
						 | 
					090db4f475 | ||
| 
						 | 
					15d21c2df4 | ||
| 
						 | 
					ea14a91f64 | ||
| 
						 | 
					4b8f2ce648 | ||
| 
						 | 
					90a52cecaf | ||
| 
						 | 
					def9f43151 | ||
| 
						 | 
					8aef252bf4 | ||
| 
						 | 
					4f9b306ca7 | ||
| 
						 | 
					74cc3698bd | ||
| 
						 | 
					a4ed5532a8 | ||
| 
						 | 
					1b3b0a54d1 | ||
| 
						 | 
					7be304acdb | ||
| 
						 | 
					6b313a7365 | ||
| 
						 | 
					1745a3fb9f | ||
| 
						 | 
					55ab3bf7f9 | ||
| 
						 | 
					15799403ad | ||
| 
						 | 
					3a1daca9ef | ||
| 
						 | 
					f2f351ce9c | ||
| 
						 | 
					04fa4cb721 | ||
| 
						 | 
					a43aa73e3b | ||
| 
						 | 
					0849d13811 | ||
| 
						 | 
					e527ba09a6 | ||
| 
						 | 
					60e31c3a4b | ||
| 
						 | 
					a040ea8251 | ||
| 
						 | 
					06ab81f9f7 | ||
| 
						 | 
					abf87f79f7 | ||
| 
						 | 
					deff75b634 | ||
| 
						 | 
					0c8a1281d0 | ||
| 
						 | 
					189b6a6062 | ||
| 
						 | 
					aa066b9e6e | ||
| 
						 | 
					a67a9694f7 | ||
| 
						 | 
					57c86f79bb | ||
| 
						 | 
					4004dbb7f6 | ||
| 
						 | 
					c74f1eb9bd | ||
| 
						 | 
					ee5425d97d | ||
| 
						 | 
					0ca5f8b15c | ||
| 
						 | 
					6b056c414d | ||
| 
						 | 
					0be9747b39 | ||
| 
						 | 
					3d8accc3ae | ||
| 
						 | 
					a49498969e | ||
| 
						 | 
					d08d8da432 | ||
| 
						 | 
					413c4f45ed | ||
| 
						 | 
					a8236c8c32 | ||
| 
						 | 
					1750ebcba9 | ||
| 
						 | 
					5236efdbf5 | ||
| 
						 | 
					388ff0b076 | ||
| 
						 | 
					6013fa8395 | ||
| 
						 | 
					e3577ba07b | ||
| 
						 | 
					5c00879ef0 | ||
| 
						 | 
					9becf66621 | ||
| 
						 | 
					e2d795cb96 | ||
| 
						 | 
					08853ba82d | ||
| 
						 | 
					c09c3c4b2f | ||
| 
						 | 
					4e31df2cd7 | ||
| 
						 | 
					e4119b9311 | ||
| 
						 | 
					4a71b90deb | ||
| 
						 | 
					436d318c80 | ||
| 
						 | 
					be560e7b67 | ||
| 
						 | 
					9151d39645 | ||
| 
						 | 
					0628728556 | ||
| 
						 | 
					65b8ca07a5 | ||
| 
						 | 
					55a9cc6e47 | ||
| 
						 | 
					3773d138ce | ||
| 
						 | 
					4a16967b45 | ||
| 
						 | 
					c91531d9fe | ||
| 
						 | 
					d5083e0142 | ||
| 
						 | 
					8073036dd6 | ||
| 
						 | 
					0517335e3c | ||
| 
						 | 
					483fdf1883 | ||
| 
						 | 
					155d7a0e1d | ||
| 
						 | 
					2c2cba0d13 | ||
| 
						 | 
					df16c60842 | ||
| 
						 | 
					175b0942ec | ||
| 
						 | 
					c45beb91b3 | ||
| 
						 | 
					bf5dcd135f | ||
| 
						 | 
					119f62881a | ||
| 
						 | 
					bceacf938f | ||
| 
						 | 
					068197a70c | ||
| 
						 | 
					6457ad15a8 | ||
| 
						 | 
					643aaa1979 | ||
| 
						 | 
					142fcca8ca | ||
| 
						 | 
					ebbfd76c69 | ||
| 
						 | 
					547ff5e6a9 | ||
| 
						 | 
					7ec218eb4a | ||
| 
						 | 
					9f7646da25 | ||
| 
						 | 
					29d2824788 | ||
| 
						 | 
					c106c6132c | ||
| 
						 | 
					a83d7d1491 | ||
| 
						 | 
					6ccec43933 | ||
| 
						 | 
					72b35c4a26 | ||
| 
						 | 
					f614496cfb | ||
| 
						 | 
					df0af1a7d8 | ||
| 
						 | 
					9b3086fe38 | ||
| 
						 | 
					d433f9014e | ||
| 
						 | 
					351d899878 | ||
| 
						 | 
					5810a5f4c7 | ||
| 
						 | 
					058bf5596b | ||
| 
						 | 
					b621d77258 | ||
| 
						 | 
					d1f4c83ce5 | ||
| 
						 | 
					bc2646ef11 | ||
| 
						 | 
					a96e7810e2 | ||
| 
						 | 
					679ab7c39e | ||
| 
						 | 
					f33fbc2e1e | ||
| 
						 | 
					59ff713462 | ||
| 
						 | 
					ae3d365f99 | ||
| 
						 | 
					31df0990a1 | ||
| 
						 | 
					5f0451daa2 | ||
| 
						 | 
					4c441f30bb | ||
| 
						 | 
					fc8c1a5c67 | ||
| 
						 | 
					154adc8963 | ||
| 
						 | 
					e04a6c2b35 | ||
| 
						 | 
					0172f988c7 | ||
| 
						 | 
					79dfa97555 | ||
| 
						 | 
					9fe84296a4 | ||
| 
						 | 
					288cb84fb4 | ||
| 
						 | 
					7ae01d4adc | ||
| 
						 | 
					b6cff93dcf | ||
| 
						 | 
					a0a5407901 | ||
| 
						 | 
					8938272b32 | ||
| 
						 | 
					92c046cac0 | ||
| 
						 | 
					a27598bf7e | ||
| 
						 | 
					b2347661ce | ||
| 
						 | 
					fd9d35f56e | ||
| 
						 | 
					f3d2e56bb3 | ||
| 
						 | 
					8a5222113b | ||
| 
						 | 
					a224de3f5d | ||
| 
						 | 
					f317aa4c9c | ||
| 
						 | 
					d0cc3d3460 | ||
| 
						 | 
					9535d20282 | ||
| 
						 | 
					41c62a8e56 | ||
| 
						 | 
					834eeef995 | ||
| 
						 | 
					9aeaf1b4a7 | ||
| 
						 | 
					69d1dfba24 | ||
| 
						 | 
					1bbd21eec5 | ||
| 
						 | 
					9b5cc156f3 | ||
| 
						 | 
					6f93539970 | ||
| 
						 | 
					8039257dbc | ||
| 
						 | 
					b13a155492 | ||
| 
						 | 
					fdc71eccec | ||
| 
						 | 
					6c8abdd744 | ||
| 
						 | 
					4a66b7e0b2 | ||
| 
						 | 
					690ad20a0f | ||
| 
						 | 
					649cdb7be9 | ||
| 
						 | 
					fdd3b64215 | ||
| 
						 | 
					dabba1104b | ||
| 
						 | 
					f9e6fac357 | ||
| 
						 | 
					512d222830 | ||
| 
						 | 
					2c1ef383ae | ||
| 
						 | 
					f6aed2cda6 | ||
| 
						 | 
					c3ae9a4851 | ||
| 
						 | 
					f06b01eb62 | ||
| 
						 | 
					da10692aa2 | ||
| 
						 | 
					f7ba298480 | ||
| 
						 | 
					207ccf628d | ||
| 
						 | 
					cd3916c40f | ||
| 
						 | 
					ee13f9b165 | ||
| 
						 | 
					27eb622b78 | ||
| 
						 | 
					2d723902a0 | ||
| 
						 | 
					a6801a91cd | ||
| 
						 | 
					1933485b60 | ||
| 
						 | 
					50acf46b92 | ||
| 
						 | 
					7f9b7b074d | ||
| 
						 | 
					cf6dcfec97 | ||
| 
						 | 
					e03ddfae7e | ||
| 
						 | 
					6fa89f94c4 | ||
| 
						 | 
					c13d4799dd | ||
| 
						 | 
					bc4deee07a | ||
| 
						 | 
					5b00115ab0 | ||
| 
						 | 
					f8c3c05db9 | ||
| 
						 | 
					384c479c85 | ||
| 
						 | 
					ad65ce755e | ||
| 
						 | 
					e416ad9772 | ||
| 
						 | 
					4a18cddd16 | ||
| 
						 | 
					bb65e20b1c | ||
| 
						 | 
					b5e406f755 | ||
| 
						 | 
					888007108b | ||
| 
						 | 
					10061c7c47 | ||
| 
						 | 
					cb0f35d716 | ||
| 
						 | 
					8a8d8ededd | ||
| 
						 | 
					4c7b481b4c | ||
| 
						 | 
					098fc2c0d8 | ||
| 
						 | 
					cfcf645356 | ||
| 
						 | 
					cdbb8c2f26 | ||
| 
						 | 
					c2245b68f5 | ||
| 
						 | 
					288370ea26 | ||
| 
						 | 
					2ec077d87e | ||
| 
						 | 
					c142bdf725 | ||
| 
						 | 
					c9f06e7f9f | ||
| 
						 | 
					724e095e76 | ||
| 
						 | 
					794b9c8f50 | ||
| 
						 | 
					251f25e0b5 | ||
| 
						 | 
					e170a5c050 | ||
| 
						 | 
					06d5b16225 | ||
| 
						 | 
					0491b70983 | ||
| 
						 | 
					c35f549e8b | ||
| 
						 | 
					ebc828cad9 | ||
| 
						 | 
					96e479e360 | ||
| 
						 | 
					a472dde430 | ||
| 
						 | 
					68a8a41bef | ||
| 
						 | 
					79e259e3ce | ||
| 
						 | 
					56ee3117a5 | ||
| 
						 | 
					8f3e97bac3 | ||
| 
						 | 
					f7ceceb518 | ||
| 
						 | 
					6063b27bb6 | ||
| 
						 | 
					c77f1b37fd | ||
| 
						 | 
					c54b4ee16a | ||
| 
						 | 
					c1374a7dc0 | ||
| 
						 | 
					a6f20a1e01 | ||
| 
						 | 
					9f28c57cea | ||
| 
						 | 
					fcc6c7199b | ||
| 
						 | 
					9cb0969f65 | ||
| 
						 | 
					792a90020f | ||
| 
						 | 
					e9b8eb3155 | ||
| 
						 | 
					88fce97953 | ||
| 
						 | 
					ce72df1c6a | ||
| 
						 | 
					db1842132f | ||
| 
						 | 
					0c106d75e3 | ||
| 
						 | 
					d97b4dd866 | ||
| 
						 | 
					75b8dfc068 | ||
| 
						 | 
					1b4559977e | ||
| 
						 | 
					9b21f59103 | ||
| 
						 | 
					4098e89cbf | ||
| 
						 | 
					03f8b04277 | ||
| 
						 | 
					cb496082f8 | ||
| 
						 | 
					f2d4be3b84 | ||
| 
						 | 
					8d7ed6ff90 | ||
| 
						 | 
					29c7896f13 | ||
| 
						 | 
					448cb8b56f | ||
| 
						 | 
					11ee069b91 | ||
| 
						 | 
					9228157c07 | ||
| 
						 | 
					5dcdcd475c | ||
| 
						 | 
					1641cb6043 | ||
| 
						 | 
					bb258c1c5e | ||
| 
						 | 
					ae82b46ffb | 
							
								
								
									
										16
									
								
								.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
openssl.pc
 | 
			
		||||
Makefile.ssl
 | 
			
		||||
MINFO
 | 
			
		||||
makefile.one
 | 
			
		||||
tmp
 | 
			
		||||
out
 | 
			
		||||
outinc
 | 
			
		||||
rehash.time
 | 
			
		||||
testlog
 | 
			
		||||
make.log
 | 
			
		||||
maketest.log
 | 
			
		||||
cctest
 | 
			
		||||
cctest.c
 | 
			
		||||
cctest.a
 | 
			
		||||
libcrypto.so.*
 | 
			
		||||
libssl.so.*
 | 
			
		||||
							
								
								
									
										729
									
								
								FAQ
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										729
									
								
								FAQ
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,729 @@
 | 
			
		||||
OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
--------------------------------------
 | 
			
		||||
 | 
			
		||||
[MISC] Miscellaneous questions
 | 
			
		||||
 | 
			
		||||
* Which is the current version of OpenSSL?
 | 
			
		||||
* Where is the documentation?
 | 
			
		||||
* How can I contact the OpenSSL developers?
 | 
			
		||||
* Where can I get a compiled version of OpenSSL?
 | 
			
		||||
* Why aren't tools like 'autoconf' and 'libtool' used?
 | 
			
		||||
* What is an 'engine' version?
 | 
			
		||||
* How do I check the authenticity of the OpenSSL distribution?
 | 
			
		||||
 | 
			
		||||
[LEGAL] Legal questions
 | 
			
		||||
 | 
			
		||||
* Do I need patent licenses to use OpenSSL?
 | 
			
		||||
* Can I use OpenSSL with GPL software? 
 | 
			
		||||
 | 
			
		||||
[USER] Questions on using the OpenSSL applications
 | 
			
		||||
 | 
			
		||||
* Why do I get a "PRNG not seeded" error message?
 | 
			
		||||
* Why do I get an "unable to write 'random state'" error message?
 | 
			
		||||
* How do I create certificates or certificate requests?
 | 
			
		||||
* Why can't I create certificate requests?
 | 
			
		||||
* Why does <SSL program> fail with a certificate verify error?
 | 
			
		||||
* Why can I only use weak ciphers when I connect to a server using OpenSSL?
 | 
			
		||||
* How can I create DSA certificates?
 | 
			
		||||
* Why can't I make an SSL connection using a DSA certificate?
 | 
			
		||||
* How can I remove the passphrase on a private key?
 | 
			
		||||
* Why can't I use OpenSSL certificates with SSL client authentication?
 | 
			
		||||
* Why does my browser give a warning about a mismatched hostname?
 | 
			
		||||
* How do I install a CA certificate into a browser?
 | 
			
		||||
* Why is OpenSSL x509 DN output not conformant to RFC2253?
 | 
			
		||||
 | 
			
		||||
[BUILD] Questions about building and testing OpenSSL
 | 
			
		||||
 | 
			
		||||
* Why does the linker complain about undefined symbols?
 | 
			
		||||
* Why does the OpenSSL test fail with "bc: command not found"?
 | 
			
		||||
* Why does the OpenSSL test fail with "bc: 1 no implemented"?
 | 
			
		||||
* Why does the OpenSSL test fail with "bc: stack empty"?
 | 
			
		||||
* Why does the OpenSSL compilation fail on Alpha Tru64 Unix?
 | 
			
		||||
* Why does the OpenSSL compilation fail with "ar: command not found"?
 | 
			
		||||
* Why does the OpenSSL compilation fail on Win32 with VC++?
 | 
			
		||||
* What is special about OpenSSL on Redhat?
 | 
			
		||||
* Why does the OpenSSL compilation fail on MacOS X?
 | 
			
		||||
* Why does the OpenSSL test suite fail on MacOS X?
 | 
			
		||||
 | 
			
		||||
[PROG] Questions about programming with OpenSSL
 | 
			
		||||
 | 
			
		||||
* Is OpenSSL thread-safe?
 | 
			
		||||
* I've compiled a program under Windows and it crashes: why?
 | 
			
		||||
* How do I read or write a DER encoded buffer using the ASN1 functions?
 | 
			
		||||
* I've tried using <M_some_evil_pkcs12_macro> and I get errors why?
 | 
			
		||||
* I've called <some function> and it fails, why?
 | 
			
		||||
* I just get a load of numbers for the error output, what do they mean?
 | 
			
		||||
* Why do I get errors about unknown algorithms?
 | 
			
		||||
* Why can't the OpenSSH configure script detect OpenSSL?
 | 
			
		||||
* Can I use OpenSSL's SSL library with non-blocking I/O?
 | 
			
		||||
* Why doesn't my server application receive a client certificate?
 | 
			
		||||
* Why does compilation fail due to an undefined symbol NID_uniqueIdentifier?
 | 
			
		||||
 | 
			
		||||
===============================================================================
 | 
			
		||||
 | 
			
		||||
[MISC] ========================================================================
 | 
			
		||||
 | 
			
		||||
* Which is the current version of OpenSSL?
 | 
			
		||||
 | 
			
		||||
The current version is available from <URL: http://www.openssl.org>.
 | 
			
		||||
OpenSSL 0.9.6h was released on December 5, 2002.
 | 
			
		||||
 | 
			
		||||
In addition to the current stable release, you can also access daily
 | 
			
		||||
snapshots of the OpenSSL development version at <URL:
 | 
			
		||||
ftp://ftp.openssl.org/snapshot/>, or get it by anonymous CVS access.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Where is the documentation?
 | 
			
		||||
 | 
			
		||||
OpenSSL is a library that provides cryptographic functionality to
 | 
			
		||||
applications such as secure web servers.  Be sure to read the
 | 
			
		||||
documentation of the application you want to use.  The INSTALL file
 | 
			
		||||
explains how to install this library.
 | 
			
		||||
 | 
			
		||||
OpenSSL includes a command line utility that can be used to perform a
 | 
			
		||||
variety of cryptographic functions.  It is described in the openssl(1)
 | 
			
		||||
manpage.  Documentation for developers is currently being written.  A
 | 
			
		||||
few manual pages already are available; overviews over libcrypto and
 | 
			
		||||
libssl are given in the crypto(3) and ssl(3) manpages.
 | 
			
		||||
 | 
			
		||||
The OpenSSL manpages are installed in /usr/local/ssl/man/ (or a
 | 
			
		||||
different directory if you specified one as described in INSTALL).
 | 
			
		||||
In addition, you can read the most current versions at
 | 
			
		||||
<URL: http://www.openssl.org/docs/>.
 | 
			
		||||
 | 
			
		||||
For information on parts of libcrypto that are not yet documented, you
 | 
			
		||||
might want to read Ariel Glenn's documentation on SSLeay 0.9, OpenSSL's
 | 
			
		||||
predecessor, at <URL: http://www.columbia.edu/~ariel/ssleay/>.  Much
 | 
			
		||||
of this still applies to OpenSSL.
 | 
			
		||||
 | 
			
		||||
There is some documentation about certificate extensions and PKCS#12
 | 
			
		||||
in doc/openssl.txt
 | 
			
		||||
 | 
			
		||||
The original SSLeay documentation is included in OpenSSL as
 | 
			
		||||
doc/ssleay.txt.  It may be useful when none of the other resources
 | 
			
		||||
help, but please note that it reflects the obsolete version SSLeay
 | 
			
		||||
0.6.6.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* How can I contact the OpenSSL developers?
 | 
			
		||||
 | 
			
		||||
The README file describes how to submit bug reports and patches to
 | 
			
		||||
OpenSSL.  Information on the OpenSSL mailing lists is available from
 | 
			
		||||
<URL: http://www.openssl.org>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Where can I get a compiled version of OpenSSL?
 | 
			
		||||
 | 
			
		||||
Some applications that use OpenSSL are distributed in binary form.
 | 
			
		||||
When using such an application, you don't need to install OpenSSL
 | 
			
		||||
yourself; the application will include the required parts (e.g. DLLs).
 | 
			
		||||
 | 
			
		||||
If you want to install OpenSSL on a Windows system and you don't have
 | 
			
		||||
a C compiler, read the "Mingw32" section of INSTALL.W32 for information
 | 
			
		||||
on how to obtain and install the free GNU C compiler.
 | 
			
		||||
 | 
			
		||||
A number of Linux and *BSD distributions include OpenSSL.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why aren't tools like 'autoconf' and 'libtool' used?
 | 
			
		||||
 | 
			
		||||
autoconf will probably be used in future OpenSSL versions. If it was
 | 
			
		||||
less Unix-centric, it might have been used much earlier.
 | 
			
		||||
 | 
			
		||||
* What is an 'engine' version?
 | 
			
		||||
 | 
			
		||||
With version 0.9.6 OpenSSL was extended to interface to external crypto
 | 
			
		||||
hardware. This was realized in a special release '0.9.6-engine'. With
 | 
			
		||||
version 0.9.7 (not yet released) the changes were merged into the main
 | 
			
		||||
development line, so that the special release is no longer necessary.
 | 
			
		||||
 | 
			
		||||
* How do I check the authenticity of the OpenSSL distribution?
 | 
			
		||||
 | 
			
		||||
We provide MD5 digests and ASC signatures of each tarball.
 | 
			
		||||
Use MD5 to check that a tarball from a mirror site is identical:
 | 
			
		||||
 | 
			
		||||
   md5sum TARBALL | awk '{print $1;}' | cmp - TARBALL.md5
 | 
			
		||||
 | 
			
		||||
You can check authenticity using pgp or gpg. You need the OpenSSL team
 | 
			
		||||
member public key used to sign it (download it from a key server). Then
 | 
			
		||||
just do:
 | 
			
		||||
 | 
			
		||||
   pgp TARBALL.asc
 | 
			
		||||
 | 
			
		||||
[LEGAL] =======================================================================
 | 
			
		||||
 | 
			
		||||
* Do I need patent licenses to use OpenSSL?
 | 
			
		||||
 | 
			
		||||
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 RC5 and IDEA by using
 | 
			
		||||
 ./config no-rc5 no-idea
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Can I use OpenSSL with GPL software?
 | 
			
		||||
 | 
			
		||||
On many systems including the major Linux and BSD distributions, yes (the
 | 
			
		||||
GPL does not place restrictions on using libraries that are part of the
 | 
			
		||||
normal operating system distribution).
 | 
			
		||||
 | 
			
		||||
On other systems, the situation is less clear. Some GPL software copyright
 | 
			
		||||
holders claim that you infringe on their rights if you use OpenSSL with
 | 
			
		||||
their software on operating systems that don't normally include OpenSSL.
 | 
			
		||||
 | 
			
		||||
If you develop open source software that uses OpenSSL, you may find it
 | 
			
		||||
useful to choose an other license than the GPL, or state explicitly that
 | 
			
		||||
"This program is released under the GPL with the additional exemption that
 | 
			
		||||
compiling, linking, and/or using OpenSSL is allowed."  If you are using
 | 
			
		||||
GPL software developed by others, you may want to ask the copyright holder
 | 
			
		||||
for permission to use their software with OpenSSL.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[USER] ========================================================================
 | 
			
		||||
 | 
			
		||||
* Why do I get a "PRNG not seeded" error message?
 | 
			
		||||
 | 
			
		||||
Cryptographic software needs a source of unpredictable data to work
 | 
			
		||||
correctly.  Many open source operating systems provide a "randomness
 | 
			
		||||
device" that serves this purpose.  On other systems, applications have
 | 
			
		||||
to call the RAND_add() or RAND_seed() function with appropriate data
 | 
			
		||||
before generating keys or performing public key encryption.
 | 
			
		||||
(These functions initialize the pseudo-random number generator, PRNG.)
 | 
			
		||||
 | 
			
		||||
Some broken applications do not do this.  As of version 0.9.5, the
 | 
			
		||||
OpenSSL functions that need randomness report an error if the random
 | 
			
		||||
number generator has not been seeded with at least 128 bits of
 | 
			
		||||
randomness.  If this error occurs, please contact the author of the
 | 
			
		||||
application you are using.  It is likely that it never worked
 | 
			
		||||
correctly.  OpenSSL 0.9.5 and later make the error visible by refusing
 | 
			
		||||
to perform potentially insecure encryption.
 | 
			
		||||
 | 
			
		||||
On systems without /dev/urandom and /dev/random, it is a good idea to
 | 
			
		||||
use the Entropy Gathering Demon (EGD); see the RAND_egd() manpage for
 | 
			
		||||
details.  Starting with version 0.9.7, OpenSSL will automatically look
 | 
			
		||||
for an EGD socket at /var/run/egd-pool, /dev/egd-pool, /etc/egd-pool and
 | 
			
		||||
/etc/entropy.
 | 
			
		||||
 | 
			
		||||
Most components of the openssl command line utility automatically try
 | 
			
		||||
to seed the random number generator from a file.  The name of the
 | 
			
		||||
default seeding file is determined as follows: If environment variable
 | 
			
		||||
RANDFILE is set, then it names the seeding file.  Otherwise if
 | 
			
		||||
environment variable HOME is set, then the seeding file is $HOME/.rnd.
 | 
			
		||||
If neither RANDFILE nor HOME is set, versions up to OpenSSL 0.9.6 will
 | 
			
		||||
use file .rnd in the current directory while OpenSSL 0.9.6a uses no
 | 
			
		||||
default seeding file at all.  OpenSSL 0.9.6b and later will behave
 | 
			
		||||
similarly to 0.9.6a, but will use a default of "C:\" for HOME on
 | 
			
		||||
Windows systems if the environment variable has not been set.
 | 
			
		||||
 | 
			
		||||
If the default seeding file does not exist or is too short, the "PRNG
 | 
			
		||||
not seeded" error message may occur.
 | 
			
		||||
 | 
			
		||||
The openssl command line utility will write back a new state to the
 | 
			
		||||
default seeding file (and create this file if necessary) unless
 | 
			
		||||
there was no sufficient seeding.
 | 
			
		||||
 | 
			
		||||
Pointing $RANDFILE to an Entropy Gathering Daemon socket does not work.
 | 
			
		||||
Use the "-rand" option of the OpenSSL command line tools instead.
 | 
			
		||||
The $RANDFILE environment variable and $HOME/.rnd are only used by the
 | 
			
		||||
OpenSSL command line tools. Applications using the OpenSSL library
 | 
			
		||||
provide their own configuration options to specify the entropy source,
 | 
			
		||||
please check out the documentation coming the with application.
 | 
			
		||||
 | 
			
		||||
For Solaris 2.6, Tim Nibbe <tnibbe@sprint.net> and others have suggested
 | 
			
		||||
installing the SUNski package from Sun patch 105710-01 (Sparc) which
 | 
			
		||||
adds a /dev/random device and make sure it gets used, usually through
 | 
			
		||||
$RANDFILE.  There are probably similar patches for the other Solaris
 | 
			
		||||
versions.  An official statement from Sun with respect to /dev/random
 | 
			
		||||
support can be found at
 | 
			
		||||
  http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsrdb/27606&zone_32=SUNWski
 | 
			
		||||
However, be warned that /dev/random is usually a blocking device, which
 | 
			
		||||
may have some effects on OpenSSL.
 | 
			
		||||
A third party /dev/random solution for Solaris is available at
 | 
			
		||||
  http://www.cosy.sbg.ac.at/~andi/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why do I get an "unable to write 'random state'" error message?
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Sometimes the openssl command line utility does not abort with
 | 
			
		||||
a "PRNG not seeded" error message, but complains that it is
 | 
			
		||||
"unable to write 'random state'".  This message refers to the
 | 
			
		||||
default seeding file (see previous answer).  A possible reason
 | 
			
		||||
is that no default filename is known because neither RANDFILE
 | 
			
		||||
nor HOME is set.  (Versions up to 0.9.6 used file ".rnd" in the
 | 
			
		||||
current directory in this case, but this has changed with 0.9.6a.)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* How do I create certificates or certificate requests?
 | 
			
		||||
 | 
			
		||||
Check out the CA.pl(1) manual page. This provides a simple wrapper round
 | 
			
		||||
the 'req', 'verify', 'ca' and 'pkcs12' utilities. For finer control check
 | 
			
		||||
out the manual pages for the individual utilities and the certificate
 | 
			
		||||
extensions documentation (currently in doc/openssl.txt).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why can't I create certificate requests?
 | 
			
		||||
 | 
			
		||||
You typically get the error:
 | 
			
		||||
 | 
			
		||||
	unable to find 'distinguished_name' in config
 | 
			
		||||
	problems making Certificate Request
 | 
			
		||||
 | 
			
		||||
This is because it can't find the configuration file. Check out the
 | 
			
		||||
DIAGNOSTICS section of req(1) for more information.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does <SSL program> fail with a certificate verify error?
 | 
			
		||||
 | 
			
		||||
This problem is usually indicated by log messages saying something like
 | 
			
		||||
"unable to get local issuer certificate" or "self signed certificate".
 | 
			
		||||
When a certificate is verified its root CA must be "trusted" by OpenSSL
 | 
			
		||||
this typically means that the CA certificate must be placed in a directory
 | 
			
		||||
or file and the relevant program configured to read it. The OpenSSL program
 | 
			
		||||
'verify' behaves in a similar way and issues similar error messages: check
 | 
			
		||||
the verify(1) program manual page for more information.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why can I only use weak ciphers when I connect to a server using OpenSSL?
 | 
			
		||||
 | 
			
		||||
This is almost certainly because you are using an old "export grade" browser
 | 
			
		||||
which only supports weak encryption. Upgrade your browser to support 128 bit
 | 
			
		||||
ciphers.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* How can I create DSA certificates?
 | 
			
		||||
 | 
			
		||||
Check the CA.pl(1) manual page for a DSA certificate example.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why can't I make an SSL connection to a server using a DSA certificate?
 | 
			
		||||
 | 
			
		||||
Typically you'll see a message saying there are no shared ciphers when
 | 
			
		||||
the same setup works fine with an RSA certificate. There are two possible
 | 
			
		||||
causes. The client may not support connections to DSA servers most web
 | 
			
		||||
browsers (including Netscape and MSIE) only support connections to servers
 | 
			
		||||
supporting RSA cipher suites. The other cause is that a set of DH parameters
 | 
			
		||||
has not been supplied to the server. DH parameters can be created with the
 | 
			
		||||
dhparam(1) command and loaded using the SSL_CTX_set_tmp_dh() for example:
 | 
			
		||||
check the source to s_server in apps/s_server.c for an example.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* How can I remove the passphrase on a private key?
 | 
			
		||||
 | 
			
		||||
Firstly you should be really *really* sure you want to do this. Leaving
 | 
			
		||||
a private key unencrypted is a major security risk. If you decide that
 | 
			
		||||
you do have to do this check the EXAMPLES sections of the rsa(1) and
 | 
			
		||||
dsa(1) manual pages.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why can't I use OpenSSL certificates with SSL client authentication?
 | 
			
		||||
 | 
			
		||||
What will typically happen is that when a server requests authentication
 | 
			
		||||
it will either not include your certificate or tell you that you have
 | 
			
		||||
no client certificates (Netscape) or present you with an empty list box
 | 
			
		||||
(MSIE). The reason for this is that when a server requests a client
 | 
			
		||||
certificate it includes a list of CAs names which it will accept. Browsers
 | 
			
		||||
will only let you select certificates from the list on the grounds that
 | 
			
		||||
there is little point presenting a certificate which the server will
 | 
			
		||||
reject.
 | 
			
		||||
 | 
			
		||||
The solution is to add the relevant CA certificate to your servers "trusted
 | 
			
		||||
CA list". How you do this depends on the server software in uses. You can
 | 
			
		||||
print out the servers list of acceptable CAs using the OpenSSL s_client tool:
 | 
			
		||||
 | 
			
		||||
openssl s_client -connect www.some.host:443 -prexit
 | 
			
		||||
 | 
			
		||||
If your server only requests certificates on certain URLs then you may need
 | 
			
		||||
to manually issue an HTTP GET command to get the list when s_client connects:
 | 
			
		||||
 | 
			
		||||
GET /some/page/needing/a/certificate.html
 | 
			
		||||
 | 
			
		||||
If your CA does not appear in the list then this confirms the problem.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does my browser give a warning about a mismatched hostname?
 | 
			
		||||
 | 
			
		||||
Browsers expect the server's hostname to match the value in the commonName
 | 
			
		||||
(CN) field of the certificate. If it does not then you get a warning.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* How do I install a CA certificate into a browser?
 | 
			
		||||
 | 
			
		||||
The usual way is to send the DER encoded certificate to the browser as
 | 
			
		||||
MIME type application/x-x509-ca-cert, for example by clicking on an appropriate
 | 
			
		||||
link. On MSIE certain extensions such as .der or .cacert may also work, or you
 | 
			
		||||
can import the certificate using the certificate import wizard.
 | 
			
		||||
 | 
			
		||||
You can convert a certificate to DER form using the command:
 | 
			
		||||
 | 
			
		||||
openssl x509 -in ca.pem -outform DER -out ca.der
 | 
			
		||||
 | 
			
		||||
Occasionally someone suggests using a command such as:
 | 
			
		||||
 | 
			
		||||
openssl pkcs12 -export -out cacert.p12 -in cacert.pem -inkey cakey.pem
 | 
			
		||||
 | 
			
		||||
DO NOT DO THIS! This command will give away your CAs private key and
 | 
			
		||||
reduces its security to zero: allowing anyone to forge certificates in
 | 
			
		||||
whatever name they choose.
 | 
			
		||||
 | 
			
		||||
* Why is OpenSSL x509 DN output not conformant to RFC2253?
 | 
			
		||||
 | 
			
		||||
The ways to print out the oneline format of the DN (Distinguished Name) have
 | 
			
		||||
been extended in version 0.9.7 of OpenSSL. Using the new X509_NAME_print_ex()
 | 
			
		||||
interface, the "-nameopt" option could be introduded. See the manual
 | 
			
		||||
page of the "openssl x509" commandline tool for details. The old behaviour
 | 
			
		||||
has however been left as default for the sake of compatibility.
 | 
			
		||||
 | 
			
		||||
[BUILD] =======================================================================
 | 
			
		||||
 | 
			
		||||
* Why does the linker complain about undefined symbols?
 | 
			
		||||
 | 
			
		||||
Maybe the compilation was interrupted, and make doesn't notice that
 | 
			
		||||
something is missing.  Run "make clean; make".
 | 
			
		||||
 | 
			
		||||
If you used ./Configure instead of ./config, make sure that you
 | 
			
		||||
selected the right target.  File formats may differ slightly between
 | 
			
		||||
OS versions (for example sparcv8/sparcv9, or a.out/elf).
 | 
			
		||||
 | 
			
		||||
In case you get errors about the following symbols, use the config
 | 
			
		||||
option "no-asm", as described in INSTALL:
 | 
			
		||||
 | 
			
		||||
 BF_cbc_encrypt, BF_decrypt, BF_encrypt, CAST_cbc_encrypt,
 | 
			
		||||
 CAST_decrypt, CAST_encrypt, RC4, RC5_32_cbc_encrypt, RC5_32_decrypt,
 | 
			
		||||
 RC5_32_encrypt, bn_add_words, bn_div_words, bn_mul_add_words,
 | 
			
		||||
 bn_mul_comba4, bn_mul_comba8, bn_mul_words, bn_sqr_comba4,
 | 
			
		||||
 bn_sqr_comba8, bn_sqr_words, bn_sub_words, des_decrypt3,
 | 
			
		||||
 des_ede3_cbc_encrypt, des_encrypt, des_encrypt2, des_encrypt3,
 | 
			
		||||
 des_ncbc_encrypt, md5_block_asm_host_order, sha1_block_asm_data_order
 | 
			
		||||
 | 
			
		||||
If none of these helps, you may want to try using the current snapshot.
 | 
			
		||||
If the problem persists, please submit a bug report.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does the OpenSSL test fail with "bc: command not found"?
 | 
			
		||||
 | 
			
		||||
You didn't install "bc", the Unix calculator.  If you want to run the
 | 
			
		||||
tests, get GNU bc from ftp://ftp.gnu.org or from your OS distributor.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does the OpenSSL test fail with "bc: 1 no implemented"?
 | 
			
		||||
 | 
			
		||||
On some SCO installations or versions, bc has a bug that gets triggered
 | 
			
		||||
when you run the test suite (using "make test").  The message returned is
 | 
			
		||||
"bc: 1 not implemented".
 | 
			
		||||
 | 
			
		||||
The best way to deal with this is to find another implementation of bc
 | 
			
		||||
and compile/install it.  GNU bc (see http://www.gnu.org/software/software.html
 | 
			
		||||
for download instructions) can be safely used, for example.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does the OpenSSL test fail with "bc: stack empty"?
 | 
			
		||||
 | 
			
		||||
On some DG/ux versions, bc seems to have a too small stack for calculations
 | 
			
		||||
that the OpenSSL bntest throws at it.  This gets triggered when you run the
 | 
			
		||||
test suite (using "make test").  The message returned is "bc: stack empty".
 | 
			
		||||
 | 
			
		||||
The best way to deal with this is to find another implementation of bc
 | 
			
		||||
and compile/install it.  GNU bc (see http://www.gnu.org/software/software.html
 | 
			
		||||
for download instructions) can be safely used, for example.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does the OpenSSL compilation fail on Alpha Tru64 Unix?
 | 
			
		||||
 | 
			
		||||
On some Alpha installations running Tru64 Unix and Compaq C, the compilation
 | 
			
		||||
of crypto/sha/sha_dgst.c fails with the message 'Fatal:  Insufficient virtual
 | 
			
		||||
memory to continue compilation.'  As far as the tests have shown, this may be
 | 
			
		||||
a compiler bug.  What happens is that it eats up a lot of resident memory
 | 
			
		||||
to build something, probably a table.  The problem is clearly in the
 | 
			
		||||
optimization code, because if one eliminates optimization completely (-O0),
 | 
			
		||||
the compilation goes through (and the compiler consumes about 2MB of resident
 | 
			
		||||
memory instead of 240MB or whatever one's limit is currently).
 | 
			
		||||
 | 
			
		||||
There are three options to solve this problem:
 | 
			
		||||
 | 
			
		||||
1. set your current data segment size soft limit higher.  Experience shows
 | 
			
		||||
that about 241000 kbytes seems to be enough on an AlphaServer DS10.  You do
 | 
			
		||||
this with the command 'ulimit -Sd nnnnnn', where 'nnnnnn' is the number of
 | 
			
		||||
kbytes to set the limit to.
 | 
			
		||||
 | 
			
		||||
2. If you have a hard limit that is lower than what you need and you can't
 | 
			
		||||
get it changed, you can compile all of OpenSSL with -O0 as optimization
 | 
			
		||||
level.  This is however not a very nice thing to do for those who expect to
 | 
			
		||||
get the best result from OpenSSL.  A bit more complicated solution is the
 | 
			
		||||
following:
 | 
			
		||||
 | 
			
		||||
----- snip:start -----
 | 
			
		||||
  make DIRS=crypto SDIRS=sha "`grep '^CFLAG=' Makefile.ssl | \
 | 
			
		||||
       sed -e 's/ -O[0-9] / -O0 /'`"
 | 
			
		||||
  rm `ls crypto/*.o crypto/sha/*.o | grep -v 'sha_dgst\.o'`
 | 
			
		||||
  make
 | 
			
		||||
----- snip:end -----
 | 
			
		||||
 | 
			
		||||
This will only compile sha_dgst.c with -O0, the rest with the optimization
 | 
			
		||||
level chosen by the configuration process.  When the above is done, do the
 | 
			
		||||
test and installation and you're set.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does the OpenSSL compilation fail with "ar: command not found"?
 | 
			
		||||
 | 
			
		||||
Getting this message is quite usual on Solaris 2, because Sun has hidden
 | 
			
		||||
away 'ar' and other development commands in directories that aren't in
 | 
			
		||||
$PATH by default.  One of those directories is '/usr/ccs/bin'.  The
 | 
			
		||||
quickest way to fix this is to do the following (it assumes you use sh
 | 
			
		||||
or any sh-compatible shell):
 | 
			
		||||
 | 
			
		||||
----- snip:start -----
 | 
			
		||||
  PATH=${PATH}:/usr/ccs/bin; export PATH
 | 
			
		||||
----- snip:end -----
 | 
			
		||||
 | 
			
		||||
and then redo the compilation.  What you should really do is make sure
 | 
			
		||||
'/usr/ccs/bin' is permanently in your $PATH, for example through your
 | 
			
		||||
'.profile' (again, assuming you use a sh-compatible shell).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does the OpenSSL compilation fail on Win32 with VC++?
 | 
			
		||||
 | 
			
		||||
Sometimes, you may get reports from VC++ command line (cl) that it
 | 
			
		||||
can't find standard include files like stdio.h and other weirdnesses.
 | 
			
		||||
One possible cause is that the environment isn't correctly set up.
 | 
			
		||||
To solve that problem, one should run VCVARS32.BAT which is found in
 | 
			
		||||
the 'bin' subdirectory of the VC++ installation directory (somewhere
 | 
			
		||||
under 'Program Files').  This needs to be done prior to running NMAKE,
 | 
			
		||||
and the changes are only valid for the current DOS session.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* What is special about OpenSSL on Redhat?
 | 
			
		||||
 | 
			
		||||
Red Hat Linux (release 7.0 and later) include a preinstalled limited
 | 
			
		||||
version of OpenSSL. For patent reasons, support for IDEA, RC5 and MDC2
 | 
			
		||||
is disabled in this version. The same may apply to other Linux distributions.
 | 
			
		||||
Users may therefore wish to install more or all of the features left out.
 | 
			
		||||
 | 
			
		||||
To do this you MUST ensure that you do not overwrite the openssl that is in
 | 
			
		||||
/usr/bin on your Red Hat machine. Several packages depend on this file,
 | 
			
		||||
including sendmail and ssh. /usr/local/bin is a good alternative choice. The
 | 
			
		||||
libraries that come with Red Hat 7.0 onwards have different names and so are
 | 
			
		||||
not affected. (eg For Red Hat 7.2 they are /lib/libssl.so.0.9.6b and
 | 
			
		||||
/lib/libcrypto.so.0.9.6b with symlinks /lib/libssl.so.2 and
 | 
			
		||||
/lib/libcrypto.so.2 respectively).
 | 
			
		||||
 | 
			
		||||
Please note that we have been advised by Red Hat attempting to recompile the
 | 
			
		||||
openssl rpm with all the cryptography enabled will not work. All other
 | 
			
		||||
packages depend on the original Red Hat supplied openssl package. It is also
 | 
			
		||||
worth noting that due to the way Red Hat supplies its packages, updates to
 | 
			
		||||
openssl on each distribution never change the package version, only the
 | 
			
		||||
build number. For example, on Red Hat 7.1, the latest openssl package has
 | 
			
		||||
version number 0.9.6 and build number 9 even though it contains all the
 | 
			
		||||
relevant updates in packages up to and including 0.9.6b.
 | 
			
		||||
 | 
			
		||||
A possible way around this is to persuade Red Hat to produce a non-US
 | 
			
		||||
version of Red Hat Linux.
 | 
			
		||||
 | 
			
		||||
FYI: Patent numbers and expiry dates of US patents:
 | 
			
		||||
MDC-2: 4,908,861 13/03/2007
 | 
			
		||||
IDEA:  5,214,703 25/05/2010
 | 
			
		||||
RC5:   5,724,428 03/03/2015
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does the OpenSSL compilation fail on MacOS X?
 | 
			
		||||
 | 
			
		||||
If the failure happens when trying to build the "openssl" binary, with
 | 
			
		||||
a large number of undefined symbols, it's very probable that you have
 | 
			
		||||
OpenSSL 0.9.6b delivered with the operating system (you can find out by
 | 
			
		||||
running '/usr/bin/openssl version') and that you were trying to build
 | 
			
		||||
OpenSSL 0.9.7 or newer.  The problem is that the loader ('ld') in
 | 
			
		||||
MacOS X has a misfeature that's quite difficult to go around.
 | 
			
		||||
Look in the file PROBLEMS for a more detailed explanation and for possible
 | 
			
		||||
solutions.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does the OpenSSL test suite fail on MacOS X?
 | 
			
		||||
 | 
			
		||||
If the failure happens when running 'make test' and the RC4 test fails,
 | 
			
		||||
it's very probable that you have OpenSSL 0.9.6b delivered with the
 | 
			
		||||
operating system (you can find out by running '/usr/bin/openssl version')
 | 
			
		||||
and that you were trying to build OpenSSL 0.9.6d.  The problem is that
 | 
			
		||||
the loader ('ld') in MacOS X has a misfeature that's quite difficult to
 | 
			
		||||
go around and has linked the programs "openssl" and the test programs
 | 
			
		||||
with /usr/lib/libcrypto.dylib and /usr/lib/libssl.dylib instead of the
 | 
			
		||||
libraries you just built.
 | 
			
		||||
Look in the file PROBLEMS for a more detailed explanation and for possible
 | 
			
		||||
solutions.
 | 
			
		||||
 | 
			
		||||
[PROG] ========================================================================
 | 
			
		||||
 | 
			
		||||
* Is OpenSSL thread-safe?
 | 
			
		||||
 | 
			
		||||
Yes (with limitations: an SSL connection may not concurrently be used
 | 
			
		||||
by multiple threads).  On Windows and many Unix systems, OpenSSL
 | 
			
		||||
automatically uses the multi-threaded versions of the standard
 | 
			
		||||
libraries.  If your platform is not one of these, consult the INSTALL
 | 
			
		||||
file.
 | 
			
		||||
 | 
			
		||||
Multi-threaded applications must provide two callback functions to
 | 
			
		||||
OpenSSL.  This is described in the threads(3) manpage.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* I've compiled a program under Windows and it crashes: why?
 | 
			
		||||
 | 
			
		||||
This is usually because you've missed the comment in INSTALL.W32.
 | 
			
		||||
Your application must link against the same version of the Win32
 | 
			
		||||
C-Runtime against which your openssl libraries were linked.  The
 | 
			
		||||
default version for OpenSSL is /MD - "Multithreaded DLL".
 | 
			
		||||
 | 
			
		||||
If you are using Microsoft Visual C++'s IDE (Visual Studio), in
 | 
			
		||||
many cases, your new project most likely defaulted to "Debug
 | 
			
		||||
Singlethreaded" - /ML.  This is NOT interchangeable with /MD and your
 | 
			
		||||
program will crash, typically on the first BIO related read or write
 | 
			
		||||
operation.
 | 
			
		||||
 | 
			
		||||
For each of the six possible link stage configurations within Win32,
 | 
			
		||||
your application must link  against the same by which OpenSSL was
 | 
			
		||||
built.  If you are using MS Visual C++ (Studio) this can be changed
 | 
			
		||||
by:
 | 
			
		||||
 | 
			
		||||
1.  Select Settings... from the Project Menu.
 | 
			
		||||
2.  Select the C/C++ Tab.
 | 
			
		||||
3.  Select "Code Generation from the "Category" drop down list box
 | 
			
		||||
4.  Select the Appropriate library (see table below) from the "Use
 | 
			
		||||
    run-time library" drop down list box.  Perform this step for both
 | 
			
		||||
    your debug and release versions of your application (look at the
 | 
			
		||||
    top left of the settings panel to change between the two)
 | 
			
		||||
 | 
			
		||||
    Single Threaded           /ML        -  MS VC++ often defaults to
 | 
			
		||||
                                            this for the release
 | 
			
		||||
                                            version of a new project.
 | 
			
		||||
    Debug Single Threaded     /MLd       -  MS VC++ often defaults to
 | 
			
		||||
                                            this for the debug version
 | 
			
		||||
                                            of a new project.
 | 
			
		||||
    Multithreaded             /MT
 | 
			
		||||
    Debug Multithreaded       /MTd
 | 
			
		||||
    Multithreaded DLL         /MD        -  OpenSSL defaults to this.
 | 
			
		||||
    Debug Multithreaded DLL   /MDd
 | 
			
		||||
 | 
			
		||||
Note that debug and release libraries are NOT interchangeable.  If you
 | 
			
		||||
built OpenSSL with /MD your application must use /MD and cannot use /MDd.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* How do I read or write a DER encoded buffer using the ASN1 functions?
 | 
			
		||||
 | 
			
		||||
You have two options. You can either use a memory BIO in conjunction
 | 
			
		||||
with the i2d_XXX_bio() or d2i_XXX_bio() functions or you can use the
 | 
			
		||||
i2d_XXX(), d2i_XXX() functions directly. Since these are often the
 | 
			
		||||
cause of grief here are some code fragments using PKCS7 as an example:
 | 
			
		||||
 | 
			
		||||
unsigned char *buf, *p;
 | 
			
		||||
int len;
 | 
			
		||||
 | 
			
		||||
len = i2d_PKCS7(p7, NULL);
 | 
			
		||||
buf = OPENSSL_malloc(len); /* or Malloc, error checking omitted */
 | 
			
		||||
p = buf;
 | 
			
		||||
i2d_PKCS7(p7, &p);
 | 
			
		||||
 | 
			
		||||
At this point buf contains the len bytes of the DER encoding of
 | 
			
		||||
p7.
 | 
			
		||||
 | 
			
		||||
The opposite assumes we already have len bytes in buf:
 | 
			
		||||
 | 
			
		||||
unsigned char *p;
 | 
			
		||||
p = buf;
 | 
			
		||||
p7 = d2i_PKCS7(NULL, &p, len);
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
The reason for the temporary variable 'p' is that the ASN1 functions
 | 
			
		||||
increment the passed pointer so it is ready to read or write the next
 | 
			
		||||
structure. This is often a cause of problems: without the temporary
 | 
			
		||||
variable the buffer pointer is changed to point just after the data
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* I've tried using <M_some_evil_pkcs12_macro> and I get errors why?
 | 
			
		||||
 | 
			
		||||
This usually happens when you try compiling something using the PKCS#12
 | 
			
		||||
macros with a C++ compiler. There is hardly ever any need to use the
 | 
			
		||||
PKCS#12 macros in a program, it is much easier to parse and create
 | 
			
		||||
PKCS#12 files using the PKCS12_parse() and PKCS12_create() functions
 | 
			
		||||
documented in doc/openssl.txt and with examples in demos/pkcs12. The
 | 
			
		||||
'pkcs12' application has to use the macros because it prints out 
 | 
			
		||||
debugging information.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* I've called <some function> and it fails, why?
 | 
			
		||||
 | 
			
		||||
Before submitting a report or asking in one of the mailing lists, you
 | 
			
		||||
should try to determine the cause. In particular, you should call
 | 
			
		||||
ERR_print_errors() or ERR_print_errors_fp() after the failed call
 | 
			
		||||
and see if the message helps. Note that the problem may occur earlier
 | 
			
		||||
than you think -- you should check for errors after every call where
 | 
			
		||||
it is possible, otherwise the actual problem may be hidden because
 | 
			
		||||
some OpenSSL functions clear the error state.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* I just get a load of numbers for the error output, what do they mean?
 | 
			
		||||
 | 
			
		||||
The actual format is described in the ERR_print_errors() manual page.
 | 
			
		||||
You should call the function ERR_load_crypto_strings() before hand and
 | 
			
		||||
the message will be output in text form. If you can't do this (for example
 | 
			
		||||
it is a pre-compiled binary) you can use the errstr utility on the error
 | 
			
		||||
code itself (the hex digits after the second colon).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why do I get errors about unknown algorithms?
 | 
			
		||||
 | 
			
		||||
This can happen under several circumstances such as reading in an
 | 
			
		||||
encrypted private key or attempting to decrypt a PKCS#12 file. The cause
 | 
			
		||||
is forgetting to load OpenSSL's table of algorithms with
 | 
			
		||||
OpenSSL_add_all_algorithms(). See the manual page for more information.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why can't the OpenSSH configure script detect OpenSSL?
 | 
			
		||||
 | 
			
		||||
Several reasons for problems with the automatic detection exist.
 | 
			
		||||
OpenSSH requires at least version 0.9.5a of the OpenSSL libraries.
 | 
			
		||||
Sometimes the distribution has installed an older version in the system
 | 
			
		||||
locations that is detected instead of a new one installed. The OpenSSL
 | 
			
		||||
library might have been compiled for another CPU or another mode (32/64 bits).
 | 
			
		||||
Permissions might be wrong.
 | 
			
		||||
 | 
			
		||||
The general answer is to check the config.log file generated when running
 | 
			
		||||
the OpenSSH configure script. It should contain the detailed information
 | 
			
		||||
on why the OpenSSL library was not detected or considered incompatible.
 | 
			
		||||
 | 
			
		||||
* Can I use OpenSSL's SSL library with non-blocking I/O?
 | 
			
		||||
 | 
			
		||||
Yes; make sure to read the SSL_get_error(3) manual page!
 | 
			
		||||
 | 
			
		||||
A pitfall to avoid: Don't assume that SSL_read() will just read from
 | 
			
		||||
the underlying transport or that SSL_write() will just write to it --
 | 
			
		||||
it is also possible that SSL_write() cannot do any useful work until
 | 
			
		||||
there is data to read, or that SSL_read() cannot do anything until it
 | 
			
		||||
is possible to send data.  One reason for this is that the peer may
 | 
			
		||||
request a new TLS/SSL handshake at any time during the protocol,
 | 
			
		||||
requiring a bi-directional message exchange; both SSL_read() and
 | 
			
		||||
SSL_write() will try to continue any pending handshake.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why doesn't my server application receive a client certificate?
 | 
			
		||||
 | 
			
		||||
Due to the TLS protocol definition, a client will only send a certificate,
 | 
			
		||||
if explicitly asked by the server. Use the SSL_VERIFY_PEER flag of the
 | 
			
		||||
SSL_CTX_set_verify() function to enable the use of client certificates.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does compilation fail due to an undefined symbol NID_uniqueIdentifier?
 | 
			
		||||
 | 
			
		||||
For OpenSSL 0.9.7 the OID table was extended and corrected. In earlier
 | 
			
		||||
versions, uniqueIdentifier was incorrectly used for X.509 certificates.
 | 
			
		||||
The correct name according to RFC2256 (LDAP) is x500UniqueIdentifier.
 | 
			
		||||
Change your code to use the new name when compiling against OpenSSL 0.9.7.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
===============================================================================
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										399
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						
									
										399
									
								
								INSTALL
									
									
									
									
									
								
							@@ -1,133 +1,310 @@
 | 
			
		||||
# Installation of SSLeay.
 | 
			
		||||
# It depends on perl for a few bits but those steps can be skipped and
 | 
			
		||||
# the top level makefile edited by hand
 | 
			
		||||
 | 
			
		||||
# When bringing the SSLeay distribution back from the evil intel world
 | 
			
		||||
# of Windows NT, do the following to make it nice again under unix :-)
 | 
			
		||||
# You don't normally need to run this.
 | 
			
		||||
sh util/fixNT.sh	# This only works for NT now - eay - 21-Jun-1996
 | 
			
		||||
 INSTALLATION ON THE UNIX PLATFORM
 | 
			
		||||
 ---------------------------------
 | 
			
		||||
 | 
			
		||||
# If you have perl, and it is not in /usr/local/bin, you can run
 | 
			
		||||
perl util/perlpath.pl /new/path
 | 
			
		||||
# and this will fix the paths in all the scripts.  DO NOT put
 | 
			
		||||
# /new/path/perl, just /new/path. The build
 | 
			
		||||
# environment always run scripts as 'perl perlscript.pl' but some of the
 | 
			
		||||
# 'applications' are easier to usr with the path fixed.
 | 
			
		||||
 [Installation on DOS (with djgpp), Windows, OpenVMS and MacOS (before MacOS X)
 | 
			
		||||
  is described in INSTALL.DJGPP, INSTALL.W32, INSTALL.VMS and INSTALL.MacOS.
 | 
			
		||||
  This document describes installation on operating systems in the Unix
 | 
			
		||||
  family.]
 | 
			
		||||
 | 
			
		||||
# Edit crypto/cryptlib.h, tools/c_rehash, and Makefile.ssl
 | 
			
		||||
# to set the install locations if you don't like
 | 
			
		||||
# the default location of /usr/local/ssl
 | 
			
		||||
# Do this by running
 | 
			
		||||
perl util/ssldir.pl /new/ssl/home
 | 
			
		||||
# if you have perl, or by hand if not.
 | 
			
		||||
 To install OpenSSL, you will need:
 | 
			
		||||
 | 
			
		||||
# If things have been stuffed up with the sym links, run
 | 
			
		||||
make -f Makefile.ssl links
 | 
			
		||||
# This will re-populate lib/include with symlinks and for each
 | 
			
		||||
# directory, link Makefile to Makefile.ssl
 | 
			
		||||
  * make
 | 
			
		||||
  * Perl 5
 | 
			
		||||
  * an ANSI C compiler
 | 
			
		||||
  * a development environment in form of development libraries and C
 | 
			
		||||
    header files
 | 
			
		||||
  * a supported Unix operating system
 | 
			
		||||
 | 
			
		||||
# Setup the machine dependent stuff for the top level makefile
 | 
			
		||||
# and some select .h files
 | 
			
		||||
# If you don't have perl, this will bomb, in which case just edit the
 | 
			
		||||
# top level Makefile.ssl
 | 
			
		||||
./Configure 'system type'
 | 
			
		||||
 Quick Start
 | 
			
		||||
 -----------
 | 
			
		||||
 | 
			
		||||
# The 'Configure' command contains default configuration parameters
 | 
			
		||||
# for lots of machines.  Configure edits 5 lines in the top level Makefile
 | 
			
		||||
# It modifies the following values in the following files
 | 
			
		||||
Makefile.ssl		CC CFLAG EX_LIBS BN_MULW
 | 
			
		||||
crypto/des/des.h	DES_LONG
 | 
			
		||||
crypto/des/des_locl.h	DES_PTR
 | 
			
		||||
crypto/md2/md2.h	MD2_INT
 | 
			
		||||
crypto/rc4/rc4.h	RC4_INT
 | 
			
		||||
crypto/rc4/rc4_enc.c	RC4_INDEX
 | 
			
		||||
crypto/rc2/rc2.h	RC2_INT
 | 
			
		||||
crypto/bf/bf_locl.h	BF_INT
 | 
			
		||||
crypto/idea/idea.h	IDEA_INT
 | 
			
		||||
crypto/bn/bn.h		BN_LLONG (and defines one of SIXTY_FOUR_BIT,
 | 
			
		||||
				  SIXTY_FOUR_BIT_LONG, THIRTY_TWO_BIT,
 | 
			
		||||
				  SIXTEEN_BIT or EIGHT_BIT)
 | 
			
		||||
Please remember that all these files are actually copies of the file with
 | 
			
		||||
a .org extention.  So if you change crypto/des/des.h, the next time
 | 
			
		||||
you run Configure, it will be runover by a 'configured' version of
 | 
			
		||||
crypto/des/des.org.  So to make the changer the default, change the .org
 | 
			
		||||
files.  The reason these files have to be edited is because most of
 | 
			
		||||
these modifications change the size of fundamental data types.
 | 
			
		||||
While in theory this stuff is optional, it often makes a big
 | 
			
		||||
difference in performance and when using assember, it is importaint
 | 
			
		||||
for the 'Bignum bits' match those required by the assember code.
 | 
			
		||||
A warning for people using gcc with sparc cpu's.  Gcc needs the -mv8
 | 
			
		||||
flag to use the hardware multiply instruction which was not present in
 | 
			
		||||
earlier versions of the sparc CPU.  I define it by default.  If you
 | 
			
		||||
have an old sparc, and it crashes, try rebuilding with this flag
 | 
			
		||||
removed.  I am leaving this flag on by default because it makes
 | 
			
		||||
things run 4 times faster :-)
 | 
			
		||||
 If you want to just get on with it, do:
 | 
			
		||||
 | 
			
		||||
# clean out all the old stuff
 | 
			
		||||
make clean
 | 
			
		||||
  $ ./config
 | 
			
		||||
  $ make
 | 
			
		||||
  $ make test
 | 
			
		||||
  $ make install
 | 
			
		||||
 | 
			
		||||
# Do a make depend only if you have the makedepend command installed
 | 
			
		||||
# This is not needed but it does make things nice when developing.
 | 
			
		||||
make depend
 | 
			
		||||
 [If any of these steps fails, see section Installation in Detail below.]
 | 
			
		||||
 | 
			
		||||
# make should build everything
 | 
			
		||||
make
 | 
			
		||||
 This will build and install OpenSSL in the default location, which is (for
 | 
			
		||||
 historical reasons) /usr/local/ssl. If you want to install it anywhere else,
 | 
			
		||||
 run config like this:
 | 
			
		||||
 | 
			
		||||
# fix up the demo certificate hash directory if it has been stuffed up.
 | 
			
		||||
make rehash
 | 
			
		||||
  $ ./config --prefix=/usr/local --openssldir=/usr/local/openssl
 | 
			
		||||
 | 
			
		||||
# test everything
 | 
			
		||||
make test
 | 
			
		||||
 | 
			
		||||
# install the lot
 | 
			
		||||
make install
 | 
			
		||||
 Configuration Options
 | 
			
		||||
 ---------------------
 | 
			
		||||
 | 
			
		||||
# It is worth noting that all the applications are built into the one
 | 
			
		||||
# program, ssleay, which is then has links from the other programs
 | 
			
		||||
# names to it.
 | 
			
		||||
# The applicatons can be built by themselves, just don't define the
 | 
			
		||||
# 'MONOLITH' flag.  So to build the 'enc' program stand alone,
 | 
			
		||||
gcc -O2 -Iinclude apps/enc.c apps/apps.c libcrypto.a
 | 
			
		||||
 There are several options to ./config (or ./Configure) to customize
 | 
			
		||||
 the build:
 | 
			
		||||
 | 
			
		||||
# Other useful make options are
 | 
			
		||||
make makefile.one
 | 
			
		||||
# which generate a 'makefile.one' file which will build the complete
 | 
			
		||||
# SSLeay distribution with temp. files in './tmp' and 'installable' files
 | 
			
		||||
# in './out'
 | 
			
		||||
  --prefix=DIR  Install in DIR/bin, DIR/lib, DIR/include/openssl.
 | 
			
		||||
	        Configuration files used by OpenSSL will be in DIR/ssl
 | 
			
		||||
                or the directory specified by --openssldir.
 | 
			
		||||
 | 
			
		||||
# Have a look at running
 | 
			
		||||
perl util/mk1mf.pl help
 | 
			
		||||
# this can be used to generate a single makefile and is about the only
 | 
			
		||||
# way to generate makefiles for windows.
 | 
			
		||||
  --openssldir=DIR Directory for OpenSSL files. If no prefix is specified,
 | 
			
		||||
                the library files and binaries are also installed there.
 | 
			
		||||
 | 
			
		||||
# There is actually a final way of building SSLeay.
 | 
			
		||||
gcc -O2 -c -Icrypto -Iinclude crypto/crypto.c
 | 
			
		||||
gcc -O2 -c -Issl -Iinclude ssl/ssl.c
 | 
			
		||||
# and you now have the 2 libraries as single object files :-).
 | 
			
		||||
# If you want to use the assember code for your particular platform
 | 
			
		||||
# (DEC alpha/x86 are the main ones, the other assember is just the
 | 
			
		||||
# output from gcc) you will need to link the assember with the above generated
 | 
			
		||||
# object file and also do the above compile as
 | 
			
		||||
gcc -O2 -DBN_ASM -c -Icrypto -Iinclude crypto/crypto.c
 | 
			
		||||
  no-threads    Don't try to build with support for multi-threaded
 | 
			
		||||
                applications.
 | 
			
		||||
 | 
			
		||||
This last option is probably the best way to go when porting to another
 | 
			
		||||
platform or building shared libraries.  It is not good for development so
 | 
			
		||||
I don't normally use it.
 | 
			
		||||
  threads       Build with support for multi-threaded applications.
 | 
			
		||||
                This will usually require additional system-dependent options!
 | 
			
		||||
                See "Note on multi-threading" below.
 | 
			
		||||
 | 
			
		||||
To build shared libararies under unix, have a look in shlib, basically 
 | 
			
		||||
you are on your own, but it is quite easy and all you have to do
 | 
			
		||||
is compile 2 (or 3) files.
 | 
			
		||||
  no-zlib       Don't try to build with support for zlib compression and
 | 
			
		||||
                decompression.
 | 
			
		||||
 | 
			
		||||
For mult-threading, have a read of doc/threads.doc.  Again it is quite
 | 
			
		||||
easy and normally only requires some extra callbacks to be defined
 | 
			
		||||
by the application.
 | 
			
		||||
The examples for solaris and windows NT/95 are in the mt directory.
 | 
			
		||||
  zlib          Build with support for zlib compression/decompression.
 | 
			
		||||
 | 
			
		||||
have fun
 | 
			
		||||
  zlib-dynamic  Like "zlib", but has OpenSSL load the zlib library dynamically
 | 
			
		||||
                when needed.  This is only supported on systems where loading
 | 
			
		||||
                of shared libraries is supported.  This is the default choice.
 | 
			
		||||
 | 
			
		||||
eric 25-Jun-1997
 | 
			
		||||
  no-shared     Don't try to create shared libraries.
 | 
			
		||||
 | 
			
		||||
IRIX 5.x will build as a 32 bit system with mips1 assember.
 | 
			
		||||
IRIX 6.x will build as a 64 bit system with mips3 assember.  It conforms
 | 
			
		||||
to n32 standards. In theory you can compile the 64 bit assember under
 | 
			
		||||
IRIX 5.x but you will have to have the correct system software installed.
 | 
			
		||||
  shared        In addition to the usual static libraries, create shared
 | 
			
		||||
                libraries on platforms where it's supported.  See "Note on
 | 
			
		||||
                shared libraries" below.
 | 
			
		||||
 | 
			
		||||
  no-asm        Do not use assembler code.
 | 
			
		||||
 | 
			
		||||
  386           Use the 80386 instruction set only (the default x86 code is
 | 
			
		||||
                more efficient, but requires at least a 486).
 | 
			
		||||
 | 
			
		||||
  no-<cipher>   Build without the specified cipher (bf, cast, des, dh, dsa,
 | 
			
		||||
                hmac, md2, md5, mdc2, rc2, rc4, rc5, rsa, sha).
 | 
			
		||||
                The crypto/<cipher> directory can be removed after running
 | 
			
		||||
                "make depend".
 | 
			
		||||
 | 
			
		||||
  -Dxxx, -lxxx, -Lxxx, -fxxx, -Kxxx These system specific options will
 | 
			
		||||
                be passed through to the compiler to allow you to
 | 
			
		||||
                define preprocessor symbols, specify additional libraries,
 | 
			
		||||
                library directories or other compiler options.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 Installation in Detail
 | 
			
		||||
 ----------------------
 | 
			
		||||
 | 
			
		||||
 1a. Configure OpenSSL for your operation system automatically:
 | 
			
		||||
 | 
			
		||||
       $ ./config [options]
 | 
			
		||||
 | 
			
		||||
     This guesses at your operating system (and compiler, if necessary) and
 | 
			
		||||
     configures OpenSSL based on this guess. Run ./config -t to see
 | 
			
		||||
     if it guessed correctly. If you want to use a different compiler, you
 | 
			
		||||
     are cross-compiling for another platform, or the ./config guess was
 | 
			
		||||
     wrong for other reasons, go to step 1b. Otherwise go to step 2.
 | 
			
		||||
 | 
			
		||||
     On some systems, you can include debugging information as follows:
 | 
			
		||||
 | 
			
		||||
       $ ./config -d [options]
 | 
			
		||||
 | 
			
		||||
 1b. Configure OpenSSL for your operating system manually
 | 
			
		||||
 | 
			
		||||
     OpenSSL knows about a range of different operating system, hardware and
 | 
			
		||||
     compiler combinations. To see the ones it knows about, run
 | 
			
		||||
 | 
			
		||||
       $ ./Configure
 | 
			
		||||
 | 
			
		||||
     Pick a suitable name from the list that matches your system. For most
 | 
			
		||||
     operating systems there is a choice between using "cc" or "gcc".  When
 | 
			
		||||
     you have identified your system (and if necessary compiler) use this name
 | 
			
		||||
     as the argument to ./Configure. For example, a "linux-elf" user would
 | 
			
		||||
     run:
 | 
			
		||||
 | 
			
		||||
       $ ./Configure linux-elf [options]
 | 
			
		||||
 | 
			
		||||
     If your system is not available, you will have to edit the Configure
 | 
			
		||||
     program and add the correct configuration for your system. The
 | 
			
		||||
     generic configurations "cc" or "gcc" should usually work on 32 bit
 | 
			
		||||
     systems.
 | 
			
		||||
 | 
			
		||||
     Configure creates the file Makefile.ssl from Makefile.org and
 | 
			
		||||
     defines various macros in crypto/opensslconf.h (generated from
 | 
			
		||||
     crypto/opensslconf.h.in).
 | 
			
		||||
 | 
			
		||||
  2. Build OpenSSL by running:
 | 
			
		||||
 | 
			
		||||
       $ make
 | 
			
		||||
 | 
			
		||||
     This will build the OpenSSL libraries (libcrypto.a and libssl.a) and the
 | 
			
		||||
     OpenSSL binary ("openssl"). The libraries will be built in the top-level
 | 
			
		||||
     directory, and the binary will be in the "apps" directory.
 | 
			
		||||
 | 
			
		||||
     If "make" fails, look at the output.  There may be reasons for
 | 
			
		||||
     the failure that aren't problems in OpenSSL itself (like missing
 | 
			
		||||
     standard headers).  If it is a problem with OpenSSL itself, please
 | 
			
		||||
     report the problem to <openssl-bugs@openssl.org> (note that your
 | 
			
		||||
     message will be recorded in the request tracker publicly readable
 | 
			
		||||
     via http://www.openssl.org/rt2.html and will be forwarded to a public
 | 
			
		||||
     mailing list). Include the output of "make report" in your message.
 | 
			
		||||
     Please check out the request tracker. Maybe the bug was already
 | 
			
		||||
     reported or has already been fixed.
 | 
			
		||||
 | 
			
		||||
     [If you encounter assembler error messages, try the "no-asm"
 | 
			
		||||
     configuration option as an immediate fix.]
 | 
			
		||||
 | 
			
		||||
     Compiling parts of OpenSSL with gcc and others with the system
 | 
			
		||||
     compiler will result in unresolved symbols on some systems.
 | 
			
		||||
 | 
			
		||||
  3. After a successful build, the libraries should be tested. Run:
 | 
			
		||||
 | 
			
		||||
       $ make test
 | 
			
		||||
 | 
			
		||||
     If a test fails, look at the output.  There may be reasons for
 | 
			
		||||
     the failure that isn't a problem in OpenSSL itself (like a missing
 | 
			
		||||
     or malfunctioning bc).  If it is a problem with OpenSSL itself,
 | 
			
		||||
     try removing any compiler optimization flags from the CFLAGS line
 | 
			
		||||
     in Makefile.ssl and run "make clean; make". Please send a bug
 | 
			
		||||
     report to <openssl-bugs@openssl.org>, including the output of
 | 
			
		||||
     "make report" in order to be added to the request tracker at
 | 
			
		||||
     http://www.openssl.org/rt2.html.
 | 
			
		||||
 | 
			
		||||
  4. If everything tests ok, install OpenSSL with
 | 
			
		||||
 | 
			
		||||
       $ make install
 | 
			
		||||
 | 
			
		||||
     This will create the installation directory (if it does not exist) and
 | 
			
		||||
     then the following subdirectories:
 | 
			
		||||
 | 
			
		||||
       certs           Initially empty, this is the default location
 | 
			
		||||
                       for certificate files.
 | 
			
		||||
       man/man1        Manual pages for the 'openssl' command line tool
 | 
			
		||||
       man/man3        Manual pages for the libraries (very incomplete)
 | 
			
		||||
       misc            Various scripts.
 | 
			
		||||
       private         Initially empty, this is the default location
 | 
			
		||||
                       for private key files.
 | 
			
		||||
 | 
			
		||||
     If you didn't choose a different installation prefix, the
 | 
			
		||||
     following additional subdirectories will be created:
 | 
			
		||||
 | 
			
		||||
       bin             Contains the openssl binary and a few other 
 | 
			
		||||
                       utility programs. 
 | 
			
		||||
       include/openssl Contains the header files needed if you want to
 | 
			
		||||
                       compile programs with libcrypto or libssl.
 | 
			
		||||
       lib             Contains the OpenSSL library files themselves.
 | 
			
		||||
 | 
			
		||||
     Package builders who want to configure the library for standard
 | 
			
		||||
     locations, but have the package installed somewhere else so that
 | 
			
		||||
     it can easily be packaged, can use
 | 
			
		||||
 | 
			
		||||
       $ make INSTALL_PREFIX=/tmp/package-root install
 | 
			
		||||
 | 
			
		||||
     (or specify "--install_prefix=/tmp/package-root" as a configure
 | 
			
		||||
     option).  The specified prefix will be prepended to all
 | 
			
		||||
     installation target filenames.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  NOTE: The header files used to reside directly in the include
 | 
			
		||||
  directory, but have now been moved to include/openssl so that
 | 
			
		||||
  OpenSSL can co-exist with other libraries which use some of the
 | 
			
		||||
  same filenames.  This means that applications that use OpenSSL
 | 
			
		||||
  should now use C preprocessor directives of the form
 | 
			
		||||
 | 
			
		||||
       #include <openssl/ssl.h>
 | 
			
		||||
 | 
			
		||||
  instead of "#include <ssl.h>", which was used with library versions
 | 
			
		||||
  up to OpenSSL 0.9.2b.
 | 
			
		||||
 | 
			
		||||
  If you install a new version of OpenSSL over an old library version,
 | 
			
		||||
  you should delete the old header files in the include directory.
 | 
			
		||||
 | 
			
		||||
  Compatibility issues:
 | 
			
		||||
 | 
			
		||||
  *  COMPILING existing applications
 | 
			
		||||
 | 
			
		||||
     To compile an application that uses old filenames -- e.g.
 | 
			
		||||
     "#include <ssl.h>" --, it will usually be enough to find
 | 
			
		||||
     the CFLAGS definition in the application's Makefile and
 | 
			
		||||
     add a C option such as
 | 
			
		||||
 | 
			
		||||
          -I/usr/local/ssl/include/openssl
 | 
			
		||||
 | 
			
		||||
     to it.
 | 
			
		||||
 | 
			
		||||
     But don't delete the existing -I option that points to
 | 
			
		||||
     the ..../include directory!  Otherwise, OpenSSL header files
 | 
			
		||||
     could not #include each other.
 | 
			
		||||
 | 
			
		||||
  *  WRITING applications
 | 
			
		||||
 | 
			
		||||
     To write an application that is able to handle both the new
 | 
			
		||||
     and the old directory layout, so that it can still be compiled
 | 
			
		||||
     with library versions up to OpenSSL 0.9.2b without bothering
 | 
			
		||||
     the user, you can proceed as follows:
 | 
			
		||||
 | 
			
		||||
     -  Always use the new filename of OpenSSL header files,
 | 
			
		||||
        e.g. #include <openssl/ssl.h>.
 | 
			
		||||
 | 
			
		||||
     -  Create a directory "incl" that contains only a symbolic
 | 
			
		||||
        link named "openssl", which points to the "include" directory
 | 
			
		||||
        of OpenSSL.
 | 
			
		||||
        For example, your application's Makefile might contain the
 | 
			
		||||
        following rule, if OPENSSLDIR is a pathname (absolute or
 | 
			
		||||
        relative) of the directory where OpenSSL resides:
 | 
			
		||||
 | 
			
		||||
        incl/openssl:
 | 
			
		||||
        	-mkdir incl
 | 
			
		||||
        	cd $(OPENSSLDIR) # Check whether the directory really exists
 | 
			
		||||
        	-ln -s `cd $(OPENSSLDIR); pwd`/include incl/openssl
 | 
			
		||||
 | 
			
		||||
        You will have to add "incl/openssl" to the dependencies
 | 
			
		||||
        of those C files that include some OpenSSL header file.
 | 
			
		||||
 | 
			
		||||
     -  Add "-Iincl" to your CFLAGS.
 | 
			
		||||
 | 
			
		||||
     With these additions, the OpenSSL header files will be available
 | 
			
		||||
     under both name variants if an old library version is used:
 | 
			
		||||
     Your application can reach them under names like <openssl/foo.h>,
 | 
			
		||||
     while the header files still are able to #include each other
 | 
			
		||||
     with names of the form <foo.h>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 Note on multi-threading
 | 
			
		||||
 -----------------------
 | 
			
		||||
 | 
			
		||||
 For some systems, the OpenSSL Configure script knows what compiler options
 | 
			
		||||
 are needed to generate a library that is suitable for multi-threaded
 | 
			
		||||
 applications.  On these systems, support for multi-threading is enabled
 | 
			
		||||
 by default; use the "no-threads" option to disable (this should never be
 | 
			
		||||
 necessary).
 | 
			
		||||
 | 
			
		||||
 On other systems, to enable support for multi-threading, you will have
 | 
			
		||||
 to specify at least two options: "threads", and a system-dependent option.
 | 
			
		||||
 (The latter is "-D_REENTRANT" on various systems.)  The default in this
 | 
			
		||||
 case, obviously, is not to include support for multi-threading (but
 | 
			
		||||
 you can still use "no-threads" to suppress an annoying warning message
 | 
			
		||||
 from the Configure script.)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 Note on shared libraries
 | 
			
		||||
 ------------------------
 | 
			
		||||
 | 
			
		||||
 Shared library is currently an experimental feature.  The only reason to
 | 
			
		||||
 have them would be to conserve memory on systems where several program
 | 
			
		||||
 are using OpenSSL.  Binary backward compatibility can't be guaranteed
 | 
			
		||||
 before OpenSSL version 1.0.
 | 
			
		||||
 | 
			
		||||
 For some systems, the OpenSSL Configure script knows what is needed to
 | 
			
		||||
 build shared libraries for libcrypto and libssl.  On these systems,
 | 
			
		||||
 the shared libraries are currently not created by default, but giving
 | 
			
		||||
 the option "shared" will get them created.  This method supports Makefile
 | 
			
		||||
 targets for shared library creation, like linux-shared.  Those targets
 | 
			
		||||
 can currently be used on their own just as well, but this is expected
 | 
			
		||||
 to change in future versions of OpenSSL.
 | 
			
		||||
 | 
			
		||||
 Note on random number generation
 | 
			
		||||
 --------------------------------
 | 
			
		||||
 | 
			
		||||
 Availability of cryptographically secure random numbers is required for
 | 
			
		||||
 secret key generation. OpenSSL provides several options to seed the
 | 
			
		||||
 internal PRNG. If not properly seeded, the internal PRNG will refuse
 | 
			
		||||
 to deliver random bytes and a "PRNG not seeded error" will occur.
 | 
			
		||||
 On systems without /dev/urandom (or similar) device, it may be necessary
 | 
			
		||||
 to install additional support software to obtain random seed.
 | 
			
		||||
 Please check out the manual pages for RAND_add(), RAND_bytes(), RAND_egd(),
 | 
			
		||||
 and the FAQ for more information.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								INSTALL.DJGPP
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								INSTALL.DJGPP
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
 INSTALLATION ON THE DOS PLATFORM WITH DJGPP
 | 
			
		||||
 -------------------------------------------
 | 
			
		||||
 | 
			
		||||
 Openssl has been ported to DOS, but only with long filename support. If
 | 
			
		||||
 you wish to compile on native DOS with 8+3 filenames, you will have to
 | 
			
		||||
 tweak the installation yourself, including renaming files with illegal
 | 
			
		||||
 or duplicate names.
 | 
			
		||||
 | 
			
		||||
 You should have a full DJGPP environment installed, including the
 | 
			
		||||
 latest versions of DJGPP, GCC, BINUTILS, BASH, etc. This package
 | 
			
		||||
 requires that PERL and BC also be installed.
 | 
			
		||||
 | 
			
		||||
 All of these can be obtained from the usual DJGPP mirror sites, such
 | 
			
		||||
 as "ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp". You also need to
 | 
			
		||||
 have the WATT-32 networking package installed before you try to compile
 | 
			
		||||
 openssl. This can be obtained from "http://www.bgnett.no/~giva/".
 | 
			
		||||
 The Makefile assumes that the WATT-32 code is in the directory
 | 
			
		||||
 specified by the environment variable WATT_ROOT. If you have watt-32
 | 
			
		||||
 in directory "watt32" under your main DJGPP directory, specify
 | 
			
		||||
 WATT_ROOT="/dev/env/DJDIR/watt32".
 | 
			
		||||
 | 
			
		||||
 To compile openssl, start your BASH shell. Then configure for DOS by
 | 
			
		||||
 running "./Configure" with appropriate arguments. The basic syntax for
 | 
			
		||||
 DOS is:
 | 
			
		||||
 ./Configure no-threads --prefix=/dev/env/DJDIR DJGPP
 | 
			
		||||
 
 | 
			
		||||
 You may run out of DPMI selectors when running in a DOS box under
 | 
			
		||||
 Windows. If so, just close the BASH shell, go back to Windows, and
 | 
			
		||||
 restart BASH. Then run "make" again.
 | 
			
		||||
 | 
			
		||||
 Building openssl under DJGPP has been tested with DJGPP 2.03,
 | 
			
		||||
 GCC 2.952, GCC 2.953, perl 5.005_02 and perl 5.006_01.
 | 
			
		||||
							
								
								
									
										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"
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										31
									
								
								INSTALL.OS2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								INSTALL.OS2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
 
 | 
			
		||||
 Installation on OS/2
 | 
			
		||||
 --------------------
 | 
			
		||||
 | 
			
		||||
 You need to have the following tools installed:
 | 
			
		||||
 | 
			
		||||
  * EMX GCC
 | 
			
		||||
  * PERL
 | 
			
		||||
  * GNU make
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 To build the makefile, run
 | 
			
		||||
 | 
			
		||||
 > os2\os2-emx
 | 
			
		||||
 | 
			
		||||
 This will configure OpenSSL and create OS2-EMX.mak which you then use to 
 | 
			
		||||
 build the OpenSSL libraries & programs by running
 | 
			
		||||
 | 
			
		||||
 > make -f os2-emx.mak
 | 
			
		||||
 | 
			
		||||
 If that finishes successfully you will find the libraries and programs in the
 | 
			
		||||
 "out" directory.
 | 
			
		||||
 | 
			
		||||
 Alternatively, you can make a dynamic build that puts the library code into
 | 
			
		||||
 crypto.dll and ssl.dll by running
 | 
			
		||||
 | 
			
		||||
 > make -f os2-emx-dll.mak
 | 
			
		||||
 | 
			
		||||
 This will build the above mentioned dlls and a matching pair of import
 | 
			
		||||
 libraries in the "out_dll" directory along with the set of test programs
 | 
			
		||||
 and the openssl application.
 | 
			
		||||
							
								
								
									
										299
									
								
								INSTALL.VMS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										299
									
								
								INSTALL.VMS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,299 @@
 | 
			
		||||
			VMS Installation instructions
 | 
			
		||||
			written by Richard Levitte
 | 
			
		||||
			<richard@levitte.org>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Intro:
 | 
			
		||||
======
 | 
			
		||||
 | 
			
		||||
This file is divided in the following parts:
 | 
			
		||||
 | 
			
		||||
  Requirements			- Mandatory reading.
 | 
			
		||||
  Checking the distribution	- Mandatory reading.
 | 
			
		||||
  Compilation			- Mandatory reading.
 | 
			
		||||
  Logical names			- Mandatory reading.
 | 
			
		||||
  Test				- Mandatory reading.
 | 
			
		||||
  Installation			- Mandatory reading.
 | 
			
		||||
  Backward portability		- Read if it's an issue.
 | 
			
		||||
  Possible bugs or quirks	- A few warnings on things that
 | 
			
		||||
				  may go wrong or may surprise you.
 | 
			
		||||
  TODO				- Things that are to come.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Requirements:
 | 
			
		||||
=============
 | 
			
		||||
 | 
			
		||||
To build and install OpenSSL, you will need:
 | 
			
		||||
 | 
			
		||||
 * DEC C or some other ANSI C compiler.  VAX C is *not* supported.
 | 
			
		||||
   [Note: OpenSSL has only been tested with DEC C.  Compiling with 
 | 
			
		||||
    a different ANSI C compiler may require some work]
 | 
			
		||||
 | 
			
		||||
Checking the distribution:
 | 
			
		||||
==========================
 | 
			
		||||
 | 
			
		||||
There have been reports of places where the distribution didn't quite get
 | 
			
		||||
through, for example if you've copied the tree from a NFS-mounted Unix
 | 
			
		||||
mount point.
 | 
			
		||||
 | 
			
		||||
The easiest way to check if everything got through as it should is to check
 | 
			
		||||
for one of the following files:
 | 
			
		||||
 | 
			
		||||
	[.CRYPTO]OPENSSLCONF.H_IN
 | 
			
		||||
	[.CRYPTO]OPENSSLCONF_H.IN
 | 
			
		||||
 | 
			
		||||
They should never exist both at once, but one of them should (preferably
 | 
			
		||||
the first variant).  If you can't find any of those two, something went
 | 
			
		||||
wrong.
 | 
			
		||||
 | 
			
		||||
The best way to get a correct distribution is to download the gzipped tar
 | 
			
		||||
file from ftp://ftp.openssl.org/source/, use GUNZIP to uncompress it and
 | 
			
		||||
use VMSTAR to unpack the resulting tar file.
 | 
			
		||||
 | 
			
		||||
GUNZIP is available in many places on the net.  One of the distribution
 | 
			
		||||
points is the WKU software archive, ftp://ftp.wku.edu/vms/fileserv/ .
 | 
			
		||||
 | 
			
		||||
VMSTAR is also available in many places on the net.  The recommended place
 | 
			
		||||
to find information about it is http://www.free.lp.se/vmstar/ .
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Compilation:
 | 
			
		||||
============
 | 
			
		||||
 | 
			
		||||
I've used the very good command procedures written by Robert Byer
 | 
			
		||||
<byer@mail.all-net.net>, and just slightly modified them, making
 | 
			
		||||
them slightly more general and easier to maintain.
 | 
			
		||||
 | 
			
		||||
You can actually compile in almost any directory separately.  Look
 | 
			
		||||
for a command procedure name xxx-LIB.COM (in the library directories)
 | 
			
		||||
or MAKExxx.COM (in the program directories) and read the comments at
 | 
			
		||||
the top to understand how to use them.  However, if you want to
 | 
			
		||||
compile all you can get, the simplest is to use MAKEVMS.COM in the top
 | 
			
		||||
directory.  The syntax is the following:
 | 
			
		||||
 | 
			
		||||
  @MAKEVMS <option> <rsaref-p> <debug-p> [<compiler>]
 | 
			
		||||
 | 
			
		||||
<option> must be one of the following:
 | 
			
		||||
 | 
			
		||||
      ALL       Just build "everything".
 | 
			
		||||
      CONFIG    Just build the "[.CRYPTO]OPENSSLCONF.H" file.
 | 
			
		||||
      BUILDINF  Just build the "[.INCLUDE]BUILDINF.H" file.
 | 
			
		||||
      SOFTLINKS Just copies some files, to simulate Unix soft links.
 | 
			
		||||
      BUILDALL  Same as ALL, except CONFIG, BUILDINF and SOFTLINKS aren't done.
 | 
			
		||||
      RSAREF    Just build the "[.xxx.EXE.RSAREF]LIBRSAGLUE.OLB" library.
 | 
			
		||||
      CRYPTO    Just build the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library.
 | 
			
		||||
      SSL       Just build the "[.xxx.EXE.SSL]LIBSSL.OLB" library.
 | 
			
		||||
      SSL_TASK  Just build the "[.xxx.EXE.SSL]SSL_TASK.EXE" program.
 | 
			
		||||
      TEST      Just build the "[.xxx.EXE.TEST]" test programs for OpenSSL.
 | 
			
		||||
      APPS      Just build the "[.xxx.EXE.APPS]" application programs for OpenSSL.
 | 
			
		||||
 | 
			
		||||
<rsaref-p> must be one of the following:
 | 
			
		||||
 | 
			
		||||
      RSAREF    compile using the RSAREF Library
 | 
			
		||||
      NORSAREF  compile without using RSAREF
 | 
			
		||||
 | 
			
		||||
Note 0: The RSAREF library IS NO LONGER NEEDED.  The RSA patent
 | 
			
		||||
        expires September 20, 2000, and RSA Security chose to make
 | 
			
		||||
        the algorithm public domain two weeks before that.
 | 
			
		||||
 | 
			
		||||
Note 1: If you still want to use RSAREF, the library is NOT INCLUDED
 | 
			
		||||
        and you have to download it.  RSA Security doesn't carry it
 | 
			
		||||
        any more, but there are a number of places where you can find
 | 
			
		||||
        it.  You have to get the ".tar-Z" file as the ".zip" file
 | 
			
		||||
        doesn't have the directory structure stored.  You have to
 | 
			
		||||
        extract the file into the [.RSAREF] directory as that is where
 | 
			
		||||
        the scripts will look for the files.
 | 
			
		||||
 | 
			
		||||
Note 2: I have never done this, so I've no idea if it works or not.
 | 
			
		||||
 | 
			
		||||
<debug-p> must be one of the following:
 | 
			
		||||
 | 
			
		||||
      DEBUG     compile with debugging info (will not optimize)
 | 
			
		||||
      NODEBUG   compile without debugging info (will optimize)
 | 
			
		||||
 | 
			
		||||
<compiler> must be one of the following:
 | 
			
		||||
 | 
			
		||||
      DECC      For DEC C.
 | 
			
		||||
      GNUC      For GNU C.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
You will find the crypto library in [.xxx.EXE.CRYPTO], called LIBCRYPTO.OLB,
 | 
			
		||||
where xxx is VAX or AXP.  You will find the SSL library in [.xxx.EXE.SSL],
 | 
			
		||||
named LIBSSL.OLB, and you will find a bunch of useful programs in
 | 
			
		||||
[.xxx.EXE.APPS].  However, these shouldn't be used right off unless it's
 | 
			
		||||
just to test them.  For production use, make sure you install first, see
 | 
			
		||||
Installation below.
 | 
			
		||||
 | 
			
		||||
Note 1: Some programs in this package require a TCP/IP library.
 | 
			
		||||
 | 
			
		||||
Note 2: if you want to compile the crypto library only, please make sure
 | 
			
		||||
        you have at least done a @MAKEVMS CONFIG, a @MAKEVMS BUILDINF and
 | 
			
		||||
        a @MAKEVMS SOFTLINKS.  A lot of things will break if you don't.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Logical names:
 | 
			
		||||
==============
 | 
			
		||||
 | 
			
		||||
There are a few things that can't currently be given through the command
 | 
			
		||||
line.  Instead, logical names are used.
 | 
			
		||||
 | 
			
		||||
Currently, the logical names supported are:
 | 
			
		||||
 | 
			
		||||
      OPENSSL_NO_ASM    with value YES, the assembler parts of OpenSSL will
 | 
			
		||||
                        not be used.  Instead, plain C implementations are
 | 
			
		||||
                        used.  This is good to try if something doesn't work.
 | 
			
		||||
      OPENSSL_NO_'alg'  with value YES, the corresponding crypto algorithm
 | 
			
		||||
                        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,
 | 
			
		||||
                        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.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Test:
 | 
			
		||||
=====
 | 
			
		||||
 | 
			
		||||
Testing is very simple, just do the following:
 | 
			
		||||
 | 
			
		||||
  @[.TEST]TESTS
 | 
			
		||||
 | 
			
		||||
If a test fails, try with defining the logical name OPENSSL_NO_ASM (yes,
 | 
			
		||||
it's an ugly hack!) and rebuild. Please send a bug report to
 | 
			
		||||
<openssl-bugs@openssl.org>, including the output of "openssl version -a"
 | 
			
		||||
and of the failed test.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Installation:
 | 
			
		||||
=============
 | 
			
		||||
 | 
			
		||||
Installation is easy, just do the following:
 | 
			
		||||
 | 
			
		||||
  @INSTALL <root>
 | 
			
		||||
 | 
			
		||||
<root> is the directory in which everything will be installed,
 | 
			
		||||
subdirectories, libraries, header files, programs and startup command
 | 
			
		||||
procedures.
 | 
			
		||||
 | 
			
		||||
N.B.: INSTALL.COM builds a new directory structure, different from
 | 
			
		||||
the directory tree where you have now build OpenSSL.
 | 
			
		||||
 | 
			
		||||
In the [.VMS] subdirectory of the installation, you will find the
 | 
			
		||||
following command procedures:
 | 
			
		||||
 | 
			
		||||
  OPENSSL_STARTUP.COM
 | 
			
		||||
 | 
			
		||||
        defines all needed logical names.  Takes one argument that
 | 
			
		||||
        tells it in what logical name table to insert the logical
 | 
			
		||||
        names.  If you insert if it SYS$MANAGER:SYSTARTUP_VMS.COM, the
 | 
			
		||||
        call should look like this: 
 | 
			
		||||
 | 
			
		||||
          @openssldev:[openssldir.VMS]OPENSSL_STARTUP "/SYSTEM"
 | 
			
		||||
 | 
			
		||||
  OPENSSL_UTILS.COM
 | 
			
		||||
 | 
			
		||||
        sets up the symbols to the applications.  Should be called
 | 
			
		||||
        from for example SYS$MANAGER:SYLOGIN.COM 
 | 
			
		||||
 | 
			
		||||
The logical names that are set up are the following:
 | 
			
		||||
 | 
			
		||||
  SSLROOT       a dotted concealed logical name pointing at the
 | 
			
		||||
                root directory.
 | 
			
		||||
 | 
			
		||||
  SSLCERTS      Initially an empty directory, this is the default
 | 
			
		||||
		location for certificate files.
 | 
			
		||||
  SSLMISC	Various scripts.
 | 
			
		||||
  SSLPRIVATE	Initially an empty directory, this is the default
 | 
			
		||||
		location for private key files.
 | 
			
		||||
 | 
			
		||||
  SSLEXE        Contains the openssl binary and a few other utility
 | 
			
		||||
		programs.
 | 
			
		||||
  SSLINCLUDE    Contains the header files needed if you want to
 | 
			
		||||
		compile programs with libcrypto or libssl.
 | 
			
		||||
  SSLLIB        Contains the OpenSSL library files (LIBCRYPTO.OLB
 | 
			
		||||
		and LIBSSL.OLB) themselves.
 | 
			
		||||
 | 
			
		||||
  OPENSSL	Same as SSLINCLUDE.  This is because the standard
 | 
			
		||||
		way to include OpenSSL header files from version
 | 
			
		||||
		0.9.3 and on is:
 | 
			
		||||
 | 
			
		||||
			#include <openssl/header.h>
 | 
			
		||||
 | 
			
		||||
		For more info on this issue, see the INSTALL. file
 | 
			
		||||
		(the NOTE in section 4 of "Installation in Detail").
 | 
			
		||||
		You don't need to "deleting old header files"!!!
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Backward portability:
 | 
			
		||||
=====================
 | 
			
		||||
 | 
			
		||||
One great problem when you build a library is making sure it will work
 | 
			
		||||
on as many versions of VMS as possible.  Especially, code compiled on
 | 
			
		||||
OpenVMS version 7.x and above tend to be unusable in version 6.x or
 | 
			
		||||
lower, because some C library routines have changed names internally
 | 
			
		||||
(the C programmer won't usually see it, because the old name is
 | 
			
		||||
maintained through C macros).  One obvious solution is to make sure
 | 
			
		||||
you have a development machine with an old enough version of OpenVMS.
 | 
			
		||||
However, if you are stuck with a bunch of Alphas running OpenVMS version
 | 
			
		||||
7.1, you seem to be out of luck.  Fortunately, the DEC C header files
 | 
			
		||||
are cluttered with conditionals that make some declarations and definitions
 | 
			
		||||
dependent on the OpenVMS version or the C library version, *and* you
 | 
			
		||||
can use those macros to simulate older OpenVMS or C library versions,
 | 
			
		||||
by defining the macros _VMS_V6_SOURCE, __VMS_VER and __CTRL_VER with
 | 
			
		||||
correct values.  In the compilation scripts, I've provided the possibility
 | 
			
		||||
for the user to influence the creation of such macros, through a bunch of
 | 
			
		||||
symbols, all having names starting with USER_.  Here's the list of them:
 | 
			
		||||
 | 
			
		||||
  USER_CCFLAGS		 - Used to give additional qualifiers to the
 | 
			
		||||
			   compiler.  It can't be used to define macros
 | 
			
		||||
			   since the scripts will do such things as well.
 | 
			
		||||
			   To do such things, use USER_CCDEFS.
 | 
			
		||||
  USER_CCDEFS		 - Used to define macros on the command line.  The
 | 
			
		||||
			   value of this symbol will be inserted inside a
 | 
			
		||||
			   /DEFINE=(...).
 | 
			
		||||
  USER_CCDISABLEWARNINGS - Used to disable some warnings.  The value is
 | 
			
		||||
			   inserted inside a /DISABLE=WARNING=(...).
 | 
			
		||||
 | 
			
		||||
So, to maintain backward compatibility with older VMS versions, do the
 | 
			
		||||
following before you start compiling:
 | 
			
		||||
 | 
			
		||||
  $ USER_CCDEFS := _VMS_V6_SOURCE=1,__VMS_VER=60000000,__CRTL_VER=60000000
 | 
			
		||||
  $ USER_CCDISABLEWARNINGS := PREOPTW
 | 
			
		||||
 | 
			
		||||
The USER_CCDISABLEWARNINGS is there because otherwise, DEC C will complain
 | 
			
		||||
that those macros have been changed.
 | 
			
		||||
 | 
			
		||||
Note: Currently, this is only useful for library compilation.  The
 | 
			
		||||
      programs will still be linked with the current version of the
 | 
			
		||||
      C library shareable image, and will thus complain if they are
 | 
			
		||||
      faced with an older version of the same C library shareable image.
 | 
			
		||||
      This will probably be fixed in a future revision of OpenSSL.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Possible bugs or quirks:
 | 
			
		||||
========================
 | 
			
		||||
 | 
			
		||||
I'm not perfectly sure all the programs will use the SSLCERTS:
 | 
			
		||||
directory by default, it may very well be that you have to give them
 | 
			
		||||
extra arguments.  Please experiment.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TODO:
 | 
			
		||||
=====
 | 
			
		||||
 | 
			
		||||
There are a few things that need to be worked out in the VMS version of
 | 
			
		||||
OpenSSL, still:
 | 
			
		||||
 | 
			
		||||
- Description files. ("Makefile's" :-))
 | 
			
		||||
- Script code to link an already compiled build tree.
 | 
			
		||||
- A VMSINSTALlable version (way in the future, unless someone else hacks).
 | 
			
		||||
- shareable images (DLL for you Windows folks).
 | 
			
		||||
 | 
			
		||||
There may be other things that I have missed and that may be desirable.
 | 
			
		||||
Please send mail to <openssl-users@openssl.org> or to me directly if you
 | 
			
		||||
have any ideas.
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
Richard Levitte <richard@levitte.org>
 | 
			
		||||
2000-02-27
 | 
			
		||||
							
								
								
									
										361
									
								
								INSTALL.W32
									
									
									
									
									
								
							
							
						
						
									
										361
									
								
								INSTALL.W32
									
									
									
									
									
								
							@@ -1,146 +1,277 @@
 | 
			
		||||
The Microsoft World.
 | 
			
		||||
 
 | 
			
		||||
The good news, to build SSLeay for the Microsft World
 | 
			
		||||
 INSTALLATION ON THE WIN32 PLATFORM
 | 
			
		||||
 ----------------------------------
 | 
			
		||||
 | 
			
		||||
Windows 3.1 DLL's
 | 
			
		||||
perl Configure VC-WIN16
 | 
			
		||||
nmake -f ms\w31dll.mak
 | 
			
		||||
 [Instructions for building for Windows CE can be found in INSTALL.WCE]
 | 
			
		||||
 | 
			
		||||
Windows NT/95 DLL's
 | 
			
		||||
perl Configure VC-WIN32
 | 
			
		||||
nmake -f ms\ntdll.mak
 | 
			
		||||
 Heres a few comments about building OpenSSL in Windows environments.  Most
 | 
			
		||||
 of this is tested on Win32 but it may also work in Win 3.1 with some
 | 
			
		||||
 modification.
 | 
			
		||||
 | 
			
		||||
Now the bad news
 | 
			
		||||
All builds were done using Microsofts Visual C++ 1.52c and [45].x.
 | 
			
		||||
If you are a borland person, you are probably going to have to help me
 | 
			
		||||
finish the stuff in util/pl/BC*pl
 | 
			
		||||
 You need Perl for Win32.  Unless you will build on Cygwin, you will need
 | 
			
		||||
 ActiveState Perl, available from http://www.activestate.com/ActivePerl.
 | 
			
		||||
 For Cygwin users, there's more info in the Cygwin section.
 | 
			
		||||
 | 
			
		||||
All builds were made under Windows NT - this means long filenames, so
 | 
			
		||||
you may have problems under Windows 3.1 but probably not under 95.
 | 
			
		||||
 and one of the following C compilers:
 | 
			
		||||
 | 
			
		||||
Because file pointers don't work in DLL's under Windows 3.1 (well at
 | 
			
		||||
least stdin/stdout don't and I don't like having to differentiate
 | 
			
		||||
between these and other file pointers), I now use the BIO file-pointer
 | 
			
		||||
module, which needs to be linked into your application.  You can either
 | 
			
		||||
use the memory buffer BIO for IO, or compile bss_file.c into your
 | 
			
		||||
application, it is in the apps directory and is just a copy of
 | 
			
		||||
crypto/buffer/bss_file.c with #define APPS_WIN16 added.
 | 
			
		||||
I have not yet automated the makefile to automatically copy it into 'out'
 | 
			
		||||
for a win 3.1 build....
 | 
			
		||||
  * Visual C++
 | 
			
		||||
  * Borland C
 | 
			
		||||
  * GNU C (Mingw32 or Cygwin)
 | 
			
		||||
 | 
			
		||||
All callbacks passed into SSLeay for Windows 3.1 need to be of type
 | 
			
		||||
_far _loadds.
 | 
			
		||||
 If you want to compile in the assembly language routines with Visual C++ then
 | 
			
		||||
 you will need an assembler. This is worth doing because it will result in
 | 
			
		||||
 faster code: for example it will typically result in a 2 times speedup in the
 | 
			
		||||
 RSA routines. Currently the following assemblers are supported:
 | 
			
		||||
 | 
			
		||||
I don't support building with the pascal calling convention.
 | 
			
		||||
  * Microsoft MASM (aka "ml")
 | 
			
		||||
  * Free Netwide Assembler NASM.
 | 
			
		||||
 | 
			
		||||
The DLL and static builds are large memory model.
 | 
			
		||||
 MASM was at one point distributed with VC++. It is now distributed with some
 | 
			
		||||
 Microsoft DDKs, for example the Windows NT 4.0 DDK and the Windows 98 DDK. If
 | 
			
		||||
 you do not have either of these DDKs then you can just download the binaries
 | 
			
		||||
 for the Windows 98 DDK and extract and rename the two files XXXXXml.exe and
 | 
			
		||||
 XXXXXml.err, to ml.exe and ml.err and install somewhere on your PATH. Both
 | 
			
		||||
 DDKs can be downloaded from the Microsoft developers site www.msdn.com.
 | 
			
		||||
 | 
			
		||||
To build static libraries for NT/95 or win 3.1
 | 
			
		||||
 NASM is freely available. Version 0.98 was used during testing: other versions
 | 
			
		||||
 may also work. It is available from many places, see for example:
 | 
			
		||||
 http://www.kernel.org/pub/software/devel/nasm/binaries/win32/
 | 
			
		||||
 The NASM binary nasmw.exe needs to be installed anywhere on your PATH.
 | 
			
		||||
 | 
			
		||||
perl util/mk1mf.pl VC-WIN32 > mf-stat.nt
 | 
			
		||||
perl util/mk1mf.pl VC-WIN16 > mf-stat.w31
 | 
			
		||||
for DLL's
 | 
			
		||||
perl util/mk1mf.pl dll VC-WIN32	> mf-dll.nt
 | 
			
		||||
perl util/mk1mf.pl dll VC-WIN16 > mf-dll.w31
 | 
			
		||||
 If you are compiling from a tarball or a CVS snapshot then the Win32 files
 | 
			
		||||
 may well be not up to date. This may mean that some "tweaking" is required to
 | 
			
		||||
 get it all to work. See the trouble shooting section later on for if (when?)
 | 
			
		||||
 it goes wrong.
 | 
			
		||||
 | 
			
		||||
Again you will notice that if you dont have perl, you cannot do this.
 | 
			
		||||
 Visual C++
 | 
			
		||||
 ----------
 | 
			
		||||
 | 
			
		||||
Now the next importaint issue.  Running Configure!
 | 
			
		||||
I have small assember code files for critical big number library operation
 | 
			
		||||
in crypto/bn/asm.  There is, asm code, object files and uuencode
 | 
			
		||||
object files.  They are
 | 
			
		||||
x86nt32.asm	- 32bit flat memory model assember - suitable Win32
 | 
			
		||||
x86w16.asm	- 16bit assember - used in the msdos build.
 | 
			
		||||
x86w32.asm	- 32bit assember, win 3.1 segments, used for win16 build.
 | 
			
		||||
 Firstly you should run Configure:
 | 
			
		||||
 | 
			
		||||
If you feel compelled to build the 16bit maths routines in the windows 3.1
 | 
			
		||||
build,
 | 
			
		||||
perl Configure VC-W31-16
 | 
			
		||||
perl util/mk1mf.pl dll VC-W31-16 > mf-dll.w31
 | 
			
		||||
 > perl Configure VC-WIN32
 | 
			
		||||
 | 
			
		||||
If you hate assember and don't want anything to do with it,
 | 
			
		||||
perl util/mk1mf.pl no-asm VC-WIN16 > mf-dll.w31
 | 
			
		||||
will work for any of the makefile generations.
 | 
			
		||||
 Next you need to build the Makefiles and optionally the assembly language
 | 
			
		||||
 files:
 | 
			
		||||
 | 
			
		||||
There are more options to mk1mf.pl but these all leave the temporary
 | 
			
		||||
files in 'tmp' and the output files in 'out' by default.
 | 
			
		||||
 - If you are using MASM then run:
 | 
			
		||||
 | 
			
		||||
The NT build is done for console mode.
 | 
			
		||||
   > ms\do_masm
 | 
			
		||||
 | 
			
		||||
The Windows 3.1 version of SSLeay uses quickwin, the interface is ugly
 | 
			
		||||
but it is better than nothing.  If you want ugly, try doing anything
 | 
			
		||||
that involves getting a password.  I decided to be ugly instead of
 | 
			
		||||
echoing characters.  For Windows 3.1 I would just sugest using the
 | 
			
		||||
msdos version of the ssleay application for command line work.
 | 
			
		||||
The QuickWin build is primarily for testing.
 | 
			
		||||
 - If you are using NASM then run:
 | 
			
		||||
 | 
			
		||||
For both NT and Windows 3.1, I have not written the code so that
 | 
			
		||||
s_client, s_server can take input from the keyboard.  You can happily
 | 
			
		||||
start applications up in separate windows, watch them handshake, and then sit
 | 
			
		||||
there for-ever.  I have not had the time to get this working, and I've
 | 
			
		||||
been able to test things from a unix box to the NT box :-).
 | 
			
		||||
Try running ssleay s_server on the windows box
 | 
			
		||||
(with either -cert ../apps/server.pem -www)
 | 
			
		||||
and run ssleay s_time from another window.
 | 
			
		||||
This often stuffs up on Windows 3.1, but I'm not worried since this is
 | 
			
		||||
probably a problem with my demo applications, not the libraries.
 | 
			
		||||
   > ms\do_nasm
 | 
			
		||||
 | 
			
		||||
After a build of one of the version of microsoft SSLeay,
 | 
			
		||||
'cd ms' and then run 'test'.  This should check everything out and
 | 
			
		||||
even does a trial run of generating certificates.
 | 
			
		||||
'test.bat' requires that perl be install, you be in the ms directory
 | 
			
		||||
(not the test directory, thats for unix so stay out :-) and that the
 | 
			
		||||
build output directory be ../out 
 | 
			
		||||
 - If you don't want to use the assembly language files at all then run:
 | 
			
		||||
 | 
			
		||||
On a last note, you will probably get division by zero errors and
 | 
			
		||||
stuff after a build.  This is due to your own inability to follow
 | 
			
		||||
instructions :-).
 | 
			
		||||
   > ms\do_ms
 | 
			
		||||
 | 
			
		||||
The reasons for the problem is probably one of the following.
 | 
			
		||||
 If you get errors about things not having numbers assigned then check the
 | 
			
		||||
 troubleshooting section: you probably won't be able to compile it as it
 | 
			
		||||
 stands.
 | 
			
		||||
 | 
			
		||||
1)	You did not run Configure.  This is critical for windows 3.1 when
 | 
			
		||||
	using assember.  The values in crypto/bn/bn.h must match the
 | 
			
		||||
	ones requred for the assember code.  (remember that if you
 | 
			
		||||
	edit crypto/bn/bn.h by hand, it will be clobered the next time
 | 
			
		||||
	you run Configure by the contents of crypto/bn/bn.org).
 | 
			
		||||
	SSLeay version -o will list the compile options.
 | 
			
		||||
	For VC-WIN32 you need bn(64,32) or bn(32,32)
 | 
			
		||||
	For VC-W31-32/VC-WIN16 you need bn(32,32)
 | 
			
		||||
	For VC-W31-16 you need bn(32,16) or bn(16,16)
 | 
			
		||||
	For VC-MSDOS you need bn(32,16) or bn(16,16).
 | 
			
		||||
 Then from the VC++ environment at a prompt do:
 | 
			
		||||
 | 
			
		||||
	The first number will be 2 times bigger than the second if
 | 
			
		||||
	BN_LLONG is defined in bn.h and the size of the second number
 | 
			
		||||
	depends on the 'bits' defined at the start of bn.h.  Have a
 | 
			
		||||
	look, it's all reasonably clear.
 | 
			
		||||
	If you want to start messing with 8 bit builds and things like
 | 
			
		||||
	that, build without the assember by re-generating a makefile
 | 
			
		||||
	via 'perl util/mk1mf.pl no-asm'.
 | 
			
		||||
2)	You tried to build under MS-DOS or Windows 3.1 using the /G3
 | 
			
		||||
	option.  Don't.  It is buggy (thats why you just got that
 | 
			
		||||
	error) and unless you want to work out which optimising flag
 | 
			
		||||
	to turn off, I'm not going to help you :-).  I also noticed
 | 
			
		||||
	that code often ran slower when compiled with /G3.
 | 
			
		||||
3)	Under NT/95, malloc goes stupid.  You are probably linking with
 | 
			
		||||
	the wrong library, there are problems if you mix the threaded
 | 
			
		||||
	and non-threaded libraries (due to the DLL being staticly
 | 
			
		||||
	linked with one and the applicaion using another.
 | 
			
		||||
 > nmake -f ms\ntdll.mak
 | 
			
		||||
 | 
			
		||||
Well hopefully thats most of the MS issues handled, see you in ssl-users :-).
 | 
			
		||||
 If all is well it should compile and you will have some DLLs and executables
 | 
			
		||||
 in out32dll. If you want to try the tests then do:
 | 
			
		||||
 
 | 
			
		||||
eric 30-Aug-1996
 | 
			
		||||
 > cd out32dll
 | 
			
		||||
 > ..\ms\test
 | 
			
		||||
 | 
			
		||||
SSLeay 0.6.5
 | 
			
		||||
For Windows 95/NT, add CRYPTO_malloc_init() to your program before any
 | 
			
		||||
calls to the SSLeay libraries.  This function will insert callbacks so that
 | 
			
		||||
the SSLeay libraries will use the same malloc(), free() and realloc() as
 | 
			
		||||
your application so 'problem 3)' mentioned above will go away.
 | 
			
		||||
 Tweaks:
 | 
			
		||||
 | 
			
		||||
There is now DES assember for Windows NT/95.  The file is
 | 
			
		||||
crypto/des/asm/win32.asm and replaces crypto/des/des_enc.c in the build.
 | 
			
		||||
 There are various changes you can make to the Win32 compile environment. By
 | 
			
		||||
 default the library is not compiled with debugging symbols. If you add 'debug'
 | 
			
		||||
 to the mk1mf.pl lines in the do_* batch file then debugging symbols will be
 | 
			
		||||
 compiled in. Note that mk1mf.pl expects the platform to be the last argument
 | 
			
		||||
 on the command line, so 'debug' must appear before that, as all other options.
 | 
			
		||||
 | 
			
		||||
There is also Blowfish assember for Windows NT/95.  The file is
 | 
			
		||||
crypto/bf/asm/win32.asm and replaces crypto/bf/bf_enc.c in the build.
 | 
			
		||||
 The default Win32 environment is to leave out any Windows NT specific
 | 
			
		||||
 features.
 | 
			
		||||
 | 
			
		||||
eric 25-Jun-1997
 | 
			
		||||
 If you want to enable the NT specific features of OpenSSL (currently only the
 | 
			
		||||
 logging BIO) follow the instructions above but call the batch file do_nt.bat
 | 
			
		||||
 instead of do_ms.bat.
 | 
			
		||||
 | 
			
		||||
 You can also build a static version of the library using the Makefile
 | 
			
		||||
 ms\nt.mak
 | 
			
		||||
 | 
			
		||||
 Borland C++ builder 5
 | 
			
		||||
 ---------------------
 | 
			
		||||
 | 
			
		||||
 * Configure for building with Borland Builder:
 | 
			
		||||
   > perl Configure BC-32
 | 
			
		||||
 | 
			
		||||
 * Create the appropriate makefile
 | 
			
		||||
   > ms\do_nasm
 | 
			
		||||
 | 
			
		||||
 * Build
 | 
			
		||||
   > make -f ms\bcb.mak
 | 
			
		||||
 | 
			
		||||
 Borland C++ builder 3 and 4
 | 
			
		||||
 ---------------------------
 | 
			
		||||
 | 
			
		||||
 * Setup PATH. First must be GNU make then bcb4/bin 
 | 
			
		||||
 | 
			
		||||
 * Run ms\bcb4.bat
 | 
			
		||||
 | 
			
		||||
 * Run make:
 | 
			
		||||
   > make -f bcb.mak
 | 
			
		||||
 | 
			
		||||
 GNU C (Mingw32)
 | 
			
		||||
 ---------------
 | 
			
		||||
 | 
			
		||||
 To build OpenSSL, you need the Mingw32 package and GNU make.
 | 
			
		||||
 | 
			
		||||
 * Compiler installation:
 | 
			
		||||
 | 
			
		||||
   Mingw32 is available from <ftp://ftp.xraylith.wisc.edu/pub/khan/
 | 
			
		||||
   gnu-win32/mingw32/gcc-2.95.2/gcc-2.95.2-msvcrt.exe>. Extract it
 | 
			
		||||
   to a directory such as C:\gcc-2.95.2 and add c:\gcc-2.95.2\bin to
 | 
			
		||||
   the PATH environment variable in "System Properties"; or edit and
 | 
			
		||||
   run C:\gcc-2.95.2\mingw32.bat to set the PATH.
 | 
			
		||||
 | 
			
		||||
 * Compile OpenSSL:
 | 
			
		||||
 | 
			
		||||
   > ms\mingw32
 | 
			
		||||
 | 
			
		||||
   This will create the library and binaries in out. In case any problems
 | 
			
		||||
   occur, try
 | 
			
		||||
   > ms\mingw32 no-asm
 | 
			
		||||
   instead.
 | 
			
		||||
 | 
			
		||||
   libcrypto.a and libssl.a are the static libraries. To use the DLLs,
 | 
			
		||||
   link with libeay32.a and libssl32.a instead.
 | 
			
		||||
 | 
			
		||||
   See troubleshooting if you get error messages about functions not having
 | 
			
		||||
   a number assigned.
 | 
			
		||||
 | 
			
		||||
 * You can now try the tests:
 | 
			
		||||
 | 
			
		||||
   > cd out
 | 
			
		||||
   > ..\ms\test
 | 
			
		||||
 | 
			
		||||
 GNU C (Cygwin)
 | 
			
		||||
 --------------
 | 
			
		||||
 | 
			
		||||
 Cygwin provides a bash shell and GNU tools environment running
 | 
			
		||||
 on NT 4.0, Windows 9x, Windows ME, Windows 2000, and Windows XP.
 | 
			
		||||
 Consequently, a make of OpenSSL with Cygwin is closer to a GNU
 | 
			
		||||
 bash environment such as Linux than to other W32 makes which are
 | 
			
		||||
 based on a single makefile approach. Cygwin implements Posix/Unix
 | 
			
		||||
 calls through cygwin1.dll, and is contrasted to Mingw32 which links
 | 
			
		||||
 dynamically to msvcrt.dll or crtdll.dll.
 | 
			
		||||
 | 
			
		||||
 To build OpenSSL using Cygwin:
 | 
			
		||||
 | 
			
		||||
 * Install Cygwin (see http://cygwin.com/)
 | 
			
		||||
 | 
			
		||||
 * Install Perl and ensure it is in the path (recent Cygwin perl 
 | 
			
		||||
   (version 5.6.1-2 of the latter has been reported to work) or
 | 
			
		||||
   ActivePerl)
 | 
			
		||||
 | 
			
		||||
 * Run the Cygwin bash shell
 | 
			
		||||
 | 
			
		||||
 * $ tar zxvf openssl-x.x.x.tar.gz
 | 
			
		||||
   $ cd openssl-x.x.x
 | 
			
		||||
   $ ./config
 | 
			
		||||
   [...]
 | 
			
		||||
   $ make
 | 
			
		||||
   [...]
 | 
			
		||||
   $ make test
 | 
			
		||||
   $ make install
 | 
			
		||||
 | 
			
		||||
 This will create a default install in /usr/local/ssl.
 | 
			
		||||
 | 
			
		||||
 Cygwin Notes:
 | 
			
		||||
 | 
			
		||||
 "make test" and normal file operations may fail in directories
 | 
			
		||||
 mounted as text (i.e. mount -t c:\somewhere /home) due to Cygwin
 | 
			
		||||
 stripping of carriage returns. To avoid this ensure that a binary
 | 
			
		||||
 mount is used, e.g. mount -b c:\somewhere /home.
 | 
			
		||||
 | 
			
		||||
 "bc" is not provided in older Cygwin distribution.  This causes a
 | 
			
		||||
 non-fatal error in "make test" but is otherwise harmless.  If
 | 
			
		||||
 desired and needed, GNU bc can be built with Cygwin without change.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 Installation
 | 
			
		||||
 ------------
 | 
			
		||||
 | 
			
		||||
 If you used the Cygwin procedure above, you have already installed and
 | 
			
		||||
 can skip this section.  For all other procedures, there's currently no real
 | 
			
		||||
 installation procedure for Win32.  There are, however, some suggestions:
 | 
			
		||||
 | 
			
		||||
    - do nothing.  The include files are found in the inc32/ subdirectory,
 | 
			
		||||
      all binaries are found in out32dll/ or out32/ depending if you built
 | 
			
		||||
      dynamic or static libraries.
 | 
			
		||||
 | 
			
		||||
    - do as is written in INSTALL.Win32 that comes with modssl:
 | 
			
		||||
 | 
			
		||||
	$ md c:\openssl 
 | 
			
		||||
	$ md c:\openssl\bin
 | 
			
		||||
	$ md c:\openssl\lib
 | 
			
		||||
	$ md c:\openssl\include
 | 
			
		||||
	$ md c:\openssl\include\openssl
 | 
			
		||||
	$ copy /b inc32\*               c:\openssl\include\openssl
 | 
			
		||||
	$ copy /b out32dll\ssleay32.lib c:\openssl\lib
 | 
			
		||||
	$ copy /b out32dll\libeay32.lib c:\openssl\lib
 | 
			
		||||
	$ copy /b out32dll\ssleay32.dll c:\openssl\bin
 | 
			
		||||
	$ copy /b out32dll\libeay32.dll c:\openssl\bin
 | 
			
		||||
	$ copy /b out32dll\openssl.exe  c:\openssl\bin
 | 
			
		||||
 | 
			
		||||
      Of course, you can choose another device than c:.  C: is used here
 | 
			
		||||
      because that's usually the first (and often only) harddisk device.
 | 
			
		||||
      Note: in the modssl INSTALL.Win32, p: is used rather than c:.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 Troubleshooting
 | 
			
		||||
 ---------------
 | 
			
		||||
 | 
			
		||||
 Since the Win32 build is only occasionally tested it may not always compile
 | 
			
		||||
 cleanly.  If you get an error about functions not having numbers assigned
 | 
			
		||||
 when you run ms\do_ms then this means the Win32 ordinal files are not up to
 | 
			
		||||
 date. You can do:
 | 
			
		||||
 | 
			
		||||
 > perl util\mkdef.pl crypto ssl update
 | 
			
		||||
 | 
			
		||||
 then ms\do_XXX should not give a warning any more. However the numbers that
 | 
			
		||||
 get assigned by this technique may not match those that eventually get
 | 
			
		||||
 assigned in the CVS tree: so anything linked against this version of the
 | 
			
		||||
 library may need to be recompiled.
 | 
			
		||||
 | 
			
		||||
 If you get errors about unresolved symbols there are several possible
 | 
			
		||||
 causes.
 | 
			
		||||
 | 
			
		||||
 If this happens when the DLL is being linked and you have disabled some
 | 
			
		||||
 ciphers then it is possible the DEF file generator hasn't removed all
 | 
			
		||||
 the disabled symbols: the easiest solution is to edit the DEF files manually
 | 
			
		||||
 to delete them. The DEF files are ms\libeay32.def ms\ssleay32.def.
 | 
			
		||||
 | 
			
		||||
 Another cause is if you missed or ignored the errors about missing numbers
 | 
			
		||||
 mentioned above.
 | 
			
		||||
 | 
			
		||||
 If you get warnings in the code then the compilation will halt.
 | 
			
		||||
 | 
			
		||||
 The default Makefile for Win32 halts whenever any warnings occur. Since VC++
 | 
			
		||||
 has its own ideas about warnings which don't always match up to other
 | 
			
		||||
 environments this can happen. The best fix is to edit the file with the
 | 
			
		||||
 warning in and fix it. Alternatively you can turn off the halt on warnings by
 | 
			
		||||
 editing the CFLAG line in the Makefile and deleting the /WX option.
 | 
			
		||||
 | 
			
		||||
 You might get compilation errors. Again you will have to fix these or report
 | 
			
		||||
 them.
 | 
			
		||||
 | 
			
		||||
 One final comment about compiling applications linked to the OpenSSL library.
 | 
			
		||||
 If you don't use the multithreaded DLL runtime library (/MD option) your
 | 
			
		||||
 program will almost certainly crash because malloc gets confused -- the
 | 
			
		||||
 OpenSSL DLLs are statically linked to one version, the application must
 | 
			
		||||
 not use a different one.  You might be able to work around such problems
 | 
			
		||||
 by adding CRYPTO_malloc_init() to your program before any calls to the
 | 
			
		||||
 OpenSSL libraries: This tells the OpenSSL libraries to use the same
 | 
			
		||||
 malloc(), free() and realloc() as the application.  However there are many
 | 
			
		||||
 standard library functions used by OpenSSL that call malloc() internally
 | 
			
		||||
 (e.g. fopen()), and OpenSSL cannot change these; so in general you cannot
 | 
			
		||||
 rely on CRYPTO_malloc_init() solving your problem, and you should
 | 
			
		||||
 consistently use the multithreaded library.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										71
									
								
								INSTALL.WCE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								INSTALL.WCE
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
 
 | 
			
		||||
 INSTALLATION FOR THE WINDOWS CE PLATFORM
 | 
			
		||||
 ----------------------------------------
 | 
			
		||||
 | 
			
		||||
 Building OpenSSL for Windows CE requires the following external tools:
 | 
			
		||||
 | 
			
		||||
  * Microsoft eMbedded Visual C++ 3.0
 | 
			
		||||
  * wcecompat compatibility library (www.essemer.com.au)
 | 
			
		||||
  * Optionally ceutils for running automated tests (www.essemer.com.au)
 | 
			
		||||
 | 
			
		||||
 You also need Perl for Win32.  You will need ActiveState Perl, available
 | 
			
		||||
 from http://www.activestate.com/ActivePerl.
 | 
			
		||||
 | 
			
		||||
 Windows CE support in OpenSSL relies on wcecompat.  All Windows CE specific
 | 
			
		||||
 issues should be directed to www.essemer.com.au.
 | 
			
		||||
 | 
			
		||||
 The C Runtime Library implementation for Windows CE that is included with
 | 
			
		||||
 Microsoft eMbedded Visual C++ 3.0 is incomplete and in some places
 | 
			
		||||
 incorrect.  wcecompat plugs the holes and tries to bring the Windows CE
 | 
			
		||||
 CRT to a level that is more compatible with ANSI C.  wcecompat goes further
 | 
			
		||||
 and provides low-level IO and stream IO support for stdin/stdout/stderr
 | 
			
		||||
 (which Windows CE does not provide).  This IO functionality is not needed
 | 
			
		||||
 by the OpenSSL library itself but is used for the tests and openssl.exe.
 | 
			
		||||
 More information is available at www.essemer.com.au.
 | 
			
		||||
 | 
			
		||||
 Building
 | 
			
		||||
 --------
 | 
			
		||||
 | 
			
		||||
 Setup the eMbedded Visual C++ environment.  There are batch files for doing
 | 
			
		||||
 this installed with eVC++.  For an ARM processor, for example, execute:
 | 
			
		||||
 | 
			
		||||
 > "C:\Program Files\Microsoft eMbedded Tools\EVC\WCE300\BIN\WCEARM.BAT"
 | 
			
		||||
 | 
			
		||||
 Next indicate where wcecompat is located:
 | 
			
		||||
 | 
			
		||||
 > set WCECOMPAT=C:\wcecompat
 | 
			
		||||
 | 
			
		||||
 Next you should run Configure:
 | 
			
		||||
 | 
			
		||||
 > perl Configure VC-CE
 | 
			
		||||
 | 
			
		||||
 Next you need to build the Makefiles:
 | 
			
		||||
 | 
			
		||||
 > ms\do_ms
 | 
			
		||||
 | 
			
		||||
 If you get errors about things not having numbers assigned then check the
 | 
			
		||||
 troubleshooting section in INSTALL.W32: you probably won't be able to compile
 | 
			
		||||
 it as it stands.
 | 
			
		||||
 | 
			
		||||
 Then from the VC++ environment at a prompt do:
 | 
			
		||||
 | 
			
		||||
 - to build static libraries:
 | 
			
		||||
 | 
			
		||||
   > nmake -f ms\ce.mak
 | 
			
		||||
 | 
			
		||||
 - or to build DLLs:
 | 
			
		||||
 | 
			
		||||
   > nmake -f ms\cedll.mak
 | 
			
		||||
 | 
			
		||||
 If all is well it should compile and you will have some static libraries and
 | 
			
		||||
 executables in out32, or some DLLs and executables in out32dll.  If you want
 | 
			
		||||
 to try the tests then make sure the ceutils are in the path and do:
 | 
			
		||||
 
 | 
			
		||||
 > cd out32
 | 
			
		||||
 > ..\ms\testce
 | 
			
		||||
 | 
			
		||||
 This will copy each of the test programs to the Windows CE device and execute
 | 
			
		||||
 them, displaying the output of the tests on this computer.  The output should
 | 
			
		||||
 look similar to the output produced by running the tests for a regular Windows
 | 
			
		||||
 build.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										143
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										143
									
								
								LICENSE
									
									
									
									
									
								
							@@ -1,6 +1,18 @@
 | 
			
		||||
 | 
			
		||||
  LICENSE ISSUES
 | 
			
		||||
  ==============
 | 
			
		||||
 | 
			
		||||
  The OpenSSL toolkit stays under a dual license, i.e. both the conditions of
 | 
			
		||||
  the OpenSSL License and the original SSLeay license apply to the toolkit.
 | 
			
		||||
  See below for the actual license texts. Actually both licenses are BSD-style
 | 
			
		||||
  Open Source licenses. In case of any license issues related to OpenSSL
 | 
			
		||||
  please contact openssl-core@openssl.org.
 | 
			
		||||
 | 
			
		||||
  OpenSSL License
 | 
			
		||||
  ---------------
 | 
			
		||||
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1998 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
 | 
			
		||||
@@ -17,12 +29,12 @@
 | 
			
		||||
 * 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/)"
 | 
			
		||||
 *    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.
 | 
			
		||||
 *    openssl-core@openssl.org.
 | 
			
		||||
 *
 | 
			
		||||
 * 5. Products derived from this software may not be called "OpenSSL"
 | 
			
		||||
 *    nor may "OpenSSL" appear in their names without prior written
 | 
			
		||||
@@ -31,7 +43,7 @@
 | 
			
		||||
 * 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/)"
 | 
			
		||||
 *    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
 | 
			
		||||
@@ -52,73 +64,64 @@
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
__________________________________________________________________________
 | 
			
		||||
 | 
			
		||||
 Original SSLeay License
 | 
			
		||||
__________________________________________________________________________
 | 
			
		||||
 -----------------------
 | 
			
		||||
 | 
			
		||||
Copyright (C) 1997 Eric Young (eay@cryptsoft.com)
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
This package is an SSL implementation written by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 | 
			
		||||
This library is free for commercial and non-commercial use as long as
 | 
			
		||||
the following conditions are aheared to.  The following conditions
 | 
			
		||||
apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
included with this distribution is covered by the same copyright terms
 | 
			
		||||
except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 | 
			
		||||
Please note that MD2, MD5 and IDEA are publically available standards
 | 
			
		||||
that contain sample implementations, I have re-coded them in my own
 | 
			
		||||
way but there is nothing special about those implementations.  The DES
 | 
			
		||||
library is another mater :-).
 | 
			
		||||
 | 
			
		||||
Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
the code are not to be removed.
 | 
			
		||||
If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
as the author of the parts of the library used.
 | 
			
		||||
This can be in the form of a textual message at program startup or
 | 
			
		||||
in documentation (online or textual) provided with the package.
 | 
			
		||||
 | 
			
		||||
Redistribution and use in source and binary forms, with or without
 | 
			
		||||
modification, are permitted provided that the following conditions
 | 
			
		||||
are met:
 | 
			
		||||
1. Redistributions of source code must retain the copyright
 | 
			
		||||
   notice, this list of conditions and the following disclaimer.
 | 
			
		||||
2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
   notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
   documentation and/or other materials provided with the distribution.
 | 
			
		||||
3. All advertising materials mentioning features or use of this software
 | 
			
		||||
   must display the following acknowledgement:
 | 
			
		||||
   "This product includes cryptographic software written by
 | 
			
		||||
    Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
   The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
   being used are not cryptographic related :-).
 | 
			
		||||
4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
   the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
   "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
The licence and distribution terms for any publically available version or
 | 
			
		||||
derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
copied and put under another distribution licence
 | 
			
		||||
[including the GNU Public Licence.]
 | 
			
		||||
 | 
			
		||||
The reason behind this being stated in this direct manner is past
 | 
			
		||||
experience in code simply being copied and the attribution removed
 | 
			
		||||
from it and then being distributed as part of other packages. This
 | 
			
		||||
implementation was a non-trivial and unpaid effort.
 | 
			
		||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this software
 | 
			
		||||
 *    must display the following acknowledgement:
 | 
			
		||||
 *    "This product includes cryptographic software written by
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										993
									
								
								MINFO
									
									
									
									
									
								
							
							
						
						
									
										993
									
								
								MINFO
									
									
									
									
									
								
							@@ -1,993 +0,0 @@
 | 
			
		||||
RELATIVE_DIRECTORY=.
 | 
			
		||||
AR=ar r
 | 
			
		||||
BASENAME=openssl
 | 
			
		||||
BF_ENC=bf_enc.o
 | 
			
		||||
BN_ASM=bn_asm.o
 | 
			
		||||
CAST_ENC=c_enc.o
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-O -DNOPROTO
 | 
			
		||||
DES_ENC=des_enc.o fcrypt_b.o
 | 
			
		||||
DIRS=crypto ssl rsaref apps test tools
 | 
			
		||||
EDIRS=times doc bugs util include certs ms shlib mt demos perl sf dep
 | 
			
		||||
EXHEADER=e_os.h
 | 
			
		||||
EX_LIBS=
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=e_os.h
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIBS=libcrypto.a libssl.a
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
MAN1=1
 | 
			
		||||
MAN3=3
 | 
			
		||||
MD5_ASM_OBJ=
 | 
			
		||||
NAME=openssl-0.9.1c
 | 
			
		||||
ONEDIRS=out tmp
 | 
			
		||||
PEX_LIBS=-L. -L.. -L../.. -L../../..
 | 
			
		||||
PLATFORM=dist
 | 
			
		||||
RC4_ENC=rc4_enc.o
 | 
			
		||||
RC5_ENC=rc5_enc.o
 | 
			
		||||
RMD160_ASM_OBJ=
 | 
			
		||||
SDIRS=md2 md5 sha mdc2 hmac ripemd des rc2 rc4 rc5 idea bf cast bn rsa dsa dh buffer bio stack lhash rand err objects evp pem asn1 x509 conf txt_db pkcs7 comp
 | 
			
		||||
SHA1_ASM_OBJ=
 | 
			
		||||
SHELL=/bin/sh
 | 
			
		||||
TARFILE=openssl-0.9.1c.tar
 | 
			
		||||
TOP=.
 | 
			
		||||
VERSION=0.9.1c
 | 
			
		||||
WDIRS=windows
 | 
			
		||||
WTARFILE=openssl-0.9.1c-win.tar
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto
 | 
			
		||||
ALL=Makefile README cryptlib.c mem.c cversion.c ex_data.c tmdiff.c cpt_err.c cryptlib.h date.h crypto.h cryptall.h tmdiff.h
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I. -I../include -g -DCFLAGS=" \"cc -g\" " -DPLATFORM=" \"\" "
 | 
			
		||||
DIR=crypto
 | 
			
		||||
ERR=crypto
 | 
			
		||||
ERRC=cpt_err
 | 
			
		||||
EXHEADER=crypto.h cryptall.h tmdiff.h
 | 
			
		||||
EX_LIBS=
 | 
			
		||||
GENERAL=Makefile README
 | 
			
		||||
HEADER=cryptlib.h date.h crypto.h cryptall.h tmdiff.h
 | 
			
		||||
INCLUDE=-I. -I../include
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../libcrypto.a
 | 
			
		||||
LIBOBJ=cryptlib.o mem.o cversion.o ex_data.o tmdiff.o cpt_err.o
 | 
			
		||||
LIBS=
 | 
			
		||||
LIBSRC=cryptlib.c mem.c cversion.c ex_data.c tmdiff.c cpt_err.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
PEX_LIBS=
 | 
			
		||||
RM=/bin/rm -f
 | 
			
		||||
SDIRS=md2 md5 sha mdc2 hmac ripemd des rc2 rc4 rc5 idea bf cast bn rsa dsa dh buffer bio stack lhash rand err objects evp pem x509 asn1 conf txt_db pkcs7 comp
 | 
			
		||||
SRC=cryptlib.c mem.c cversion.c ex_data.c tmdiff.c cpt_err.c
 | 
			
		||||
TOP=..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/md2
 | 
			
		||||
ALL=Makefile md2_dgst.c md5_one.c md2.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
DIR=md
 | 
			
		||||
EXHEADER=md2.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=md2.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=md2_dgst.o md2_one.o
 | 
			
		||||
LIBSRC=md2_dgst.c md5_one.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=md2_dgst.c md5_one.c
 | 
			
		||||
TEST=md2test.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/md5
 | 
			
		||||
ALL=Makefile md5_dgst.c md5_one.c md5_locl.h md5.h
 | 
			
		||||
APPS=md5.c
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
CPP=cc -E
 | 
			
		||||
DIR=md5
 | 
			
		||||
EXHEADER=md5.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=md5_locl.h md5.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=md5_dgst.o md5_one.o 
 | 
			
		||||
LIBSRC=md5_dgst.c md5_one.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
MD5_ASM_OBJ=
 | 
			
		||||
SRC=md5_dgst.c md5_one.c
 | 
			
		||||
TEST=md5test.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/sha
 | 
			
		||||
ALL=Makefile sha_dgst.c sha1dgst.c sha_one.c sha1_one.c sha_locl.h sha.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
DIR=sha
 | 
			
		||||
EXHEADER=sha.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=sha_locl.h sha.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=sha_dgst.o sha1dgst.o sha_one.o sha1_one.o 
 | 
			
		||||
LIBSRC=sha_dgst.c sha1dgst.c sha_one.c sha1_one.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SHA1_ASM_OBJ=
 | 
			
		||||
SRC=sha_dgst.c sha1dgst.c sha_one.c sha1_one.c
 | 
			
		||||
TEST=shatest.c sha1test.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/mdc2
 | 
			
		||||
ALL=Makefile mdc2dgst.c mdc2_one.c mdc2.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
DIR=mdc2
 | 
			
		||||
EXHEADER=mdc2.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=mdc2.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=mdc2dgst.o mdc2_one.o
 | 
			
		||||
LIBSRC=mdc2dgst.c mdc2_one.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=mdc2dgst.c mdc2_one.c
 | 
			
		||||
TEST=mdc2test.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/hmac
 | 
			
		||||
ALL=Makefile hmac.c hmac.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
DIR=hmac
 | 
			
		||||
EXHEADER=hmac.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=hmac.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=hmac.o
 | 
			
		||||
LIBSRC=hmac.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=hmac.c
 | 
			
		||||
TEST=hmactest.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/ripemd
 | 
			
		||||
ALL=Makefile rmd_dgst.c rmd_one.c rmd_locl.h rmdconst.h ripemd.h
 | 
			
		||||
APPS=rmd160.c
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
CPP=cc -E
 | 
			
		||||
DIR=ripemd
 | 
			
		||||
EXHEADER=ripemd.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=rmd_locl.h rmdconst.h ripemd.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=rmd_dgst.o rmd_one.o 
 | 
			
		||||
LIBSRC=rmd_dgst.c rmd_one.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
RIP_ASM_OBJ=
 | 
			
		||||
SRC=rmd_dgst.c rmd_one.c
 | 
			
		||||
TEST=rmdtest.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/des
 | 
			
		||||
ALL=Makefile des.org des_locl.org cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c ecb3_enc.c ecb_enc.c enc_read.c enc_writ.c fcrypt.c ofb64enc.c ofb_enc.c pcbc_enc.c qud_cksm.c rand_key.c read_pwd.c rpc_enc.c set_key.c des_enc.c fcrypt_b.c read2pwd.c fcrypt.c xcbc_enc.c str2key.c cfb64ede.c ofb64ede.c supp.c des_locl.h rpc_des.h podd.h sk.h spr.h des_ver.h des.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
CPP=cc -E
 | 
			
		||||
DES_ENC=des_enc.o fcrypt_b.o
 | 
			
		||||
DIR=des
 | 
			
		||||
EXHEADER=des.h
 | 
			
		||||
GENERAL=Makefile des.org des_locl.org
 | 
			
		||||
HEADER=des_locl.h rpc_des.h podd.h sk.h spr.h des_ver.h des.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=set_key.o ecb_enc.o cbc_enc.o ecb3_enc.o cfb64enc.o cfb64ede.o cfb_enc.o ofb64ede.o enc_read.o enc_writ.o ofb64enc.o ofb_enc.o str2key.o pcbc_enc.o qud_cksm.o rand_key.o des_enc.o fcrypt_b.o read2pwd.o fcrypt.o xcbc_enc.o read_pwd.o rpc_enc.o cbc_cksm.o supp.o
 | 
			
		||||
LIBSRC=cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c ecb3_enc.c ecb_enc.c enc_read.c enc_writ.c fcrypt.c ofb64enc.c ofb_enc.c pcbc_enc.c qud_cksm.c rand_key.c read_pwd.c rpc_enc.c set_key.c des_enc.c fcrypt_b.c read2pwd.c fcrypt.c xcbc_enc.c str2key.c cfb64ede.c ofb64ede.c supp.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c ecb3_enc.c ecb_enc.c enc_read.c enc_writ.c fcrypt.c ofb64enc.c ofb_enc.c pcbc_enc.c qud_cksm.c rand_key.c read_pwd.c rpc_enc.c set_key.c des_enc.c fcrypt_b.c read2pwd.c fcrypt.c xcbc_enc.c str2key.c cfb64ede.c ofb64ede.c supp.c
 | 
			
		||||
TEST=destest.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/rc2
 | 
			
		||||
ALL=Makefile rc2_ecb.c rc2_skey.c rc2_cbc.c rc2cfb64.c rc2ofb64.c rc2_locl.h rc2.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
DIR=rc2
 | 
			
		||||
EXHEADER=rc2.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=rc2_locl.h rc2.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=rc2_ecb.o rc2_skey.o rc2_cbc.o rc2cfb64.o rc2ofb64.o
 | 
			
		||||
LIBSRC=rc2_ecb.c rc2_skey.c rc2_cbc.c rc2cfb64.c rc2ofb64.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=rc2_ecb.c rc2_skey.c rc2_cbc.c rc2cfb64.c rc2ofb64.c
 | 
			
		||||
TEST=rc2test.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/rc4
 | 
			
		||||
ALL=Makefile rc4_skey.c rc4_enc.c rc4.h rc4_locl.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
DIR=rc4
 | 
			
		||||
EXHEADER=rc4.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=rc4.h rc4_locl.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=rc4_skey.o rc4_enc.o
 | 
			
		||||
LIBSRC=rc4_skey.c rc4_enc.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
RC4_ENC=rc4_enc.o
 | 
			
		||||
SRC=rc4_skey.c rc4_enc.c
 | 
			
		||||
TEST=rc4test.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/rc5
 | 
			
		||||
ALL=Makefile rc5_skey.c rc5_ecb.c rc5_enc.c rc5cfb64.c rc5ofb64.c rc5_locl.h rc5.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
CPP=cc -E
 | 
			
		||||
DIR=rc5
 | 
			
		||||
EXHEADER=rc5.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=rc5_locl.h rc5.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=rc5_skey.o rc5_ecb.o rc5_enc.o rc5cfb64.o rc5ofb64.o
 | 
			
		||||
LIBSRC=rc5_skey.c rc5_ecb.c rc5_enc.c rc5cfb64.c rc5ofb64.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
RC5_ENC=rc5_enc.o
 | 
			
		||||
SRC=rc5_skey.c rc5_ecb.c rc5_enc.c rc5cfb64.c rc5ofb64.c
 | 
			
		||||
TEST=rc5test.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/idea
 | 
			
		||||
ALL=Makefile i_cbc.c i_cfb64.c i_ofb64.c i_ecb.c i_skey.c idea_lcl.h idea.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
DIR=idea
 | 
			
		||||
EXHEADER=idea.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=idea_lcl.h idea.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=i_cbc.o i_cfb64.o i_ofb64.o i_ecb.o i_skey.o
 | 
			
		||||
LIBSRC=i_cbc.c i_cfb64.c i_ofb64.c i_ecb.c i_skey.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=i_cbc.c i_cfb64.c i_ofb64.c i_ecb.c i_skey.c
 | 
			
		||||
TEST=ideatest.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/bf
 | 
			
		||||
ALL=Makefile bf_skey.c bf_ecb.c bf_enc.c bf_cfb64.c bf_ofb64.c bf_pi.h bf_locl.h blowfish.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
BF_ENC=bf_enc.o
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
CPP=cc -E
 | 
			
		||||
DIR=bf
 | 
			
		||||
EXHEADER=blowfish.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=bf_pi.h bf_locl.h blowfish.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=bf_skey.o bf_ecb.o bf_enc.o bf_cfb64.o bf_ofb64.o
 | 
			
		||||
LIBSRC=bf_skey.c bf_ecb.c bf_enc.c bf_cfb64.c bf_ofb64.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=bf_skey.c bf_ecb.c bf_enc.c bf_cfb64.c bf_ofb64.c
 | 
			
		||||
TEST=bftest.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/cast
 | 
			
		||||
ALL=Makefile c_skey.c c_ecb.c c_enc.c c_cfb64.c c_ofb64.c cast_s.h cast_lcl.h cast.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CAST_ENC=c_enc.o
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
CPP=cc -E
 | 
			
		||||
DIR=cast
 | 
			
		||||
EXHEADER=cast.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=cast_s.h cast_lcl.h cast.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=c_skey.o c_ecb.o c_enc.o c_cfb64.o c_ofb64.o
 | 
			
		||||
LIBSRC=c_skey.c c_ecb.c c_enc.c c_cfb64.c c_ofb64.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=c_skey.c c_ecb.c c_enc.c c_cfb64.c c_ofb64.c
 | 
			
		||||
TEST=casttest.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/bn
 | 
			
		||||
ALL=Makefile bn_add.c bn_div.c bn_exp.c bn_lib.c bn_mul.c bn_print.c bn_rand.c bn_shift.c bn_word.c bn_blind.c bn_gcd.c bn_prime.c bn_err.c bn_sqr.c bn_asm.c bn_recp.c bn_mont.c bn_mpi.c bn_exp2.c bn_lcl.h bn_prime.h bn.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
BN_ASM=bn_asm.o
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I.. -I../../include -g
 | 
			
		||||
DIR=bn
 | 
			
		||||
ERR=bn
 | 
			
		||||
ERRC=bn_err
 | 
			
		||||
EXHEADER=bn.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=bn_lcl.h bn_prime.h bn.h
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=bn_add.o bn_div.o bn_exp.o bn_lib.o bn_mul.o bn_print.o bn_rand.o bn_shift.o bn_word.o bn_blind.o bn_gcd.o bn_prime.o bn_err.o bn_sqr.o bn_asm.o bn_recp.o bn_mont.o bn_mpi.o bn_exp2.o
 | 
			
		||||
LIBSRC=bn_add.c bn_div.c bn_exp.c bn_lib.c bn_mul.c bn_print.c bn_rand.c bn_shift.c bn_word.c bn_blind.c bn_gcd.c bn_prime.c bn_err.c bn_sqr.c bn_asm.c bn_recp.c bn_mont.c bn_mpi.c bn_exp2.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=bn_add.c bn_div.c bn_exp.c bn_lib.c bn_mul.c bn_print.c bn_rand.c bn_shift.c bn_word.c bn_blind.c bn_gcd.c bn_prime.c bn_err.c bn_sqr.c bn_asm.c bn_recp.c bn_mont.c bn_mpi.c bn_exp2.c
 | 
			
		||||
TEST=bntest.c exptest.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/rsa
 | 
			
		||||
ALL=Makefile rsa_eay.c rsa_gen.c rsa_lib.c rsa_sign.c rsa_saos.c rsa_err.c rsa_pk1.c rsa_ssl.c rsa_none.c rsa.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I.. -I../../include -g
 | 
			
		||||
DIR=rsa
 | 
			
		||||
ERR=rsa
 | 
			
		||||
ERRC=rsa_err
 | 
			
		||||
EXHEADER=rsa.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=rsa.h
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=rsa_eay.o rsa_gen.o rsa_lib.o rsa_sign.o rsa_saos.o rsa_err.o rsa_pk1.o rsa_ssl.o rsa_none.o
 | 
			
		||||
LIBSRC=rsa_eay.c rsa_gen.c rsa_lib.c rsa_sign.c rsa_saos.c rsa_err.c rsa_pk1.c rsa_ssl.c rsa_none.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=rsa_eay.c rsa_gen.c rsa_lib.c rsa_sign.c rsa_saos.c rsa_err.c rsa_pk1.c rsa_ssl.c rsa_none.c
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/dsa
 | 
			
		||||
ALL=Makefile dsa_gen.c dsa_key.c dsa_lib.c dsa_vrf.c dsa_sign.c dsa_err.c dsa.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I.. -I../../include -g
 | 
			
		||||
DIR=dsa
 | 
			
		||||
ERR=dsa
 | 
			
		||||
ERRC=dsa_err
 | 
			
		||||
EXHEADER=dsa.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=dsa.h
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=dsa_gen.o dsa_key.o dsa_lib.o dsa_vrf.o dsa_sign.o dsa_err.o
 | 
			
		||||
LIBSRC=dsa_gen.c dsa_key.c dsa_lib.c dsa_vrf.c dsa_sign.c dsa_err.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=dsa_gen.c dsa_key.c dsa_lib.c dsa_vrf.c dsa_sign.c dsa_err.c
 | 
			
		||||
TEST=dsatest.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/dh
 | 
			
		||||
ALL=Makefile dh_gen.c dh_key.c dh_lib.c dh_check.c dh_err.c dh.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I.. -I../../include -g
 | 
			
		||||
DIR=dh
 | 
			
		||||
ERR=dh
 | 
			
		||||
ERRC=dh_err
 | 
			
		||||
EXHEADER=dh.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=dh.h
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=dh_gen.o dh_key.o dh_lib.o dh_check.o dh_err.o
 | 
			
		||||
LIBSRC=dh_gen.c dh_key.c dh_lib.c dh_check.c dh_err.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=dh_gen.c dh_key.c dh_lib.c dh_check.c dh_err.c
 | 
			
		||||
TEST=dhtest.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/buffer
 | 
			
		||||
ALL=Makefile buffer.c buf_err.c buffer.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I.. -I../../include -g
 | 
			
		||||
DIR=buffer
 | 
			
		||||
ERR=buffer
 | 
			
		||||
ERRC=buf_err
 | 
			
		||||
EXHEADER=buffer.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=buffer.h
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=buffer.o buf_err.o
 | 
			
		||||
LIBSRC=buffer.c buf_err.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=buffer.c buf_err.c
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/bio
 | 
			
		||||
ALL=Makefile bio_lib.c bio_cb.c bio_err.c bss_mem.c bss_null.c bss_fd.c bss_file.c bss_sock.c bss_conn.c bf_null.c bf_buff.c b_print.c b_dump.c b_sock.c bss_acpt.c bf_nbio.c bio.h bss_file.c
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I.. -I../../include -g
 | 
			
		||||
DIR=bio
 | 
			
		||||
ERR=bio
 | 
			
		||||
ERRC=bio_err
 | 
			
		||||
EXHEADER=bio.h bss_file.c
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=bio.h bss_file.c
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=bio_lib.o bio_cb.o bio_err.o bss_mem.o bss_null.o bss_fd.o bss_file.o bss_sock.o bss_conn.o bf_null.o bf_buff.o b_print.o b_dump.o b_sock.o bss_acpt.o bf_nbio.o
 | 
			
		||||
LIBSRC=bio_lib.c bio_cb.c bio_err.c bss_mem.c bss_null.c bss_fd.c bss_file.c bss_sock.c bss_conn.c bf_null.c bf_buff.c b_print.c b_dump.c b_sock.c bss_acpt.c bf_nbio.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=bio_lib.c bio_cb.c bio_err.c bss_mem.c bss_null.c bss_fd.c bss_file.c bss_sock.c bss_conn.c bf_null.c bf_buff.c b_print.c b_dump.c b_sock.c bss_acpt.c bf_nbio.c
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/stack
 | 
			
		||||
ALL=Makefile stack.c stack.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
DIR=stack
 | 
			
		||||
EXHEADER=stack.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=stack.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=stack.o
 | 
			
		||||
LIBSRC=stack.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=stack.c
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/lhash
 | 
			
		||||
ALL=Makefile lhash.c lh_stats.c lhash.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
DIR=lhash
 | 
			
		||||
EXHEADER=lhash.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=lhash.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=lhash.o lh_stats.o
 | 
			
		||||
LIBSRC=lhash.c lh_stats.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=lhash.c lh_stats.c
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/rand
 | 
			
		||||
ALL=Makefile md_rand.c randfile.c rand_lib.c rand.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
DIR=rand
 | 
			
		||||
EXHEADER=rand.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=rand.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=md_rand.o randfile.o rand_lib.o
 | 
			
		||||
LIBSRC=md_rand.c randfile.c rand_lib.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=md_rand.c randfile.c rand_lib.c
 | 
			
		||||
TEST=randtest.c
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/err
 | 
			
		||||
ALL=Makefile err.c err_all.c err_prn.c err.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I.. -I../../include -g
 | 
			
		||||
DIR=err
 | 
			
		||||
EXHEADER=err.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=err.h
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=err.o err_all.o err_prn.o
 | 
			
		||||
LIBSRC=err.c err_all.c err_prn.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=err.c err_all.c err_prn.c
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/objects
 | 
			
		||||
ALL=Makefile README o_names.c obj_dat.c obj_lib.c obj_err.c objects.h obj_dat.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I.. -I../../include -g
 | 
			
		||||
DIR=objects
 | 
			
		||||
ERR=objects
 | 
			
		||||
ERRC=obj_err
 | 
			
		||||
EXHEADER=objects.h
 | 
			
		||||
GENERAL=Makefile README
 | 
			
		||||
HEADER=objects.h obj_dat.h
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=o_names.o obj_dat.o obj_lib.o obj_err.o
 | 
			
		||||
LIBSRC=o_names.c obj_dat.c obj_lib.c obj_err.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=o_names.c obj_dat.c obj_lib.c obj_err.c
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/evp
 | 
			
		||||
ALL=Makefile encode.c digest.c evp_enc.c evp_key.c e_ecb_d.c e_cbc_d.c e_cfb_d.c e_ofb_d.c e_ecb_i.c e_cbc_i.c e_cfb_i.c e_ofb_i.c e_ecb_3d.c e_cbc_3d.c e_rc4.c names.c e_cfb_3d.c e_ofb_3d.c e_xcbc_d.c e_ecb_r2.c e_cbc_r2.c e_cfb_r2.c e_ofb_r2.c e_ecb_bf.c e_cbc_bf.c e_cfb_bf.c e_ofb_bf.c e_ecb_c.c e_cbc_c.c e_cfb_c.c e_ofb_c.c e_ecb_r5.c e_cbc_r5.c e_cfb_r5.c e_ofb_r5.c m_null.c m_md2.c m_md5.c m_sha.c m_sha1.c m_dss.c m_dss1.c m_mdc2.c m_ripemd.c p_open.c p_seal.c p_sign.c p_verify.c p_lib.c p_enc.c p_dec.c bio_md.c bio_b64.c bio_enc.c evp_err.c e_null.c c_all.c evp_lib.c evp.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I.. -I../../include -g
 | 
			
		||||
DIR=evp
 | 
			
		||||
ERR=evp
 | 
			
		||||
ERRC=evp_err
 | 
			
		||||
EXHEADER=evp.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=evp.h
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=encode.o digest.o evp_enc.o evp_key.o e_ecb_d.o e_cbc_d.o e_cfb_d.o e_ofb_d.o e_ecb_i.o e_cbc_i.o e_cfb_i.o e_ofb_i.o e_ecb_3d.o e_cbc_3d.o e_rc4.o names.o e_cfb_3d.o e_ofb_3d.o e_xcbc_d.o e_ecb_r2.o e_cbc_r2.o e_cfb_r2.o e_ofb_r2.o e_ecb_bf.o e_cbc_bf.o e_cfb_bf.o e_ofb_bf.o e_ecb_c.o e_cbc_c.o e_cfb_c.o e_ofb_c.o e_ecb_r5.o e_cbc_r5.o e_cfb_r5.o e_ofb_r5.o m_null.o m_md2.o m_md5.o m_sha.o m_sha1.o m_dss.o m_dss1.o m_mdc2.o m_ripemd.o p_open.o p_seal.o p_sign.o p_verify.o p_lib.o p_enc.o p_dec.o bio_md.o bio_b64.o bio_enc.o evp_err.o e_null.o c_all.o evp_lib.o
 | 
			
		||||
LIBSRC=encode.c digest.c evp_enc.c evp_key.c e_ecb_d.c e_cbc_d.c e_cfb_d.c e_ofb_d.c e_ecb_i.c e_cbc_i.c e_cfb_i.c e_ofb_i.c e_ecb_3d.c e_cbc_3d.c e_rc4.c names.c e_cfb_3d.c e_ofb_3d.c e_xcbc_d.c e_ecb_r2.c e_cbc_r2.c e_cfb_r2.c e_ofb_r2.c e_ecb_bf.c e_cbc_bf.c e_cfb_bf.c e_ofb_bf.c e_ecb_c.c e_cbc_c.c e_cfb_c.c e_ofb_c.c e_ecb_r5.c e_cbc_r5.c e_cfb_r5.c e_ofb_r5.c m_null.c m_md2.c m_md5.c m_sha.c m_sha1.c m_dss.c m_dss1.c m_mdc2.c m_ripemd.c p_open.c p_seal.c p_sign.c p_verify.c p_lib.c p_enc.c p_dec.c bio_md.c bio_b64.c bio_enc.c evp_err.c e_null.c c_all.c evp_lib.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=encode.c digest.c evp_enc.c evp_key.c e_ecb_d.c e_cbc_d.c e_cfb_d.c e_ofb_d.c e_ecb_i.c e_cbc_i.c e_cfb_i.c e_ofb_i.c e_ecb_3d.c e_cbc_3d.c e_rc4.c names.c e_cfb_3d.c e_ofb_3d.c e_xcbc_d.c e_ecb_r2.c e_cbc_r2.c e_cfb_r2.c e_ofb_r2.c e_ecb_bf.c e_cbc_bf.c e_cfb_bf.c e_ofb_bf.c e_ecb_c.c e_cbc_c.c e_cfb_c.c e_ofb_c.c e_ecb_r5.c e_cbc_r5.c e_cfb_r5.c e_ofb_r5.c m_null.c m_md2.c m_md5.c m_sha.c m_sha1.c m_dss.c m_dss1.c m_mdc2.c m_ripemd.c p_open.c p_seal.c p_sign.c p_verify.c p_lib.c p_enc.c p_dec.c bio_md.c bio_b64.c bio_enc.c evp_err.c e_null.c c_all.c evp_lib.c
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/pem
 | 
			
		||||
ALL=Makefile pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c pem.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I.. -I../../include -g
 | 
			
		||||
CTX_SIZE=ctx_size
 | 
			
		||||
DIR=pem
 | 
			
		||||
ERR=pem
 | 
			
		||||
ERRC=pem_err
 | 
			
		||||
EXHEADER=pem.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=pem.h
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=pem_sign.o pem_seal.o pem_info.o pem_lib.o pem_all.o pem_err.o
 | 
			
		||||
LIBSRC=pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/asn1
 | 
			
		||||
ALL=Makefile README a_object.c a_bitstr.c a_utctm.c a_int.c a_octet.c a_print.c a_type.c a_set.c a_dup.c a_d2i_fp.c a_i2d_fp.c a_bmp.c a_sign.c a_digest.c a_verify.c x_algor.c x_val.c x_pubkey.c x_sig.c x_req.c x_attrib.c x_name.c x_cinf.c x_x509.c x_crl.c x_info.c x_spki.c d2i_r_pr.c i2d_r_pr.c d2i_r_pu.c i2d_r_pu.c d2i_s_pr.c i2d_s_pr.c d2i_s_pu.c i2d_s_pu.c d2i_pu.c d2i_pr.c i2d_pu.c i2d_pr.c t_req.c t_x509.c t_pkey.c p7_i_s.c p7_signi.c p7_signd.c p7_recip.c p7_enc_c.c p7_evp.c p7_dgst.c p7_s_e.c p7_enc.c p7_lib.c f_int.c f_string.c i2d_dhp.c i2d_dsap.c d2i_dhp.c d2i_dsap.c n_pkey.c a_hdr.c x_pkey.c a_bool.c x_exten.c asn1_par.c asn1_lib.c asn1_err.c a_meth.c a_bytes.c evp_asn1.c asn1.h asn1_mac.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I.. -I../../include -g
 | 
			
		||||
DIR=asn1
 | 
			
		||||
ERR=asn1
 | 
			
		||||
ERRC=asn1_err
 | 
			
		||||
EXHEADER=asn1.h asn1_mac.h
 | 
			
		||||
GENERAL=Makefile README
 | 
			
		||||
HEADER=asn1.h asn1_mac.h
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=a_object.o a_bitstr.o a_utctm.o a_int.o a_octet.o a_print.o a_type.o a_set.o a_dup.o a_d2i_fp.o a_i2d_fp.o a_bmp.o a_sign.o a_digest.o a_verify.o x_algor.o x_val.o x_pubkey.o x_sig.o x_req.o x_attrib.o x_name.o x_cinf.o x_x509.o x_crl.o x_info.o x_spki.o d2i_r_pr.o i2d_r_pr.o d2i_r_pu.o i2d_r_pu.o d2i_s_pr.o i2d_s_pr.o d2i_s_pu.o i2d_s_pu.o d2i_pu.o d2i_pr.o i2d_pu.o i2d_pr.o t_req.o t_x509.o t_pkey.o p7_i_s.o p7_signi.o p7_signd.o p7_recip.o p7_enc_c.o p7_evp.o p7_dgst.o p7_s_e.o p7_enc.o p7_lib.o f_int.o f_string.o i2d_dhp.o i2d_dsap.o d2i_dhp.o d2i_dsap.o n_pkey.o a_hdr.o x_pkey.o a_bool.o x_exten.o asn1_par.o asn1_lib.o asn1_err.o a_meth.o a_bytes.o evp_asn1.o
 | 
			
		||||
LIBSRC=a_object.c a_bitstr.c a_utctm.c a_int.c a_octet.c a_print.c a_type.c a_set.c a_dup.c a_d2i_fp.c a_i2d_fp.c a_bmp.c a_sign.c a_digest.c a_verify.c x_algor.c x_val.c x_pubkey.c x_sig.c x_req.c x_attrib.c x_name.c x_cinf.c x_x509.c x_crl.c x_info.c x_spki.c d2i_r_pr.c i2d_r_pr.c d2i_r_pu.c i2d_r_pu.c d2i_s_pr.c i2d_s_pr.c d2i_s_pu.c i2d_s_pu.c d2i_pu.c d2i_pr.c i2d_pu.c i2d_pr.c t_req.c t_x509.c t_pkey.c p7_i_s.c p7_signi.c p7_signd.c p7_recip.c p7_enc_c.c p7_evp.c p7_dgst.c p7_s_e.c p7_enc.c p7_lib.c f_int.c f_string.c i2d_dhp.c i2d_dsap.c d2i_dhp.c d2i_dsap.c n_pkey.c a_hdr.c x_pkey.c a_bool.c x_exten.c asn1_par.c asn1_lib.c asn1_err.c a_meth.c a_bytes.c evp_asn1.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=a_object.c a_bitstr.c a_utctm.c a_int.c a_octet.c a_print.c a_type.c a_set.c a_dup.c a_d2i_fp.c a_i2d_fp.c a_bmp.c a_sign.c a_digest.c a_verify.c x_algor.c x_val.c x_pubkey.c x_sig.c x_req.c x_attrib.c x_name.c x_cinf.c x_x509.c x_crl.c x_info.c x_spki.c d2i_r_pr.c i2d_r_pr.c d2i_r_pu.c i2d_r_pu.c d2i_s_pr.c i2d_s_pr.c d2i_s_pu.c i2d_s_pu.c d2i_pu.c d2i_pr.c i2d_pu.c i2d_pr.c t_req.c t_x509.c t_pkey.c p7_i_s.c p7_signi.c p7_signd.c p7_recip.c p7_enc_c.c p7_evp.c p7_dgst.c p7_s_e.c p7_enc.c p7_lib.c f_int.c f_string.c i2d_dhp.c i2d_dsap.c d2i_dhp.c d2i_dsap.c n_pkey.c a_hdr.c x_pkey.c a_bool.c x_exten.c asn1_par.c asn1_lib.c asn1_err.c a_meth.c a_bytes.c evp_asn1.c
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/x509
 | 
			
		||||
ALL=Makefile README x509_def.c x509_d2.c x509_r2x.c x509_cmp.c x509_obj.c x509_req.c x509_vfy.c x509_set.c x509rset.c x509_err.c x509name.c x509_v3.c x509_ext.c x509pack.c x509type.c x509_lu.c x_all.c x509_txt.c by_file.c by_dir.c v3_net.c v3_x509.c x509.h x509_vfy.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I.. -I../../include -g
 | 
			
		||||
DIR=x509
 | 
			
		||||
ERR=x509
 | 
			
		||||
ERRC=x509_err
 | 
			
		||||
EXHEADER=x509.h x509_vfy.h
 | 
			
		||||
GENERAL=Makefile README
 | 
			
		||||
HEADER=x509.h x509_vfy.h
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=x509_def.o x509_d2.o x509_r2x.o x509_cmp.o x509_obj.o x509_req.o x509_vfy.o x509_set.o x509rset.o x509_err.o x509name.o x509_v3.o x509_ext.o x509pack.o x509type.o x509_lu.o x_all.o x509_txt.o by_file.o by_dir.o v3_net.o v3_x509.o
 | 
			
		||||
LIBSRC=x509_def.c x509_d2.c x509_r2x.c x509_cmp.c x509_obj.c x509_req.c x509_vfy.c x509_set.c x509rset.c x509_err.c x509name.c x509_v3.c x509_ext.c x509pack.c x509type.c x509_lu.c x_all.c x509_txt.c by_file.c by_dir.c v3_net.c v3_x509.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=x509_def.c x509_d2.c x509_r2x.c x509_cmp.c x509_obj.c x509_req.c x509_vfy.c x509_set.c x509rset.c x509_err.c x509name.c x509_v3.c x509_ext.c x509pack.c x509type.c x509_lu.c x_all.c x509_txt.c by_file.c by_dir.c v3_net.c v3_x509.c
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/conf
 | 
			
		||||
ALL=Makefile conf.c conf_err.c conf_lcl.h conf.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I.. -I../../include -g
 | 
			
		||||
DIR=conf
 | 
			
		||||
ERR=conf
 | 
			
		||||
ERRC=conf_err
 | 
			
		||||
EXHEADER=conf.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=conf_lcl.h conf.h
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=conf.o conf_err.o
 | 
			
		||||
LIBSRC=conf.c conf_err.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=conf.c conf_err.c
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/txt_db
 | 
			
		||||
ALL=Makefile txt_db.c txt_db.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS= -g
 | 
			
		||||
DIR=txt_db
 | 
			
		||||
EXHEADER=txt_db.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=txt_db.h
 | 
			
		||||
INCLUDES=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=txt_db.o
 | 
			
		||||
LIBSRC=txt_db.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=txt_db.c
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/pkcs7
 | 
			
		||||
ALL=Makefile README pk7_lib.c pkcs7err.c pk7_doit.c pkcs7.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I.. -I../../include -g
 | 
			
		||||
DIR=pkcs7
 | 
			
		||||
ERR=pkcs7
 | 
			
		||||
ERRC=pkcs7err
 | 
			
		||||
EXHEADER=pkcs7.h
 | 
			
		||||
GENERAL=Makefile README
 | 
			
		||||
HEADER=pkcs7.h
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=pk7_lib.o pkcs7err.o pk7_doit.o
 | 
			
		||||
LIBSRC=pk7_lib.c pkcs7err.c pk7_doit.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=pk7_lib.c pkcs7err.c pk7_doit.c
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=crypto/comp
 | 
			
		||||
ALL=Makefile comp_lib.c c_rle.c c_zlib.c comp.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I.. -I../../include -g
 | 
			
		||||
DIR=comp
 | 
			
		||||
ERR=comp
 | 
			
		||||
ERRC=comp_err
 | 
			
		||||
EXHEADER=comp.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=comp.h
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../../libcrypto.a
 | 
			
		||||
LIBOBJ=comp_lib.o c_rle.o c_zlib.o
 | 
			
		||||
LIBSRC=comp_lib.c c_rle.c c_zlib.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=comp_lib.c c_rle.c c_zlib.c
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=../..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=ssl
 | 
			
		||||
ALL=Makefile README s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c s2_enc.c s2_pkt.c s3_meth.c s3_srvr.c s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c s23_meth.c s23_srvr.c s23_clnt.c s23_lib.c s23_pkt.c t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c ssl_lib.c ssl_err2.c ssl_cert.c ssl_sess.c ssl_ciph.c ssl_stat.c ssl_rsa.c ssl_asn1.c ssl_txt.c ssl_algs.c bio_ssl.c ssl_err.c ssl.h ssl2.h ssl3.h ssl23.h tls1.h ssl_locl.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I../crypto -I../include -g
 | 
			
		||||
DIR=ssl
 | 
			
		||||
ERR=ssl
 | 
			
		||||
ERRC=ssl_err
 | 
			
		||||
EXHEADER=ssl.h ssl2.h ssl3.h ssl23.h tls1.h
 | 
			
		||||
GENERAL=Makefile README
 | 
			
		||||
HEADER=ssl.h ssl2.h ssl3.h ssl23.h tls1.h ssl_locl.h
 | 
			
		||||
INCLUDES=-I../crypto -I../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../libssl.a
 | 
			
		||||
LIBOBJ=s2_meth.o s2_srvr.o s2_clnt.o s2_lib.o s2_enc.o s2_pkt.o s3_meth.o s3_srvr.o s3_clnt.o s3_lib.o s3_enc.o s3_pkt.o s3_both.o s23_meth.o s23_srvr.o s23_clnt.o s23_lib.o s23_pkt.o t1_meth.o t1_srvr.o t1_clnt.o t1_lib.o t1_enc.o ssl_lib.o ssl_err2.o ssl_cert.o ssl_sess.o ssl_ciph.o ssl_stat.o ssl_rsa.o ssl_asn1.o ssl_txt.o ssl_algs.o bio_ssl.o ssl_err.o
 | 
			
		||||
LIBSRC=s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c s2_enc.c s2_pkt.c s3_meth.c s3_srvr.c s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c s23_meth.c s23_srvr.c s23_clnt.c s23_lib.c s23_pkt.c t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c ssl_lib.c ssl_err2.c ssl_cert.c ssl_sess.c ssl_ciph.c ssl_stat.c ssl_rsa.c ssl_asn1.c ssl_txt.c ssl_algs.c bio_ssl.c ssl_err.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c s2_enc.c s2_pkt.c s3_meth.c s3_srvr.c s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c s23_meth.c s23_srvr.c s23_clnt.c s23_lib.c s23_pkt.c t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c ssl_lib.c ssl_err2.c ssl_cert.c ssl_sess.c ssl_ciph.c ssl_stat.c ssl_rsa.c ssl_asn1.c ssl_txt.c ssl_algs.c bio_ssl.c ssl_err.c
 | 
			
		||||
TEST=ssltest.c
 | 
			
		||||
TOP=..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=rsaref
 | 
			
		||||
ALL=Makefile rsaref.c rsar_err.c rsaref.h
 | 
			
		||||
APPS=
 | 
			
		||||
AR=ar r
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I../crypto -I../include -g
 | 
			
		||||
DIR=rsaref
 | 
			
		||||
ERR=rsaref
 | 
			
		||||
ERRC=rsar_err
 | 
			
		||||
EXHEADER=rsaref.h
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=rsaref.h
 | 
			
		||||
INCLUDES=-I../crypto -I../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIB=../libRSAglue.a
 | 
			
		||||
LIBOBJ=rsaref.o rsar_err.o
 | 
			
		||||
LIBSRC=rsaref.c rsar_err.c
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
SRC=rsaref.c rsar_err.c
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=apps
 | 
			
		||||
ALL=Makefile verify.c asn1pars.c req.c dgst.c dh.c enc.c gendh.c errstr.c ca.c pkcs7.c crl2p7.c crl.c rsa.c dsa.c dsaparam.c x509.c genrsa.c s_server.c s_client.c speed.c s_time.c apps.c s_cb.c s_socket.c version.c sess_id.c ciphers.c apps.h progs.h s_apps.h testdsa.h testrsa.h 
 | 
			
		||||
A_OBJ=apps.o
 | 
			
		||||
A_SRC=apps.c
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g -static
 | 
			
		||||
CFLAGS=-DMONOLITH -I../include -g -static
 | 
			
		||||
DIR=apps
 | 
			
		||||
DLIBCRYPTO=../libcrypto.a
 | 
			
		||||
DLIBSSL=../libssl.a
 | 
			
		||||
EXE=ssleay
 | 
			
		||||
EXHEADER=
 | 
			
		||||
EX_LIBS=
 | 
			
		||||
E_EXE=verify asn1pars req dgst dh enc gendh errstr ca crl rsa dsa dsaparam x509 genrsa s_server s_client speed s_time version pkcs7 crl2pkcs7 sess_id ciphers
 | 
			
		||||
E_OBJ=verify.o asn1pars.o req.o dgst.o dh.o enc.o gendh.o errstr.o ca.o pkcs7.o crl2p7.o crl.o rsa.o dsa.o dsaparam.o x509.o genrsa.o s_server.o s_client.o speed.o s_time.o apps.o s_cb.o s_socket.o version.o sess_id.o ciphers.o
 | 
			
		||||
E_SRC=verify.c asn1pars.c req.c dgst.c dh.c enc.c gendh.c errstr.c ca.c pkcs7.c crl2p7.c crl.c rsa.c dsa.c dsaparam.c x509.c genrsa.c s_server.c s_client.c speed.c s_time.c apps.c s_cb.c s_socket.c version.c sess_id.c ciphers.c
 | 
			
		||||
GENERAL=Makefile
 | 
			
		||||
HEADER=apps.h progs.h s_apps.h testdsa.h testrsa.h 
 | 
			
		||||
INCLUDES=-I../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIBCRYPTO=-L.. -lcrypto
 | 
			
		||||
LIBSSL=-L.. -lssl
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
PEX_LIBS=
 | 
			
		||||
PROGS=ssleay.c
 | 
			
		||||
RM=/bin/rm -f
 | 
			
		||||
SCRIPTS=CA.sh der_chop
 | 
			
		||||
SRC=verify.c asn1pars.c req.c dgst.c dh.c enc.c gendh.c errstr.c ca.c pkcs7.c crl2p7.c crl.c rsa.c dsa.c dsaparam.c x509.c genrsa.c s_server.c s_client.c speed.c s_time.c apps.c s_cb.c s_socket.c version.c sess_id.c ciphers.c
 | 
			
		||||
SSLEAY=ssleay
 | 
			
		||||
S_OBJ=s_cb.o s_socket.o
 | 
			
		||||
S_SRC=s_cb.c s_socket.c
 | 
			
		||||
TOP=..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=test
 | 
			
		||||
ALL=Makefile.ssl bntest.c ideatest.c md2test.c md5test.c hmactest.c rc2test.c rc4test.c rc5test.c destest.c shatest.c sha1test.c mdc2test.c rmdtest.c randtest.c dhtest.c casttest.c bftest.c ssltest.c dsatest.c exptest.c 
 | 
			
		||||
BFTEST=bftest
 | 
			
		||||
BNTEST=bntest
 | 
			
		||||
CASTTEST=casttest
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I../include -g
 | 
			
		||||
DESTEST=destest
 | 
			
		||||
DHTEST=dhtest
 | 
			
		||||
DIR=test
 | 
			
		||||
DLIBCRYPTO=../libcrypto.a
 | 
			
		||||
DLIBSSL=../libssl.a
 | 
			
		||||
DSATEST=dsatest
 | 
			
		||||
EXE=bntest ideatest md2test md5test hmactest rc2test rc4test rc5test destest shatest sha1test mdc2test rmdtest randtest dhtest bftest casttest ssltest exptest dsatest
 | 
			
		||||
EXHEADER=
 | 
			
		||||
EXPTEST=exptest
 | 
			
		||||
EX_LIBS=
 | 
			
		||||
GENERAL=Makefile.ssl
 | 
			
		||||
HEADER=
 | 
			
		||||
HMACTEST=hmactest
 | 
			
		||||
IDEATEST=ideatest
 | 
			
		||||
INCLUDES=-I../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
LIBCRYPTO=-L.. -lcrypto
 | 
			
		||||
LIBSSL=-L.. -lssl
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -fMakefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
MD2TEST=md2test
 | 
			
		||||
MD5TEST=md5test
 | 
			
		||||
MDC2TEST=mdc2test
 | 
			
		||||
METHTEST=methtest
 | 
			
		||||
OBJ=bntest.o ideatest.o md2test.o md5test.o hmactest.o rc2test.o rc4test.o rc5test.o destest.o shatest.o sha1test.o mdc2test.o rmdtest.o randtest.o dhtest.o casttest.o bftest.o ssltest.o dsatest.o exptest.o
 | 
			
		||||
PEX_LIBS=
 | 
			
		||||
RANDTEST=randtest
 | 
			
		||||
RC2TEST=rc2test
 | 
			
		||||
RC4TEST=rc4test
 | 
			
		||||
RC5TEST=rc5test
 | 
			
		||||
RMDTEST=rmdtest
 | 
			
		||||
SHA1TEST=sha1test
 | 
			
		||||
SHATEST=shatest
 | 
			
		||||
SRC=bntest.c ideatest.c md2test.c md5test.c hmactest.c rc2test.c rc4test.c rc5test.c destest.c shatest.c sha1test.c mdc2test.c rmdtest.c randtest.c dhtest.c casttest.c bftest.c ssltest.c dsatest.c exptest.c
 | 
			
		||||
SSLTEST=ssltest
 | 
			
		||||
TOP=..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
RELATIVE_DIRECTORY=tools
 | 
			
		||||
APPS=c_hash c_info c_issuer c_name c_rehash
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAG=-g
 | 
			
		||||
CFLAGS=-I.. -I../../include -g
 | 
			
		||||
DIR=tools
 | 
			
		||||
GENERAL=Makefile.ssl
 | 
			
		||||
INCLUDES=-I.. -I../../include
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
MAKE=make -f Makefile.ssl
 | 
			
		||||
MAKEDEPEND=makedepend -f Makefile.ssl
 | 
			
		||||
MAKEFILE=Makefile.ssl
 | 
			
		||||
TEST=
 | 
			
		||||
TOP=..
 | 
			
		||||
RELATIVE_DIRECTORY=
 | 
			
		||||
							
								
								
									
										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
 | 
			
		||||
							
								
								
									
										170
									
								
								MacOS/GetHTTPS.src/ErrorHandling.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								MacOS/GetHTTPS.src/ErrorHandling.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,170 @@
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * 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
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
 *    the documentation and/or other materials provided with the
 | 
			
		||||
 *    distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this
 | 
			
		||||
 *    software must display the following acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
			
		||||
 *    endorse or promote products derived from this software without
 | 
			
		||||
 *    prior written permission. For written permission, please contact
 | 
			
		||||
 *    openssl-core@openssl.org.
 | 
			
		||||
 *
 | 
			
		||||
 * 5. Products derived from this software may not be called "OpenSSL"
 | 
			
		||||
 *    nor may "OpenSSL" appear in their names without prior written
 | 
			
		||||
 *    permission of the OpenSSL Project.
 | 
			
		||||
 *
 | 
			
		||||
 * 6. Redistributions of any form whatsoever must retain the following
 | 
			
		||||
 *    acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
			
		||||
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
			
		||||
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
			
		||||
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
			
		||||
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 * ====================================================================
 | 
			
		||||
 *
 | 
			
		||||
 * This product includes cryptographic software written by Eric Young
 | 
			
		||||
 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
 #include "ErrorHandling.hpp"
 | 
			
		||||
#include "CPStringUtils.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef __EXCEPTIONS_ENABLED__
 | 
			
		||||
	#include "CMyException.hpp"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static char					gErrorMessageBuffer[512];
 | 
			
		||||
 | 
			
		||||
char 						*gErrorMessage = gErrorMessageBuffer;
 | 
			
		||||
int							gErrorMessageMaxLength = sizeof(gErrorMessageBuffer);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
							
								
								
									
										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 uneccessary 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
											
										
									
								
							
							
								
								
									
										103
									
								
								MacOS/GetHTTPS.src/MacSocket.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								MacOS/GetHTTPS.src/MacSocket.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,103 @@
 | 
			
		||||
#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
 | 
			
		||||
							
								
								
									
										43
									
								
								MacOS/Randomizer.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								MacOS/Randomizer.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
 | 
			
		||||
//	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:
 | 
			
		||||
							
								
								
									
										116
									
								
								MacOS/opensslconf.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								MacOS/opensslconf.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,116 @@
 | 
			
		||||
/* 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
 | 
			
		||||
							
								
								
									
										565
									
								
								Makefile.org
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										565
									
								
								Makefile.org
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,565 @@
 | 
			
		||||
##
 | 
			
		||||
## Makefile for OpenSSL
 | 
			
		||||
##
 | 
			
		||||
 | 
			
		||||
VERSION=
 | 
			
		||||
MAJOR=
 | 
			
		||||
MINOR=
 | 
			
		||||
SHLIB_VERSION_NUMBER=
 | 
			
		||||
SHLIB_VERSION_HISTORY=
 | 
			
		||||
SHLIB_MAJOR=
 | 
			
		||||
SHLIB_MINOR=
 | 
			
		||||
SHLIB_EXT=
 | 
			
		||||
PLATFORM=dist
 | 
			
		||||
OPTIONS=
 | 
			
		||||
CONFIGURE_ARGS=
 | 
			
		||||
SHLIB_TARGET=
 | 
			
		||||
 | 
			
		||||
# INSTALL_PREFIX is for package builders so that they can configure
 | 
			
		||||
# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
 | 
			
		||||
# Normally it is left empty.
 | 
			
		||||
INSTALL_PREFIX=
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
 | 
			
		||||
# Do not edit this manually. Use Configure --openssldir=DIR do change this!
 | 
			
		||||
OPENSSLDIR=/usr/local/ssl
 | 
			
		||||
 | 
			
		||||
# NO_IDEA - Define to build without the IDEA algorithm
 | 
			
		||||
# NO_RC4  - Define to build without the RC4 algorithm
 | 
			
		||||
# NO_RC2  - Define to build without the RC2 algorithm
 | 
			
		||||
# THREADS - Define when building with threads, you will probably also need any
 | 
			
		||||
#           system defines as well, i.e. _REENTERANT for Solaris 2.[34]
 | 
			
		||||
# TERMIO  - Define the termio terminal subsystem, needed if sgtty is missing.
 | 
			
		||||
# TERMIOS - Define the termios terminal subsystem, Silicon Graphics.
 | 
			
		||||
# LONGCRYPT - Define to use HPUX 10.x's long password modification to crypt(3).
 | 
			
		||||
# DEVRANDOM - Give this the value of the 'random device' if your OS supports
 | 
			
		||||
#           one.  32 bytes will be read from this when the random
 | 
			
		||||
#           number generator is initalised.
 | 
			
		||||
# SSL_FORBID_ENULL - define if you want the server to be not able to use the
 | 
			
		||||
#           NULL encryption ciphers.
 | 
			
		||||
#
 | 
			
		||||
# LOCK_DEBUG - turns on lots of lock debug output :-)
 | 
			
		||||
# REF_CHECK - turn on some xyz_free() assertions.
 | 
			
		||||
# REF_PRINT - prints some stuff on structure free.
 | 
			
		||||
# CRYPTO_MDEBUG - turns on my 'memory leak' detecting stuff
 | 
			
		||||
# MFUNC - Make all Malloc/Free/Realloc calls call
 | 
			
		||||
#       CRYPTO_malloc/CRYPTO_free/CRYPTO_realloc which can be setup to
 | 
			
		||||
#       call application defined callbacks via CRYPTO_set_mem_functions()
 | 
			
		||||
# MD5_ASM needs to be defined to use the x86 assembler for MD5
 | 
			
		||||
# SHA1_ASM needs to be defined to use the x86 assembler for SHA1
 | 
			
		||||
# RMD160_ASM needs to be defined to use the x86 assembler for RIPEMD160
 | 
			
		||||
# Do not define B_ENDIAN or L_ENDIAN if 'unsigned long' == 8.  It must
 | 
			
		||||
# equal 4.
 | 
			
		||||
# PKCS1_CHECK - pkcs1 tests.
 | 
			
		||||
 | 
			
		||||
CC= gcc
 | 
			
		||||
#CFLAG= -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall -Wuninitialized -DSHA1_ASM -DMD5_ASM -DRMD160_ASM
 | 
			
		||||
CFLAG= -DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall -DSHA1_ASM -DMD5_ASM -DRMD160_ASM
 | 
			
		||||
DEPFLAG= 
 | 
			
		||||
PEX_LIBS= 
 | 
			
		||||
EX_LIBS= 
 | 
			
		||||
EXE_EXT= 
 | 
			
		||||
ARFLAGS=
 | 
			
		||||
AR=ar $(ARFLAGS) r
 | 
			
		||||
RANLIB= ranlib
 | 
			
		||||
PERL= perl
 | 
			
		||||
TAR= tar
 | 
			
		||||
TARFLAGS= --no-recursion
 | 
			
		||||
MAKEDEPPROG=makedepend
 | 
			
		||||
 | 
			
		||||
# Set BN_ASM to bn_asm.o if you want to use the C version
 | 
			
		||||
BN_ASM= bn_asm.o
 | 
			
		||||
#BN_ASM= bn_asm.o
 | 
			
		||||
#BN_ASM= asm/bn86-elf.o	# elf, linux-elf
 | 
			
		||||
#BN_ASM= asm/bn86-sol.o # solaris
 | 
			
		||||
#BN_ASM= asm/bn86-out.o # a.out, FreeBSD
 | 
			
		||||
#BN_ASM= asm/bn86bsdi.o # bsdi
 | 
			
		||||
#BN_ASM= asm/alpha.o    # DEC Alpha
 | 
			
		||||
#BN_ASM= asm/pa-risc2.o # HP-UX PA-RISC
 | 
			
		||||
#BN_ASM= asm/r3000.o    # SGI MIPS cpu
 | 
			
		||||
#BN_ASM= asm/sparc.o    # Sun solaris/SunOS
 | 
			
		||||
#BN_ASM= asm/bn-win32.o # Windows 95/NT
 | 
			
		||||
#BN_ASM= asm/x86w16.o   # 16 bit code for Windows 3.1/DOS
 | 
			
		||||
#BN_ASM= asm/x86w32.o   # 32 bit code for Windows 3.1
 | 
			
		||||
 | 
			
		||||
# For x86 assembler: Set PROCESSOR to 386 if you want to support
 | 
			
		||||
# the 80386.
 | 
			
		||||
PROCESSOR=
 | 
			
		||||
 | 
			
		||||
# Set DES_ENC to des_enc.o if you want to use the C version
 | 
			
		||||
#There are 4 x86 assember options.
 | 
			
		||||
DES_ENC= asm/dx86-out.o asm/yx86-out.o
 | 
			
		||||
#DES_ENC= des_enc.o fcrypt_b.o          # C
 | 
			
		||||
#DES_ENC= asm/dx86-elf.o asm/yx86-elf.o # elf
 | 
			
		||||
#DES_ENC= asm/dx86-sol.o asm/yx86-sol.o # solaris
 | 
			
		||||
#DES_ENC= asm/dx86-out.o asm/yx86-out.o # a.out, FreeBSD
 | 
			
		||||
#DES_ENC= asm/dx86bsdi.o asm/yx86bsdi.o # bsdi
 | 
			
		||||
 | 
			
		||||
# Set BF_ENC to bf_enc.o if you want to use the C version
 | 
			
		||||
#There are 4 x86 assember options.
 | 
			
		||||
BF_ENC= asm/bx86-out.o
 | 
			
		||||
#BF_ENC= bf_enc.o
 | 
			
		||||
#BF_ENC= asm/bx86-elf.o # elf
 | 
			
		||||
#BF_ENC= asm/bx86-sol.o # solaris
 | 
			
		||||
#BF_ENC= asm/bx86-out.o # a.out, FreeBSD
 | 
			
		||||
#BF_ENC= asm/bx86bsdi.o # bsdi
 | 
			
		||||
 | 
			
		||||
# Set CAST_ENC to c_enc.o if you want to use the C version
 | 
			
		||||
#There are 4 x86 assember options.
 | 
			
		||||
CAST_ENC= asm/cx86-out.o
 | 
			
		||||
#CAST_ENC= c_enc.o
 | 
			
		||||
#CAST_ENC= asm/cx86-elf.o # elf
 | 
			
		||||
#CAST_ENC= asm/cx86-sol.o # solaris
 | 
			
		||||
#CAST_ENC= asm/cx86-out.o # a.out, FreeBSD
 | 
			
		||||
#CAST_ENC= asm/cx86bsdi.o # bsdi
 | 
			
		||||
 | 
			
		||||
# Set RC4_ENC to rc4_enc.o if you want to use the C version
 | 
			
		||||
#There are 4 x86 assember options.
 | 
			
		||||
RC4_ENC= asm/rx86-out.o
 | 
			
		||||
#RC4_ENC= rc4_enc.o
 | 
			
		||||
#RC4_ENC= asm/rx86-elf.o # elf
 | 
			
		||||
#RC4_ENC= asm/rx86-sol.o # solaris
 | 
			
		||||
#RC4_ENC= asm/rx86-out.o # a.out, FreeBSD
 | 
			
		||||
#RC4_ENC= asm/rx86bsdi.o # bsdi
 | 
			
		||||
 | 
			
		||||
# Set RC5_ENC to rc5_enc.o if you want to use the C version
 | 
			
		||||
#There are 4 x86 assember options.
 | 
			
		||||
RC5_ENC= asm/r586-out.o
 | 
			
		||||
#RC5_ENC= rc5_enc.o
 | 
			
		||||
#RC5_ENC= asm/r586-elf.o # elf
 | 
			
		||||
#RC5_ENC= asm/r586-sol.o # solaris
 | 
			
		||||
#RC5_ENC= asm/r586-out.o # a.out, FreeBSD
 | 
			
		||||
#RC5_ENC= asm/r586bsdi.o # bsdi
 | 
			
		||||
 | 
			
		||||
# Also need MD5_ASM defined
 | 
			
		||||
MD5_ASM_OBJ= asm/mx86-out.o
 | 
			
		||||
#MD5_ASM_OBJ= asm/mx86-elf.o        # elf
 | 
			
		||||
#MD5_ASM_OBJ= asm/mx86-sol.o        # solaris
 | 
			
		||||
#MD5_ASM_OBJ= asm/mx86-out.o        # a.out, FreeBSD
 | 
			
		||||
#MD5_ASM_OBJ= asm/mx86bsdi.o        # bsdi
 | 
			
		||||
 | 
			
		||||
# Also need SHA1_ASM defined
 | 
			
		||||
SHA1_ASM_OBJ= asm/sx86-out.o
 | 
			
		||||
#SHA1_ASM_OBJ= asm/sx86-elf.o       # elf
 | 
			
		||||
#SHA1_ASM_OBJ= asm/sx86-sol.o       # solaris
 | 
			
		||||
#SHA1_ASM_OBJ= asm/sx86-out.o       # a.out, FreeBSD
 | 
			
		||||
#SHA1_ASM_OBJ= asm/sx86bsdi.o       # bsdi
 | 
			
		||||
 | 
			
		||||
# Also need RMD160_ASM defined
 | 
			
		||||
RMD160_ASM_OBJ= asm/rm86-out.o
 | 
			
		||||
#RMD160_ASM_OBJ= asm/rm86-elf.o       # elf
 | 
			
		||||
#RMD160_ASM_OBJ= asm/rm86-sol.o       # solaris
 | 
			
		||||
#RMD160_ASM_OBJ= asm/rm86-out.o       # a.out, FreeBSD
 | 
			
		||||
#RMD160_ASM_OBJ= asm/rm86bsdi.o       # bsdi
 | 
			
		||||
 | 
			
		||||
# KRB5 stuff
 | 
			
		||||
KRB5_INCLUDES=
 | 
			
		||||
LIBKRB5=
 | 
			
		||||
 | 
			
		||||
DIRS=   crypto ssl engines apps test tools
 | 
			
		||||
SHLIBDIRS= crypto ssl
 | 
			
		||||
 | 
			
		||||
# dirs in crypto to build
 | 
			
		||||
SDIRS=  \
 | 
			
		||||
	md2 md4 md5 sha mdc2 hmac ripemd \
 | 
			
		||||
	des rc2 rc4 rc5 idea bf cast \
 | 
			
		||||
	bn ec rsa dsa ecdsa dh ecdh dso engine aes \
 | 
			
		||||
	buffer bio stack lhash rand err objects \
 | 
			
		||||
	evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5
 | 
			
		||||
 | 
			
		||||
# tests to perform.  "alltests" is a special word indicating that all tests
 | 
			
		||||
# should be performed.
 | 
			
		||||
TESTS = alltests
 | 
			
		||||
 | 
			
		||||
MAKEFILE= Makefile.ssl
 | 
			
		||||
NEWMAKE=  make
 | 
			
		||||
MAKE=     $(NEWMAKE) -f Makefile.ssl
 | 
			
		||||
 | 
			
		||||
MANDIR=$(OPENSSLDIR)/man
 | 
			
		||||
MAN1=1
 | 
			
		||||
MAN3=3
 | 
			
		||||
SHELL=/bin/sh
 | 
			
		||||
 | 
			
		||||
TOP=    .
 | 
			
		||||
ONEDIRS=out tmp
 | 
			
		||||
EDIRS=  times doc bugs util include certs ms shlib mt demos perl sf dep VMS
 | 
			
		||||
WDIRS=  windows
 | 
			
		||||
LIBS=   libcrypto.a libssl.a
 | 
			
		||||
SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
 | 
			
		||||
SHARED_SSL=libssl$(SHLIB_EXT)
 | 
			
		||||
SHARED_LIBS=
 | 
			
		||||
SHARED_LIBS_LINK_EXTS=
 | 
			
		||||
SHARED_LDFLAGS=
 | 
			
		||||
 | 
			
		||||
GENERAL=        Makefile
 | 
			
		||||
BASENAME=       openssl
 | 
			
		||||
NAME=           $(BASENAME)-$(VERSION)
 | 
			
		||||
TARFILE=        $(NAME).tar
 | 
			
		||||
WTARFILE=       $(NAME)-win.tar
 | 
			
		||||
EXHEADER=       e_os2.h
 | 
			
		||||
HEADER=         e_os.h
 | 
			
		||||
 | 
			
		||||
all: Makefile.ssl build_all openssl.pc
 | 
			
		||||
 | 
			
		||||
BUILD_CMD=if echo " $(DIRS) " | grep " $$i " >/dev/null 2>/dev/null; then \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i && echo "making all in $$i..." && \
 | 
			
		||||
		$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' all ) || exit 1; \
 | 
			
		||||
	else \
 | 
			
		||||
		$(MAKE) $$i; \
 | 
			
		||||
	fi; fi
 | 
			
		||||
 | 
			
		||||
sub_all: build_all
 | 
			
		||||
build_all: build_libs build_apps build_tests build_tools
 | 
			
		||||
 | 
			
		||||
build_libs: build_crypto build_ssl build_engines
 | 
			
		||||
 | 
			
		||||
build_crypto:
 | 
			
		||||
	@i=crypto; $(BUILD_CMD)
 | 
			
		||||
build_ssl:
 | 
			
		||||
	@i=ssl; $(BUILD_CMD)
 | 
			
		||||
build_engines:
 | 
			
		||||
	@i=engines; $(BUILD_CMD)
 | 
			
		||||
build_apps:
 | 
			
		||||
	@i=apps; $(BUILD_CMD)
 | 
			
		||||
build_tests:
 | 
			
		||||
	@i=test; $(BUILD_CMD)
 | 
			
		||||
build_tools:
 | 
			
		||||
	@i=tools; $(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
libcrypto$(SHLIB_EXT): libcrypto.a
 | 
			
		||||
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
			
		||||
		$(MAKE) SHLIBDIRS=crypto build-shared; \
 | 
			
		||||
	else \
 | 
			
		||||
		echo "There's no support for shared libraries on this platform" >&2; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a
 | 
			
		||||
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
			
		||||
		$(MAKE) SHLIBDIRS=ssl SHLIBDEPS='-lcrypto' build-shared; \
 | 
			
		||||
	else \
 | 
			
		||||
		echo "There's no support for shared libraries on this platform" >&2; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
clean-shared:
 | 
			
		||||
	@for i in $(SHLIBDIRS); do \
 | 
			
		||||
		if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
 | 
			
		||||
			tmp="$(SHARED_LIBS_LINK_EXTS)"; \
 | 
			
		||||
			for j in $${tmp:-x}; do \
 | 
			
		||||
				( set -x; rm -f lib$$i$$j ); \
 | 
			
		||||
			done; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
 | 
			
		||||
		if [ "$(PLATFORM)" = "Cygwin" ]; then \
 | 
			
		||||
			( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
 | 
			
		||||
		fi; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
link-shared:
 | 
			
		||||
	@ for i in ${SHLIBDIRS}; do \
 | 
			
		||||
		$(NEWMAKE) -f Makefile.shared \
 | 
			
		||||
			LIBNAME=$$i LIBVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
			LIBCOMPATVERSIONS=";${SHLIB_VERSION_HISTORY}" \
 | 
			
		||||
			symlink.$(SHLIB_TARGET); \
 | 
			
		||||
		libs="$$libs -l$$i"; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
build-shared: do_$(SHLIB_TARGET) link-shared
 | 
			
		||||
 | 
			
		||||
do_$(SHLIB_TARGET):
 | 
			
		||||
	@ libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
			
		||||
		$(NEWMAKE) -f Makefile.shared \
 | 
			
		||||
			CC="$(CC)" LDFLAGS="$(LDFLAGS)" \
 | 
			
		||||
			SHARED_LDFLAGS="$(SHARED_LDFLAGS)" \
 | 
			
		||||
			LIBNAME=$$i LIBVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
			LIBCOMPATVERSIONS=";${SHLIB_VERSION_HISTORY}" \
 | 
			
		||||
			LIBDEPS="$$libs $(EX_LIBS)" \
 | 
			
		||||
			link_a.$(SHLIB_TARGET); \
 | 
			
		||||
		libs="$$libs -l$$i"; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
openssl.pc:
 | 
			
		||||
	@ ( echo 'prefix=$(INSTALLTOP)'; \
 | 
			
		||||
	    echo 'exec_prefix=$${prefix}'; \
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/lib'; \
 | 
			
		||||
	    echo 'includedir=$${prefix}/include'; \
 | 
			
		||||
	    echo ''; \
 | 
			
		||||
	    echo 'Name: OpenSSL'; \
 | 
			
		||||
	    echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir}' ) > openssl.pc
 | 
			
		||||
 | 
			
		||||
Makefile.ssl: Makefile.org
 | 
			
		||||
	@echo "Makefile.ssl is older than Makefile.org."
 | 
			
		||||
	@echo "Reconfigure the source tree (via './config' or 'perl Configure'), please."
 | 
			
		||||
	@false
 | 
			
		||||
 | 
			
		||||
libclean:
 | 
			
		||||
	rm -f *.so *.so.* engines/*.so *.a */lib */*/lib
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f shlib/*.o *.o core a.out fluff *.map rehash.time testlog make.log cctest cctest.c
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i && echo "making clean in $$i..." && \
 | 
			
		||||
		$(MAKE) SDIRS='${SDIRS}' clean ) || exit 1; \
 | 
			
		||||
		rm -f $(LIBS); \
 | 
			
		||||
	fi; \
 | 
			
		||||
	done;
 | 
			
		||||
	rm -f openssl.pc
 | 
			
		||||
	rm -f *.a *.o speed.* *.map *.so .pure core
 | 
			
		||||
	rm -f $(TARFILE)
 | 
			
		||||
	@for i in $(ONEDIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	rm -fr $$i/*; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
makefile.one: files
 | 
			
		||||
	$(PERL) util/mk1mf.pl >makefile.one; \
 | 
			
		||||
	sh util/do_ms.sh
 | 
			
		||||
 | 
			
		||||
files:
 | 
			
		||||
	$(PERL) $(TOP)/util/files.pl Makefile.ssl > $(TOP)/MINFO
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i && echo "making 'files' in $$i..." && \
 | 
			
		||||
		$(MAKE) SDIRS='${SDIRS}' PERL='${PERL}' files ) || exit 1; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
links:
 | 
			
		||||
	@$(TOP)/util/point.sh Makefile.ssl Makefile
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
 | 
			
		||||
	@$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
 | 
			
		||||
	@for i in $(DIRS); do \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i && echo "making links in $$i..." && \
 | 
			
		||||
		$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PERL='${PERL}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' links ) || exit 1; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
gentests:
 | 
			
		||||
	@(cd test && echo "generating dummy tests (if needed)..." && \
 | 
			
		||||
	$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' TESTS='${TESTS}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on generate );
 | 
			
		||||
 | 
			
		||||
dclean:
 | 
			
		||||
	rm -f *.bak
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i && echo "making dclean in $$i..." && \
 | 
			
		||||
		$(MAKE) SDIRS='${SDIRS}' PERL='${PERL}' dclean ) || exit 1; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
rehash: rehash.time
 | 
			
		||||
rehash.time: certs
 | 
			
		||||
	@(OPENSSL="`pwd`/apps/openssl"; OPENSSL_DEBUG_MEMORY=on; \
 | 
			
		||||
		export OPENSSL OPENSSL_DEBUG_MEMORY; \
 | 
			
		||||
		LD_LIBRARY_PATH="`pwd`"; DYLD_LIBRARY_PATH="`pwd`"; SHLIB_PATH="`pwd`"; LIBPATH="`pwd`"; \
 | 
			
		||||
		if [ "$(PLATFORM)" = "DJGPP" ]; then PATH="`pwd`\;$$PATH";  \
 | 
			
		||||
		elif [ "$(PLATFORM)" != "Cygwin" ];  then PATH="`pwd`:$$PATH"; fi; \
 | 
			
		||||
		export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH LIBPATH PATH; \
 | 
			
		||||
		$(PERL) tools/c_rehash certs)
 | 
			
		||||
	touch rehash.time
 | 
			
		||||
 | 
			
		||||
test:   tests
 | 
			
		||||
 | 
			
		||||
tests: rehash
 | 
			
		||||
	@(cd test && echo "testing..." && \
 | 
			
		||||
	$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' TESTS='${TESTS}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on tests );
 | 
			
		||||
	@LD_LIBRARY_PATH="`pwd`"; DYLD_LIBRARY_PATH="`pwd`"; SHLIB_PATH="`pwd`"; LIBPATH="`pwd`"; \
 | 
			
		||||
		if [ "$(PLATFORM)" = "DJGPP" ]; then PATH="`pwd`\;$$PATH";  \
 | 
			
		||||
		elif [ "$(PLATFORM)" != "Cygwin" ];  then PATH="`pwd`:$$PATH"; fi; \
 | 
			
		||||
		export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH LIBPATH PATH; \
 | 
			
		||||
		apps/openssl version -a
 | 
			
		||||
 | 
			
		||||
report:
 | 
			
		||||
	@$(PERL) util/selftest.pl
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i && echo "making dependencies $$i..." && \
 | 
			
		||||
		$(MAKE) SDIRS='${SDIRS}' CFLAG='${CFLAG}' DEPFLAG='${DEPFLAG}' MAKEDEPPROG='${MAKEDEPPROG}' KRB5_INCLUDES='${KRB5_INCLUDES}' PERL='${PERL}' depend ) || exit 1; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
lint:
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i && echo "making lint $$i..." && \
 | 
			
		||||
		$(MAKE) SDIRS='${SDIRS}' lint ) || exit 1; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
tags:
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i && echo "making tags $$i..." && \
 | 
			
		||||
		$(MAKE) SDIRS='${SDIRS}' tags ) || exit 1; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
errors:
 | 
			
		||||
	$(PERL) util/mkerr.pl -recurse -write
 | 
			
		||||
	(cd engines; $(MAKE) PERL=$(PERL) errors)
 | 
			
		||||
 | 
			
		||||
stacks:
 | 
			
		||||
	$(PERL) util/mkstack.pl -write
 | 
			
		||||
 | 
			
		||||
util/libeay.num::
 | 
			
		||||
	$(PERL) util/mkdef.pl crypto update
 | 
			
		||||
 | 
			
		||||
util/ssleay.num::
 | 
			
		||||
	$(PERL) util/mkdef.pl ssl update
 | 
			
		||||
 | 
			
		||||
crypto/objects/obj_dat.h: crypto/objects/obj_dat.pl crypto/objects/obj_mac.h
 | 
			
		||||
	$(PERL) crypto/objects/obj_dat.pl crypto/objects/obj_mac.h crypto/objects/obj_dat.h
 | 
			
		||||
crypto/objects/obj_mac.h: crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num
 | 
			
		||||
	$(PERL) crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num crypto/objects/obj_mac.h
 | 
			
		||||
 | 
			
		||||
TABLE: Configure
 | 
			
		||||
	(echo 'Output of `Configure TABLE'"':"; \
 | 
			
		||||
	$(PERL) Configure TABLE) > TABLE
 | 
			
		||||
 | 
			
		||||
update: depend errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h TABLE
 | 
			
		||||
 | 
			
		||||
# Build distribution tar-file. As the list of files returned by "find" is
 | 
			
		||||
# pretty long, on several platforms a "too many arguments" error or similar
 | 
			
		||||
# would occur. Therefore the list of files is temporarily stored into a file
 | 
			
		||||
# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal
 | 
			
		||||
# tar does not support the --files-from option.
 | 
			
		||||
tar:
 | 
			
		||||
	find . -type d -print | xargs chmod 755
 | 
			
		||||
	find . -type f -print | xargs chmod a+r
 | 
			
		||||
	find . -type f -perm -0100 -print | xargs chmod a+x
 | 
			
		||||
	find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE | sort > ../$(TARFILE).list; \
 | 
			
		||||
	$(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list -cvf - | \
 | 
			
		||||
	tardy --user_number=0  --user_name=openssl \
 | 
			
		||||
	      --group_number=0 --group_name=openssl \
 | 
			
		||||
	      --prefix=openssl-$(VERSION) - |\
 | 
			
		||||
	gzip --best >../$(TARFILE).gz; \
 | 
			
		||||
	rm -f ../$(TARFILE).list; \
 | 
			
		||||
	ls -l ../$(TARFILE).gz
 | 
			
		||||
 | 
			
		||||
tar-snap:
 | 
			
		||||
	@$(TAR) $(TARFLAGS) -cvf - \
 | 
			
		||||
		`find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \! -name '*.so' \! -name '*.so.*'  \! -name 'openssl' \! -name '*test' \! -name '.#*' \! -name '*~' | sort` |\
 | 
			
		||||
	tardy --user_number=0  --user_name=openssl \
 | 
			
		||||
	      --group_number=0 --group_name=openssl \
 | 
			
		||||
	      --prefix=openssl-$(VERSION) - > ../$(TARFILE);\
 | 
			
		||||
	ls -l ../$(TARFILE)
 | 
			
		||||
 | 
			
		||||
dist:   
 | 
			
		||||
	$(PERL) Configure dist
 | 
			
		||||
	@$(MAKE) dist_pem_h
 | 
			
		||||
	@$(MAKE) SDIRS='${SDIRS}' clean
 | 
			
		||||
	@$(MAKE) TAR='${TAR}' TARFLAGS='${TARFLAGS}' tar
 | 
			
		||||
 | 
			
		||||
dist_pem_h:
 | 
			
		||||
	(cd crypto/pem; $(MAKE) CC='${CC}' SDIRS='${SDIRS}' CFLAG='${CFLAG}' pem.h; $(MAKE) clean)
 | 
			
		||||
 | 
			
		||||
install: all install_docs
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/lib \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkginfo \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/engines \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/private \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/lib
 | 
			
		||||
	@for i in $(EXHEADER) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
 | 
			
		||||
	done;
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	if [ -d "$$i" ]; then \
 | 
			
		||||
		(cd $$i; echo "installing $$i..."; \
 | 
			
		||||
		$(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' INSTALLTOP='${INSTALLTOP}' OPENSSLDIR='${OPENSSLDIR}' EX_LIBS='${EX_LIBS}' SDIRS='${SDIRS}' RANLIB='${RANLIB}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' install ); \
 | 
			
		||||
	fi; \
 | 
			
		||||
	done
 | 
			
		||||
	@for i in $(LIBS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
		if [ -f "$$i" ]; then \
 | 
			
		||||
		(       echo installing $$i; \
 | 
			
		||||
			cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
 | 
			
		||||
			$(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
 | 
			
		||||
			chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
 | 
			
		||||
			mv $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i ); \
 | 
			
		||||
		fi; \
 | 
			
		||||
	done;
 | 
			
		||||
	@if [ -n "$(SHARED_LIBS)" ]; then \
 | 
			
		||||
		tmp="$(SHARED_LIBS)"; \
 | 
			
		||||
		for i in $${tmp:-x}; \
 | 
			
		||||
		do \
 | 
			
		||||
			if [ -f "$$i" -o -f "$$i.a" ]; then \
 | 
			
		||||
			(       echo installing $$i; \
 | 
			
		||||
				if [ "$(PLATFORM)" != "Cygwin" ]; then \
 | 
			
		||||
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
 | 
			
		||||
					chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
 | 
			
		||||
					mv $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \
 | 
			
		||||
				else \
 | 
			
		||||
					c=`echo $$i | sed 's/^lib/cyg/'`; \
 | 
			
		||||
					cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
 | 
			
		||||
					chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
 | 
			
		||||
					mv $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \
 | 
			
		||||
					cp $$i.a $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a.new; \
 | 
			
		||||
					chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a.new; \
 | 
			
		||||
					mv $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a.new $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a; \
 | 
			
		||||
				fi ); \
 | 
			
		||||
			fi; \
 | 
			
		||||
		done; \
 | 
			
		||||
		(	here="`pwd`"; \
 | 
			
		||||
			cd $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
 | 
			
		||||
			$(NEWMAKE) -f $$here/Makefile link-shared ); \
 | 
			
		||||
	fi
 | 
			
		||||
	cp openssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkginfo
 | 
			
		||||
 | 
			
		||||
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)`"; \
 | 
			
		||||
	for i in doc/apps/*.pod; do \
 | 
			
		||||
		fn=`basename $$i .pod`; \
 | 
			
		||||
		if [ "$$fn" = "config" ]; then sec=5; else sec=1; fi; \
 | 
			
		||||
		echo "installing man$$sec/$$fn.$$sec"; \
 | 
			
		||||
		(cd `$(PERL) util/dirname.pl $$i`; \
 | 
			
		||||
		sh -c "$$pod2man \
 | 
			
		||||
			--section=$$sec --center=OpenSSL \
 | 
			
		||||
			--release=$(VERSION) `basename $$i`") \
 | 
			
		||||
			>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$$sec; \
 | 
			
		||||
		$(PERL) util/extract-names.pl < $$i | grep -v "^$$fn" | \
 | 
			
		||||
			while read n; do \
 | 
			
		||||
				util/point.sh $$fn.$$sec $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$n.$$sec; \
 | 
			
		||||
			done; \
 | 
			
		||||
	done; \
 | 
			
		||||
	for i in doc/crypto/*.pod doc/ssl/*.pod; do \
 | 
			
		||||
		fn=`basename $$i .pod`; \
 | 
			
		||||
		if [ "$$fn" = "des_modes" ]; then sec=7; else sec=3; fi; \
 | 
			
		||||
		echo "installing man$$sec/$$fn.$$sec"; \
 | 
			
		||||
		(cd `$(PERL) util/dirname.pl $$i`; \
 | 
			
		||||
		sh -c "$$pod2man \
 | 
			
		||||
			--section=$$sec --center=OpenSSL \
 | 
			
		||||
			--release=$(VERSION) `basename $$i`") \
 | 
			
		||||
			>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$$sec; \
 | 
			
		||||
		$(PERL) util/extract-names.pl < $$i | grep -v "^$$fn" | \
 | 
			
		||||
			while read n; do \
 | 
			
		||||
				util/point.sh $$fn.$$sec $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$n.$$sec; \
 | 
			
		||||
			done; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
 | 
			
		||||
							
								
								
									
										584
									
								
								Makefile.shared
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										584
									
								
								Makefile.shared
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,584 @@
 | 
			
		||||
#
 | 
			
		||||
# Helper makefile to link shared libraries in a portable way.
 | 
			
		||||
# This is much simpler than libtool, and hopefully not too error-prone.
 | 
			
		||||
#
 | 
			
		||||
# The following variables need to be set on the command line to build
 | 
			
		||||
# properly
 | 
			
		||||
 | 
			
		||||
# CC contains the current compiler.  This one MUST be defined
 | 
			
		||||
CC=cc
 | 
			
		||||
# LDFLAGS contains flags to be used when the temporary object file is
 | 
			
		||||
# created.  SHARED_LDFLAGS contains flags to be used when the shared
 | 
			
		||||
# library is created.
 | 
			
		||||
LDFLAGS=
 | 
			
		||||
SHARED_LDFLAGS=
 | 
			
		||||
 | 
			
		||||
# LIBNAME contains just the name of thhe library, without prefix ("lib"
 | 
			
		||||
# on Unix, "cyg" for certain forms under Cygwin...) or suffix (.a, .so,
 | 
			
		||||
# .dll, ...).  This one MUST have a value when using this makefile.
 | 
			
		||||
# For example, to build libfoo.so, you need to do the following:
 | 
			
		||||
#LIBNAME=foo
 | 
			
		||||
LIBNAME=
 | 
			
		||||
 | 
			
		||||
# LIBEXTRAS contains extra modules to link together with the library.
 | 
			
		||||
# For example, if a second library, say libbar.a needs to be linked into
 | 
			
		||||
# libfoo.so, you need to do the following:
 | 
			
		||||
#LIBEXTRAS=libbar.a
 | 
			
		||||
# Note that this MUST be used when using the link_o targets, to hold the
 | 
			
		||||
# names of all object files that go into the target library.
 | 
			
		||||
LIBEXTRAS=
 | 
			
		||||
 | 
			
		||||
# LIBVERSION contains the current version of the library.
 | 
			
		||||
# For example, to build libfoo.so.1.2, you need to do the following:
 | 
			
		||||
#LIBVERSION=1.2
 | 
			
		||||
LIBVERSION=
 | 
			
		||||
 | 
			
		||||
# LIBCOMPATVERSIONS contains the compatibility versions (a list) of
 | 
			
		||||
# the library.  They MUST be in decreasing order.
 | 
			
		||||
# For example, if libfoo.so.1.2.1 is backward compatible with libfoo.so.1.2
 | 
			
		||||
# and libfoo.so.1, you need to do the following:
 | 
			
		||||
#LIBCOMPATVERSIONS=1.2 1
 | 
			
		||||
# Note that on systems that use sonames, the last number will appear as
 | 
			
		||||
# part of it.
 | 
			
		||||
# It's also possible, for systems that support it (Tru64, for example),
 | 
			
		||||
# to add extra compatibility info with more precision, by adding a second
 | 
			
		||||
# list of versions, separated from the first with a semicolon, like this:
 | 
			
		||||
#LIBCOMPATVERSIONS=1.2 1;1.2.0 1.1.2 1.1.1 1.1.0 1.0.0
 | 
			
		||||
LIBCOMPATVERSIONS=
 | 
			
		||||
 | 
			
		||||
# LIBDEPS contains all the flags necessary to cover all necessary
 | 
			
		||||
# dependencies to other libraries.
 | 
			
		||||
LIBDEPS=
 | 
			
		||||
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
# The rest is private to this makefile.
 | 
			
		||||
 | 
			
		||||
#DEBUG=:
 | 
			
		||||
DEBUG=set -x
 | 
			
		||||
 | 
			
		||||
top:
 | 
			
		||||
	echo "Trying to use this makefile interactively?  Don't."
 | 
			
		||||
 | 
			
		||||
CALC_VERSIONS=	\
 | 
			
		||||
	SHLIB_COMPAT=; SHLIB_SOVER=; \
 | 
			
		||||
	if [ -n "$(LIBVERSION)$(LIBCOMPATVERSIONS)" ]; then \
 | 
			
		||||
		prev=""; \
 | 
			
		||||
		for v in `echo "$(LIBVERSION) $(LIBCOMPATVERSIONS)" | cut -d';' -f1`; do \
 | 
			
		||||
			SHLIB_SOVER_NODOT=$$v \
 | 
			
		||||
			SHLIB_SOVER=.$$v; \
 | 
			
		||||
			if [ -n "$$prev" ]; then \
 | 
			
		||||
				SHLIB_COMPAT="$$SHLIB_COMPAT .$$prev"; \
 | 
			
		||||
			fi; \
 | 
			
		||||
			prev=$$v; \
 | 
			
		||||
		done; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
LINK_SO=	\
 | 
			
		||||
  ( $(DEBUG); \
 | 
			
		||||
    nm -Pg $$SHOBJECTS | grep ' [BDT] ' | cut -f1 -d' ' > lib$(LIBNAME).exp; \
 | 
			
		||||
    $$SHAREDCMD $(SHARED_LDFLAGS) $$SHAREDFLAGS -o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \
 | 
			
		||||
	$$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS ) && \
 | 
			
		||||
  $(SYMLINK_SO); ( $(DEBUG); rm -f lib$(LIBNAME).exp )
 | 
			
		||||
SYMLINK_SO=	\
 | 
			
		||||
	if [ -n "$$INHIBIT_SYMLINKS" ]; then :; else \
 | 
			
		||||
		prev=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \
 | 
			
		||||
		if [ -n "$$SHLIB_COMPAT" ]; then \
 | 
			
		||||
			for x in $$SHLIB_COMPAT; do \
 | 
			
		||||
				( $(DEBUG); rm -f $$SHLIB$$x$$SHLIB_SUFFIX; \
 | 
			
		||||
				  ln -s $$prev $$SHLIB$$x$$SHLIB_SUFFIX ); \
 | 
			
		||||
				prev=$$SHLIB$$x$$SHLIB_SUFFIX; \
 | 
			
		||||
			done; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		if [ -n "$$SHLIB_SOVER" ]; then \
 | 
			
		||||
			( $(DEBUG); rm -f $$SHLIB$$SHLIB_SUFFIX; \
 | 
			
		||||
			  ln -s $$prev $$SHLIB$$SHLIB_SUFFIX ); \
 | 
			
		||||
		fi; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
LINK_SO_A=	SHOBJECTS="lib$(LIBNAME).a $(LIBEXTRAS)"; $(LINK_SO)
 | 
			
		||||
LINK_SO_O=	SHOBJECTS="$(LIBEXTRAS)"; $(LINK_SO)
 | 
			
		||||
LINK_SO_A_VIA_O=	\
 | 
			
		||||
  SHOBJECTS=lib$(LIBNAME).o ALL=$$ALLSYMSFLAGS ALLSYMSFLAGS= NOALLSYMSFLAGS=; \
 | 
			
		||||
  ( $(DEBUG); \
 | 
			
		||||
    ld $(LDFLAGS) -r -o lib$(LIBNAME).o $$ALL lib$(LIBNAME).a $(LIBEXTRAS) ); \
 | 
			
		||||
  $(LINK_SO) && rm -f $(LIBNAME).o
 | 
			
		||||
LINK_SO_A_UNPACKED=	\
 | 
			
		||||
  UNPACKDIR=link_tmp.$$$$; rm -rf $$UNPACKDIR; mkdir $$UNPACKDIR; \
 | 
			
		||||
  (cd $$UNPACKDIR; ar x ../lib$(LIBNAME).a) && cp $(LIBEXTRAS) $$UNPACKDIR && \
 | 
			
		||||
  SHOBJECTS=$$UNPACKDIR/*.o; \
 | 
			
		||||
  $(LINK_SO) && rm -rf $$UNPACKDIR
 | 
			
		||||
 | 
			
		||||
DETECT_GNU_LD=${CC} -v 2>&1 | grep '^gcc' >/dev/null 2>&1 && \
 | 
			
		||||
	my_ld=`${CC} -print-prog-name=ld 2>&1` && \
 | 
			
		||||
	[ -n "$$my_ld" ] && \
 | 
			
		||||
	$$my_ld -v 2>&1 | grep 'GNU ld' >/dev/null 2>&1
 | 
			
		||||
DO_GNU=$(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
	SHLIB_SUFFIX= \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
	ALLSYMSFLAGS='-Wl,--whole-archive' \
 | 
			
		||||
	NOALLSYMSFLAGS='-Wl,--no-whole-archive' \
 | 
			
		||||
	SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,-soname=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX" \
 | 
			
		||||
	SHAREDCMD='$(CC)'
 | 
			
		||||
 | 
			
		||||
link_o.gnu:
 | 
			
		||||
	@ $(DO_GNU); $(LINK_SO_O)
 | 
			
		||||
link_a.gnu:
 | 
			
		||||
	@ $(DO_GNU); $(LINK_SO_A)
 | 
			
		||||
 | 
			
		||||
# For Darwin AKA Mac OS/X (dyld)
 | 
			
		||||
link_o.darwin:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME) \
 | 
			
		||||
	SHLIB_SUFFIX=.dylib \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
	ALLSYMSFLAGS='-all_load' \
 | 
			
		||||
	NOALLSYMSFLAGS='' \
 | 
			
		||||
	SHAREDFLAGS="-dynamiclib" \
 | 
			
		||||
	SHAREDCMD='$(CC)'; \
 | 
			
		||||
	if [ -n "$(LIBVERSION)" ]; then \
 | 
			
		||||
		SHAREDFLAGS="$SHAREDFLAGS -current_version $(LIBVERSION)"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	if [ -n "$$SHLIB_SOVER_NODOT" ]; then \
 | 
			
		||||
		SHAREDFLAGS="$SHAREDFLAGS -compatibility_version $$SHLIB_SOVER_NODOT"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.darwin:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME) \
 | 
			
		||||
	SHLIB_SUFFIX=.dylib \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
	ALLSYMSFLAGS='-all_load' \
 | 
			
		||||
	NOALLSYMSFLAGS='' \
 | 
			
		||||
	SHAREDFLAGS="-dynamiclib" \
 | 
			
		||||
	SHAREDCMD='$(CC)'; \
 | 
			
		||||
	if [ -n "$(LIBVERSION)" ]; then \
 | 
			
		||||
		SHAREDFLAGS="$SHAREDFLAGS -current_version $(LIBVERSION)"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	if [ -n "$$SHLIB_SOVER_NODOT" ]; then \
 | 
			
		||||
		SHAREDFLAGS="$SHAREDFLAGS -compatibility_version $$SHLIB_SOVER_NODOT"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_A)
 | 
			
		||||
 | 
			
		||||
link_o.cygwin:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	INHIBIT_SYMLINKS=yes; \
 | 
			
		||||
	SHLIB=cyg$(LIBNAME) \
 | 
			
		||||
	SHLIB_SUFFIX=.dll \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
	SHLIB_SOVER=-$(LIBVERSION) \
 | 
			
		||||
	ALLSYMSFLAGS='-Wl,--whole-archive' \
 | 
			
		||||
	NOALLSYMSFLAGS='-Wl,--no-whole-archive' \
 | 
			
		||||
	SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a" \
 | 
			
		||||
	SHAREDCMD='${CC}'; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.cygwin:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	INHIBIT_SYMLINKS=yes; \
 | 
			
		||||
	SHLIB=cyg$(LIBNAME) \
 | 
			
		||||
	SHLIB_SUFFIX=.dll \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
	SHLIB_SOVER= \
 | 
			
		||||
	ALLSYMSFLAGS='-Wl,--whole-archive' \
 | 
			
		||||
	NOALLSYMSFLAGS='-Wl,--no-whole-archive' \
 | 
			
		||||
	SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a" \
 | 
			
		||||
	SHAREDCMD='${CC}'; \
 | 
			
		||||
	$(LINK_SO_A)
 | 
			
		||||
 | 
			
		||||
link_o.alpha-osf1:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU); \
 | 
			
		||||
	else \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
		SHLIB_SUFFIX= \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
		SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
 | 
			
		||||
		else \
 | 
			
		||||
			SHLIB_HIST="$(LIBVERSION)"; \
 | 
			
		||||
		fi
 | 
			
		||||
		SHLIB_SOVER= \
 | 
			
		||||
		ALLSYMSFLAGS='-all' \
 | 
			
		||||
		NOALLSYMSFLAGS='-none' \
 | 
			
		||||
		SHAREDFLAGS="-shared" \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHAREDFLAGS="$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
 | 
			
		||||
		fi; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.alpha-osf1:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU); \
 | 
			
		||||
	else \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
		SHLIB_SUFFIX= \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
		SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
 | 
			
		||||
		else \
 | 
			
		||||
			SHLIB_HIST="$(LIBVERSION)"; \
 | 
			
		||||
		fi
 | 
			
		||||
		SHLIB_SOVER= \
 | 
			
		||||
		ALLSYMSFLAGS='-all' \
 | 
			
		||||
		NOALLSYMSFLAGS='-none' \
 | 
			
		||||
		SHAREDFLAGS="-shared" \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHAREDFLAGS="$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
 | 
			
		||||
		fi; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_A)
 | 
			
		||||
 | 
			
		||||
# The difference between alpha-osf1-shared and tru64-shared is the `-msym'
 | 
			
		||||
# option passed to the linker.
 | 
			
		||||
link_o.tru64:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU); \
 | 
			
		||||
	else \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
		SHLIB_SUFFIX= \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
		SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
 | 
			
		||||
		else \
 | 
			
		||||
			SHLIB_HIST="$(LIBVERSION)"; \
 | 
			
		||||
		fi
 | 
			
		||||
		SHLIB_SOVER= \
 | 
			
		||||
		ALLSYMSFLAGS='-all' \
 | 
			
		||||
		NOALLSYMSFLAGS='-none' \
 | 
			
		||||
		SHAREDFLAGS="-shared -msym" \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHAREDFLAGS="$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
 | 
			
		||||
		fi; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.tru64:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU); \
 | 
			
		||||
	else \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
		SHLIB_SUFFIX= \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
		SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
 | 
			
		||||
		else \
 | 
			
		||||
			SHLIB_HIST="$(LIBVERSION)"; \
 | 
			
		||||
		fi
 | 
			
		||||
		SHLIB_SOVER= \
 | 
			
		||||
		ALLSYMSFLAGS='-all' \
 | 
			
		||||
		NOALLSYMSFLAGS='-none' \
 | 
			
		||||
		SHAREDFLAGS="-shared -msym" \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHAREDFLAGS="$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
 | 
			
		||||
		fi; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_A)
 | 
			
		||||
 | 
			
		||||
# The difference between tru64-shared and tru64-shared-rpath is the
 | 
			
		||||
# -rpath ${LIBRPATH} passed to the linker.
 | 
			
		||||
link_o.tru64-rpath:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU); \
 | 
			
		||||
	else \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
		SHLIB_SUFFIX= \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
		SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
 | 
			
		||||
		else \
 | 
			
		||||
			SHLIB_HIST="$(LIBVERSION)"; \
 | 
			
		||||
		fi
 | 
			
		||||
		SHLIB_SOVER= \
 | 
			
		||||
		ALLSYMSFLAGS='-all' \
 | 
			
		||||
		NOALLSYMSFLAGS='-none' \
 | 
			
		||||
		SHAREDFLAGS="-shared -msym -rpath $(LIBRPATH)" \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHAREDFLAGS="$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
 | 
			
		||||
		fi; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.tru64-rpath:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU); \
 | 
			
		||||
	else \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
		SHLIB_SUFFIX= \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
		SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
 | 
			
		||||
		else \
 | 
			
		||||
			SHLIB_HIST="$(LIBVERSION)"; \
 | 
			
		||||
		fi
 | 
			
		||||
		SHLIB_SOVER= \
 | 
			
		||||
		ALLSYMSFLAGS='-all' \
 | 
			
		||||
		NOALLSYMSFLAGS='-none' \
 | 
			
		||||
		SHAREDFLAGS="-shared -msym -rpath $(LIBRPATH)" \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHAREDFLAGS="$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
 | 
			
		||||
		fi; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_A)
 | 
			
		||||
 | 
			
		||||
link_o.solaris:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU); \
 | 
			
		||||
	else \
 | 
			
		||||
		$(CALC_VERSIONS); \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
		SHLIB_SUFFIX= \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
		ALLSYMSFLAGS='-z allextract' \
 | 
			
		||||
		NOALLSYMSFLAGS='' \
 | 
			
		||||
		SHAREDFLAGS='-G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.solaris:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU); \
 | 
			
		||||
	else \
 | 
			
		||||
		$(CALC_VERSIONS); \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
		SHLIB_SUFFIX= \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
		ALLSYMSFLAGS='-z allextract' \
 | 
			
		||||
		NOALLSYMSFLAGS='' \
 | 
			
		||||
		SHAREDFLAGS='-G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_A)
 | 
			
		||||
 | 
			
		||||
# OpenServer 5 native compilers used
 | 
			
		||||
# UnixWare 7 and OpenUNIX 8 native compilers used
 | 
			
		||||
link_o.svr3:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU); \
 | 
			
		||||
	else \
 | 
			
		||||
		$(CALC_VERSIONS); \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
		SHLIB_SUFFIX= \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
		ALLSYMSFLAGS='-z allextract' \
 | 
			
		||||
		NOALLSYMSFLAGS='' \
 | 
			
		||||
		SHAREDFLAGS='-G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.svr3:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU); \
 | 
			
		||||
	else \
 | 
			
		||||
		$(CALC_VERSIONS); \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
		SHLIB_SUFFIX= \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
		ALLSYMSFLAGS='-z allextract' \
 | 
			
		||||
		NOALLSYMSFLAGS='' \
 | 
			
		||||
		SHAREDFLAGS='-G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_A_UNPACKED)
 | 
			
		||||
 | 
			
		||||
link_o.irix:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU); \
 | 
			
		||||
	else \
 | 
			
		||||
		$(CALC_VERSIONS); \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
		SHLIB_SUFFIX= \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
		ALLSYMSFLAGS='-all' \
 | 
			
		||||
		NOALLSYMSFLAGS='' \
 | 
			
		||||
		SHAREDFLAGS='-shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.irix:
 | 
			
		||||
	@ if ${DETECT_GNU_LD}; then \
 | 
			
		||||
		$(DO_GNU); \
 | 
			
		||||
	else \
 | 
			
		||||
		$(CALC_VERSIONS); \
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
		SHLIB_SUFFIX= \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
		ALLSYMSFLAGS='-all' \
 | 
			
		||||
		NOALLSYMSFLAGS='' \
 | 
			
		||||
		SHAREDFLAGS='-shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_A)
 | 
			
		||||
 | 
			
		||||
# HP-UX includes the full pathname of libs we depend on, so we would get
 | 
			
		||||
# ./libcrypto (with ./ as path information) compiled into libssl, hence
 | 
			
		||||
# we omit the SHLIBDEPS. Applications must be linked with -lssl -lcrypto
 | 
			
		||||
# anyway.
 | 
			
		||||
# The object modules are loaded from lib$i.a using the undocumented -Fl
 | 
			
		||||
# option.
 | 
			
		||||
#
 | 
			
		||||
# WARNING: Until DSO is fixed to support a search path, we support SHLIB_PATH
 | 
			
		||||
#          by temporarily specifying "+s"!
 | 
			
		||||
#
 | 
			
		||||
link_o.hpux32:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).sl \
 | 
			
		||||
	SHLIB_SUFFIX= \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
	ALLSYMSFLAGS='-Fl' \
 | 
			
		||||
	NOALLSYMSFLAGS='' \
 | 
			
		||||
	SHAREDFLAGS='+vnocompatwarnings -b -z +s +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \
 | 
			
		||||
	SHAREDCMD='/usr/ccs/bin/ld'; \
 | 
			
		||||
	$(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
 | 
			
		||||
link_a.hpux32:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).sl \
 | 
			
		||||
	SHLIB_SUFFIX= \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
	ALLSYMSFLAGS='-Fl' \
 | 
			
		||||
	NOALLSYMSFLAGS='' \
 | 
			
		||||
	SHAREDFLAGS='+vnocompatwarnings -b -z +s +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \
 | 
			
		||||
	SHAREDCMD='/usr/ccs/bin/ld'; \
 | 
			
		||||
	$(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
 | 
			
		||||
 | 
			
		||||
# HP-UX includes the full pathname of libs we depend on, so we would get
 | 
			
		||||
# ./libcrypto (with ./ as path information) compiled into libssl, hence
 | 
			
		||||
# we omit the SHLIBDEPS. Applications must be linked with -lssl -lcrypto
 | 
			
		||||
# anyway.
 | 
			
		||||
#
 | 
			
		||||
# HP-UX in 64bit mode has "+s" enabled by default; it will search for
 | 
			
		||||
# shared libraries along LD_LIBRARY_PATH _and_ SHLIB_PATH.
 | 
			
		||||
#
 | 
			
		||||
link_o.hpux64:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).sl \
 | 
			
		||||
	SHLIB_SUFFIX= \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
	ALLSYMSFLAGS='+forceload' \
 | 
			
		||||
	NOALLSYMSFLAGS='' \
 | 
			
		||||
	SHAREDFLAGS='-b -z +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \
 | 
			
		||||
	SHAREDCMD='/usr/ccs/bin/ld'; \
 | 
			
		||||
	$(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
 | 
			
		||||
link_a.hpux64:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).sl \
 | 
			
		||||
	SHLIB_SUFFIX= \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
	ALLSYMSFLAGS='+forceload' \
 | 
			
		||||
	NOALLSYMSFLAGS='' \
 | 
			
		||||
	SHAREDFLAGS='-b -z +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \
 | 
			
		||||
	SHAREDCMD='/usr/ccs/bin/ld'; \
 | 
			
		||||
	$(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
 | 
			
		||||
 | 
			
		||||
link_o.aix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
	SHLIB_SUFFIX= \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
	ALLSYMSFLAGS='-bnogc' \
 | 
			
		||||
	NOALLSYMSFLAGS='' \
 | 
			
		||||
	SHAREDFLAGS='-G -bE:lib$(LIBNAME).exp -bM:SRE' \
 | 
			
		||||
	SHAREDCMD='$(CC)'; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.aix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
	SHLIB_SUFFIX= \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
	ALLSYMSFLAGS='-bnogc' \
 | 
			
		||||
	NOALLSYMSFLAGS='' \
 | 
			
		||||
	SHAREDFLAGS='-G -bE:lib$(LIBNAME).exp -bM:SRE' \
 | 
			
		||||
	SHAREDCMD='$(CC)'; \
 | 
			
		||||
	$(LINK_SO_A_VIA_O)
 | 
			
		||||
 | 
			
		||||
link_o.reliantunix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
	SHLIB_SUFFIX= \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
	ALLSYMSFLAGS= \
 | 
			
		||||
	NOALLSYMSFLAGS='' \
 | 
			
		||||
	SHAREDFLAGS='-G' \
 | 
			
		||||
	SHAREDCMD='$(CC)'; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.reliantunix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so \
 | 
			
		||||
	SHLIB_SUFFIX= \
 | 
			
		||||
	LIBDEPS="$(LIBDEPS) -lc" \
 | 
			
		||||
	ALLSYMSFLAGS= \
 | 
			
		||||
	NOALLSYMSFLAGS='' \
 | 
			
		||||
	SHAREDFLAGS='-G' \
 | 
			
		||||
	SHAREDCMD='$(CC)'; \
 | 
			
		||||
	$(LINK_SO_A_UNPACKED)
 | 
			
		||||
 | 
			
		||||
# Targets to build symbolic links when needed
 | 
			
		||||
symlink.gnu symlink.solaris symlink.svr3 symlink.irix \
 | 
			
		||||
symlink.aix symlink.reliantunix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	$(SYMLINK_SO)
 | 
			
		||||
symlink.darwin:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME) \
 | 
			
		||||
	SHLIB_SUFFIX=.dylib; \
 | 
			
		||||
	$(SYMLINK_SO)
 | 
			
		||||
symlink.hpux32 symlink.hpux64:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).sl; \
 | 
			
		||||
	$(SYMLINK_SO)
 | 
			
		||||
# The following lines means those specific architectures do no symlinks
 | 
			
		||||
symlink.cygwin symlib.alpha-osf1 symlink.tru64 symlink.tru64-rpath:
 | 
			
		||||
 | 
			
		||||
# Compatibility targets
 | 
			
		||||
link_o.bsd-gcc-shared link_o.linux-shared link_o.gnu-shared: link_o.gnu
 | 
			
		||||
link_a.bsd-gcc-shared link_a.linux-shared link_a.gnu-shared: link_a.gnu
 | 
			
		||||
symlink.bsd-gcc-shared symlink.linux-shared symlink.gnu-shared: symlink.gnu
 | 
			
		||||
link_o.darwin-shared: link_o.darwin
 | 
			
		||||
link_a.darwin-shared: link_a.darwin
 | 
			
		||||
symlink.darwin-shared: symlink.darwin
 | 
			
		||||
link_o.cygwin-shared: link_o.cygwin
 | 
			
		||||
link_a.cygwin-shared: link_a.cygwin
 | 
			
		||||
symlink.cygwin-shared: symlink.cygwin
 | 
			
		||||
link_o.alpha-osf1-shared: link_o.alpha-osf1
 | 
			
		||||
link_a.alpha-osf1-shared: link_a.alpha-osf1
 | 
			
		||||
symlink.alpha-osf1-shared: symlink.alpha-osf1
 | 
			
		||||
link_o.tru64-shared: link_o.tru64
 | 
			
		||||
link_a.tru64-shared: link_a.tru64
 | 
			
		||||
symlink.tru64-shared: symlink.tru64
 | 
			
		||||
link_o.tru64-shared-rpath: link_o.tru64-rpath
 | 
			
		||||
link_a.tru64-shared-rpath: link_a.tru64-rpath
 | 
			
		||||
symlink.tru64-shared-rpath: symlink.tru64-rpath
 | 
			
		||||
link_o.solaris-shared: link_o.solaris
 | 
			
		||||
link_a.solaris-shared: link_a.solaris
 | 
			
		||||
symlink.solaris-shared: symlink.solaris
 | 
			
		||||
link_o.svr3-shared: link_o.svr3
 | 
			
		||||
link_a.svr3-shared: link_a.svr3
 | 
			
		||||
symlink.svr3-shared: symlink.svr3
 | 
			
		||||
link_o.svr5-shared: link_o.svr3
 | 
			
		||||
link_a.svr5-shared: link_a.svr3
 | 
			
		||||
symlink.svr5-shared: symlink.svr3
 | 
			
		||||
link_o.irix-shared: link_o.irix
 | 
			
		||||
link_a.irix-shared: link_a.irix
 | 
			
		||||
symlink.irix-shared: symlink.irix
 | 
			
		||||
link_o.hpux-shared: link_o.hpux32
 | 
			
		||||
link_a.hpux-shared: link_a.hpux32
 | 
			
		||||
symlink.hpux-shared: symlink.hpux32
 | 
			
		||||
link_o.hpux64-shared: link_o.hpux64
 | 
			
		||||
link_a.hpux64-shared: link_a.hpux64
 | 
			
		||||
symlink.hpux64-shared: symlink.hpux64
 | 
			
		||||
link_o.aix-shared: link_o.aix
 | 
			
		||||
link_a.aix-shared: link_a.aix
 | 
			
		||||
symlink.aix-shared: symlink.aix
 | 
			
		||||
link_o.reliantunix-shared: link_o.reliantunix
 | 
			
		||||
link_a.reliantunix-shared: link_a.reliantunix
 | 
			
		||||
symlink.reliantunix-shared: symlink.reliantunix
 | 
			
		||||
							
								
								
									
										329
									
								
								Makefile.ssl
									
									
									
									
									
								
							
							
						
						
									
										329
									
								
								Makefile.ssl
									
									
									
									
									
								
							@@ -1,329 +0,0 @@
 | 
			
		||||
#
 | 
			
		||||
# Makefile for all the SSL related library routines and utilities
 | 
			
		||||
VERSION = 0.9.1c
 | 
			
		||||
PLATFORM=dist
 | 
			
		||||
#
 | 
			
		||||
# make install will install:
 | 
			
		||||
#   libraries into $INSTALLTOP/lib
 | 
			
		||||
#   headers   into $INSTALLTOP/include
 | 
			
		||||
#   utilities into $INSTALLTOP/bin
 | 
			
		||||
#
 | 
			
		||||
# By default INSTALLTOP is set to /usr/local/ssl
 | 
			
		||||
# If you want things install elsewere, consider running
 | 
			
		||||
# perl util/ssldir.pl /new/path
 | 
			
		||||
#
 | 
			
		||||
# Interesting Mailing Lists:
 | 
			
		||||
#     ssl-bugs@mincom.oz.au
 | 
			
		||||
#     ssl-users@mincom.oz.au
 | 
			
		||||
#
 | 
			
		||||
# To join the Mailing Lists:
 | 
			
		||||
#     ssl-bugs-request@mincom.oz.au
 | 
			
		||||
#     ssl-users-request@mincom.oz.au
 | 
			
		||||
#
 | 
			
		||||
# If you must get hold of people directly (we much prefer the above
 | 
			
		||||
# lists to be used if the question is of general interest!):
 | 
			
		||||
#       Eric Young <eay@cryptsoft.com>
 | 
			
		||||
#       Tim Hudson <tjh@cryptsoft.com>
 | 
			
		||||
#       or both    <ssleay@cryptsoft.com>
 | 
			
		||||
#
 | 
			
		||||
# The primary distribution of SSLeay is from
 | 
			
		||||
# ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL
 | 
			
		||||
#
 | 
			
		||||
# NOCONST - Define for C compilers that don't like the const key word.
 | 
			
		||||
# NOPROTO - Define in if your compiler does not support prototypes.
 | 
			
		||||
# RSAref  - Define if we are to link with RSAref.
 | 
			
		||||
# NO_IDEA - Define to build without the IDEA algorithm
 | 
			
		||||
# NO_RC4  - Define to build without the RC4 algorithm
 | 
			
		||||
# NO_RC2  - Define to build without the RC2 algorithm
 | 
			
		||||
# THREADS - Define when building with threads, you will probably also need any
 | 
			
		||||
#           system defines as well, i.e. _REENTERANT for Solaris 2.[34]
 | 
			
		||||
# TERMIO  - Define the termio terminal subsystem, needed if sgtty is missing.
 | 
			
		||||
# TERMIOS - Define the termios terminal subsystem, Silicon Graphics.
 | 
			
		||||
# LONGCRYPT - Define to use HPUX 10.x's long password modification to crypt(3).
 | 
			
		||||
# DEVRANDOM - Give this the value of the 'random device' if your OS supports
 | 
			
		||||
#           one.  32 bytes will be read from this when the random
 | 
			
		||||
#           number generator is initalised.
 | 
			
		||||
# SSL_ALLOW_ADH - define if you want the server to be able to use the
 | 
			
		||||
#           SSLv3 anon-DH ciphers.
 | 
			
		||||
# SSL_ALLOW_ENULL - define if you want the server to be able to use the
 | 
			
		||||
#           NULL encryption ciphers.
 | 
			
		||||
#
 | 
			
		||||
# LOCK_DEBUG - turns on lots of lock debug output :-)
 | 
			
		||||
# REF_CHECK - turn on some xyz_free() assertions.
 | 
			
		||||
# REF_PRINT - prints some stuff on structure free.
 | 
			
		||||
# CRYPTO_MDEBUG - turns on my 'memory leak' detecting stuff
 | 
			
		||||
# MFUNC - Make all Malloc/Free/Realloc calls call
 | 
			
		||||
#       CRYPTO_malloc/CRYPTO_free/CRYPTO_realloc which can be setup to
 | 
			
		||||
#       call application defined callbacks via CRYPTO_set_mem_functions()
 | 
			
		||||
# MD5_ASM needs to be defined to use the x86 assembler for MD5
 | 
			
		||||
# SHA1_ASM needs to be defined to use the x86 assembler for SHA1
 | 
			
		||||
# RMD160_ASM needs to be defined to use the x86 assembler for RIPEMD160
 | 
			
		||||
# Do not define B_ENDIAN or L_ENDIAN if 'unsigned long' == 8.  It must
 | 
			
		||||
# equal 4.
 | 
			
		||||
# PKCS1_CHECK - pkcs1 tests.
 | 
			
		||||
 | 
			
		||||
CC= cc
 | 
			
		||||
#CFLAG= -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall -Wuninitialized -DSHA1_ASM -DMD5_ASM -DRMD160_ASM
 | 
			
		||||
CFLAG= -O -DNOPROTO
 | 
			
		||||
PEX_LIBS= -L. -L.. -L../.. -L../../..
 | 
			
		||||
EX_LIBS= 
 | 
			
		||||
AR=ar r
 | 
			
		||||
 | 
			
		||||
# Set BN_ASM to bn_asm.o if you want to use the C version
 | 
			
		||||
BN_ASM= bn_asm.o
 | 
			
		||||
#BN_ASM= bn_asm.o
 | 
			
		||||
#BN_ASM= asm/bn86-elf.o	# elf, linux-elf
 | 
			
		||||
#BN_ASM= asm/bn86-sol.o # solaris
 | 
			
		||||
#BN_ASM= asm/bn86-out.o # a.out, FreeBSD
 | 
			
		||||
#BN_ASM= asm/bn86bsdi.o # bsdi
 | 
			
		||||
#BN_ASM= asm/alpha.o    # DEC Alpha
 | 
			
		||||
#BN_ASM= asm/pa-risc2.o # HP-UX PA-RISC
 | 
			
		||||
#BN_ASM= asm/r3000.o    # SGI MIPS cpu
 | 
			
		||||
#BN_ASM= asm/sparc.o    # Sun solaris/SunOS
 | 
			
		||||
#BN_ASM= asm/bn-win32.o # Windows 95/NT
 | 
			
		||||
#BN_ASM= asm/x86w16.o   # 16 bit code for Windows 3.1/DOS
 | 
			
		||||
#BN_ASM= asm/x86w32.o   # 32 bit code for Windows 3.1
 | 
			
		||||
 | 
			
		||||
# Set DES_ENC to des_enc.o if you want to use the C version
 | 
			
		||||
#There are 4 x86 assember options.
 | 
			
		||||
DES_ENC= des_enc.o fcrypt_b.o
 | 
			
		||||
#DES_ENC= des_enc.o fcrypt_b.o          # C
 | 
			
		||||
#DES_ENC= asm/dx86-elf.o asm/yx86-elf.o # elf
 | 
			
		||||
#DES_ENC= asm/dx86-sol.o asm/yx86-sol.o # solaris
 | 
			
		||||
#DES_ENC= asm/dx86-out.o asm/yx86-out.o # a.out, FreeBSD
 | 
			
		||||
#DES_ENC= asm/dx86bsdi.o asm/yx86bsdi.o # bsdi
 | 
			
		||||
 | 
			
		||||
# Set BF_ENC to bf_enc.o if you want to use the C version
 | 
			
		||||
#There are 4 x86 assember options.
 | 
			
		||||
BF_ENC= bf_enc.o
 | 
			
		||||
#BF_ENC= bf_enc.o
 | 
			
		||||
#BF_ENC= asm/bx86-elf.o # elf
 | 
			
		||||
#BF_ENC= asm/bx86-sol.o # solaris
 | 
			
		||||
#BF_ENC= asm/bx86-out.o # a.out, FreeBSD
 | 
			
		||||
#BF_ENC= asm/bx86bsdi.o # bsdi
 | 
			
		||||
 | 
			
		||||
# Set CAST_ENC to c_enc.o if you want to use the C version
 | 
			
		||||
#There are 4 x86 assember options.
 | 
			
		||||
CAST_ENC= c_enc.o
 | 
			
		||||
#CAST_ENC= c_enc.o
 | 
			
		||||
#CAST_ENC= asm/cx86-elf.o # elf
 | 
			
		||||
#CAST_ENC= asm/cx86-sol.o # solaris
 | 
			
		||||
#CAST_ENC= asm/cx86-out.o # a.out, FreeBSD
 | 
			
		||||
#CAST_ENC= asm/cx86bsdi.o # bsdi
 | 
			
		||||
 | 
			
		||||
# Set RC4_ENC to rc4_enc.o if you want to use the C version
 | 
			
		||||
#There are 4 x86 assember options.
 | 
			
		||||
RC4_ENC= rc4_enc.o
 | 
			
		||||
#RC4_ENC= rc4_enc.o
 | 
			
		||||
#RC4_ENC= asm/rx86-elf.o # elf
 | 
			
		||||
#RC4_ENC= asm/rx86-sol.o # solaris
 | 
			
		||||
#RC4_ENC= asm/rx86-out.o # a.out, FreeBSD
 | 
			
		||||
#RC4_ENC= asm/rx86bsdi.o # bsdi
 | 
			
		||||
 | 
			
		||||
# Set RC5_ENC to rc5_enc.o if you want to use the C version
 | 
			
		||||
#There are 4 x86 assember options.
 | 
			
		||||
RC5_ENC= rc5_enc.o
 | 
			
		||||
#RC5_ENC= rc5_enc.o
 | 
			
		||||
#RC5_ENC= asm/r586-elf.o # elf
 | 
			
		||||
#RC5_ENC= asm/r586-sol.o # solaris
 | 
			
		||||
#RC5_ENC= asm/r586-out.o # a.out, FreeBSD
 | 
			
		||||
#RC5_ENC= asm/r586bsdi.o # bsdi
 | 
			
		||||
 | 
			
		||||
# Also need MD5_ASM defined
 | 
			
		||||
MD5_ASM_OBJ= 
 | 
			
		||||
#MD5_ASM_OBJ= asm/mx86-elf.o        # elf
 | 
			
		||||
#MD5_ASM_OBJ= asm/mx86-sol.o        # solaris
 | 
			
		||||
#MD5_ASM_OBJ= asm/mx86-out.o        # a.out, FreeBSD
 | 
			
		||||
#MD5_ASM_OBJ= asm/mx86bsdi.o        # bsdi
 | 
			
		||||
 | 
			
		||||
# Also need SHA1_ASM defined
 | 
			
		||||
SHA1_ASM_OBJ= 
 | 
			
		||||
#SHA1_ASM_OBJ= asm/sx86-elf.o       # elf
 | 
			
		||||
#SHA1_ASM_OBJ= asm/sx86-sol.o       # solaris
 | 
			
		||||
#SHA1_ASM_OBJ= asm/sx86-out.o       # a.out, FreeBSD
 | 
			
		||||
#SHA1_ASM_OBJ= asm/sx86bsdi.o       # bsdi
 | 
			
		||||
 | 
			
		||||
# Also need RMD160_ASM defined
 | 
			
		||||
RMD160_ASM_OBJ= 
 | 
			
		||||
#RMD160_ASM_OBJ= asm/rm86-elf.o       # elf
 | 
			
		||||
#RMD160_ASM_OBJ= asm/rm86-sol.o       # solaris
 | 
			
		||||
#RMD160_ASM_OBJ= asm/rm86-out.o       # a.out, FreeBSD
 | 
			
		||||
#RMD160_ASM_OBJ= asm/rm86bsdi.o       # bsdi
 | 
			
		||||
 | 
			
		||||
DIRS=   crypto ssl rsaref apps test tools
 | 
			
		||||
# dirs in crypto to build
 | 
			
		||||
SDIRS=  \
 | 
			
		||||
	md2 md5 sha mdc2 hmac ripemd \
 | 
			
		||||
	des rc2 rc4 rc5 idea bf cast \
 | 
			
		||||
	bn rsa dsa dh \
 | 
			
		||||
	buffer bio stack lhash rand err objects \
 | 
			
		||||
	evp pem asn1 x509 conf txt_db pkcs7 comp
 | 
			
		||||
 | 
			
		||||
# If you change the INSTALLTOP, make sure to also change the values
 | 
			
		||||
# in crypto/location.h
 | 
			
		||||
INSTALLTOP=/usr/local/ssl
 | 
			
		||||
 | 
			
		||||
MAKEFILE= Makefile.ssl
 | 
			
		||||
MAKE=     make -f Makefile.ssl
 | 
			
		||||
 | 
			
		||||
MAN1=1
 | 
			
		||||
MAN3=3
 | 
			
		||||
SHELL=/bin/sh
 | 
			
		||||
 | 
			
		||||
TOP=    .
 | 
			
		||||
ONEDIRS=out tmp
 | 
			
		||||
EDIRS=  times doc bugs util include certs ms shlib mt demos perl sf dep
 | 
			
		||||
WDIRS=  windows
 | 
			
		||||
LIBS=   libcrypto.a libssl.a 
 | 
			
		||||
 | 
			
		||||
GENERAL=        Makefile
 | 
			
		||||
BASENAME=       openssl
 | 
			
		||||
NAME=           $(BASENAME)-$(VERSION)
 | 
			
		||||
TARFILE=        $(NAME).tar
 | 
			
		||||
WTARFILE=       $(NAME)-win.tar
 | 
			
		||||
EXHEADER=       e_os.h
 | 
			
		||||
HEADER=         e_os.h
 | 
			
		||||
 | 
			
		||||
all:
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cd $$i; echo "making $$i..."; \
 | 
			
		||||
	$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' SDIRS='${SDIRS}' AR='${AR}' all ); \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
sub_all:
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cd $$i; echo "making $$i..."; \
 | 
			
		||||
	$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' all ); \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
libclean:
 | 
			
		||||
	/bin/rm *.a */lib */*/lib
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	/bin/rm -f shlib/*.o *.o core a.out fluff *.map
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cd $$i; echo "cleaning $$i..."; \
 | 
			
		||||
	$(MAKE) SDIRS='${SDIRS}' clean ); \
 | 
			
		||||
	/bin/rm -f $(LIBS); \
 | 
			
		||||
	done;
 | 
			
		||||
	/bin/rm -f *.a *.o speed.* *.map *.so .pure core
 | 
			
		||||
	/bin/rm -f $(TARFILE)
 | 
			
		||||
	@for i in $(ONEDIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	/bin/rm -fr $$i/*; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
makefile.one: files
 | 
			
		||||
	perl util/mk1mf.pl >makefile.one; \
 | 
			
		||||
	sh util/do_ms.sh
 | 
			
		||||
 | 
			
		||||
files:  MINFO
 | 
			
		||||
	perl $(TOP)/util/files.pl Makefile.ssl > $(TOP)/MINFO
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cd $$i; echo "making 'files' in $$i..."; \
 | 
			
		||||
	$(MAKE) SDIRS='${SDIRS}' files ); \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
links:
 | 
			
		||||
	/bin/rm -f Makefile
 | 
			
		||||
	./util/point.sh Makefile.ssl Makefile
 | 
			
		||||
	$(TOP)/util/mklink.sh include $(EXHEADER)
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cd $$i; echo "making links in $$i..."; \
 | 
			
		||||
	$(MAKE) SDIRS='${SDIRS}' links ); \
 | 
			
		||||
	done;
 | 
			
		||||
	@(SSLEAY="`pwd`/apps/ssleay"; export SSLEAY; sh tools/c_rehash certs)
 | 
			
		||||
 | 
			
		||||
dclean:
 | 
			
		||||
	/bin/rm -f *.bak
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cd $$i; echo "undoing makedepend in $$i..."; \
 | 
			
		||||
	$(MAKE) SDIRS='${SDIRS}' dclean ); \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
rehash:
 | 
			
		||||
	@(PATH="`pwd`/apps:${PATH}"; sh tools/c_rehash certs)
 | 
			
		||||
 | 
			
		||||
test:   tests
 | 
			
		||||
 | 
			
		||||
tests:
 | 
			
		||||
	(cd test; echo "testing $$i..."; \
 | 
			
		||||
	$(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SDIRS='${SDIRS}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' tests );
 | 
			
		||||
	@apps/ssleay version -a
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cd $$i; echo "making dependancies $$i..."; \
 | 
			
		||||
	$(MAKE) SDIRS='${SDIRS}' depend ); \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
lint:
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cd $$i; echo "making lint $$i..."; \
 | 
			
		||||
	$(MAKE) SDIRS='${SDIRS}' lint ); \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
tags:
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cd $$i; echo "making tags $$i..."; \
 | 
			
		||||
	$(MAKE) SDIRS='${SDIRS}' tags ); \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
errors:
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cd $$i; echo "making errors in $$i..."; \
 | 
			
		||||
	$(MAKE) SDIRS='${SDIRS}' errors ); \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
tar:
 | 
			
		||||
	@gtar --no-recursion -cvf - \
 | 
			
		||||
		`find * -depth -print | grep -v CVS | grep -v .cvsignore | sort` |\
 | 
			
		||||
	tardy --user_number=0  --user_name=rse      \
 | 
			
		||||
	      --group_number=0 --group_name=openssl \
 | 
			
		||||
	      --prefix=openssl-$(VERSION) - |\
 | 
			
		||||
	gzip --best >../$(TARFILE).gz; \
 | 
			
		||||
	ls -l ../$(TARFILE).gz
 | 
			
		||||
 | 
			
		||||
dist:   
 | 
			
		||||
	perl Configure dist
 | 
			
		||||
	perl util/up_ver.pl ${VERSION}
 | 
			
		||||
	@$(MAKE) dist_pem_h
 | 
			
		||||
	@$(MAKE) SDIRS='${SDIRS}' clean
 | 
			
		||||
	@$(MAKE) SDIRS='${SDIRS}' dclean
 | 
			
		||||
	@(cd apps; sh ./rmlinks)
 | 
			
		||||
	@$(MAKE) makefile.one
 | 
			
		||||
	@$(MAKE) tar
 | 
			
		||||
 | 
			
		||||
dist_pem_h:
 | 
			
		||||
	(cd crypto/pem; $(MAKE) SDIRS='${SDIRS}' CFLAG='${CFLAG}' pem.h; $(MAKE) clean)
 | 
			
		||||
 | 
			
		||||
install: all
 | 
			
		||||
	@-mkdir -p $(INSTALLTOP)/bin 2>/dev/null
 | 
			
		||||
	@-mkdir -p $(INSTALLTOP)/lib 2>/dev/null
 | 
			
		||||
	@-mkdir -p $(INSTALLTOP)/include 2>/dev/null
 | 
			
		||||
	@-mkdir -p $(INSTALLTOP)/certs 2>/dev/null
 | 
			
		||||
	@-mkdir -p $(INSTALLTOP)/private 2>/dev/null
 | 
			
		||||
	@for i in $(DIRS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cd $$i; echo "installing $$i..."; \
 | 
			
		||||
	$(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' EX_LIBS='${EX_LIBS}' SDIRS='${SDIRS}' install ); \
 | 
			
		||||
	done
 | 
			
		||||
	@for i in $(LIBS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
	(       echo installing $$i; \
 | 
			
		||||
		cp $$i $(INSTALLTOP)/lib; \
 | 
			
		||||
		sh util/ranlib.sh $(INSTALLTOP)/lib/$$i; \
 | 
			
		||||
		chmod 644 $(INSTALLTOP)/lib/$$i ); \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
 | 
			
		||||
							
								
								
									
										255
									
								
								NEWS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										255
									
								
								NEWS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,255 @@
 | 
			
		||||
 | 
			
		||||
  NEWS
 | 
			
		||||
  ====
 | 
			
		||||
 | 
			
		||||
  This file gives a brief overview of the major changes between each OpenSSL
 | 
			
		||||
  release. For more details please read the CHANGES file.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7:
 | 
			
		||||
 | 
			
		||||
      o New library section OCSP.
 | 
			
		||||
      o Complete rewrite of ASN1 code.
 | 
			
		||||
      o CRL checking in verify code and openssl utility.
 | 
			
		||||
      o Extension copying in 'ca' utility.
 | 
			
		||||
      o Flexible display options in 'ca' utility.
 | 
			
		||||
      o Provisional support for international characters with UTF8.
 | 
			
		||||
      o Support for external crypto devices ('engine') is no longer
 | 
			
		||||
        a separate distribution.
 | 
			
		||||
      o New elliptic curve library section.
 | 
			
		||||
      o New AES (Rijndael) library section.
 | 
			
		||||
      o Support for new platforms: Windows CE, Tandem OSS, A/UX, AIX 64-bit,
 | 
			
		||||
        Linux x86_64
 | 
			
		||||
      o Extended support for some platforms: VxWorks
 | 
			
		||||
      o Enhanced support for shared libraries.
 | 
			
		||||
      o Support for pkg-config.
 | 
			
		||||
      o Lots of new manuals.
 | 
			
		||||
      o Change DES API to clean up the namespace (some applications link also
 | 
			
		||||
        against libdes providing similar functions having the same name).
 | 
			
		||||
        Provide macros for backward compatibility (will be removed in the
 | 
			
		||||
        future).
 | 
			
		||||
      o Unify handling of cryptographic algorithms (software and engine)
 | 
			
		||||
        to be available via EVP routines for asymmetric and symmetric ciphers.
 | 
			
		||||
      o NCONF: new configuration handling routines.
 | 
			
		||||
      o Change API to use more 'const' modifiers to improve error checking
 | 
			
		||||
        and help optimizers.
 | 
			
		||||
      o Finally remove references to RSAref.
 | 
			
		||||
      o Reworked parts of the BIGNUM code.
 | 
			
		||||
      o Support for new engines: Broadcom ubsec, Accelerated Encryption
 | 
			
		||||
        Processing, IBM 4758.
 | 
			
		||||
      o A few new engines added in the demos area.
 | 
			
		||||
      o Extended and corrected OID (object identifier) table.
 | 
			
		||||
      o PRNG: query at more locations for a random device, automatic query for
 | 
			
		||||
        EGD style random sources at several locations.
 | 
			
		||||
      o SSL/TLS: allow optional cipher choice according to server's preference.
 | 
			
		||||
      o SSL/TLS: allow server to explicitly set new session ids.
 | 
			
		||||
      o SSL/TLS: support Kerberos cipher suites (RFC2712).
 | 
			
		||||
	Only supports MIT Kerberos for now.
 | 
			
		||||
      o SSL/TLS: allow more precise control of renegotiations and sessions.
 | 
			
		||||
      o SSL/TLS: add callback to retrieve SSL/TLS messages.
 | 
			
		||||
      o SSL/TLS: support AES cipher suites (RFC3268).
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h:
 | 
			
		||||
 | 
			
		||||
      o New configuration targets for Tandem OSS and A/UX.
 | 
			
		||||
      o New OIDs for Microsoft attributes.
 | 
			
		||||
      o Better handling of SSL session caching.
 | 
			
		||||
      o Better comparison of distinguished names.
 | 
			
		||||
      o Better handling of shared libraries in a mixed GNU/non-GNU environment.
 | 
			
		||||
      o Support assembler code with Borland C.
 | 
			
		||||
      o Fixes for length problems.
 | 
			
		||||
      o Fixes for uninitialised variables.
 | 
			
		||||
      o Fixes for memory leaks, some unusual crashes and some race conditions.
 | 
			
		||||
      o Fixes for smaller building problems.
 | 
			
		||||
      o Updates of manuals, FAQ and other instructive documents.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g:
 | 
			
		||||
 | 
			
		||||
      o Important building fixes on Unix.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f:
 | 
			
		||||
 | 
			
		||||
      o Various important bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e:
 | 
			
		||||
 | 
			
		||||
      o Important security related bugfixes.
 | 
			
		||||
      o Various SSL/TLS library bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d:
 | 
			
		||||
 | 
			
		||||
      o Various SSL/TLS library bugfixes.
 | 
			
		||||
      o Fix DH parameter generation for 'non-standard' generators.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c:
 | 
			
		||||
 | 
			
		||||
      o Various SSL/TLS library bugfixes.
 | 
			
		||||
      o BIGNUM library fixes.
 | 
			
		||||
      o RSA OAEP and random number generation fixes.
 | 
			
		||||
      o Object identifiers corrected and added.
 | 
			
		||||
      o Add assembler BN routines for IA64.
 | 
			
		||||
      o Add support for OS/390 Unix, UnixWare with gcc, OpenUNIX 8,
 | 
			
		||||
        MIPS Linux; shared library support for Irix, HP-UX.
 | 
			
		||||
      o Add crypto accelerator support for AEP, Baltimore SureWare,
 | 
			
		||||
        Broadcom and Cryptographic Appliance's keyserver
 | 
			
		||||
        [in 0.9.6c-engine release].
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b:
 | 
			
		||||
 | 
			
		||||
      o Security fix: PRNG improvements.
 | 
			
		||||
      o Security fix: RSA OAEP check.
 | 
			
		||||
      o Security fix: Reinsert and fix countermeasure to Bleichbacher's
 | 
			
		||||
        attack.
 | 
			
		||||
      o MIPS bug fix in BIGNUM.
 | 
			
		||||
      o Bug fix in "openssl enc".
 | 
			
		||||
      o Bug fix in X.509 printing routine.
 | 
			
		||||
      o Bug fix in DSA verification routine and DSA S/MIME verification.
 | 
			
		||||
      o Bug fix to make PRNG thread-safe.
 | 
			
		||||
      o Bug fix in RAND_file_name().
 | 
			
		||||
      o Bug fix in compatibility mode trust settings.
 | 
			
		||||
      o Bug fix in blowfish EVP.
 | 
			
		||||
      o Increase default size for BIO buffering filter.
 | 
			
		||||
      o Compatibility fixes in some scripts.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.6a:
 | 
			
		||||
 | 
			
		||||
      o Security fix: change behavior of OpenSSL to avoid using
 | 
			
		||||
        environment variables when running as root.
 | 
			
		||||
      o Security fix: check the result of RSA-CRT to reduce the
 | 
			
		||||
        possibility of deducing the private key from an incorrectly
 | 
			
		||||
        calculated signature.
 | 
			
		||||
      o Security fix: prevent Bleichenbacher's DSA attack.
 | 
			
		||||
      o Security fix: Zero the premaster secret after deriving the
 | 
			
		||||
        master secret in DH ciphersuites.
 | 
			
		||||
      o Reimplement SSL_peek(), which had various problems.
 | 
			
		||||
      o Compatibility fix: the function des_encrypt() renamed to
 | 
			
		||||
        des_encrypt1() to avoid clashes with some Unixen libc.
 | 
			
		||||
      o Bug fixes for Win32, HP/UX and Irix.
 | 
			
		||||
      o Bug fixes in BIGNUM, SSL, PKCS#7, PKCS#12, X.509, CONF and
 | 
			
		||||
        memory checking routines.
 | 
			
		||||
      o Bug fixes for RSA operations in threaded environments.
 | 
			
		||||
      o Bug fixes in misc. openssl applications.
 | 
			
		||||
      o Remove a few potential memory leaks.
 | 
			
		||||
      o Add tighter checks of BIGNUM routines.
 | 
			
		||||
      o Shared library support has been reworked for generality.
 | 
			
		||||
      o More documentation.
 | 
			
		||||
      o New function BN_rand_range().
 | 
			
		||||
      o Add "-rand" option to openssl s_client and s_server.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6:
 | 
			
		||||
 | 
			
		||||
      o Some documentation for BIO and SSL libraries.
 | 
			
		||||
      o Enhanced chain verification using key identifiers.
 | 
			
		||||
      o New sign and verify options to 'dgst' application.
 | 
			
		||||
      o Support for DER and PEM encoded messages in 'smime' application.
 | 
			
		||||
      o New 'rsautl' application, low level RSA utility.
 | 
			
		||||
      o MD4 now included.
 | 
			
		||||
      o Bugfix for SSL rollback padding check.
 | 
			
		||||
      o Support for external crypto devices [1].
 | 
			
		||||
      o Enhanced EVP interface.
 | 
			
		||||
 | 
			
		||||
    [1] The support for external crypto devices is currently a separate
 | 
			
		||||
        distribution.  See the file README.ENGINE.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a:
 | 
			
		||||
 | 
			
		||||
      o Bug fixes for Win32, SuSE Linux, NeXTSTEP and FreeBSD 2.2.8 
 | 
			
		||||
      o Shared library support for HPUX and Solaris-gcc
 | 
			
		||||
      o Support of Linux/IA64
 | 
			
		||||
      o Assembler support for Mingw32
 | 
			
		||||
      o New 'rand' application
 | 
			
		||||
      o New way to check for existence of algorithms from scripts
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5:
 | 
			
		||||
 | 
			
		||||
      o S/MIME support in new 'smime' command
 | 
			
		||||
      o Documentation for the OpenSSL command line application
 | 
			
		||||
      o Automation of 'req' application
 | 
			
		||||
      o Fixes to make s_client, s_server work under Windows
 | 
			
		||||
      o Support for multiple fieldnames in SPKACs
 | 
			
		||||
      o New SPKAC command line utilty and associated library functions
 | 
			
		||||
      o Options to allow passwords to be obtained from various sources
 | 
			
		||||
      o New public key PEM format and options to handle it
 | 
			
		||||
      o Many other fixes and enhancements to command line utilities
 | 
			
		||||
      o Usable certificate chain verification
 | 
			
		||||
      o Certificate purpose checking
 | 
			
		||||
      o Certificate trust settings
 | 
			
		||||
      o Support of authority information access extension
 | 
			
		||||
      o Extensions in certificate requests
 | 
			
		||||
      o Simplified X509 name and attribute routines
 | 
			
		||||
      o Initial (incomplete) support for international character sets
 | 
			
		||||
      o New DH_METHOD, DSA_METHOD and enhanced RSA_METHOD
 | 
			
		||||
      o Read only memory BIOs and simplified creation function
 | 
			
		||||
      o TLS/SSL protocol bugfixes: Accept TLS 'client hello' in SSL 3.0
 | 
			
		||||
        record; allow fragmentation and interleaving of handshake and other
 | 
			
		||||
        data
 | 
			
		||||
      o TLS/SSL code now "tolerates" MS SGC
 | 
			
		||||
      o Work around for Netscape client certificate hang bug
 | 
			
		||||
      o RSA_NULL option that removes RSA patent code but keeps other
 | 
			
		||||
        RSA functionality
 | 
			
		||||
      o Memory leak detection now allows applications to add extra information
 | 
			
		||||
        via a per-thread stack
 | 
			
		||||
      o PRNG robustness improved
 | 
			
		||||
      o EGD support
 | 
			
		||||
      o BIGNUM library bug fixes
 | 
			
		||||
      o Faster DSA parameter generation
 | 
			
		||||
      o Enhanced support for Alpha Linux
 | 
			
		||||
      o Experimental MacOS support
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4:
 | 
			
		||||
 | 
			
		||||
      o Transparent support for PKCS#8 format private keys: these are used
 | 
			
		||||
        by several software packages and are more secure than the standard
 | 
			
		||||
        form
 | 
			
		||||
      o PKCS#5 v2.0 implementation
 | 
			
		||||
      o Password callbacks have a new void * argument for application data
 | 
			
		||||
      o Avoid various memory leaks
 | 
			
		||||
      o New pipe-like BIO that allows using the SSL library when actual I/O
 | 
			
		||||
        must be handled by the application (BIO pair)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.2b and OpenSSL 0.9.3:
 | 
			
		||||
      o Lots of enhancements and cleanups to the Configuration mechanism
 | 
			
		||||
      o RSA OEAP related fixes
 | 
			
		||||
      o Added `openssl ca -revoke' option for revoking a certificate
 | 
			
		||||
      o Source cleanups: const correctness, type-safe stacks and ASN.1 SETs
 | 
			
		||||
      o Source tree cleanups: removed lots of obsolete files
 | 
			
		||||
      o Thawte SXNet, certificate policies and CRL distribution points
 | 
			
		||||
        extension support
 | 
			
		||||
      o Preliminary (experimental) S/MIME support
 | 
			
		||||
      o Support for ASN.1 UTF8String and VisibleString
 | 
			
		||||
      o Full integration of PKCS#12 code
 | 
			
		||||
      o Sparc assembler bignum implementation, optimized hash functions
 | 
			
		||||
      o Option to disable selected ciphers
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.1c and OpenSSL 0.9.2b:
 | 
			
		||||
      o Fixed a security hole related to session resumption
 | 
			
		||||
      o Fixed RSA encryption routines for the p < q case
 | 
			
		||||
      o "ALL" in cipher lists now means "everything except NULL ciphers"
 | 
			
		||||
      o Support for Triple-DES CBCM cipher
 | 
			
		||||
      o Support of Optimal Asymmetric Encryption Padding (OAEP) for RSA
 | 
			
		||||
      o First support for new TLSv1 ciphers
 | 
			
		||||
      o Added a few new BIOs (syslog BIO, reliable BIO)
 | 
			
		||||
      o Extended support for DSA certificate/keys.
 | 
			
		||||
      o Extended support for Certificate Signing Requests (CSR)
 | 
			
		||||
      o Initial support for X.509v3 extensions
 | 
			
		||||
      o Extended support for compression inside the SSL record layer
 | 
			
		||||
      o Overhauled Win32 builds
 | 
			
		||||
      o Cleanups and fixes to the Big Number (BN) library
 | 
			
		||||
      o Support for ASN.1 GeneralizedTime
 | 
			
		||||
      o Splitted ASN.1 SETs from SEQUENCEs
 | 
			
		||||
      o ASN1 and PEM support for Netscape Certificate Sequences
 | 
			
		||||
      o Overhauled Perl interface
 | 
			
		||||
      o Lots of source tree cleanups.
 | 
			
		||||
      o Lots of memory leak fixes.
 | 
			
		||||
      o Lots of bug fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c:
 | 
			
		||||
      o Integration of the popular NO_RSA/NO_DSA patches
 | 
			
		||||
      o Initial support for compression inside the SSL record layer
 | 
			
		||||
      o Added BIO proxy and filtering functionality
 | 
			
		||||
      o Extended Big Number (BN) library
 | 
			
		||||
      o Added RIPE MD160 message digest
 | 
			
		||||
      o Addeed support for RC2/64bit cipher
 | 
			
		||||
      o Extended ASN.1 parser routines
 | 
			
		||||
      o Adjustations of the source tree for CVS
 | 
			
		||||
      o Support for various new platforms
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										64
									
								
								PROBLEMS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								PROBLEMS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
* System libcrypto.dylib and libssl.dylib are used by system ld on MacOS X.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    NOTE: The problem described here only applies when OpenSSL isn't built
 | 
			
		||||
    with shared library support (i.e. without the "shared" configuration
 | 
			
		||||
    option).  If you build with shared library support, you will have no
 | 
			
		||||
    problems as long as you set up DYLD_LIBRARY_PATH properly at all times.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
This is really a misfeature in ld, which seems to look for .dylib libraries
 | 
			
		||||
along the whole library path before it bothers looking for .a libraries.  This
 | 
			
		||||
means that -L switches won't matter unless OpenSSL is built with shared
 | 
			
		||||
library support.
 | 
			
		||||
 | 
			
		||||
The workaround may be to change the following lines in apps/Makefile.ssl and
 | 
			
		||||
test/Makefile.ssl:
 | 
			
		||||
 | 
			
		||||
  LIBCRYPTO=-L.. -lcrypto
 | 
			
		||||
  LIBSSL=-L.. -lssl
 | 
			
		||||
 | 
			
		||||
to:
 | 
			
		||||
 | 
			
		||||
  LIBCRYPTO=../libcrypto.a
 | 
			
		||||
  LIBSSL=../libssl.a
 | 
			
		||||
 | 
			
		||||
It's possible that something similar is needed for shared library support
 | 
			
		||||
as well.  That hasn't been well tested yet.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Another solution that many seem to recommend is to move the libraries
 | 
			
		||||
/usr/lib/libcrypto.0.9.dylib, /usr/lib/libssl.0.9.dylib to a different
 | 
			
		||||
directory, build and install OpenSSL and anything that depends on your
 | 
			
		||||
build, then move libcrypto.0.9.dylib and libssl.0.9.dylib back to their
 | 
			
		||||
original places.  Note that the version numbers on those two libraries
 | 
			
		||||
may differ on your machine.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
As long as Apple doesn't fix the problem with ld, this problem building
 | 
			
		||||
OpenSSL will remain as is.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Parallell make leads to errors
 | 
			
		||||
 | 
			
		||||
While running tests, running a parallell make is a bad idea.  Many test
 | 
			
		||||
scripts use the same name for output and input files, which means different
 | 
			
		||||
will interfere with each other and lead to test failure.
 | 
			
		||||
 | 
			
		||||
The solution is simple for now: don't run parallell make when testing.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Bugs in gcc 3.0 triggered
 | 
			
		||||
 | 
			
		||||
According to a problem report, there are bugs in gcc 3.0 that are
 | 
			
		||||
triggered by some of the code in OpenSSL, more specifically in
 | 
			
		||||
PEM_get_EVP_CIPHER_INFO().  The triggering code is the following:
 | 
			
		||||
 | 
			
		||||
	header+=11;
 | 
			
		||||
	if (*header != '4') return(0); header++;
 | 
			
		||||
	if (*header != ',') return(0); header++;
 | 
			
		||||
 | 
			
		||||
What happens is that gcc might optimize a little too agressively, and
 | 
			
		||||
you end up with an extra incrementation when *header != '4'.
 | 
			
		||||
 | 
			
		||||
We recommend that you upgrade gcc to as high a 3.x version as you can.
 | 
			
		||||
							
								
								
									
										180
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										180
									
								
								README
									
									
									
									
									
								
							@@ -1,31 +1,39 @@
 | 
			
		||||
 | 
			
		||||
 OpenSSL 0.9.1c 23-Dec-1998
 | 
			
		||||
 OpenSSL 0.9.8-dev XX xxx XXXX
 | 
			
		||||
 | 
			
		||||
 Copyright (c) 1998 The OpenSSL Project
 | 
			
		||||
 Copyright (c) 1995-1998 Eric Young
 | 
			
		||||
 Copyright (c) 1998-2002 The OpenSSL Project
 | 
			
		||||
 Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
 | 
			
		||||
 All rights reserved.
 | 
			
		||||
 | 
			
		||||
 DESCRIPTION
 | 
			
		||||
 -----------
 | 
			
		||||
 | 
			
		||||
 The OpenSSL Project is a collaborative effort to develop a robust,
 | 
			
		||||
 commercial-grade, fully featured, and Open Source toolkit implementing the
 | 
			
		||||
 Transport Layer Security (TLS v1) and Secure Sockets Layer (SSL v2/v3)
 | 
			
		||||
 protocols with full-strength cryptography world-wide. The project is managed
 | 
			
		||||
 by a worldwide community of volunteers that use the Internet to communicate,
 | 
			
		||||
 plan, and develop the OpenSSL tookit and its related documentation. 
 | 
			
		||||
 Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1)
 | 
			
		||||
 protocols as well as a full-strength general purpose cryptography library.
 | 
			
		||||
 The project is managed by a worldwide community of volunteers that use the
 | 
			
		||||
 Internet to communicate, plan, and develop the OpenSSL toolkit and its
 | 
			
		||||
 related documentation. 
 | 
			
		||||
 | 
			
		||||
 OpenSSL is based on the excellent SSLeay library developed from Eric A. Young
 | 
			
		||||
 and Tim J. Hudson.  The OpenSSL toolkit is licensed under a BSD-style licence,
 | 
			
		||||
 which basically means that you are free to get and use it for commercial and
 | 
			
		||||
 non-commercial purposes. 
 | 
			
		||||
 and Tim J. Hudson.  The OpenSSL toolkit is licensed under a dual-license (the
 | 
			
		||||
 OpenSSL license plus the SSLeay license) situation, which basically means
 | 
			
		||||
 that you are free to get and use it for commercial and non-commercial
 | 
			
		||||
 purposes as long as you fulfill the conditions of both licenses. 
 | 
			
		||||
 | 
			
		||||
 The package includes:
 | 
			
		||||
 OVERVIEW
 | 
			
		||||
 --------
 | 
			
		||||
 | 
			
		||||
 The OpenSSL toolkit includes:
 | 
			
		||||
 | 
			
		||||
 libssl.a:
 | 
			
		||||
     Implementation of SSLv2, SSLv3, TLSv1 and the required code to support
 | 
			
		||||
     both SSLv2, SSLv3 and TLSv1 in the one server.
 | 
			
		||||
     both SSLv2, SSLv3 and TLSv1 in the one server and client.
 | 
			
		||||
 | 
			
		||||
 libcrypto.a:
 | 
			
		||||
     General encryption and X.509 stuff needed by TLS/SSL but not actually
 | 
			
		||||
     logically part of it. It includes routines for the following:
 | 
			
		||||
     General encryption and X.509 v1/v3 stuff needed by SSL/TLS but not
 | 
			
		||||
     actually logically part of it. It includes routines for the following:
 | 
			
		||||
 | 
			
		||||
     Ciphers
 | 
			
		||||
        libdes - EAY's libdes DES encryption package which has been floating
 | 
			
		||||
@@ -42,7 +50,7 @@
 | 
			
		||||
     Digests
 | 
			
		||||
        MD5 and MD2 message digest algorithms, fast implementations,
 | 
			
		||||
        SHA (SHA-0) and SHA-1 message digest algorithms,
 | 
			
		||||
        MDC2 message digest. A DES based hash that is polular on smart cards.
 | 
			
		||||
        MDC2 message digest. A DES based hash that is popular on smart cards.
 | 
			
		||||
 | 
			
		||||
     Public Key
 | 
			
		||||
        RSA encryption/decryption/generation.  
 | 
			
		||||
@@ -54,7 +62,7 @@
 | 
			
		||||
 | 
			
		||||
     X.509v3 certificates
 | 
			
		||||
        X509 encoding/decoding into/from binary ASN1 and a PEM
 | 
			
		||||
             based ascii-binary encoding which supports encryption with a
 | 
			
		||||
             based ASCII-binary encoding which supports encryption with a
 | 
			
		||||
             private key.  Program to generate RSA and DSA certificate
 | 
			
		||||
             requests and to generate RSA and DSA certificates.
 | 
			
		||||
 | 
			
		||||
@@ -72,48 +80,108 @@
 | 
			
		||||
        A simple stack.
 | 
			
		||||
        A Configuration loader that uses a format similar to MS .ini files.
 | 
			
		||||
 | 
			
		||||
 Programs in this package include:
 | 
			
		||||
 openssl: 
 | 
			
		||||
     A command line tool that can be used for:
 | 
			
		||||
        Creation of RSA, DH and DSA key parameters
 | 
			
		||||
        Creation of X.509 certificates, CSRs and CRLs 
 | 
			
		||||
        Calculation of Message Digests
 | 
			
		||||
        Encryption and Decryption with Ciphers
 | 
			
		||||
        SSL/TLS Client and Server Tests
 | 
			
		||||
        Handling of S/MIME signed or encrypted mail
 | 
			
		||||
 | 
			
		||||
     enc     - a general encryption program that can encrypt/decrypt using
 | 
			
		||||
               one of 17 different cipher/mode combinations.  The
 | 
			
		||||
               input/output can also be converted to/from base64
 | 
			
		||||
               ascii encoding.
 | 
			
		||||
     dgst    - a generate message digesting program that will generate
 | 
			
		||||
               message digests for any of md2, md5, sha (sha-0 or sha-1)
 | 
			
		||||
               or mdc2.
 | 
			
		||||
     asn1parse - parse and display the structure of an asn1 encoded
 | 
			
		||||
               binary file.
 | 
			
		||||
     rsa     - Manipulate RSA private keys.
 | 
			
		||||
     dsa     - Manipulate DSA private keys.
 | 
			
		||||
     dh      - Manipulate Diffie-Hellman parameter files.
 | 
			
		||||
     dsaparam- Manipulate and generate DSA parameter files.
 | 
			
		||||
     crl     - Manipulate certificate revocation lists.
 | 
			
		||||
     crt2pkcs7- Generate a pkcs7 object containing a crl and a certificate.
 | 
			
		||||
     x509    - Manipulate x509 certificates, self-sign certificates.
 | 
			
		||||
     req     - Manipulate PKCS#10 certificate requests and also
 | 
			
		||||
               generate certificate requests.
 | 
			
		||||
     genrsa  - Generates an arbitrary sized RSA private key.
 | 
			
		||||
     gendh   - Generates a set of Diffie-Hellman parameters, the prime
 | 
			
		||||
               will be a strong prime.
 | 
			
		||||
     ca      - Create certificates from PKCS#10 certificate requests.
 | 
			
		||||
               This program also maintains a database of certificates
 | 
			
		||||
               issued.
 | 
			
		||||
     verify  - Check x509 certificate signatures.
 | 
			
		||||
     speed   - Benchmark SSLeay's ciphers.
 | 
			
		||||
     s_server- A test SSL server.
 | 
			
		||||
     s_client- A test SSL client.
 | 
			
		||||
     s_time  - Benchmark SSL performance of SSL server programs.
 | 
			
		||||
     errstr  - Convert from SSLeay hex error codes to a readable form.
 | 
			
		||||
        
 | 
			
		||||
To install this package, read the INSTALL file.
 | 
			
		||||
For the Microsoft world, read INSTALL.W32 file.
 | 
			
		||||
 PATENTS
 | 
			
		||||
 -------
 | 
			
		||||
 | 
			
		||||
For people in the USA, it is possible to compile SSLeay to use RSA Inc.'s
 | 
			
		||||
public key library, RSAref.  From my understanding, it is claimed by RSA Inc.
 | 
			
		||||
to be illegal to use my public key routines inside the USA.  Read
 | 
			
		||||
doc/rsaref.doc on how to build with RSAref.
 | 
			
		||||
 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.
 | 
			
		||||
 | 
			
		||||
Read the documentation in the doc directory.  It is quite rough, but it lists
 | 
			
		||||
the functions, you will probably have to look at the code to work out how to
 | 
			
		||||
used them.  I will be working on documentation.  Look at the example programs.
 | 
			
		||||
 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/.
 | 
			
		||||
 | 
			
		||||
 INSTALLATION
 | 
			
		||||
 ------------
 | 
			
		||||
 | 
			
		||||
 To install this package under a Unix derivative, read the INSTALL file.  For
 | 
			
		||||
 a Win32 platform, read the INSTALL.W32 file.  For OpenVMS systems, read
 | 
			
		||||
 INSTALL.VMS.
 | 
			
		||||
 | 
			
		||||
 Read the documentation in the doc/ directory.  It is quite rough, but it
 | 
			
		||||
 lists the functions; you will probably have to look at the code to work out
 | 
			
		||||
 how to use them. Look at the example programs.
 | 
			
		||||
 | 
			
		||||
 PROBLEMS
 | 
			
		||||
 --------
 | 
			
		||||
 | 
			
		||||
 For some platforms, there are some known problems that may affect the user
 | 
			
		||||
 or application author.  We try to collect those in doc/PROBLEMS, with current
 | 
			
		||||
 thoughts on how they should be solved in a future of OpenSSL.
 | 
			
		||||
 | 
			
		||||
 SUPPORT 
 | 
			
		||||
 -------
 | 
			
		||||
 | 
			
		||||
 If you have any problems with OpenSSL then please take the following steps
 | 
			
		||||
 first:
 | 
			
		||||
 | 
			
		||||
    - Download the current snapshot from ftp://ftp.openssl.org/snapshot/
 | 
			
		||||
      to see if the problem has already been addressed
 | 
			
		||||
    - Remove ASM versions of libraries
 | 
			
		||||
    - Remove compiler optimisation flags 
 | 
			
		||||
 | 
			
		||||
 If you wish to report a bug then please include the following information in
 | 
			
		||||
 any bug report:
 | 
			
		||||
 | 
			
		||||
    - On Unix systems:
 | 
			
		||||
        Self-test report generated by 'make report'
 | 
			
		||||
    - On other systems:
 | 
			
		||||
        OpenSSL version: output of 'openssl version -a'
 | 
			
		||||
        OS Name, Version, Hardware platform
 | 
			
		||||
        Compiler Details (name, version)
 | 
			
		||||
    - Application Details (name, version)
 | 
			
		||||
    - Problem Description (steps that will reproduce the problem, if known)
 | 
			
		||||
    - Stack Traceback (if the application dumps core)
 | 
			
		||||
 | 
			
		||||
 Report the bug to the OpenSSL project via the Request Tracker
 | 
			
		||||
 (http://www.openssl.org/rt2.html) by mail to:
 | 
			
		||||
 | 
			
		||||
    openssl-bugs@openssl.org
 | 
			
		||||
 | 
			
		||||
 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
 | 
			
		||||
 ----------------------------
 | 
			
		||||
 | 
			
		||||
 Development is coordinated on the openssl-dev mailing list (see
 | 
			
		||||
 http://www.openssl.org for information on subscribing). If you
 | 
			
		||||
 would like to submit a patch, send it to openssl-dev@openssl.org with
 | 
			
		||||
 the string "[PATCH]" in the subject. Please be sure to include a
 | 
			
		||||
 textual explanation of what your patch does.
 | 
			
		||||
 | 
			
		||||
 Note: For legal reasons, contributions from the US can be accepted only
 | 
			
		||||
 if a TSA notification and a copy of the patch is sent to crypt@bis.doc.gov;
 | 
			
		||||
 see http://www.bis.doc.gov/Encryption/PubAvailEncSourceCodeNofify.html [sic]
 | 
			
		||||
 and http://w3.access.gpo.gov/bis/ear/pdf/740.pdf (EAR Section 740.13(e)).
 | 
			
		||||
 | 
			
		||||
 The preferred format for changes is "diff -u" output. You might
 | 
			
		||||
 generate it like this:
 | 
			
		||||
 | 
			
		||||
 # cd openssl-work
 | 
			
		||||
 # [your changes]
 | 
			
		||||
 # ./Configure dist; make clean
 | 
			
		||||
 # cd ..
 | 
			
		||||
 # diff -ur openssl-orig openssl-work > mydiffs.patch
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										187
									
								
								README.ASN1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										187
									
								
								README.ASN1
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,187 @@
 | 
			
		||||
 | 
			
		||||
OpenSSL ASN1 Revision
 | 
			
		||||
=====================
 | 
			
		||||
 | 
			
		||||
This document describes some of the issues relating to the new ASN1 code.
 | 
			
		||||
 | 
			
		||||
Previous OpenSSL ASN1 problems
 | 
			
		||||
=============================
 | 
			
		||||
 | 
			
		||||
OK why did the OpenSSL ASN1 code need revising in the first place? Well
 | 
			
		||||
there are lots of reasons some of which are included below...
 | 
			
		||||
 | 
			
		||||
1. The code is difficult to read and write. For every single ASN1 structure
 | 
			
		||||
(e.g. SEQUENCE) four functions need to be written for new, free, encode and
 | 
			
		||||
decode operations. This is a very painful and error prone operation. Very few
 | 
			
		||||
people have ever written any OpenSSL ASN1 and those that have usually wish
 | 
			
		||||
they hadn't.
 | 
			
		||||
 | 
			
		||||
2. Partly because of 1. the code is bloated and takes up a disproportionate
 | 
			
		||||
amount of space. The SEQUENCE encoder is particularly bad: it essentially
 | 
			
		||||
contains two copies of the same operation, one to compute the SEQUENCE length
 | 
			
		||||
and the other to encode it.
 | 
			
		||||
 | 
			
		||||
3. The code is memory based: that is it expects to be able to read the whole
 | 
			
		||||
structure from memory. This is fine for small structures but if you have a
 | 
			
		||||
(say) 1Gb PKCS#7 signedData structure it isn't such a good idea...
 | 
			
		||||
 | 
			
		||||
4. The code for the ASN1 IMPLICIT tag is evil. It is handled by temporarily
 | 
			
		||||
changing the tag to the expected one, attempting to read it, then changing it
 | 
			
		||||
back again. This means that decode buffers have to be writable even though they
 | 
			
		||||
are ultimately unchanged. This gets in the way of constification.
 | 
			
		||||
 | 
			
		||||
5. The handling of EXPLICIT isn't much better. It adds a chunk of code into 
 | 
			
		||||
the decoder and encoder for every EXPLICIT tag.
 | 
			
		||||
 | 
			
		||||
6. APPLICATION and PRIVATE tags aren't even supported at all.
 | 
			
		||||
 | 
			
		||||
7. Even IMPLICIT isn't complete: there is no support for implicitly tagged
 | 
			
		||||
types that are not OPTIONAL.
 | 
			
		||||
 | 
			
		||||
8. Much of the code assumes that a tag will fit in a single octet. This is
 | 
			
		||||
only true if the tag is 30 or less (mercifully tags over 30 are rare).
 | 
			
		||||
 | 
			
		||||
9. The ASN1 CHOICE type has to be largely handled manually, there aren't any
 | 
			
		||||
macros that properly support it.
 | 
			
		||||
 | 
			
		||||
10. Encoders have no concept of OPTIONAL and have no error checking. If the
 | 
			
		||||
passed structure contains a NULL in a mandatory field it will not be encoded,
 | 
			
		||||
resulting in an invalid structure.
 | 
			
		||||
 | 
			
		||||
11. It is tricky to add ASN1 encoders and decoders to external applications.
 | 
			
		||||
 | 
			
		||||
Template model
 | 
			
		||||
==============
 | 
			
		||||
 | 
			
		||||
One of the major problems with revision is the sheer volume of the ASN1 code.
 | 
			
		||||
Attempts to change (for example) the IMPLICIT behaviour would result in a
 | 
			
		||||
modification of *every* single decode function. 
 | 
			
		||||
 | 
			
		||||
I decided to adopt a template based approach. I'm using the term 'template'
 | 
			
		||||
in a manner similar to SNACC templates: it has nothing to do with C++
 | 
			
		||||
templates.
 | 
			
		||||
 | 
			
		||||
A template is a description of an ASN1 module as several constant C structures.
 | 
			
		||||
It describes in a machine readable way exactly how the ASN1 structure should
 | 
			
		||||
behave. If this template contains enough detail then it is possible to write
 | 
			
		||||
versions of new, free, encode, decode (and possibly others operations) that
 | 
			
		||||
operate on templates.
 | 
			
		||||
 | 
			
		||||
Instead of having to write code to handle each operation only a single
 | 
			
		||||
template needs to be written. If new operations are needed (such as a 'print'
 | 
			
		||||
operation) only a single new template based function needs to be written 
 | 
			
		||||
which will then automatically handle all existing templates.
 | 
			
		||||
 | 
			
		||||
Plans for revision
 | 
			
		||||
==================
 | 
			
		||||
 | 
			
		||||
The revision will consist of the following steps. Other than the first two
 | 
			
		||||
these can be handled in any order.
 | 
			
		||||
 
 | 
			
		||||
o Design and write template new, free, encode and decode operations, initially
 | 
			
		||||
memory based. *DONE*
 | 
			
		||||
 | 
			
		||||
o Convert existing ASN1 code to template form. *IN PROGRESS*
 | 
			
		||||
 | 
			
		||||
o Convert an existing ASN1 compiler (probably SNACC) to output templates
 | 
			
		||||
in OpenSSL form.
 | 
			
		||||
 | 
			
		||||
o Add support for BIO based ASN1 encoders and decoders to handle large
 | 
			
		||||
structures, initially blocking I/O.
 | 
			
		||||
 | 
			
		||||
o Add support for non blocking I/O: this is quite a bit harder than blocking
 | 
			
		||||
I/O.
 | 
			
		||||
 | 
			
		||||
o Add new ASN1 structures, such as OCSP, CRMF, S/MIME v3 (CMS), attribute
 | 
			
		||||
certificates etc etc.
 | 
			
		||||
 | 
			
		||||
Description of major changes
 | 
			
		||||
============================
 | 
			
		||||
 | 
			
		||||
The BOOLEAN type now takes three values. 0xff is TRUE, 0 is FALSE and -1 is
 | 
			
		||||
absent. The meaning of absent depends on the context. If for example the
 | 
			
		||||
boolean type is DEFAULT FALSE (as in the case of the critical flag for
 | 
			
		||||
certificate extensions) then -1 is FALSE, if DEFAULT TRUE then -1 is TRUE.
 | 
			
		||||
Usually the value will only ever be read via an API which will hide this from
 | 
			
		||||
an application.
 | 
			
		||||
 | 
			
		||||
There is an evil bug in the old ASN1 code that mishandles OPTIONAL with
 | 
			
		||||
SEQUENCE OF or SET OF. These are both implemented as a STACK structure. The
 | 
			
		||||
old code would omit the structure if the STACK was NULL (which is fine) or if
 | 
			
		||||
it had zero elements (which is NOT OK). This causes problems because an empty
 | 
			
		||||
SEQUENCE OF or SET OF will result in an empty STACK when it is decoded but when
 | 
			
		||||
it is encoded it will be omitted resulting in different encodings. The new code
 | 
			
		||||
only omits the encoding if the STACK is NULL, if it contains zero elements it
 | 
			
		||||
is encoded and empty. There is an additional problem though: because an empty
 | 
			
		||||
STACK was omitted, sometimes the corresponding *_new() function would
 | 
			
		||||
initialize the STACK to empty so an application could immediately use it, if
 | 
			
		||||
this is done with the new code (i.e. a NULL) it wont work. Therefore a new
 | 
			
		||||
STACK should be allocated first. One instance of this is the X509_CRL list of
 | 
			
		||||
revoked certificates: a helper function X509_CRL_add0_revoked() has been added
 | 
			
		||||
for this purpose.
 | 
			
		||||
 | 
			
		||||
The X509_ATTRIBUTE structure used to have an element called 'set' which took
 | 
			
		||||
the value 1 if the attribute value was a SET OF or 0 if it was a single. Due
 | 
			
		||||
to the behaviour of CHOICE in the new code this has been changed to a field
 | 
			
		||||
called 'single' which is 0 for a SET OF and 1 for single. The old field has
 | 
			
		||||
been deleted to deliberately break source compatibility. Since this structure
 | 
			
		||||
is normally accessed via higher level functions this shouldn't break too much.
 | 
			
		||||
 | 
			
		||||
The X509_REQ_INFO certificate request info structure no longer has a field
 | 
			
		||||
called 'req_kludge'. This used to be set to 1 if the attributes field was
 | 
			
		||||
(incorrectly) omitted. You can check to see if the field is omitted now by
 | 
			
		||||
checking if the attributes field is NULL. Similarly if you need to omit
 | 
			
		||||
the field then free attributes and set it to NULL.
 | 
			
		||||
 | 
			
		||||
The top level 'detached' field in the PKCS7 structure is no longer set when
 | 
			
		||||
a PKCS#7 structure is read in. PKCS7_is_detached() should be called instead.
 | 
			
		||||
The behaviour of PKCS7_get_detached() is unaffected.
 | 
			
		||||
 | 
			
		||||
The values of 'type' in the GENERAL_NAME structure have changed. This is
 | 
			
		||||
because the old code use the ASN1 initial octet as the selector. The new
 | 
			
		||||
code uses the index in the ASN1_CHOICE template.
 | 
			
		||||
 | 
			
		||||
The DIST_POINT_NAME structure has changed to be a true CHOICE type.
 | 
			
		||||
 | 
			
		||||
typedef struct DIST_POINT_NAME_st {
 | 
			
		||||
int type;
 | 
			
		||||
union {
 | 
			
		||||
	STACK_OF(GENERAL_NAME) *fullname;
 | 
			
		||||
	STACK_OF(X509_NAME_ENTRY) *relativename;
 | 
			
		||||
} name;
 | 
			
		||||
} DIST_POINT_NAME;
 | 
			
		||||
 | 
			
		||||
This means that name.fullname or name.relativename should be set
 | 
			
		||||
and type reflects the option. That is if name.fullname is set then
 | 
			
		||||
type is 0 and if name.relativename is set type is 1.
 | 
			
		||||
 | 
			
		||||
With the old code using the i2d functions would typically involve:
 | 
			
		||||
 | 
			
		||||
unsigned char *buf, *p;
 | 
			
		||||
int len;
 | 
			
		||||
/* Find length of encoding */
 | 
			
		||||
len = i2d_SOMETHING(x, NULL);
 | 
			
		||||
/* Allocate buffer */
 | 
			
		||||
buf = OPENSSL_malloc(len);
 | 
			
		||||
if(buf == NULL) {
 | 
			
		||||
	/* Malloc error */
 | 
			
		||||
}
 | 
			
		||||
/* Use temp variable because &p gets updated to point to end of
 | 
			
		||||
 * encoding.
 | 
			
		||||
 */
 | 
			
		||||
p = buf;
 | 
			
		||||
i2d_SOMETHING(x, &p);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Using the new i2d you can also do:
 | 
			
		||||
 | 
			
		||||
unsigned char *buf = NULL;
 | 
			
		||||
int len;
 | 
			
		||||
len = i2d_SOMETHING(x, &buf);
 | 
			
		||||
if(len < 0) {
 | 
			
		||||
	/* Malloc error */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
and it will automatically allocate and populate a buffer with the
 | 
			
		||||
encoding. After this call 'buf' will point to the start of the
 | 
			
		||||
encoding which is len bytes long.
 | 
			
		||||
							
								
								
									
										289
									
								
								README.ENGINE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										289
									
								
								README.ENGINE
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,289 @@
 | 
			
		||||
  ENGINE
 | 
			
		||||
  ======
 | 
			
		||||
 | 
			
		||||
  With OpenSSL 0.9.6, a new component was added to support alternative
 | 
			
		||||
  cryptography implementations, most commonly for interfacing with external
 | 
			
		||||
  crypto devices (eg. accelerator cards). This component is called ENGINE,
 | 
			
		||||
  and its presence in OpenSSL 0.9.6 (and subsequent bug-fix releases)
 | 
			
		||||
  caused a little confusion as 0.9.6** releases were rolled in two
 | 
			
		||||
  versions, a "standard" and an "engine" version. In development for 0.9.7,
 | 
			
		||||
  the ENGINE code has been merged into the main branch and will be present
 | 
			
		||||
  in the standard releases from 0.9.7 forwards.
 | 
			
		||||
 | 
			
		||||
  There are currently built-in ENGINE implementations for the following
 | 
			
		||||
  crypto devices:
 | 
			
		||||
 | 
			
		||||
      o CryptoSwift
 | 
			
		||||
      o Compaq Atalla
 | 
			
		||||
      o nCipher CHIL
 | 
			
		||||
      o Nuron
 | 
			
		||||
      o Broadcom uBSec
 | 
			
		||||
 | 
			
		||||
  In addition, dynamic binding to external ENGINE implementations is now
 | 
			
		||||
  provided by a special ENGINE called "dynamic". See the "DYNAMIC ENGINE"
 | 
			
		||||
  section below for details.
 | 
			
		||||
 | 
			
		||||
  At this stage, a number of things are still needed and are being worked on:
 | 
			
		||||
 | 
			
		||||
      1 Integration of EVP support.
 | 
			
		||||
      2 Configuration support.
 | 
			
		||||
      3 Documentation!
 | 
			
		||||
 | 
			
		||||
1 With respect to EVP, this relates to support for ciphers and digests in
 | 
			
		||||
  the ENGINE model so that alternative implementations of existing
 | 
			
		||||
  algorithms/modes (or previously unimplemented ones) can be provided by
 | 
			
		||||
  ENGINE implementations.
 | 
			
		||||
 | 
			
		||||
2 Configuration support currently exists in the ENGINE API itself, in the
 | 
			
		||||
  form of "control commands". These allow an application to expose to the
 | 
			
		||||
  user/admin the set of commands and parameter types a given ENGINE
 | 
			
		||||
  implementation supports, and for an application to directly feed string
 | 
			
		||||
  based input to those ENGINEs, in the form of name-value pairs. This is an
 | 
			
		||||
  extensible way for ENGINEs to define their own "configuration" mechanisms
 | 
			
		||||
  that are specific to a given ENGINE (eg. for a particular hardware
 | 
			
		||||
  device) but that should be consistent across *all* OpenSSL-based
 | 
			
		||||
  applications when they use that ENGINE. Work is in progress (or at least
 | 
			
		||||
  in planning) for supporting these control commands from the CONF (or
 | 
			
		||||
  NCONF) code so that applications using OpenSSL's existing configuration
 | 
			
		||||
  file format can have ENGINE settings specified in much the same way.
 | 
			
		||||
  Presently however, applications must use the ENGINE API itself to provide
 | 
			
		||||
  such functionality. To see first hand the types of commands available
 | 
			
		||||
  with the various compiled-in ENGINEs (see further down for dynamic
 | 
			
		||||
  ENGINEs), use the "engine" openssl utility with full verbosity, ie;
 | 
			
		||||
       openssl engine -vvvv
 | 
			
		||||
 | 
			
		||||
3 Documentation? Volunteers welcome! The source code is reasonably well
 | 
			
		||||
  self-documenting, but some summaries and usage instructions are needed -
 | 
			
		||||
  moreover, they are needed in the same POD format the existing OpenSSL
 | 
			
		||||
  documentation is provided in. Any complete or incomplete contributions
 | 
			
		||||
  would help make this happen.
 | 
			
		||||
 | 
			
		||||
  STABILITY & BUG-REPORTS
 | 
			
		||||
  =======================
 | 
			
		||||
 | 
			
		||||
  What already exists is fairly stable as far as it has been tested, but
 | 
			
		||||
  the test base has been a bit small most of the time. For the most part,
 | 
			
		||||
  the vendors of the devices these ENGINEs support have contributed to the
 | 
			
		||||
  development and/or testing of the implementations, and *usually* (with no
 | 
			
		||||
  guarantees) have experience in using the ENGINE support to drive their
 | 
			
		||||
  devices from common OpenSSL-based applications. Bugs and/or inexplicable
 | 
			
		||||
  behaviour in using a specific ENGINE implementation should be sent to the
 | 
			
		||||
  author of that implementation (if it is mentioned in the corresponding C
 | 
			
		||||
  file), and in the case of implementations for commercial hardware
 | 
			
		||||
  devices, also through whatever vendor support channels are available.  If
 | 
			
		||||
  none of this is possible, or the problem seems to be something about the
 | 
			
		||||
  ENGINE API itself (ie. not necessarily specific to a particular ENGINE
 | 
			
		||||
  implementation) then you should mail complete details to the relevant
 | 
			
		||||
  OpenSSL mailing list. For a definition of "complete details", refer to
 | 
			
		||||
  the OpenSSL "README" file. As for which list to send it to;
 | 
			
		||||
 | 
			
		||||
     openssl-users: if you are *using* the ENGINE abstraction, either in an
 | 
			
		||||
          pre-compiled application or in your own application code.
 | 
			
		||||
 | 
			
		||||
     openssl-dev: if you are discussing problems with OpenSSL source code.
 | 
			
		||||
 | 
			
		||||
  USAGE
 | 
			
		||||
  =====
 | 
			
		||||
 | 
			
		||||
  The default "openssl" ENGINE is always chosen when performing crypto
 | 
			
		||||
  operations unless you specify otherwise. You must actively tell the
 | 
			
		||||
  openssl utility commands to use anything else through a new command line
 | 
			
		||||
  switch called "-engine". Also, if you want to use the ENGINE support in
 | 
			
		||||
  your own code to do something similar, you must likewise explicitly
 | 
			
		||||
  select the ENGINE implementation you want.
 | 
			
		||||
 | 
			
		||||
  Depending on the type of hardware, system, and configuration, "settings"
 | 
			
		||||
  may need to be applied to an ENGINE for it to function as expected/hoped.
 | 
			
		||||
  The recommended way of doing this is for the application to support
 | 
			
		||||
  ENGINE "control commands" so that each ENGINE implementation can provide
 | 
			
		||||
  whatever configuration primitives it might require and the application
 | 
			
		||||
  can allow the user/admin (and thus the hardware vendor's support desk
 | 
			
		||||
  also) to provide any such input directly to the ENGINE implementation.
 | 
			
		||||
  This way, applications do not need to know anything specific to any
 | 
			
		||||
  device, they only need to provide the means to carry such user/admin
 | 
			
		||||
  input through to the ENGINE in question. Ie. this connects *you* (and
 | 
			
		||||
  your helpdesk) to the specific ENGINE implementation (and device), and
 | 
			
		||||
  allows application authors to not get buried in hassle supporting
 | 
			
		||||
  arbitrary devices they know (and care) nothing about.
 | 
			
		||||
 | 
			
		||||
  A new "openssl" utility, "openssl engine", has been added in that allows
 | 
			
		||||
  for testing and examination of ENGINE implementations. Basic usage
 | 
			
		||||
  instructions are available by specifying the "-?" command line switch.
 | 
			
		||||
 | 
			
		||||
  DYNAMIC ENGINES
 | 
			
		||||
  ===============
 | 
			
		||||
 | 
			
		||||
  The new "dynamic" ENGINE provides a low-overhead way to support ENGINE
 | 
			
		||||
  implementations that aren't pre-compiled and linked into OpenSSL-based
 | 
			
		||||
  applications. This could be because existing compiled-in implementations
 | 
			
		||||
  have known problems and you wish to use a newer version with an existing
 | 
			
		||||
  application. It could equally be because the application (or OpenSSL
 | 
			
		||||
  library) you are using simply doesn't have support for the ENGINE you
 | 
			
		||||
  wish to use, and the ENGINE provider (eg. hardware vendor) is providing
 | 
			
		||||
  you with a self-contained implementation in the form of a shared-library.
 | 
			
		||||
  The other use-case for "dynamic" is with applications that wish to
 | 
			
		||||
  maintain the smallest foot-print possible and so do not link in various
 | 
			
		||||
  ENGINE implementations from OpenSSL, but instead leaves you to provide
 | 
			
		||||
  them, if you want them, in the form of "dynamic"-loadable
 | 
			
		||||
  shared-libraries. It should be possible for hardware vendors to provide
 | 
			
		||||
  their own shared-libraries to support arbitrary hardware to work with
 | 
			
		||||
  applications based on OpenSSL 0.9.7 or later. If you're using an
 | 
			
		||||
  application based on 0.9.7 (or later) and the support you desire is only
 | 
			
		||||
  announced for versions later than the one you need, ask the vendor to
 | 
			
		||||
  backport their ENGINE to the version you need.
 | 
			
		||||
 | 
			
		||||
  How does "dynamic" work?
 | 
			
		||||
  ------------------------
 | 
			
		||||
    The dynamic ENGINE has a special flag in its implementation such that
 | 
			
		||||
    every time application code asks for the 'dynamic' ENGINE, it in fact
 | 
			
		||||
    gets its own copy of it. As such, multi-threaded code (or code that
 | 
			
		||||
    multiplexes multiple uses of 'dynamic' in a single application in any
 | 
			
		||||
    way at all) does not get confused by 'dynamic' being used to do many
 | 
			
		||||
    independent things. Other ENGINEs typically don't do this so there is
 | 
			
		||||
    only ever 1 ENGINE structure of its type (and reference counts are used
 | 
			
		||||
    to keep order). The dynamic ENGINE itself provides absolutely no
 | 
			
		||||
    cryptographic functionality, and any attempt to "initialise" the ENGINE
 | 
			
		||||
    automatically fails. All it does provide are a few "control commands"
 | 
			
		||||
    that can be used to control how it will load an external ENGINE
 | 
			
		||||
    implementation from a shared-library. To see these control commands,
 | 
			
		||||
    use the command-line;
 | 
			
		||||
 | 
			
		||||
       openssl engine -vvvv dynamic
 | 
			
		||||
 | 
			
		||||
    The "SO_PATH" control command should be used to identify the
 | 
			
		||||
    shared-library that contains the ENGINE implementation, and "NO_VCHECK"
 | 
			
		||||
    might possibly be useful if there is a minor version conflict and you
 | 
			
		||||
    (or a vendor helpdesk) is convinced you can safely ignore it.
 | 
			
		||||
    "ID" is probably only needed if a shared-library implements
 | 
			
		||||
    multiple ENGINEs, but if you know the engine id you expect to be using,
 | 
			
		||||
    it doesn't hurt to specify it (and this provides a sanity check if
 | 
			
		||||
    nothing else). "LIST_ADD" is only required if you actually wish the
 | 
			
		||||
    loaded ENGINE to be discoverable by application code later on using the
 | 
			
		||||
    ENGINE's "id". For most applications, this isn't necessary - but some
 | 
			
		||||
    application authors may have nifty reasons for using it. The "LOAD"
 | 
			
		||||
    command is the only one that takes no parameters and is the command
 | 
			
		||||
    that uses the settings from any previous commands to actually *load*
 | 
			
		||||
    the shared-library ENGINE implementation. If this command succeeds, the
 | 
			
		||||
    (copy of the) 'dynamic' ENGINE will magically morph into the ENGINE
 | 
			
		||||
    that has been loaded from the shared-library. As such, any control
 | 
			
		||||
    commands supported by the loaded ENGINE could then be executed as per
 | 
			
		||||
    normal. Eg. if ENGINE "foo" is implemented in the shared-library
 | 
			
		||||
    "libfoo.so" and it supports some special control command "CMD_FOO", the
 | 
			
		||||
    following code would load and use it (NB: obviously this code has no
 | 
			
		||||
    error checking);
 | 
			
		||||
 | 
			
		||||
       ENGINE *e = ENGINE_by_id("dynamic");
 | 
			
		||||
       ENGINE_ctrl_cmd_string(e, "SO_PATH", "/lib/libfoo.so", 0);
 | 
			
		||||
       ENGINE_ctrl_cmd_string(e, "ID", "foo", 0);
 | 
			
		||||
       ENGINE_ctrl_cmd_string(e, "LOAD", NULL, 0);
 | 
			
		||||
       ENGINE_ctrl_cmd_string(e, "CMD_FOO", "some input data", 0);
 | 
			
		||||
 | 
			
		||||
    For testing, the "openssl engine" utility can be useful for this sort
 | 
			
		||||
    of thing. For example the above code excerpt would achieve much the
 | 
			
		||||
    same result as;
 | 
			
		||||
 | 
			
		||||
       openssl engine dynamic \
 | 
			
		||||
                 -pre SO_PATH:/lib/libfoo.so \
 | 
			
		||||
                 -pre ID:foo \
 | 
			
		||||
                 -pre LOAD \
 | 
			
		||||
                 -pre "CMD_FOO:some input data"
 | 
			
		||||
 | 
			
		||||
    Or to simply see the list of commands supported by the "foo" ENGINE;
 | 
			
		||||
 | 
			
		||||
       openssl engine -vvvv dynamic \
 | 
			
		||||
                 -pre SO_PATH:/lib/libfoo.so \
 | 
			
		||||
                 -pre ID:foo \
 | 
			
		||||
                 -pre LOAD
 | 
			
		||||
 | 
			
		||||
    Applications that support the ENGINE API and more specifically, the
 | 
			
		||||
    "control commands" mechanism, will provide some way for you to pass
 | 
			
		||||
    such commands through to ENGINEs. As such, you would select "dynamic"
 | 
			
		||||
    as the ENGINE to use, and the parameters/commands you pass would
 | 
			
		||||
    control the *actual* ENGINE used. Each command is actually a name-value
 | 
			
		||||
    pair and the value can sometimes be omitted (eg. the "LOAD" command).
 | 
			
		||||
    Whilst the syntax demonstrated in "openssl engine" uses a colon to
 | 
			
		||||
    separate the command name from the value, applications may provide
 | 
			
		||||
    their own syntax for making that separation (eg. a win32 registry
 | 
			
		||||
    key-value pair may be used by some applications). The reason for the
 | 
			
		||||
    "-pre" syntax in the "openssl engine" utility is that some commands
 | 
			
		||||
    might be issued to an ENGINE *after* it has been initialised for use.
 | 
			
		||||
    Eg. if an ENGINE implementation requires a smart-card to be inserted
 | 
			
		||||
    during initialisation (or a PIN to be typed, or whatever), there may be
 | 
			
		||||
    a control command you can issue afterwards to "forget" the smart-card
 | 
			
		||||
    so that additional initialisation is no longer possible. In
 | 
			
		||||
    applications such as web-servers, where potentially volatile code may
 | 
			
		||||
    run on the same host system, this may provide some arguable security
 | 
			
		||||
    value. In such a case, the command would be passed to the ENGINE after
 | 
			
		||||
    it has been initialised for use, and so the "-post" switch would be
 | 
			
		||||
    used instead. Applications may provide a different syntax for
 | 
			
		||||
    supporting this distinction, and some may simply not provide it at all
 | 
			
		||||
    ("-pre" is almost always what you're after, in reality).
 | 
			
		||||
 | 
			
		||||
  How do I build a "dynamic" ENGINE?
 | 
			
		||||
  ----------------------------------
 | 
			
		||||
    This question is trickier - currently OpenSSL bundles various ENGINE
 | 
			
		||||
    implementations that are statically built in, and any application that
 | 
			
		||||
    calls the "ENGINE_load_builtin_engines()" function will automatically
 | 
			
		||||
    have all such ENGINEs available (and occupying memory). Applications
 | 
			
		||||
    that don't call that function have no ENGINEs available like that and
 | 
			
		||||
    would have to use "dynamic" to load any such ENGINE - but on the other
 | 
			
		||||
    hand such applications would only have the memory footprint of any
 | 
			
		||||
    ENGINEs explicitly loaded using user/admin provided control commands.
 | 
			
		||||
    The main advantage of not statically linking ENGINEs and only using
 | 
			
		||||
    "dynamic" for hardware support is that any installation using no
 | 
			
		||||
    "external" ENGINE suffers no unnecessary memory footprint from unused
 | 
			
		||||
    ENGINEs. Likewise, installations that do require an ENGINE incur the
 | 
			
		||||
    overheads from only *that* ENGINE once it has been loaded.
 | 
			
		||||
 | 
			
		||||
    Sounds good? Maybe, but currently building an ENGINE implementation as
 | 
			
		||||
    a shared-library that can be loaded by "dynamic" isn't automated in
 | 
			
		||||
    OpenSSL's build process. It can be done manually quite easily however.
 | 
			
		||||
    Such a shared-library can either be built with any OpenSSL code it
 | 
			
		||||
    needs statically linked in, or it can link dynamically against OpenSSL
 | 
			
		||||
    if OpenSSL itself is built as a shared library. The instructions are
 | 
			
		||||
    the same in each case, but in the former (statically linked any
 | 
			
		||||
    dependencies on OpenSSL) you must ensure OpenSSL is built with
 | 
			
		||||
    position-independent code ("PIC"). The default OpenSSL compilation may
 | 
			
		||||
    already specify the relevant flags to do this, but you should consult
 | 
			
		||||
    with your compiler documentation if you are in any doubt.
 | 
			
		||||
 | 
			
		||||
    This example will show building the "atalla" ENGINE in the
 | 
			
		||||
    crypto/engine/ directory as a shared-library for use via the "dynamic"
 | 
			
		||||
    ENGINE.
 | 
			
		||||
    1) "cd" to the crypto/engine/ directory of a pre-compiled OpenSSL
 | 
			
		||||
       source tree.
 | 
			
		||||
    2) Recompile at least one source file so you can see all the compiler
 | 
			
		||||
       flags (and syntax) being used to build normally. Eg;
 | 
			
		||||
           touch hw_atalla.c ; make
 | 
			
		||||
       will rebuild "hw_atalla.o" using all such flags.
 | 
			
		||||
    3) Manually enter the same compilation line to compile the
 | 
			
		||||
       "hw_atalla.c" file but with the following two changes;
 | 
			
		||||
         (a) add "-DENGINE_DYNAMIC_SUPPORT" to the command line switches,
 | 
			
		||||
	 (b) change the output file from "hw_atalla.o" to something new,
 | 
			
		||||
             eg. "tmp_atalla.o"
 | 
			
		||||
    4) Link "tmp_atalla.o" into a shared-library using the top-level
 | 
			
		||||
       OpenSSL libraries to resolve any dependencies. The syntax for doing
 | 
			
		||||
       this depends heavily on your system/compiler and is a nightmare
 | 
			
		||||
       known well to anyone who has worked with shared-library portability
 | 
			
		||||
       before. 'gcc' on Linux, for example, would use the following syntax;
 | 
			
		||||
          gcc -shared -o dyn_atalla.so tmp_atalla.o -L../.. -lcrypto
 | 
			
		||||
    5) Test your shared library using "openssl engine" as explained in the
 | 
			
		||||
       previous section. Eg. from the top-level directory, you might try;
 | 
			
		||||
          apps/openssl engine -vvvv dynamic \
 | 
			
		||||
              -pre SO_PATH:./crypto/engine/dyn_atalla.so -pre LOAD
 | 
			
		||||
       If the shared-library loads successfully, you will see both "-pre"
 | 
			
		||||
       commands marked as "SUCCESS" and the list of control commands
 | 
			
		||||
       displayed (because of "-vvvv") will be the control commands for the
 | 
			
		||||
       *atalla* ENGINE (ie. *not* the 'dynamic' ENGINE). You can also add
 | 
			
		||||
       the "-t" switch to the utility if you want it to try and initialise
 | 
			
		||||
       the atalla ENGINE for use to test any possible hardware/driver
 | 
			
		||||
       issues.
 | 
			
		||||
 | 
			
		||||
  PROBLEMS
 | 
			
		||||
  ========
 | 
			
		||||
 | 
			
		||||
  It seems like the ENGINE part doesn't work too well with CryptoSwift on Win32.
 | 
			
		||||
  A quick test done right before the release showed that trying "openssl speed
 | 
			
		||||
  -engine cswift" generated errors. If the DSO gets enabled, an attempt is made
 | 
			
		||||
  to write at memory address 0x00000002.
 | 
			
		||||
 | 
			
		||||
@@ -1,21 +0,0 @@
 | 
			
		||||
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 legel by checking if there are any
 | 
			
		||||
patents in your country. The file contains some of the patents that we
 | 
			
		||||
know about or are rumoured to exist. This is not a definitive list.
 | 
			
		||||
 | 
			
		||||
----------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
RSA Data Security holds software patents on the RSA and RC5 algorithms.
 | 
			
		||||
If their ciphers are used used inside the USA (and Japan?), you must contact
 | 
			
		||||
RSA Data Security for licencing conditions.  Their web page is
 | 
			
		||||
http://www.rsa.com
 | 
			
		||||
 | 
			
		||||
RC4 is a trademark of RSA Data Security, so use of this label should perhaps
 | 
			
		||||
only be used with RSA Data Security's permission. 
 | 
			
		||||
 | 
			
		||||
The IDEA algorithm is patented by Ascom in Austria, France, Germany,
 | 
			
		||||
Italy, Japan, 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
 | 
			
		||||
 | 
			
		||||
@@ -1,44 +0,0 @@
 | 
			
		||||
If you have any problems with SSLeay then please take the following 
 | 
			
		||||
steps:
 | 
			
		||||
 | 
			
		||||
    Remove the ASM version of the BN routines (edit Configure)
 | 
			
		||||
    Remove the compiler optimisation flags
 | 
			
		||||
    Add in the compiler debug flags (-g)
 | 
			
		||||
 | 
			
		||||
Note: if using gcc then remove -fomit-frame-pointer before you try
 | 
			
		||||
      to debug things.
 | 
			
		||||
 | 
			
		||||
If you wish to report a bug then please include the following information
 | 
			
		||||
in any bug report:
 | 
			
		||||
 | 
			
		||||
    SSLeay Details
 | 
			
		||||
	- Version, most of these details can be got from the
 | 
			
		||||
	  'ssleay version -a' command.
 | 
			
		||||
    Operating System Details
 | 
			
		||||
	- OS Name
 | 
			
		||||
	- OS Version
 | 
			
		||||
	- Hardware platform
 | 
			
		||||
    Compiler Details
 | 
			
		||||
	- Name
 | 
			
		||||
	- Version
 | 
			
		||||
    Application Details 
 | 
			
		||||
	- Name 
 | 
			
		||||
	- Version 
 | 
			
		||||
    Problem Description
 | 
			
		||||
	- include steps that will reproduce the problem (if known)
 | 
			
		||||
    Stack Traceback (if the application dumps core)
 | 
			
		||||
 | 
			
		||||
For example:
 | 
			
		||||
 | 
			
		||||
    OpenSSL-0.9.1c
 | 
			
		||||
    SunOS 5.3, SPARC, SunC 3.0
 | 
			
		||||
    SSLtelnet-0.7
 | 
			
		||||
 | 
			
		||||
    Core dumps when using telnet with SSL support in bn_mul() with 
 | 
			
		||||
    the following stack trackback 
 | 
			
		||||
	...
 | 
			
		||||
 | 
			
		||||
Report the bug to the OpenSSL project at:
 | 
			
		||||
 | 
			
		||||
    openssl-bugs@openssl.org
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										129
									
								
								STATUS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								STATUS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,129 @@
 | 
			
		||||
 | 
			
		||||
  OpenSSL STATUS                           Last modified at
 | 
			
		||||
  ______________                           $Date: 2002/12/07 20:03:42 $
 | 
			
		||||
 | 
			
		||||
  DEVELOPMENT STATE
 | 
			
		||||
 | 
			
		||||
    o  OpenSSL 0.9.8:  Under development...
 | 
			
		||||
    o  OpenSSL 0.9.7-beta5: Released on December  5th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.7-beta4: Released on November 19th, 2002
 | 
			
		||||
       Debian GNU/Linux (kernel version 2.4.19, gcc 2.95.4)	- PASSED
 | 
			
		||||
    o  OpenSSL 0.9.7-beta3: Released on July     30th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.7-beta2: Released on June     16th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.7-beta1: Released on June      1st, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6h: Released on December   5th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6g: Released on August     9th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6f: Released on August     8th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6e: Released on July      30th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6d: Released on May        9th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6c: Released on December  21st, 2001
 | 
			
		||||
    o  OpenSSL 0.9.6b: Released on July       9th, 2001
 | 
			
		||||
    o  OpenSSL 0.9.6a: Released on April      5th, 2001
 | 
			
		||||
    o  OpenSSL 0.9.6:  Released on September 24th, 2000
 | 
			
		||||
    o  OpenSSL 0.9.5a: Released on April      1st, 2000
 | 
			
		||||
    o  OpenSSL 0.9.5:  Released on February  28th, 2000
 | 
			
		||||
    o  OpenSSL 0.9.4:  Released on August    09th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.3a: Released on May       29th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.3:  Released on May       25th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.2b: Released on March     22th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.1c: Released on December  23th, 1998
 | 
			
		||||
 | 
			
		||||
  [See also http://www.openssl.org/support/rt2.html]
 | 
			
		||||
 | 
			
		||||
  RELEASE SHOWSTOPPERS
 | 
			
		||||
 | 
			
		||||
    o BN_mod_mul verification fails for mips3-sgi-irix
 | 
			
		||||
      unless configured with no-asm
 | 
			
		||||
 | 
			
		||||
    o [2002-11-21]
 | 
			
		||||
      PR 343 mentions that scrubbing memory with 'memset(ptr, 0, n)' may
 | 
			
		||||
      be optimized away in modern compilers.  This is definitely not good
 | 
			
		||||
      and needs to be fixed immediately.  The formula to use is presented
 | 
			
		||||
      in:
 | 
			
		||||
 | 
			
		||||
      http://online.securityfocus.com/archive/82/297918/2002-10-27/2002-11-02/0
 | 
			
		||||
 | 
			
		||||
      The problem report that mentions this is:
 | 
			
		||||
 | 
			
		||||
      https://www.aet.TU-Cottbus.DE/rt2/Ticket/Display.html?id=343
 | 
			
		||||
 | 
			
		||||
  AVAILABLE PATCHES
 | 
			
		||||
 | 
			
		||||
    o 
 | 
			
		||||
 | 
			
		||||
  IN PROGRESS
 | 
			
		||||
 | 
			
		||||
    o Steve is currently working on (in no particular order):
 | 
			
		||||
        ASN1 code redesign, butchery, replacement.
 | 
			
		||||
        OCSP
 | 
			
		||||
        EVP cipher enhancement.
 | 
			
		||||
        Enhanced certificate chain verification.
 | 
			
		||||
	Private key, certificate and CRL API and implementation.
 | 
			
		||||
	Developing and bugfixing PKCS#7 (S/MIME code).
 | 
			
		||||
        Various X509 issues: character sets, certificate request extensions.
 | 
			
		||||
    o Geoff and Richard are currently working on:
 | 
			
		||||
	ENGINE (the new code that gives hardware support among others).
 | 
			
		||||
    o Richard is currently working on:
 | 
			
		||||
	UI (User Interface)
 | 
			
		||||
	UTIL (a new set of library functions to support some higher level
 | 
			
		||||
	      functionality that is currently missing).
 | 
			
		||||
	Shared library support for VMS.
 | 
			
		||||
	Kerberos 5 authentication (Heimdal)
 | 
			
		||||
	Constification
 | 
			
		||||
	Compression
 | 
			
		||||
	Attribute Certificate support
 | 
			
		||||
	Certificate Pair support
 | 
			
		||||
	Storage Engines (primarly an LDAP storage engine)
 | 
			
		||||
 | 
			
		||||
  NEEDS PATCH
 | 
			
		||||
 | 
			
		||||
    o  0.9.8-dev: COMPLEMENTOFALL and COMPLEMENTOFDEFAULT do not
 | 
			
		||||
       handle ECCdraft cipher suites correctly.
 | 
			
		||||
 | 
			
		||||
    o  apps/ca.c: "Sign the certificate?" - "n" creates empty certificate file
 | 
			
		||||
 | 
			
		||||
    o  "OpenSSL STATUS" is never up-to-date.
 | 
			
		||||
 | 
			
		||||
  OPEN ISSUES
 | 
			
		||||
 | 
			
		||||
    o  The Makefile hierarchy and build mechanism is still not a round thing:
 | 
			
		||||
 | 
			
		||||
       1. The config vs. Configure scripts
 | 
			
		||||
          It's the same nasty situation as for Apache with APACI vs.
 | 
			
		||||
          src/Configure. It confuses.
 | 
			
		||||
          Suggestion: Merge Configure and config into a single configure
 | 
			
		||||
                      script with a Autoconf style interface ;-) and remove
 | 
			
		||||
                      Configure and config. Or even let us use GNU Autoconf
 | 
			
		||||
                      itself. Then we can avoid a lot of those platform checks
 | 
			
		||||
                      which are currently in Configure.
 | 
			
		||||
 | 
			
		||||
    o  Support for Shared Libraries has to be added at least
 | 
			
		||||
       for the major Unix platforms. The details we can rip from the stuff
 | 
			
		||||
       Ralf has done for the Apache src/Configure script. Ben wants the
 | 
			
		||||
       solution to be really simple.
 | 
			
		||||
 | 
			
		||||
       Status: Ralf will look how we can easily incorporate the
 | 
			
		||||
               compiler PIC and linker DSO flags from Apache
 | 
			
		||||
               into the OpenSSL Configure script.
 | 
			
		||||
 | 
			
		||||
               Ulf: +1 for using GNU autoconf and libtool (but not automake,
 | 
			
		||||
                    which apparently is not flexible enough to generate
 | 
			
		||||
                    libcrypto)
 | 
			
		||||
 | 
			
		||||
  WISHES
 | 
			
		||||
 | 
			
		||||
    o  Add variants of DH_generate_parameters() and BN_generate_prime() [etc?]
 | 
			
		||||
       where the callback function can request that the function be aborted.
 | 
			
		||||
       [Gregory Stark <ghstark@pobox.com>, <rayyang2000@yahoo.com>]
 | 
			
		||||
 | 
			
		||||
    o  SRP in TLS.
 | 
			
		||||
       [wished by:
 | 
			
		||||
        Dj <derek@yo.net>, Tom Wu <tom@arcot.com>,
 | 
			
		||||
        Tom Holroyd <tomh@po.crl.go.jp>]
 | 
			
		||||
 | 
			
		||||
       See http://search.ietf.org/internet-drafts/draft-ietf-tls-srp-00.txt
 | 
			
		||||
       as well as http://www-cs-students.stanford.edu/~tjw/srp/.
 | 
			
		||||
 | 
			
		||||
       Tom Holroyd tells us there is a SRP patch for OpenSSH at
 | 
			
		||||
       http://members.tripod.com/professor_tom/archives/, that could
 | 
			
		||||
       be useful.
 | 
			
		||||
							
								
								
									
										18
									
								
								VMS/TODO
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								VMS/TODO
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
TODO:
 | 
			
		||||
=====
 | 
			
		||||
 | 
			
		||||
There are a few things that need to be worked out in the VMS version of
 | 
			
		||||
OpenSSL, still:
 | 
			
		||||
 | 
			
		||||
- Description files. ("Makefile's" :-))
 | 
			
		||||
- Script code to link an already compiled build tree.
 | 
			
		||||
- A VMSINSTALlable version (way in the future, unless someone else hacks).
 | 
			
		||||
- shareable images (DLL for you Windows folks).
 | 
			
		||||
 | 
			
		||||
There may be other things that I have missed and that may be desirable.
 | 
			
		||||
Please send mail to <openssl-users@openssl.org> or to me directly if you
 | 
			
		||||
have any ideas.
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
Richard Levitte <richard@levitte.org>
 | 
			
		||||
1999-05-24
 | 
			
		||||
							
								
								
									
										4
									
								
								VMS/WISHLIST.TXT
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								VMS/WISHLIST.TXT
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
* Have the building procedure contain a LINK-only possibility.
 | 
			
		||||
  Wished by Mark Daniel <mark.daniel@dsto.defence.gov.au>
 | 
			
		||||
 | 
			
		||||
  One way to enable that is also to go over to DESCRIP.MMS files.
 | 
			
		||||
							
								
								
									
										72
									
								
								VMS/install.com
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								VMS/install.com
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
			
		||||
$! INSTALL.COM -- Installs the files in a given directory tree
 | 
			
		||||
$!
 | 
			
		||||
$! Author: Richard Levitte <richard@levitte.org>
 | 
			
		||||
$! Time of creation: 23-MAY-1998 19:22
 | 
			
		||||
$!
 | 
			
		||||
$! P1	root of the directory tree
 | 
			
		||||
$!
 | 
			
		||||
$	IF P1 .EQS. ""
 | 
			
		||||
$	THEN
 | 
			
		||||
$	    WRITE SYS$OUTPUT "First argument missing."
 | 
			
		||||
$	    WRITE SYS$OUTPUT "Should be the directory where you want things installed."
 | 
			
		||||
$	    EXIT
 | 
			
		||||
$	ENDIF
 | 
			
		||||
$
 | 
			
		||||
$	ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
 | 
			
		||||
$	ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
 | 
			
		||||
$	ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
 | 
			
		||||
		   - "[000000." - "][" - "[" - "]"
 | 
			
		||||
$	ROOT = ROOT_DEV + "[" + ROOT_DIR
 | 
			
		||||
$
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLVLIB WRK_SSLROOT:[VAX_LIB]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLALIB WRK_SSLROOT:[ALPHA_LIB]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLINCLUDE WRK_SSLROOT:[INCLUDE]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLVEXE WRK_SSLROOT:[VAX_EXE]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLAEXE WRK_SSLROOT:[ALPHA_EXE]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLCERTS WRK_SSLROOT:[CERTS]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLPRIVATE WRK_SSLROOT:[PRIVATE]
 | 
			
		||||
$
 | 
			
		||||
$	IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLROOT:[000000]
 | 
			
		||||
$	IF F$PARSE("WRK_SSLINCLUDE:") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLINCLUDE:
 | 
			
		||||
$	IF F$PARSE("WRK_SSLROOT:[VMS]") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLROOT:[VMS]
 | 
			
		||||
$
 | 
			
		||||
$	IF F$SEARCH("WRK_SSLINCLUDE:vms_idhacks.h") .NES. "" THEN -
 | 
			
		||||
	   DELETE WRK_SSLINCLUDE:vms_idhacks.h;*
 | 
			
		||||
$
 | 
			
		||||
$	OPEN/WRITE SF WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM
 | 
			
		||||
$	WRITE SYS$OUTPUT "%OPEN-I-CREATED,  ",F$SEARCH("WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM")," created."
 | 
			
		||||
$	WRITE SF "$! Startup file for Openssl 0.9.2-RL 15-Mar-1999"
 | 
			
		||||
$	WRITE SF "$!"
 | 
			
		||||
$	WRITE SF "$! Do not edit this file, as it will be regenerated during next installation."
 | 
			
		||||
$	WRITE SF "$! Instead, add or change SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"
 | 
			
		||||
$	WRITE SF "$!"
 | 
			
		||||
$	WRITE SF "$! P1	a qualifier to DEFINE.  For example ""/SYSTEM"" to get the logical names"
 | 
			
		||||
$	WRITE SF "$!	defined in the system logical name table."
 | 
			
		||||
$	WRITE SF "$!"
 | 
			
		||||
$	WRITE SF "$	ARCH = ""VAX"""
 | 
			
		||||
$	WRITE SF "$	IF F$GETSYI(""CPU"") .GE. 128 THEN ARCH = ""ALPHA"""
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	SSLROOT		",ROOT,".] /TRANS=CONC"
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	SSLLIB		SSLROOT:['ARCH'_LIB]"
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	SSLINCLUDE	SSLROOT:[INCLUDE]"
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	SSLEXE		SSLROOT:['ARCH'_EXE]"
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	SSLCERTS	SSLROOT:[CERTS]"
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	SSLPRIVATE	SSLROOT:[PRIVATE]"
 | 
			
		||||
$	WRITE SF "$"
 | 
			
		||||
$	WRITE SF "$!	This is program can include <openssl/{foo}.h>"
 | 
			
		||||
$	WRITE SF "$	DEFINE/NOLOG'P1	OPENSSL		SSLINCLUDE:"
 | 
			
		||||
$	WRITE SF "$"
 | 
			
		||||
$	WRITE SF "$	IF F$SEARCH(""SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"") .NES."""" THEN -"
 | 
			
		||||
$	WRITE SF "	   @SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"
 | 
			
		||||
$	WRITE SF "$"
 | 
			
		||||
$	WRITE SF "$	EXIT"
 | 
			
		||||
$	CLOSE SF
 | 
			
		||||
$	SET FILE/PROT=WORLD:RE WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM
 | 
			
		||||
$
 | 
			
		||||
$	COPY OPENSSL_UTILS.COM WRK_SSLROOT:[VMS]/LOG
 | 
			
		||||
$	SET FILE/PROT=WORLD:RE WRK_SSLROOT:[VMS]OPENSSL_UTILS.COM
 | 
			
		||||
$
 | 
			
		||||
$	EXIT
 | 
			
		||||
							
								
								
									
										354
									
								
								VMS/mkshared.com
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										354
									
								
								VMS/mkshared.com
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,354 @@
 | 
			
		||||
$! MKSHARED.COM -- script to created shareable images on VMS
 | 
			
		||||
$!
 | 
			
		||||
$! No command line parameters.  This should be run at the start of the source
 | 
			
		||||
$! tree (the same directory where one finds INSTALL.VMS).
 | 
			
		||||
$!
 | 
			
		||||
$! Input:	[.UTIL]LIBEAY.NUM,[.AXP.EXE.CRYPTO]LIBCRYPTO.OLB
 | 
			
		||||
$!		[.UTIL]SSLEAY.NUM,[.AXP.EXE.SSL]LIBSSL.OLB
 | 
			
		||||
$! Output:	[.AXP.EXE.CRYPTO]LIBCRYPTO.OPT,.MAP,.EXE
 | 
			
		||||
$!		[.AXP.EXE.SSL]LIBSSL.OPT,.MAP,.EXE
 | 
			
		||||
$!
 | 
			
		||||
$! So far, tests have only been made on VMS for Alpha.  VAX will come in time.
 | 
			
		||||
$! ===========================================================================
 | 
			
		||||
$
 | 
			
		||||
$! ----- Prepare info for processing: version number and file info
 | 
			
		||||
$ gosub read_version_info
 | 
			
		||||
$ if libver .eqs. ""
 | 
			
		||||
$ then
 | 
			
		||||
$   write sys$error "ERROR: Couldn't find any library version info..."
 | 
			
		||||
$   exit
 | 
			
		||||
$ endif
 | 
			
		||||
$
 | 
			
		||||
$ if f$getsyi("CPU") .ge. 128
 | 
			
		||||
$ then
 | 
			
		||||
$   libid  = "Crypto"
 | 
			
		||||
$   libnum = "[.UTIL]LIBEAY.NUM"
 | 
			
		||||
$   libdir = "[.AXP.EXE.CRYPTO]"
 | 
			
		||||
$   libolb = "''libdir'LIBCRYPTO.OLB"
 | 
			
		||||
$   libopt = "''libdir'LIBCRYPTO.OPT"
 | 
			
		||||
$   libmap = "''libdir'LIBCRYPTO.MAP"
 | 
			
		||||
$   libgoal= "''libdir'LIBCRYPTO.EXE"
 | 
			
		||||
$   libref = ""
 | 
			
		||||
$   gosub create_axp_shr
 | 
			
		||||
$   libid  = "SSL"
 | 
			
		||||
$   libnum = "[.UTIL]SSLEAY.NUM"
 | 
			
		||||
$   libdir = "[.AXP.EXE.SSL]"
 | 
			
		||||
$   libolb = "''libdir'LIBSSL.OLB"
 | 
			
		||||
$   libopt = "''libdir'LIBSSL.OPT"
 | 
			
		||||
$   libmap = "''libdir'LIBSSL.MAP"
 | 
			
		||||
$   libgoal= "''libdir'LIBSSL.EXE"
 | 
			
		||||
$   libref = "[.AXP.EXE.CRYPTO]LIBCRYPTO.EXE"
 | 
			
		||||
$   gosub create_axp_shr
 | 
			
		||||
$ else
 | 
			
		||||
$   libtit = "CRYPTO_TRANSFER_VECTOR"
 | 
			
		||||
$   libid  = "Crypto"
 | 
			
		||||
$   libnum = "[.UTIL]LIBEAY.NUM"
 | 
			
		||||
$   libdir = "[.VAX.EXE.CRYPTO]"
 | 
			
		||||
$   libmar = "''libdir'LIBCRYPTO.MAR"
 | 
			
		||||
$   libolb = "''libdir'LIBCRYPTO.OLB"
 | 
			
		||||
$   libopt = "''libdir'LIBCRYPTO.OPT"
 | 
			
		||||
$   libobj = "''libdir'LIBCRYPTO.OBJ"
 | 
			
		||||
$   libmap = "''libdir'LIBCRYPTO.MAP"
 | 
			
		||||
$   libgoal= "''libdir'LIBCRYPTO.EXE"
 | 
			
		||||
$   libref = ""
 | 
			
		||||
$   libvec = "LIBCRYPTO"
 | 
			
		||||
$   gosub create_vax_shr
 | 
			
		||||
$   libtit = "SSL_TRANSFER_VECTOR"
 | 
			
		||||
$   libid  = "SSL"
 | 
			
		||||
$   libnum = "[.UTIL]SSLEAY.NUM"
 | 
			
		||||
$   libdir = "[.VAX.EXE.SSL]"
 | 
			
		||||
$   libmar = "''libdir'LIBSSL.MAR"
 | 
			
		||||
$   libolb = "''libdir'LIBSSL.OLB"
 | 
			
		||||
$   libopt = "''libdir'LIBSSL.OPT"
 | 
			
		||||
$   libobj = "''libdir'LIBSSL.OBJ"
 | 
			
		||||
$   libmap = "''libdir'LIBSSL.MAP"
 | 
			
		||||
$   libgoal= "''libdir'LIBSSL.EXE"
 | 
			
		||||
$   libref = "[.VAX.EXE.CRYPTO]LIBCRYPTO.EXE"
 | 
			
		||||
$   libvec = "LIBSSL"
 | 
			
		||||
$   gosub create_vax_shr
 | 
			
		||||
$ endif
 | 
			
		||||
$ exit
 | 
			
		||||
$
 | 
			
		||||
$! ----- Soubroutines to actually build the shareable libraries
 | 
			
		||||
$! The way things work, there's a main shareable library creator for each
 | 
			
		||||
$! supported architecture, which is called from the main code above.
 | 
			
		||||
$! The creator will define a number of variables to tell the next levels of
 | 
			
		||||
$! subroutines what routines to use to write to the option files, call the
 | 
			
		||||
$! main processor, read_func_num, and when that is done, it will write version
 | 
			
		||||
$! data at the end of the .opt file, close it, and link the library.
 | 
			
		||||
$!
 | 
			
		||||
$! read_func_num reads through a .num file and calls the writer routine for
 | 
			
		||||
$! each line.  It's also responsible for checking that order is properly kept
 | 
			
		||||
$! in the .num file, check that each line applies to VMS and the architecture,
 | 
			
		||||
$! and to fill in "holes" with dummy entries.
 | 
			
		||||
$!
 | 
			
		||||
$! The creator routines depend on the following variables:
 | 
			
		||||
$! libnum	The name of the .num file to use as input
 | 
			
		||||
$! libolb	The name of the object library to build from
 | 
			
		||||
$! libid	The identification string of the shareable library
 | 
			
		||||
$! libopt	The name of the .opt file to write
 | 
			
		||||
$! libtit	The title of the assembler transfer vector file (VAX only)
 | 
			
		||||
$! libmar	The name of the assembler transfer vector file (VAX only)
 | 
			
		||||
$! libmap	The name of the map file to write
 | 
			
		||||
$! libgoal	The name of the shareable library to write
 | 
			
		||||
$! libref	The name of a shareable library to link in
 | 
			
		||||
$!
 | 
			
		||||
$! read_func_num depends on the following variables from the creator:
 | 
			
		||||
$! libwriter	The name of the writer routine to call for each .num file line
 | 
			
		||||
$! -----
 | 
			
		||||
$
 | 
			
		||||
$! ----- Subroutines for AXP
 | 
			
		||||
$! -----
 | 
			
		||||
$! The creator routine
 | 
			
		||||
$ create_axp_shr:
 | 
			
		||||
$   open/write opt 'libopt'
 | 
			
		||||
$   write opt "identification=""",libid," ",libverstr,""""
 | 
			
		||||
$   write opt libolb,"/lib"
 | 
			
		||||
$   if libref .nes. "" then write opt libref,"/SHARE"
 | 
			
		||||
$   write opt "SYMBOL_VECTOR=(-"
 | 
			
		||||
$   libfirstentry := true
 | 
			
		||||
$   libwrch   := opt
 | 
			
		||||
$   libwriter := write_axp_transfer_entry
 | 
			
		||||
$   textcount = 0
 | 
			
		||||
$   gosub read_func_num
 | 
			
		||||
$   write opt ")"
 | 
			
		||||
$   write opt "GSMATCH=",libvmatch,",",libver
 | 
			
		||||
$   close opt
 | 
			
		||||
$   link/map='libmap'/full/share='libgoal' 'libopt'/option
 | 
			
		||||
$   return
 | 
			
		||||
$
 | 
			
		||||
$! The record writer routine
 | 
			
		||||
$ write_axp_transfer_entry:
 | 
			
		||||
$   if libentry .eqs. ".dummy" then return
 | 
			
		||||
$   if info_kind .eqs. "VARIABLE"
 | 
			
		||||
$   then
 | 
			
		||||
$     pr:=DATA
 | 
			
		||||
$   else
 | 
			
		||||
$     pr:=PROCEDURE
 | 
			
		||||
$   endif
 | 
			
		||||
$   textcount_this = f$length(pr) + f$length(libentry) + 5
 | 
			
		||||
$   if textcount + textcount_this .gt. 1024
 | 
			
		||||
$   then
 | 
			
		||||
$     write opt ")"
 | 
			
		||||
$     write opt "SYMBOL_VECTOR=(-"
 | 
			
		||||
$     textcount = 16
 | 
			
		||||
$     libfirstentry := true
 | 
			
		||||
$   endif
 | 
			
		||||
$   if libfirstentry
 | 
			
		||||
$   then
 | 
			
		||||
$     write 'libwrch' "    ",libentry,"=",pr," -"
 | 
			
		||||
$   else
 | 
			
		||||
$     write 'libwrch' "    ,",libentry,"=",pr," -"
 | 
			
		||||
$   endif
 | 
			
		||||
$   libfirstentry := false
 | 
			
		||||
$   textcount = textcount + textcount_this
 | 
			
		||||
$   return
 | 
			
		||||
$
 | 
			
		||||
$! ----- Subroutines for AXP
 | 
			
		||||
$! -----
 | 
			
		||||
$! The creator routine
 | 
			
		||||
$ create_vax_shr:
 | 
			
		||||
$   open/write mar 'libmar'
 | 
			
		||||
$   type sys$input:/out=mar:
 | 
			
		||||
;
 | 
			
		||||
; Transfer vector for VAX shareable image
 | 
			
		||||
;
 | 
			
		||||
$   write mar "	.TITLE ",libtit
 | 
			
		||||
$   write mar "	.IDENT /",libid,"/"
 | 
			
		||||
$   type sys$input:/out=mar:
 | 
			
		||||
;
 | 
			
		||||
; Define macro to assist in building transfer vector entries.  Each entry
 | 
			
		||||
; should take no more than 8 bytes.
 | 
			
		||||
;
 | 
			
		||||
	.MACRO FTRANSFER_ENTRY routine
 | 
			
		||||
	.ALIGN QUAD
 | 
			
		||||
	.TRANSFER routine
 | 
			
		||||
	.MASK	routine
 | 
			
		||||
	JMP	routine+2
 | 
			
		||||
	.ENDM FTRANSFER_ENTRY
 | 
			
		||||
;
 | 
			
		||||
; Place entries in own program section.
 | 
			
		||||
;
 | 
			
		||||
$   write mar "	.PSECT $$",libvec,",QUAD,PIC,USR,CON,REL,LCL,SHR,EXE,RD,NOWRT"
 | 
			
		||||
$   write mar libvec,"_xfer:"
 | 
			
		||||
$   libwrch   := mar
 | 
			
		||||
$   libwriter := write_vax_ftransfer_entry
 | 
			
		||||
$   gosub read_func_num
 | 
			
		||||
$   type sys$input:/out=mar:
 | 
			
		||||
;
 | 
			
		||||
; Allocate extra storage at end of vector to allow for expansion.
 | 
			
		||||
;
 | 
			
		||||
$   write mar "	.BLKB 32768-<.-",libvec,"_xfer>	; 64 pages total."
 | 
			
		||||
$!   libwriter := write_vax_vtransfer_entry
 | 
			
		||||
$!   gosub read_func_num
 | 
			
		||||
$   write mar "	.END"
 | 
			
		||||
$   close mar
 | 
			
		||||
$   open/write opt 'libopt'
 | 
			
		||||
$   write opt "identification=""",libid," ",libverstr,""""
 | 
			
		||||
$   write opt libobj
 | 
			
		||||
$   write opt libolb,"/lib"
 | 
			
		||||
$   if libref .nes. "" then write opt libref,"/SHARE"
 | 
			
		||||
$   type sys$input:/out=opt:
 | 
			
		||||
!
 | 
			
		||||
! Ensure transfer vector is at beginning of image
 | 
			
		||||
!
 | 
			
		||||
CLUSTER=FIRST
 | 
			
		||||
$   write opt "COLLECT=FIRST,$$",libvec
 | 
			
		||||
$   write opt "GSMATCH=",libvmatch,",",libver
 | 
			
		||||
$   type sys$input:/out=opt:
 | 
			
		||||
!
 | 
			
		||||
! make psects nonshareable so image can be installed.
 | 
			
		||||
!
 | 
			
		||||
PSECT_ATTR=$CHAR_STRING_CONSTANTS,NOWRT
 | 
			
		||||
$   libwrch   := opt
 | 
			
		||||
$   libwriter := write_vax_psect_attr
 | 
			
		||||
$   gosub read_func_num
 | 
			
		||||
$   close opt
 | 
			
		||||
$   macro/obj='libobj' 'libmar'
 | 
			
		||||
$   link/map='libmap'/full/share='libgoal' 'libopt'/option
 | 
			
		||||
$   return
 | 
			
		||||
$
 | 
			
		||||
$! The record writer routine for VAX functions
 | 
			
		||||
$ write_vax_ftransfer_entry:
 | 
			
		||||
$   if info_kind .nes. "FUNCTION" then return
 | 
			
		||||
$   if libentry .eqs ".dummy"
 | 
			
		||||
$   then
 | 
			
		||||
$     write 'libwrch' "	.BLKB 8" ! Dummy is zeroes...
 | 
			
		||||
$   else
 | 
			
		||||
$     write 'libwrch' "	FTRANSFER_ENTRY ",libentry
 | 
			
		||||
$   endif
 | 
			
		||||
$   return
 | 
			
		||||
$! The record writer routine for VAX variables (should never happen!)
 | 
			
		||||
$ write_vax_psect_attr:
 | 
			
		||||
$   if info_kind .nes. "VARIABLE" then return
 | 
			
		||||
$   if libentry .eqs ".dummy" then return
 | 
			
		||||
$   write 'libwrch' "PSECT_ATTR=",libentry,",NOSHR"
 | 
			
		||||
$   return
 | 
			
		||||
$
 | 
			
		||||
$! ----- Common subroutines
 | 
			
		||||
$! -----
 | 
			
		||||
$! The .num file reader.  This one has great responsability.
 | 
			
		||||
$ read_func_num:
 | 
			
		||||
$   open libnum 'libnum'
 | 
			
		||||
$   goto read_nums
 | 
			
		||||
$
 | 
			
		||||
$ read_nums:
 | 
			
		||||
$   libentrynum=0
 | 
			
		||||
$   liblastentry:=false
 | 
			
		||||
$   entrycount=0
 | 
			
		||||
$   loop:
 | 
			
		||||
$     read/end=loop_end/err=loop_end libnum line
 | 
			
		||||
$     entrynum=f$int(f$element(1," ",f$edit(line,"COMPRESS,TRIM")))
 | 
			
		||||
$     entryinfo=f$element(2," ",f$edit(line,"COMPRESS,TRIM"))
 | 
			
		||||
$     curentry=f$element(0," ",f$edit(line,"COMPRESS,TRIM"))
 | 
			
		||||
$     info_exist=f$element(0,":",entryinfo)
 | 
			
		||||
$     info_platforms=","+f$element(1,":",entryinfo)+","
 | 
			
		||||
$     info_kind=f$element(2,":",entryinfo)
 | 
			
		||||
$     info_algorithms=","+f$element(3,":",entryinfo)+","
 | 
			
		||||
$     if info_exist .eqs. "NOEXIST" then goto loop
 | 
			
		||||
$     truesum = 0
 | 
			
		||||
$     falsesum = 0
 | 
			
		||||
$     negatives = 1
 | 
			
		||||
$     plat_i = 0
 | 
			
		||||
$     loop1:
 | 
			
		||||
$       plat_entry = f$element(plat_i,",",info_platforms)
 | 
			
		||||
$       plat_i = plat_i + 1
 | 
			
		||||
$       if plat_entry .eqs. "" then goto loop1
 | 
			
		||||
$       if plat_entry .nes. ","
 | 
			
		||||
$       then
 | 
			
		||||
$         if f$extract(0,1,plat_entry) .nes. "!" then negatives = 0
 | 
			
		||||
$         if f$getsyi("CPU") .lt. 128
 | 
			
		||||
$         then
 | 
			
		||||
$           if plat_entry .eqs. "EXPORT_VAR_AS_FUNCTION" then -
 | 
			
		||||
$             truesum = truesum + 1
 | 
			
		||||
$           if plat_entry .eqs. "!EXPORT_VAR_AS_FUNCTION" then -
 | 
			
		||||
$             falsesum = falsesum + 1
 | 
			
		||||
$         endif
 | 
			
		||||
$         if plat_entry .eqs. "VMS" then truesum = truesum + 1
 | 
			
		||||
$         if plat_entry .eqs. "!VMS" then falsesum = falsesum + 1
 | 
			
		||||
$	  goto loop1
 | 
			
		||||
$       endif
 | 
			
		||||
$     endloop1:
 | 
			
		||||
$!DEBUG!$     if info_platforms - "EXPORT_VAR_AS_FUNCTION" .nes. info_platforms
 | 
			
		||||
$!DEBUG!$     then
 | 
			
		||||
$!DEBUG!$       write sys$output line
 | 
			
		||||
$!DEBUG!$       write sys$output "        truesum = ",truesum,-
 | 
			
		||||
$!DEBUG!		", negatives = ",negatives,", falsesum = ",falsesum
 | 
			
		||||
$!DEBUG!$     endif
 | 
			
		||||
$     if falsesum .ne. 0 then goto loop
 | 
			
		||||
$     if truesum+negatives .eq. 0 then goto loop
 | 
			
		||||
$     alg_i = 0
 | 
			
		||||
$     loop2:
 | 
			
		||||
$       alg_entry = f$element(alg_i,",",info_algorithms)
 | 
			
		||||
$	alg_i = alg_i + 1
 | 
			
		||||
$       if alg_entry .eqs. "" then goto loop2
 | 
			
		||||
$       if alg_entry .nes. ","
 | 
			
		||||
$       then
 | 
			
		||||
$         if alg_entry .eqs. "KRB5" then goto loop ! Special for now
 | 
			
		||||
$	  if alg_entry .eqs. "STATIC_ENGINE" then goto loop ! Special for now
 | 
			
		||||
$         if f$trnlnm("OPENSSL_NO_"+alg_entry) .nes. "" then goto loop
 | 
			
		||||
$	  goto loop2
 | 
			
		||||
$       endif
 | 
			
		||||
$     endloop2:
 | 
			
		||||
$     if info_platforms - "EXPORT_VAR_AS_FUNCTION" .nes. info_platforms
 | 
			
		||||
$     then
 | 
			
		||||
$!DEBUG!$     write sys$output curentry," ; ",entrynum," ; ",entryinfo
 | 
			
		||||
$     endif
 | 
			
		||||
$   redo:
 | 
			
		||||
$     next:=loop
 | 
			
		||||
$     tolibentry=curentry
 | 
			
		||||
$     if libentrynum .ne. entrynum
 | 
			
		||||
$     then
 | 
			
		||||
$       entrycount=entrycount+1
 | 
			
		||||
$       if entrycount .lt. entrynum
 | 
			
		||||
$       then
 | 
			
		||||
$!DEBUG!$         write sys$output "Info: entrycount: ''entrycount', entrynum: ''entrynum' => 0"
 | 
			
		||||
$         tolibentry=".dummy"
 | 
			
		||||
$         next:=redo
 | 
			
		||||
$       endif
 | 
			
		||||
$       if entrycount .gt. entrynum
 | 
			
		||||
$       then
 | 
			
		||||
$         write sys$error "Decreasing library entry numbers!  Can't continue"
 | 
			
		||||
$         write sys$error """",line,""""
 | 
			
		||||
$         close libnum
 | 
			
		||||
$         return
 | 
			
		||||
$       endif
 | 
			
		||||
$       libentry=tolibentry
 | 
			
		||||
$!DEBUG!$       write sys$output entrycount," ",libentry," ",entryinfo
 | 
			
		||||
$       if libentry .nes. "" .and. libwriter .nes. "" then gosub 'libwriter'
 | 
			
		||||
$     else
 | 
			
		||||
$       write sys$error "Info: ""''curentry'"" is an alias for ""''libentry'"".  Overriding..."
 | 
			
		||||
$     endif
 | 
			
		||||
$     libentrynum=entrycount
 | 
			
		||||
$     goto 'next'
 | 
			
		||||
$   loop_end:
 | 
			
		||||
$   close libnum
 | 
			
		||||
$   return
 | 
			
		||||
$
 | 
			
		||||
$! The version number reader
 | 
			
		||||
$ read_version_info:
 | 
			
		||||
$   libver = ""
 | 
			
		||||
$   open/read vf [.CRYPTO]OPENSSLV.H
 | 
			
		||||
$   loop_rvi:
 | 
			
		||||
$     read/err=endloop_rvi/end=endloop_rvi vf rvi_line
 | 
			
		||||
$     if rvi_line - "SHLIB_VERSION_NUMBER """ .eqs. rvi_line then -
 | 
			
		||||
	goto loop_rvi
 | 
			
		||||
$     libverstr = f$element(1,"""",rvi_line)
 | 
			
		||||
$     libvmajor = f$element(0,".",libverstr)
 | 
			
		||||
$     libvminor = f$element(1,".",libverstr)
 | 
			
		||||
$     libvedit = f$element(2,".",libverstr)
 | 
			
		||||
$     libvpatch = f$cvui(0,8,f$extract(1,1,libvedit)+"@")-f$cvui(0,8,"@")
 | 
			
		||||
$     libvedit = f$extract(0,1,libvedit)
 | 
			
		||||
$     libver = f$string(f$int(libvmajor)*100)+","+-
 | 
			
		||||
	f$string(f$int(libvminor)*100+f$int(libvedit)*10+f$int(libvpatch))
 | 
			
		||||
$     if libvmajor .eqs. "0"
 | 
			
		||||
$     then
 | 
			
		||||
$       libvmatch = "EQUAL"
 | 
			
		||||
$     else
 | 
			
		||||
$       ! Starting with the 1.0 release, backward compatibility should be
 | 
			
		||||
$       ! kept, so switch over to the following
 | 
			
		||||
$       libvmatch = "LEQUAL"
 | 
			
		||||
$     endif
 | 
			
		||||
$   endloop_rvi:
 | 
			
		||||
$   close vf
 | 
			
		||||
$   return
 | 
			
		||||
							
								
								
									
										1
									
								
								VMS/multinet_shr.opt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								VMS/multinet_shr.opt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
multinet:multinet_socket_library.exe/share
 | 
			
		||||
							
								
								
									
										38
									
								
								VMS/openssl_utils.com
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								VMS/openssl_utils.com
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
$!
 | 
			
		||||
$!  APPS.COM
 | 
			
		||||
$!  Written By:  Robert Byer
 | 
			
		||||
$!               Vice-President
 | 
			
		||||
$!               A-Com Computing, Inc.
 | 
			
		||||
$!               byer@mail.all-net.net
 | 
			
		||||
$!
 | 
			
		||||
$!
 | 
			
		||||
$! Slightly modified by Richard Levitte <richard@levitte.org>
 | 
			
		||||
$!
 | 
			
		||||
$ OPENSSL  :== $SSLEXE:OPENSSL
 | 
			
		||||
$ VERIFY   :== $SSLEXE:OPENSSL VERIFY
 | 
			
		||||
$ ASN1PARSE:== $SSLEXE:OPENSSL ASN1PARS
 | 
			
		||||
$ REQ      :== $SSLEXE:OPENSSL REQ
 | 
			
		||||
$ DGST     :== $SSLEXE:OPENSSL DGST
 | 
			
		||||
$ DH       :== $SSLEXE:OPENSSL DH
 | 
			
		||||
$ ENC      :== $SSLEXE:OPENSSL ENC
 | 
			
		||||
$ GENDH    :== $SSLEXE:OPENSSL GENDH
 | 
			
		||||
$ ERRSTR   :== $SSLEXE:OPENSSL ERRSTR
 | 
			
		||||
$ CA       :== $SSLEXE:OPENSSL CA
 | 
			
		||||
$ CRL      :== $SSLEXE:OPENSSL CRL
 | 
			
		||||
$ RSA      :== $SSLEXE:OPENSSL RSA
 | 
			
		||||
$ DSA      :== $SSLEXE:OPENSSL DSA
 | 
			
		||||
$ DSAPARAM :== $SSLEXE:OPENSSL DSAPARAM
 | 
			
		||||
$ X509     :== $SSLEXE:OPENSSL X509
 | 
			
		||||
$ GENRSA   :== $SSLEXE:OPENSSL GENRSA
 | 
			
		||||
$ GENDSA   :== $SSLEXE:OPENSSL GENDSA
 | 
			
		||||
$ S_SERVER :== $SSLEXE:OPENSSL S_SERVER
 | 
			
		||||
$ S_CLIENT :== $SSLEXE:OPENSSL S_CLIENT
 | 
			
		||||
$ SPEED    :== $SSLEXE:OPENSSL SPEED
 | 
			
		||||
$ S_TIME   :== $SSLEXE:OPENSSL S_TIME
 | 
			
		||||
$ VERSION  :== $SSLEXE:OPENSSL VERSION
 | 
			
		||||
$ PKCS7    :== $SSLEXE:OPENSSL PKCS7
 | 
			
		||||
$ CRL2PKCS7:== $SSLEXE:OPENSSL CRL2P7
 | 
			
		||||
$ SESS_ID  :== $SSLEXE:OPENSSL SESS_ID
 | 
			
		||||
$ CIPHERS  :== $SSLEXE:OPENSSL CIPHERS
 | 
			
		||||
$ NSEQ     :== $SSLEXE:OPENSSL NSEQ
 | 
			
		||||
$ PKCS12   :== $SSLEXE:OPENSSL PKCS12
 | 
			
		||||
							
								
								
									
										1
									
								
								VMS/socketshr_shr.opt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								VMS/socketshr_shr.opt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
socketshr/share
 | 
			
		||||
							
								
								
									
										28
									
								
								VMS/test-includes.com
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								VMS/test-includes.com
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
$! Quick script to check how well including individual header files works
 | 
			
		||||
$! on VMS, even when the VMS macro isn't defined.
 | 
			
		||||
$
 | 
			
		||||
$	sav_def = f$env("DEFAULT")
 | 
			
		||||
$	here = f$parse("A.;0",f$ENV("PROCEDURE")) - "A.;0"
 | 
			
		||||
$	set default 'here'
 | 
			
		||||
$	set default [-.include.openssl]
 | 
			
		||||
$	define openssl 'f$env("DEFAULT")'
 | 
			
		||||
$	set default [--]
 | 
			
		||||
$
 | 
			
		||||
$ loop:
 | 
			
		||||
$	f = f$search("openssl:*.h")
 | 
			
		||||
$	if f .eqs. "" then goto loop_end
 | 
			
		||||
$	write sys$output "Checking ",f
 | 
			
		||||
$	open/write foo foo.c
 | 
			
		||||
$	write foo "#undef VMS"
 | 
			
		||||
$	write foo "#include <stdio.h>"
 | 
			
		||||
$	write foo "#include <openssl/",f$parse(f,,,"NAME"),".h>"
 | 
			
		||||
$	write foo "main()"
 | 
			
		||||
$	write foo "{printf(""foo\n"");}"
 | 
			
		||||
$	close foo
 | 
			
		||||
$	cc/STANDARD=ANSI89/NOLIST/PREFIX=ALL foo.c
 | 
			
		||||
$	delete foo.c;
 | 
			
		||||
$	goto loop
 | 
			
		||||
$ loop_end:
 | 
			
		||||
$	set default 'save_def'
 | 
			
		||||
$	exit
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								VMS/ucx_shr_decc.opt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								VMS/ucx_shr_decc.opt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
sys$share:ucx$ipc_shr.exe/share
 | 
			
		||||
							
								
								
									
										1
									
								
								VMS/ucx_shr_decc_log.opt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								VMS/ucx_shr_decc_log.opt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
ucx$ipc_shr/share
 | 
			
		||||
							
								
								
									
										1
									
								
								VMS/ucx_shr_vaxc.opt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								VMS/ucx_shr_vaxc.opt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
sys$library:ucx$ipc.olb/library
 | 
			
		||||
@@ -1 +1,5 @@
 | 
			
		||||
ssleay
 | 
			
		||||
openssl
 | 
			
		||||
Makefile.save
 | 
			
		||||
der_chop
 | 
			
		||||
der_chop.bak
 | 
			
		||||
CA.pl
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										220
									
								
								apps/CA.com
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										220
									
								
								apps/CA.com
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,220 @@
 | 
			
		||||
$! 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 ... 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 'openssl cmd' instead of 'cmd'.
 | 
			
		||||
$! 18-Apr-96 tjh    Original hacking
 | 
			
		||||
$!
 | 
			
		||||
$! Tim Hudson
 | 
			
		||||
$! tjh@cryptsoft.com
 | 
			
		||||
$!
 | 
			
		||||
$!
 | 
			
		||||
$! default ssleay.cnf file has setup as per the following
 | 
			
		||||
$! demoCA ... where everything is stored
 | 
			
		||||
$
 | 
			
		||||
$ IF F$TYPE(SSLEAY_CONFIG) .EQS. "" THEN SSLEAY_CONFIG := SSLLIB:SSLEAY.CNF
 | 
			
		||||
$
 | 
			
		||||
$ DAYS   = "-days 365"
 | 
			
		||||
$ REQ    = openssl + " req " + SSLEAY_CONFIG
 | 
			
		||||
$ CA     = openssl + " ca " + SSLEAY_CONFIG
 | 
			
		||||
$ VERIFY = openssl + " verify"
 | 
			
		||||
$ X509   = openssl + " x509"
 | 
			
		||||
$ PKCS12 = openssl + " pkcs12"
 | 
			
		||||
$ echo   = "write sys$Output"
 | 
			
		||||
$!
 | 
			
		||||
$ s = F$PARSE(F$ENVIRONMENT("DEFAULT"),"[]") - "].;"
 | 
			
		||||
$ CATOP  := 's'.demoCA
 | 
			
		||||
$ CAKEY  := ]cakey.pem
 | 
			
		||||
$ CACERT := ]cacert.pem
 | 
			
		||||
$
 | 
			
		||||
$ __INPUT := SYS$COMMAND
 | 
			
		||||
$ RET = 1
 | 
			
		||||
$!
 | 
			
		||||
$ i = 1
 | 
			
		||||
$opt_loop:
 | 
			
		||||
$ if i .gt. 8 then goto opt_loop_end
 | 
			
		||||
$
 | 
			
		||||
$ prog_opt = F$EDIT(P'i',"lowercase")
 | 
			
		||||
$
 | 
			
		||||
$ IF (prog_opt .EQS. "?" .OR. prog_opt .EQS. "-h" .OR. prog_opt .EQS. "-help") 
 | 
			
		||||
$ THEN
 | 
			
		||||
$   echo "usage: CA -newcert|-newreq|-newca|-sign|-verify" 
 | 
			
		||||
$   exit
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$ IF (prog_opt .EQS. "-input")
 | 
			
		||||
$ THEN
 | 
			
		||||
$   ! Get input from somewhere other than SYS$COMMAND
 | 
			
		||||
$   i = i + 1
 | 
			
		||||
$   __INPUT = P'i'
 | 
			
		||||
$   GOTO opt_loop_continue
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$ IF (prog_opt .EQS. "-newcert")
 | 
			
		||||
$ THEN
 | 
			
		||||
$   ! Create a certificate.
 | 
			
		||||
$   DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$   REQ -new -x509 -keyout newreq.pem -out newreq.pem 'DAYS'
 | 
			
		||||
$   RET=$STATUS
 | 
			
		||||
$   echo "Certificate (and private key) is in newreq.pem"
 | 
			
		||||
$   GOTO opt_loop_continue
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$ IF (prog_opt .EQS. "-newreq")
 | 
			
		||||
$ THEN
 | 
			
		||||
$   ! Create a certificate request
 | 
			
		||||
$   DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$   REQ -new -keyout newreq.pem -out newreq.pem 'DAYS'
 | 
			
		||||
$   RET=$STATUS
 | 
			
		||||
$   echo "Request (and private key) is in newreq.pem"
 | 
			
		||||
$   GOTO opt_loop_continue
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$ IF (prog_opt .EQS. "-newca")
 | 
			
		||||
$ THEN
 | 
			
		||||
$   ! If explicitly asked for or it doesn't exist then setup the directory
 | 
			
		||||
$   ! structure that Eric likes to manage things.
 | 
			
		||||
$   IF F$SEARCH(CATOP+"]serial.") .EQS. ""
 | 
			
		||||
$   THEN
 | 
			
		||||
$     CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP']
 | 
			
		||||
$     CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.certs]
 | 
			
		||||
$     CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.crl]
 | 
			
		||||
$     CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.newcerts]
 | 
			
		||||
$     CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.private]
 | 
			
		||||
$
 | 
			
		||||
$     OPEN   /WRITE ser_file 'CATOP']serial. 
 | 
			
		||||
$     WRITE ser_file "01"
 | 
			
		||||
$     CLOSE ser_file
 | 
			
		||||
$     APPEND/NEW NL: 'CATOP']index.txt
 | 
			
		||||
$
 | 
			
		||||
$     ! The following is to make sure access() doesn't get confused.  It
 | 
			
		||||
$     ! really needs one file in the directory to give correct answers...
 | 
			
		||||
$     COPY NLA0: 'CATOP'.certs].;
 | 
			
		||||
$     COPY NLA0: 'CATOP'.crl].;
 | 
			
		||||
$     COPY NLA0: 'CATOP'.newcerts].;
 | 
			
		||||
$     COPY NLA0: 'CATOP'.private].;
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$   IF F$SEARCH(CATOP+".private"+CAKEY) .EQS. ""
 | 
			
		||||
$   THEN
 | 
			
		||||
$     READ '__INPUT' FILE -
 | 
			
		||||
	   /PROMT="CA certificate filename (or enter to create)"
 | 
			
		||||
$     IF F$SEARCH(FILE) .NES. ""
 | 
			
		||||
$     THEN
 | 
			
		||||
$       COPY 'FILE' 'CATOP'.private'CAKEY'
 | 
			
		||||
$	RET=$STATUS
 | 
			
		||||
$     ELSE
 | 
			
		||||
$       echo "Making CA certificate ..."
 | 
			
		||||
$       DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$       REQ -new -x509 -keyout 'CATOP'.private'CAKEY' -
 | 
			
		||||
		       -out 'CATOP''CACERT' 'DAYS'
 | 
			
		||||
$	RET=$STATUS
 | 
			
		||||
$     ENDIF
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$   GOTO opt_loop_continue
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$ IF (prog_opt .EQS. "-pkcs12")
 | 
			
		||||
$ THEN
 | 
			
		||||
$   i = i + 1
 | 
			
		||||
$   cname = P'i'
 | 
			
		||||
$   IF cname .EQS. "" THEN cname = "My certificate"
 | 
			
		||||
$   PKCS12 -in newcert.pem -inkey newreq.pem -certfile 'CATOP''CACERT -
 | 
			
		||||
	   -out newcert.p12 -export -name "''cname'"
 | 
			
		||||
$   RET=$STATUS
 | 
			
		||||
$   exit RET
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$ IF (prog_opt .EQS. "-xsign")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$   DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$   CA -policy policy_anything -infiles newreq.pem
 | 
			
		||||
$   RET=$STATUS
 | 
			
		||||
$   GOTO opt_loop_continue
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$ IF ((prog_opt .EQS. "-sign") .OR. (prog_opt .EQS. "-signreq"))
 | 
			
		||||
$ THEN
 | 
			
		||||
$!   
 | 
			
		||||
$   DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$   CA -policy policy_anything -out newcert.pem -infiles newreq.pem
 | 
			
		||||
$   RET=$STATUS
 | 
			
		||||
$   type newcert.pem
 | 
			
		||||
$   echo "Signed certificate is in newcert.pem"
 | 
			
		||||
$   GOTO opt_loop_continue
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$ IF (prog_opt .EQS. "-signcert")
 | 
			
		||||
$  THEN
 | 
			
		||||
$!   
 | 
			
		||||
$   echo "Cert passphrase will be requested twice - bug?"
 | 
			
		||||
$   DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$   X509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem
 | 
			
		||||
$   DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$   CA -policy policy_anything -out newcert.pem -infiles tmp.pem
 | 
			
		||||
y
 | 
			
		||||
y
 | 
			
		||||
$   type newcert.pem
 | 
			
		||||
$   echo "Signed certificate is in newcert.pem"
 | 
			
		||||
$   GOTO opt_loop_continue
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$ IF (prog_opt .EQS. "-verify")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!   
 | 
			
		||||
$   i = i + 1
 | 
			
		||||
$   IF (p'i' .EQS. "")
 | 
			
		||||
$   THEN
 | 
			
		||||
$     DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$     VERIFY "-CAfile" 'CATOP''CACERT' newcert.pem
 | 
			
		||||
$   ELSE
 | 
			
		||||
$     j = i
 | 
			
		||||
$    verify_opt_loop:
 | 
			
		||||
$     IF j .GT. 8 THEN GOTO verify_opt_loop_end
 | 
			
		||||
$     IF p'j' .NES. ""
 | 
			
		||||
$     THEN 
 | 
			
		||||
$       DEFINE/USER SYS$INPUT '__INPUT'
 | 
			
		||||
$       __tmp = p'j'
 | 
			
		||||
$       VERIFY "-CAfile" 'CATOP''CACERT' '__tmp'
 | 
			
		||||
$       tmp=$STATUS
 | 
			
		||||
$       IF tmp .NE. 0 THEN RET=tmp
 | 
			
		||||
$     ENDIF
 | 
			
		||||
$     j = j + 1
 | 
			
		||||
$     GOTO verify_opt_loop
 | 
			
		||||
$    verify_opt_loop_end:
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$   
 | 
			
		||||
$   GOTO opt_loop_end
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$ IF (prog_opt .NES. "")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!   
 | 
			
		||||
$   echo "Unknown argument ''prog_opt'"
 | 
			
		||||
$   
 | 
			
		||||
$   EXIT 3
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$
 | 
			
		||||
$opt_loop_continue:
 | 
			
		||||
$ i = i + 1
 | 
			
		||||
$ GOTO opt_loop
 | 
			
		||||
$
 | 
			
		||||
$opt_loop_end:
 | 
			
		||||
$ EXIT 'RET'
 | 
			
		||||
							
								
								
									
										173
									
								
								apps/CA.pl.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										173
									
								
								apps/CA.pl.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,173 @@
 | 
			
		||||
#!/usr/local/bin/perl
 | 
			
		||||
#
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
$SSLEAY_CONFIG=$ENV{"SSLEAY_CONFIG"};
 | 
			
		||||
$DAYS="-days 365";
 | 
			
		||||
$REQ="openssl req $SSLEAY_CONFIG";
 | 
			
		||||
$CA="openssl ca $SSLEAY_CONFIG";
 | 
			
		||||
$VERIFY="openssl verify";
 | 
			
		||||
$X509="openssl x509";
 | 
			
		||||
$PKCS12="openssl pkcs12";
 | 
			
		||||
 | 
			
		||||
$CATOP="./demoCA";
 | 
			
		||||
$CAKEY="cakey.pem";
 | 
			
		||||
$CACERT="cacert.pem";
 | 
			
		||||
 | 
			
		||||
$DIRMODE = 0777;
 | 
			
		||||
 | 
			
		||||
$RET = 0;
 | 
			
		||||
 | 
			
		||||
foreach (@ARGV) {
 | 
			
		||||
	if ( /^(-\?|-h|-help)$/ ) {
 | 
			
		||||
	    print STDERR "usage: CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify\n";
 | 
			
		||||
	    exit 0;
 | 
			
		||||
	} elsif (/^-newcert$/) {
 | 
			
		||||
	    # create a certificate
 | 
			
		||||
	    system ("$REQ -new -x509 -keyout newreq.pem -out newreq.pem $DAYS");
 | 
			
		||||
	    $RET=$?;
 | 
			
		||||
	    print "Certificate (and private key) is in newreq.pem\n"
 | 
			
		||||
	} elsif (/^-newreq$/) {
 | 
			
		||||
	    # create a certificate request
 | 
			
		||||
	    system ("$REQ -new -keyout newreq.pem -out newreq.pem $DAYS");
 | 
			
		||||
	    $RET=$?;
 | 
			
		||||
	    print "Request (and private key) is in newreq.pem\n";
 | 
			
		||||
	} elsif (/^-newreq-nodes$/) {
 | 
			
		||||
	    # create a certificate request
 | 
			
		||||
	    system ("$REQ -new -nodes -keyout newreq.pem -out newreq.pem $DAYS");
 | 
			
		||||
	    $RET=$?;
 | 
			
		||||
	    print "Request (and private key) is in newreq.pem\n";
 | 
			
		||||
	} elsif (/^-newca$/) {
 | 
			
		||||
		# if explicitly asked for or it doesn't exist then setup the
 | 
			
		||||
		# directory structure that Eric likes to manage things 
 | 
			
		||||
	    $NEW="1";
 | 
			
		||||
	    if ( "$NEW" || ! -f "${CATOP}/serial" ) {
 | 
			
		||||
		# create the directory hierarchy
 | 
			
		||||
		mkdir $CATOP, $DIRMODE;
 | 
			
		||||
		mkdir "${CATOP}/certs", $DIRMODE;
 | 
			
		||||
		mkdir "${CATOP}/crl", $DIRMODE ;
 | 
			
		||||
		mkdir "${CATOP}/newcerts", $DIRMODE;
 | 
			
		||||
		mkdir "${CATOP}/private", $DIRMODE;
 | 
			
		||||
		open OUT, ">${CATOP}/serial";
 | 
			
		||||
		print OUT "01\n";
 | 
			
		||||
		close OUT;
 | 
			
		||||
		open OUT, ">${CATOP}/index.txt";
 | 
			
		||||
		close OUT;
 | 
			
		||||
	    }
 | 
			
		||||
	    if ( ! -f "${CATOP}/private/$CAKEY" ) {
 | 
			
		||||
		print "CA certificate filename (or enter to create)\n";
 | 
			
		||||
		$FILE = <STDIN>;
 | 
			
		||||
 | 
			
		||||
		chop $FILE;
 | 
			
		||||
 | 
			
		||||
		# ask user for existing CA certificate
 | 
			
		||||
		if ($FILE) {
 | 
			
		||||
		    cp_pem($FILE,"${CATOP}/private/$CAKEY", "PRIVATE");
 | 
			
		||||
		    cp_pem($FILE,"${CATOP}/$CACERT", "CERTIFICATE");
 | 
			
		||||
		    $RET=$?;
 | 
			
		||||
		} else {
 | 
			
		||||
		    print "Making CA certificate ...\n";
 | 
			
		||||
		    system ("$REQ -new -x509 -keyout " .
 | 
			
		||||
			"${CATOP}/private/$CAKEY -out ${CATOP}/$CACERT $DAYS");
 | 
			
		||||
		    $RET=$?;
 | 
			
		||||
		}
 | 
			
		||||
	    }
 | 
			
		||||
	} elsif (/^-pkcs12$/) {
 | 
			
		||||
	    my $cname = $ARGV[1];
 | 
			
		||||
	    $cname = "My Certificate" unless defined $cname;
 | 
			
		||||
	    system ("$PKCS12 -in newcert.pem -inkey newreq.pem " .
 | 
			
		||||
			"-certfile ${CATOP}/$CACERT -out newcert.p12 " .
 | 
			
		||||
			"-export -name \"$cname\"");
 | 
			
		||||
	    $RET=$?;
 | 
			
		||||
	    exit $RET;
 | 
			
		||||
	} elsif (/^-xsign$/) {
 | 
			
		||||
	    system ("$CA -policy policy_anything -infiles newreq.pem");
 | 
			
		||||
	    $RET=$?;
 | 
			
		||||
	} elsif (/^(-sign|-signreq)$/) {
 | 
			
		||||
	    system ("$CA -policy policy_anything -out newcert.pem " .
 | 
			
		||||
							"-infiles newreq.pem");
 | 
			
		||||
	    $RET=$?;
 | 
			
		||||
	    print "Signed certificate is in newcert.pem\n";
 | 
			
		||||
	} elsif (/^(-signCA)$/) {
 | 
			
		||||
	    system ("$CA -policy policy_anything -out newcert.pem " .
 | 
			
		||||
					"-extensions v3_ca -infiles newreq.pem");
 | 
			
		||||
	    $RET=$?;
 | 
			
		||||
	    print "Signed CA certificate is in newcert.pem\n";
 | 
			
		||||
	} elsif (/^-signcert$/) {
 | 
			
		||||
	    system ("$X509 -x509toreq -in newreq.pem -signkey newreq.pem " .
 | 
			
		||||
								"-out tmp.pem");
 | 
			
		||||
	    system ("$CA -policy policy_anything -out newcert.pem " .
 | 
			
		||||
							"-infiles tmp.pem");
 | 
			
		||||
	    $RET = $?;
 | 
			
		||||
	    print "Signed certificate is in newcert.pem\n";
 | 
			
		||||
	} elsif (/^-verify$/) {
 | 
			
		||||
	    if (shift) {
 | 
			
		||||
		foreach $j (@ARGV) {
 | 
			
		||||
		    system ("$VERIFY -CAfile $CATOP/$CACERT $j");
 | 
			
		||||
		    $RET=$? if ($? != 0);
 | 
			
		||||
		}
 | 
			
		||||
		exit $RET;
 | 
			
		||||
	    } else {
 | 
			
		||||
		    system ("$VERIFY -CAfile $CATOP/$CACERT newcert.pem");
 | 
			
		||||
		    $RET=$?;
 | 
			
		||||
	    	    exit 0;
 | 
			
		||||
	    }
 | 
			
		||||
	} else {
 | 
			
		||||
	    print STDERR "Unknown arg $_\n";
 | 
			
		||||
	    print STDERR "usage: CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify\n";
 | 
			
		||||
	    exit 1;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exit $RET;
 | 
			
		||||
 | 
			
		||||
sub cp_pem {
 | 
			
		||||
my ($infile, $outfile, $bound) = @_;
 | 
			
		||||
open IN, $infile;
 | 
			
		||||
open OUT, ">$outfile";
 | 
			
		||||
my $flag = 0;
 | 
			
		||||
while (<IN>) {
 | 
			
		||||
	$flag = 1 if (/^-----BEGIN.*$bound/) ;
 | 
			
		||||
	print OUT $_ if ($flag);
 | 
			
		||||
	if (/^-----END.*$bound/) {
 | 
			
		||||
		close IN;
 | 
			
		||||
		close OUT;
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										12
									
								
								apps/CA.sh
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								apps/CA.sh
									
									
									
									
									
								
							@@ -27,14 +27,14 @@
 | 
			
		||||
# tjh@cryptsoft.com
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# default ssleay.cnf file has setup as per the following
 | 
			
		||||
# default openssl.cnf file has setup as per the following
 | 
			
		||||
# demoCA ... where everything is stored
 | 
			
		||||
 | 
			
		||||
DAYS="-days 365"
 | 
			
		||||
REQ="ssleay req $SSLEAY_CONFIG"
 | 
			
		||||
CA="ssleay ca $SSLEAY_CONFIG"
 | 
			
		||||
VERIFY="ssleay verify"
 | 
			
		||||
X509="ssleay x509"
 | 
			
		||||
REQ="openssl req $SSLEAY_CONFIG"
 | 
			
		||||
CA="openssl ca $SSLEAY_CONFIG"
 | 
			
		||||
VERIFY="openssl verify"
 | 
			
		||||
X509="openssl x509"
 | 
			
		||||
 | 
			
		||||
CATOP=./demoCA
 | 
			
		||||
CAKEY=./cakey.pem
 | 
			
		||||
@@ -60,7 +60,7 @@ case $i in
 | 
			
		||||
    echo "Request (and private key) is in newreq.pem"
 | 
			
		||||
    ;;
 | 
			
		||||
-newca)     
 | 
			
		||||
    # if explictly asked for or it doesn't exist then setup the directory
 | 
			
		||||
    # if explicitly asked for or it doesn't exist then setup the directory
 | 
			
		||||
    # structure that Eric likes to manage things 
 | 
			
		||||
    NEW="1"
 | 
			
		||||
    if [ "$NEW" -o ! -f ${CATOP}/serial ]; then
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1232
									
								
								apps/Makefile.ssl
									
									
									
									
									
								
							
							
						
						
									
										1232
									
								
								apps/Makefile.ssl
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										218
									
								
								apps/app_rand.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										218
									
								
								apps/app_rand.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,218 @@
 | 
			
		||||
/* apps/app_rand.c */
 | 
			
		||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this software
 | 
			
		||||
 *    must display the following acknowledgement:
 | 
			
		||||
 *    "This product includes cryptographic software written by
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1998-2000 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
 *    the documentation and/or other materials provided with the
 | 
			
		||||
 *    distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this
 | 
			
		||||
 *    software must display the following acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
			
		||||
 *    endorse or promote products derived from this software without
 | 
			
		||||
 *    prior written permission. For written permission, please contact
 | 
			
		||||
 *    openssl-core@openssl.org.
 | 
			
		||||
 *
 | 
			
		||||
 * 5. Products derived from this software may not be called "OpenSSL"
 | 
			
		||||
 *    nor may "OpenSSL" appear in their names without prior written
 | 
			
		||||
 *    permission of the OpenSSL Project.
 | 
			
		||||
 *
 | 
			
		||||
 * 6. Redistributions of any form whatsoever must retain the following
 | 
			
		||||
 *    acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
			
		||||
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
			
		||||
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
			
		||||
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
			
		||||
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 * ====================================================================
 | 
			
		||||
 *
 | 
			
		||||
 * This product includes cryptographic software written by Eric Young
 | 
			
		||||
 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define NON_MAIN
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#undef NON_MAIN
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int seeded = 0;
 | 
			
		||||
static int egdsocket = 0;
 | 
			
		||||
 | 
			
		||||
int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn)
 | 
			
		||||
	{
 | 
			
		||||
	int consider_randfile = (file == NULL);
 | 
			
		||||
	char buffer[200];
 | 
			
		||||
	
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
	BIO_printf(bio_e,"Loading 'screen' into random state -");
 | 
			
		||||
	BIO_flush(bio_e);
 | 
			
		||||
	RAND_screen();
 | 
			
		||||
	BIO_printf(bio_e," done\n");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (file == NULL)
 | 
			
		||||
		file = RAND_file_name(buffer, sizeof buffer);
 | 
			
		||||
	else if (RAND_egd(file) > 0)
 | 
			
		||||
		{
 | 
			
		||||
		/* we try if the given filename is an EGD socket.
 | 
			
		||||
		   if it is, we don't write anything back to the file. */
 | 
			
		||||
		egdsocket = 1;
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
	if (file == NULL || !RAND_load_file(file, -1))
 | 
			
		||||
		{
 | 
			
		||||
		if (RAND_status() == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!dont_warn)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_e,"unable to load 'random state'\n");
 | 
			
		||||
				BIO_printf(bio_e,"This means that the random number generator has not been seeded\n");
 | 
			
		||||
				BIO_printf(bio_e,"with much random data.\n");
 | 
			
		||||
				if (consider_randfile) /* explanation does not apply when a file is explicitly named */
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_e,"Consider setting the RANDFILE environment variable to point at a file that\n");
 | 
			
		||||
					BIO_printf(bio_e,"'random' data can be kept in (the file will be overwritten).\n");
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			return 0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	seeded = 1;
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
long app_RAND_load_files(char *name)
 | 
			
		||||
	{
 | 
			
		||||
	char *p,*n;
 | 
			
		||||
	int last;
 | 
			
		||||
	long tot=0;
 | 
			
		||||
	int egd;
 | 
			
		||||
	
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		last=0;
 | 
			
		||||
		for (p=name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++);
 | 
			
		||||
		if (*p == '\0') last=1;
 | 
			
		||||
		*p='\0';
 | 
			
		||||
		n=name;
 | 
			
		||||
		name=p+1;
 | 
			
		||||
		if (*n == '\0') break;
 | 
			
		||||
 | 
			
		||||
		egd=RAND_egd(n);
 | 
			
		||||
		if (egd > 0)
 | 
			
		||||
			tot+=egd;
 | 
			
		||||
		else
 | 
			
		||||
			tot+=RAND_load_file(n,-1);
 | 
			
		||||
		if (last) break;
 | 
			
		||||
		}
 | 
			
		||||
	if (tot > 512)
 | 
			
		||||
		app_RAND_allow_write_file();
 | 
			
		||||
	return(tot);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int app_RAND_write_file(const char *file, BIO *bio_e)
 | 
			
		||||
	{
 | 
			
		||||
	char buffer[200];
 | 
			
		||||
	
 | 
			
		||||
	if (egdsocket || !seeded)
 | 
			
		||||
		/* If we did not manage to read the seed file,
 | 
			
		||||
		 * we should not write a low-entropy seed file back --
 | 
			
		||||
		 * it would suppress a crucial warning the next time
 | 
			
		||||
		 * we want to use it. */
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (file == NULL)
 | 
			
		||||
		file = RAND_file_name(buffer, sizeof buffer);
 | 
			
		||||
	if (file == NULL || !RAND_write_file(file))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_e,"unable to write 'random state'\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void app_RAND_allow_write_file(void)
 | 
			
		||||
	{
 | 
			
		||||
	seeded = 1;
 | 
			
		||||
	}
 | 
			
		||||
							
								
								
									
										1186
									
								
								apps/apps.c
									
									
									
									
									
								
							
							
						
						
									
										1186
									
								
								apps/apps.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										182
									
								
								apps/apps.h
									
									
									
									
									
								
							
							
						
						
									
										182
									
								
								apps/apps.h
									
									
									
									
									
								
							@@ -55,41 +55,112 @@
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
 *    the documentation and/or other materials provided with the
 | 
			
		||||
 *    distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this
 | 
			
		||||
 *    software must display the following acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
			
		||||
 *    endorse or promote products derived from this software without
 | 
			
		||||
 *    prior written permission. For written permission, please contact
 | 
			
		||||
 *    openssl-core@openssl.org.
 | 
			
		||||
 *
 | 
			
		||||
 * 5. Products derived from this software may not be called "OpenSSL"
 | 
			
		||||
 *    nor may "OpenSSL" appear in their names without prior written
 | 
			
		||||
 *    permission of the OpenSSL Project.
 | 
			
		||||
 *
 | 
			
		||||
 * 6. Redistributions of any form whatsoever must retain the following
 | 
			
		||||
 *    acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
			
		||||
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
			
		||||
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
			
		||||
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
			
		||||
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 * ====================================================================
 | 
			
		||||
 *
 | 
			
		||||
 * This product includes cryptographic software written by Eric Young
 | 
			
		||||
 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef HEADER_APPS_H
 | 
			
		||||
#define HEADER_APPS_H
 | 
			
		||||
 | 
			
		||||
#include "e_os.h"
 | 
			
		||||
 | 
			
		||||
#include "buffer.h"
 | 
			
		||||
#include "bio.h"
 | 
			
		||||
#include "crypto.h"
 | 
			
		||||
#include "progs.h"
 | 
			
		||||
#include <openssl/buffer.h>
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/crypto.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/lhash.h>
 | 
			
		||||
#include <openssl/conf.h>
 | 
			
		||||
#include <openssl/txt_db.h>
 | 
			
		||||
#include <openssl/engine.h>
 | 
			
		||||
#include <openssl/ossl_typ.h>
 | 
			
		||||
 | 
			
		||||
#ifdef NO_STDIO
 | 
			
		||||
BIO_METHOD *BIO_s_file();
 | 
			
		||||
#endif
 | 
			
		||||
int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn);
 | 
			
		||||
int app_RAND_write_file(const char *file, BIO *bio_e);
 | 
			
		||||
/* When `file' is NULL, use defaults.
 | 
			
		||||
 * `bio_e' is for error messages. */
 | 
			
		||||
void app_RAND_allow_write_file(void);
 | 
			
		||||
long app_RAND_load_files(char *file); /* `file' is a list of files to read,
 | 
			
		||||
                                       * separated by LIST_SEPARATOR_CHAR
 | 
			
		||||
                                       * (see e_os.h).  The string is
 | 
			
		||||
                                       * destroyed! */
 | 
			
		||||
 | 
			
		||||
#ifdef WIN32
 | 
			
		||||
#ifdef OPENSSL_SYS_WIN32
 | 
			
		||||
#define rename(from,to) WIN32_rename((from),(to))
 | 
			
		||||
int WIN32_rename(char *oldname,char *newname);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* VMS below version 7.0 doesn't have strcasecmp() */
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
#define strcasecmp(str1,str2) VMS_strcasecmp((str1),(str2))
 | 
			
		||||
int VMS_strcasecmp(const char *str1, const char *str2);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef MONOLITH
 | 
			
		||||
 | 
			
		||||
#define MAIN(a,v)	main(a,v)
 | 
			
		||||
 | 
			
		||||
#ifndef NON_MAIN
 | 
			
		||||
CONF *config=NULL;
 | 
			
		||||
BIO *bio_err=NULL;
 | 
			
		||||
#else
 | 
			
		||||
extern CONF *config;
 | 
			
		||||
extern BIO *bio_err;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define MAIN(a,v)	PROG(a,v)
 | 
			
		||||
#include "conf.h"
 | 
			
		||||
extern LHASH *config;
 | 
			
		||||
extern CONF *config;
 | 
			
		||||
extern char *default_config_file;
 | 
			
		||||
extern BIO *bio_err;
 | 
			
		||||
 | 
			
		||||
@@ -103,22 +174,35 @@ extern BIO *bio_err;
 | 
			
		||||
#define do_pipe_sig()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MONOLITH) && !defined(SSLEAY)
 | 
			
		||||
#  define apps_startup()	do_pipe_sig()
 | 
			
		||||
#if defined(MONOLITH) && !defined(OPENSSL_C)
 | 
			
		||||
#  define apps_startup() \
 | 
			
		||||
		do_pipe_sig()
 | 
			
		||||
#  define apps_shutdown()
 | 
			
		||||
#else
 | 
			
		||||
#  if defined(MSDOS) || defined(WIN16) || defined(WIN32)
 | 
			
		||||
#  if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WIN16) || \
 | 
			
		||||
   defined(OPENSSL_SYS_WIN32)
 | 
			
		||||
#    ifdef _O_BINARY
 | 
			
		||||
#      define apps_startup() \
 | 
			
		||||
		_fmode=_O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
			
		||||
		SSLeay_add_all_algorithms()
 | 
			
		||||
		do { _fmode=_O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
			
		||||
		ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
 | 
			
		||||
		ENGINE_load_builtin_engines(); setup_ui_method(); } while(0)
 | 
			
		||||
#    else
 | 
			
		||||
#      define apps_startup() \
 | 
			
		||||
		_fmode=O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
			
		||||
		SSLeay_add_all_algorithms()
 | 
			
		||||
		do { _fmode=O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
			
		||||
		ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
 | 
			
		||||
		ENGINE_load_builtin_engines(); setup_ui_method(); } while(0)
 | 
			
		||||
#    endif
 | 
			
		||||
#  else
 | 
			
		||||
#    define apps_startup()	do_pipe_sig(); SSLeay_add_all_algorithms();
 | 
			
		||||
#    define apps_startup() \
 | 
			
		||||
		do { do_pipe_sig(); OpenSSL_add_all_algorithms(); \
 | 
			
		||||
		ERR_load_crypto_strings(); ENGINE_load_builtin_engines(); \
 | 
			
		||||
		setup_ui_method(); } while(0)
 | 
			
		||||
#  endif
 | 
			
		||||
#  define apps_shutdown() \
 | 
			
		||||
		do { CONF_modules_unload(1); destroy_ui_method(); \
 | 
			
		||||
		EVP_cleanup(); ENGINE_cleanup(); \
 | 
			
		||||
		CRYPTO_cleanup_all_ex_data(); ERR_remove_state(0); \
 | 
			
		||||
		ERR_free_strings(); } while(0)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef struct args_st
 | 
			
		||||
@@ -127,24 +211,72 @@ typedef struct args_st
 | 
			
		||||
	int count;
 | 
			
		||||
	} ARGS;
 | 
			
		||||
 | 
			
		||||
#ifndef NOPROTO
 | 
			
		||||
#define PW_MIN_LENGTH 4
 | 
			
		||||
typedef struct pw_cb_data
 | 
			
		||||
	{
 | 
			
		||||
	const void *password;
 | 
			
		||||
	const char *prompt_info;
 | 
			
		||||
	} PW_CB_DATA;
 | 
			
		||||
 | 
			
		||||
int password_callback(char *buf, int bufsiz, int verify,
 | 
			
		||||
	PW_CB_DATA *cb_data);
 | 
			
		||||
 | 
			
		||||
int setup_ui_method(void);
 | 
			
		||||
void destroy_ui_method(void);
 | 
			
		||||
 | 
			
		||||
int should_retry(int i);
 | 
			
		||||
int args_from_file(char *file, int *argc, char **argv[]);
 | 
			
		||||
int str2fmt(char *s);
 | 
			
		||||
void program_name(char *in,char *out,int size);
 | 
			
		||||
int chopup_args(ARGS *arg,char *buf, int *argc, char **argv[]);
 | 
			
		||||
#else
 | 
			
		||||
int should_retry();
 | 
			
		||||
int args_from_file();
 | 
			
		||||
int str2fmt();
 | 
			
		||||
void program_name();
 | 
			
		||||
int chopup_args();
 | 
			
		||||
#ifdef HEADER_X509_H
 | 
			
		||||
int dump_cert_text(BIO *out, X509 *x);
 | 
			
		||||
void print_name(BIO *out, char *title, X509_NAME *nm, unsigned long lflags);
 | 
			
		||||
#endif
 | 
			
		||||
int set_cert_ex(unsigned long *flags, const char *arg);
 | 
			
		||||
int set_name_ex(unsigned long *flags, const char *arg);
 | 
			
		||||
int set_ext_copy(int *copy_type, const char *arg);
 | 
			
		||||
int copy_extensions(X509 *x, X509_REQ *req, int copy_type);
 | 
			
		||||
int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2);
 | 
			
		||||
int add_oid_section(BIO *err, CONF *conf);
 | 
			
		||||
X509 *load_cert(BIO *err, const char *file, int format,
 | 
			
		||||
	const char *pass, ENGINE *e, const char *cert_descrip);
 | 
			
		||||
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,
 | 
			
		||||
	const char *pass, ENGINE *e, const char *key_descrip);
 | 
			
		||||
STACK_OF(X509) *load_certs(BIO *err, const char *file, int format,
 | 
			
		||||
	const char *pass, ENGINE *e, const char *cert_descrip);
 | 
			
		||||
X509_STORE *setup_verify(BIO *bp, char *CAfile, char *CApath);
 | 
			
		||||
ENGINE *setup_engine(BIO *err, const char *engine, int debug);
 | 
			
		||||
 | 
			
		||||
int load_config(BIO *err, CONF *cnf);
 | 
			
		||||
char *make_config_name(void);
 | 
			
		||||
 | 
			
		||||
/* Functions defined in ca.c and also used in ocsp.c */
 | 
			
		||||
int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
 | 
			
		||||
			ASN1_GENERALIZEDTIME **pinvtm, char *str);
 | 
			
		||||
int make_serial_index(TXT_DB *db);
 | 
			
		||||
 | 
			
		||||
X509_NAME *do_subject(char *str, long chtype);
 | 
			
		||||
 | 
			
		||||
#define FORMAT_UNDEF    0
 | 
			
		||||
#define FORMAT_ASN1     1
 | 
			
		||||
#define FORMAT_TEXT     2
 | 
			
		||||
#define FORMAT_PEM      3
 | 
			
		||||
#define FORMAT_NETSCAPE 4
 | 
			
		||||
#define FORMAT_PKCS12   5
 | 
			
		||||
#define FORMAT_SMIME    6
 | 
			
		||||
#define FORMAT_ENGINE   7
 | 
			
		||||
#define FORMAT_IISSGC	8	/* XXX this stupid macro helps us to avoid
 | 
			
		||||
				 * adding yet another param to load_*key() */
 | 
			
		||||
 | 
			
		||||
#define EXT_COPY_NONE	0
 | 
			
		||||
#define EXT_COPY_ADD	1
 | 
			
		||||
#define EXT_COPY_ALL	2
 | 
			
		||||
 | 
			
		||||
#define NETSCAPE_CERT_HDR	"certificate"
 | 
			
		||||
 | 
			
		||||
#define APP_PASS_LEN	1024
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										175
									
								
								apps/asn1pars.c
									
									
									
									
									
								
							
							
						
						
									
										175
									
								
								apps/asn1pars.c
									
									
									
									
									
								
							@@ -64,32 +64,35 @@
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include "err.h"
 | 
			
		||||
#include "evp.h"
 | 
			
		||||
#include "x509.h"
 | 
			
		||||
#include "pem.h"
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -i		- indent the details by depth
 | 
			
		||||
 * -offset	- where in the file to start
 | 
			
		||||
 * -length	- how many bytes to use
 | 
			
		||||
 * -oid file	- extra oid decription file
 | 
			
		||||
 * -oid file	- extra oid description file
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	asn1parse_main
 | 
			
		||||
 | 
			
		||||
int MAIN(argc, argv)
 | 
			
		||||
int argc;
 | 
			
		||||
char **argv;
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int i,badops=0,offset=0,ret=1,j;
 | 
			
		||||
	unsigned int length=0;
 | 
			
		||||
	long num,tmplen;
 | 
			
		||||
	BIO *in=NULL,*out=NULL,*b64=NULL;
 | 
			
		||||
	int informat,indent=0;
 | 
			
		||||
	char *infile=NULL,*str=NULL,*prog,*oidfile=NULL;
 | 
			
		||||
	BIO *in=NULL,*out=NULL,*b64=NULL, *derout = NULL;
 | 
			
		||||
	int informat,indent=0, noout = 0, dump = 0;
 | 
			
		||||
	char *infile=NULL,*str=NULL,*prog,*oidfile=NULL, *derfile=NULL;
 | 
			
		||||
	char *genstr=NULL, *genconf=NULL;
 | 
			
		||||
	unsigned char *tmpbuf;
 | 
			
		||||
	BUF_MEM *buf=NULL;
 | 
			
		||||
	STACK *osk=NULL;
 | 
			
		||||
@@ -103,12 +106,15 @@ char **argv;
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	if ((osk=sk_new_null()) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"Malloc failure\n");
 | 
			
		||||
		BIO_printf(bio_err,"Memory allocation failure\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
@@ -123,10 +129,16 @@ char **argv;
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			derfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-i") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			indent=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0) noout = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-oid") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
@@ -143,11 +155,31 @@ char **argv;
 | 
			
		||||
			length= atoi(*(++argv));
 | 
			
		||||
			if (length == 0) goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-dump") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			dump= -1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-dlimit") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			dump= atoi(*(++argv));
 | 
			
		||||
			if (dump <= 0) goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-strparse") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			sk_push(osk,*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-genstr") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			genstr= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-genconf") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			genconf= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
@@ -164,14 +196,20 @@ bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - one of DER TXT PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg       inout file\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg       input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg      output file (output format is always DER\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout arg    don't produce any output\n");
 | 
			
		||||
		BIO_printf(bio_err," -offset arg   offset into file\n");
 | 
			
		||||
		BIO_printf(bio_err," -length arg   lenth of section in file\n");
 | 
			
		||||
		BIO_printf(bio_err," -length arg   length of section in file\n");
 | 
			
		||||
		BIO_printf(bio_err," -i            indent entries\n");
 | 
			
		||||
		BIO_printf(bio_err," -dump         dump unknown data in hex form\n");
 | 
			
		||||
		BIO_printf(bio_err," -dlimit arg   dump the first arg bytes of unknown data in hex form\n");
 | 
			
		||||
		BIO_printf(bio_err," -oid file     file of extra oid definitions\n");
 | 
			
		||||
		BIO_printf(bio_err," -strparse offset\n");
 | 
			
		||||
		BIO_printf(bio_err,"               a series of these can be used to 'dig' into multiple\n");
 | 
			
		||||
		BIO_printf(bio_err,"               ASN1 blob wrappings\n");
 | 
			
		||||
		BIO_printf(bio_err," -genstr str   string to generate ASN1 structure from\n");
 | 
			
		||||
		BIO_printf(bio_err," -genconf file file to generate ASN1 structure from\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -185,6 +223,12 @@ bad:
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	BIO_set_fp(out,stdout,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
	{
 | 
			
		||||
	BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
	out = BIO_push(tmpbio, out);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (oidfile != NULL)
 | 
			
		||||
		{
 | 
			
		||||
@@ -208,9 +252,30 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (derfile) {
 | 
			
		||||
		if(!(derout = BIO_new_file(derfile, "wb"))) {
 | 
			
		||||
			BIO_printf(bio_err,"problems opening %s\n",derfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ((buf=BUF_MEM_new()) == NULL) goto end;
 | 
			
		||||
	if (!BUF_MEM_grow(buf,BUFSIZ*8)) goto end; /* Pre-allocate :-) */
 | 
			
		||||
 | 
			
		||||
	if (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;
 | 
			
		||||
@@ -231,6 +296,7 @@ bad:
 | 
			
		||||
			if (i <= 0) break;
 | 
			
		||||
			num+=i;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	str=buf->data;
 | 
			
		||||
 | 
			
		||||
	/* If any structs to parse go through in sequence */
 | 
			
		||||
@@ -241,6 +307,7 @@ bad:
 | 
			
		||||
		tmplen=num;
 | 
			
		||||
		for (i=0; i<sk_num(osk); i++)
 | 
			
		||||
			{
 | 
			
		||||
			ASN1_TYPE *atmp;
 | 
			
		||||
			j=atoi(sk_value(osk,i));
 | 
			
		||||
			if (j == 0)
 | 
			
		||||
				{
 | 
			
		||||
@@ -249,7 +316,10 @@ bad:
 | 
			
		||||
				}
 | 
			
		||||
			tmpbuf+=j;
 | 
			
		||||
			tmplen-=j;
 | 
			
		||||
			if (d2i_ASN1_TYPE(&at,&tmpbuf,tmplen) == NULL)
 | 
			
		||||
			atmp = at;
 | 
			
		||||
			at = d2i_ASN1_TYPE(NULL,&tmpbuf,tmplen);
 | 
			
		||||
			ASN1_TYPE_free(atmp);
 | 
			
		||||
			if(!at)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"Error parsing structure\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
@@ -264,15 +334,25 @@ bad:
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (length == 0) length=(unsigned int)num;
 | 
			
		||||
	if (!ASN1_parse(out,(unsigned char *)&(str[offset]),length,indent))
 | 
			
		||||
	if(derout) {
 | 
			
		||||
		if(BIO_write(derout, str + offset, length) != (int)length) {
 | 
			
		||||
			BIO_printf(bio_err, "Error writing output\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (!noout &&
 | 
			
		||||
	    !ASN1_parse_dump(out,(unsigned char *)&(str[offset]),length,
 | 
			
		||||
		    indent,dump))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	BIO_free(derout);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free(out);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (b64 != NULL) BIO_free(b64);
 | 
			
		||||
	if (ret != 0)
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
@@ -280,6 +360,65 @@ end:
 | 
			
		||||
	if (at != NULL) ASN1_TYPE_free(at);
 | 
			
		||||
	if (osk != NULL) sk_free(osk);
 | 
			
		||||
	OBJ_cleanup();
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf)
 | 
			
		||||
	{
 | 
			
		||||
	CONF *cnf = NULL;
 | 
			
		||||
	int len;
 | 
			
		||||
	long errline;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	ASN1_TYPE *atyp = NULL;
 | 
			
		||||
 | 
			
		||||
	if (genconf)
 | 
			
		||||
		{
 | 
			
		||||
		cnf = NCONF_new(NULL);
 | 
			
		||||
		if (!NCONF_load(cnf, genconf, &errline))
 | 
			
		||||
			goto conferr;
 | 
			
		||||
		if (!genstr)
 | 
			
		||||
			genstr = NCONF_get_string(cnf, "default", "asn1");
 | 
			
		||||
		if (!genstr)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio, "Can't find 'asn1' in '%s'\n", genconf);
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	atyp = ASN1_generate_nconf(genstr, cnf);
 | 
			
		||||
	NCONF_free(cnf);
 | 
			
		||||
 | 
			
		||||
	if (!atyp)
 | 
			
		||||
		return -1;
 | 
			
		||||
 | 
			
		||||
	len = i2d_ASN1_TYPE(atyp, NULL);
 | 
			
		||||
 | 
			
		||||
	if (len <= 0)
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	if (!BUF_MEM_grow(buf,len))
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	p=(unsigned char *)buf->data;
 | 
			
		||||
 | 
			
		||||
	i2d_ASN1_TYPE(atyp, &p);
 | 
			
		||||
 | 
			
		||||
	ASN1_TYPE_free(atyp);
 | 
			
		||||
	return len;
 | 
			
		||||
 | 
			
		||||
	conferr:
 | 
			
		||||
 | 
			
		||||
	if (errline > 0)
 | 
			
		||||
		BIO_printf(bio, "Error on line %ld of config file '%s'\n",
 | 
			
		||||
							errline, genconf);
 | 
			
		||||
	else
 | 
			
		||||
		BIO_printf(bio, "Error loading config file '%s'\n", genconf);
 | 
			
		||||
 | 
			
		||||
	err:
 | 
			
		||||
	NCONF_free(cnf);
 | 
			
		||||
	ASN1_TYPE_free(atyp);
 | 
			
		||||
 | 
			
		||||
	return -1;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										324
									
								
								apps/bss_file.c
									
									
									
									
									
								
							
							
						
						
									
										324
									
								
								apps/bss_file.c
									
									
									
									
									
								
							@@ -1,324 +0,0 @@
 | 
			
		||||
/* crypto/bio/bss_file.c */
 | 
			
		||||
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this software
 | 
			
		||||
 *    must display the following acknowledgement:
 | 
			
		||||
 *    "This product includes cryptographic software written by
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define APPS_WIN16
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include "cryptlib.h"
 | 
			
		||||
#include "bio.h"
 | 
			
		||||
#include "err.h"
 | 
			
		||||
 | 
			
		||||
#ifndef NOPROTO
 | 
			
		||||
static int MS_CALLBACK file_write(BIO *h,char *buf,int num);
 | 
			
		||||
static int MS_CALLBACK file_read(BIO *h,char *buf,int size);
 | 
			
		||||
static int MS_CALLBACK file_puts(BIO *h,char *str);
 | 
			
		||||
static int MS_CALLBACK file_gets(BIO *h,char *str,int size);
 | 
			
		||||
static long MS_CALLBACK file_ctrl(BIO *h,int cmd,long arg1,char *arg2);
 | 
			
		||||
static int MS_CALLBACK file_new(BIO *h);
 | 
			
		||||
static int MS_CALLBACK file_free(BIO *data);
 | 
			
		||||
#else
 | 
			
		||||
static int MS_CALLBACK file_write();
 | 
			
		||||
static int MS_CALLBACK file_read();
 | 
			
		||||
static int MS_CALLBACK file_puts();
 | 
			
		||||
static int MS_CALLBACK file_gets();
 | 
			
		||||
static long MS_CALLBACK file_ctrl();
 | 
			
		||||
static int MS_CALLBACK file_new();
 | 
			
		||||
static int MS_CALLBACK file_free();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static BIO_METHOD methods_filep=
 | 
			
		||||
	{
 | 
			
		||||
	BIO_TYPE_FILE,"FILE pointer",
 | 
			
		||||
	file_write,
 | 
			
		||||
	file_read,
 | 
			
		||||
	file_puts,
 | 
			
		||||
	file_gets,
 | 
			
		||||
	file_ctrl,
 | 
			
		||||
	file_new,
 | 
			
		||||
	file_free,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
BIO *BIO_new_file(filename,mode)
 | 
			
		||||
char *filename;
 | 
			
		||||
char *mode;
 | 
			
		||||
	{
 | 
			
		||||
	BIO *ret;
 | 
			
		||||
	FILE *file;
 | 
			
		||||
 | 
			
		||||
	if ((file=fopen(filename,mode)) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		SYSerr(SYS_F_FOPEN,errno);
 | 
			
		||||
		BIOerr(BIO_F_BIO_NEW_FILE,ERR_R_SYS_LIB);
 | 
			
		||||
		return(NULL);
 | 
			
		||||
		}
 | 
			
		||||
	if ((ret=BIO_new_fp(file,BIO_CLOSE)) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		fclose(file);
 | 
			
		||||
		return(NULL);
 | 
			
		||||
		}
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
BIO *BIO_new_fp(stream,close_flag)
 | 
			
		||||
FILE *stream;
 | 
			
		||||
int close_flag;
 | 
			
		||||
	{
 | 
			
		||||
	BIO *ret;
 | 
			
		||||
 | 
			
		||||
	if ((ret=BIO_new(BIO_s_file())) == NULL)
 | 
			
		||||
		return(NULL);
 | 
			
		||||
	BIO_set_fp(ret,stream,close_flag);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#if !defined(WIN16) || defined(APPS_WIN16)
 | 
			
		||||
 | 
			
		||||
BIO_METHOD *BIO_s_file()
 | 
			
		||||
	{
 | 
			
		||||
	return(&methods_filep);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
BIO_METHOD *BIO_s_file_internal_w16()
 | 
			
		||||
	{
 | 
			
		||||
	return(&methods_filep);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK file_new(bi)
 | 
			
		||||
BIO *bi;
 | 
			
		||||
	{
 | 
			
		||||
	bi->init=0;
 | 
			
		||||
	bi->num=0;
 | 
			
		||||
	bi->ptr=NULL;
 | 
			
		||||
	return(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK file_free(a)
 | 
			
		||||
BIO *a;
 | 
			
		||||
	{
 | 
			
		||||
	if (a == NULL) return(0);
 | 
			
		||||
	if (a->shutdown)
 | 
			
		||||
		{
 | 
			
		||||
		if ((a->init) && (a->ptr != NULL))
 | 
			
		||||
			{
 | 
			
		||||
			fclose((FILE *)a->ptr);
 | 
			
		||||
			a->ptr=NULL;
 | 
			
		||||
			}
 | 
			
		||||
		a->init=0;
 | 
			
		||||
		}
 | 
			
		||||
	return(1);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
static int MS_CALLBACK file_read(b,out,outl)
 | 
			
		||||
BIO *b;
 | 
			
		||||
char *out;
 | 
			
		||||
int outl;
 | 
			
		||||
	{
 | 
			
		||||
	int ret=0;
 | 
			
		||||
 | 
			
		||||
	if (b->init && (out != NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ret=fread(out,1,(int)outl,(FILE *)b->ptr);
 | 
			
		||||
		}
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK file_write(b,in,inl)
 | 
			
		||||
BIO *b;
 | 
			
		||||
char *in;
 | 
			
		||||
int inl;
 | 
			
		||||
	{
 | 
			
		||||
	int ret=0;
 | 
			
		||||
 | 
			
		||||
	if (b->init && (in != NULL))
 | 
			
		||||
		{
 | 
			
		||||
		if (fwrite(in,(int)inl,1,(FILE *)b->ptr))
 | 
			
		||||
			ret=inl;
 | 
			
		||||
		/* ret=fwrite(in,1,(int)inl,(FILE *)b->ptr); */
 | 
			
		||||
		/* acording to Tim Hudson <tjh@cryptsoft.com>, the commented
 | 
			
		||||
		 * out version above can cause 'inl' write calls under
 | 
			
		||||
		 * some stupid stdio implementations (VMS) */
 | 
			
		||||
		}
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static long MS_CALLBACK file_ctrl(b,cmd,num,ptr)
 | 
			
		||||
BIO *b;
 | 
			
		||||
int cmd;
 | 
			
		||||
long num;
 | 
			
		||||
char *ptr;
 | 
			
		||||
	{
 | 
			
		||||
	long ret=1;
 | 
			
		||||
	FILE *fp=(FILE *)b->ptr;
 | 
			
		||||
	FILE **fpp;
 | 
			
		||||
	char p[4];
 | 
			
		||||
 | 
			
		||||
	switch (cmd)
 | 
			
		||||
		{
 | 
			
		||||
	case BIO_CTRL_RESET:
 | 
			
		||||
		ret=(long)fseek(fp,num,0);
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_CTRL_EOF:
 | 
			
		||||
		ret=(long)feof(fp);
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_CTRL_INFO:
 | 
			
		||||
		ret=ftell(fp);
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_C_SET_FILE_PTR:
 | 
			
		||||
		file_free(b);
 | 
			
		||||
		b->shutdown=(int)num;
 | 
			
		||||
		b->ptr=(char *)ptr;
 | 
			
		||||
		b->init=1;
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_C_SET_FILENAME:
 | 
			
		||||
		file_free(b);
 | 
			
		||||
		b->shutdown=(int)num&BIO_CLOSE;
 | 
			
		||||
		if (num & BIO_FP_APPEND)
 | 
			
		||||
			{
 | 
			
		||||
			if (num & BIO_FP_READ)
 | 
			
		||||
				strcpy(p,"a+");
 | 
			
		||||
			else	strcpy(p,"a");
 | 
			
		||||
			}
 | 
			
		||||
		else if ((num & BIO_FP_READ) && (num & BIO_FP_WRITE))
 | 
			
		||||
			strcpy(p,"r+");
 | 
			
		||||
		else if (num & BIO_FP_WRITE)
 | 
			
		||||
			strcpy(p,"w");
 | 
			
		||||
		else if (num & BIO_FP_READ)
 | 
			
		||||
			strcpy(p,"r");
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIOerr(BIO_F_FILE_CTRL,BIO_R_BAD_FOPEN_MODE);
 | 
			
		||||
			ret=0;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
#if defined(MSDOS) || defined(WINDOWS)
 | 
			
		||||
		if (!(num & BIO_FP_TEXT))
 | 
			
		||||
			strcat(p,"b");
 | 
			
		||||
		else
 | 
			
		||||
			strcat(p,"t");
 | 
			
		||||
#endif
 | 
			
		||||
		fp=fopen(ptr,p);
 | 
			
		||||
		if (fp == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			SYSerr(SYS_F_FOPEN,errno);
 | 
			
		||||
			BIOerr(BIO_F_FILE_CTRL,ERR_R_SYS_LIB);
 | 
			
		||||
			ret=0;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		b->ptr=(char *)fp;
 | 
			
		||||
		b->init=1;
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_C_GET_FILE_PTR:
 | 
			
		||||
		/* the ptr parameter is actually a FILE ** in this case. */
 | 
			
		||||
		if (ptr != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			fpp=(FILE **)ptr;
 | 
			
		||||
			*fpp=(FILE *)b->ptr;
 | 
			
		||||
			}
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_CTRL_GET_CLOSE:
 | 
			
		||||
		ret=(long)b->shutdown;
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_CTRL_SET_CLOSE:
 | 
			
		||||
		b->shutdown=(int)num;
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_CTRL_FLUSH:
 | 
			
		||||
		fflush((FILE *)b->ptr);
 | 
			
		||||
		break;
 | 
			
		||||
	case BIO_CTRL_DUP:
 | 
			
		||||
		ret=1;
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case BIO_CTRL_PENDING:
 | 
			
		||||
	case BIO_CTRL_PUSH:
 | 
			
		||||
	case BIO_CTRL_POP:
 | 
			
		||||
	default:
 | 
			
		||||
		ret=0;
 | 
			
		||||
		break;
 | 
			
		||||
		}
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK file_gets(bp,buf,size)
 | 
			
		||||
BIO *bp;
 | 
			
		||||
char *buf;
 | 
			
		||||
int size;
 | 
			
		||||
	{
 | 
			
		||||
	int ret=0;
 | 
			
		||||
 | 
			
		||||
	buf[0]='\0';
 | 
			
		||||
	fgets(buf,size,(FILE *)bp->ptr);
 | 
			
		||||
	if (buf[0] != '\0')
 | 
			
		||||
		ret=strlen(buf);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK file_puts(bp,str)
 | 
			
		||||
BIO *bp;
 | 
			
		||||
char *str;
 | 
			
		||||
	{
 | 
			
		||||
	int n,ret;
 | 
			
		||||
 | 
			
		||||
	n=strlen(str);
 | 
			
		||||
	ret=file_write(bp,str,n);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIIBOwIBAAJBALtv55QyzG6i2PlwZ1pah7++Gv8L5j6Hnyr/uTZE1NLG0ABDDexm
 | 
			
		||||
q/R4KedLjFEIYjocDui+IXs62NNtXrT8odkCAwEAAQJAbwXq0vJ/+uyEvsNgxLko
 | 
			
		||||
/V86mGXQ/KrSkeKlL0r4ENxjcyeMAGoKu6J9yMY7+X9+Zm4nxShNfTsf/+Freoe1
 | 
			
		||||
HQIhAPOSm5Q1YI+KIsII2GeVJx1U69+wnd71OasIPakS1L1XAiEAxQAW+J3/JWE0
 | 
			
		||||
ftEYakbhUOKL8tD1OaFZS71/5GdG7E8CIQCefUMmySSvwd6kC0VlATSWbW+d+jp/
 | 
			
		||||
nWmM1KvqnAo5uQIhALqEADu5U1Wvt8UN8UDGBRPQulHWNycuNV45d3nnskWPAiAw
 | 
			
		||||
ueTyr6WsZ5+SD8g/Hy3xuvF3nPmJRH+rwvVihlcFOg==
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
-----BEGIN CERTIFICATE REQUEST-----
 | 
			
		||||
MIIBGzCBxgIBADBjMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEa
 | 
			
		||||
MBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxIzAhBgNVBAMTGkNsaWVudCB0ZXN0
 | 
			
		||||
IGNlcnQgKDUxMiBiaXQpMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALtv55QyzG6i
 | 
			
		||||
2PlwZ1pah7++Gv8L5j6Hnyr/uTZE1NLG0ABDDexmq/R4KedLjFEIYjocDui+IXs6
 | 
			
		||||
2NNtXrT8odkCAwEAATANBgkqhkiG9w0BAQQFAANBAC5JBTeji7RosqMaUIDzIW13
 | 
			
		||||
oO6+kPhx9fXSpMFHIsY3aH92Milkov/2A4SuZTcnv/P6+8klmS0EaiUKcRzak4E=
 | 
			
		||||
-----END CERTIFICATE REQUEST-----
 | 
			
		||||
@@ -1 +1 @@
 | 
			
		||||
05
 | 
			
		||||
07
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								apps/cert.der
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								apps/cert.der
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -59,12 +59,12 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#ifdef NO_STDIO
 | 
			
		||||
#ifdef OPENSSL_NO_STDIO
 | 
			
		||||
#define APPS_WIN16
 | 
			
		||||
#endif
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include "err.h"
 | 
			
		||||
#include "ssl.h"
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	ciphers_main
 | 
			
		||||
@@ -74,30 +74,32 @@ static char *ciphers_usage[]={
 | 
			
		||||
" -v          - verbose mode, a textual listing of the ciphers in SSLeay\n",
 | 
			
		||||
" -ssl2       - SSL2 mode\n",
 | 
			
		||||
" -ssl3       - SSL3 mode\n",
 | 
			
		||||
" -tls1       - TLS1 mode\n",
 | 
			
		||||
NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int MAIN(argc, argv)
 | 
			
		||||
int argc;
 | 
			
		||||
char **argv;
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int ret=1,i;
 | 
			
		||||
	int verbose=0;
 | 
			
		||||
	char **pp,*p;
 | 
			
		||||
	char **pp;
 | 
			
		||||
	const char *p;
 | 
			
		||||
	int badops=0;
 | 
			
		||||
	SSL_CTX *ctx=NULL;
 | 
			
		||||
	SSL *ssl=NULL;
 | 
			
		||||
	char *ciphers=NULL;
 | 
			
		||||
	SSL_METHOD *meth=NULL;
 | 
			
		||||
	STACK *sk;
 | 
			
		||||
	STACK_OF(SSL_CIPHER) *sk;
 | 
			
		||||
	char buf[512];
 | 
			
		||||
	BIO *STDout=NULL;
 | 
			
		||||
 | 
			
		||||
#if !defined(NO_SSL2) && !defined(NO_SSL3)
 | 
			
		||||
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
	meth=SSLv23_server_method();
 | 
			
		||||
#elif !defined(NO_SSL3)
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
	meth=SSLv3_server_method();
 | 
			
		||||
#elif !defined(NO_SSL2)
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL2)
 | 
			
		||||
	meth=SSLv2_server_method();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -106,6 +108,12 @@ char **argv;
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
			
		||||
	STDout=BIO_new_fp(stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
	{
 | 
			
		||||
	BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
	STDout = BIO_push(tmpbio, STDout);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
@@ -113,13 +121,17 @@ char **argv;
 | 
			
		||||
		{
 | 
			
		||||
		if (strcmp(*argv,"-v") == 0)
 | 
			
		||||
			verbose=1;
 | 
			
		||||
#ifndef NO_SSL2
 | 
			
		||||
#ifndef OPENSSL_NO_SSL2
 | 
			
		||||
		else if (strcmp(*argv,"-ssl2") == 0)
 | 
			
		||||
			meth=SSLv2_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef NO_SSL3
 | 
			
		||||
#ifndef OPENSSL_NO_SSL3
 | 
			
		||||
		else if (strcmp(*argv,"-ssl3") == 0)
 | 
			
		||||
			meth=SSLv3_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_TLS1
 | 
			
		||||
		else if (strcmp(*argv,"-tls1") == 0)
 | 
			
		||||
			meth=TLSv1_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
		else if ((strncmp(*argv,"-h",2) == 0) ||
 | 
			
		||||
			 (strcmp(*argv,"-?") == 0))
 | 
			
		||||
@@ -138,16 +150,20 @@ char **argv;
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
		for (pp=ciphers_usage; (*pp != NULL); pp++)
 | 
			
		||||
			BIO_printf(bio_err,*pp);
 | 
			
		||||
			BIO_printf(bio_err,"%s",*pp);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	SSLeay_add_ssl_algorithms();
 | 
			
		||||
	OpenSSL_add_ssl_algorithms();
 | 
			
		||||
 | 
			
		||||
	ctx=SSL_CTX_new(meth);
 | 
			
		||||
	if (ctx == NULL) goto err;
 | 
			
		||||
	if (ciphers != NULL)
 | 
			
		||||
		SSL_CTX_set_cipher_list(ctx,ciphers);
 | 
			
		||||
	if (ciphers != NULL) {
 | 
			
		||||
		if(!SSL_CTX_set_cipher_list(ctx,ciphers)) {
 | 
			
		||||
			BIO_printf(bio_err, "Error in cipher list\n");
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	ssl=SSL_new(ctx);
 | 
			
		||||
	if (ssl == NULL) goto err;
 | 
			
		||||
 | 
			
		||||
@@ -167,11 +183,11 @@ char **argv;
 | 
			
		||||
		{
 | 
			
		||||
		sk=SSL_get_ciphers(ssl);
 | 
			
		||||
 | 
			
		||||
		for (i=0; i<sk_num(sk); i++)
 | 
			
		||||
		for (i=0; i<sk_SSL_CIPHER_num(sk); i++)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_puts(STDout,SSL_CIPHER_description(
 | 
			
		||||
				(SSL_CIPHER *)sk_value(sk,i),
 | 
			
		||||
				buf,512));
 | 
			
		||||
				sk_SSL_CIPHER_value(sk,i),
 | 
			
		||||
				buf,sizeof buf));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -185,7 +201,8 @@ err:
 | 
			
		||||
end:
 | 
			
		||||
	if (ctx != NULL) SSL_CTX_free(ctx);
 | 
			
		||||
	if (ssl != NULL) SSL_free(ssl);
 | 
			
		||||
	if (STDout != NULL) BIO_free(STDout);
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	if (STDout != NULL) BIO_free_all(STDout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										232
									
								
								apps/crl.c
									
									
									
									
									
								
							
							
						
						
									
										232
									
								
								apps/crl.c
									
									
									
									
									
								
							@@ -60,10 +60,11 @@
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include "bio.h"
 | 
			
		||||
#include "err.h"
 | 
			
		||||
#include "x509.h"
 | 
			
		||||
#include "pem.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/x509v3.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	crl_main
 | 
			
		||||
@@ -74,7 +75,7 @@
 | 
			
		||||
static char *crl_usage[]={
 | 
			
		||||
"usage: crl args\n",
 | 
			
		||||
"\n",
 | 
			
		||||
" -inform arg     - input format - default PEM (one of DER, TXT or PEM)\n",
 | 
			
		||||
" -inform arg     - input format - default PEM (DER or PEM)\n",
 | 
			
		||||
" -outform arg    - output format - default PEM\n",
 | 
			
		||||
" -text           - print out a text format version\n",
 | 
			
		||||
" -in arg         - input file - default stdin\n",
 | 
			
		||||
@@ -84,28 +85,36 @@ static char *crl_usage[]={
 | 
			
		||||
" -lastupdate     - lastUpdate field\n",
 | 
			
		||||
" -nextupdate     - nextUpdate field\n",
 | 
			
		||||
" -noout          - no CRL output\n",
 | 
			
		||||
" -CAfile  name   - verify CRL using certificates in file \"name\"\n",
 | 
			
		||||
" -CApath  dir    - verify CRL using certificates in \"dir\"\n",
 | 
			
		||||
" -nameopt arg    - various certificate name options\n",
 | 
			
		||||
NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifndef NOPROTO
 | 
			
		||||
static X509_CRL *load_crl(char *file, int format);
 | 
			
		||||
#else
 | 
			
		||||
static X509_CRL *load_crl();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static BIO *bio_out=NULL;
 | 
			
		||||
 | 
			
		||||
int MAIN(argc, argv)
 | 
			
		||||
int argc;
 | 
			
		||||
char **argv;
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned long nmflag = 0;
 | 
			
		||||
	X509_CRL *x=NULL;
 | 
			
		||||
	char *CAfile = NULL, *CApath = NULL;
 | 
			
		||||
	int ret=1,i,num,badops=0;
 | 
			
		||||
	BIO *out=NULL;
 | 
			
		||||
	int informat,outformat;
 | 
			
		||||
	char *infile=NULL,*outfile=NULL;
 | 
			
		||||
	int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0;
 | 
			
		||||
	char **pp,buf[256];
 | 
			
		||||
	int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0;
 | 
			
		||||
	int fingerprint = 0;
 | 
			
		||||
	char **pp;
 | 
			
		||||
	X509_STORE *store = NULL;
 | 
			
		||||
	X509_STORE_CTX ctx;
 | 
			
		||||
	X509_LOOKUP *lookup = NULL;
 | 
			
		||||
	X509_OBJECT xobj;
 | 
			
		||||
	EVP_PKEY *pkey;
 | 
			
		||||
	int do_ver = 0;
 | 
			
		||||
	const EVP_MD *md_alg,*digest=EVP_md5();
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
@@ -113,9 +122,20 @@ char **argv;
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	if (bio_out == NULL)
 | 
			
		||||
		if ((bio_out=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_set_fp(bio_out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			bio_out = BIO_push(tmpbio, bio_out);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
@@ -142,10 +162,6 @@ char **argv;
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			outformat=FORMAT_TEXT;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
@@ -156,8 +172,29 @@ char **argv;
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-CApath") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			CApath = *(++argv);
 | 
			
		||||
			do_ver = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-CAfile") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			CAfile = *(++argv);
 | 
			
		||||
			do_ver = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-verify") == 0)
 | 
			
		||||
			do_ver = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-hash") == 0)
 | 
			
		||||
			hash= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-nameopt") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			if (!set_name_ex(&nmflag, *(++argv))) goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-issuer") == 0)
 | 
			
		||||
			issuer= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-lastupdate") == 0)
 | 
			
		||||
@@ -166,6 +203,13 @@ char **argv;
 | 
			
		||||
			nextupdate= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-fingerprint") == 0)
 | 
			
		||||
			fingerprint= ++num;
 | 
			
		||||
		else if ((md_alg=EVP_get_digestbyname(*argv + 1)))
 | 
			
		||||
			{
 | 
			
		||||
			/* ok */
 | 
			
		||||
			digest=md_alg;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
@@ -176,19 +220,11 @@ char **argv;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (outformat == FORMAT_TEXT)
 | 
			
		||||
		{
 | 
			
		||||
		num=0;
 | 
			
		||||
		issuer= ++num;
 | 
			
		||||
		lastupdate= ++num;
 | 
			
		||||
		nextupdate= ++num;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		for (pp=crl_usage; (*pp != NULL); pp++)
 | 
			
		||||
			BIO_printf(bio_err,*pp);
 | 
			
		||||
			BIO_printf(bio_err,"%s",*pp);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -196,40 +232,99 @@ bad:
 | 
			
		||||
	x=load_crl(infile,informat);
 | 
			
		||||
	if (x == NULL) { goto end; }
 | 
			
		||||
 | 
			
		||||
	if(do_ver) {
 | 
			
		||||
		store = X509_STORE_new();
 | 
			
		||||
		lookup=X509_STORE_add_lookup(store,X509_LOOKUP_file());
 | 
			
		||||
		if (lookup == NULL) goto end;
 | 
			
		||||
		if (!X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM))
 | 
			
		||||
			X509_LOOKUP_load_file(lookup,NULL,X509_FILETYPE_DEFAULT);
 | 
			
		||||
			
 | 
			
		||||
		lookup=X509_STORE_add_lookup(store,X509_LOOKUP_hash_dir());
 | 
			
		||||
		if (lookup == NULL) goto end;
 | 
			
		||||
		if (!X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM))
 | 
			
		||||
			X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
 | 
			
		||||
		ERR_clear_error();
 | 
			
		||||
 | 
			
		||||
		if(!X509_STORE_CTX_init(&ctx, store, NULL, NULL)) {
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				"Error initialising X509 store\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		i = X509_STORE_get_by_subject(&ctx, X509_LU_X509, 
 | 
			
		||||
					X509_CRL_get_issuer(x), &xobj);
 | 
			
		||||
		if(i <= 0) {
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				"Error getting CRL issuer certificate\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		pkey = X509_get_pubkey(xobj.data.x509);
 | 
			
		||||
		X509_OBJECT_free_contents(&xobj);
 | 
			
		||||
		if(!pkey) {
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				"Error getting CRL issuer public key\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		i = X509_CRL_verify(x, pkey);
 | 
			
		||||
		EVP_PKEY_free(pkey);
 | 
			
		||||
		if(i < 0) goto end;
 | 
			
		||||
		if(i == 0) BIO_printf(bio_err, "verify failure\n");
 | 
			
		||||
		else BIO_printf(bio_err, "verify OK\n");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (num)
 | 
			
		||||
		{
 | 
			
		||||
		for (i=1; i<=num; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if (issuer == i)
 | 
			
		||||
				{
 | 
			
		||||
				X509_NAME_oneline(x->crl->issuer,buf,256);
 | 
			
		||||
				fprintf(stdout,"issuer= %s\n",buf);
 | 
			
		||||
				print_name(bio_out, "issuer=", X509_CRL_get_issuer(x), nmflag);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			if (hash == i)
 | 
			
		||||
				{
 | 
			
		||||
				fprintf(stdout,"%08lx\n",
 | 
			
		||||
					X509_NAME_hash(x->crl->issuer));
 | 
			
		||||
				BIO_printf(bio_out,"%08lx\n",
 | 
			
		||||
					X509_NAME_hash(X509_CRL_get_issuer(x)));
 | 
			
		||||
				}
 | 
			
		||||
			if (lastupdate == i)
 | 
			
		||||
				{
 | 
			
		||||
				fprintf(stdout,"lastUpdate=");
 | 
			
		||||
				ASN1_UTCTIME_print(bio_out,x->crl->lastUpdate);
 | 
			
		||||
				fprintf(stdout,"\n");
 | 
			
		||||
				BIO_printf(bio_out,"lastUpdate=");
 | 
			
		||||
				ASN1_TIME_print(bio_out,
 | 
			
		||||
						X509_CRL_get_lastUpdate(x));
 | 
			
		||||
				BIO_printf(bio_out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
			if (nextupdate == i)
 | 
			
		||||
				{
 | 
			
		||||
				fprintf(stdout,"nextUpdate=");
 | 
			
		||||
				if (x->crl->nextUpdate != NULL)
 | 
			
		||||
					ASN1_UTCTIME_print(bio_out,x->crl->nextUpdate);
 | 
			
		||||
				BIO_printf(bio_out,"nextUpdate=");
 | 
			
		||||
				if (X509_CRL_get_nextUpdate(x)) 
 | 
			
		||||
					ASN1_TIME_print(bio_out,
 | 
			
		||||
						X509_CRL_get_nextUpdate(x));
 | 
			
		||||
				else
 | 
			
		||||
					fprintf(stdout,"NONE");
 | 
			
		||||
				fprintf(stdout,"\n");
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
					BIO_printf(bio_out,"NONE");
 | 
			
		||||
				BIO_printf(bio_out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
			if (fingerprint == i)
 | 
			
		||||
				{
 | 
			
		||||
				int j;
 | 
			
		||||
				unsigned int n;
 | 
			
		||||
				unsigned char md[EVP_MAX_MD_SIZE];
 | 
			
		||||
 | 
			
		||||
	if (noout) goto end;
 | 
			
		||||
				if (!X509_CRL_digest(x,digest,md,&n))
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,"out of memory\n");
 | 
			
		||||
					goto end;
 | 
			
		||||
					}
 | 
			
		||||
				BIO_printf(bio_out,"%s Fingerprint=",
 | 
			
		||||
						OBJ_nid2sn(EVP_MD_type(digest)));
 | 
			
		||||
				for (j=0; j<(int)n; j++)
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_out,"%02X%c",md[j],
 | 
			
		||||
						(j+1 == (int)n)
 | 
			
		||||
						?'\n':':');
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
@@ -239,7 +334,15 @@ bad:
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
@@ -249,27 +352,14 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (text) X509_CRL_print(out, x);
 | 
			
		||||
 | 
			
		||||
	if (noout) goto end;
 | 
			
		||||
 | 
			
		||||
	if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
		i=(int)i2d_X509_CRL_bio(out,x);
 | 
			
		||||
	else if (outformat == FORMAT_PEM)
 | 
			
		||||
		i=PEM_write_bio_X509_CRL(out,x);
 | 
			
		||||
	else if (outformat == FORMAT_TEXT)
 | 
			
		||||
		{
 | 
			
		||||
		X509_REVOKED *r;
 | 
			
		||||
		STACK *sk;
 | 
			
		||||
 | 
			
		||||
		sk=sk_dup(x->crl->revoked);
 | 
			
		||||
		while ((r=(X509_REVOKED *)sk_pop(sk)) != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			fprintf(stdout,"revoked: serialNumber=");
 | 
			
		||||
			i2a_ASN1_INTEGER(out,r->serialNumber);
 | 
			
		||||
			fprintf(stdout," revocationDate=");
 | 
			
		||||
			ASN1_UTCTIME_print(bio_out,r->revocationDate);
 | 
			
		||||
			fprintf(stdout,"\n");
 | 
			
		||||
			}
 | 
			
		||||
		sk_free(sk);
 | 
			
		||||
		i=1;
 | 
			
		||||
		}
 | 
			
		||||
	else	
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
@@ -278,15 +368,19 @@ bad:
 | 
			
		||||
	if (!i) { BIO_printf(bio_err,"unable to write CRL\n"); goto end; }
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (out != NULL) BIO_free(out);
 | 
			
		||||
	if (bio_out != NULL) BIO_free(bio_out);
 | 
			
		||||
	if (x != NULL) X509_CRL_free(x);
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	BIO_free_all(bio_out);
 | 
			
		||||
	bio_out=NULL;
 | 
			
		||||
	X509_CRL_free(x);
 | 
			
		||||
	if(store) {
 | 
			
		||||
		X509_STORE_CTX_cleanup(&ctx);
 | 
			
		||||
		X509_STORE_free(store);
 | 
			
		||||
	}
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static X509_CRL *load_crl(infile, format)
 | 
			
		||||
char *infile;
 | 
			
		||||
int format;
 | 
			
		||||
static X509_CRL *load_crl(char *infile, int format)
 | 
			
		||||
	{
 | 
			
		||||
	X509_CRL *x=NULL;
 | 
			
		||||
	BIO *in=NULL;
 | 
			
		||||
@@ -311,7 +405,7 @@ int format;
 | 
			
		||||
	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);
 | 
			
		||||
		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;
 | 
			
		||||
@@ -324,7 +418,7 @@ int format;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
end:
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	return(x);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
-----BEGIN X509 CRL-----
 | 
			
		||||
MIIBDjCBuTANBgkqhkiG9w0BAQQFADBgMQswCQYDVQQGEwJBVTEMMAoGA1UECBMD
 | 
			
		||||
UUxEMRkwFwYDVQQKExBNaW5jb20gUHR5LiBMdGQuMQswCQYDVQQLEwJDUzEbMBkG
 | 
			
		||||
A1UEAxMSU1NMZWF5IGRlbW8gc2VydmVyFw05NzA3MDkwMDAwMjJaFw05NzA4MDgw
 | 
			
		||||
MDAwMjJaMCgwEgIBARcNOTUxMDA5MjMzMjA1WjASAgEDFw05NTEyMDEwMTAwMDBa
 | 
			
		||||
MA0GCSqGSIb3DQEBBAUAA0EAcEBIWVZPXxSlLMPPLfBi4s0N3lzTgskZkgO6pjZi
 | 
			
		||||
oQRwh5vi5zFqDNQteGx7RTHpUYntgyoAZ87FZE0GOJgBaQ==
 | 
			
		||||
-----END X509 CRL-----
 | 
			
		||||
							
								
								
									
										101
									
								
								apps/crl2p7.c
									
									
									
									
									
								
							
							
						
						
									
										101
									
								
								apps/crl2p7.c
									
									
									
									
									
								
							@@ -65,31 +65,26 @@
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include "err.h"
 | 
			
		||||
#include "evp.h"
 | 
			
		||||
#include "x509.h"
 | 
			
		||||
#include "pkcs7.h"
 | 
			
		||||
#include "pem.h"
 | 
			
		||||
#include "objects.h"
 | 
			
		||||
 | 
			
		||||
#ifndef NOPROTO
 | 
			
		||||
static int add_certs_from_file(STACK *stack, char *certfile);
 | 
			
		||||
#else
 | 
			
		||||
static int add_certs_from_file();
 | 
			
		||||
#endif
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pkcs7.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/objects.h>
 | 
			
		||||
 | 
			
		||||
static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile);
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	crl2pkcs7_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (one of DER, TXT or PEM)
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(argc, argv)
 | 
			
		||||
int argc;
 | 
			
		||||
char **argv;
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int i,badops=0;
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
@@ -98,8 +93,9 @@ char **argv;
 | 
			
		||||
	PKCS7 *p7 = NULL;
 | 
			
		||||
	PKCS7_SIGNED *p7s = NULL;
 | 
			
		||||
	X509_CRL *crl=NULL;
 | 
			
		||||
	STACK *crl_stack=NULL;
 | 
			
		||||
	STACK *cert_stack=NULL;
 | 
			
		||||
	STACK *certflst=NULL;
 | 
			
		||||
	STACK_OF(X509_CRL) *crl_stack=NULL;
 | 
			
		||||
	STACK_OF(X509) *cert_stack=NULL;
 | 
			
		||||
	int ret=1,nocrl=0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
@@ -112,7 +108,6 @@ char **argv;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
	certfile=NULL;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
@@ -146,7 +141,8 @@ char **argv;
 | 
			
		||||
		else if (strcmp(*argv,"-certfile") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			certfile= *(++argv);
 | 
			
		||||
			if(!certflst) certflst = sk_new_null();
 | 
			
		||||
			sk_push(certflst,*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
@@ -163,13 +159,15 @@ char **argv;
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg    input format - one of DER TXT PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg   output format - one of DER TXT PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg        inout file\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg    input format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg   output format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg        input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg       output file\n");
 | 
			
		||||
		BIO_printf(bio_err," -certfile arg  certificates file of chain to a trusted CA\n");
 | 
			
		||||
		BIO_printf(bio_err,"                (can be used more than once)\n");
 | 
			
		||||
		BIO_printf(bio_err," -nocrl         no crl to load, just certs from '-certfile'\n");
 | 
			
		||||
		EXIT(1);
 | 
			
		||||
		ret = 1;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
@@ -198,7 +196,7 @@ bad:
 | 
			
		||||
		if 	(informat == FORMAT_ASN1)
 | 
			
		||||
			crl=d2i_X509_CRL_bio(in,NULL);
 | 
			
		||||
		else if (informat == FORMAT_PEM)
 | 
			
		||||
			crl=PEM_read_bio_X509_CRL(in,NULL,NULL);
 | 
			
		||||
			crl=PEM_read_bio_X509_CRL(in,NULL,NULL,NULL);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad input format specified for input crl\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -218,19 +216,19 @@ bad:
 | 
			
		||||
	p7s->contents->type=OBJ_nid2obj(NID_pkcs7_data);
 | 
			
		||||
 | 
			
		||||
	if (!ASN1_INTEGER_set(p7s->version,1)) goto end;
 | 
			
		||||
	if ((crl_stack=sk_new(NULL)) == NULL) goto end;
 | 
			
		||||
	if ((crl_stack=sk_X509_CRL_new_null()) == NULL) goto end;
 | 
			
		||||
	p7s->crl=crl_stack;
 | 
			
		||||
	if (crl != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		sk_push(crl_stack,(char *)crl);
 | 
			
		||||
		crl=NULL; /* now part of p7 for Freeing */
 | 
			
		||||
		sk_X509_CRL_push(crl_stack,crl);
 | 
			
		||||
		crl=NULL; /* now part of p7 for OPENSSL_freeing */
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if ((cert_stack=sk_new(NULL)) == NULL) goto end;
 | 
			
		||||
	if ((cert_stack=sk_X509_new_null()) == NULL) goto end;
 | 
			
		||||
	p7s->cert=cert_stack;
 | 
			
		||||
 | 
			
		||||
	if (certfile != NULL) 
 | 
			
		||||
		{
 | 
			
		||||
	if(certflst) for(i = 0; i < sk_num(certflst); i++) {
 | 
			
		||||
		certfile = sk_value(certflst, i);
 | 
			
		||||
		if (add_certs_from_file(cert_stack,certfile) < 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "error loading certificates\n");
 | 
			
		||||
@@ -239,8 +237,18 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sk_free(certflst);
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
@@ -267,11 +275,12 @@ bad:
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free(out);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (p7 != NULL) PKCS7_free(p7);
 | 
			
		||||
	if (crl != NULL) X509_CRL_free(crl);
 | 
			
		||||
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -284,40 +293,42 @@ end:
 | 
			
		||||
 *	number of certs added if successful, -1 if not.
 | 
			
		||||
 *----------------------------------------------------------------------
 | 
			
		||||
 */
 | 
			
		||||
static int add_certs_from_file(stack,certfile)
 | 
			
		||||
STACK *stack;
 | 
			
		||||
char *certfile;
 | 
			
		||||
static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile)
 | 
			
		||||
	{
 | 
			
		||||
	struct stat st;
 | 
			
		||||
	BIO *in=NULL;
 | 
			
		||||
	int count=0;
 | 
			
		||||
	int ret= -1;
 | 
			
		||||
	STACK *sk=NULL;
 | 
			
		||||
	STACK_OF(X509_INFO) *sk=NULL;
 | 
			
		||||
	X509_INFO *xi;
 | 
			
		||||
 | 
			
		||||
	if ((stat(certfile,&st) != 0))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to file the file, %s\n",certfile);
 | 
			
		||||
		BIO_printf(bio_err,"unable to load the file, %s\n",certfile);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (BIO_read_filename(in,certfile) <= 0))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"error opening the file, %s\n",certfile);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	/* This loads from a file, a stack of x509/crl/pkey sets */
 | 
			
		||||
	sk=PEM_X509_INFO_read_bio(in,NULL,NULL);
 | 
			
		||||
	if (sk == NULL) goto end;
 | 
			
		||||
	sk=PEM_X509_INFO_read_bio(in,NULL,NULL,NULL);
 | 
			
		||||
	if (sk == NULL) {
 | 
			
		||||
		BIO_printf(bio_err,"error reading the file, %s\n",certfile);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* scan over it and pull out the CRL's */
 | 
			
		||||
	while (sk_num(sk))
 | 
			
		||||
	while (sk_X509_INFO_num(sk))
 | 
			
		||||
		{
 | 
			
		||||
		xi=(X509_INFO *)sk_shift(sk);
 | 
			
		||||
		xi=sk_X509_INFO_shift(sk);
 | 
			
		||||
		if (xi->x509 != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			sk_push(stack,(char *)xi->x509);
 | 
			
		||||
			sk_X509_push(stack,xi->x509);
 | 
			
		||||
			xi->x509=NULL;
 | 
			
		||||
			count++;
 | 
			
		||||
			}
 | 
			
		||||
@@ -326,9 +337,9 @@ char *certfile;
 | 
			
		||||
 | 
			
		||||
	ret=count;
 | 
			
		||||
end:
 | 
			
		||||
 	/* never need to Free x */
 | 
			
		||||
 	/* never need to OPENSSL_free x */
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (sk != NULL) sk_free(sk);
 | 
			
		||||
	if (sk != NULL) sk_X509_INFO_free(sk);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -42,13 +42,13 @@ $md4_cmd="md4";
 | 
			
		||||
$rsa_cmd="rsa -des -inform der ";
 | 
			
		||||
 | 
			
		||||
# this was the 0.5.x way of doing things ...
 | 
			
		||||
$cmd="ssleay asn1parse";
 | 
			
		||||
$x509_cmd="ssleay x509";
 | 
			
		||||
$crl_cmd="ssleay crl";
 | 
			
		||||
$rc4_cmd="ssleay rc4";
 | 
			
		||||
$md2_cmd="ssleay md2";
 | 
			
		||||
$md4_cmd="ssleay md4";
 | 
			
		||||
$rsa_cmd="ssleay rsa -des -inform der ";
 | 
			
		||||
$cmd="openssl asn1parse";
 | 
			
		||||
$x509_cmd="openssl x509";
 | 
			
		||||
$crl_cmd="openssl crl";
 | 
			
		||||
$rc4_cmd="openssl rc4";
 | 
			
		||||
$md2_cmd="openssl md2";
 | 
			
		||||
$md4_cmd="openssl md4";
 | 
			
		||||
$rsa_cmd="openssl rsa -des -inform der ";
 | 
			
		||||
 | 
			
		||||
&Getopts('vd:') || die "usage:$0 [-v] [-d num] file";
 | 
			
		||||
$depth=($opt_d =~ /^\d+$/)?$opt_d:0;
 | 
			
		||||
							
								
								
									
										280
									
								
								apps/dgst.c
									
									
									
									
									
								
							
							
						
						
									
										280
									
								
								apps/dgst.c
									
									
									
									
									
								
							@@ -60,12 +60,12 @@
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include "bio.h"
 | 
			
		||||
#include "err.h"
 | 
			
		||||
#include "evp.h"
 | 
			
		||||
#include "objects.h"
 | 
			
		||||
#include "x509.h"
 | 
			
		||||
#include "pem.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/objects.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef BUFSIZE
 | 
			
		||||
#define BUFSIZE	1024*8
 | 
			
		||||
@@ -73,30 +73,38 @@
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dgst_main
 | 
			
		||||
 | 
			
		||||
#ifndef NOPROTO
 | 
			
		||||
void do_fp(unsigned char *buf,BIO *f,int sep);
 | 
			
		||||
#else
 | 
			
		||||
void do_fp();
 | 
			
		||||
#endif
 | 
			
		||||
int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
			
		||||
	  EVP_PKEY *key, unsigned char *sigin, int siglen, const char *title,
 | 
			
		||||
	  const char *file);
 | 
			
		||||
 | 
			
		||||
int MAIN(argc,argv)
 | 
			
		||||
int argc;
 | 
			
		||||
char **argv;
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	unsigned char *buf=NULL;
 | 
			
		||||
	int i,err=0;
 | 
			
		||||
	EVP_MD *md=NULL,*m;
 | 
			
		||||
	const EVP_MD *md=NULL,*m;
 | 
			
		||||
	BIO *in=NULL,*inp;
 | 
			
		||||
	BIO *bmd=NULL;
 | 
			
		||||
	char *name;
 | 
			
		||||
#define PROG_NAME_SIZE  16
 | 
			
		||||
        char pname[PROG_NAME_SIZE];
 | 
			
		||||
	BIO *out = NULL;
 | 
			
		||||
	const char *name;
 | 
			
		||||
#define PROG_NAME_SIZE  39
 | 
			
		||||
	char pname[PROG_NAME_SIZE+1];
 | 
			
		||||
	int separator=0;
 | 
			
		||||
	int debug=0;
 | 
			
		||||
	int keyform=FORMAT_PEM;
 | 
			
		||||
	const char *outfile = NULL, *keyfile = NULL;
 | 
			
		||||
	const char *sigfile = NULL, *randfile = NULL;
 | 
			
		||||
	int out_bin = -1, want_pub = 0, do_verify = 0;
 | 
			
		||||
	EVP_PKEY *sigkey = NULL;
 | 
			
		||||
	unsigned char *sigbuf = NULL;
 | 
			
		||||
	int siglen = 0;
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
	if ((buf=(unsigned char *)Malloc(BUFSIZE)) == NULL)
 | 
			
		||||
	if ((buf=(unsigned char *)OPENSSL_malloc(BUFSIZE)) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"out of memory\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
@@ -105,18 +113,68 @@ char **argv;
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	/* first check the program name */
 | 
			
		||||
        program_name(argv[0],pname,PROG_NAME_SIZE);
 | 
			
		||||
	program_name(argv[0],pname,sizeof pname);
 | 
			
		||||
 | 
			
		||||
	md=EVP_get_digestbyname(pname);
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	for (i=0; i<argc; i++)
 | 
			
		||||
	while (argc > 0)
 | 
			
		||||
		{
 | 
			
		||||
		if ((*argv)[0] != '-') break;
 | 
			
		||||
		if (strcmp(*argv,"-c") == 0)
 | 
			
		||||
			separator=1;
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			randfile=*(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			outfile=*(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-sign") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			keyfile=*(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-verify") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			keyfile=*(++argv);
 | 
			
		||||
			want_pub = 1;
 | 
			
		||||
			do_verify = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-prverify") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			keyfile=*(++argv);
 | 
			
		||||
			do_verify = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-signature") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			sigfile=*(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-keyform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			keyform=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-hex") == 0)
 | 
			
		||||
			out_bin = 0;
 | 
			
		||||
		else if (strcmp(*argv,"-binary") == 0)
 | 
			
		||||
			out_bin = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-d") == 0)
 | 
			
		||||
			debug=1;
 | 
			
		||||
		else if ((m=EVP_get_digestbyname(&((*argv)[1]))) != NULL)
 | 
			
		||||
@@ -130,14 +188,32 @@ char **argv;
 | 
			
		||||
	if (md == NULL)
 | 
			
		||||
		md=EVP_md5();
 | 
			
		||||
 | 
			
		||||
	if(do_verify && !sigfile) {
 | 
			
		||||
		BIO_printf(bio_err, "No signature to verify: use the -signature option\n");
 | 
			
		||||
		err = 1; 
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ((argc > 0) && (argv[0][0] == '-')) /* bad option */
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unknown option '%s'\n",*argv);
 | 
			
		||||
		BIO_printf(bio_err,"options are\n");
 | 
			
		||||
		BIO_printf(bio_err,"-c              to output the digest with separating colons\n");
 | 
			
		||||
		BIO_printf(bio_err,"-d              to output debug info\n");
 | 
			
		||||
		BIO_printf(bio_err,"-hex            output as hex dump\n");
 | 
			
		||||
		BIO_printf(bio_err,"-binary         output in binary form\n");
 | 
			
		||||
		BIO_printf(bio_err,"-sign   file    sign digest using private key in file\n");
 | 
			
		||||
		BIO_printf(bio_err,"-verify file    verify a signature using public key in file\n");
 | 
			
		||||
		BIO_printf(bio_err,"-prverify file  verify a signature using private key in file\n");
 | 
			
		||||
		BIO_printf(bio_err,"-keyform arg    key file format (PEM or ENGINE)\n");
 | 
			
		||||
		BIO_printf(bio_err,"-signature file signature to verify\n");
 | 
			
		||||
		BIO_printf(bio_err,"-binary         output in binary form\n");
 | 
			
		||||
		BIO_printf(bio_err,"-engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
 | 
			
		||||
		BIO_printf(bio_err,"-%3s to use the %s message digest algorithm (default)\n",
 | 
			
		||||
			LN_md5,LN_md5);
 | 
			
		||||
		BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
 | 
			
		||||
			LN_md4,LN_md4);
 | 
			
		||||
		BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
 | 
			
		||||
			LN_md2,LN_md2);
 | 
			
		||||
		BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
 | 
			
		||||
@@ -152,6 +228,8 @@ char **argv;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	bmd=BIO_new(BIO_f_md());
 | 
			
		||||
	if (debug)
 | 
			
		||||
@@ -167,6 +245,74 @@ char **argv;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if(out_bin == -1) {
 | 
			
		||||
		if(keyfile) out_bin = 1;
 | 
			
		||||
		else out_bin = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(randfile)
 | 
			
		||||
		app_RAND_load_file(randfile, bio_err, 0);
 | 
			
		||||
 | 
			
		||||
	if(outfile) {
 | 
			
		||||
		if(out_bin)
 | 
			
		||||
			out = BIO_new_file(outfile, "wb");
 | 
			
		||||
		else    out = BIO_new_file(outfile, "w");
 | 
			
		||||
	} else {
 | 
			
		||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(!out) {
 | 
			
		||||
		BIO_printf(bio_err, "Error opening output file %s\n", 
 | 
			
		||||
					outfile ? outfile : "(stdout)");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(keyfile)
 | 
			
		||||
		{
 | 
			
		||||
		if (want_pub)
 | 
			
		||||
			sigkey = load_pubkey(bio_err, keyfile, keyform, 0, NULL,
 | 
			
		||||
				e, "key file");
 | 
			
		||||
		else
 | 
			
		||||
			sigkey = load_key(bio_err, keyfile, keyform, 0, NULL,
 | 
			
		||||
				e, "key file");
 | 
			
		||||
		if (!sigkey)
 | 
			
		||||
			{
 | 
			
		||||
			/* load_[pub]key() has already printed an appropriate
 | 
			
		||||
			   message */
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if(sigfile && sigkey) {
 | 
			
		||||
		BIO *sigbio;
 | 
			
		||||
		sigbio = BIO_new_file(sigfile, "rb");
 | 
			
		||||
		siglen = EVP_PKEY_size(sigkey);
 | 
			
		||||
		sigbuf = OPENSSL_malloc(siglen);
 | 
			
		||||
		if(!sigbio) {
 | 
			
		||||
			BIO_printf(bio_err, "Error opening signature file %s\n",
 | 
			
		||||
								sigfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		siglen = BIO_read(sigbio, sigbuf, siglen);
 | 
			
		||||
		BIO_free(sigbio);
 | 
			
		||||
		if(siglen <= 0) {
 | 
			
		||||
			BIO_printf(bio_err, "Error reading signature file %s\n",
 | 
			
		||||
								sigfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/* we use md as a filter, reading from 'in' */
 | 
			
		||||
	BIO_set_md(bmd,md);
 | 
			
		||||
	inp=BIO_push(bmd,in);
 | 
			
		||||
@@ -174,39 +320,57 @@ char **argv;
 | 
			
		||||
	if (argc == 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
		do_fp(buf,inp,separator);
 | 
			
		||||
		err=do_fp(out, buf,inp,separator, out_bin, sigkey, sigbuf,
 | 
			
		||||
			  siglen,"","(stdin)");
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		name=OBJ_nid2sn(md->type);
 | 
			
		||||
		for (i=0; i<argc; i++)
 | 
			
		||||
			{
 | 
			
		||||
			char *tmp,*tofree=NULL;
 | 
			
		||||
			int r;
 | 
			
		||||
 | 
			
		||||
			if (BIO_read_filename(in,argv[i]) <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				perror(argv[i]);
 | 
			
		||||
				err++;
 | 
			
		||||
				continue;
 | 
			
		||||
				}
 | 
			
		||||
			printf("%s(%s)= ",name,argv[i]);
 | 
			
		||||
			do_fp(buf,inp,separator);
 | 
			
		||||
			BIO_reset(bmd);
 | 
			
		||||
			if(!out_bin)
 | 
			
		||||
				{
 | 
			
		||||
				tmp=tofree=OPENSSL_malloc(strlen(name)+strlen(argv[i])+5);
 | 
			
		||||
				sprintf(tmp,"%s(%s)= ",name,argv[i]);
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				tmp="";
 | 
			
		||||
			r=do_fp(out,buf,inp,separator,out_bin,sigkey,sigbuf,
 | 
			
		||||
				siglen,tmp,argv[i]);
 | 
			
		||||
			if(r)
 | 
			
		||||
			    err=r;
 | 
			
		||||
			if(tofree)
 | 
			
		||||
				OPENSSL_free(tofree);
 | 
			
		||||
			(void)BIO_reset(bmd);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
end:
 | 
			
		||||
	if (buf != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		memset(buf,0,BUFSIZE);
 | 
			
		||||
		Free(buf);
 | 
			
		||||
		OPENSSL_cleanse(buf,BUFSIZE);
 | 
			
		||||
		OPENSSL_free(buf);
 | 
			
		||||
		}
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	EVP_PKEY_free(sigkey);
 | 
			
		||||
	if(sigbuf) OPENSSL_free(sigbuf);
 | 
			
		||||
	if (bmd != NULL) BIO_free(bmd);
 | 
			
		||||
	EXIT(err);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(err);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void do_fp(buf,bp,sep)
 | 
			
		||||
unsigned char *buf;
 | 
			
		||||
BIO *bp;
 | 
			
		||||
int sep;
 | 
			
		||||
int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
			
		||||
	  EVP_PKEY *key, unsigned char *sigin, int siglen, const char *title,
 | 
			
		||||
	  const char *file)
 | 
			
		||||
	{
 | 
			
		||||
	int len;
 | 
			
		||||
	int i;
 | 
			
		||||
@@ -214,16 +378,60 @@ int sep;
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		i=BIO_read(bp,(char *)buf,BUFSIZE);
 | 
			
		||||
		if (i <= 0) break;
 | 
			
		||||
		if(i < 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Read Error in %s\n",file);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			return 1;
 | 
			
		||||
			}
 | 
			
		||||
		if (i == 0) break;
 | 
			
		||||
		}
 | 
			
		||||
	if(sigin)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_MD_CTX *ctx;
 | 
			
		||||
		BIO_get_md_ctx(bp, &ctx);
 | 
			
		||||
		i = EVP_VerifyFinal(ctx, sigin, (unsigned int)siglen, key); 
 | 
			
		||||
		if(i > 0)
 | 
			
		||||
			BIO_printf(out, "Verified OK\n");
 | 
			
		||||
		else if(i == 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(out, "Verification Failure\n");
 | 
			
		||||
			return 1;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error Verifying Data\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			return 1;
 | 
			
		||||
			}
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
	if(key)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_MD_CTX *ctx;
 | 
			
		||||
		BIO_get_md_ctx(bp, &ctx);
 | 
			
		||||
		if(!EVP_SignFinal(ctx, buf, (unsigned int *)&len, key)) 
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error Signing Data\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			return 1;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		len=BIO_gets(bp,(char *)buf,BUFSIZE);
 | 
			
		||||
 | 
			
		||||
	if(binout) BIO_write(out, buf, len);
 | 
			
		||||
	else 
 | 
			
		||||
		{
 | 
			
		||||
		BIO_write(out,title,strlen(title));
 | 
			
		||||
		for (i=0; i<len; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if (sep && (i != 0))
 | 
			
		||||
			putc(':',stdout);
 | 
			
		||||
		printf("%02x",buf[i]);
 | 
			
		||||
				BIO_printf(out, ":");
 | 
			
		||||
			BIO_printf(out, "%02x",buf[i]);
 | 
			
		||||
			}
 | 
			
		||||
	printf("\n");
 | 
			
		||||
		BIO_printf(out, "\n");
 | 
			
		||||
		}
 | 
			
		||||
	return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										74
									
								
								apps/dh.c
									
									
									
									
									
								
							
							
						
						
									
										74
									
								
								apps/dh.c
									
									
									
									
									
								
							@@ -1,4 +1,5 @@
 | 
			
		||||
/* apps/dh.c */
 | 
			
		||||
/* obsoleted by dhparam.c */
 | 
			
		||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -56,22 +57,23 @@
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include "bio.h"
 | 
			
		||||
#include "err.h"
 | 
			
		||||
#include "bn.h"
 | 
			
		||||
#include "dh.h"
 | 
			
		||||
#include "x509.h"
 | 
			
		||||
#include "pem.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dh.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dh_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (one of DER, TXT or PEM)
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
@@ -81,15 +83,16 @@
 | 
			
		||||
 * -C
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(argc, argv)
 | 
			
		||||
int argc;
 | 
			
		||||
char **argv;
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	DH *dh=NULL;
 | 
			
		||||
	int i,badops=0,text=0;
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat,check=0,noout=0,C=0,ret=1;
 | 
			
		||||
	char *infile,*outfile,*prog;
 | 
			
		||||
	char *infile,*outfile,*prog,*engine;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
@@ -97,6 +100,10 @@ char **argv;
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	engine=NULL;
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
@@ -127,6 +134,11 @@ char **argv;
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-check") == 0)
 | 
			
		||||
			check=1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
@@ -150,19 +162,22 @@ char **argv;
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - one of DER TXT PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg  output format - one of DER TXT PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg       inout file\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - one of DER PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg  output format - one of DER PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg       input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg      output file\n");
 | 
			
		||||
		BIO_printf(bio_err," -check        check the DH parameters\n");
 | 
			
		||||
		BIO_printf(bio_err," -text         check the DH parameters\n");
 | 
			
		||||
		BIO_printf(bio_err," -text         print a text form of the DH parameters\n");
 | 
			
		||||
		BIO_printf(bio_err," -C            Output C code\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout        no output\n");
 | 
			
		||||
		BIO_printf(bio_err," -engine e     use engine e, possibly a hardware device.\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
@@ -182,7 +197,15 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
@@ -195,7 +218,7 @@ bad:
 | 
			
		||||
	if	(informat == FORMAT_ASN1)
 | 
			
		||||
		dh=d2i_DHparams_bio(in,NULL);
 | 
			
		||||
	else if (informat == FORMAT_PEM)
 | 
			
		||||
		dh=PEM_read_bio_DHparams(in,NULL,NULL);
 | 
			
		||||
		dh=PEM_read_bio_DHparams(in,NULL,NULL,NULL);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified\n");
 | 
			
		||||
@@ -220,7 +243,7 @@ bad:
 | 
			
		||||
		BN_print(stdout,dh->g);
 | 
			
		||||
		printf("\n");
 | 
			
		||||
		if (dh->length != 0)
 | 
			
		||||
			printf("recomented private length=%ld\n",dh->length);
 | 
			
		||||
			printf("recommended private length=%ld\n",dh->length);
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
@@ -233,8 +256,8 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
		if (i & DH_CHECK_P_NOT_PRIME)
 | 
			
		||||
			printf("p value is not prime\n");
 | 
			
		||||
		if (i & DH_CHECK_P_NOT_STRONG_PRIME)
 | 
			
		||||
			printf("p value is not a strong prime\n");
 | 
			
		||||
		if (i & DH_CHECK_P_NOT_SAFE_PRIME)
 | 
			
		||||
			printf("p value is not a safe prime\n");
 | 
			
		||||
		if (i & DH_UNABLE_TO_CHECK_GENERATOR)
 | 
			
		||||
			printf("unable to check the generator value\n");
 | 
			
		||||
		if (i & DH_NOT_SUITABLE_GENERATOR)
 | 
			
		||||
@@ -249,10 +272,10 @@ bad:
 | 
			
		||||
 | 
			
		||||
		len=BN_num_bytes(dh->p);
 | 
			
		||||
		bits=BN_num_bits(dh->p);
 | 
			
		||||
		data=(unsigned char *)Malloc(len);
 | 
			
		||||
		data=(unsigned char *)OPENSSL_malloc(len);
 | 
			
		||||
		if (data == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror("Malloc");
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		l=BN_bn2bin(dh->p,data);
 | 
			
		||||
@@ -283,6 +306,7 @@ bad:
 | 
			
		||||
		printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
 | 
			
		||||
		printf("\t\treturn(NULL);\n");
 | 
			
		||||
		printf("\treturn(dh);\n\t}\n");
 | 
			
		||||
		OPENSSL_free(data);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -298,7 +322,7 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to write DH paramaters\n");
 | 
			
		||||
			BIO_printf(bio_err,"unable to write DH parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -306,7 +330,9 @@ bad:
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free(out);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dh != NULL) DH_free(dh);
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,10 @@
 | 
			
		||||
-----BEGIN DH PARAMETERS-----
 | 
			
		||||
MIGHAoGBAJf2QmHKtQXdKCjhPx1ottPb0PMTBH9A6FbaWMsTuKG/K3g6TG1Z1fkq
 | 
			
		||||
/Gz/PWk/eLI9TzFgqVAuPvr3q14a1aZeVUMTgo2oO5/y2UHe6VaJ+trqCTat3xlx
 | 
			
		||||
/mNbIK9HA2RgPC3gWfVLZQrY+gz3ASHHR5nXWHEyvpuZm7m3h+irAgEC
 | 
			
		||||
MIGHAoGBAPSI/VhOSdvNILSd5JEHNmszbDgNRR0PfIizHHxbLY7288kjwEPwpVsY
 | 
			
		||||
jY67VYy4XTjTNP18F1dDox0YbN4zISy1Kv884bEpQBgRjXyEpwpy1obEAxnIByl6
 | 
			
		||||
ypUM2Zafq9AKUJsCRtMIPWakXUGfnHy9iUsiGSa6q6Jew1XpL3jHAgEC
 | 
			
		||||
-----END DH PARAMETERS-----
 | 
			
		||||
 | 
			
		||||
These are the 1024 bit DH parameters from "Assigned Number for SKIP Protocols"
 | 
			
		||||
(http://www.skip-vpn.org/spec/numbers.html).
 | 
			
		||||
See there for how they were generated.
 | 
			
		||||
Note that g is not a generator, but this is not a problem since p is a safe prime.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								apps/dh2048.pem
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								apps/dh2048.pem
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
-----BEGIN DH PARAMETERS-----
 | 
			
		||||
MIIBCAKCAQEA9kJXtwh/CBdyorrWqULzBej5UxE5T7bxbrlLOCDaAadWoxTpj0BV
 | 
			
		||||
89AHxstDqZSt90xkhkn4DIO9ZekX1KHTUPj1WV/cdlJPPT2N286Z4VeSWc39uK50
 | 
			
		||||
T8X8dryDxUcwYc58yWb/Ffm7/ZFexwGq01uejaClcjrUGvC/RgBYK+X0iP1YTknb
 | 
			
		||||
zSC0neSRBzZrM2w4DUUdD3yIsxx8Wy2O9vPJI8BD8KVbGI2Ou1WMuF040zT9fBdX
 | 
			
		||||
Q6MdGGzeMyEstSr/POGxKUAYEY18hKcKctaGxAMZyAcpesqVDNmWn6vQClCbAkbT
 | 
			
		||||
CD1mpF1Bn5x8vYlLIhkmuquiXsNV6TILOwIBAg==
 | 
			
		||||
-----END DH PARAMETERS-----
 | 
			
		||||
 | 
			
		||||
These are the 2048 bit DH parameters from "Assigned Number for SKIP Protocols"
 | 
			
		||||
(http://www.skip-vpn.org/spec/numbers.html).
 | 
			
		||||
See there for how they were generated.
 | 
			
		||||
							
								
								
									
										18
									
								
								apps/dh4096.pem
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								apps/dh4096.pem
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
-----BEGIN DH PARAMETERS-----
 | 
			
		||||
MIICCAKCAgEA+hRyUsFN4VpJ1O8JLcCo/VWr19k3BCgJ4uk+d+KhehjdRqNDNyOQ
 | 
			
		||||
l/MOyQNQfWXPeGKmOmIig6Ev/nm6Nf9Z2B1h3R4hExf+zTiHnvVPeRBhjdQi81rt
 | 
			
		||||
Xeoh6TNrSBIKIHfUJWBh3va0TxxjQIs6IZOLeVNRLMqzeylWqMf49HsIXqbcokUS
 | 
			
		||||
Vt1BkvLdW48j8PPv5DsKRN3tloTxqDJGo9tKvj1Fuk74A+Xda1kNhB7KFlqMyN98
 | 
			
		||||
VETEJ6c7KpfOo30mnK30wqw3S8OtaIR/maYX72tGOno2ehFDkq3pnPtEbD2CScxc
 | 
			
		||||
alJC+EL7RPk5c/tgeTvCngvc1KZn92Y//EI7G9tPZtylj2b56sHtMftIoYJ9+ODM
 | 
			
		||||
sccD5Piz/rejE3Ome8EOOceUSCYAhXn8b3qvxVI1ddd1pED6FHRhFvLrZxFvBEM9
 | 
			
		||||
ERRMp5QqOaHJkM+Dxv8Cj6MqrCbfC4u+ZErxodzuusgDgvZiLF22uxMZbobFWyte
 | 
			
		||||
OvOzKGtwcTqO/1wV5gKkzu1ZVswVUQd5Gg8lJicwqRWyyNRczDDoG9jVDxmogKTH
 | 
			
		||||
AaqLulO7R8Ifa1SwF2DteSGVtgWEN8gDpN3RBmmPTDngyF2DHb5qmpnznwtFKdTL
 | 
			
		||||
KWbuHn491xNO25CQWMtem80uKw+pTnisBRF/454n1Jnhub144YRBoN8CAQI=
 | 
			
		||||
-----END DH PARAMETERS-----
 | 
			
		||||
 | 
			
		||||
These are the 4096 bit DH parameters from "Assigned Number for SKIP Protocols"
 | 
			
		||||
(http://www.skip-vpn.org/spec/numbers.html).
 | 
			
		||||
See there for how they were generated.
 | 
			
		||||
Note that g is not a generator, but this is not a problem since p is a safe prime.
 | 
			
		||||
							
								
								
									
										9
									
								
								apps/dh512.pem
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								apps/dh512.pem
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
-----BEGIN DH PARAMETERS-----
 | 
			
		||||
MEYCQQD1Kv884bEpQBgRjXyEpwpy1obEAxnIByl6ypUM2Zafq9AKUJsCRtMIPWak
 | 
			
		||||
XUGfnHy9iUsiGSa6q6Jew1XpKgVfAgEC
 | 
			
		||||
-----END DH PARAMETERS-----
 | 
			
		||||
 | 
			
		||||
These are the 512 bit DH parameters from "Assigned Number for SKIP Protocols"
 | 
			
		||||
(http://www.skip-vpn.org/spec/numbers.html).
 | 
			
		||||
See there for how they were generated.
 | 
			
		||||
Note that g is not a generator, but this is not a problem since p is a safe prime.
 | 
			
		||||
							
								
								
									
										541
									
								
								apps/dhparam.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										541
									
								
								apps/dhparam.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,541 @@
 | 
			
		||||
/* apps/dhparam.c */
 | 
			
		||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this software
 | 
			
		||||
 *    must display the following acknowledgement:
 | 
			
		||||
 *    "This product includes cryptographic software written by
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1998-2000 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
 *    the documentation and/or other materials provided with the
 | 
			
		||||
 *    distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this
 | 
			
		||||
 *    software must display the following acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
			
		||||
 *    endorse or promote products derived from this software without
 | 
			
		||||
 *    prior written permission. For written permission, please contact
 | 
			
		||||
 *    openssl-core@openssl.org.
 | 
			
		||||
 *
 | 
			
		||||
 * 5. Products derived from this software may not be called "OpenSSL"
 | 
			
		||||
 *    nor may "OpenSSL" appear in their names without prior written
 | 
			
		||||
 *    permission of the OpenSSL Project.
 | 
			
		||||
 *
 | 
			
		||||
 * 6. Redistributions of any form whatsoever must retain the following
 | 
			
		||||
 *    acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
			
		||||
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
			
		||||
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
			
		||||
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
			
		||||
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 * ====================================================================
 | 
			
		||||
 *
 | 
			
		||||
 * This product includes cryptographic software written by Eric Young
 | 
			
		||||
 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dh.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
#include <openssl/dsa.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dhparam_main
 | 
			
		||||
 | 
			
		||||
#define DEFBITS	512
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
 * -dsaparam  - read or generate DSA parameters, convert to DH
 | 
			
		||||
 * -check	- check the parameters are ok
 | 
			
		||||
 * -noout
 | 
			
		||||
 * -text
 | 
			
		||||
 * -C
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static void MS_CALLBACK dh_cb(int p, int n, void *arg);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	DH *dh=NULL;
 | 
			
		||||
	int i,badops=0,text=0;
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
	int dsaparam=0;
 | 
			
		||||
#endif
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat,check=0,noout=0,C=0,ret=1;
 | 
			
		||||
	char *infile,*outfile,*prog;
 | 
			
		||||
	char *inrand=NULL,*engine=NULL;
 | 
			
		||||
	int num = 0, g = 0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-check") == 0)
 | 
			
		||||
			check=1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
		else if (strcmp(*argv,"-dsaparam") == 0)
 | 
			
		||||
			dsaparam=1;
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-C") == 0)
 | 
			
		||||
			C=1;
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-2") == 0)
 | 
			
		||||
			g=2;
 | 
			
		||||
		else if (strcmp(*argv,"-5") == 0)
 | 
			
		||||
			g=5;
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (((sscanf(*argv,"%d",&num) == 0) || (num <= 0)))
 | 
			
		||||
			goto bad;
 | 
			
		||||
		argv++;
 | 
			
		||||
		argc--;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] [numbits]\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - one of DER PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg  output format - one of DER PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg       input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg      output file\n");
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
		BIO_printf(bio_err," -dsaparam     read or generate DSA parameters, convert to DH\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -check        check the DH parameters\n");
 | 
			
		||||
		BIO_printf(bio_err," -text         print a text form of the DH parameters\n");
 | 
			
		||||
		BIO_printf(bio_err," -C            Output C code\n");
 | 
			
		||||
		BIO_printf(bio_err," -2            generate parameters using  2 as the generator value\n");
 | 
			
		||||
		BIO_printf(bio_err," -5            generate parameters using  5 as the generator value\n");
 | 
			
		||||
		BIO_printf(bio_err," numbits       number of bits in to generate (default 512)\n");
 | 
			
		||||
		BIO_printf(bio_err," -engine e     use engine e, possibly a hardware device.\n");
 | 
			
		||||
		BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,"               - load the file (or the files in the directory) into\n");
 | 
			
		||||
		BIO_printf(bio_err,"               the random number generator\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout        no output\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
 | 
			
		||||
	if (g && !num)
 | 
			
		||||
		num = DEFBITS;
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
	if (dsaparam)
 | 
			
		||||
		{
 | 
			
		||||
		if (g)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "generator may not be chosen for DSA parameters\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
#endif
 | 
			
		||||
		{
 | 
			
		||||
		/* DH parameters */
 | 
			
		||||
		if (num && !g)
 | 
			
		||||
			g = 2;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if(num) {
 | 
			
		||||
 | 
			
		||||
		if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
			}
 | 
			
		||||
		if (inrand != NULL)
 | 
			
		||||
			BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
				app_RAND_load_files(inrand));
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
		if (dsaparam)
 | 
			
		||||
			{
 | 
			
		||||
			DSA *dsa;
 | 
			
		||||
			
 | 
			
		||||
			BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
 | 
			
		||||
			dsa = DSA_generate_parameters(num, NULL, 0, NULL, NULL, dh_cb, bio_err);
 | 
			
		||||
			if (dsa == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			dh = DSA_dup_DH(dsa);
 | 
			
		||||
			DSA_free(dsa);
 | 
			
		||||
			if (dh == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
#endif
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g);
 | 
			
		||||
			BIO_printf(bio_err,"This is going to take a long time\n");
 | 
			
		||||
			dh=DH_generate_parameters(num,g,dh_cb,bio_err);
 | 
			
		||||
			
 | 
			
		||||
			if (dh == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
	} else {
 | 
			
		||||
 | 
			
		||||
		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	(informat != FORMAT_ASN1 && informat != FORMAT_PEM)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"bad input format specified\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
		if (dsaparam)
 | 
			
		||||
			{
 | 
			
		||||
			DSA *dsa;
 | 
			
		||||
			
 | 
			
		||||
			if (informat == FORMAT_ASN1)
 | 
			
		||||
				dsa=d2i_DSAparams_bio(in,NULL);
 | 
			
		||||
			else /* informat == FORMAT_PEM */
 | 
			
		||||
				dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL);
 | 
			
		||||
			
 | 
			
		||||
			if (dsa == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"unable to load DSA parameters\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			
 | 
			
		||||
			dh = DSA_dup_DH(dsa);
 | 
			
		||||
			DSA_free(dsa);
 | 
			
		||||
			if (dh == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
#endif
 | 
			
		||||
			{
 | 
			
		||||
			if (informat == FORMAT_ASN1)
 | 
			
		||||
				dh=d2i_DHparams_bio(in,NULL);
 | 
			
		||||
			else /* informat == FORMAT_PEM */
 | 
			
		||||
				dh=PEM_read_bio_DHparams(in,NULL,NULL,NULL);
 | 
			
		||||
			
 | 
			
		||||
			if (dh == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"unable to load DH parameters\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		
 | 
			
		||||
		/* dh != NULL */
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		DHparams_print(out,dh);
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if (check)
 | 
			
		||||
		{
 | 
			
		||||
		if (!DH_check(dh,&i))
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (i & DH_CHECK_P_NOT_PRIME)
 | 
			
		||||
			printf("p value is not prime\n");
 | 
			
		||||
		if (i & DH_CHECK_P_NOT_SAFE_PRIME)
 | 
			
		||||
			printf("p value is not a safe prime\n");
 | 
			
		||||
		if (i & DH_UNABLE_TO_CHECK_GENERATOR)
 | 
			
		||||
			printf("unable to check the generator value\n");
 | 
			
		||||
		if (i & DH_NOT_SUITABLE_GENERATOR)
 | 
			
		||||
			printf("the g value is not a generator\n");
 | 
			
		||||
		if (i == 0)
 | 
			
		||||
			printf("DH parameters appear to be ok.\n");
 | 
			
		||||
		}
 | 
			
		||||
	if (C)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char *data;
 | 
			
		||||
		int len,l,bits;
 | 
			
		||||
 | 
			
		||||
		len=BN_num_bytes(dh->p);
 | 
			
		||||
		bits=BN_num_bits(dh->p);
 | 
			
		||||
		data=(unsigned char *)OPENSSL_malloc(len);
 | 
			
		||||
		if (data == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		printf("#ifndef HEADER_DH_H\n"
 | 
			
		||||
		       "#include <openssl/dh.h>\n"
 | 
			
		||||
		       "#endif\n");
 | 
			
		||||
		printf("DH *get_dh%d()\n\t{\n",bits);
 | 
			
		||||
 | 
			
		||||
		l=BN_bn2bin(dh->p,data);
 | 
			
		||||
		printf("\tstatic unsigned char dh%d_p[]={",bits);
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t\t};\n");
 | 
			
		||||
 | 
			
		||||
		l=BN_bn2bin(dh->g,data);
 | 
			
		||||
		printf("\tstatic unsigned char dh%d_g[]={",bits);
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t\t};\n");
 | 
			
		||||
 | 
			
		||||
		printf("\tDH *dh;\n\n");
 | 
			
		||||
		printf("\tif ((dh=DH_new()) == NULL) return(NULL);\n");
 | 
			
		||||
		printf("\tdh->p=BN_bin2bn(dh%d_p,sizeof(dh%d_p),NULL);\n",
 | 
			
		||||
			bits,bits);
 | 
			
		||||
		printf("\tdh->g=BN_bin2bn(dh%d_g,sizeof(dh%d_g),NULL);\n",
 | 
			
		||||
			bits,bits);
 | 
			
		||||
		printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
 | 
			
		||||
		printf("\t\t{ DH_free(dh); return(NULL); }\n");
 | 
			
		||||
		if (dh->length)
 | 
			
		||||
			printf("\tdh->length = %ld;\n", dh->length);
 | 
			
		||||
		printf("\treturn(dh);\n\t}\n");
 | 
			
		||||
		OPENSSL_free(data);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if (!noout)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_DHparams_bio(out,dh);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i=PEM_write_bio_DHparams(out,dh);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to write DH parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dh != NULL) DH_free(dh);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/* dh_cb is identical to dsa_cb in apps/dsaparam.c */
 | 
			
		||||
static void MS_CALLBACK dh_cb(int p, int n, void *arg)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
 | 
			
		||||
	if (p == 0) c='.';
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write((BIO *)arg,&c,1);
 | 
			
		||||
	(void)BIO_flush((BIO *)arg);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1,17 +1,14 @@
 | 
			
		||||
-----BEGIN DSA PRIVATE KEY-----
 | 
			
		||||
Proc-Type: 4,ENCRYPTED
 | 
			
		||||
DEK-Info: DES-EDE3-CBC,C5B6C7CC9E1FE2C0
 | 
			
		||||
 | 
			
		||||
svCXBcBRhMuU22UXOfiKZA+thmz6KYXpt1Yg5Rd+TYQcQ1MdvNy0B0tkP1SxzDq0
 | 
			
		||||
Xh1eMeTML9/9/0rKakgNXXXbpi5RB8t6BmwRSyej89F7nn1mtR3qzoyPRpp15SDl
 | 
			
		||||
Tn67C+2v+HDF3MFk88hiNCYkNbcmi7TWvChsl8N1r7wdZwtIox56yXdgxw6ZIpa/
 | 
			
		||||
par0oUCzN7fiavPgCWz1kfPNSaBQSdxwH7TZi5tMHAr0J3C7a7QRnZfE09R59Uqr
 | 
			
		||||
zslrq+ndIw1BZAxoY0SlBu+iFOVaBVlwToC4AsHkv7j7l8ITtr7f42YbBa44D9TO
 | 
			
		||||
uOhONmkk/v3Fso4RaOEzdKZC+hnmmzvHs6TiTWm6yzJgSFwyOUK0eGmKEeVxpcH5
 | 
			
		||||
rUOlHOwzen+FFtocZDZAfdFnb7QY7L/boQvyA5A+ZbRG4DUpmBQeQsSaICHM5Rxx
 | 
			
		||||
1QaLF413VNPXTLPbW0ilSc2H8x2iZTIVKfd33oSO6NhXPtSYQgfecEF4BvNHY5c4
 | 
			
		||||
HovjT4mckbK95bcBzoCHu43vuSQkmZzdYo/ydSZt6zoPavbBLueTpgSbdXiDi827
 | 
			
		||||
MVqOsYxGCb+kez0FoDSTgw==
 | 
			
		||||
MIIBugIBAAKBgQCnP26Fv0FqKX3wn0cZMJCaCR3aajMexT2GlrMV4FMuj+BZgnOQ
 | 
			
		||||
PnUxmUd6UvuF5NmmezibaIqEm4fGHrV+hktTW1nPcWUZiG7OZq5riDb77Cjcwtel
 | 
			
		||||
u+UsOSZL2ppwGJU3lRBWI/YV7boEXt45T/23Qx+1pGVvzYAR5HCVW1DNSQIVAPcH
 | 
			
		||||
Me36bAYD1YWKHKycZedQZmVvAoGATd9MA6aRivUZb1BGJZnlaG8w42nh5bNdmLso
 | 
			
		||||
hkj83pkEP1+IDJxzJA0gXbkqmj8YlifkYofBe3RiU/xhJ6h6kQmdtvFNnFQPWAbu
 | 
			
		||||
SXQHzlV+I84W9srcWmEBfslxtU323DQph2j2XiCTs9v15AlsQReVkusBtXOlan7Y
 | 
			
		||||
Mu0OArgCgYAapll6iqz9XrZFlk2GCVcB+KihxWnH7IuHvSLw9YUrJahcBHmbpvt4
 | 
			
		||||
94lF4gC5w3WPM+vXJofbusk4GoQEEsQNMDaah4m49uUqAylOVFJJJXuirVJ+o+0T
 | 
			
		||||
tOFDITEAl+YZZariXOD7tdOSOl9RLMPC6+daHKS9e68u3enxhqnDGQIUB78dhW77
 | 
			
		||||
J6zsFbSEHaQGUmfSeoM=
 | 
			
		||||
-----END DSA PRIVATE KEY-----
 | 
			
		||||
-----BEGIN CERTIFICATE REQUEST-----
 | 
			
		||||
MIICUjCCAhECAQAwUjELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUx
 | 
			
		||||
 
 | 
			
		||||
@@ -1,17 +1,14 @@
 | 
			
		||||
-----BEGIN DSA PRIVATE KEY-----
 | 
			
		||||
Proc-Type: 4,ENCRYPTED
 | 
			
		||||
DEK-Info: DES-EDE3-CBC,F80EEEBEEA7386C4
 | 
			
		||||
 | 
			
		||||
GZ9zgFcHOlnhPoiSbVi/yXc9mGoj44A6IveD4UlpSEUt6Xbse3Fr0KHIUyQ3oGnS
 | 
			
		||||
mClKoAp/eOTb5Frhto85SzdsxYtac+X1v5XwdzAMy2KowHVk1N8A5jmE2OlkNPNt
 | 
			
		||||
of132MNlo2cyIRYaa35PPYBGNCmUm7YcYS8O90YtkrQZZTf4+2C4kllhMcdkQwkr
 | 
			
		||||
FWSWC8YOQ7w0LHb4cX1FejHHom9Nd/0PN3vn3UyySvfOqoR7nbXkrpHXmPIr0hxX
 | 
			
		||||
RcF0aXcV/CzZ1/nfXWQf4o3+oD0T22SDoVcZY60IzI0oIc3pNCbDV3uKNmgekrFd
 | 
			
		||||
qOUJ+QW8oWp7oefRx62iBfIeC8DZunohMXaWAQCU0sLQOR4yEdeUCnzCSywe0bG1
 | 
			
		||||
diD0KYaEe+Yub1BQH4aLsBgDjardgpJRTQLq0DUvw0/QGO1irKTJzegEDNVBKrVn
 | 
			
		||||
V4AHOKT1CUKqvGNRP1UnccUDTF6miOAtaj/qpzra7sSk7dkGBvIEeFoAg84kfh9h
 | 
			
		||||
hVvF1YyzC9bwZepruoqoUwke/WdNIR5ymOVZ/4Liw0JdIOcq+atbdRX08niqIRkf
 | 
			
		||||
dsZrUj4leo3zdefYUQ7w4N2Ns37yDFq7
 | 
			
		||||
MIIBvAIBAAKBgQCnP26Fv0FqKX3wn0cZMJCaCR3aajMexT2GlrMV4FMuj+BZgnOQ
 | 
			
		||||
PnUxmUd6UvuF5NmmezibaIqEm4fGHrV+hktTW1nPcWUZiG7OZq5riDb77Cjcwtel
 | 
			
		||||
u+UsOSZL2ppwGJU3lRBWI/YV7boEXt45T/23Qx+1pGVvzYAR5HCVW1DNSQIVAPcH
 | 
			
		||||
Me36bAYD1YWKHKycZedQZmVvAoGATd9MA6aRivUZb1BGJZnlaG8w42nh5bNdmLso
 | 
			
		||||
hkj83pkEP1+IDJxzJA0gXbkqmj8YlifkYofBe3RiU/xhJ6h6kQmdtvFNnFQPWAbu
 | 
			
		||||
SXQHzlV+I84W9srcWmEBfslxtU323DQph2j2XiCTs9v15AlsQReVkusBtXOlan7Y
 | 
			
		||||
Mu0OArgCgYEApu25HkB1b4gKMIV7aLGNSIknMzYgrB7o1kQxeDf34dDVRM9OZ8tk
 | 
			
		||||
umz6tl+iUcNe5EoxdsYV1IXSddjOi08LOLsZq7AQlNnKvbtlmMDULpqkZJD0bO7A
 | 
			
		||||
29nisJfKy1URqABLw5DgfcPh1ZLXtmDfUgJvmjgTmvTPT2j9TPjq7RUCFQDNvrBz
 | 
			
		||||
6TicfImU7UFRn9h00j0lJQ==
 | 
			
		||||
-----END DSA PRIVATE KEY-----
 | 
			
		||||
-----BEGIN CERTIFICATE REQUEST-----
 | 
			
		||||
MIICVTCCAhMCAQAwUzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUx
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										124
									
								
								apps/dsa.c
									
									
									
									
									
								
							
							
						
						
									
										124
									
								
								apps/dsa.c
									
									
									
									
									
								
							@@ -56,17 +56,18 @@
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include "bio.h"
 | 
			
		||||
#include "err.h"
 | 
			
		||||
#include "dsa.h"
 | 
			
		||||
#include "evp.h"
 | 
			
		||||
#include "x509.h"
 | 
			
		||||
#include "pem.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/dsa.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dsa_main
 | 
			
		||||
@@ -78,21 +79,28 @@
 | 
			
		||||
 * -des		- encrypt output if PEM format with DES in cbc mode
 | 
			
		||||
 * -des3	- encrypt output if PEM format
 | 
			
		||||
 * -idea	- encrypt output if PEM format
 | 
			
		||||
 * -aes128	- encrypt output if PEM format
 | 
			
		||||
 * -aes192	- encrypt output if PEM format
 | 
			
		||||
 * -aes256	- encrypt output if PEM format
 | 
			
		||||
 * -text	- print a text version
 | 
			
		||||
 * -modulus	- print the DSA public key
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(argc, argv)
 | 
			
		||||
int argc;
 | 
			
		||||
char **argv;
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	DSA *dsa=NULL;
 | 
			
		||||
	int i,badops=0;
 | 
			
		||||
	EVP_CIPHER *enc=NULL;
 | 
			
		||||
	const EVP_CIPHER *enc=NULL;
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat,text=0,noout=0;
 | 
			
		||||
	char *infile,*outfile,*prog;
 | 
			
		||||
	int pubin = 0, pubout = 0;
 | 
			
		||||
	char *infile,*outfile,*prog,*engine;
 | 
			
		||||
	char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
	char *passin = NULL, *passout = NULL;
 | 
			
		||||
	int modulus=0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
@@ -101,6 +109,10 @@ char **argv;
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	engine=NULL;
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
@@ -131,12 +143,31 @@ char **argv;
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*argv,"-modulus") == 0)
 | 
			
		||||
			modulus=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pubin") == 0)
 | 
			
		||||
			pubin=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pubout") == 0)
 | 
			
		||||
			pubout=1;
 | 
			
		||||
		else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
@@ -152,14 +183,21 @@ char **argv;
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - one of DER NET PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg  output format - one of DER NET PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg       inout file\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg     input format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg    output format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg         input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -passin arg     input file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg        output file\n");
 | 
			
		||||
		BIO_printf(bio_err," -passout arg    output file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err," -engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
		BIO_printf(bio_err," -des            encrypt PEM output with cbc des\n");
 | 
			
		||||
		BIO_printf(bio_err," -des3           encrypt PEM output with ede cbc des using 168 bit key\n");
 | 
			
		||||
#ifndef NO_IDEA
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		BIO_printf(bio_err," -idea           encrypt PEM output with cbc idea\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -text           print the key in text\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout          don't print key out\n");
 | 
			
		||||
@@ -169,6 +207,13 @@ bad:
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
@@ -188,25 +233,35 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err,"read DSA private key\n");
 | 
			
		||||
	if	(informat == FORMAT_ASN1)
 | 
			
		||||
		dsa=d2i_DSAPrivateKey_bio(in,NULL);
 | 
			
		||||
	else if (informat == FORMAT_PEM)
 | 
			
		||||
		dsa=PEM_read_bio_DSAPrivateKey(in,NULL,NULL);
 | 
			
		||||
	else
 | 
			
		||||
	BIO_printf(bio_err,"read DSA key\n");
 | 
			
		||||
	if	(informat == FORMAT_ASN1) {
 | 
			
		||||
		if(pubin) dsa=d2i_DSA_PUBKEY_bio(in,NULL);
 | 
			
		||||
		else dsa=d2i_DSAPrivateKey_bio(in,NULL);
 | 
			
		||||
	} else if (informat == FORMAT_PEM) {
 | 
			
		||||
		if(pubin) dsa=PEM_read_bio_DSA_PUBKEY(in,NULL, NULL, NULL);
 | 
			
		||||
		else dsa=PEM_read_bio_DSAPrivateKey(in,NULL,NULL,passin);
 | 
			
		||||
	} else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified for key\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (dsa == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load Private Key\n");
 | 
			
		||||
		BIO_printf(bio_err,"unable to load Key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
@@ -232,12 +287,16 @@ bad:
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (noout) goto end;
 | 
			
		||||
	BIO_printf(bio_err,"writing DSA private key\n");
 | 
			
		||||
	if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
		i=i2d_DSAPrivateKey_bio(out,dsa);
 | 
			
		||||
	else if (outformat == FORMAT_PEM)
 | 
			
		||||
		i=PEM_write_bio_DSAPrivateKey(out,dsa,enc,NULL,0,NULL);
 | 
			
		||||
	else	{
 | 
			
		||||
	BIO_printf(bio_err,"writing DSA key\n");
 | 
			
		||||
	if 	(outformat == FORMAT_ASN1) {
 | 
			
		||||
		if(pubin || pubout) i=i2d_DSA_PUBKEY_bio(out,dsa);
 | 
			
		||||
		else i=i2d_DSAPrivateKey_bio(out,dsa);
 | 
			
		||||
	} else if (outformat == FORMAT_PEM) {
 | 
			
		||||
		if(pubin || pubout)
 | 
			
		||||
			i=PEM_write_bio_DSA_PUBKEY(out,dsa);
 | 
			
		||||
		else i=PEM_write_bio_DSAPrivateKey(out,dsa,enc,
 | 
			
		||||
							NULL,0,NULL, passout);
 | 
			
		||||
	} else {
 | 
			
		||||
		BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -250,8 +309,11 @@ bad:
 | 
			
		||||
		ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if(in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free(out);
 | 
			
		||||
	if(out != NULL) BIO_free_all(out);
 | 
			
		||||
	if(dsa != NULL) DSA_free(dsa);
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	if(passin) OPENSSL_free(passin);
 | 
			
		||||
	if(passout) OPENSSL_free(passout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										111
									
								
								apps/dsaparam.c
									
									
									
									
									
								
							
							
						
						
									
										111
									
								
								apps/dsaparam.c
									
									
									
									
									
								
							@@ -56,23 +56,24 @@
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include "bio.h"
 | 
			
		||||
#include "err.h"
 | 
			
		||||
#include "bn.h"
 | 
			
		||||
#include "rand.h"
 | 
			
		||||
#include "dsa.h"
 | 
			
		||||
#include "x509.h"
 | 
			
		||||
#include "pem.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dsa.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dsaparam_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (one of DER, TXT or PEM)
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
@@ -83,23 +84,21 @@
 | 
			
		||||
 * -genkey
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef NOPROTO
 | 
			
		||||
static void MS_CALLBACK dsa_cb(int p, int n, char *arg);
 | 
			
		||||
#else
 | 
			
		||||
static void MS_CALLBACK dsa_cb();
 | 
			
		||||
#endif
 | 
			
		||||
static void MS_CALLBACK dsa_cb(int p, int n, void *arg);
 | 
			
		||||
 | 
			
		||||
int MAIN(argc, argv)
 | 
			
		||||
int argc;
 | 
			
		||||
char **argv;
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	DSA *dsa=NULL;
 | 
			
		||||
	int i,badops=0,text=0;
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat,noout=0,C=0,ret=1;
 | 
			
		||||
	char *infile,*outfile,*prog,*inrand=NULL;
 | 
			
		||||
	int numbits= -1,num,genkey=0;
 | 
			
		||||
	char buffer[200],*randfile=NULL;
 | 
			
		||||
	int need_rand=0;
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
@@ -107,6 +106,9 @@ char **argv;
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
@@ -137,16 +139,25 @@ char **argv;
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if(strcmp(*argv, "-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine = *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*argv,"-C") == 0)
 | 
			
		||||
			C=1;
 | 
			
		||||
		else if (strcmp(*argv,"-genkey") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			genkey=1;
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
@@ -154,6 +165,7 @@ char **argv;
 | 
			
		||||
			{
 | 
			
		||||
			/* generate a key */
 | 
			
		||||
			numbits=num;
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
@@ -170,14 +182,16 @@ char **argv;
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] [bits] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - one of DER TXT PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg  output format - one of DER TXT PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg       inout file\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg  output format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg       input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg      output file\n");
 | 
			
		||||
		BIO_printf(bio_err," -text         check the DSA parameters\n");
 | 
			
		||||
		BIO_printf(bio_err," -text         print as text\n");
 | 
			
		||||
		BIO_printf(bio_err," -C            Output C code\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout        no output\n");
 | 
			
		||||
		BIO_printf(bio_err," -genkey       generate a DSA key\n");
 | 
			
		||||
		BIO_printf(bio_err," -rand         files to use for random number input\n");
 | 
			
		||||
		BIO_printf(bio_err," -engine e     use engine e, possibly a hardware device.\n");
 | 
			
		||||
		BIO_printf(bio_err," number        number of bits to use for generating private key\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
@@ -203,7 +217,15 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
@@ -213,20 +235,27 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
 | 
			
		||||
	if (need_rand)
 | 
			
		||||
		{
 | 
			
		||||
		app_RAND_load_file(NULL, bio_err, (inrand != NULL));
 | 
			
		||||
		if (inrand != NULL)
 | 
			
		||||
			BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
				app_RAND_load_files(inrand));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (numbits > 0)
 | 
			
		||||
		{
 | 
			
		||||
		randfile=RAND_file_name(buffer,200);
 | 
			
		||||
		RAND_load_file(randfile,1024L*1024L);
 | 
			
		||||
 | 
			
		||||
		assert(need_rand);
 | 
			
		||||
		BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
 | 
			
		||||
	        BIO_printf(bio_err,"This could take some time\n");
 | 
			
		||||
	        dsa=DSA_generate_parameters(num,NULL,0,NULL,NULL,
 | 
			
		||||
			dsa_cb,(char *)bio_err);
 | 
			
		||||
	        dsa=DSA_generate_parameters(num,NULL,0,NULL,NULL, dsa_cb,bio_err);
 | 
			
		||||
		}
 | 
			
		||||
	else if	(informat == FORMAT_ASN1)
 | 
			
		||||
		dsa=d2i_DSAparams_bio(in,NULL);
 | 
			
		||||
	else if (informat == FORMAT_PEM)
 | 
			
		||||
		dsa=PEM_read_bio_DSAparams(in,NULL,NULL);
 | 
			
		||||
		dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified\n");
 | 
			
		||||
@@ -253,10 +282,10 @@ bad:
 | 
			
		||||
		bits_p=BN_num_bits(dsa->p);
 | 
			
		||||
		bits_q=BN_num_bits(dsa->q);
 | 
			
		||||
		bits_g=BN_num_bits(dsa->g);
 | 
			
		||||
		data=(unsigned char *)Malloc(len+20);
 | 
			
		||||
		data=(unsigned char *)OPENSSL_malloc(len+20);
 | 
			
		||||
		if (data == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror("Malloc");
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		l=BN_bn2bin(dsa->p,data);
 | 
			
		||||
@@ -296,7 +325,7 @@ bad:
 | 
			
		||||
		printf("\tdsa->g=BN_bin2bn(dsa%d_g,sizeof(dsa%d_g),NULL);\n",
 | 
			
		||||
			bits_p,bits_p);
 | 
			
		||||
		printf("\tif ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))\n");
 | 
			
		||||
		printf("\t\treturn(NULL);\n");
 | 
			
		||||
		printf("\t\t{ DSA_free(dsa); return(NULL); }\n");
 | 
			
		||||
		printf("\treturn(dsa);\n\t}\n");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -313,7 +342,7 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to write DSA paramaters\n");
 | 
			
		||||
			BIO_printf(bio_err,"unable to write DSA parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -322,30 +351,31 @@ bad:
 | 
			
		||||
		{
 | 
			
		||||
		DSA *dsakey;
 | 
			
		||||
 | 
			
		||||
		assert(need_rand);
 | 
			
		||||
		if ((dsakey=DSAparams_dup(dsa)) == NULL) goto end;
 | 
			
		||||
		if (!DSA_generate_key(dsakey)) goto end;
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_DSAPrivateKey_bio(out,dsakey);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i=PEM_write_bio_DSAPrivateKey(out,dsakey,NULL,NULL,0,NULL);
 | 
			
		||||
			i=PEM_write_bio_DSAPrivateKey(out,dsakey,NULL,NULL,0,NULL,NULL);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		DSA_free(dsakey);
 | 
			
		||||
		}
 | 
			
		||||
	if (need_rand)
 | 
			
		||||
		app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free(out);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dsa != NULL) DSA_free(dsa);
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void MS_CALLBACK dsa_cb(p, n, arg)
 | 
			
		||||
int p;
 | 
			
		||||
int n;
 | 
			
		||||
char *arg;
 | 
			
		||||
static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
 | 
			
		||||
@@ -353,9 +383,10 @@ char *arg;
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write((BIO *)arg,&c,1);
 | 
			
		||||
	BIO_flush((BIO *)arg);
 | 
			
		||||
	BIO_write(arg,&c,1);
 | 
			
		||||
	(void)BIO_flush(arg);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										395
									
								
								apps/ec.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										395
									
								
								apps/ec.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,395 @@
 | 
			
		||||
/* apps/ec.c */
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Nils Larsch for the OpenSSL project.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
 *    the documentation and/or other materials provided with the
 | 
			
		||||
 *    distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this
 | 
			
		||||
 *    software must display the following acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
			
		||||
 *    endorse or promote products derived from this software without
 | 
			
		||||
 *    prior written permission. For written permission, please contact
 | 
			
		||||
 *    openssl-core@openssl.org.
 | 
			
		||||
 *
 | 
			
		||||
 * 5. Products derived from this software may not be called "OpenSSL"
 | 
			
		||||
 *    nor may "OpenSSL" appear in their names without prior written
 | 
			
		||||
 *    permission of the OpenSSL Project.
 | 
			
		||||
 *
 | 
			
		||||
 * 6. Redistributions of any form whatsoever must retain the following
 | 
			
		||||
 *    acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
			
		||||
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
			
		||||
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
			
		||||
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
			
		||||
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 * ====================================================================
 | 
			
		||||
 *
 | 
			
		||||
 * This product includes cryptographic software written by Eric Young
 | 
			
		||||
 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_EC
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	ec_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg    - input format - default PEM (one of DER, NET or PEM)
 | 
			
		||||
 * -outform arg   - output format - default PEM
 | 
			
		||||
 * -in arg        - input file - default stdin
 | 
			
		||||
 * -out arg       - output file - default stdout
 | 
			
		||||
 * -des           - encrypt output if PEM format with DES in cbc mode
 | 
			
		||||
 * -text          - print a text version
 | 
			
		||||
 * -param_out     - print the elliptic curve parameters
 | 
			
		||||
 * -conv_form arg - specifies the point encoding form
 | 
			
		||||
 * -param_enc arg - specifies the parameter encoding
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	ENGINE 	*e = NULL;
 | 
			
		||||
	int 	ret = 1;
 | 
			
		||||
	EC_KEY 	*eckey = NULL;
 | 
			
		||||
	int 	i, badops = 0;
 | 
			
		||||
	const EVP_CIPHER *enc = NULL;
 | 
			
		||||
	BIO 	*in = NULL, *out = NULL;
 | 
			
		||||
	int 	informat, outformat, text=0, noout=0;
 | 
			
		||||
	int  	pubin = 0, pubout = 0, param_out = 0;
 | 
			
		||||
	char 	*infile, *outfile, *prog, *engine;
 | 
			
		||||
	char 	*passargin = NULL, *passargout = NULL;
 | 
			
		||||
	char 	*passin = NULL, *passout = NULL;
 | 
			
		||||
	point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
 | 
			
		||||
	int	new_form = 0;
 | 
			
		||||
	int	asn1_flag = OPENSSL_EC_NAMED_CURVE;
 | 
			
		||||
	int 	new_asn1_flag = 0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	engine = NULL;
 | 
			
		||||
	infile = NULL;
 | 
			
		||||
	outfile = NULL;
 | 
			
		||||
	informat = FORMAT_PEM;
 | 
			
		||||
	outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog = argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if (strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
			noout = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
			text = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-conv_form") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
			new_form = 1;
 | 
			
		||||
			if (strcmp(*argv, "compressed") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_COMPRESSED;
 | 
			
		||||
			else if (strcmp(*argv, "uncompressed") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_UNCOMPRESSED;
 | 
			
		||||
			else if (strcmp(*argv, "hybrid") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_HYBRID;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-param_enc") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
			new_asn1_flag = 1;
 | 
			
		||||
			if (strcmp(*argv, "named_curve") == 0)
 | 
			
		||||
				asn1_flag = OPENSSL_EC_NAMED_CURVE;
 | 
			
		||||
			else if (strcmp(*argv, "explicit") == 0)
 | 
			
		||||
				asn1_flag = 0;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-param_out") == 0)
 | 
			
		||||
			param_out = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-pubin") == 0)
 | 
			
		||||
			pubin=1;
 | 
			
		||||
		else if (strcmp(*argv, "-pubout") == 0)
 | 
			
		||||
			pubout=1;
 | 
			
		||||
		else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
		BIO_printf(bio_err, " -inform arg     input format - "
 | 
			
		||||
				"DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err, " -outform arg    output format - "
 | 
			
		||||
				"DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err, " -in arg         input file\n");
 | 
			
		||||
		BIO_printf(bio_err, " -passin arg     input file pass "
 | 
			
		||||
				"phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err, " -out arg        output file\n");
 | 
			
		||||
		BIO_printf(bio_err, " -passout arg    output file pass "
 | 
			
		||||
				"phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err, " -engine e       use engine e, "
 | 
			
		||||
				"possibly a hardware device.\n");
 | 
			
		||||
		BIO_printf(bio_err, " -des            encrypt PEM output, "
 | 
			
		||||
				"instead of 'des' every other \n"
 | 
			
		||||
				"                 cipher "
 | 
			
		||||
				"supported by OpenSSL can be used\n");
 | 
			
		||||
		BIO_printf(bio_err, " -text           print the key\n");
 | 
			
		||||
		BIO_printf(bio_err, " -noout          don't print key out\n");
 | 
			
		||||
		BIO_printf(bio_err, " -param_out      print the elliptic "
 | 
			
		||||
				"curve parameters\n");
 | 
			
		||||
		BIO_printf(bio_err, " -conv_form arg  specifies the "
 | 
			
		||||
				"point conversion form \n");
 | 
			
		||||
		BIO_printf(bio_err, "                 possible values:"
 | 
			
		||||
				" compressed\n");
 | 
			
		||||
		BIO_printf(bio_err, "                                 "
 | 
			
		||||
				" uncompressed (default)\n");
 | 
			
		||||
		BIO_printf(bio_err, "                                  "
 | 
			
		||||
				" hybrid\n");
 | 
			
		||||
		BIO_printf(bio_err, " -param_enc arg  specifies the way"
 | 
			
		||||
				" the ec parameters are encoded\n");
 | 
			
		||||
		BIO_printf(bio_err, "                 in the asn1 der "
 | 
			
		||||
				"encoding\n");
 | 
			
		||||
		BIO_printf(bio_err, "                 possilbe values:"
 | 
			
		||||
				" named_curve (default)\n");
 | 
			
		||||
		BIO_printf(bio_err,"                                  "
 | 
			
		||||
				"explicit\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) 
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	in = BIO_new(BIO_s_file());
 | 
			
		||||
	out = BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in, infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err, "read EC key\n");
 | 
			
		||||
	if (informat == FORMAT_ASN1) 
 | 
			
		||||
		{
 | 
			
		||||
		if (pubin) 
 | 
			
		||||
			eckey = d2i_EC_PUBKEY_bio(in, NULL);
 | 
			
		||||
		else 
 | 
			
		||||
			eckey = d2i_ECPrivateKey_bio(in, NULL);
 | 
			
		||||
		} 
 | 
			
		||||
	else if (informat == FORMAT_PEM) 
 | 
			
		||||
		{
 | 
			
		||||
		if (pubin) 
 | 
			
		||||
			eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL, 
 | 
			
		||||
				NULL);
 | 
			
		||||
		else 
 | 
			
		||||
			eckey = PEM_read_bio_ECPrivateKey(in, NULL, NULL,
 | 
			
		||||
				passin);
 | 
			
		||||
		} 
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "bad input format specified for key\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (eckey == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load Key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out, outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (new_form)
 | 
			
		||||
		{
 | 
			
		||||
		EC_GROUP_set_point_conversion_form(eckey->group, form);
 | 
			
		||||
		eckey->conv_form = form;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (new_asn1_flag)
 | 
			
		||||
		EC_GROUP_set_asn1_flag(eckey->group, asn1_flag);
 | 
			
		||||
 | 
			
		||||
	if (text) 
 | 
			
		||||
		if (!EC_KEY_print(out, eckey, 0))
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
	if (noout) 
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err, "writing EC key\n");
 | 
			
		||||
	if (outformat == FORMAT_ASN1) 
 | 
			
		||||
		{
 | 
			
		||||
		if (param_out)
 | 
			
		||||
			i = i2d_ECPKParameters_bio(out, eckey->group);
 | 
			
		||||
		else if (pubin || pubout) 
 | 
			
		||||
			i = i2d_EC_PUBKEY_bio(out, eckey);
 | 
			
		||||
		else 
 | 
			
		||||
			i = i2d_ECPrivateKey_bio(out, eckey);
 | 
			
		||||
		} 
 | 
			
		||||
	else if (outformat == FORMAT_PEM) 
 | 
			
		||||
		{
 | 
			
		||||
		if (param_out)
 | 
			
		||||
			i = PEM_write_bio_ECPKParameters(out, eckey->group);
 | 
			
		||||
		else if (pubin || pubout)
 | 
			
		||||
			i = PEM_write_bio_EC_PUBKEY(out, eckey);
 | 
			
		||||
		else 
 | 
			
		||||
			i = PEM_write_bio_ECPrivateKey(out, eckey, enc,
 | 
			
		||||
						NULL, 0, NULL, passout);
 | 
			
		||||
		} 
 | 
			
		||||
	else 
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "bad output format specified for "
 | 
			
		||||
			"outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (!i)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "unable to write private key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (in)
 | 
			
		||||
		BIO_free(in);
 | 
			
		||||
	if (out)
 | 
			
		||||
		BIO_free_all(out);
 | 
			
		||||
	if (eckey)
 | 
			
		||||
		EC_KEY_free(eckey);
 | 
			
		||||
	if (passin)
 | 
			
		||||
		OPENSSL_free(passin);
 | 
			
		||||
	if (passout)
 | 
			
		||||
		OPENSSL_free(passout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										709
									
								
								apps/ecparam.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										709
									
								
								apps/ecparam.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,709 @@
 | 
			
		||||
/* apps/ecparam.c */
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Nils Larsch for the OpenSSL project.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
 *    the documentation and/or other materials provided with the
 | 
			
		||||
 *    distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this
 | 
			
		||||
 *    software must display the following acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
			
		||||
 *    endorse or promote products derived from this software without
 | 
			
		||||
 *    prior written permission. For written permission, please contact
 | 
			
		||||
 *    openssl-core@openssl.org.
 | 
			
		||||
 *
 | 
			
		||||
 * 5. Products derived from this software may not be called "OpenSSL"
 | 
			
		||||
 *    nor may "OpenSSL" appear in their names without prior written
 | 
			
		||||
 *    permission of the OpenSSL Project.
 | 
			
		||||
 *
 | 
			
		||||
 * 6. Redistributions of any form whatsoever must retain the following
 | 
			
		||||
 *    acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
			
		||||
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
			
		||||
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
			
		||||
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
			
		||||
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 * ====================================================================
 | 
			
		||||
 *
 | 
			
		||||
 * This product includes cryptographic software written by Eric Young
 | 
			
		||||
 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
 | 
			
		||||
 *
 | 
			
		||||
 * Portions of the attached software ("Contribution") are developed by 
 | 
			
		||||
 * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
 | 
			
		||||
 *
 | 
			
		||||
 * The Contribution is licensed pursuant to the OpenSSL open source
 | 
			
		||||
 * license provided above.
 | 
			
		||||
 *
 | 
			
		||||
 * The elliptic curve binary polynomial software is originally written by 
 | 
			
		||||
 * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#ifndef OPENSSL_NO_EC
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/ec.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	ecparam_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg      - input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg     - output format - default PEM
 | 
			
		||||
 * -in  arg         - input file  - default stdin
 | 
			
		||||
 * -out arg         - output file - default stdout
 | 
			
		||||
 * -noout           - do not print the ec parameter
 | 
			
		||||
 * -text            - print the ec parameters in text form
 | 
			
		||||
 * -check           - validate the ec parameters
 | 
			
		||||
 * -C               - print a 'C' function creating the parameters
 | 
			
		||||
 * -name arg        - use the ec parameters with 'short name' name
 | 
			
		||||
 * -list_curves     - prints a list of all currently available curve 'short names'
 | 
			
		||||
 * -conv_form arg   - specifies the point conversion form 
 | 
			
		||||
 *                  - possible values: compressed
 | 
			
		||||
 *                                     uncompressed (default)
 | 
			
		||||
 *                                     hybrid
 | 
			
		||||
 * -param_enc arg   - specifies the way the ec parameters are encoded
 | 
			
		||||
 *                    in the asn1 der encoding
 | 
			
		||||
 *                    possible values: named_curve (default)
 | 
			
		||||
 *                                     explicit
 | 
			
		||||
 * -no_seed         - if 'explicit' parameters are choosen do not use the seed
 | 
			
		||||
 * -genkey          - generate ec key
 | 
			
		||||
 * -rand file       - files to use for random number input
 | 
			
		||||
 * -engine e        - use engine e, possibly a hardware device
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int ecparam_print_var(BIO *,BIGNUM *,const char *,int,unsigned char *);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	EC_GROUP *group = NULL;
 | 
			
		||||
	point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED; 
 | 
			
		||||
	int 	new_form = 0;
 | 
			
		||||
	int 	asn1_flag = OPENSSL_EC_NAMED_CURVE;
 | 
			
		||||
	int 	new_asn1_flag = 0;
 | 
			
		||||
	char 	*curve_name = NULL, *inrand = NULL;
 | 
			
		||||
	int	list_curves = 0, no_seed = 0, check = 0,
 | 
			
		||||
		badops = 0, text = 0, i, need_rand = 0, genkey = 0;
 | 
			
		||||
	char	*infile = NULL, *outfile = NULL, *prog;
 | 
			
		||||
	BIO 	*in = NULL, *out = NULL;
 | 
			
		||||
	int 	informat, outformat, noout = 0, C = 0, ret = 1;
 | 
			
		||||
	ENGINE	*e = NULL;
 | 
			
		||||
	char	*engine = NULL;
 | 
			
		||||
 | 
			
		||||
	BIGNUM	*ec_p = NULL, *ec_a = NULL, *ec_b = NULL,
 | 
			
		||||
		*ec_gen = NULL, *ec_order = NULL, *ec_cofactor = NULL;
 | 
			
		||||
	unsigned char *buffer = NULL;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-C") == 0)
 | 
			
		||||
			C = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-check") == 0)
 | 
			
		||||
			check = 1;
 | 
			
		||||
		else if (strcmp (*argv, "-name") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			curve_name = *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-list_curves") == 0)
 | 
			
		||||
			list_curves = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-conv_form") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
			new_form = 1;
 | 
			
		||||
			if (strcmp(*argv, "compressed") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_COMPRESSED;
 | 
			
		||||
			else if (strcmp(*argv, "uncompressed") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_UNCOMPRESSED;
 | 
			
		||||
			else if (strcmp(*argv, "hybrid") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_HYBRID;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-param_enc") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
			new_asn1_flag = 1;
 | 
			
		||||
			if (strcmp(*argv, "named_curve") == 0)
 | 
			
		||||
				asn1_flag = OPENSSL_EC_NAMED_CURVE;
 | 
			
		||||
			else if (strcmp(*argv, "explicit") == 0)
 | 
			
		||||
				asn1_flag = 0;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-no_seed") == 0)
 | 
			
		||||
			no_seed = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-genkey") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			genkey=1;
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if(strcmp(*argv, "-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine = *(++argv);
 | 
			
		||||
			}	
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err, "%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
		BIO_printf(bio_err, " -inform arg       input format - "
 | 
			
		||||
				"default PEM (DER or PEM)\n");
 | 
			
		||||
		BIO_printf(bio_err, " -outform arg      output format - "
 | 
			
		||||
				"default PEM\n");
 | 
			
		||||
		BIO_printf(bio_err, " -in  arg          input file  - "
 | 
			
		||||
				"default stdin\n");
 | 
			
		||||
		BIO_printf(bio_err, " -out arg          output file - "
 | 
			
		||||
				"default stdout\n");
 | 
			
		||||
		BIO_printf(bio_err, " -noout            do not print the "
 | 
			
		||||
				"ec parameter\n");
 | 
			
		||||
		BIO_printf(bio_err, " -text             print the ec "
 | 
			
		||||
				"parameters in text form\n");
 | 
			
		||||
		BIO_printf(bio_err, " -check            validate the ec "
 | 
			
		||||
				"parameters\n");
 | 
			
		||||
		BIO_printf(bio_err, " -C                print a 'C' "
 | 
			
		||||
				"function creating the parameters\n");
 | 
			
		||||
		BIO_printf(bio_err, " -name arg         use the "
 | 
			
		||||
				"ec parameters with 'short name' name\n");
 | 
			
		||||
		BIO_printf(bio_err, " -list_curves      prints a list of "
 | 
			
		||||
				"all currently available curve 'short names'\n");
 | 
			
		||||
		BIO_printf(bio_err, " -conv_form arg    specifies the "
 | 
			
		||||
				"point conversion form \n");
 | 
			
		||||
		BIO_printf(bio_err, "                   possible values:"
 | 
			
		||||
				" compressed\n");
 | 
			
		||||
		BIO_printf(bio_err, "                                   "
 | 
			
		||||
				" uncompressed (default)\n");
 | 
			
		||||
		BIO_printf(bio_err, "                                   "
 | 
			
		||||
				" hybrid\n");
 | 
			
		||||
		BIO_printf(bio_err, " -param_enc arg    specifies the way"
 | 
			
		||||
				" the ec parameters are encoded\n");
 | 
			
		||||
		BIO_printf(bio_err, "                   in the asn1 der "
 | 
			
		||||
				"encoding\n");
 | 
			
		||||
		BIO_printf(bio_err, "                   possible values:"
 | 
			
		||||
				" named_curve (default)\n");
 | 
			
		||||
		BIO_printf(bio_err, "                                   "
 | 
			
		||||
				" explicit\n");
 | 
			
		||||
		BIO_printf(bio_err, " -no_seed          if 'explicit'"
 | 
			
		||||
				" parameters are choosen do not"
 | 
			
		||||
				" use the seed\n");
 | 
			
		||||
		BIO_printf(bio_err, " -genkey           generate ec"
 | 
			
		||||
				" key\n");
 | 
			
		||||
		BIO_printf(bio_err, " -rand file        files to use for"
 | 
			
		||||
				" random number input\n");
 | 
			
		||||
		BIO_printf(bio_err, " -engine e         use engine e, "
 | 
			
		||||
				"possibly a hardware device\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
 | 
			
		||||
	if (list_curves)
 | 
			
		||||
		{
 | 
			
		||||
		EC_builtin_curve *curves = NULL;
 | 
			
		||||
		size_t crv_len = 0;
 | 
			
		||||
		size_t n = 0;
 | 
			
		||||
		size_t len;
 | 
			
		||||
 | 
			
		||||
		crv_len = EC_get_builtin_curves(NULL, 0);
 | 
			
		||||
 | 
			
		||||
		curves = OPENSSL_malloc(sizeof(EC_builtin_curve) * crv_len);
 | 
			
		||||
 | 
			
		||||
		if (curves == NULL)
 | 
			
		||||
			goto end;
 | 
			
		||||
 | 
			
		||||
		if (!EC_get_builtin_curves(curves, crv_len))
 | 
			
		||||
			{
 | 
			
		||||
			OPENSSL_free(curves);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		
 | 
			
		||||
		for (n = 0; n < crv_len; n++)
 | 
			
		||||
			{
 | 
			
		||||
			const char *comment;
 | 
			
		||||
			const char *sname;
 | 
			
		||||
			comment = curves[n].comment;
 | 
			
		||||
			sname   = OBJ_nid2sn(curves[n].nid);
 | 
			
		||||
			if (comment == NULL)
 | 
			
		||||
				comment = "CURVE DESCRIPTION NOT AVAILABLE";
 | 
			
		||||
			if (sname == NULL)
 | 
			
		||||
				sname = "";
 | 
			
		||||
 | 
			
		||||
			len = BIO_printf(out, "  %-10s: ", sname);
 | 
			
		||||
			if (len + strlen(comment) > 80)
 | 
			
		||||
				BIO_printf(out, "\n%80s\n", comment);
 | 
			
		||||
			else
 | 
			
		||||
				BIO_printf(out, "%s\n", comment);
 | 
			
		||||
			} 
 | 
			
		||||
 | 
			
		||||
		OPENSSL_free(curves);
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (curve_name != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		int nid = OBJ_sn2nid(curve_name);
 | 
			
		||||
	
 | 
			
		||||
		if (nid == 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "unknown curve name (%s)\n", 
 | 
			
		||||
				curve_name);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		group = EC_GROUP_new_by_nid(nid);
 | 
			
		||||
		if (group == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "unable to create curve (%s)\n", 
 | 
			
		||||
				curve_name);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		EC_GROUP_set_asn1_flag(group, asn1_flag);
 | 
			
		||||
		EC_GROUP_set_point_conversion_form(group, form);
 | 
			
		||||
		}
 | 
			
		||||
	else if (informat == FORMAT_ASN1)
 | 
			
		||||
		{
 | 
			
		||||
		group = d2i_ECPKParameters_bio(in, NULL);
 | 
			
		||||
		}
 | 
			
		||||
	else if (informat == FORMAT_PEM)
 | 
			
		||||
		{
 | 
			
		||||
		group = PEM_read_bio_ECPKParameters(in,NULL,NULL,NULL);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "bad input format specified\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (group == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, 
 | 
			
		||||
			"unable to load elliptic curve parameters\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (new_form)
 | 
			
		||||
		EC_GROUP_set_point_conversion_form(group, form);
 | 
			
		||||
 | 
			
		||||
	if (new_asn1_flag)
 | 
			
		||||
		EC_GROUP_set_asn1_flag(group, asn1_flag);
 | 
			
		||||
 | 
			
		||||
	if (no_seed)
 | 
			
		||||
		{
 | 
			
		||||
		EC_GROUP_set_seed(group, NULL, 0);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		if (!ECPKParameters_print(out, group, 0))
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (check)
 | 
			
		||||
		{
 | 
			
		||||
		if (group == NULL)
 | 
			
		||||
			BIO_printf(bio_err, "no elliptic curve parameters\n");
 | 
			
		||||
		BIO_printf(bio_err, "checking elliptic curve parameters: ");
 | 
			
		||||
		if (!EC_GROUP_check(group, NULL))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "failed\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			BIO_printf(bio_err, "ok\n");
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (C)
 | 
			
		||||
		{
 | 
			
		||||
		size_t	buf_len = 0, tmp_len = 0;
 | 
			
		||||
		const EC_POINT *point;
 | 
			
		||||
		int	is_prime, len = 0;
 | 
			
		||||
		const EC_METHOD *meth = EC_GROUP_method_of(group);
 | 
			
		||||
 | 
			
		||||
		if ((ec_p = BN_new()) == NULL || (ec_a = BN_new()) == NULL ||
 | 
			
		||||
		    (ec_b = BN_new()) == NULL || (ec_gen = BN_new()) == NULL ||
 | 
			
		||||
		    (ec_order = BN_new()) == NULL || 
 | 
			
		||||
		    (ec_cofactor = BN_new()) == NULL )
 | 
			
		||||
			{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		is_prime = (EC_METHOD_get_field_type(meth) == 
 | 
			
		||||
			NID_X9_62_prime_field);
 | 
			
		||||
 | 
			
		||||
		if (is_prime)
 | 
			
		||||
			{
 | 
			
		||||
			if (!EC_GROUP_get_curve_GFp(group, ec_p, ec_a,
 | 
			
		||||
				ec_b, NULL))
 | 
			
		||||
				goto end;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			/* TODO */
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if ((point = EC_GROUP_get0_generator(group)) == NULL)
 | 
			
		||||
			goto end;
 | 
			
		||||
		if (!EC_POINT_point2bn(group, point, 
 | 
			
		||||
			EC_GROUP_get_point_conversion_form(group), ec_gen, 
 | 
			
		||||
			NULL))
 | 
			
		||||
			goto end;
 | 
			
		||||
		if (!EC_GROUP_get_order(group, ec_order, NULL))
 | 
			
		||||
			goto end;
 | 
			
		||||
		if (!EC_GROUP_get_cofactor(group, ec_cofactor, NULL))
 | 
			
		||||
			goto end;
 | 
			
		||||
 | 
			
		||||
		if (!ec_p || !ec_a || !ec_b || !ec_gen || 
 | 
			
		||||
			!ec_order || !ec_cofactor)
 | 
			
		||||
			goto end;
 | 
			
		||||
 | 
			
		||||
		len = BN_num_bits(ec_order);
 | 
			
		||||
 | 
			
		||||
		if ((tmp_len = (size_t)BN_num_bytes(ec_p)) > buf_len)
 | 
			
		||||
			buf_len = tmp_len;
 | 
			
		||||
		if ((tmp_len = (size_t)BN_num_bytes(ec_a)) > buf_len)
 | 
			
		||||
			buf_len = tmp_len;
 | 
			
		||||
		if ((tmp_len = (size_t)BN_num_bytes(ec_b)) > buf_len)
 | 
			
		||||
			buf_len = tmp_len;
 | 
			
		||||
		if ((tmp_len = (size_t)BN_num_bytes(ec_gen)) > buf_len)
 | 
			
		||||
			buf_len = tmp_len;
 | 
			
		||||
		if ((tmp_len = (size_t)BN_num_bytes(ec_order)) > buf_len)
 | 
			
		||||
			buf_len = tmp_len;
 | 
			
		||||
		if ((tmp_len = (size_t)BN_num_bytes(ec_cofactor)) > buf_len)
 | 
			
		||||
			buf_len = tmp_len;
 | 
			
		||||
 | 
			
		||||
		buffer = (unsigned char *)OPENSSL_malloc(buf_len);
 | 
			
		||||
 | 
			
		||||
		if (buffer == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		ecparam_print_var(out, ec_p, "ec_p", len, buffer);
 | 
			
		||||
		ecparam_print_var(out, ec_a, "ec_a", len, buffer);
 | 
			
		||||
		ecparam_print_var(out, ec_b, "ec_b", len, buffer);
 | 
			
		||||
		ecparam_print_var(out, ec_gen, "ec_gen", len, buffer);
 | 
			
		||||
		ecparam_print_var(out, ec_order, "ec_order", len, buffer);
 | 
			
		||||
		ecparam_print_var(out, ec_cofactor, "ec_cofactor", len, 
 | 
			
		||||
			buffer);
 | 
			
		||||
 | 
			
		||||
		BIO_printf(out, "\n\n");
 | 
			
		||||
 | 
			
		||||
		BIO_printf(out, "EC_GROUP *get_ec_group_%d(void)\n\t{\n", len);
 | 
			
		||||
		BIO_printf(out, "\tint ok=0;\n");
 | 
			
		||||
		BIO_printf(out, "\tEC_GROUP *group = NULL;\n");
 | 
			
		||||
		BIO_printf(out, "\tEC_POINT *point = NULL;\n");
 | 
			
		||||
		BIO_printf(out, "\tBIGNUM   *tmp_1 = NULL, *tmp_2 = NULL, "
 | 
			
		||||
				"*tmp_3 = NULL;\n\n");
 | 
			
		||||
		BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_p_%d, "
 | 
			
		||||
				"sizeof(ec_p_%d), NULL)) == NULL)\n\t\t"
 | 
			
		||||
				"goto err;\n", len, len);
 | 
			
		||||
		BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_a_%d, "
 | 
			
		||||
				"sizeof(ec_a_%d), NULL)) == NULL)\n\t\t"
 | 
			
		||||
				"goto err;\n", len, len);
 | 
			
		||||
		BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_b_%d, "
 | 
			
		||||
				"sizeof(ec_b_%d), NULL)) == NULL)\n\t\t"
 | 
			
		||||
				"goto err;\n", len, len);
 | 
			
		||||
		if (is_prime)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(out, "\tif ((group = EC_GROUP_new_curve_"
 | 
			
		||||
				"GFp(tmp_1, tmp_2, tmp_3, NULL)) == NULL)"
 | 
			
		||||
				"\n\t\tgoto err;\n\n");
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			/* TODO */
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		BIO_printf(out, "\t/* build generator */\n");
 | 
			
		||||
		BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_gen_%d, "
 | 
			
		||||
				"sizeof(ec_gen_%d), tmp_1)) == NULL)"
 | 
			
		||||
				"\n\t\tgoto err;\n", len, len);
 | 
			
		||||
		BIO_printf(out, "\tpoint = EC_POINT_bn2point(group, tmp_1, "
 | 
			
		||||
				"NULL, NULL);\n");
 | 
			
		||||
		BIO_printf(out, "\tif (point == NULL)\n\t\tgoto err;\n");
 | 
			
		||||
		BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_order_%d, "
 | 
			
		||||
				"sizeof(ec_order_%d), tmp_2)) == NULL)"
 | 
			
		||||
				"\n\t\tgoto err;\n", len, len);
 | 
			
		||||
		BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_cofactor_%d, "
 | 
			
		||||
				"sizeof(ec_cofactor_%d), tmp_3)) == NULL)"
 | 
			
		||||
				"\n\t\tgoto err;\n", len, len);
 | 
			
		||||
		BIO_printf(out, "\tif (!EC_GROUP_set_generator(group, point,"
 | 
			
		||||
				" tmp_2, tmp_3))\n\t\tgoto err;\n");
 | 
			
		||||
		BIO_printf(out, "\n\tok=1;\n");
 | 
			
		||||
		BIO_printf(out, "err:\n");
 | 
			
		||||
		BIO_printf(out, "\tif (tmp_1)\n\t\tBN_free(tmp_1);\n");
 | 
			
		||||
		BIO_printf(out, "\tif (tmp_2)\n\t\tBN_free(tmp_2);\n");
 | 
			
		||||
		BIO_printf(out, "\tif (tmp_3)\n\t\tBN_free(tmp_3);\n");
 | 
			
		||||
		BIO_printf(out, "\tif (point)\n\t\tEC_POINT_free(point);\n");
 | 
			
		||||
		BIO_printf(out, "\tif (!ok)\n");
 | 
			
		||||
		BIO_printf(out, "\t\t{\n");
 | 
			
		||||
		BIO_printf(out, "\t\tEC_GROUP_free(group);\n");
 | 
			
		||||
		BIO_printf(out, "\t\tgroup = NULL;\n");
 | 
			
		||||
		BIO_printf(out, "\t\t}\n");
 | 
			
		||||
		BIO_printf(out, "\treturn(group);\n\t}\n");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!noout)
 | 
			
		||||
		{
 | 
			
		||||
		if (outformat == FORMAT_ASN1)
 | 
			
		||||
			i = i2d_ECPKParameters_bio(out, group);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i = PEM_write_bio_ECPKParameters(out, group);
 | 
			
		||||
		else	
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for"
 | 
			
		||||
				" outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "unable to write elliptic "
 | 
			
		||||
				"curve parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if (need_rand)
 | 
			
		||||
		{
 | 
			
		||||
		app_RAND_load_file(NULL, bio_err, (inrand != NULL));
 | 
			
		||||
		if (inrand != NULL)
 | 
			
		||||
			BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
				app_RAND_load_files(inrand));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (genkey)
 | 
			
		||||
		{
 | 
			
		||||
		EC_KEY *eckey = EC_KEY_new();
 | 
			
		||||
 | 
			
		||||
		if (eckey == NULL)
 | 
			
		||||
			goto end;
 | 
			
		||||
 | 
			
		||||
		assert(need_rand);
 | 
			
		||||
 | 
			
		||||
		eckey->group = group;
 | 
			
		||||
		
 | 
			
		||||
		if (!EC_KEY_generate_key(eckey))
 | 
			
		||||
			{
 | 
			
		||||
			eckey->group = NULL;
 | 
			
		||||
			EC_KEY_free(eckey);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (outformat == FORMAT_ASN1)
 | 
			
		||||
			i = i2d_ECPrivateKey_bio(out, eckey);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i = PEM_write_bio_ECPrivateKey(out, eckey, NULL,
 | 
			
		||||
				NULL, 0, NULL, NULL);
 | 
			
		||||
		else	
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "bad output format specified "
 | 
			
		||||
				"for outfile\n");
 | 
			
		||||
			eckey->group = NULL;
 | 
			
		||||
			EC_KEY_free(eckey);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		eckey->group = NULL;
 | 
			
		||||
		EC_KEY_free(eckey);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (need_rand)
 | 
			
		||||
		app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (ec_p)
 | 
			
		||||
		BN_free(ec_p);
 | 
			
		||||
	if (ec_a)
 | 
			
		||||
		BN_free(ec_a);
 | 
			
		||||
	if (ec_b)
 | 
			
		||||
		BN_free(ec_b);
 | 
			
		||||
	if (ec_gen)
 | 
			
		||||
		BN_free(ec_gen);
 | 
			
		||||
	if (ec_order)
 | 
			
		||||
		BN_free(ec_order);
 | 
			
		||||
	if (ec_cofactor)
 | 
			
		||||
		BN_free(ec_cofactor);
 | 
			
		||||
	if (buffer)
 | 
			
		||||
		OPENSSL_free(buffer);
 | 
			
		||||
	if (in != NULL)
 | 
			
		||||
		BIO_free(in);
 | 
			
		||||
	if (out != NULL)
 | 
			
		||||
		BIO_free_all(out);
 | 
			
		||||
	if (group != NULL)
 | 
			
		||||
		EC_GROUP_free(group);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ecparam_print_var(BIO *out, BIGNUM *in, const char *var,
 | 
			
		||||
	int len, unsigned char *buffer)
 | 
			
		||||
	{
 | 
			
		||||
	BIO_printf(out, "static unsigned char %s_%d[] = {", var, len);
 | 
			
		||||
	if (BN_is_zero(in))
 | 
			
		||||
		BIO_printf(out, "\n\t0x00");
 | 
			
		||||
	else 
 | 
			
		||||
		{
 | 
			
		||||
		int i, l;
 | 
			
		||||
 | 
			
		||||
		l = BN_bn2bin(in, buffer);
 | 
			
		||||
		for (i=0; i<l-1; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) 
 | 
			
		||||
				BIO_printf(out, "\n\t");
 | 
			
		||||
			BIO_printf(out, "0x%02X,", buffer[i]);
 | 
			
		||||
			}
 | 
			
		||||
		if ((i%12) == 0) 
 | 
			
		||||
			BIO_printf(out, "\n\t");
 | 
			
		||||
		BIO_printf(out, "0x%02X", buffer[i]);
 | 
			
		||||
		}
 | 
			
		||||
	BIO_printf(out, "\n\t};\n\n");
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										393
									
								
								apps/enc.c
									
									
									
									
									
								
							
							
						
						
									
										393
									
								
								apps/enc.c
									
									
									
									
									
								
							@@ -60,22 +60,16 @@
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include "bio.h"
 | 
			
		||||
#include "err.h"
 | 
			
		||||
#include "evp.h"
 | 
			
		||||
#include "objects.h"
 | 
			
		||||
#include "x509.h"
 | 
			
		||||
#ifdef NO_MD5
 | 
			
		||||
#include "md5.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "pem.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/objects.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
 | 
			
		||||
#ifndef NOPROTO
 | 
			
		||||
int set_hex(char *in,unsigned char *out,int size);
 | 
			
		||||
#else
 | 
			
		||||
int set_hex();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#undef SIZE
 | 
			
		||||
#undef BSIZE
 | 
			
		||||
#undef PROG
 | 
			
		||||
@@ -84,24 +78,48 @@ int set_hex();
 | 
			
		||||
#define BSIZE	(8*1024)
 | 
			
		||||
#define	PROG	enc_main
 | 
			
		||||
 | 
			
		||||
int MAIN(argc,argv)
 | 
			
		||||
int argc;
 | 
			
		||||
char **argv;
 | 
			
		||||
static void show_ciphers(const OBJ_NAME *name,void *bio_)
 | 
			
		||||
	{
 | 
			
		||||
	BIO *bio=bio_;
 | 
			
		||||
	static int n;
 | 
			
		||||
 | 
			
		||||
	if(!islower((unsigned char)*name->name))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio,"-%-25s",name->name);
 | 
			
		||||
	if(++n == 3)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio,"\n");
 | 
			
		||||
		n=0;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		BIO_printf(bio," ");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	static const char magic[]="Salted__";
 | 
			
		||||
	char mbuf[sizeof magic-1];
 | 
			
		||||
	char *strbuf=NULL;
 | 
			
		||||
	unsigned char *buff=NULL,*bufsize=NULL;
 | 
			
		||||
	int bsize=BSIZE,verbose=0;
 | 
			
		||||
	int ret=1,inl;
 | 
			
		||||
	unsigned char key[24],iv[MD5_DIGEST_LENGTH];
 | 
			
		||||
	char *str=NULL;
 | 
			
		||||
	char *hkey=NULL,*hiv=NULL;
 | 
			
		||||
	int nopad = 0;
 | 
			
		||||
	unsigned char key[EVP_MAX_KEY_LENGTH],iv[EVP_MAX_IV_LENGTH];
 | 
			
		||||
	unsigned char salt[PKCS5_SALT_LEN];
 | 
			
		||||
	char *str=NULL, *passarg = NULL, *pass = NULL;
 | 
			
		||||
	char *hkey=NULL,*hiv=NULL,*hsalt = NULL;
 | 
			
		||||
	int enc=1,printkey=0,i,base64=0;
 | 
			
		||||
	int debug=0,olb64=0;
 | 
			
		||||
	EVP_CIPHER *cipher=NULL,*c;
 | 
			
		||||
	int debug=0,olb64=0,nosalt=0;
 | 
			
		||||
	const EVP_CIPHER *cipher=NULL,*c;
 | 
			
		||||
	char *inf=NULL,*outf=NULL;
 | 
			
		||||
	BIO *in=NULL,*out=NULL,*b64=NULL,*benc=NULL,*rbio=NULL,*wbio=NULL;
 | 
			
		||||
#define PROG_NAME_SIZE  16
 | 
			
		||||
        char pname[PROG_NAME_SIZE];
 | 
			
		||||
#define PROG_NAME_SIZE  39
 | 
			
		||||
	char pname[PROG_NAME_SIZE+1];
 | 
			
		||||
	char *engine = NULL;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
@@ -109,8 +127,11 @@ char **argv;
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	/* first check the program name */
 | 
			
		||||
        program_name(argv[0],pname,PROG_NAME_SIZE);
 | 
			
		||||
	program_name(argv[0],pname,sizeof pname);
 | 
			
		||||
	if (strcmp(pname,"base64") == 0)
 | 
			
		||||
		base64=1;
 | 
			
		||||
 | 
			
		||||
@@ -137,14 +158,29 @@ char **argv;
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outf= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-pass") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passarg= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if	(strcmp(*argv,"-d") == 0)
 | 
			
		||||
			enc=0;
 | 
			
		||||
		else if	(strcmp(*argv,"-p") == 0)
 | 
			
		||||
			printkey=1;
 | 
			
		||||
		else if	(strcmp(*argv,"-v") == 0)
 | 
			
		||||
			verbose=1;
 | 
			
		||||
		else if	((strcmp(*argv,"-debug") == 0) ||
 | 
			
		||||
			 (strcmp(*argv,"-d") == 0))
 | 
			
		||||
		else if	(strcmp(*argv,"-nopad") == 0)
 | 
			
		||||
			nopad=1;
 | 
			
		||||
		else if	(strcmp(*argv,"-salt") == 0)
 | 
			
		||||
			nosalt=0;
 | 
			
		||||
		else if	(strcmp(*argv,"-nosalt") == 0)
 | 
			
		||||
			nosalt=1;
 | 
			
		||||
		else if	(strcmp(*argv,"-debug") == 0)
 | 
			
		||||
			debug=1;
 | 
			
		||||
		else if	(strcmp(*argv,"-P") == 0)
 | 
			
		||||
			printkey=2;
 | 
			
		||||
@@ -180,7 +216,7 @@ char **argv;
 | 
			
		||||
				goto bad;
 | 
			
		||||
				}
 | 
			
		||||
			buf[0]='\0';
 | 
			
		||||
			fgets(buf,128,infile);
 | 
			
		||||
			fgets(buf,sizeof buf,infile);
 | 
			
		||||
			fclose(infile);
 | 
			
		||||
			i=strlen(buf);
 | 
			
		||||
			if ((i > 0) &&
 | 
			
		||||
@@ -201,6 +237,11 @@ char **argv;
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			hkey= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-S") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			hsalt= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-iv") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
@@ -219,7 +260,8 @@ char **argv;
 | 
			
		||||
bad:
 | 
			
		||||
			BIO_printf(bio_err,"options are\n");
 | 
			
		||||
			BIO_printf(bio_err,"%-14s input file\n","-in <file>");
 | 
			
		||||
			BIO_printf(bio_err,"%-14s output fileencrypt\n","-out <file>");
 | 
			
		||||
			BIO_printf(bio_err,"%-14s output file\n","-out <file>");
 | 
			
		||||
			BIO_printf(bio_err,"%-14s pass phrase source\n","-pass <arg>");
 | 
			
		||||
			BIO_printf(bio_err,"%-14s encrypt\n","-e");
 | 
			
		||||
			BIO_printf(bio_err,"%-14s decrypt\n","-d");
 | 
			
		||||
			BIO_printf(bio_err,"%-14s base64 encode/decode, depending on encryption flag\n","-a/-base64");
 | 
			
		||||
@@ -228,79 +270,22 @@ bad:
 | 
			
		||||
			BIO_printf(bio_err,"%-14s key/iv in hex is the next argument\n","-K/-iv");
 | 
			
		||||
			BIO_printf(bio_err,"%-14s print the iv/key (then exit if -P)\n","-[pP]");
 | 
			
		||||
			BIO_printf(bio_err,"%-14s buffer size\n","-bufsize <n>");
 | 
			
		||||
			BIO_printf(bio_err,"%-14s use engine e, possibly a hardware device.\n","-engine e");
 | 
			
		||||
 | 
			
		||||
			BIO_printf(bio_err,"Cipher Types\n");
 | 
			
		||||
			BIO_printf(bio_err,"des     : 56 bit key DES encryption\n");
 | 
			
		||||
			BIO_printf(bio_err,"des_ede :112 bit key ede DES encryption\n");
 | 
			
		||||
			BIO_printf(bio_err,"des_ede3:168 bit key ede DES encryption\n");
 | 
			
		||||
#ifndef NO_IDEA
 | 
			
		||||
			BIO_printf(bio_err,"idea    :128 bit key IDEA encryption\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef NO_RC4
 | 
			
		||||
			BIO_printf(bio_err,"rc2     :128 bit key RC2 encryption\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef NO_BLOWFISH
 | 
			
		||||
			BIO_printf(bio_err,"bf      :128 bit key BlowFish encryption\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef NO_RC4
 | 
			
		||||
			BIO_printf(bio_err," -%-5s :128 bit key RC4 encryption\n",
 | 
			
		||||
				LN_rc4);
 | 
			
		||||
#endif
 | 
			
		||||
			OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH,
 | 
			
		||||
					       show_ciphers,
 | 
			
		||||
					       bio_err);
 | 
			
		||||
			BIO_printf(bio_err,"\n");
 | 
			
		||||
 | 
			
		||||
			BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
 | 
			
		||||
				LN_des_ecb,LN_des_cbc,
 | 
			
		||||
				LN_des_cfb64,LN_des_ofb64);
 | 
			
		||||
			BIO_printf(bio_err," -%-4s (%s)\n",
 | 
			
		||||
				"des", LN_des_cbc);
 | 
			
		||||
 | 
			
		||||
			BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
 | 
			
		||||
				LN_des_ede,LN_des_ede_cbc,
 | 
			
		||||
				LN_des_ede_cfb64,LN_des_ede_ofb64);
 | 
			
		||||
			BIO_printf(bio_err," -desx -none\n");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
			BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
 | 
			
		||||
				LN_des_ede3,LN_des_ede3_cbc,
 | 
			
		||||
				LN_des_ede3_cfb64,LN_des_ede3_ofb64);
 | 
			
		||||
			BIO_printf(bio_err," -%-4s (%s)\n",
 | 
			
		||||
				"des3", LN_des_ede3_cbc);
 | 
			
		||||
 | 
			
		||||
#ifndef NO_IDEA
 | 
			
		||||
			BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
 | 
			
		||||
				LN_idea_ecb, LN_idea_cbc,
 | 
			
		||||
				LN_idea_cfb64, LN_idea_ofb64);
 | 
			
		||||
			BIO_printf(bio_err," -%-4s (%s)\n","idea",LN_idea_cbc);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef NO_RC2
 | 
			
		||||
			BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
 | 
			
		||||
				LN_rc2_ecb, LN_rc2_cbc,
 | 
			
		||||
				LN_rc2_cfb64, LN_rc2_ofb64);
 | 
			
		||||
			BIO_printf(bio_err," -%-4s (%s)\n","rc2", LN_rc2_cbc);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef NO_BLOWFISH
 | 
			
		||||
			BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
 | 
			
		||||
				LN_bf_ecb, LN_bf_cbc,
 | 
			
		||||
				LN_bf_cfb64, LN_bf_ofb64);
 | 
			
		||||
			BIO_printf(bio_err," -%-4s (%s)\n","bf", LN_bf_cbc);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef NO_BLOWFISH
 | 
			
		||||
			BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
 | 
			
		||||
				LN_cast5_ecb, LN_cast5_cbc,
 | 
			
		||||
				LN_cast5_cfb64, LN_cast5_ofb64);
 | 
			
		||||
			BIO_printf(bio_err," -%-4s (%s)\n","cast", LN_cast5_cbc);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef NO_BLOWFISH
 | 
			
		||||
			BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
 | 
			
		||||
				LN_rc5_ecb, LN_rc5_cbc,
 | 
			
		||||
				LN_rc5_cfb64, LN_rc5_ofb64);
 | 
			
		||||
			BIO_printf(bio_err," -%-4s (%s)\n","rc5", LN_rc5_cbc);
 | 
			
		||||
#endif
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
 | 
			
		||||
	if (bufsize != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned long n;
 | 
			
		||||
@@ -330,11 +315,11 @@ bad:
 | 
			
		||||
		if (verbose) BIO_printf(bio_err,"bufsize=%d\n",bsize);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	strbuf=Malloc(SIZE);
 | 
			
		||||
	buff=(unsigned char *)Malloc(EVP_ENCODE_LENGTH(bsize));
 | 
			
		||||
	strbuf=OPENSSL_malloc(SIZE);
 | 
			
		||||
	buff=(unsigned char *)OPENSSL_malloc(EVP_ENCODE_LENGTH(bsize));
 | 
			
		||||
	if ((buff == NULL) || (strbuf == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"Malloc failure %ld\n",(long)EVP_ENCODE_LENGTH(bsize));
 | 
			
		||||
		BIO_printf(bio_err,"OPENSSL_malloc failure %ld\n",(long)EVP_ENCODE_LENGTH(bsize));
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -364,6 +349,14 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if(!str && passarg) {
 | 
			
		||||
		if(!app_passwd(bio_err, passarg, NULL, &pass, NULL)) {
 | 
			
		||||
			BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		str = pass;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ((str == NULL) && (cipher != NULL) && (hkey == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		for (;;)
 | 
			
		||||
@@ -393,69 +386,17 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (cipher != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		if (str != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			EVP_BytesToKey(cipher,EVP_md5(),NULL,
 | 
			
		||||
				(unsigned char *)str,
 | 
			
		||||
				strlen(str),1,key,iv);
 | 
			
		||||
			/* zero the complete buffer or the string
 | 
			
		||||
			 * passed from the command line
 | 
			
		||||
			 * bug picked up by
 | 
			
		||||
			 * Larry J. Hughes Jr. <hughes@indiana.edu> */
 | 
			
		||||
			if (str == strbuf)
 | 
			
		||||
				memset(str,0,SIZE);
 | 
			
		||||
			else
 | 
			
		||||
				memset(str,0,strlen(str));
 | 
			
		||||
			}
 | 
			
		||||
		if ((hiv != NULL) && !set_hex(hiv,iv,8))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"invalid hex iv value\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if ((hkey != NULL) && !set_hex(hkey,key,24))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"invalid hex key value\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if ((benc=BIO_new(BIO_f_cipher())) == NULL)
 | 
			
		||||
			goto end;
 | 
			
		||||
		BIO_set_cipher(benc,cipher,key,iv,enc);
 | 
			
		||||
		if (debug)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_set_callback(benc,BIO_debug_callback);
 | 
			
		||||
			BIO_set_callback_arg(benc,bio_err);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if (printkey)
 | 
			
		||||
			{
 | 
			
		||||
			if (cipher->key_len > 0)
 | 
			
		||||
				{
 | 
			
		||||
				printf("key=");
 | 
			
		||||
				for (i=0; i<cipher->key_len; i++)
 | 
			
		||||
					printf("%02X",key[i]);
 | 
			
		||||
				printf("\n");
 | 
			
		||||
				}
 | 
			
		||||
			if (cipher->iv_len > 0)
 | 
			
		||||
				{
 | 
			
		||||
				printf("iv =");
 | 
			
		||||
				for (i=0; i<cipher->iv_len; i++)
 | 
			
		||||
					printf("%02X",iv[i]);
 | 
			
		||||
				printf("\n");
 | 
			
		||||
				}
 | 
			
		||||
			if (printkey == 2)
 | 
			
		||||
				{
 | 
			
		||||
				ret=0;
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if (outf == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outf) <= 0)
 | 
			
		||||
@@ -485,6 +426,130 @@ bad:
 | 
			
		||||
			rbio=BIO_push(b64,rbio);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (cipher != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		/* Note that str is NULL if a key was passed on the command
 | 
			
		||||
		 * line, so we get no salt in that case. Is this a bug?
 | 
			
		||||
		 */
 | 
			
		||||
		if (str != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			/* Salt handling: if encrypting generate a salt and
 | 
			
		||||
			 * write to output BIO. If decrypting read salt from
 | 
			
		||||
			 * input BIO.
 | 
			
		||||
			 */
 | 
			
		||||
			unsigned char *sptr;
 | 
			
		||||
			if(nosalt) sptr = NULL;
 | 
			
		||||
			else {
 | 
			
		||||
				if(enc) {
 | 
			
		||||
					if(hsalt) {
 | 
			
		||||
						if(!set_hex(hsalt,salt,sizeof salt)) {
 | 
			
		||||
							BIO_printf(bio_err,
 | 
			
		||||
								"invalid hex salt value\n");
 | 
			
		||||
							goto end;
 | 
			
		||||
						}
 | 
			
		||||
					} else if (RAND_pseudo_bytes(salt, sizeof salt) < 0)
 | 
			
		||||
						goto end;
 | 
			
		||||
					/* If -P option then don't bother writing */
 | 
			
		||||
					if((printkey != 2)
 | 
			
		||||
					   && (BIO_write(wbio,magic,
 | 
			
		||||
							 sizeof magic-1) != sizeof magic-1
 | 
			
		||||
					       || BIO_write(wbio,
 | 
			
		||||
							    (char *)salt,
 | 
			
		||||
							    sizeof salt) != sizeof salt)) {
 | 
			
		||||
						BIO_printf(bio_err,"error writing output file\n");
 | 
			
		||||
						goto end;
 | 
			
		||||
					}
 | 
			
		||||
				} else if(BIO_read(rbio,mbuf,sizeof mbuf) != sizeof mbuf
 | 
			
		||||
					  || BIO_read(rbio,
 | 
			
		||||
						      (unsigned char *)salt,
 | 
			
		||||
				    sizeof salt) != sizeof salt) {
 | 
			
		||||
					BIO_printf(bio_err,"error reading input file\n");
 | 
			
		||||
					goto end;
 | 
			
		||||
				} else if(memcmp(mbuf,magic,sizeof magic-1)) {
 | 
			
		||||
				    BIO_printf(bio_err,"bad magic number\n");
 | 
			
		||||
				    goto end;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				sptr = salt;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			EVP_BytesToKey(cipher,EVP_md5(),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> */
 | 
			
		||||
			if (str == strbuf)
 | 
			
		||||
				OPENSSL_cleanse(str,SIZE);
 | 
			
		||||
			else
 | 
			
		||||
				OPENSSL_cleanse(str,strlen(str));
 | 
			
		||||
			}
 | 
			
		||||
		if ((hiv != NULL) && !set_hex(hiv,iv,sizeof iv))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"invalid hex iv value\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if ((hiv == NULL) && (str == NULL))
 | 
			
		||||
			{
 | 
			
		||||
			/* No IV was explicitly set and no IV was generated
 | 
			
		||||
			 * during EVP_BytesToKey. Hence the IV is undefined,
 | 
			
		||||
			 * making correct decryption impossible. */
 | 
			
		||||
			BIO_printf(bio_err, "iv undefined\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if ((hkey != NULL) && !set_hex(hkey,key,sizeof key))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"invalid hex key value\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if ((benc=BIO_new(BIO_f_cipher())) == NULL)
 | 
			
		||||
			goto end;
 | 
			
		||||
		BIO_set_cipher(benc,cipher,key,iv,enc);
 | 
			
		||||
		if (nopad)
 | 
			
		||||
			{
 | 
			
		||||
			EVP_CIPHER_CTX *ctx;
 | 
			
		||||
			BIO_get_cipher_ctx(benc, &ctx);
 | 
			
		||||
			EVP_CIPHER_CTX_set_padding(ctx, 0);
 | 
			
		||||
			}
 | 
			
		||||
		if (debug)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_set_callback(benc,BIO_debug_callback);
 | 
			
		||||
			BIO_set_callback_arg(benc,bio_err);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if (printkey)
 | 
			
		||||
			{
 | 
			
		||||
			if (!nosalt)
 | 
			
		||||
				{
 | 
			
		||||
				printf("salt=");
 | 
			
		||||
				for (i=0; i<sizeof salt; i++)
 | 
			
		||||
					printf("%02X",salt[i]);
 | 
			
		||||
				printf("\n");
 | 
			
		||||
				}
 | 
			
		||||
			if (cipher->key_len > 0)
 | 
			
		||||
				{
 | 
			
		||||
				printf("key=");
 | 
			
		||||
				for (i=0; i<cipher->key_len; i++)
 | 
			
		||||
					printf("%02X",key[i]);
 | 
			
		||||
				printf("\n");
 | 
			
		||||
				}
 | 
			
		||||
			if (cipher->iv_len > 0)
 | 
			
		||||
				{
 | 
			
		||||
				printf("iv =");
 | 
			
		||||
				for (i=0; i<cipher->iv_len; i++)
 | 
			
		||||
					printf("%02X",iv[i]);
 | 
			
		||||
				printf("\n");
 | 
			
		||||
				}
 | 
			
		||||
			if (printkey == 2)
 | 
			
		||||
				{
 | 
			
		||||
				ret=0;
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	/* Only encrypt/decrypt as we write the file */
 | 
			
		||||
	if (benc != NULL)
 | 
			
		||||
		wbio=BIO_push(benc,wbio);
 | 
			
		||||
@@ -512,19 +577,19 @@ bad:
 | 
			
		||||
		BIO_printf(bio_err,"bytes written:%8ld\n",BIO_number_written(out));
 | 
			
		||||
		}
 | 
			
		||||
end:
 | 
			
		||||
	if (strbuf != NULL) Free(strbuf);
 | 
			
		||||
	if (buff != NULL) Free(buff);
 | 
			
		||||
	ERR_print_errors(bio_err);
 | 
			
		||||
	if (strbuf != NULL) OPENSSL_free(strbuf);
 | 
			
		||||
	if (buff != NULL) OPENSSL_free(buff);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free(out);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (benc != NULL) BIO_free(benc);
 | 
			
		||||
	if (b64 != NULL) BIO_free(b64);
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	if(pass) OPENSSL_free(pass);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int set_hex(in,out,size)
 | 
			
		||||
char *in;
 | 
			
		||||
unsigned char *out;
 | 
			
		||||
int size;
 | 
			
		||||
int set_hex(char *in, unsigned char *out, int size)
 | 
			
		||||
	{
 | 
			
		||||
	int i,n;
 | 
			
		||||
	unsigned char j;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										520
									
								
								apps/engine.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										520
									
								
								apps/engine.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,520 @@
 | 
			
		||||
/* apps/engine.c -*- mode: C; c-file-style: "eay" -*- */
 | 
			
		||||
/* Written by Richard Levitte <richard@levitte.org> for the OpenSSL
 | 
			
		||||
 * project 2000.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2000 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 <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/engine.h>
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	engine_main
 | 
			
		||||
 | 
			
		||||
static char *engine_usage[]={
 | 
			
		||||
"usage: engine opts [engine ...]\n",
 | 
			
		||||
" -v[v[v[v]]] - verbose mode, for each engine, list its 'control commands'\n",
 | 
			
		||||
"               -vv will additionally display each command's description\n",
 | 
			
		||||
"               -vvv will also add the input flags for each command\n",
 | 
			
		||||
"               -vvvv will also show internal input flags\n",
 | 
			
		||||
" -c          - for each engine, also list the capabilities\n",
 | 
			
		||||
" -t          - for each engine, check that they are really available\n",
 | 
			
		||||
" -pre <cmd>  - runs command 'cmd' against the ENGINE before any attempts\n",
 | 
			
		||||
"               to load it (if -t is used)\n",
 | 
			
		||||
" -post <cmd> - runs command 'cmd' against the ENGINE after loading it\n",
 | 
			
		||||
"               (only used if -t is also provided)\n",
 | 
			
		||||
" NB: -pre and -post will be applied to all ENGINEs supplied on the command\n",
 | 
			
		||||
" line, or all supported ENGINEs if none are specified.\n",
 | 
			
		||||
" Eg. '-pre \"SO_PATH:/lib/libdriver.so\"' calls command \"SO_PATH\" with\n",
 | 
			
		||||
" argument \"/lib/libdriver.so\".\n",
 | 
			
		||||
NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void identity(void *ptr)
 | 
			
		||||
	{
 | 
			
		||||
	return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int append_buf(char **buf, const char *s, int *size, int step)
 | 
			
		||||
	{
 | 
			
		||||
	int l = strlen(s);
 | 
			
		||||
 | 
			
		||||
	if (*buf == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		*size = step;
 | 
			
		||||
		*buf = OPENSSL_malloc(*size);
 | 
			
		||||
		if (*buf == NULL)
 | 
			
		||||
			return 0;
 | 
			
		||||
		**buf = '\0';
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (**buf != '\0')
 | 
			
		||||
		l += 2;		/* ", " */
 | 
			
		||||
 | 
			
		||||
	if (strlen(*buf) + strlen(s) >= (unsigned int)*size)
 | 
			
		||||
		{
 | 
			
		||||
		*size += step;
 | 
			
		||||
		*buf = OPENSSL_realloc(*buf, *size);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (*buf == NULL)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (**buf != '\0')
 | 
			
		||||
		strcat(*buf, ", ");
 | 
			
		||||
	strcat(*buf, s);
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int util_flags(BIO *bio_out, unsigned int flags, const char *indent)
 | 
			
		||||
	{
 | 
			
		||||
	int started = 0, err = 0;
 | 
			
		||||
	/* Indent before displaying input flags */
 | 
			
		||||
	BIO_printf(bio_out, "%s%s(input flags): ", indent, indent);
 | 
			
		||||
	if(flags == 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_out, "<no flags>\n");
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
        /* If the object is internal, mark it in a way that shows instead of
 | 
			
		||||
         * having it part of all the other flags, even if it really is. */
 | 
			
		||||
	if(flags & ENGINE_CMD_FLAG_INTERNAL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_out, "[Internal] ");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if(flags & ENGINE_CMD_FLAG_NUMERIC)
 | 
			
		||||
		{
 | 
			
		||||
		if(started)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_out, "|");
 | 
			
		||||
			err = 1;
 | 
			
		||||
			}
 | 
			
		||||
		BIO_printf(bio_out, "NUMERIC");
 | 
			
		||||
		started = 1;
 | 
			
		||||
		}
 | 
			
		||||
	/* Now we check that no combinations of the mutually exclusive NUMERIC,
 | 
			
		||||
	 * STRING, and NO_INPUT flags have been used. Future flags that can be
 | 
			
		||||
	 * OR'd together with these would need to added after these to preserve
 | 
			
		||||
	 * the testing logic. */
 | 
			
		||||
	if(flags & ENGINE_CMD_FLAG_STRING)
 | 
			
		||||
		{
 | 
			
		||||
		if(started)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_out, "|");
 | 
			
		||||
			err = 1;
 | 
			
		||||
			}
 | 
			
		||||
		BIO_printf(bio_out, "STRING");
 | 
			
		||||
		started = 1;
 | 
			
		||||
		}
 | 
			
		||||
	if(flags & ENGINE_CMD_FLAG_NO_INPUT)
 | 
			
		||||
		{
 | 
			
		||||
		if(started)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_out, "|");
 | 
			
		||||
			err = 1;
 | 
			
		||||
			}
 | 
			
		||||
		BIO_printf(bio_out, "NO_INPUT");
 | 
			
		||||
		started = 1;
 | 
			
		||||
		}
 | 
			
		||||
	/* Check for unknown flags */
 | 
			
		||||
	flags = flags & ~ENGINE_CMD_FLAG_NUMERIC &
 | 
			
		||||
			~ENGINE_CMD_FLAG_STRING &
 | 
			
		||||
			~ENGINE_CMD_FLAG_NO_INPUT &
 | 
			
		||||
			~ENGINE_CMD_FLAG_INTERNAL;
 | 
			
		||||
	if(flags)
 | 
			
		||||
		{
 | 
			
		||||
		if(started) BIO_printf(bio_out, "|");
 | 
			
		||||
		BIO_printf(bio_out, "<0x%04X>", flags);
 | 
			
		||||
		}
 | 
			
		||||
	if(err)
 | 
			
		||||
		BIO_printf(bio_out, "  <illegal flags!>");
 | 
			
		||||
	BIO_printf(bio_out, "\n");
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int util_verbose(ENGINE *e, int verbose, BIO *bio_out, const char *indent)
 | 
			
		||||
	{
 | 
			
		||||
	static const int line_wrap = 78;
 | 
			
		||||
	int num;
 | 
			
		||||
	int ret = 0;
 | 
			
		||||
	char *name = NULL;
 | 
			
		||||
	char *desc = NULL;
 | 
			
		||||
	int flags;
 | 
			
		||||
	int xpos = 0;
 | 
			
		||||
	STACK *cmds = NULL;
 | 
			
		||||
	if(!ENGINE_ctrl(e, ENGINE_CTRL_HAS_CTRL_FUNCTION, 0, NULL, NULL) ||
 | 
			
		||||
			((num = ENGINE_ctrl(e, ENGINE_CTRL_GET_FIRST_CMD_TYPE,
 | 
			
		||||
					0, NULL, NULL)) <= 0))
 | 
			
		||||
		{
 | 
			
		||||
#if 0
 | 
			
		||||
		BIO_printf(bio_out, "%s<no control commands>\n", indent);
 | 
			
		||||
#endif
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	cmds = sk_new_null();
 | 
			
		||||
 | 
			
		||||
	if(!cmds)
 | 
			
		||||
		goto err;
 | 
			
		||||
	do {
 | 
			
		||||
		int len;
 | 
			
		||||
		/* Get the command input flags */
 | 
			
		||||
		if((flags = ENGINE_ctrl(e, ENGINE_CTRL_GET_CMD_FLAGS, num,
 | 
			
		||||
					NULL, NULL)) < 0)
 | 
			
		||||
			goto err;
 | 
			
		||||
                if (!(flags & ENGINE_CMD_FLAG_INTERNAL) || verbose >= 4)
 | 
			
		||||
                        {
 | 
			
		||||
                        /* Get the command name */
 | 
			
		||||
                        if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_LEN_FROM_CMD, num,
 | 
			
		||||
                                NULL, NULL)) <= 0)
 | 
			
		||||
                                goto err;
 | 
			
		||||
                        if((name = OPENSSL_malloc(len + 1)) == NULL)
 | 
			
		||||
                                goto err;
 | 
			
		||||
                        if(ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_FROM_CMD, num, name,
 | 
			
		||||
                                NULL) <= 0)
 | 
			
		||||
                                goto err;
 | 
			
		||||
                        /* Get the command description */
 | 
			
		||||
                        if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_LEN_FROM_CMD, num,
 | 
			
		||||
                                NULL, NULL)) < 0)
 | 
			
		||||
                                goto err;
 | 
			
		||||
                        if(len > 0)
 | 
			
		||||
                                {
 | 
			
		||||
                                if((desc = OPENSSL_malloc(len + 1)) == NULL)
 | 
			
		||||
                                        goto err;
 | 
			
		||||
                                if(ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_FROM_CMD, num, desc,
 | 
			
		||||
                                        NULL) <= 0)
 | 
			
		||||
                                        goto err;
 | 
			
		||||
                                }
 | 
			
		||||
                        /* Now decide on the output */
 | 
			
		||||
                        if(xpos == 0)
 | 
			
		||||
                                /* Do an indent */
 | 
			
		||||
                                xpos = BIO_printf(bio_out, indent);
 | 
			
		||||
                        else
 | 
			
		||||
                                /* Otherwise prepend a ", " */
 | 
			
		||||
                                xpos += BIO_printf(bio_out, ", ");
 | 
			
		||||
                        if(verbose == 1)
 | 
			
		||||
                                {
 | 
			
		||||
                                /* We're just listing names, comma-delimited */
 | 
			
		||||
                                if((xpos > (int)strlen(indent)) &&
 | 
			
		||||
					(xpos + (int)strlen(name) > line_wrap))
 | 
			
		||||
                                        {
 | 
			
		||||
                                        BIO_printf(bio_out, "\n");
 | 
			
		||||
                                        xpos = BIO_printf(bio_out, indent);
 | 
			
		||||
                                        }
 | 
			
		||||
                                xpos += BIO_printf(bio_out, "%s", name);
 | 
			
		||||
                                }
 | 
			
		||||
                        else
 | 
			
		||||
                                {
 | 
			
		||||
                                /* We're listing names plus descriptions */
 | 
			
		||||
                                BIO_printf(bio_out, "%s: %s\n", name,
 | 
			
		||||
                                        (desc == NULL) ? "<no description>" : desc);
 | 
			
		||||
                                /* ... and sometimes input flags */
 | 
			
		||||
                                if((verbose >= 3) && !util_flags(bio_out, flags,
 | 
			
		||||
                                        indent))
 | 
			
		||||
                                        goto err;
 | 
			
		||||
                                xpos = 0;
 | 
			
		||||
                                }
 | 
			
		||||
                        }
 | 
			
		||||
		OPENSSL_free(name); name = NULL;
 | 
			
		||||
		if(desc) { OPENSSL_free(desc); desc = NULL; }
 | 
			
		||||
		/* Move to the next command */
 | 
			
		||||
		num = ENGINE_ctrl(e, ENGINE_CTRL_GET_NEXT_CMD_TYPE,
 | 
			
		||||
					num, NULL, NULL);
 | 
			
		||||
		} while(num > 0);
 | 
			
		||||
	if(xpos > 0)
 | 
			
		||||
		BIO_printf(bio_out, "\n");
 | 
			
		||||
	ret = 1;
 | 
			
		||||
err:
 | 
			
		||||
	if(cmds) sk_pop_free(cmds, identity);
 | 
			
		||||
	if(name) OPENSSL_free(name);
 | 
			
		||||
	if(desc) OPENSSL_free(desc);
 | 
			
		||||
	return ret;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void util_do_cmds(ENGINE *e, STACK *cmds, BIO *bio_out, const char *indent)
 | 
			
		||||
	{
 | 
			
		||||
	int loop, res, num = sk_num(cmds);
 | 
			
		||||
	if(num < 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_out, "[Error]: internal stack error\n");
 | 
			
		||||
		return;
 | 
			
		||||
		}
 | 
			
		||||
	for(loop = 0; loop < num; loop++)
 | 
			
		||||
		{
 | 
			
		||||
		char buf[256];
 | 
			
		||||
		const char *cmd, *arg;
 | 
			
		||||
		cmd = sk_value(cmds, loop);
 | 
			
		||||
		res = 1; /* assume success */
 | 
			
		||||
		/* Check if this command has no ":arg" */
 | 
			
		||||
		if((arg = strstr(cmd, ":")) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			if(!ENGINE_ctrl_cmd_string(e, cmd, NULL, 0))
 | 
			
		||||
				res = 0;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if((int)(arg - cmd) > 254)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out,"[Error]: command name too long\n");
 | 
			
		||||
				return;
 | 
			
		||||
				}
 | 
			
		||||
			memcpy(buf, cmd, (int)(arg - cmd));
 | 
			
		||||
			buf[arg-cmd] = '\0';
 | 
			
		||||
			arg++; /* Move past the ":" */
 | 
			
		||||
			/* Call the command with the argument */
 | 
			
		||||
			if(!ENGINE_ctrl_cmd_string(e, buf, arg, 0))
 | 
			
		||||
				res = 0;
 | 
			
		||||
			}
 | 
			
		||||
		if(res)
 | 
			
		||||
			BIO_printf(bio_out, "[Success]: %s\n", cmd);
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_out, "[Failure]: %s\n", cmd);
 | 
			
		||||
			ERR_print_errors(bio_out);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int ret=1,i;
 | 
			
		||||
	char **pp;
 | 
			
		||||
	int verbose=0, list_cap=0, test_avail=0;
 | 
			
		||||
	ENGINE *e;
 | 
			
		||||
	STACK *engines = sk_new_null();
 | 
			
		||||
	STACK *pre_cmds = sk_new_null();
 | 
			
		||||
	STACK *post_cmds = sk_new_null();
 | 
			
		||||
	int badops=1;
 | 
			
		||||
	BIO *bio_out=NULL;
 | 
			
		||||
	const char *indent = "     ";
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
	SSL_load_error_strings();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
	bio_out=BIO_new_fp(stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
	{
 | 
			
		||||
	BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
	bio_out = BIO_push(tmpbio, bio_out);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if (strncmp(*argv,"-v",2) == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if(strspn(*argv + 1, "v") < strlen(*argv + 1))
 | 
			
		||||
				goto skip_arg_loop;
 | 
			
		||||
			if((verbose=strlen(*argv + 1)) > 4)
 | 
			
		||||
				goto skip_arg_loop;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-c") == 0)
 | 
			
		||||
			list_cap=1;
 | 
			
		||||
		else if (strcmp(*argv,"-t") == 0)
 | 
			
		||||
			test_avail=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pre") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			argc--; argv++;
 | 
			
		||||
			sk_push(pre_cmds,*argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-post") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			argc--; argv++;
 | 
			
		||||
			sk_push(post_cmds,*argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if ((strncmp(*argv,"-h",2) == 0) ||
 | 
			
		||||
				(strcmp(*argv,"-?") == 0))
 | 
			
		||||
			goto skip_arg_loop;
 | 
			
		||||
		else
 | 
			
		||||
			sk_push(engines,*argv);
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
	/* Looks like everything went OK */
 | 
			
		||||
	badops = 0;
 | 
			
		||||
skip_arg_loop:
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
		for (pp=engine_usage; (*pp != NULL); pp++)
 | 
			
		||||
			BIO_printf(bio_err,"%s",*pp);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (sk_num(engines) == 0)
 | 
			
		||||
		{
 | 
			
		||||
		for(e = ENGINE_get_first(); e != NULL; e = ENGINE_get_next(e))
 | 
			
		||||
			{
 | 
			
		||||
			sk_push(engines,(char *)ENGINE_get_id(e));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	for (i=0; i<sk_num(engines); i++)
 | 
			
		||||
		{
 | 
			
		||||
		const char *id = sk_value(engines,i);
 | 
			
		||||
		if ((e = ENGINE_by_id(id)) != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			const char *name = ENGINE_get_name(e);
 | 
			
		||||
			/* Do "id" first, then "name". Easier to auto-parse. */
 | 
			
		||||
			BIO_printf(bio_out, "(%s) %s\n", id, name);
 | 
			
		||||
			util_do_cmds(e, pre_cmds, bio_out, indent);
 | 
			
		||||
			if (strcmp(ENGINE_get_id(e), id) != 0)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out, "Loaded: (%s) %s\n",
 | 
			
		||||
					ENGINE_get_id(e), ENGINE_get_name(e));
 | 
			
		||||
				}
 | 
			
		||||
			if (list_cap)
 | 
			
		||||
				{
 | 
			
		||||
				int cap_size = 256;
 | 
			
		||||
				char *cap_buf = NULL;
 | 
			
		||||
				int k,n;
 | 
			
		||||
				const int *nids;
 | 
			
		||||
				ENGINE_CIPHERS_PTR fn_c;
 | 
			
		||||
				ENGINE_DIGESTS_PTR fn_d;
 | 
			
		||||
 | 
			
		||||
				if (ENGINE_get_RSA(e) != NULL
 | 
			
		||||
					&& !append_buf(&cap_buf, "RSA",
 | 
			
		||||
						&cap_size, 256))
 | 
			
		||||
					goto end;
 | 
			
		||||
				if (ENGINE_get_DSA(e) != NULL
 | 
			
		||||
					&& !append_buf(&cap_buf, "DSA",
 | 
			
		||||
						&cap_size, 256))
 | 
			
		||||
					goto end;
 | 
			
		||||
				if (ENGINE_get_DH(e) != NULL
 | 
			
		||||
					&& !append_buf(&cap_buf, "DH",
 | 
			
		||||
						&cap_size, 256))
 | 
			
		||||
					goto end;
 | 
			
		||||
				if (ENGINE_get_RAND(e) != NULL
 | 
			
		||||
					&& !append_buf(&cap_buf, "RAND",
 | 
			
		||||
						&cap_size, 256))
 | 
			
		||||
					goto end;
 | 
			
		||||
 | 
			
		||||
				fn_c = ENGINE_get_ciphers(e);
 | 
			
		||||
				if(!fn_c) goto skip_ciphers;
 | 
			
		||||
				n = fn_c(e, NULL, &nids, 0);
 | 
			
		||||
				for(k=0 ; k < n ; ++k)
 | 
			
		||||
					if(!append_buf(&cap_buf,
 | 
			
		||||
						       OBJ_nid2sn(nids[k]),
 | 
			
		||||
						       &cap_size, 256))
 | 
			
		||||
						goto end;
 | 
			
		||||
 | 
			
		||||
skip_ciphers:
 | 
			
		||||
				fn_d = ENGINE_get_digests(e);
 | 
			
		||||
				if(!fn_d) goto skip_digests;
 | 
			
		||||
				n = fn_d(e, NULL, &nids, 0);
 | 
			
		||||
				for(k=0 ; k < n ; ++k)
 | 
			
		||||
					if(!append_buf(&cap_buf,
 | 
			
		||||
						       OBJ_nid2sn(nids[k]),
 | 
			
		||||
						       &cap_size, 256))
 | 
			
		||||
						goto end;
 | 
			
		||||
 | 
			
		||||
skip_digests:
 | 
			
		||||
				if (cap_buf && (*cap_buf != '\0'))
 | 
			
		||||
					BIO_printf(bio_out, " [%s]\n", cap_buf);
 | 
			
		||||
 | 
			
		||||
				OPENSSL_free(cap_buf);
 | 
			
		||||
				}
 | 
			
		||||
			if(test_avail)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out, "%s", indent);
 | 
			
		||||
				if (ENGINE_init(e))
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_out, "[ available ]\n");
 | 
			
		||||
					util_do_cmds(e, post_cmds, bio_out, indent);
 | 
			
		||||
					ENGINE_finish(e);
 | 
			
		||||
					}
 | 
			
		||||
				else
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_out, "[ unavailable ]\n");
 | 
			
		||||
					ERR_print_errors_fp(stdout);
 | 
			
		||||
					ERR_clear_error();
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			if((verbose > 0) && !util_verbose(e, verbose, bio_out, indent))
 | 
			
		||||
				goto end;
 | 
			
		||||
			ENGINE_free(e);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	ERR_print_errors(bio_err);
 | 
			
		||||
	sk_pop_free(engines, identity);
 | 
			
		||||
	sk_pop_free(pre_cmds, identity);
 | 
			
		||||
	sk_pop_free(post_cmds, identity);
 | 
			
		||||
	if (bio_out != NULL) BIO_free_all(bio_out);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
@@ -60,17 +60,17 @@
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include "bio.h"
 | 
			
		||||
#include "lhash.h"
 | 
			
		||||
#include "err.h"
 | 
			
		||||
#include "ssl.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/lhash.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	errstr_main
 | 
			
		||||
 | 
			
		||||
int MAIN(argc, argv)
 | 
			
		||||
int argc;
 | 
			
		||||
char **argv;
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int i,ret=0;
 | 
			
		||||
	char buf[256];
 | 
			
		||||
@@ -91,12 +91,18 @@ char **argv;
 | 
			
		||||
		out=BIO_new(BIO_s_file());
 | 
			
		||||
		if ((out != NULL) && BIO_set_fp(out,stdout,BIO_NOCLOSE))
 | 
			
		||||
			{
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
			lh_node_stats_bio((LHASH *)ERR_get_string_table(),out);
 | 
			
		||||
			lh_stats_bio((LHASH *)ERR_get_string_table(),out);
 | 
			
		||||
			lh_node_usage_stats_bio((LHASH *)
 | 
			
		||||
				ERR_get_string_table(),out);
 | 
			
		||||
			}
 | 
			
		||||
		if (out != NULL) BIO_free(out);
 | 
			
		||||
		if (out != NULL) BIO_free_all(out);
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
@@ -104,7 +110,10 @@ char **argv;
 | 
			
		||||
	for (i=1; i<argc; i++)
 | 
			
		||||
		{
 | 
			
		||||
		if (sscanf(argv[i],"%lx",&l))
 | 
			
		||||
			printf("%s\n",ERR_error_string(l,buf));
 | 
			
		||||
			{
 | 
			
		||||
			ERR_error_string_n(l, buf, sizeof buf);
 | 
			
		||||
			printf("%s\n",buf);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			printf("%s: bad error code\n",argv[i]);
 | 
			
		||||
@@ -112,5 +121,6 @@ char **argv;
 | 
			
		||||
			ret++;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
2.99999.3	SET.ex3		SET x509v3 extension 3
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										114
									
								
								apps/g_ssleay.pl
									
									
									
									
									
								
							
							
						
						
									
										114
									
								
								apps/g_ssleay.pl
									
									
									
									
									
								
							@@ -1,114 +0,0 @@
 | 
			
		||||
#!/usr/local/bin/perl
 | 
			
		||||
 | 
			
		||||
$mkprog='mklinks';
 | 
			
		||||
$rmprog='rmlinks';
 | 
			
		||||
 | 
			
		||||
print "#ifndef NOPROTO\n";
 | 
			
		||||
 | 
			
		||||
grep(s/^asn1pars$/asn1parse/,@ARGV);
 | 
			
		||||
 | 
			
		||||
foreach (@ARGV)
 | 
			
		||||
	{ printf "extern int %s_main(int argc,char *argv[]);\n",$_; }
 | 
			
		||||
print "#else\n";
 | 
			
		||||
foreach (@ARGV)
 | 
			
		||||
	{ printf "extern int %s_main();\n",$_; }
 | 
			
		||||
print "#endif\n";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
print <<'EOF';
 | 
			
		||||
 | 
			
		||||
#ifdef SSLEAY_SRC
 | 
			
		||||
 | 
			
		||||
#define FUNC_TYPE_GENERAL	1
 | 
			
		||||
#define FUNC_TYPE_MD		2
 | 
			
		||||
#define FUNC_TYPE_CIPHER	3
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
	int type;
 | 
			
		||||
	char *name;
 | 
			
		||||
	int (*func)();
 | 
			
		||||
	} FUNCTION;
 | 
			
		||||
 | 
			
		||||
FUNCTION functions[] = {
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
foreach (@ARGV)
 | 
			
		||||
	{
 | 
			
		||||
	push(@files,$_);
 | 
			
		||||
	$str="\t{FUNC_TYPE_GENERAL,\"$_\",${_}_main},\n";
 | 
			
		||||
	if (($_ =~ /^s_/) || ($_ =~ /^ciphers$/))
 | 
			
		||||
		{ print "#if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(O_SSL3))\n${str}#endif\n"; } 
 | 
			
		||||
	elsif ( ($_ =~ /^rsa$/) || ($_ =~ /^genrsa$/) ||
 | 
			
		||||
		($_ =~ /^req$/) || ($_ =~ /^ca$/) || ($_ =~ /^x509$/))
 | 
			
		||||
		{ print "#ifndef NO_RSA\n${str}#endif\n";  }
 | 
			
		||||
	elsif ( ($_ =~ /^dsa$/) || ($_ =~ /^gendsa$/) || ($_ =~ /^dsaparam$/))
 | 
			
		||||
		{ print "#ifndef NO_DSA\n${str}#endif\n"; }
 | 
			
		||||
	elsif ( ($_ =~ /^dh$/) || ($_ =~ /^gendh$/))
 | 
			
		||||
		{ print "#ifndef NO_DH\n${str}#endif\n"; }
 | 
			
		||||
	else
 | 
			
		||||
		{ print $str; }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
foreach ("md2","md5","sha","sha1","mdc2","rmd160")
 | 
			
		||||
	{
 | 
			
		||||
	push(@files,$_);
 | 
			
		||||
	printf "\t{FUNC_TYPE_MD,\"%s\",dgst_main},\n",$_;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
foreach (
 | 
			
		||||
	"base64",
 | 
			
		||||
	"des", "des3", "desx", "idea", "rc4", "rc2","bf","cast","rc5",
 | 
			
		||||
	"des-ecb", "des-ede",    "des-ede3",
 | 
			
		||||
	"des-cbc", "des-ede-cbc","des-ede3-cbc",
 | 
			
		||||
	"des-cfb", "des-ede-cfb","des-ede3-cfb",
 | 
			
		||||
	"des-ofb", "des-ede-ofb","des-ede3-ofb",
 | 
			
		||||
	"idea-cbc","idea-ecb",   "idea-cfb", "idea-ofb",
 | 
			
		||||
	"rc2-cbc", "rc2-ecb",    "rc2-cfb",  "rc2-ofb",
 | 
			
		||||
	"bf-cbc",  "bf-ecb",     "bf-cfb",   "bf-ofb",
 | 
			
		||||
	"cast5-cbc","cast5-ecb", "cast5-cfb","cast5-ofb",
 | 
			
		||||
	"cast-cbc", "rc5-cbc",   "rc5-ecb",  "rc5-cfb",  "rc5-ofb")
 | 
			
		||||
	{
 | 
			
		||||
	push(@files,$_);
 | 
			
		||||
 | 
			
		||||
	$t=sprintf("\t{FUNC_TYPE_CIPHER,\"%s\",enc_main},\n",$_);
 | 
			
		||||
	if    ($_ =~ /des/)  { $t="#ifndef NO_DES\n${t}#endif\n"; }
 | 
			
		||||
	elsif ($_ =~ /idea/) { $t="#ifndef NO_IDEA\n${t}#endif\n"; }
 | 
			
		||||
	elsif ($_ =~ /rc4/)  { $t="#ifndef NO_RC4\n${t}#endif\n"; }
 | 
			
		||||
	elsif ($_ =~ /rc2/)  { $t="#ifndef NO_RC2\n${t}#endif\n"; }
 | 
			
		||||
	elsif ($_ =~ /bf/)   { $t="#ifndef NO_BLOWFISH\n${t}#endif\n"; }
 | 
			
		||||
	elsif ($_ =~ /cast/) { $t="#ifndef NO_CAST\n${t}#endif\n"; }
 | 
			
		||||
	elsif ($_ =~ /rc5/)  { $t="#ifndef NO_RC5\n${t}#endif\n"; }
 | 
			
		||||
	print $t;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
print "\t{0,NULL,NULL}\n\t};\n";
 | 
			
		||||
print "#endif\n\n";
 | 
			
		||||
 | 
			
		||||
open(OUT,">$mkprog") || die "unable to open '$prog':$!\n";
 | 
			
		||||
print OUT "#!/bin/sh\nfor i in ";
 | 
			
		||||
foreach (@files)
 | 
			
		||||
	{ print OUT $_." "; }
 | 
			
		||||
print OUT <<'EOF';
 | 
			
		||||
 | 
			
		||||
do
 | 
			
		||||
echo making symlink for $i
 | 
			
		||||
/bin/rm -f $i
 | 
			
		||||
ln -s ssleay $i
 | 
			
		||||
done
 | 
			
		||||
EOF
 | 
			
		||||
close(OUT);
 | 
			
		||||
chmod(0755,$mkprog);
 | 
			
		||||
 | 
			
		||||
open(OUT,">$rmprog") || die "unable to open '$prog':$!\n";
 | 
			
		||||
print OUT "#!/bin/sh\nfor i in ";
 | 
			
		||||
foreach (@files)
 | 
			
		||||
	{ print OUT $_." "; }
 | 
			
		||||
print OUT <<'EOF';
 | 
			
		||||
 | 
			
		||||
do
 | 
			
		||||
echo removing $i
 | 
			
		||||
/bin/rm -f $i
 | 
			
		||||
done
 | 
			
		||||
EOF
 | 
			
		||||
close(OUT);
 | 
			
		||||
chmod(0755,$rmprog);
 | 
			
		||||
							
								
								
									
										123
									
								
								apps/gendh.c
									
									
									
									
									
								
							
							
						
						
									
										123
									
								
								apps/gendh.c
									
									
									
									
									
								
							@@ -1,4 +1,5 @@
 | 
			
		||||
/* apps/gendh.c */
 | 
			
		||||
/* obsoleted by dhparam.c */
 | 
			
		||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -56,41 +57,37 @@
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include "bio.h"
 | 
			
		||||
#include "rand.h"
 | 
			
		||||
#include "err.h"
 | 
			
		||||
#include "bn.h"
 | 
			
		||||
#include "dh.h"
 | 
			
		||||
#include "x509.h"
 | 
			
		||||
#include "pem.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dh.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#define DEFBITS	512
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG gendh_main
 | 
			
		||||
 | 
			
		||||
#ifndef NOPROTO
 | 
			
		||||
static void MS_CALLBACK dh_cb(int p, int n, char *arg);
 | 
			
		||||
static long dh_load_rand(char *names);
 | 
			
		||||
#else
 | 
			
		||||
static void MS_CALLBACK dh_cb();
 | 
			
		||||
static long dh_load_rand();
 | 
			
		||||
#endif
 | 
			
		||||
static void MS_CALLBACK dh_cb(int p, int n, void *arg);
 | 
			
		||||
 | 
			
		||||
int MAIN(argc, argv)
 | 
			
		||||
int argc;
 | 
			
		||||
char **argv;
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	char buffer[200];
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	DH *dh=NULL;
 | 
			
		||||
	int ret=1,num=DEFBITS;
 | 
			
		||||
	int g=2;
 | 
			
		||||
	char *outfile=NULL;
 | 
			
		||||
	char *inrand=NULL,*randfile;
 | 
			
		||||
	char *inrand=NULL;
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
	BIO *out=NULL;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
@@ -99,6 +96,9 @@ char **argv;
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	argv++;
 | 
			
		||||
	argc--;
 | 
			
		||||
	for (;;)
 | 
			
		||||
@@ -115,6 +115,11 @@ char **argv;
 | 
			
		||||
			g=3; */
 | 
			
		||||
		else if (strcmp(*argv,"-5") == 0)
 | 
			
		||||
			g=5;
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
@@ -130,15 +135,18 @@ char **argv;
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"usage: gendh [args] [numbits]\n");
 | 
			
		||||
		BIO_printf(bio_err," -out file - output the key to 'file\n");
 | 
			
		||||
		BIO_printf(bio_err," -2    use 2 as the generator value\n");
 | 
			
		||||
	/*	BIO_printf(bio_err," -3    use 3 as the generator value\n"); */
 | 
			
		||||
		BIO_printf(bio_err," -5    use 5 as the generator value\n");
 | 
			
		||||
		BIO_printf(bio_err," -rand file:file:...\n");
 | 
			
		||||
		BIO_printf(bio_err," -2        - use 2 as the generator value\n");
 | 
			
		||||
	/*	BIO_printf(bio_err," -3        - use 3 as the generator value\n"); */
 | 
			
		||||
		BIO_printf(bio_err," -5        - use 5 as the generator value\n");
 | 
			
		||||
		BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n");
 | 
			
		||||
		BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,"           - load the file (or the files in the directory) into\n");
 | 
			
		||||
		BIO_printf(bio_err,"             the random number generator\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
		{
 | 
			
		||||
@@ -147,7 +155,15 @@ bad:
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
@@ -157,28 +173,21 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	randfile=RAND_file_name(buffer,200);
 | 
			
		||||
	if ((randfile == NULL)|| !RAND_load_file(randfile,1024L*1024L))
 | 
			
		||||
		BIO_printf(bio_err,"unable to load 'random state'\n");
 | 
			
		||||
 | 
			
		||||
	if (inrand == NULL)
 | 
			
		||||
		BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
	else
 | 
			
		||||
	if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
			dh_load_rand(inrand));
 | 
			
		||||
		BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
		}
 | 
			
		||||
	if (inrand != NULL)
 | 
			
		||||
		BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
			app_RAND_load_files(inrand));
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err,"Generating DH parameters, %d bit long strong prime, generator of %d\n",num,g);
 | 
			
		||||
	BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g);
 | 
			
		||||
	BIO_printf(bio_err,"This is going to take a long time\n");
 | 
			
		||||
	dh=DH_generate_parameters(num,g,dh_cb,(char *)bio_err);
 | 
			
		||||
	dh=DH_generate_parameters(num,g,dh_cb,bio_err);
 | 
			
		||||
		
 | 
			
		||||
	if (dh == NULL) goto end;
 | 
			
		||||
 | 
			
		||||
	if (randfile == NULL)
 | 
			
		||||
		BIO_printf(bio_err,"unable to write 'random state'\n");
 | 
			
		||||
	else
 | 
			
		||||
		RAND_write_file(randfile);
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 | 
			
		||||
	if (!PEM_write_bio_DHparams(out,dh))
 | 
			
		||||
		goto end;
 | 
			
		||||
@@ -186,15 +195,13 @@ bad:
 | 
			
		||||
end:
 | 
			
		||||
	if (ret != 0)
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
	if (out != NULL) BIO_free(out);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dh != NULL) DH_free(dh);
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void MS_CALLBACK dh_cb(p,n,arg)
 | 
			
		||||
int p;
 | 
			
		||||
int n;
 | 
			
		||||
char *arg;
 | 
			
		||||
static void MS_CALLBACK dh_cb(int p, int n, void *arg)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
 | 
			
		||||
@@ -203,33 +210,9 @@ char *arg;
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write((BIO *)arg,&c,1);
 | 
			
		||||
	BIO_flush((BIO *)arg);
 | 
			
		||||
	(void)BIO_flush((BIO *)arg);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static long dh_load_rand(name)
 | 
			
		||||
char *name;
 | 
			
		||||
	{
 | 
			
		||||
	char *p,*n;
 | 
			
		||||
	int last;
 | 
			
		||||
	long tot=0;
 | 
			
		||||
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		last=0;
 | 
			
		||||
		for (p=name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++);
 | 
			
		||||
		if (*p == '\0') last=1;
 | 
			
		||||
		*p='\0';
 | 
			
		||||
		n=name;
 | 
			
		||||
		name=p+1;
 | 
			
		||||
		if (*n == '\0') break;
 | 
			
		||||
 | 
			
		||||
		tot+=RAND_load_file(n,1);
 | 
			
		||||
		if (last) break;
 | 
			
		||||
		}
 | 
			
		||||
	return(tot);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										165
									
								
								apps/gendsa.c
									
									
									
									
									
								
							
							
						
						
									
										165
									
								
								apps/gendsa.c
									
									
									
									
									
								
							@@ -56,39 +56,36 @@
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include "bio.h"
 | 
			
		||||
#include "rand.h"
 | 
			
		||||
#include "err.h"
 | 
			
		||||
#include "bn.h"
 | 
			
		||||
#include "dsa.h"
 | 
			
		||||
#include "x509.h"
 | 
			
		||||
#include "pem.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dsa.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#define DEFBITS	512
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG gendsa_main
 | 
			
		||||
 | 
			
		||||
#ifndef NOPROTO
 | 
			
		||||
static long dsa_load_rand(char *names);
 | 
			
		||||
#else
 | 
			
		||||
static long dsa_load_rand();
 | 
			
		||||
#endif
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(argc, argv)
 | 
			
		||||
int argc;
 | 
			
		||||
char **argv;
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	char buffer[200];
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	DSA *dsa=NULL;
 | 
			
		||||
	int ret=1,num=DEFBITS;
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	char *outfile=NULL;
 | 
			
		||||
	char *inrand=NULL,*randfile,*dsaparams=NULL;
 | 
			
		||||
	char *inrand=NULL,*dsaparams=NULL;
 | 
			
		||||
	char *passargout = NULL, *passout = NULL;
 | 
			
		||||
	BIO *out=NULL,*in=NULL;
 | 
			
		||||
	const EVP_CIPHER *enc=NULL;
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
@@ -96,6 +93,9 @@ char **argv;
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	argv++;
 | 
			
		||||
	argc--;
 | 
			
		||||
	for (;;)
 | 
			
		||||
@@ -106,6 +106,16 @@ char **argv;
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
@@ -113,7 +123,25 @@ char **argv;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-") == 0)
 | 
			
		||||
			goto bad;
 | 
			
		||||
		else if (dsaparams == NULL)
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
		else if (strcmp(*argv,"-des") == 0)
 | 
			
		||||
			enc=EVP_des_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-des3") == 0)
 | 
			
		||||
			enc=EVP_des_ede3_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		else if (strcmp(*argv,"-idea") == 0)
 | 
			
		||||
			enc=EVP_idea_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		else if (strcmp(*argv,"-aes128") == 0)
 | 
			
		||||
			enc=EVP_aes_128_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-aes192") == 0)
 | 
			
		||||
			enc=EVP_aes_192_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-aes256") == 0)
 | 
			
		||||
			enc=EVP_aes_256_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
		else if (**argv != '-' && dsaparams == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			dsaparams = *argv;
 | 
			
		||||
			}
 | 
			
		||||
@@ -126,33 +154,64 @@ char **argv;
 | 
			
		||||
	if (dsaparams == NULL)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"usage: gendsa [args] [numbits]\n");
 | 
			
		||||
		BIO_printf(bio_err," -out file - output the key to 'file\n");
 | 
			
		||||
		BIO_printf(bio_err," -rand file:file:...\n");
 | 
			
		||||
		BIO_printf(bio_err,"usage: gendsa [args] dsaparam-file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out file - output the key to 'file'\n");
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
		BIO_printf(bio_err," -des      - encrypt the generated key with DES in cbc mode\n");
 | 
			
		||||
		BIO_printf(bio_err," -des3     - encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		BIO_printf(bio_err," -idea     - encrypt the generated key with IDEA in cbc mode\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n");
 | 
			
		||||
		BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,"           - load the file (or the files in the directory) into\n");
 | 
			
		||||
		BIO_printf(bio_err,"             the random number generator\n");
 | 
			
		||||
		BIO_printf(bio_err," dsaparam-file\n");
 | 
			
		||||
		BIO_printf(bio_err,"           - a DSA parameter file as generated by the dsaparam command\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	if (!(BIO_read_filename(in,"dsaparams")))
 | 
			
		||||
	if (!(BIO_read_filename(in,dsaparams)))
 | 
			
		||||
		{
 | 
			
		||||
		perror(dsaparams);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if ((dsa=PEM_read_bio_DSAparams(in,NULL,NULL)) == NULL)
 | 
			
		||||
	if ((dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL)) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load DSA parameter file\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	in = NULL;
 | 
			
		||||
		
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if (out == NULL) goto end;
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
@@ -162,59 +221,31 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	randfile=RAND_file_name(buffer,200);
 | 
			
		||||
	if ((randfile == NULL)|| !RAND_load_file(randfile,1024L*1024L))
 | 
			
		||||
		BIO_printf(bio_err,"unable to load 'random state'\n");
 | 
			
		||||
 | 
			
		||||
	if (inrand == NULL)
 | 
			
		||||
		BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
	else
 | 
			
		||||
	if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
			dsa_load_rand(inrand));
 | 
			
		||||
		BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
		}
 | 
			
		||||
	if (inrand != NULL)
 | 
			
		||||
		BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
			app_RAND_load_files(inrand));
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
 | 
			
		||||
	BIO_printf(bio_err,"This could take some time\n");
 | 
			
		||||
	BIO_printf(bio_err,"Generating DSA key, %d bits\n",
 | 
			
		||||
							BN_num_bits(dsa->p));
 | 
			
		||||
	if (!DSA_generate_key(dsa)) goto end;
 | 
			
		||||
 | 
			
		||||
	if (randfile == NULL)
 | 
			
		||||
		BIO_printf(bio_err,"unable to write 'random state'\n");
 | 
			
		||||
	else
 | 
			
		||||
		RAND_write_file(randfile);
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 | 
			
		||||
	if (!PEM_write_bio_DSAPrivateKey(out,dsa,EVP_des_ede3_cbc(),NULL,0,NULL))
 | 
			
		||||
	if (!PEM_write_bio_DSAPrivateKey(out,dsa,enc,NULL,0,NULL, passout))
 | 
			
		||||
		goto end;
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (ret != 0)
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
	if (out != NULL) BIO_free(out);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dsa != NULL) DSA_free(dsa);
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	if(passout) OPENSSL_free(passout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static long dsa_load_rand(name)
 | 
			
		||||
char *name;
 | 
			
		||||
	{
 | 
			
		||||
	char *p,*n;
 | 
			
		||||
	int last;
 | 
			
		||||
	long tot=0;
 | 
			
		||||
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		last=0;
 | 
			
		||||
		for (p=name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++);
 | 
			
		||||
		if (*p == '\0') last=1;
 | 
			
		||||
		*p='\0';
 | 
			
		||||
		n=name;
 | 
			
		||||
		name=p+1;
 | 
			
		||||
		if (*n == '\0') break;
 | 
			
		||||
 | 
			
		||||
		tot+=RAND_load_file(n,1);
 | 
			
		||||
		if (last) break;
 | 
			
		||||
		}
 | 
			
		||||
	return(tot);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										196
									
								
								apps/genrsa.c
									
									
									
									
									
								
							
							
						
						
									
										196
									
								
								apps/genrsa.c
									
									
									
									
									
								
							@@ -56,45 +56,42 @@
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include "bio.h"
 | 
			
		||||
#include "rand.h"
 | 
			
		||||
#include "err.h"
 | 
			
		||||
#include "bn.h"
 | 
			
		||||
#include "rsa.h"
 | 
			
		||||
#include "evp.h"
 | 
			
		||||
#include "x509.h"
 | 
			
		||||
#include "pem.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/rsa.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
 | 
			
		||||
#define DEFBITS	512
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG genrsa_main
 | 
			
		||||
 | 
			
		||||
#ifndef NOPROTO
 | 
			
		||||
static void MS_CALLBACK genrsa_cb(int p, int n, char *arg);
 | 
			
		||||
static long gr_load_rand(char *names);
 | 
			
		||||
#else
 | 
			
		||||
static void MS_CALLBACK genrsa_cb();
 | 
			
		||||
static long gr_load_rand();
 | 
			
		||||
#endif
 | 
			
		||||
static void MS_CALLBACK genrsa_cb(int p, int n, void *arg);
 | 
			
		||||
 | 
			
		||||
int MAIN(argc, argv)
 | 
			
		||||
int argc;
 | 
			
		||||
char **argv;
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	char buffer[200];
 | 
			
		||||
	RSA *rsa=NULL;
 | 
			
		||||
	int i,num=DEFBITS;
 | 
			
		||||
	long rnum=0,l;
 | 
			
		||||
	EVP_CIPHER *enc=NULL;
 | 
			
		||||
	long l;
 | 
			
		||||
	const EVP_CIPHER *enc=NULL;
 | 
			
		||||
	unsigned long f4=RSA_F4;
 | 
			
		||||
	char *outfile=NULL;
 | 
			
		||||
	char *inrand=NULL,*randfile;
 | 
			
		||||
	char *passargout = NULL, *passout = NULL;
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
	char *inrand=NULL;
 | 
			
		||||
	BIO *out=NULL;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
@@ -102,9 +99,12 @@ char **argv;
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto err;
 | 
			
		||||
	if ((out=BIO_new(BIO_s_file())) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to creat BIO for output\n");
 | 
			
		||||
		BIO_printf(bio_err,"unable to create BIO for output\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -120,23 +120,41 @@ char **argv;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-3") == 0)
 | 
			
		||||
			f4=3;
 | 
			
		||||
		else if (strcmp(*argv,"-F4") == 0)
 | 
			
		||||
		else if (strcmp(*argv,"-F4") == 0 || strcmp(*argv,"-f4") == 0)
 | 
			
		||||
			f4=RSA_F4;
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef NO_DES
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
		else if (strcmp(*argv,"-des") == 0)
 | 
			
		||||
			enc=EVP_des_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-des3") == 0)
 | 
			
		||||
			enc=EVP_des_ede3_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef NO_IDEA
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		else if (strcmp(*argv,"-idea") == 0)
 | 
			
		||||
			enc=EVP_idea_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		else if (strcmp(*argv,"-aes128") == 0)
 | 
			
		||||
			enc=EVP_aes_128_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-aes192") == 0)
 | 
			
		||||
			enc=EVP_aes_192_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-aes256") == 0)
 | 
			
		||||
			enc=EVP_aes_256_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			break;
 | 
			
		||||
		argv++;
 | 
			
		||||
@@ -146,23 +164,45 @@ char **argv;
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"usage: genrsa [args] [numbits]\n");
 | 
			
		||||
		BIO_printf(bio_err," -des      - encrypt the generated key with DES in cbc mode\n");
 | 
			
		||||
		BIO_printf(bio_err," -des3     - encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
 | 
			
		||||
#ifndef NO_IDEA
 | 
			
		||||
		BIO_printf(bio_err," -idea     - encrypt the generated key with IDEA in cbc mode\n");
 | 
			
		||||
		BIO_printf(bio_err," -des            encrypt the generated key with DES in cbc mode\n");
 | 
			
		||||
		BIO_printf(bio_err," -des3           encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		BIO_printf(bio_err," -idea           encrypt the generated key with IDEA in cbc mode\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -out file - output the key to 'file\n");
 | 
			
		||||
		BIO_printf(bio_err," -f4       - use F4 (0x10001) for the E value\n");
 | 
			
		||||
		BIO_printf(bio_err," -3        - use 3 for the E value\n");
 | 
			
		||||
		BIO_printf(bio_err," -rand file:file:...\n");
 | 
			
		||||
		BIO_printf(bio_err,"           - load the file (or the files in the directory) into\n");
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -out file       output the key to 'file\n");
 | 
			
		||||
		BIO_printf(bio_err," -passout arg    output file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err," -f4             use F4 (0x10001) for the E value\n");
 | 
			
		||||
		BIO_printf(bio_err," -3              use 3 for the E value\n");
 | 
			
		||||
		BIO_printf(bio_err," -engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
		BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,"                 load the file (or the files in the directory) into\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 the random number generator\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
@@ -172,45 +212,24 @@ bad:
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifdef WINDOWS
 | 
			
		||||
	BIO_printf(bio_err,"Loading 'screen' into random state -");
 | 
			
		||||
	BIO_flush(bio_err);
 | 
			
		||||
	RAND_screen();
 | 
			
		||||
	BIO_printf(bio_err," done\n");
 | 
			
		||||
#endif
 | 
			
		||||
	randfile=RAND_file_name(buffer,200);
 | 
			
		||||
	if ((randfile == NULL) ||
 | 
			
		||||
		 !(rnum=(long)RAND_load_file(randfile,1024L*1024L)))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load 'random state'\n");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (inrand == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		if (rnum == 0)
 | 
			
		||||
	if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
 | 
			
		||||
		&& !RAND_status())
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
		}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		rnum+=gr_load_rand(inrand);
 | 
			
		||||
		}
 | 
			
		||||
	if (rnum != 0)
 | 
			
		||||
		BIO_printf(bio_err,"%ld semi-random bytes loaded\n",rnum);
 | 
			
		||||
	if (inrand != NULL)
 | 
			
		||||
		BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
			app_RAND_load_files(inrand));
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err,"Generating RSA private key, %d bit long modulus\n",
 | 
			
		||||
		num);
 | 
			
		||||
	rsa=RSA_generate_key(num,f4,genrsa_cb,(char *)bio_err);
 | 
			
		||||
	rsa=RSA_generate_key(num,f4,genrsa_cb,bio_err);
 | 
			
		||||
		
 | 
			
		||||
	if (randfile == NULL)
 | 
			
		||||
		BIO_printf(bio_err,"unable to write 'random state'\n");
 | 
			
		||||
	else
 | 
			
		||||
		RAND_write_file(randfile);
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 | 
			
		||||
	if (rsa == NULL) goto err;
 | 
			
		||||
	
 | 
			
		||||
	/* We need to do the folloing for when the base number size is <
 | 
			
		||||
	/* 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++)
 | 
			
		||||
@@ -222,22 +241,27 @@ bad:
 | 
			
		||||
		l+=rsa->e->d[i];
 | 
			
		||||
		}
 | 
			
		||||
	BIO_printf(bio_err,"e is %ld (0x%lX)\n",l,l);
 | 
			
		||||
	if (!PEM_write_bio_RSAPrivateKey(out,rsa,enc,NULL,0,NULL))
 | 
			
		||||
	{
 | 
			
		||||
	PW_CB_DATA cb_data;
 | 
			
		||||
	cb_data.password = passout;
 | 
			
		||||
	cb_data.prompt_info = outfile;
 | 
			
		||||
	if (!PEM_write_bio_RSAPrivateKey(out,rsa,enc,NULL,0,
 | 
			
		||||
		(pem_password_cb *)password_callback,&cb_data))
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
err:
 | 
			
		||||
	if (rsa != NULL) RSA_free(rsa);
 | 
			
		||||
	if (out != NULL) BIO_free(out);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if(passout) OPENSSL_free(passout);
 | 
			
		||||
	if (ret != 0)
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
	EXIT(ret);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void MS_CALLBACK genrsa_cb(p, n, arg)
 | 
			
		||||
int p;
 | 
			
		||||
int n;
 | 
			
		||||
char *arg;
 | 
			
		||||
static void MS_CALLBACK genrsa_cb(int p, int n, void *arg)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
 | 
			
		||||
@@ -246,33 +270,15 @@ char *arg;
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write((BIO *)arg,&c,1);
 | 
			
		||||
	BIO_flush((BIO *)arg);
 | 
			
		||||
	(void)BIO_flush((BIO *)arg);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_RSA */
 | 
			
		||||
 | 
			
		||||
static long gr_load_rand(name)
 | 
			
		||||
char *name;
 | 
			
		||||
	{
 | 
			
		||||
	char *p,*n;
 | 
			
		||||
	int last;
 | 
			
		||||
	long tot=0;
 | 
			
		||||
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		last=0;
 | 
			
		||||
		for (p=name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++);
 | 
			
		||||
		if (*p == '\0') last=1;
 | 
			
		||||
		*p='\0';
 | 
			
		||||
		n=name;
 | 
			
		||||
		name=p+1;
 | 
			
		||||
		if (*n == '\0') break;
 | 
			
		||||
 | 
			
		||||
		tot+=RAND_load_file(n,1024L*1024L);
 | 
			
		||||
		if (last) break;
 | 
			
		||||
		}
 | 
			
		||||
	return(tot);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								apps/gmon.out
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								apps/gmon.out
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										69
									
								
								apps/install.com
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								apps/install.com
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,69 @@
 | 
			
		||||
$! INSTALL.COM -- Installs the files in a given directory tree
 | 
			
		||||
$!
 | 
			
		||||
$! Author: Richard Levitte <richard@levitte.org>
 | 
			
		||||
$! Time of creation: 22-MAY-1998 10:13
 | 
			
		||||
$!
 | 
			
		||||
$! P1	root of the directory tree
 | 
			
		||||
$!
 | 
			
		||||
$	IF P1 .EQS. ""
 | 
			
		||||
$	THEN
 | 
			
		||||
$	    WRITE SYS$OUTPUT "First argument missing."
 | 
			
		||||
$	    WRITE SYS$OUTPUT "Should be the directory where you want things installed."
 | 
			
		||||
$	    EXIT
 | 
			
		||||
$	ENDIF
 | 
			
		||||
$
 | 
			
		||||
$	ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
 | 
			
		||||
$	ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
 | 
			
		||||
$	ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
 | 
			
		||||
		   - "[000000." - "][" - "[" - "]"
 | 
			
		||||
$	ROOT = ROOT_DEV + "[" + ROOT_DIR
 | 
			
		||||
$
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLVEXE WRK_SSLROOT:[VAX_EXE]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLAEXE WRK_SSLROOT:[ALPHA_EXE]
 | 
			
		||||
$	DEFINE/NOLOG WRK_SSLLIB WRK_SSLROOT:[LIB]
 | 
			
		||||
$
 | 
			
		||||
$	IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLROOT:[000000]
 | 
			
		||||
$	IF F$PARSE("WRK_SSLVEXE:") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLVEXE:
 | 
			
		||||
$	IF F$PARSE("WRK_SSLAEXE:") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLAEXE:
 | 
			
		||||
$	IF F$PARSE("WRK_SSLLIB:") .EQS. "" THEN -
 | 
			
		||||
	   CREATE/DIR/LOG WRK_SSLLIB:
 | 
			
		||||
$
 | 
			
		||||
$	EXE := openssl
 | 
			
		||||
$
 | 
			
		||||
$	VEXE_DIR := [-.VAX.EXE.APPS]
 | 
			
		||||
$	AEXE_DIR := [-.AXP.EXE.APPS]
 | 
			
		||||
$
 | 
			
		||||
$	I = 0
 | 
			
		||||
$ LOOP_EXE: 
 | 
			
		||||
$	E = F$EDIT(F$ELEMENT(I, ",", EXE),"TRIM")
 | 
			
		||||
$	I = I + 1
 | 
			
		||||
$	IF E .EQS. "," THEN GOTO LOOP_EXE_END
 | 
			
		||||
$	SET NOON
 | 
			
		||||
$	IF F$SEARCH(VEXE_DIR+E+".EXE") .NES. ""
 | 
			
		||||
$	THEN
 | 
			
		||||
$	  COPY 'VEXE_DIR''E'.EXE WRK_SSLVEXE:'E'.EXE/log
 | 
			
		||||
$	  SET FILE/PROT=W:RE WRK_SSLVEXE:'E'.EXE
 | 
			
		||||
$	ENDIF
 | 
			
		||||
$	IF F$SEARCH(AEXE_DIR+E+".EXE") .NES. ""
 | 
			
		||||
$	THEN
 | 
			
		||||
$	  COPY 'AEXE_DIR''E'.EXE WRK_SSLAEXE:'E'.EXE/log
 | 
			
		||||
$	  SET FILE/PROT=W:RE WRK_SSLAEXE:'E'.EXE
 | 
			
		||||
$	ENDIF
 | 
			
		||||
$	SET ON
 | 
			
		||||
$	GOTO LOOP_EXE
 | 
			
		||||
$ LOOP_EXE_END:
 | 
			
		||||
$
 | 
			
		||||
$	SET NOON
 | 
			
		||||
$	COPY CA.COM WRK_SSLAEXE:CA.COM/LOG
 | 
			
		||||
$	SET FILE/PROT=W:RE WRK_SSLAEXE:CA.COM
 | 
			
		||||
$	COPY CA.COM WRK_SSLVEXE:CA.COM/LOG
 | 
			
		||||
$	SET FILE/PROT=W:RE WRK_SSLVEXE:CA.COM
 | 
			
		||||
$	COPY OPENSSL-VMS.CNF WRK_SSLROOT:[000000]OPENSSL.CNF/LOG
 | 
			
		||||
$	SET FILE/PROT=W:R WRK_SSLROOT:[000000]OPENSSL.CNF
 | 
			
		||||
$	SET ON
 | 
			
		||||
$
 | 
			
		||||
$	EXIT
 | 
			
		||||
							
								
								
									
										984
									
								
								apps/makeapps.com
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										984
									
								
								apps/makeapps.com
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,984 @@
 | 
			
		||||
$!
 | 
			
		||||
$!  MAKEAPPS.COM
 | 
			
		||||
$!  Written By:  Robert Byer
 | 
			
		||||
$!               Vice-President
 | 
			
		||||
$!               A-Com Computing, Inc.
 | 
			
		||||
$!               byer@mail.all-net.net
 | 
			
		||||
$!
 | 
			
		||||
$!  Changes by Richard Levitte <richard@levitte.org>
 | 
			
		||||
$!
 | 
			
		||||
$!  This command files compiles and creates all the various different
 | 
			
		||||
$!  "application" programs for the different types of encryption for OpenSSL.
 | 
			
		||||
$!  The EXE's are placed in the directory [.xxx.EXE.APPS] where "xxx" denotes
 | 
			
		||||
$!  either AXP or VAX depending on your machine architecture.
 | 
			
		||||
$!
 | 
			
		||||
$!  It was written so it would try to determine what "C" compiler to
 | 
			
		||||
$!  use or you can specify which "C" compiler to use.
 | 
			
		||||
$!
 | 
			
		||||
$!  Specify DEBUG or NODEBUG as P1 to compile with or without debugger
 | 
			
		||||
$!  information.
 | 
			
		||||
$!
 | 
			
		||||
$!  Specify which compiler at P2 to try to compile under.
 | 
			
		||||
$!
 | 
			
		||||
$!	   VAXC	 For VAX C.
 | 
			
		||||
$!	   DECC	 For DEC C.
 | 
			
		||||
$!	   GNUC	 For GNU C.
 | 
			
		||||
$!
 | 
			
		||||
$!  If you don't speficy a compiler, it will try to determine which
 | 
			
		||||
$!  "C" compiler to use.
 | 
			
		||||
$!
 | 
			
		||||
$!  P3, if defined, sets a TCP/IP library to use, through one of the following
 | 
			
		||||
$!  keywords:
 | 
			
		||||
$!
 | 
			
		||||
$!	UCX		for UCX
 | 
			
		||||
$!	SOCKETSHR	for SOCKETSHR+NETLIB
 | 
			
		||||
$!	TCPIP		for TCPIP (post UCX)
 | 
			
		||||
$!
 | 
			
		||||
$!  P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
 | 
			
		||||
$!
 | 
			
		||||
$!  P5, if defined, sets a choice of programs to compile.
 | 
			
		||||
$!
 | 
			
		||||
$!
 | 
			
		||||
$! Define A TCP/IP Library That We Will Need To Link To.
 | 
			
		||||
$! (That Is, If We Need To Link To One.)
 | 
			
		||||
$!
 | 
			
		||||
$ TCPIP_LIB = ""
 | 
			
		||||
$!
 | 
			
		||||
$! Check What Architecture We Are Using.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (F$GETSYI("CPU").GE.128)
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  The Architecture Is AXP.
 | 
			
		||||
$!
 | 
			
		||||
$   ARCH := AXP
 | 
			
		||||
$!
 | 
			
		||||
$! Else...
 | 
			
		||||
$!
 | 
			
		||||
$ ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!  The Architecture Is VAX.
 | 
			
		||||
$!
 | 
			
		||||
$   ARCH := VAX
 | 
			
		||||
$!
 | 
			
		||||
$! End The Architecture Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Define what programs should be compiled
 | 
			
		||||
$!
 | 
			
		||||
$ PROGRAMS := OPENSSL
 | 
			
		||||
$!$ PROGRAMS := VERIFY,ASN1PARS,REQ,DGST,DH,ENC,PASSWD,GENDH,ERRSTR,CA,CRL,-
 | 
			
		||||
$!	      RSA,DSA,DSAPARAM,-
 | 
			
		||||
$!	      X509,GENRSA,GENDSA,S_SERVER,S_CLIENT,SPEED,-
 | 
			
		||||
$!	      S_TIME,VERSION,PKCS7,CRL2P7,SESS_ID,CIPHERS,NSEQ,
 | 
			
		||||
$!
 | 
			
		||||
$! Check To Make Sure We Have Valid Command Line Parameters.
 | 
			
		||||
$!
 | 
			
		||||
$ GOSUB CHECK_OPTIONS
 | 
			
		||||
$!
 | 
			
		||||
$! Initialise logical names and such
 | 
			
		||||
$!
 | 
			
		||||
$ GOSUB INITIALISE
 | 
			
		||||
$!
 | 
			
		||||
$! Tell The User What Kind of Machine We Run On.
 | 
			
		||||
$!
 | 
			
		||||
$ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine."
 | 
			
		||||
$!
 | 
			
		||||
$! Define The CRYPTO Library.
 | 
			
		||||
$!
 | 
			
		||||
$ CRYPTO_LIB := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]LIBCRYPTO.OLB
 | 
			
		||||
$!
 | 
			
		||||
$! Define The SSL Library.
 | 
			
		||||
$!
 | 
			
		||||
$ SSL_LIB := SYS$DISK:[-.'ARCH'.EXE.SSL]LIBSSL.OLB
 | 
			
		||||
$!
 | 
			
		||||
$! Define The OBJ Directory.
 | 
			
		||||
$!
 | 
			
		||||
$ OBJ_DIR := SYS$DISK:[-.'ARCH'.OBJ.APPS]
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If The OBJ Directory Exists.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (F$PARSE(OBJ_DIR).EQS."")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  It Dosen't Exist, So Create It.
 | 
			
		||||
$!
 | 
			
		||||
$   CREATE/DIRECTORY 'OBJ_DIR'
 | 
			
		||||
$!
 | 
			
		||||
$! End The OBJ Directory Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Define The EXE Directory.
 | 
			
		||||
$!
 | 
			
		||||
$ EXE_DIR := SYS$DISK:[-.'ARCH'.EXE.APPS]
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If The EXE Directory Exists.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (F$PARSE(EXE_DIR).EQS."")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  It Dosen't Exist, So Create It.
 | 
			
		||||
$!
 | 
			
		||||
$   CREATE/DIRECTORY 'EXE_DIR'
 | 
			
		||||
$!
 | 
			
		||||
$! End The EXE Directory Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If We Have The Proper Libraries.
 | 
			
		||||
$!
 | 
			
		||||
$ GOSUB LIB_CHECK
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If We Have A Linker Option File.
 | 
			
		||||
$!
 | 
			
		||||
$ GOSUB CHECK_OPT_FILE
 | 
			
		||||
$!
 | 
			
		||||
$! Define The Application Files.
 | 
			
		||||
$!
 | 
			
		||||
$ LIB_FILES = "VERIFY;ASN1PARS;REQ;DGST;DH;DHPARAM;ENC;PASSWD;GENDH;ERRSTR;"+-
 | 
			
		||||
	      "CA;PKCS7;CRL2P7;CRL;"+-
 | 
			
		||||
	      "RSA;RSAUTL;DSA;DSAPARAM;EC;ECPARAM;"+-
 | 
			
		||||
	      "X509;GENRSA;GENDSA;S_SERVER;S_CLIENT;SPEED;"+-
 | 
			
		||||
	      "S_TIME;APPS;S_CB;S_SOCKET;APP_RAND;VERSION;SESS_ID;"+-
 | 
			
		||||
	      "CIPHERS;NSEQ;PKCS12;PKCS8;SPKAC;SMIME;RAND;ENGINE;OCSP"
 | 
			
		||||
$ APP_FILES := OPENSSL,'OBJ_DIR'VERIFY.OBJ,ASN1PARS.OBJ,REQ.OBJ,DGST.OBJ,DH.OBJ,DHPARAM.OBJ,ENC.OBJ,PASSWD.OBJ,GENDH.OBJ,ERRSTR.OBJ,-
 | 
			
		||||
	       CA.OBJ,PKCS7.OBJ,CRL2P7.OBJ,CRL.OBJ,-
 | 
			
		||||
	       RSA.OBJ,RSAUTL.OBJ,DSA.OBJ,DSAPARAM.OBJ,EC.OBJ,ECPARAM.OBJ,-
 | 
			
		||||
	       X509.OBJ,GENRSA.OBJ,GENDSA.OBJ,S_SERVER.OBJ,S_CLIENT.OBJ,SPEED.OBJ,-
 | 
			
		||||
	       S_TIME.OBJ,APPS.OBJ,S_CB.OBJ,S_SOCKET.OBJ,APP_RAND.OBJ,VERSION.OBJ,SESS_ID.OBJ,-
 | 
			
		||||
	       CIPHERS.OBJ,NSEQ.OBJ,PKCS12.OBJ,PKCS8.OBJ,SPKAC.OBJ,SMIME.OBJ,RAND.OBJ,ENGINE.OBJ,OCSP.OBJ
 | 
			
		||||
$ TCPIP_PROGRAMS = ",,"
 | 
			
		||||
$ IF COMPILER .EQS. "VAXC" THEN -
 | 
			
		||||
     TCPIP_PROGRAMS = ",OPENSSL,"
 | 
			
		||||
$!$ APP_FILES := VERIFY;ASN1PARS;REQ;DGST;DH;ENC;GENDH;ERRSTR;CA;-
 | 
			
		||||
$!	       PKCS7;CRL2P7;CRL;-
 | 
			
		||||
$!	       RSA;DSA;DSAPARAM;-
 | 
			
		||||
$!	       X509;GENRSA;GENDSA;-
 | 
			
		||||
$!	       S_SERVER,'OBJ_DIR'S_SOCKET.OBJ,'OBJ_DIR'S_CB.OBJ;-
 | 
			
		||||
$!	       S_CLIENT,'OBJ_DIR'S_SOCKET.OBJ,'OBJ_DIR'S_CB.OBJ;-
 | 
			
		||||
$!	       SPEED;-
 | 
			
		||||
$!	       S_TIME,'OBJ_DIR'S_CB.OBJ;VERSION;SESS_ID;CIPHERS;NSEQ
 | 
			
		||||
$!$ TCPIP_PROGRAMS = ",,"
 | 
			
		||||
$!$ IF COMPILER .EQS. "VAXC" THEN -
 | 
			
		||||
$!     TCPIP_PROGRAMS = ",S_SERVER,S_CLIENT,SESS_ID,CIPHERS,S_TIME,"
 | 
			
		||||
$!
 | 
			
		||||
$! Setup exceptional compilations
 | 
			
		||||
$!
 | 
			
		||||
$ COMPILEWITH_CC2 = ",S_SOCKET,S_SERVER,S_CLIENT,"
 | 
			
		||||
$!
 | 
			
		||||
$ PHASE := LIB
 | 
			
		||||
$!
 | 
			
		||||
$ RESTART: 
 | 
			
		||||
$!
 | 
			
		||||
$!  Define A File Counter And Set It To "0".
 | 
			
		||||
$!
 | 
			
		||||
$ FILE_COUNTER = 0
 | 
			
		||||
$!
 | 
			
		||||
$! Top Of The File Loop.
 | 
			
		||||
$!
 | 
			
		||||
$ NEXT_FILE:
 | 
			
		||||
$!
 | 
			
		||||
$! O.K, Extract The File Name From The File List.
 | 
			
		||||
$!
 | 
			
		||||
$ FILE_NAME0 = F$EDIT(F$ELEMENT(FILE_COUNTER,";",'PHASE'_FILES),"TRIM")
 | 
			
		||||
$ FILE_NAME = F$EDIT(F$ELEMENT(0,",",FILE_NAME0),"TRIM")
 | 
			
		||||
$ EXTRA_OBJ = FILE_NAME0 - FILE_NAME
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If We Are At The End Of The File List.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (FILE_NAME0.EQS.";")
 | 
			
		||||
$ THEN
 | 
			
		||||
$   IF (PHASE.EQS."LIB")
 | 
			
		||||
$   THEN
 | 
			
		||||
$     PHASE := APP
 | 
			
		||||
$     GOTO RESTART
 | 
			
		||||
$   ELSE
 | 
			
		||||
$     GOTO FILE_DONE
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Increment The Counter.
 | 
			
		||||
$!
 | 
			
		||||
$ FILE_COUNTER = FILE_COUNTER + 1
 | 
			
		||||
$!
 | 
			
		||||
$! Check to see if this program should actually be compiled
 | 
			
		||||
$!
 | 
			
		||||
$ IF PHASE .EQS. "APP" .AND. -
 | 
			
		||||
     ","+PROGRAMS+"," - (","+F$EDIT(FILE_NAME,"UPCASE")+",") .EQS. ","+PROGRAMS+","
 | 
			
		||||
$ THEN
 | 
			
		||||
$   GOTO NEXT_FILE
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Create The Source File Name.
 | 
			
		||||
$!
 | 
			
		||||
$ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C"
 | 
			
		||||
$!
 | 
			
		||||
$! Create The Object File Name.
 | 
			
		||||
$!
 | 
			
		||||
$ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
 | 
			
		||||
$!
 | 
			
		||||
$! Create The Executable File Name.
 | 
			
		||||
$!
 | 
			
		||||
$ EXE_FILE = EXE_DIR + FILE_NAME + ".EXE"
 | 
			
		||||
$ ON WARNING THEN GOTO NEXT_FILE
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If The File We Want To Compile Actually Exists.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (F$SEARCH(SOURCE_FILE).EQS."")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Tell The User That The File Dosen't Exist.
 | 
			
		||||
$!
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$   WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$!
 | 
			
		||||
$!  Exit The Build.
 | 
			
		||||
$!
 | 
			
		||||
$   GOTO EXIT
 | 
			
		||||
$!
 | 
			
		||||
$! End The File Exist Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Tell The User What We Are Building.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (PHASE.EQS."LIB")
 | 
			
		||||
$ THEN
 | 
			
		||||
$   WRITE SYS$OUTPUT "Compiling The ",FILE_NAME,".C File."
 | 
			
		||||
$ ELSE
 | 
			
		||||
$   WRITE SYS$OUTPUT "Building The ",FILE_NAME," Application Program."
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Compile The File.
 | 
			
		||||
$!
 | 
			
		||||
$ ON ERROR THEN GOTO NEXT_FILE
 | 
			
		||||
$ IF COMPILEWITH_CC2 - FILE_NAME .NES. COMPILEWITH_CC2
 | 
			
		||||
$ THEN
 | 
			
		||||
$   CC2/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
 | 
			
		||||
$ ELSE
 | 
			
		||||
$   CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$ ON WARNING THEN GOTO NEXT_FILE
 | 
			
		||||
$!
 | 
			
		||||
$ IF (PHASE.EQS."LIB") 
 | 
			
		||||
$ THEN 
 | 
			
		||||
$   GOTO NEXT_FILE
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check if this program works well without a TCPIP library
 | 
			
		||||
$!
 | 
			
		||||
$ IF TCPIP_LIB .EQS. "" .AND. TCPIP_PROGRAMS - FILE_NAME .NES. TCPIP_PROGRAMS
 | 
			
		||||
$ THEN
 | 
			
		||||
$   WRITE SYS$OUTPUT FILE_NAME," needs a TCP/IP library.  Can't link.  Skipping..."
 | 
			
		||||
$   GOTO NEXT_FILE
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Link The Program.
 | 
			
		||||
$! Check To See If We Are To Link With A Specific TCP/IP Library.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (TCPIP_LIB.NES."")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$! Don't Link With The RSAREF Routines And TCP/IP Library.
 | 
			
		||||
$!
 | 
			
		||||
$   LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
 | 
			
		||||
	'OBJECT_FILE''EXTRA_OBJ', -
 | 
			
		||||
        'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
 | 
			
		||||
        'TCPIP_LIB','OPT_FILE'/OPTION
 | 
			
		||||
$!
 | 
			
		||||
$! Else...
 | 
			
		||||
$!
 | 
			
		||||
$ ELSE
 | 
			
		||||
$!
 | 
			
		||||
$! Don't Link With The RSAREF Routines And Link With A TCP/IP Library.
 | 
			
		||||
$!
 | 
			
		||||
$   LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
 | 
			
		||||
	'OBJECT_FILE''EXTRA_OBJ', -
 | 
			
		||||
        'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
 | 
			
		||||
        'OPT_FILE'/OPTION
 | 
			
		||||
$!
 | 
			
		||||
$! End The TCP/IP Library Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Go Back And Do It Again.
 | 
			
		||||
$!
 | 
			
		||||
$ GOTO NEXT_FILE
 | 
			
		||||
$!
 | 
			
		||||
$! All Done With This File.
 | 
			
		||||
$!
 | 
			
		||||
$ FILE_DONE:
 | 
			
		||||
$ EXIT:
 | 
			
		||||
$!
 | 
			
		||||
$! All Done, Time To Clean Up And Exit.
 | 
			
		||||
$!
 | 
			
		||||
$ GOSUB CLEANUP
 | 
			
		||||
$ EXIT
 | 
			
		||||
$!
 | 
			
		||||
$! Check For The Link Option FIle.
 | 
			
		||||
$!
 | 
			
		||||
$ CHECK_OPT_FILE:
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If We Need To Make A VAX C Option File.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (COMPILER.EQS."VAXC")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Already Have A VAX C Linker Option File.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (F$SEARCH(OPT_FILE).EQS."")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    We Need A VAX C Linker Option File.
 | 
			
		||||
$!
 | 
			
		||||
$     CREATE 'OPT_FILE'
 | 
			
		||||
$DECK
 | 
			
		||||
!
 | 
			
		||||
! Default System Options File To Link Agianst 
 | 
			
		||||
! The Sharable VAX C Runtime Library.
 | 
			
		||||
!
 | 
			
		||||
SYS$SHARE:VAXCRTL.EXE/SHARE
 | 
			
		||||
$EOD
 | 
			
		||||
$!
 | 
			
		||||
$!  End The Option File Check.
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! End The VAXC Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If We Need A GNU C Option File.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (COMPILER.EQS."GNUC")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Already Have A GNU C Linker Option File.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (F$SEARCH(OPT_FILE).EQS."")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    We Need A GNU C Linker Option File.
 | 
			
		||||
$!
 | 
			
		||||
$     CREATE 'OPT_FILE'
 | 
			
		||||
$DECK
 | 
			
		||||
!
 | 
			
		||||
! Default System Options File To Link Agianst 
 | 
			
		||||
! The Sharable C Runtime Library.
 | 
			
		||||
!
 | 
			
		||||
GNU_CC:[000000]GCCLIB/LIBRARY
 | 
			
		||||
SYS$SHARE:VAXCRTL/SHARE
 | 
			
		||||
$EOD
 | 
			
		||||
$!
 | 
			
		||||
$!  End The Option File Check.
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! End The GNU C Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If We Need A DEC C Option File.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (COMPILER.EQS."DECC")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Already Have A DEC C Linker Option File.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (F$SEARCH(OPT_FILE).EQS."")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Figure Out If We Need An AXP Or A VAX Linker Option File.
 | 
			
		||||
$!
 | 
			
		||||
$     IF ARCH.EQS."VAX"
 | 
			
		||||
$     THEN
 | 
			
		||||
$!
 | 
			
		||||
$!      We Need A DEC C Linker Option File For VAX.
 | 
			
		||||
$!
 | 
			
		||||
$       CREATE 'OPT_FILE'
 | 
			
		||||
$DECK
 | 
			
		||||
!
 | 
			
		||||
! Default System Options File To Link Agianst 
 | 
			
		||||
! The Sharable DEC C Runtime Library.
 | 
			
		||||
!
 | 
			
		||||
SYS$SHARE:DECC$SHR.EXE/SHARE
 | 
			
		||||
$EOD
 | 
			
		||||
$!
 | 
			
		||||
$!    Else...
 | 
			
		||||
$!
 | 
			
		||||
$     ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!      Create The AXP Linker Option File.
 | 
			
		||||
$!
 | 
			
		||||
$       CREATE 'OPT_FILE'
 | 
			
		||||
$DECK
 | 
			
		||||
!
 | 
			
		||||
! Default System Options File For AXP To Link Agianst 
 | 
			
		||||
! The Sharable C Runtime Library.
 | 
			
		||||
!
 | 
			
		||||
SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
 | 
			
		||||
SYS$SHARE:CMA$OPEN_RTL/SHARE
 | 
			
		||||
$EOD
 | 
			
		||||
$!
 | 
			
		||||
$!    End The VAX/AXP DEC C Option File Check.
 | 
			
		||||
$!
 | 
			
		||||
$     ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  End The Option File Search.
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! End The DEC C Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Tell The User What Linker Option File We Are Using.
 | 
			
		||||
$!
 | 
			
		||||
$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."	
 | 
			
		||||
$!
 | 
			
		||||
$! Time To RETURN.
 | 
			
		||||
$!
 | 
			
		||||
$ RETURN
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If We Have The Appropiate Libraries.
 | 
			
		||||
$!
 | 
			
		||||
$ LIB_CHECK:
 | 
			
		||||
$!
 | 
			
		||||
$! Look For The Library LIBCRYPTO.OLB.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (F$SEARCH(CRYPTO_LIB).EQS."")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Tell The User We Can't Find The LIBCRYPTO.OLB Library.
 | 
			
		||||
$!
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$   WRITE SYS$OUTPUT "Can't Find The Library ",CRYPTO_LIB,"."
 | 
			
		||||
$   WRITE SYS$OUTPUT "We Can't Link Without It."
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$!
 | 
			
		||||
$!  Since We Can't Link Without It, Exit.
 | 
			
		||||
$!
 | 
			
		||||
$   EXIT
 | 
			
		||||
$!
 | 
			
		||||
$! End The Crypto Library Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Look For The Library LIBSSL.OLB.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (F$SEARCH(SSL_LIB).EQS."")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Tell The User We Can't Find The LIBSSL.OLB Library.
 | 
			
		||||
$!
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$   WRITE SYS$OUTPUT "Can't Find The Library ",SSL_LIB,"."
 | 
			
		||||
$   WRITE SYS$OUTPUT "Some Of The Test Programs Need To Link To It."
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$!
 | 
			
		||||
$!  Since We Can't Link Without It, Exit.
 | 
			
		||||
$!
 | 
			
		||||
$   EXIT
 | 
			
		||||
$!
 | 
			
		||||
$! End The SSL Library Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Time To Return.
 | 
			
		||||
$!
 | 
			
		||||
$ RETURN
 | 
			
		||||
$!
 | 
			
		||||
$! Check The User's Options.
 | 
			
		||||
$!
 | 
			
		||||
$ CHECK_OPTIONS:
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If P1 Is Blank.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (P1.EQS."NODEBUG")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!   P1 Is NODEBUG, So Compile Without Debugger Information.
 | 
			
		||||
$!
 | 
			
		||||
$    DEBUGGER  = "NODEBUG"
 | 
			
		||||
$    TRACEBACK = "NOTRACEBACK" 
 | 
			
		||||
$    GCC_OPTIMIZE = "OPTIMIZE"
 | 
			
		||||
$    CC_OPTIMIZE = "OPTIMIZE"
 | 
			
		||||
$    WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
 | 
			
		||||
$    WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
 | 
			
		||||
$!
 | 
			
		||||
$! Else...
 | 
			
		||||
$!
 | 
			
		||||
$ ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Are To Compile With Debugger Information.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (P1.EQS."DEBUG")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Compile With Debugger Information.
 | 
			
		||||
$!
 | 
			
		||||
$     DEBUGGER  = "DEBUG"
 | 
			
		||||
$     TRACEBACK = "TRACEBACK"
 | 
			
		||||
$     GCC_OPTIMIZE = "NOOPTIMIZE"
 | 
			
		||||
$     CC_OPTIMIZE = "NOOPTIMIZE"
 | 
			
		||||
$     WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
 | 
			
		||||
$     WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
 | 
			
		||||
$   ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!    Tell The User Entered An Invalid Option..
 | 
			
		||||
$!
 | 
			
		||||
$     WRITE SYS$OUTPUT ""
 | 
			
		||||
$     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
 | 
			
		||||
$     WRITE SYS$OUTPUT ""
 | 
			
		||||
$     WRITE SYS$OUTPUT "    DEBUG    :  Compile With The Debugger Information."
 | 
			
		||||
$     WRITE SYS$OUTPUT "    NODEBUG  :  Compile Without The Debugger Information."
 | 
			
		||||
$     WRITE SYS$OUTPUT ""
 | 
			
		||||
$!
 | 
			
		||||
$!    Time To EXIT.
 | 
			
		||||
$!
 | 
			
		||||
$     EXIT
 | 
			
		||||
$!
 | 
			
		||||
$!  End The Valid Arguement Check.
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! End The P1 Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If P2 Is Blank.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (P2.EQS."")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  O.K., The User Didn't Specify A Compiler, Let's Try To
 | 
			
		||||
$!  Find Out Which One To Use.
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Have GNU C.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (F$TRNLNM("GNU_CC").NES."")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Looks Like GNUC, Set To Use GNUC.
 | 
			
		||||
$!
 | 
			
		||||
$     P2 = "GNUC"
 | 
			
		||||
$!
 | 
			
		||||
$!  Else...
 | 
			
		||||
$!
 | 
			
		||||
$   ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Have VAXC Or DECC.
 | 
			
		||||
$!
 | 
			
		||||
$     IF (ARCH.EQS."AXP").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
 | 
			
		||||
$     THEN 
 | 
			
		||||
$!
 | 
			
		||||
$!      Looks Like DECC, Set To Use DECC.
 | 
			
		||||
$!
 | 
			
		||||
$       P2 = "DECC"
 | 
			
		||||
$!
 | 
			
		||||
$!    Else...
 | 
			
		||||
$!
 | 
			
		||||
$     ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!      Looks Like VAXC, Set To Use VAXC.
 | 
			
		||||
$!
 | 
			
		||||
$       P2 = "VAXC"
 | 
			
		||||
$!
 | 
			
		||||
$!    End The VAXC Compiler Check.
 | 
			
		||||
$!
 | 
			
		||||
$     ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  End The DECC & VAXC Compiler Check.
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  End The Compiler Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If We Have A Option For P3.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (P3.EQS."")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Find out what socket library we have available
 | 
			
		||||
$!
 | 
			
		||||
$   IF F$PARSE("SOCKETSHR:") .NES. ""
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    We have SOCKETSHR, and it is my opinion that it's the best to use.
 | 
			
		||||
$!
 | 
			
		||||
$     P3 = "SOCKETSHR"
 | 
			
		||||
$!
 | 
			
		||||
$!    Tell the user
 | 
			
		||||
$!
 | 
			
		||||
$     WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
 | 
			
		||||
$!
 | 
			
		||||
$!    Else, let's look for something else
 | 
			
		||||
$!
 | 
			
		||||
$   ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!    Like UCX (the reason to do this before Multinet is that the UCX
 | 
			
		||||
$!    emulation is easier to use...)
 | 
			
		||||
$!
 | 
			
		||||
$     IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
 | 
			
		||||
	 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
 | 
			
		||||
	 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
 | 
			
		||||
$     THEN
 | 
			
		||||
$!
 | 
			
		||||
$!	Last resort: a UCX or UCX-compatible library
 | 
			
		||||
$!
 | 
			
		||||
$	P3 = "UCX"
 | 
			
		||||
$!
 | 
			
		||||
$!      Tell the user
 | 
			
		||||
$!
 | 
			
		||||
$       WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
 | 
			
		||||
$!
 | 
			
		||||
$!	That was all...
 | 
			
		||||
$!
 | 
			
		||||
$     ENDIF
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Set Up Initial CC Definitions, Possibly With User Ones
 | 
			
		||||
$!
 | 
			
		||||
$ 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"
 | 
			
		||||
$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
 | 
			
		||||
	CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If The User Entered A Valid Paramter.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (P2.EQS."VAXC").OR.(P2.EQS."DECC").OR.(P2.EQS."GNUC")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If The User Wanted DECC.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (P2.EQS."DECC")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Looks Like DECC, Set To Use DECC.
 | 
			
		||||
$!
 | 
			
		||||
$     COMPILER = "DECC"
 | 
			
		||||
$!
 | 
			
		||||
$!    Tell The User We Are Using DECC.
 | 
			
		||||
$!
 | 
			
		||||
$     WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
 | 
			
		||||
$!
 | 
			
		||||
$!    Use DECC...
 | 
			
		||||
$!
 | 
			
		||||
$     CC = "CC"
 | 
			
		||||
$     IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
 | 
			
		||||
	 THEN CC = "CC/DECC"
 | 
			
		||||
$     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
 | 
			
		||||
           "/NOLIST/PREFIX=ALL" + -
 | 
			
		||||
	   "/INCLUDE=(SYS$DISK:[-])" + CCEXTRAFLAGS
 | 
			
		||||
$!
 | 
			
		||||
$!    Define The Linker Options File Name.
 | 
			
		||||
$!
 | 
			
		||||
$     OPT_FILE = "SYS$DISK:[]VAX_DECC_OPTIONS.OPT"
 | 
			
		||||
$!
 | 
			
		||||
$!  End DECC Check.
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Are To Use VAXC.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (P2.EQS."VAXC")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Looks Like VAXC, Set To Use VAXC.
 | 
			
		||||
$!
 | 
			
		||||
$     COMPILER = "VAXC"
 | 
			
		||||
$!
 | 
			
		||||
$!    Tell The User We Are Using VAX C.
 | 
			
		||||
$     WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
 | 
			
		||||
$!
 | 
			
		||||
$!    Compile Using VAXC.
 | 
			
		||||
$!
 | 
			
		||||
$     CC = "CC"
 | 
			
		||||
$     IF ARCH.EQS."AXP"
 | 
			
		||||
$     THEN
 | 
			
		||||
$	WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
 | 
			
		||||
$	EXIT
 | 
			
		||||
$     ENDIF
 | 
			
		||||
$     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
 | 
			
		||||
$     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
 | 
			
		||||
	   "/INCLUDE=(SYS$DISK:[-])" + CCEXTRAFLAGS
 | 
			
		||||
$     CCDEFS = CCDEFS + ",""VAXC"""
 | 
			
		||||
$!
 | 
			
		||||
$!    Define <sys> As SYS$COMMON:[SYSLIB]
 | 
			
		||||
$!
 | 
			
		||||
$     DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
 | 
			
		||||
$!
 | 
			
		||||
$!    Define The Linker Options File Name.
 | 
			
		||||
$!
 | 
			
		||||
$     OPT_FILE = "SYS$DISK:[]VAX_VAXC_OPTIONS.OPT"
 | 
			
		||||
$!
 | 
			
		||||
$!  End VAXC Check
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If We Are To Use GNU C.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (P2.EQS."GNUC")
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Looks Like GNUC, Set To Use GNUC.
 | 
			
		||||
$!
 | 
			
		||||
$     COMPILER = "GNUC"
 | 
			
		||||
$!
 | 
			
		||||
$!    Tell The User We Are Using GNUC.
 | 
			
		||||
$!
 | 
			
		||||
$     WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
 | 
			
		||||
$!
 | 
			
		||||
$!    Use GNU C...
 | 
			
		||||
$!
 | 
			
		||||
$     IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC
 | 
			
		||||
$     CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
 | 
			
		||||
	   "/INCLUDE=(SYS$DISK:[-])" + CCEXTRAFLAGS
 | 
			
		||||
$!
 | 
			
		||||
$!    Define The Linker Options File Name.
 | 
			
		||||
$!
 | 
			
		||||
$     OPT_FILE = "SYS$DISK:[]VAX_GNUC_OPTIONS.OPT"
 | 
			
		||||
$!
 | 
			
		||||
$!  End The GNU C Check.
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Set up default defines
 | 
			
		||||
$!
 | 
			
		||||
$   CCDEFS = """FLAT_INC=1""," + CCDEFS
 | 
			
		||||
$!
 | 
			
		||||
$!  Else The User Entered An Invalid Arguement.
 | 
			
		||||
$!
 | 
			
		||||
$ ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!  Tell The User We Don't Know What They Want.
 | 
			
		||||
$!
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$   WRITE SYS$OUTPUT "The Option ",P2," Is Invalid.  The Valid Options Are:"
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
 | 
			
		||||
$   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
 | 
			
		||||
$   WRITE SYS$OUTPUT "    GNUC  :  To Compile With GNU C."
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$!
 | 
			
		||||
$!  Time To EXIT.
 | 
			
		||||
$!
 | 
			
		||||
$   EXIT
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Time to check the contents, and to make sure we get the correct library.
 | 
			
		||||
$!
 | 
			
		||||
$ IF P3.EQS."SOCKETSHR" .OR. P3.EQS."MULTINET" .OR. P3.EQS."UCX" -
 | 
			
		||||
     .OR. P3.EQS."TCPIP" .OR. P3.EQS."NONE"
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Check to see if SOCKETSHR was chosen
 | 
			
		||||
$!
 | 
			
		||||
$   IF P3.EQS."SOCKETSHR"
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Set the library to use SOCKETSHR
 | 
			
		||||
$!
 | 
			
		||||
$     TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT"
 | 
			
		||||
$!
 | 
			
		||||
$!    Done with SOCKETSHR
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check to see if MULTINET was chosen
 | 
			
		||||
$!
 | 
			
		||||
$   IF P3.EQS."MULTINET"
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Set the library to use UCX emulation.
 | 
			
		||||
$!
 | 
			
		||||
$     P3 = "UCX"
 | 
			
		||||
$!
 | 
			
		||||
$!    Done with MULTINET
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check to see if UCX was chosen
 | 
			
		||||
$!
 | 
			
		||||
$   IF P3.EQS."UCX"
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Set the library to use UCX.
 | 
			
		||||
$!
 | 
			
		||||
$     TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT/OPT"
 | 
			
		||||
$     IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
 | 
			
		||||
$     THEN
 | 
			
		||||
$       TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT"
 | 
			
		||||
$     ELSE
 | 
			
		||||
$       IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
 | 
			
		||||
	  TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT/OPT"
 | 
			
		||||
$     ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!    Done with UCX
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check to see if TCPIP (post UCX) was chosen
 | 
			
		||||
$!
 | 
			
		||||
$   IF P3.EQS."TCPIP"
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Set the library to use TCPIP.
 | 
			
		||||
$!
 | 
			
		||||
$     TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT"
 | 
			
		||||
$!
 | 
			
		||||
$!    Done with TCPIP
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Check to see if NONE was chosen
 | 
			
		||||
$!
 | 
			
		||||
$   IF P3.EQS."NONE"
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    Do not use TCPIP.
 | 
			
		||||
$!
 | 
			
		||||
$     TCPIP_LIB = ""
 | 
			
		||||
$!
 | 
			
		||||
$!    Done with TCPIP
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Add TCP/IP type to CC definitions.
 | 
			
		||||
$!
 | 
			
		||||
$   CCDEFS = CCDEFS + ",TCPIP_TYPE_''P3'"
 | 
			
		||||
$!
 | 
			
		||||
$!  Print info
 | 
			
		||||
$!
 | 
			
		||||
$   WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB
 | 
			
		||||
$!
 | 
			
		||||
$!  Else The User Entered An Invalid Arguement.
 | 
			
		||||
$!
 | 
			
		||||
$ ELSE
 | 
			
		||||
$!
 | 
			
		||||
$!  Tell The User We Don't Know What They Want.
 | 
			
		||||
$!
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$   WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$   WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
 | 
			
		||||
$   WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
 | 
			
		||||
$   WRITE SYS$OUTPUT "    TCPIP      :  To link with TCPIP (post UCX) TCP/IP library."
 | 
			
		||||
$   WRITE SYS$OUTPUT ""
 | 
			
		||||
$!
 | 
			
		||||
$!  Time To EXIT.
 | 
			
		||||
$!
 | 
			
		||||
$   EXIT
 | 
			
		||||
$!
 | 
			
		||||
$!  Done with TCP/IP libraries
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Finish up the definition of CC.
 | 
			
		||||
$!
 | 
			
		||||
$ IF COMPILER .EQS. "DECC"
 | 
			
		||||
$ THEN
 | 
			
		||||
$   IF CCDISABLEWARNINGS .NES. ""
 | 
			
		||||
$   THEN
 | 
			
		||||
$     CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$ ELSE
 | 
			
		||||
$   CCDISABLEWARNINGS = ""
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$ CC2 = CC + "/DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS
 | 
			
		||||
$ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
 | 
			
		||||
$!
 | 
			
		||||
$! Show user the result
 | 
			
		||||
$!
 | 
			
		||||
$ WRITE/SYMBOL SYS$OUTPUT "Main Compiling Command: ",CC
 | 
			
		||||
$!
 | 
			
		||||
$! Special Threads For OpenVMS v7.1 Or Later
 | 
			
		||||
$!
 | 
			
		||||
$! Written By:  Richard Levitte
 | 
			
		||||
$!              richard@levitte.org
 | 
			
		||||
$!
 | 
			
		||||
$!
 | 
			
		||||
$! Check To See If We Have A Option For P4.
 | 
			
		||||
$!
 | 
			
		||||
$ IF (P4.EQS."")
 | 
			
		||||
$ THEN
 | 
			
		||||
$!
 | 
			
		||||
$!  Get The Version Of VMS We Are Using.
 | 
			
		||||
$!
 | 
			
		||||
$   ISSEVEN :=
 | 
			
		||||
$   TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
 | 
			
		||||
$   TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
 | 
			
		||||
$!
 | 
			
		||||
$!  Check To See If The VMS Version Is v7.1 Or Later.
 | 
			
		||||
$!
 | 
			
		||||
$   IF (TMP.GE.71)
 | 
			
		||||
$   THEN
 | 
			
		||||
$!
 | 
			
		||||
$!    We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
 | 
			
		||||
$!
 | 
			
		||||
$     ISSEVEN := ,PTHREAD_USE_D4
 | 
			
		||||
$!
 | 
			
		||||
$!  End The VMS Version Check.
 | 
			
		||||
$!
 | 
			
		||||
$   ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! End The P4 Check.
 | 
			
		||||
$!
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Check if the user wanted to compile just a subset of all the programs.
 | 
			
		||||
$!
 | 
			
		||||
$ IF P5 .NES. ""
 | 
			
		||||
$ THEN
 | 
			
		||||
$   PROGRAMS = P5
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$!  Time To RETURN...
 | 
			
		||||
$!
 | 
			
		||||
$ RETURN
 | 
			
		||||
$!
 | 
			
		||||
$ INITIALISE:
 | 
			
		||||
$!
 | 
			
		||||
$! Save old value of the logical name OPENSSL
 | 
			
		||||
$!
 | 
			
		||||
$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
 | 
			
		||||
$!
 | 
			
		||||
$! Save directory information
 | 
			
		||||
$!
 | 
			
		||||
$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
 | 
			
		||||
$ __HERE = F$EDIT(__HERE,"UPCASE")
 | 
			
		||||
$ __TOP = __HERE - "APPS]"
 | 
			
		||||
$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
 | 
			
		||||
$!
 | 
			
		||||
$! Set up the logical name OPENSSL to point at the include directory
 | 
			
		||||
$!
 | 
			
		||||
$ DEFINE OPENSSL/NOLOG '__INCLUDE'
 | 
			
		||||
$!
 | 
			
		||||
$! Done
 | 
			
		||||
$!
 | 
			
		||||
$ RETURN
 | 
			
		||||
$!
 | 
			
		||||
$ CLEANUP:
 | 
			
		||||
$!
 | 
			
		||||
$! Restore the logical name OPENSSL if it had a value
 | 
			
		||||
$!
 | 
			
		||||
$ IF __SAVE_OPENSSL .EQS. ""
 | 
			
		||||
$ THEN
 | 
			
		||||
$   DEASSIGN OPENSSL
 | 
			
		||||
$ ELSE
 | 
			
		||||
$   DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL'
 | 
			
		||||
$ ENDIF
 | 
			
		||||
$!
 | 
			
		||||
$! Done
 | 
			
		||||
$!
 | 
			
		||||
$ RETURN
 | 
			
		||||
@@ -1,7 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
for i in verify asn1parse req dgst dh enc gendh errstr ca crl rsa dsa dsaparam x509 genrsa s_server s_client speed s_time version pkcs7 crl2pkcs7 sess_id ciphers md2 md5 sha sha1 mdc2 rmd160 base64 des des3 desx idea rc4 rc2 bf cast rc5 des-ecb des-ede des-ede3 des-cbc des-ede-cbc des-ede3-cbc des-cfb des-ede-cfb des-ede3-cfb des-ofb des-ede-ofb des-ede3-ofb idea-cbc idea-ecb idea-cfb idea-ofb rc2-cbc rc2-ecb rc2-cfb rc2-ofb bf-cbc bf-ecb bf-cfb bf-ofb cast5-cbc cast5-ecb cast5-cfb cast5-ofb cast-cbc rc5-cbc rc5-ecb rc5-cfb rc5-ofb 
 | 
			
		||||
do
 | 
			
		||||
echo making symlink for $i
 | 
			
		||||
/bin/rm -f $i
 | 
			
		||||
ln -s ssleay $i
 | 
			
		||||
done
 | 
			
		||||
							
								
								
									
										167
									
								
								apps/nseq.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								apps/nseq.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,167 @@
 | 
			
		||||
/* nseq.c */
 | 
			
		||||
/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
 | 
			
		||||
 * project 1999.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 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
 | 
			
		||||
 * 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 <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG nseq_main
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	int toseq = 0;
 | 
			
		||||
	X509 *x509 = NULL;
 | 
			
		||||
	NETSCAPE_CERT_SEQUENCE *seq = NULL;
 | 
			
		||||
	int i, ret = 1;
 | 
			
		||||
	int badarg = 0;
 | 
			
		||||
	if (bio_err == NULL) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	args = argv + 1;
 | 
			
		||||
	while (!badarg && *args && *args[0] == '-') {
 | 
			
		||||
		if (!strcmp (*args, "-toseq")) toseq = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-in")) {
 | 
			
		||||
			if (args[1]) {
 | 
			
		||||
				args++;
 | 
			
		||||
				infile = *args;
 | 
			
		||||
			} else badarg = 1;
 | 
			
		||||
		} else if (!strcmp (*args, "-out")) {
 | 
			
		||||
			if (args[1]) {
 | 
			
		||||
				args++;
 | 
			
		||||
				outfile = *args;
 | 
			
		||||
			} else badarg = 1;
 | 
			
		||||
		} else badarg = 1;
 | 
			
		||||
		args++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (badarg) {
 | 
			
		||||
		BIO_printf (bio_err, "Netscape certificate sequence utility\n");
 | 
			
		||||
		BIO_printf (bio_err, "Usage nseq [options]\n");
 | 
			
		||||
		BIO_printf (bio_err, "where options are\n");
 | 
			
		||||
		BIO_printf (bio_err, "-in file  input file\n");
 | 
			
		||||
		BIO_printf (bio_err, "-out file output file\n");
 | 
			
		||||
		BIO_printf (bio_err, "-toseq    output NS Sequence file\n");
 | 
			
		||||
		OPENSSL_EXIT(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (infile) {
 | 
			
		||||
		if (!(in = BIO_new_file (infile, "r"))) {
 | 
			
		||||
			BIO_printf (bio_err,
 | 
			
		||||
				 "Can't open input file %s\n", infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	} else in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (outfile) {
 | 
			
		||||
		if (!(out = BIO_new_file (outfile, "w"))) {
 | 
			
		||||
			BIO_printf (bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
	if (toseq) {
 | 
			
		||||
		seq = NETSCAPE_CERT_SEQUENCE_new();
 | 
			
		||||
		seq->certs = sk_X509_new_null();
 | 
			
		||||
		while((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL))) 
 | 
			
		||||
		    sk_X509_push(seq->certs,x509);
 | 
			
		||||
 | 
			
		||||
		if(!sk_X509_num(seq->certs))
 | 
			
		||||
		{
 | 
			
		||||
			BIO_printf (bio_err, "Error reading certs file %s\n", infile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		PEM_write_bio_NETSCAPE_CERT_SEQUENCE(out, seq);
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(seq = PEM_read_bio_NETSCAPE_CERT_SEQUENCE(in, NULL, NULL, NULL))) {
 | 
			
		||||
		BIO_printf (bio_err, "Error reading sequence file %s\n", infile);
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for(i = 0; i < sk_X509_num(seq->certs); i++) {
 | 
			
		||||
		x509 = sk_X509_value(seq->certs, i);
 | 
			
		||||
		dump_cert_text(out, x509);
 | 
			
		||||
		PEM_write_bio_X509(out, x509);
 | 
			
		||||
	}
 | 
			
		||||
	ret = 0;
 | 
			
		||||
end:
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	NETSCAPE_CERT_SEQUENCE_free(seq);
 | 
			
		||||
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1228
									
								
								apps/ocsp.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1228
									
								
								apps/ocsp.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user