Compare commits
	
		
			2208 Commits
		
	
	
		
			OpenSSL-fi
			...
			master-pos
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					35a1cc90bc | ||
| 
						 | 
					50e735f9e5 | ||
| 
						 | 
					739a5eee61 | ||
| 
						 | 
					0f113f3ee4 | ||
| 
						 | 
					22b52164aa | ||
| 
						 | 
					df6741c9a0 | ||
| 
						 | 
					68d39f3ce6 | ||
| 
						 | 
					f9be4da00e | ||
| 
						 | 
					09f4d9c0f9 | ||
| 
						 | 
					f8180c63ec | ||
| 
						 | 
					20728adc8f | ||
| 
						 | 
					4664862013 | ||
| 
						 | 
					66186aeeb0 | ||
| 
						 | 
					1ab6c607b8 | ||
| 
						 | 
					a4ad939fb8 | ||
| 
						 | 
					b1834b5e13 | ||
| 
						 | 
					58d47cf004 | ||
| 
						 | 
					7a2cb6f034 | ||
| 
						 | 
					51428a12e4 | ||
| 
						 | 
					f4c46d0aab | ||
| 
						 | 
					c27310f938 | ||
| 
						 | 
					7cc63545a3 | ||
| 
						 | 
					0546db3ef7 | ||
| 
						 | 
					9d51824b3b | ||
| 
						 | 
					572cee384d | ||
| 
						 | 
					b853717fc4 | ||
| 
						 | 
					1e8f69c6a5 | ||
| 
						 | 
					dbd87ffc21 | ||
| 
						 | 
					0107079e5f | ||
| 
						 | 
					6ea3d1836b | ||
| 
						 | 
					061b67f6f5 | ||
| 
						 | 
					a7b1eed566 | ||
| 
						 | 
					c59576881e | ||
| 
						 | 
					76712e81e0 | ||
| 
						 | 
					24a5f17b6a | ||
| 
						 | 
					90b9c78b30 | ||
| 
						 | 
					985a9af813 | ||
| 
						 | 
					e95bbc3ca6 | ||
| 
						 | 
					aec4b334f0 | ||
| 
						 | 
					6e81b27012 | ||
| 
						 | 
					e751bba4ac | ||
| 
						 | 
					5f0b444899 | ||
| 
						 | 
					2dc57eb5a7 | ||
| 
						 | 
					2f1ac20bb3 | ||
| 
						 | 
					acb82df4d3 | ||
| 
						 | 
					6f08264e2f | ||
| 
						 | 
					ff7ca7a336 | ||
| 
						 | 
					d09481a10f | ||
| 
						 | 
					849c80bc5d | ||
| 
						 | 
					e636e2acd7 | ||
| 
						 | 
					28470b6095 | ||
| 
						 | 
					23a22b4cf7 | ||
| 
						 | 
					c80fd6b215 | ||
| 
						 | 
					4b618848f9 | ||
| 
						 | 
					b3d7294976 | ||
| 
						 | 
					a5a412350d | ||
| 
						 | 
					98b3b116ab | ||
| 
						 | 
					2d2671790e | ||
| 
						 | 
					b1ffc6ca1c | ||
| 
						 | 
					86d21d0b95 | ||
| 
						 | 
					964012dc5a | ||
| 
						 | 
					6d23cf9744 | ||
| 
						 | 
					31d1d3741f | ||
| 
						 | 
					fcf64ba0ac | ||
| 
						 | 
					9405a9a2e1 | ||
| 
						 | 
					732192a079 | ||
| 
						 | 
					1211e29c16 | ||
| 
						 | 
					8e96441960 | ||
| 
						 | 
					264212b643 | ||
| 
						 | 
					41c9cfbc4e | ||
| 
						 | 
					448e6f060e | ||
| 
						 | 
					5c5e7e1a7e | ||
| 
						 | 
					103b171d8f | ||
| 
						 | 
					1421e0c584 | ||
| 
						 | 
					a7a44ba55c | ||
| 
						 | 
					248385c606 | ||
| 
						 | 
					feba02f391 | ||
| 
						 | 
					4a4d415857 | ||
| 
						 | 
					e464403d0b | ||
| 
						 | 
					4138e38825 | ||
| 
						 | 
					ac8e9cbe14 | ||
| 
						 | 
					cb62ab4b17 | ||
| 
						 | 
					77ff1f3b8b | ||
| 
						 | 
					a09474dd2d | ||
| 
						 | 
					41cd41c441 | ||
| 
						 | 
					3a83462dfe | ||
| 
						 | 
					b691154e18 | ||
| 
						 | 
					0548505f4c | ||
| 
						 | 
					219338115b | ||
| 
						 | 
					4fec915069 | ||
| 
						 | 
					fb76ad8d43 | ||
| 
						 | 
					ce325c60c7 | ||
| 
						 | 
					b15f876964 | ||
| 
						 | 
					b5526482ef | ||
| 
						 | 
					c05febfa4f | ||
| 
						 | 
					61aa44ca99 | ||
| 
						 | 
					4c52816d35 | ||
| 
						 | 
					684400ce19 | ||
| 
						 | 
					32b07f5a80 | ||
| 
						 | 
					e783bae26a | ||
| 
						 | 
					cb2bc0543a | ||
| 
						 | 
					c1669e1c20 | ||
| 
						 | 
					9e557ab262 | ||
| 
						 | 
					2c60925d1c | ||
| 
						 | 
					9527559939 | ||
| 
						 | 
					63eab8a620 | ||
| 
						 | 
					4f605ccb77 | ||
| 
						 | 
					2a9338ee31 | ||
| 
						 | 
					b17dcb0d63 | ||
| 
						 | 
					d97ed21986 | ||
| 
						 | 
					97d5809c2b | ||
| 
						 | 
					1d97c84351 | ||
| 
						 | 
					aa8a9266f9 | ||
| 
						 | 
					5075e52e6f | ||
| 
						 | 
					c18440956d | ||
| 
						 | 
					8c00f4cfd2 | ||
| 
						 | 
					32dfde1076 | ||
| 
						 | 
					6c23ca0cbb | ||
| 
						 | 
					5ad4fdce41 | ||
| 
						 | 
					67472bd82b | ||
| 
						 | 
					7cfab40f43 | ||
| 
						 | 
					f231941444 | ||
| 
						 | 
					2521fcd852 | ||
| 
						 | 
					e03b29871b | ||
| 
						 | 
					488f16e31b | ||
| 
						 | 
					c0fc27f88e | ||
| 
						 | 
					bd2bd374b3 | ||
| 
						 | 
					6385043fa1 | ||
| 
						 | 
					53e95716f5 | ||
| 
						 | 
					5bafb04d2e | ||
| 
						 | 
					07c4c14c47 | ||
| 
						 | 
					59ff1ce061 | ||
| 
						 | 
					5a1e8c67a9 | ||
| 
						 | 
					040b60f6fa | ||
| 
						 | 
					b317819b2e | ||
| 
						 | 
					179f6b2f55 | ||
| 
						 | 
					89f40f369f | ||
| 
						 | 
					03af843039 | ||
| 
						 | 
					4ad2d3ac0e | ||
| 
						 | 
					b597aab84e | ||
| 
						 | 
					4aecfd4d9f | ||
| 
						 | 
					57dc72e018 | ||
| 
						 | 
					6dec5e1ca9 | ||
| 
						 | 
					3ddb2914b5 | ||
| 
						 | 
					a501f647aa | ||
| 
						 | 
					72b5d03b5b | ||
| 
						 | 
					a93891632d | ||
| 
						 | 
					a015758d11 | ||
| 
						 | 
					789da2c73d | ||
| 
						 | 
					ec1af3c419 | ||
| 
						 | 
					db812f2d70 | ||
| 
						 | 
					ad500fdc49 | ||
| 
						 | 
					fd86c2b153 | ||
| 
						 | 
					af6e2d51bf | ||
| 
						 | 
					55e530265a | ||
| 
						 | 
					1904d21123 | ||
| 
						 | 
					129c81b951 | ||
| 
						 | 
					995207bedc | ||
| 
						 | 
					56999ba589 | ||
| 
						 | 
					9669d2e1ad | ||
| 
						 | 
					24097938ad | ||
| 
						 | 
					c3f22253b1 | ||
| 
						 | 
					fd0ba77717 | ||
| 
						 | 
					e03af1789f | ||
| 
						 | 
					5ab65c50ef | ||
| 
						 | 
					5cf37957fb | ||
| 
						 | 
					a4a934119d | ||
| 
						 | 
					5b17b79a89 | ||
| 
						 | 
					3a7581bf5a | ||
| 
						 | 
					288b4e4f8f | ||
| 
						 | 
					c27dc3981c | ||
| 
						 | 
					fed5b55252 | ||
| 
						 | 
					e9e688effb | ||
| 
						 | 
					bf8e7047aa | ||
| 
						 | 
					9052ffda91 | ||
| 
						 | 
					d00b1d62d6 | ||
| 
						 | 
					02a62d1a4a | ||
| 
						 | 
					e35af275d5 | ||
| 
						 | 
					1939187922 | ||
| 
						 | 
					348d0d148a | ||
| 
						 | 
					29e7a56d54 | ||
| 
						 | 
					2cbc8d7de5 | ||
| 
						 | 
					aeb556f831 | ||
| 
						 | 
					18125f7f55 | ||
| 
						 | 
					68c29f61a4 | ||
| 
						 | 
					5784a52145 | ||
| 
						 | 
					c0d4390194 | ||
| 
						 | 
					829ccf6ab6 | ||
| 
						 | 
					76b2a02274 | ||
| 
						 | 
					7a5233118c | ||
| 
						 | 
					85bcf27ccc | ||
| 
						 | 
					dd703de022 | ||
| 
						 | 
					e52a3c3d14 | ||
| 
						 | 
					41bf250130 | ||
| 
						 | 
					76e6509085 | ||
| 
						 | 
					7bca0a1db5 | ||
| 
						 | 
					71a5f534f1 | ||
| 
						 | 
					73e45b2dd1 | ||
| 
						 | 
					b2ecc05a9a | ||
| 
						 | 
					916e56208b | ||
| 
						 | 
					ebdf37e4b1 | ||
| 
						 | 
					1c98de6d81 | ||
| 
						 | 
					dbfbe10a1f | ||
| 
						 | 
					1bfffe9bd0 | ||
| 
						 | 
					fce8311cae | ||
| 
						 | 
					8d73db288f | ||
| 
						 | 
					05417a3476 | ||
| 
						 | 
					cc2f1045d1 | ||
| 
						 | 
					4fa579c58d | ||
| 
						 | 
					e4e5bc39f9 | ||
| 
						 | 
					85129ab579 | ||
| 
						 | 
					b3da6f496b | ||
| 
						 | 
					c603c723ce | ||
| 
						 | 
					225fce8a98 | ||
| 
						 | 
					a42366a406 | ||
| 
						 | 
					f072785eb4 | ||
| 
						 | 
					78c990c156 | ||
| 
						 | 
					00b4ee7664 | ||
| 
						 | 
					0c1bd7f03f | ||
| 
						 | 
					3feb63054a | ||
| 
						 | 
					e4bbee9633 | ||
| 
						 | 
					d827c5edb5 | ||
| 
						 | 
					e6b336efa3 | ||
| 
						 | 
					c857a80c9d | ||
| 
						 | 
					376e2ca3e3 | ||
| 
						 | 
					740580c2b2 | ||
| 
						 | 
					33d5ba8629 | ||
| 
						 | 
					f50ffd10fa | ||
| 
						 | 
					33eab3f6af | ||
| 
						 | 
					f6fa7c5347 | ||
| 
						 | 
					f5905ba341 | ||
| 
						 | 
					b3b966fb87 | ||
| 
						 | 
					6c42b39c95 | ||
| 
						 | 
					241e2dc936 | ||
| 
						 | 
					d15f5df70d | ||
| 
						 | 
					b1a08ac71f | ||
| 
						 | 
					8607322765 | ||
| 
						 | 
					e2140501fd | ||
| 
						 | 
					0716f9e405 | ||
| 
						 | 
					787e992965 | ||
| 
						 | 
					12478cc449 | ||
| 
						 | 
					71c16698fa | ||
| 
						 | 
					45f55f6a5b | ||
| 
						 | 
					616f71e486 | ||
| 
						 | 
					4bb8eb9ce4 | ||
| 
						 | 
					047f21593e | ||
| 
						 | 
					464ce92026 | ||
| 
						 | 
					d3d9eef316 | ||
| 
						 | 
					1620a2e49c | ||
| 
						 | 
					59669b6abf | ||
| 
						 | 
					0d3ae34df5 | ||
| 
						 | 
					6abb0d1f8e | ||
| 
						 | 
					001235778a | ||
| 
						 | 
					cf75017bfd | ||
| 
						 | 
					961d2ddb4b | ||
| 
						 | 
					8cfe08b4ec | ||
| 
						 | 
					91316e6765 | ||
| 
						 | 
					7a04b854d6 | ||
| 
						 | 
					8123d158ab | ||
| 
						 | 
					03b637a730 | ||
| 
						 | 
					f9ea4deba0 | ||
| 
						 | 
					eceef8fb86 | ||
| 
						 | 
					81ec01b217 | ||
| 
						 | 
					4b87706d20 | ||
| 
						 | 
					fe78f08d15 | ||
| 
						 | 
					fc3968a25c | ||
| 
						 | 
					5e31a40f47 | ||
| 
						 | 
					de87dd46c1 | ||
| 
						 | 
					333fad9f2d | ||
| 
						 | 
					6484958645 | ||
| 
						 | 
					f281b8df70 | ||
| 
						 | 
					34890ac18e | ||
| 
						 | 
					f67203836c | ||
| 
						 | 
					8a35dbb6d8 | ||
| 
						 | 
					3a0765882c | ||
| 
						 | 
					7d4cdededc | ||
| 
						 | 
					7255ca99df | ||
| 
						 | 
					c56a50b229 | ||
| 
						 | 
					14d3b76be8 | ||
| 
						 | 
					9e189b9dc1 | ||
| 
						 | 
					8d02bebddf | ||
| 
						 | 
					31832e8ff1 | ||
| 
						 | 
					e94a6c0ede | ||
| 
						 | 
					de2c7504eb | ||
| 
						 | 
					980bc1ec61 | ||
| 
						 | 
					7b3ba508af | ||
| 
						 | 
					a06cd5d056 | ||
| 
						 | 
					13d568661c | ||
| 
						 | 
					764b6a3551 | ||
| 
						 | 
					3881d8106d | ||
| 
						 | 
					5a3d8eebb7 | ||
| 
						 | 
					e469af8d05 | ||
| 
						 | 
					bcb245a74a | ||
| 
						 | 
					1a14b47ed9 | ||
| 
						 | 
					d253c9cd30 | ||
| 
						 | 
					cffeacd91e | ||
| 
						 | 
					012aa9ec76 | ||
| 
						 | 
					32bb5c3953 | ||
| 
						 | 
					13d30e27c2 | ||
| 
						 | 
					dbaf608320 | ||
| 
						 | 
					8308411297 | ||
| 
						 | 
					a4b8457db9 | ||
| 
						 | 
					5444b11bef | ||
| 
						 | 
					bc095c3d3c | ||
| 
						 | 
					f756f1fc83 | ||
| 
						 | 
					de94222dba | ||
| 
						 | 
					55f7fb8848 | ||
| 
						 | 
					5211e094de | ||
| 
						 | 
					ae64fb528e | ||
| 
						 | 
					e04d426bf9 | ||
| 
						 | 
					67b8bcee95 | ||
| 
						 | 
					f8ae603238 | ||
| 
						 | 
					bfc973f46c | ||
| 
						 | 
					6696203963 | ||
| 
						 | 
					ecb9966e7c | ||
| 
						 | 
					c381b63764 | ||
| 
						 | 
					d45282fc7c | ||
| 
						 | 
					d2fa182988 | ||
| 
						 | 
					d663df2399 | ||
| 
						 | 
					49b0dfc502 | ||
| 
						 | 
					18a2d293f1 | ||
| 
						 | 
					fd28a41ec8 | ||
| 
						 | 
					14e14bf696 | ||
| 
						 | 
					c800c27a8c | ||
| 
						 | 
					3ff08e1dde | ||
| 
						 | 
					b06f7d9ac0 | ||
| 
						 | 
					9f4bd9d5f9 | ||
| 
						 | 
					98f1ac7df5 | ||
| 
						 | 
					8cb30232ed | ||
| 
						 | 
					392fa7a952 | ||
| 
						 | 
					c882abd522 | ||
| 
						 | 
					87d388c955 | ||
| 
						 | 
					c6e9b39ce8 | ||
| 
						 | 
					7f09a8773b | ||
| 
						 | 
					ed13270d2e | ||
| 
						 | 
					53afbe12ba | ||
| 
						 | 
					62f45cc27d | ||
| 
						 | 
					7482705548 | ||
| 
						 | 
					3dd814ac4d | ||
| 
						 | 
					e659eff2c0 | ||
| 
						 | 
					0b382a8e8d | ||
| 
						 | 
					69d5747f90 | ||
| 
						 | 
					fb0e87fb67 | ||
| 
						 | 
					cf6da05304 | ||
| 
						 | 
					ffa08b3242 | ||
| 
						 | 
					f3014206a2 | ||
| 
						 | 
					e0fdea3e49 | ||
| 
						 | 
					71614df485 | ||
| 
						 | 
					5aed169305 | ||
| 
						 | 
					429a25b97d | ||
| 
						 | 
					ae4af7a067 | ||
| 
						 | 
					df8c39d522 | ||
| 
						 | 
					d5f34443ad | ||
| 
						 | 
					9208640a36 | ||
| 
						 | 
					4b6dee2b14 | ||
| 
						 | 
					55c7a4cf11 | ||
| 
						 | 
					323154be33 | ||
| 
						 | 
					7c4776251e | ||
| 
						 | 
					1cfd255c91 | ||
| 
						 | 
					3d81ec5b92 | ||
| 
						 | 
					008bef521c | ||
| 
						 | 
					fdc35a9d3e | ||
| 
						 | 
					5886354dcc | ||
| 
						 | 
					8b07c005fe | ||
| 
						 | 
					40155f4089 | ||
| 
						 | 
					92c7846372 | ||
| 
						 | 
					4aac102f75 | ||
| 
						 | 
					455b65dfab | ||
| 
						 | 
					294d1e36c2 | ||
| 
						 | 
					51b7be8d5f | ||
| 
						 | 
					5f85f64f7e | ||
| 
						 | 
					507efe7372 | ||
| 
						 | 
					4513b1b641 | ||
| 
						 | 
					be07ae9b10 | ||
| 
						 | 
					b5ff559ff9 | ||
| 
						 | 
					d475b2a3bf | ||
| 
						 | 
					16e5b45f72 | ||
| 
						 | 
					e8185aea87 | ||
| 
						 | 
					99b00fd993 | ||
| 
						 | 
					569e2d1257 | ||
| 
						 | 
					847147908b | ||
| 
						 | 
					4d3fa06fce | ||
| 
						 | 
					f54be179aa | ||
| 
						 | 
					902b30df19 | ||
| 
						 | 
					6f46c3c3b0 | ||
| 
						 | 
					cb4bb56bae | ||
| 
						 | 
					b2aa38a980 | ||
| 
						 | 
					468ab1c20d | ||
| 
						 | 
					eb63bce040 | ||
| 
						 | 
					c939cca1a3 | ||
| 
						 | 
					843921f298 | ||
| 
						 | 
					b999f66e34 | ||
| 
						 | 
					1f18f50c4b | ||
| 
						 | 
					4eadd11cd9 | ||
| 
						 | 
					4cd1119df3 | ||
| 
						 | 
					44e0c2bae4 | ||
| 
						 | 
					5f855569c4 | ||
| 
						 | 
					a787c2590e | ||
| 
						 | 
					6452a139fe | ||
| 
						 | 
					e9edfc4196 | ||
| 
						 | 
					af4c6e348e | ||
| 
						 | 
					98ecf60ba6 | ||
| 
						 | 
					fe7573042f | ||
| 
						 | 
					2afb29b480 | ||
| 
						 | 
					be0bd11d69 | ||
| 
						 | 
					83e4e03eeb | ||
| 
						 | 
					3173622ef6 | ||
| 
						 | 
					683cd7c948 | ||
| 
						 | 
					6b0dc6eff1 | ||
| 
						 | 
					76e8671c5a | ||
| 
						 | 
					4f13dabe72 | ||
| 
						 | 
					b0e659cfac | ||
| 
						 | 
					8842987e5a | ||
| 
						 | 
					5a8addc432 | ||
| 
						 | 
					2f32016bb9 | ||
| 
						 | 
					95b1752cc7 | ||
| 
						 | 
					b2774f6e17 | ||
| 
						 | 
					b0bbe49360 | ||
| 
						 | 
					be0d851732 | ||
| 
						 | 
					360928b7d0 | ||
| 
						 | 
					6a14fe7576 | ||
| 
						 | 
					0ff3687eab | ||
| 
						 | 
					86f50b36e6 | ||
| 
						 | 
					b0426a0f8c | ||
| 
						 | 
					3aba132d61 | ||
| 
						 | 
					9fc8dc5469 | ||
| 
						 | 
					80ec8d4e3e | ||
| 
						 | 
					6019cdd327 | ||
| 
						 | 
					4d86e8df6b | ||
| 
						 | 
					b59f92e75d | ||
| 
						 | 
					0f957287df | ||
| 
						 | 
					457f7b14ec | ||
| 
						 | 
					d1bea969e8 | ||
| 
						 | 
					8b77d64e99 | ||
| 
						 | 
					cf2239b3b3 | ||
| 
						 | 
					e2d03db4b3 | ||
| 
						 | 
					07e3b31fae | ||
| 
						 | 
					13be7da81f | ||
| 
						 | 
					82d9185ae5 | ||
| 
						 | 
					b09eb246e2 | ||
| 
						 | 
					c7497f34fb | ||
| 
						 | 
					ac53354b94 | ||
| 
						 | 
					8d4193305b | ||
| 
						 | 
					f47e203975 | ||
| 
						 | 
					f3f56c2a87 | ||
| 
						 | 
					0cfefe4b6d | ||
| 
						 | 
					8cafe9e8bf | ||
| 
						 | 
					c846a5f567 | ||
| 
						 | 
					33f653adf3 | ||
| 
						 | 
					de2a9e38f3 | ||
| 
						 | 
					707b026d78 | ||
| 
						 | 
					28ea0a0c6a | ||
| 
						 | 
					ecf4d66090 | ||
| 
						 | 
					879bde123b | ||
| 
						 | 
					5a3d21c058 | ||
| 
						 | 
					f9fb43e176 | ||
| 
						 | 
					506a3d1f9c | ||
| 
						 | 
					17e80c6bd0 | ||
| 
						 | 
					f34a57202b | ||
| 
						 | 
					f063e30fe9 | ||
| 
						 | 
					0388ac4c99 | ||
| 
						 | 
					7b3e11c544 | ||
| 
						 | 
					34ccd24d0e | ||
| 
						 | 
					ed49eb4a48 | ||
| 
						 | 
					fa60b90950 | ||
| 
						 | 
					a4d266b824 | ||
| 
						 | 
					fd4592be3a | ||
| 
						 | 
					2dd8cb3b95 | ||
| 
						 | 
					be0477a8e9 | ||
| 
						 | 
					bc46db60f1 | ||
| 
						 | 
					d64c533a20 | ||
| 
						 | 
					a520ae3628 | ||
| 
						 | 
					f511b25a73 | ||
| 
						 | 
					da92be4d68 | ||
| 
						 | 
					15735e4f0e | ||
| 
						 | 
					e608273a80 | ||
| 
						 | 
					09ec8c8e89 | ||
| 
						 | 
					2893a302a9 | ||
| 
						 | 
					55eb14da20 | ||
| 
						 | 
					89fb142b49 | ||
| 
						 | 
					96208cb182 | ||
| 
						 | 
					1afd7fa97c | ||
| 
						 | 
					0df043f608 | ||
| 
						 | 
					76b10e13c2 | ||
| 
						 | 
					bcd3e36c46 | ||
| 
						 | 
					3609b02305 | ||
| 
						 | 
					8b6e517e33 | ||
| 
						 | 
					ddc29125a1 | ||
| 
						 | 
					fc979b93ee | ||
| 
						 | 
					448155e9bb | ||
| 
						 | 
					f756fb430e | ||
| 
						 | 
					defe438d47 | ||
| 
						 | 
					94c0a987c7 | ||
| 
						 | 
					9f01a8acb3 | ||
| 
						 | 
					259ac68aeb | ||
| 
						 | 
					54298141d3 | ||
| 
						 | 
					f6983d0d76 | ||
| 
						 | 
					254f1c8019 | ||
| 
						 | 
					fb7fbf28b3 | ||
| 
						 | 
					ba494ee593 | ||
| 
						 | 
					462319c3e9 | ||
| 
						 | 
					34374c2d2c | ||
| 
						 | 
					6f77f82bfc | ||
| 
						 | 
					771e0c6c7a | ||
| 
						 | 
					d8513b4abd | ||
| 
						 | 
					c84029dbdc | ||
| 
						 | 
					750487899a | ||
| 
						 | 
					f2be92b94d | ||
| 
						 | 
					c9a81b3026 | ||
| 
						 | 
					d6f69ae547 | ||
| 
						 | 
					349e6b2b0a | ||
| 
						 | 
					36f7ed5040 | ||
| 
						 | 
					4e64f671c9 | ||
| 
						 | 
					1c4b688cb4 | ||
| 
						 | 
					bd4acbc70e | ||
| 
						 | 
					8957278869 | ||
| 
						 | 
					15297d962c | ||
| 
						 | 
					c9c63b0180 | ||
| 
						 | 
					b9b9f853b5 | ||
| 
						 | 
					865886553d | ||
| 
						 | 
					c753e71e0a | ||
| 
						 | 
					cf8bac4456 | ||
| 
						 | 
					01e438f288 | ||
| 
						 | 
					5effa35610 | ||
| 
						 | 
					14e961921a | ||
| 
						 | 
					b83294fe30 | ||
| 
						 | 
					06f5d12f51 | ||
| 
						 | 
					f0ca9ccaef | ||
| 
						 | 
					16602b5cd5 | ||
| 
						 | 
					690a2b1fa2 | ||
| 
						 | 
					bebbb11d13 | ||
| 
						 | 
					1c5be3d7f0 | ||
| 
						 | 
					cde8ad1a28 | ||
| 
						 | 
					16caa9a43d | ||
| 
						 | 
					9aaa7be8d4 | ||
| 
						 | 
					2a1393a4a8 | ||
| 
						 | 
					42ce91cc35 | ||
| 
						 | 
					b00f586a81 | ||
| 
						 | 
					691edc997a | ||
| 
						 | 
					d9fcd8ec4c | ||
| 
						 | 
					cbfc8baddb | ||
| 
						 | 
					d4a4370050 | ||
| 
						 | 
					590bdcc686 | ||
| 
						 | 
					77bf69dced | ||
| 
						 | 
					9e72d496d4 | ||
| 
						 | 
					562fd0d883 | ||
| 
						 | 
					f642ebc1e2 | ||
| 
						 | 
					693b71fa71 | ||
| 
						 | 
					6d03125ccf | ||
| 
						 | 
					a90081576c | ||
| 
						 | 
					0989790b87 | ||
| 
						 | 
					4a23b12a03 | ||
| 
						 | 
					80bd7b41b3 | ||
| 
						 | 
					fb0bc2b273 | ||
| 
						 | 
					0042fb5fd1 | ||
| 
						 | 
					1716003376 | ||
| 
						 | 
					280b1f1ad1 | ||
| 
						 | 
					4f2011d981 | ||
| 
						 | 
					f6663338cb | ||
| 
						 | 
					b74d1d260f | ||
| 
						 | 
					d0a4b7d1a2 | ||
| 
						 | 
					1250f12613 | ||
| 
						 | 
					11e7982a7c | ||
| 
						 | 
					bff1ce4e6a | ||
| 
						 | 
					a46149c672 | ||
| 
						 | 
					bac6740746 | ||
| 
						 | 
					38c654819c | ||
| 
						 | 
					0fe73d6c36 | ||
| 
						 | 
					e0fc7961c4 | ||
| 
						 | 
					8e55e6de45 | ||
| 
						 | 
					ceea4bf047 | ||
| 
						 | 
					7a2b54509c | ||
| 
						 | 
					cba11f57ce | ||
| 
						 | 
					62352b8138 | ||
| 
						 | 
					5c3598307e | ||
| 
						 | 
					c8d133e4b6 | ||
| 
						 | 
					841072ef65 | ||
| 
						 | 
					0e716d9207 | ||
| 
						 | 
					f5b798f50c | ||
| 
						 | 
					03c075e572 | ||
| 
						 | 
					f8c03d4dbf | ||
| 
						 | 
					b2e50bcd0e | ||
| 
						 | 
					50bba6852d | ||
| 
						 | 
					6017a55143 | ||
| 
						 | 
					5e3de8e609 | ||
| 
						 | 
					d31fed73e2 | ||
| 
						 | 
					58f4698f67 | ||
| 
						 | 
					d12eef1501 | ||
| 
						 | 
					d48e78f0cf | ||
| 
						 | 
					2097a17c57 | ||
| 
						 | 
					e91718e80d | ||
| 
						 | 
					6cd13f70bb | ||
| 
						 | 
					14aaf883d9 | ||
| 
						 | 
					927f2e5dea | ||
| 
						 | 
					3bd548192a | ||
| 
						 | 
					ca2015a617 | ||
| 
						 | 
					c8d710dc5f | ||
| 
						 | 
					199772e534 | ||
| 
						 | 
					6c0a1e2f8c | ||
| 
						 | 
					1c3e9a7c67 | ||
| 
						 | 
					7efd0e777e | ||
| 
						 | 
					ec5a992cde | ||
| 
						 | 
					aa224e9719 | ||
| 
						 | 
					9d6253cfd3 | ||
| 
						 | 
					f8571ce822 | ||
| 
						 | 
					924e5eda2c | ||
| 
						 | 
					8b5dd34091 | ||
| 
						 | 
					c1d1b0114e | ||
| 
						 | 
					66816c53be | ||
| 
						 | 
					1b0fe79f3e | ||
| 
						 | 
					d11c70b2c2 | ||
| 
						 | 
					021e5043e5 | ||
| 
						 | 
					c4f8efab34 | ||
| 
						 | 
					07b635cceb | ||
| 
						 | 
					9d23f422a3 | ||
| 
						 | 
					b73ac02735 | ||
| 
						 | 
					297c67fcd8 | ||
| 
						 | 
					ee724df75d | ||
| 
						 | 
					cba3f1c739 | ||
| 
						 | 
					a44f219c00 | ||
| 
						 | 
					5ecf1141a5 | ||
| 
						 | 
					75b7606881 | ||
| 
						 | 
					fd9e244370 | ||
| 
						 | 
					7eb9680ae1 | ||
| 
						 | 
					0e7a32b55e | ||
| 
						 | 
					375a64e349 | ||
| 
						 | 
					fdea4fff8f | ||
| 
						 | 
					ced3d9158a | ||
| 
						 | 
					6e661d458f | ||
| 
						 | 
					d2ab55eb5b | ||
| 
						 | 
					6835f572a9 | ||
| 
						 | 
					7f6e957864 | ||
| 
						 | 
					55707a36cc | ||
| 
						 | 
					a9661e45ac | ||
| 
						 | 
					b948ee27b0 | ||
| 
						 | 
					a23a6e85d8 | ||
| 
						 | 
					f1112985e8 | ||
| 
						 | 
					538860a3ce | ||
| 
						 | 
					a5a3178728 | ||
| 
						 | 
					b5071dc2f6 | ||
| 
						 | 
					fc1d88f02f | ||
| 
						 | 
					aab3560b65 | ||
| 
						 | 
					eca441b2b4 | ||
| 
						 | 
					5cc99c6cf5 | ||
| 
						 | 
					7cb472bd0d | ||
| 
						 | 
					398e99fe5e | ||
| 
						 | 
					a5ff18bf90 | ||
| 
						 | 
					22a10c89d7 | ||
| 
						 | 
					e67ddd19af | ||
| 
						 | 
					c7ada16d39 | ||
| 
						 | 
					cd1922cde0 | ||
| 
						 | 
					eaa4820471 | ||
| 
						 | 
					04f545a0d5 | ||
| 
						 | 
					df8ef5f31a | ||
| 
						 | 
					762a44de59 | ||
| 
						 | 
					854dfcd859 | ||
| 
						 | 
					7b1d946051 | ||
| 
						 | 
					42b91f28a6 | ||
| 
						 | 
					d7003c4d7d | ||
| 
						 | 
					29be3f6411 | ||
| 
						 | 
					70857a4a00 | ||
| 
						 | 
					2580ab4ed7 | ||
| 
						 | 
					9cd86abb51 | ||
| 
						 | 
					387b844ffd | ||
| 
						 | 
					0d263d2acf | ||
| 
						 | 
					e3ba6a5f83 | ||
| 
						 | 
					c2fd5d79ff | ||
| 
						 | 
					90c1946e7a | ||
| 
						 | 
					6e6ba36d98 | ||
| 
						 | 
					161e0a617d | ||
| 
						 | 
					370bf1d708 | ||
| 
						 | 
					7e6a01bdd4 | ||
| 
						 | 
					8892ce7714 | ||
| 
						 | 
					340daf6a06 | ||
| 
						 | 
					327f3c040e | ||
| 
						 | 
					44724beead | ||
| 
						 | 
					76ed5a42ea | ||
| 
						 | 
					a30bdb55d1 | ||
| 
						 | 
					7ae6a4b659 | ||
| 
						 | 
					528b1f9a9f | ||
| 
						 | 
					0e7bda79a1 | ||
| 
						 | 
					a356e488ad | ||
| 
						 | 
					7c206db928 | ||
| 
						 | 
					0518a3e19e | ||
| 
						 | 
					d183545d45 | ||
| 
						 | 
					d1d4382dcb | ||
| 
						 | 
					0b33bed969 | ||
| 
						 | 
					59deb33cbe | ||
| 
						 | 
					406d4af050 | ||
| 
						 | 
					a0490e02c7 | ||
| 
						 | 
					11da66f8b1 | ||
| 
						 | 
					e633248921 | ||
| 
						 | 
					b36f35cda9 | ||
| 
						 | 
					0436369fcc | ||
| 
						 | 
					0535c2d67c | ||
| 
						 | 
					abac8e0e08 | ||
| 
						 | 
					95791bf941 | ||
| 
						 | 
					d2aea03829 | ||
| 
						 | 
					3b3b69ab25 | ||
| 
						 | 
					7be6b27aaf | ||
| 
						 | 
					f3f620e1e0 | ||
| 
						 | 
					052ecf91d2 | ||
| 
						 | 
					7b8c8c4d79 | ||
| 
						 | 
					7eb0488280 | ||
| 
						 | 
					ac171925ab | ||
| 
						 | 
					015364baf3 | ||
| 
						 | 
					0f777aeb50 | ||
| 
						 | 
					eef1827f89 | ||
| 
						 | 
					90b70a6a6b | ||
| 
						 | 
					8abffa4a73 | ||
| 
						 | 
					66d884f067 | ||
| 
						 | 
					29edebe95c | ||
| 
						 | 
					a48fb0400c | ||
| 
						 | 
					b3012c698a | ||
| 
						 | 
					d241b80409 | ||
| 
						 | 
					2841d6ca9f | ||
| 
						 | 
					cf1b08cdd7 | ||
| 
						 | 
					339da43d6c | ||
| 
						 | 
					115e480924 | ||
| 
						 | 
					e42d84be33 | ||
| 
						 | 
					2866441a90 | ||
| 
						 | 
					cd028c8e66 | ||
| 
						 | 
					ce21d108bd | ||
| 
						 | 
					6d3d579367 | ||
| 
						 | 
					2d7153e8f9 | ||
| 
						 | 
					8a531c22b0 | ||
| 
						 | 
					96fc4b7250 | ||
| 
						 | 
					8a6c6bbf21 | ||
| 
						 | 
					50cc4f7b3d | ||
| 
						 | 
					1f61d8b5b1 | ||
| 
						 | 
					9024b84b7c | ||
| 
						 | 
					764fe518da | ||
| 
						 | 
					7241a4c7fd | ||
| 
						 | 
					3b77f01702 | ||
| 
						 | 
					ce00c64df9 | ||
| 
						 | 
					91a6bf80f8 | ||
| 
						 | 
					c9cf29cca2 | ||
| 
						 | 
					687721a7dc | ||
| 
						 | 
					043fd64689 | ||
| 
						 | 
					a09e4d24ad | ||
| 
						 | 
					abfb989fe0 | ||
| 
						 | 
					977f32e852 | ||
| 
						 | 
					d84ba7ea23 | ||
| 
						 | 
					a50f71868e | ||
| 
						 | 
					77a27a5066 | ||
| 
						 | 
					9494e99b40 | ||
| 
						 | 
					1cf8f57b43 | ||
| 
						 | 
					619b94667c | ||
| 
						 | 
					fd2309aa29 | ||
| 
						 | 
					2f1dffa88e | ||
| 
						 | 
					e2eabed110 | ||
| 
						 | 
					343e5cf194 | ||
| 
						 | 
					3ead9f3798 | ||
| 
						 | 
					7a9d59c148 | ||
| 
						 | 
					447280ca7b | ||
| 
						 | 
					1bea384fd5 | ||
| 
						 | 
					95fe635d90 | ||
| 
						 | 
					7be1d8764d | ||
| 
						 | 
					fb8d9ddb9d | ||
| 
						 | 
					c43a55407d | ||
| 
						 | 
					fa6bb85ae0 | ||
| 
						 | 
					5dcf70a1c5 | ||
| 
						 | 
					cd91fd7c32 | ||
| 
						 | 
					82741e9c89 | ||
| 
						 | 
					2d5a799d27 | ||
| 
						 | 
					7178c711dd | ||
| 
						 | 
					65cad34b10 | ||
| 
						 | 
					5111672b8e | ||
| 
						 | 
					410e444b71 | ||
| 
						 | 
					a91be10833 | ||
| 
						 | 
					a7c682fb6f | ||
| 
						 | 
					b4322e1de8 | ||
| 
						 | 
					a5362db460 | ||
| 
						 | 
					d86689e1d9 | ||
| 
						 | 
					53a224bb0a | ||
| 
						 | 
					8e3231642b | ||
| 
						 | 
					c7f267397e | ||
| 
						 | 
					470990fee0 | ||
| 
						 | 
					030a3f9527 | ||
| 
						 | 
					14f47acf23 | ||
| 
						 | 
					13b7896022 | ||
| 
						 | 
					de51e830a6 | ||
| 
						 | 
					a5510df337 | ||
| 
						 | 
					d1e1aeef8f | ||
| 
						 | 
					723463282f | ||
| 
						 | 
					797d24bee9 | ||
| 
						 | 
					ddacb8f27b | ||
| 
						 | 
					a09220d823 | ||
| 
						 | 
					01f2f18f3c | ||
| 
						 | 
					f8aab6174c | ||
| 
						 | 
					ddb6b965da | ||
| 
						 | 
					e8d93e342b | ||
| 
						 | 
					992bba11d5 | ||
| 
						 | 
					5fc3a5fe49 | ||
| 
						 | 
					c93233dbfd | ||
| 
						 | 
					46838817c7 | ||
| 
						 | 
					0382950c6c | ||
| 
						 | 
					5efa13ca7e | ||
| 
						 | 
					8927c2786d | ||
| 
						 | 
					9a3a99748b | ||
| 
						 | 
					a77889f560 | ||
| 
						 | 
					c74e148776 | ||
| 
						 | 
					982c42cb20 | ||
| 
						 | 
					7e965dcc38 | ||
| 
						 | 
					8a12085293 | ||
| 
						 | 
					c09ec5d2a0 | ||
| 
						 | 
					b0513819e0 | ||
| 
						 | 
					b359642ffd | ||
| 
						 | 
					8c9336ce2b | ||
| 
						 | 
					b5419b81ac | ||
| 
						 | 
					e46a059ebf | ||
| 
						 | 
					e55fca760b | ||
| 
						 | 
					fce0ba5fcd | ||
| 
						 | 
					d7f200779c | ||
| 
						 | 
					3009244da4 | ||
| 
						 | 
					92d81ba622 | ||
| 
						 | 
					7e2c6f7eb0 | ||
| 
						 | 
					4fdf91742e | ||
| 
						 | 
					7ce79a5bfd | ||
| 
						 | 
					9ed03faac4 | ||
| 
						 | 
					08bef7be1e | ||
| 
						 | 
					e09ea622bb | ||
| 
						 | 
					46d889f33e | ||
| 
						 | 
					4da0ddc47e | ||
| 
						 | 
					1c4575ebc3 | ||
| 
						 | 
					7cbdb975c2 | ||
| 
						 | 
					028bac0670 | ||
| 
						 | 
					3d9243f1b6 | ||
| 
						 | 
					6b5c1d940b | ||
| 
						 | 
					487dac87e3 | ||
| 
						 | 
					15658d0cbf | ||
| 
						 | 
					ba4477d649 | ||
| 
						 | 
					56431240ae | ||
| 
						 | 
					4d4a535dcf | ||
| 
						 | 
					0930251df8 | ||
| 
						 | 
					6c21b860ba | ||
| 
						 | 
					955376fde3 | ||
| 
						 | 
					894172f207 | ||
| 
						 | 
					c5f0b9bd86 | ||
| 
						 | 
					189ae368d9 | ||
| 
						 | 
					dd36fce023 | ||
| 
						 | 
					fda29b6db0 | ||
| 
						 | 
					b83d09f552 | ||
| 
						 | 
					27da939490 | ||
| 
						 | 
					647c70f765 | ||
| 
						 | 
					eb33348879 | ||
| 
						 | 
					085ccc542a | ||
| 
						 | 
					df24f29ae6 | ||
| 
						 | 
					12f1b3e79f | ||
| 
						 | 
					dea4a18404 | ||
| 
						 | 
					397a8e747d | ||
| 
						 | 
					558c94efc0 | ||
| 
						 | 
					6f719f063c | ||
| 
						 | 
					3e68273326 | ||
| 
						 | 
					a0a17fcb75 | ||
| 
						 | 
					d8ac1ea77e | ||
| 
						 | 
					dcca7b13e9 | ||
| 
						 | 
					6db14dbc51 | ||
| 
						 | 
					deffd89af3 | ||
| 
						 | 
					ff626ba5f4 | ||
| 
						 | 
					814972e1ab | ||
| 
						 | 
					2ec52dc3a1 | ||
| 
						 | 
					39dd6f4549 | ||
| 
						 | 
					f5ad068b01 | ||
| 
						 | 
					f41231d62a | ||
| 
						 | 
					6af080acaf | ||
| 
						 | 
					5727e4dab8 | ||
| 
						 | 
					d4b47504de | ||
| 
						 | 
					c358651218 | ||
| 
						 | 
					2af071c0bc | ||
| 
						 | 
					18c4f522f4 | ||
| 
						 | 
					ab6577a46e | ||
| 
						 | 
					e6479c76ca | ||
| 
						 | 
					4ee356686f | ||
| 
						 | 
					a4a442cccf | ||
| 
						 | 
					4a56d9a2ed | ||
| 
						 | 
					89e674744d | ||
| 
						 | 
					f75faa16af | ||
| 
						 | 
					7b06ac7593 | ||
| 
						 | 
					3b3ecce141 | ||
| 
						 | 
					00f3a236e0 | ||
| 
						 | 
					308505b838 | ||
| 
						 | 
					b00676bb6f | ||
| 
						 | 
					971a7c5ff7 | ||
| 
						 | 
					c388d8b40c | ||
| 
						 | 
					c4afc40a9b | ||
| 
						 | 
					0bcb17a777 | ||
| 
						 | 
					a935132099 | ||
| 
						 | 
					b6e69d284b | ||
| 
						 | 
					8e94fadd0b | ||
| 
						 | 
					630f9fc69d | ||
| 
						 | 
					2d2e0479eb | ||
| 
						 | 
					fce3821111 | ||
| 
						 | 
					12e9f627f9 | ||
| 
						 | 
					3ba1e406c2 | ||
| 
						 | 
					546b1b4384 | ||
| 
						 | 
					8bbfd94e36 | ||
| 
						 | 
					e1ce131d4d | ||
| 
						 | 
					b943b7d2c7 | ||
| 
						 | 
					496f2b148b | ||
| 
						 | 
					bd227733b9 | ||
| 
						 | 
					9250a30692 | ||
| 
						 | 
					4afa9f033d | ||
| 
						 | 
					16ba70746b | ||
| 
						 | 
					da12bfca51 | ||
| 
						 | 
					e5676b8328 | ||
| 
						 | 
					a141effa7b | ||
| 
						 | 
					a529261891 | ||
| 
						 | 
					9cabf6bb80 | ||
| 
						 | 
					ba1cb9a553 | ||
| 
						 | 
					b5450d6349 | ||
| 
						 | 
					6bcc4475fc | ||
| 
						 | 
					fa9d77dcd2 | ||
| 
						 | 
					8acb953880 | ||
| 
						 | 
					e14f14d36e | ||
| 
						 | 
					79c6c4e828 | ||
| 
						 | 
					76c3ff6937 | ||
| 
						 | 
					647f360e2e | ||
| 
						 | 
					cdcd5dc865 | ||
| 
						 | 
					c9011ec460 | ||
| 
						 | 
					d2cc3d8a4e | ||
| 
						 | 
					f8cee9d081 | ||
| 
						 | 
					558ff0f0c1 | ||
| 
						 | 
					94d1f4b0f3 | ||
| 
						 | 
					4ba5e63bfd | ||
| 
						 | 
					9330a85e04 | ||
| 
						 | 
					0dd5b94aeb | ||
| 
						 | 
					300b9f0b70 | ||
| 
						 | 
					5f8e9a477a | ||
| 
						 | 
					3143a332e8 | ||
| 
						 | 
					5219d3dd35 | ||
| 
						 | 
					476830fd5b | ||
| 
						 | 
					86f6e8669c | ||
| 
						 | 
					f74fa33bce | ||
| 
						 | 
					731f431497 | ||
| 
						 | 
					4e6c12f308 | ||
| 
						 | 
					997d1aac7c | ||
| 
						 | 
					6eebcf3459 | ||
| 
						 | 
					cd6bd5ffda | ||
| 
						 | 
					f8dd55bb5b | ||
| 
						 | 
					b7e46a9bce | ||
| 
						 | 
					6cc0068430 | ||
| 
						 | 
					7ba08a4d73 | ||
| 
						 | 
					dbb7654dc1 | ||
| 
						 | 
					de2d97cd79 | ||
| 
						 | 
					10378fb5f4 | ||
| 
						 | 
					b48310627d | ||
| 
						 | 
					5a49001bde | ||
| 
						 | 
					0f817d3b27 | ||
| 
						 | 
					21e0c1d23a | ||
| 
						 | 
					77a926e676 | ||
| 
						 | 
					e03c5b59f0 | ||
| 
						 | 
					b362ccab5c | ||
| 
						 | 
					66f96fe2d5 | ||
| 
						 | 
					8b8e5bed23 | ||
| 
						 | 
					09599b52d4 | ||
| 
						 | 
					2514fa79ac | ||
| 
						 | 
					4563da1d7c | ||
| 
						 | 
					f0ef019da2 | ||
| 
						 | 
					e970f63dc0 | ||
| 
						 | 
					7c5718be27 | ||
| 
						 | 
					3a98f9cf20 | ||
| 
						 | 
					f04665a653 | ||
| 
						 | 
					14c67a7004 | ||
| 
						 | 
					f9b6c0ba4c | ||
| 
						 | 
					a029788b0e | ||
| 
						 | 
					d628885e9a | ||
| 
						 | 
					ab0f880433 | ||
| 
						 | 
					ea38f02049 | ||
| 
						 | 
					5e44c144e6 | ||
| 
						 | 
					53e5161231 | ||
| 
						 | 
					687403fb24 | ||
| 
						 | 
					972b0dc350 | ||
| 
						 | 
					315cd871c4 | ||
| 
						 | 
					5693a30813 | ||
| 
						 | 
					01757858fe | ||
| 
						 | 
					db7b5e0d76 | ||
| 
						 | 
					65370f9bbc | ||
| 
						 | 
					4ca026560a | ||
| 
						 | 
					b62a4a1c0e | ||
| 
						 | 
					ce876d8316 | ||
| 
						 | 
					f861b1d433 | ||
| 
						 | 
					fd361a67ef | ||
| 
						 | 
					52f71f8181 | ||
| 
						 | 
					031ea2d14a | ||
| 
						 | 
					d49135e7ea | ||
| 
						 | 
					147cca8f53 | ||
| 
						 | 
					7bb9d84e35 | ||
| 
						 | 
					03da57fe14 | ||
| 
						 | 
					e704741bf3 | ||
| 
						 | 
					e0520c65d5 | ||
| 
						 | 
					3a325c60a3 | ||
| 
						 | 
					86a2f966d0 | ||
| 
						 | 
					a4cc3c8041 | ||
| 
						 | 
					19f65ddbab | ||
| 
						 | 
					63aff3001e | ||
| 
						 | 
					779c51c644 | ||
| 
						 | 
					758954e0d8 | ||
| 
						 | 
					d099f0ed6c | ||
| 
						 | 
					358d352aa2 | ||
| 
						 | 
					13dc3ce9ab | ||
| 
						 | 
					daddd9a950 | ||
| 
						 | 
					214368ffee | ||
| 
						 | 
					47739161c6 | ||
| 
						 | 
					8764e86339 | ||
| 
						 | 
					ded18639d7 | ||
| 
						 | 
					4cfeb00be9 | ||
| 
						 | 
					84917787b5 | ||
| 
						 | 
					ff49a94439 | ||
| 
						 | 
					e91fb53b38 | ||
| 
						 | 
					c0482547b3 | ||
| 
						 | 
					765e9ba911 | ||
| 
						 | 
					b263f21246 | ||
| 
						 | 
					6ecbc2bb62 | ||
| 
						 | 
					3c6c139a07 | ||
| 
						 | 
					f3a3903260 | ||
| 
						 | 
					5a7652c3e5 | ||
| 
						 | 
					be2c4d9bd9 | ||
| 
						 | 
					dcfe8df148 | ||
| 
						 | 
					3343220327 | ||
| 
						 | 
					e547c45f1c | ||
| 
						 | 
					2b4ffc659e | ||
| 
						 | 
					856c6dfb09 | ||
| 
						 | 
					701134320a | ||
| 
						 | 
					f4d456408d | ||
| 
						 | 
					5599c7331b | ||
| 
						 | 
					385b348666 | ||
| 
						 | 
					2dac2667d1 | ||
| 
						 | 
					847865d0f9 | ||
| 
						 | 
					4dce704145 | ||
| 
						 | 
					9587429fa0 | ||
| 
						 | 
					98e143f118 | ||
| 
						 | 
					fc92396976 | ||
| 
						 | 
					6311681236 | ||
| 
						 | 
					b45e874d7c | ||
| 
						 | 
					c53a5308a5 | ||
| 
						 | 
					f1f7598ce9 | ||
| 
						 | 
					9dabfce1a8 | ||
| 
						 | 
					0a6028757a | ||
| 
						 | 
					e9add063b5 | ||
| 
						 | 
					519531e97e | ||
| 
						 | 
					ac20719d99 | ||
| 
						 | 
					a51f767645 | ||
| 
						 | 
					5a42c8f07f | ||
| 
						 | 
					a9c6edcde7 | ||
| 
						 | 
					0d5096fbd6 | ||
| 
						 | 
					3847d15d6b | ||
| 
						 | 
					3ef477c69f | ||
| 
						 | 
					24e20db4aa | ||
| 
						 | 
					0f78819c8c | ||
| 
						 | 
					9f9ab1dc66 | ||
| 
						 | 
					d162584b11 | ||
| 
						 | 
					d8ba0dc977 | ||
| 
						 | 
					b217ca63b1 | ||
| 
						 | 
					30ea570f0f | ||
| 
						 | 
					cb2182676b | ||
| 
						 | 
					73c92dfa0c | ||
| 
						 | 
					717cc85895 | ||
| 
						 | 
					e933f91f50 | ||
| 
						 | 
					cbb6744827 | ||
| 
						 | 
					ec492c8a5a | ||
| 
						 | 
					3323314fc1 | ||
| 
						 | 
					46ab9bbd7f | ||
| 
						 | 
					0ebc965b9c | ||
| 
						 | 
					ba168244a1 | ||
| 
						 | 
					d0b039d4a3 | ||
| 
						 | 
					9f10e9293b | ||
| 
						 | 
					ef643cc7bd | ||
| 
						 | 
					4b64e0cbdb | ||
| 
						 | 
					5edce5685f | ||
| 
						 | 
					8f4077ca69 | ||
| 
						 | 
					0ecfd920e5 | ||
| 
						 | 
					4b5cce664c | ||
| 
						 | 
					889f39c70f | ||
| 
						 | 
					0b30fc903f | ||
| 
						 | 
					5a21cadbeb | ||
| 
						 | 
					75cb3771b4 | ||
| 
						 | 
					7988163c3b | ||
| 
						 | 
					4082fea81c | ||
| 
						 | 
					0be085d34a | ||
| 
						 | 
					7963ddeb44 | ||
| 
						 | 
					eedab5241e | ||
| 
						 | 
					e02614417d | ||
| 
						 | 
					5dc52b919b | ||
| 
						 | 
					1fb83a3bc2 | ||
| 
						 | 
					f0170ebb97 | ||
| 
						 | 
					8d65fdb62e | ||
| 
						 | 
					9bd1e2b54a | ||
| 
						 | 
					ad0d2579cf | ||
| 
						 | 
					25f7117f0e | ||
| 
						 | 
					5b7f36e857 | ||
| 
						 | 
					a4339ea3ba | ||
| 
						 | 
					e8b0dd57c0 | ||
| 
						 | 
					2f3af3dc36 | ||
| 
						 | 
					b77b58a398 | ||
| 
						 | 
					f6dfbeed3c | ||
| 
						 | 
					926725b3d7 | ||
| 
						 | 
					e796666d34 | ||
| 
						 | 
					2218c296b4 | ||
| 
						 | 
					cd30f03ac5 | ||
| 
						 | 
					20b82b514d | ||
| 
						 | 
					560b34f2b0 | ||
| 
						 | 
					fc0503a25c | ||
| 
						 | 
					e9c80e04c1 | ||
| 
						 | 
					f0f4b8f126 | ||
| 
						 | 
					cdd1acd788 | ||
| 
						 | 
					128e1d101b | ||
| 
						 | 
					ed496b3d42 | ||
| 
						 | 
					88c21c47a3 | ||
| 
						 | 
					4a253652ee | ||
| 
						 | 
					4fcdd66fff | ||
| 
						 | 
					102302b05b | ||
| 
						 | 
					7af31968dd | ||
| 
						 | 
					8a1956f3ea | ||
| 
						 | 
					e3bc1f4955 | ||
| 
						 | 
					57d7ee3a91 | ||
| 
						 | 
					41965a84c4 | ||
| 
						 | 
					ec9cc70f72 | ||
| 
						 | 
					d1671f4f1a | ||
| 
						 | 
					26e18383ef | ||
| 
						 | 
					f586d97191 | ||
| 
						 | 
					a61e51220f | ||
| 
						 | 
					34b1008c93 | ||
| 
						 | 
					c5d5f5bd0f | ||
| 
						 | 
					8bd7ca9996 | ||
| 
						 | 
					31ed9a2131 | ||
| 
						 | 
					6efef384c6 | ||
| 
						 | 
					4b27bab993 | ||
| 
						 | 
					89bb96e51d | ||
| 
						 | 
					b9e87d07cb | ||
| 
						 | 
					07f3e4f3f9 | ||
| 
						 | 
					b5c54c914f | ||
| 
						 | 
					a25f9adc77 | ||
| 
						 | 
					60aeb18750 | ||
| 
						 | 
					fdeaf55bf9 | ||
| 
						 | 
					0f7fa1b190 | ||
| 
						 | 
					2911575c6e | ||
| 
						 | 
					afa23c46d9 | ||
| 
						 | 
					629b640bbc | ||
| 
						 | 
					7b6b246fd3 | ||
| 
						 | 
					44314cf64d | ||
| 
						 | 
					f1982acc12 | ||
| 
						 | 
					2df9ec01d5 | ||
| 
						 | 
					5b63a39241 | ||
| 
						 | 
					d1cf23ac86 | ||
| 
						 | 
					16bc45ba95 | ||
| 
						 | 
					85c9ba2342 | ||
| 
						 | 
					5fad2c93bc | ||
| 
						 | 
					d0f1d924ad | ||
| 
						 | 
					9b69a63874 | ||
| 
						 | 
					dd274b1c1c | ||
| 
						 | 
					9c75461bef | ||
| 
						 | 
					da15c61608 | ||
| 
						 | 
					534e5fabad | ||
| 
						 | 
					33446493f4 | ||
| 
						 | 
					96180cac04 | ||
| 
						 | 
					d24d1d7daf | ||
| 
						 | 
					0467ea6862 | ||
| 
						 | 
					e0ffd129c1 | ||
| 
						 | 
					26bda7ef2b | ||
| 
						 | 
					b0513fd2bb | ||
| 
						 | 
					c10e3f0cff | ||
| 
						 | 
					d519f0831c | ||
| 
						 | 
					b814081136 | ||
| 
						 | 
					b9ef52b078 | ||
| 
						 | 
					29b490a458 | ||
| 
						 | 
					a9bc1af984 | ||
| 
						 | 
					96e16bddb4 | ||
| 
						 | 
					3f9b187bae | ||
| 
						 | 
					fb65e65e28 | ||
| 
						 | 
					0e0a105364 | ||
| 
						 | 
					c944f81703 | ||
| 
						 | 
					8ff8a829b0 | ||
| 
						 | 
					3f9562a669 | ||
| 
						 | 
					e6e29bc4c9 | ||
| 
						 | 
					4eeb750d20 | ||
| 
						 | 
					ed77017b59 | ||
| 
						 | 
					c8919dde09 | ||
| 
						 | 
					5fdeb58ccd | ||
| 
						 | 
					c557f921dc | ||
| 
						 | 
					abf840e4f7 | ||
| 
						 | 
					27f3b65f49 | ||
| 
						 | 
					ea131a0644 | ||
| 
						 | 
					9f944107a9 | ||
| 
						 | 
					2927791d77 | ||
| 
						 | 
					2016265dfb | ||
| 
						 | 
					f3efeaad54 | ||
| 
						 | 
					d80b0eeee5 | ||
| 
						 | 
					372566bd99 | ||
| 
						 | 
					ebd14bfce9 | ||
| 
						 | 
					ec2f7e568e | ||
| 
						 | 
					13af145159 | ||
| 
						 | 
					c051e521a7 | ||
| 
						 | 
					45473632c5 | ||
| 
						 | 
					b39d4768e6 | ||
| 
						 | 
					76c15d790e | ||
| 
						 | 
					6699cb8491 | ||
| 
						 | 
					579a759071 | ||
| 
						 | 
					da317b94d9 | ||
| 
						 | 
					c2c76a4d90 | ||
| 
						 | 
					7f5fd314c0 | ||
| 
						 | 
					d6019e1654 | ||
| 
						 | 
					30b9c2348d | ||
| 
						 | 
					039081b809 | ||
| 
						 | 
					0c2adb0a9b | ||
| 
						 | 
					b4f0abd246 | ||
| 
						 | 
					7e1e3334f6 | ||
| 
						 | 
					fa104be35e | ||
| 
						 | 
					37de2b5c1e | ||
| 
						 | 
					2d752737c5 | ||
| 
						 | 
					78038e095f | ||
| 
						 | 
					a69c0a1be5 | ||
| 
						 | 
					b1de640f03 | ||
| 
						 | 
					61ba602af5 | ||
| 
						 | 
					c45a48c186 | ||
| 
						 | 
					6f6a613032 | ||
| 
						 | 
					99fb221280 | ||
| 
						 | 
					524b00c0da | ||
| 
						 | 
					6b2cae0c16 | ||
| 
						 | 
					a5bb5bca52 | ||
| 
						 | 
					87954638a6 | ||
| 
						 | 
					667053a2f3 | ||
| 
						 | 
					7f893258f6 | ||
| 
						 | 
					6bcb68da41 | ||
| 
						 | 
					b783858654 | ||
| 
						 | 
					5f487e0317 | ||
| 
						 | 
					066caf0551 | ||
| 
						 | 
					70d416ec35 | ||
| 
						 | 
					9725bda766 | ||
| 
						 | 
					3cd8547a20 | ||
| 
						 | 
					7eef2b0cd7 | ||
| 
						 | 
					79b9209883 | ||
| 
						 | 
					e0202d946d | ||
| 
						 | 
					94c2f77a62 | ||
| 
						 | 
					9600602267 | ||
| 
						 | 
					40088d8b81 | ||
| 
						 | 
					7d3ba88a98 | ||
| 
						 | 
					cdf84b719c | ||
| 
						 | 
					92acab0b6a | ||
| 
						 | 
					4dc836773e | ||
| 
						 | 
					ca567a03ad | ||
| 
						 | 
					8e52a9063a | ||
| 
						 | 
					b3ef742cbb | ||
| 
						 | 
					612f4e2384 | ||
| 
						 | 
					29f41e8a80 | ||
| 
						 | 
					a2ea9f3ecc | ||
| 
						 | 
					deda5ea788 | ||
| 
						 | 
					c655f40ed2 | ||
| 
						 | 
					9103197591 | ||
| 
						 | 
					785da0e610 | ||
| 
						 | 
					cbf8123512 | ||
| 
						 | 
					378341e192 | ||
| 
						 | 
					d89cd382da | ||
| 
						 | 
					5628ec6673 | ||
| 
						 | 
					b0d27cb902 | ||
| 
						 | 
					edf92f1c41 | ||
| 
						 | 
					7a1a12232a | ||
| 
						 | 
					72a158703b | ||
| 
						 | 
					ce4555967e | ||
| 
						 | 
					52073b7675 | ||
| 
						 | 
					a6e7d1c0e3 | ||
| 
						 | 
					5e3ff62c34 | ||
| 
						 | 
					226751ae4a | ||
| 
						 | 
					1769dfab06 | ||
| 
						 | 
					67c408cee9 | ||
| 
						 | 
					5eda213ebe | ||
| 
						 | 
					a6a48e87bc | ||
| 
						 | 
					36086186a9 | ||
| 
						 | 
					cda01d55ba | ||
| 
						 | 
					478b50cf67 | ||
| 
						 | 
					d2625fd657 | ||
| 
						 | 
					b98af49d97 | ||
| 
						 | 
					50f307a98f | ||
| 
						 | 
					4249d4ba86 | ||
| 
						 | 
					4e48c77572 | ||
| 
						 | 
					dece3209f2 | ||
| 
						 | 
					c3eb33763b | ||
| 
						 | 
					902efde1cc | ||
| 
						 | 
					36019f70e8 | ||
| 
						 | 
					d5605699a1 | ||
| 
						 | 
					a0aaa5660a | ||
| 
						 | 
					fcb2bcfe65 | ||
| 
						 | 
					eeb15452a0 | ||
| 
						 | 
					b85f8afe37 | ||
| 
						 | 
					14536c8c9c | ||
| 
						 | 
					42082eda6f | ||
| 
						 | 
					5ef24a806d | ||
| 
						 | 
					b62f4daac0 | ||
| 
						 | 
					0c75eeacd3 | ||
| 
						 | 
					5ae8d6bcba | ||
| 
						 | 
					dfcb42c68e | ||
| 
						 | 
					bbc098ffb3 | ||
| 
						 | 
					75787fd833 | ||
| 
						 | 
					bd59f2b91d | ||
| 
						 | 
					dc1ce3bc64 | ||
| 
						 | 
					3909087801 | ||
| 
						 | 
					d3cc91eee2 | ||
| 
						 | 
					c9577ab5ea | ||
| 
						 | 
					3f6b6f0b8c | ||
| 
						 | 
					e61f5d55bc | ||
| 
						 | 
					a59f436295 | ||
| 
						 | 
					fd8ad019e1 | ||
| 
						 | 
					006784378d | ||
| 
						 | 
					0b2bde70dd | ||
| 
						 | 
					a898936218 | ||
| 
						 | 
					a108f841ba | ||
| 
						 | 
					6f017a8f9d | ||
| 
						 | 
					584ac22110 | ||
| 
						 | 
					527c898ce8 | ||
| 
						 | 
					5cdc25a754 | ||
| 
						 | 
					a0957d5505 | ||
| 
						 | 
					5711885a2b | ||
| 
						 | 
					41b920ef01 | ||
| 
						 | 
					88e20b8584 | ||
| 
						 | 
					25af7a5dbc | ||
| 
						 | 
					6af440ced4 | ||
| 
						 | 
					17c2764d2e | ||
| 
						 | 
					ff7b6ce9db | ||
| 
						 | 
					97cf1f6c28 | ||
| 
						 | 
					415ece7301 | ||
| 
						 | 
					8d6a75dc3a | ||
| 
						 | 
					190c615d43 | ||
| 
						 | 
					5c57c69f9e | ||
| 
						 | 
					4b26645c1a | ||
| 
						 | 
					c051cbc83f | ||
| 
						 | 
					8bf0eee8d9 | ||
| 
						 | 
					82fe001b8d | ||
| 
						 | 
					852f837f5e | ||
| 
						 | 
					241fba4ea9 | ||
| 
						 | 
					f5b132d652 | ||
| 
						 | 
					ca48ace5c5 | ||
| 
						 | 
					0b4bb91db6 | ||
| 
						 | 
					26e43b48a3 | ||
| 
						 | 
					cbce8c4644 | ||
| 
						 | 
					3d7bf77f61 | ||
| 
						 | 
					e0f7cfda68 | ||
| 
						 | 
					c256e69d3f | ||
| 
						 | 
					b74ce8d948 | ||
| 
						 | 
					a9d14832fd | ||
| 
						 | 
					42386fdb62 | ||
| 
						 | 
					5382adbf2c | ||
| 
						 | 
					ac9ce2cf03 | ||
| 
						 | 
					5c84d2f560 | ||
| 
						 | 
					4bf4a6501c | ||
| 
						 | 
					32b18e0338 | ||
| 
						 | 
					02498cc885 | ||
| 
						 | 
					0574cadf85 | ||
| 
						 | 
					e365352d6a | ||
| 
						 | 
					211a14f627 | ||
| 
						 | 
					810639536c | ||
| 
						 | 
					e423c360fd | ||
| 
						 | 
					9cd50f738f | ||
| 
						 | 
					8ee3c7e676 | ||
| 
						 | 
					4ddacd9921 | ||
| 
						 | 
					02450ec69d | ||
| 
						 | 
					8a99cb29d1 | ||
| 
						 | 
					64a786a292 | ||
| 
						 | 
					a54a61e7a9 | ||
| 
						 | 
					adb46dbc6d | ||
| 
						 | 
					7e25d81870 | ||
| 
						 | 
					aafbe1ccd2 | ||
| 
						 | 
					271fef0ef3 | ||
| 
						 | 
					965e06da3c | ||
| 
						 | 
					a398f821fa | ||
| 
						 | 
					6d84daa5d6 | ||
| 
						 | 
					3b848d3401 | ||
| 
						 | 
					42b9a4177b | ||
| 
						 | 
					cd8d7335af | ||
| 
						 | 
					c7f690c243 | ||
| 
						 | 
					32213d8d77 | ||
| 
						 | 
					b42759158d | ||
| 
						 | 
					1bc0b68d7b | ||
| 
						 | 
					2f58cda4ce | ||
| 
						 | 
					c71fdaed58 | ||
| 
						 | 
					96a4c31be3 | ||
| 
						 | 
					2b0180c37f | ||
| 
						 | 
					7753a3a684 | ||
| 
						 | 
					5dcd2deb3e | ||
| 
						 | 
					b25b8417a7 | ||
| 
						 | 
					b69437e1e5 | ||
| 
						 | 
					36df342f9b | ||
| 
						 | 
					4df2280b4f | ||
| 
						 | 
					504bbcf3cd | ||
| 
						 | 
					988d11b641 | ||
| 
						 | 
					8a97a33063 | ||
| 
						 | 
					22de0e6583 | ||
| 
						 | 
					cd54249c21 | ||
| 
						 | 
					92584bd3d5 | ||
| 
						 | 
					342ec250c3 | ||
| 
						 | 
					c6d8adb8a4 | ||
| 
						 | 
					9575d1a91a | ||
| 
						 | 
					75fe422323 | ||
| 
						 | 
					412834dcf0 | ||
| 
						 | 
					db05b447a5 | ||
| 
						 | 
					3bdd80521a | ||
| 
						 | 
					4544f0a691 | ||
| 
						 | 
					c56f5b8edf | ||
| 
						 | 
					c6913eeb76 | ||
| 
						 | 
					04638f2fc3 | ||
| 
						 | 
					045b2809f8 | ||
| 
						 | 
					29d422e2a0 | ||
| 
						 | 
					a7f5cd7fd5 | ||
| 
						 | 
					afdf366921 | ||
| 
						 | 
					fed45e1879 | ||
| 
						 | 
					d07201a2bb | ||
| 
						 | 
					bc9e878210 | ||
| 
						 | 
					9fc3ebda13 | ||
| 
						 | 
					1a70fe953a | ||
| 
						 | 
					ea4507ee1c | ||
| 
						 | 
					4b9af0a101 | ||
| 
						 | 
					e92ce4e35b | ||
| 
						 | 
					3426b8ed3f | ||
| 
						 | 
					f5cd3db541 | ||
| 
						 | 
					15e5f592c1 | ||
| 
						 | 
					509a83dd36 | ||
| 
						 | 
					8c7f5f3bec | ||
| 
						 | 
					188f6443ae | ||
| 
						 | 
					3675fb882c | ||
| 
						 | 
					3b4d86bff5 | ||
| 
						 | 
					282a480a35 | ||
| 
						 | 
					1e2d4cb0e1 | ||
| 
						 | 
					99cda4376e | ||
| 
						 | 
					73325b221c | ||
| 
						 | 
					a42abde699 | ||
| 
						 | 
					64f7e2c4c0 | ||
| 
						 | 
					7f97d57236 | ||
| 
						 | 
					c9a8e3d1c7 | ||
| 
						 | 
					3fce3f6b2b | ||
| 
						 | 
					0ded2a0689 | ||
| 
						 | 
					c5d975a743 | ||
| 
						 | 
					d8f3ed2306 | ||
| 
						 | 
					4e049c5259 | ||
| 
						 | 
					b4a9d5bfe8 | ||
| 
						 | 
					3d1160d58b | ||
| 
						 | 
					4221c0dd30 | ||
| 
						 | 
					fbbaaccaca | ||
| 
						 | 
					04fac50045 | ||
| 
						 | 
					94782e0e9c | ||
| 
						 | 
					c3b344e36a | ||
| 
						 | 
					9cf0f18754 | ||
| 
						 | 
					cfd298b7ae | ||
| 
						 | 
					874a18cfad | ||
| 
						 | 
					6c79faaa9d | ||
| 
						 | 
					1da5d3029e | ||
| 
						 | 
					1bc4d009e1 | ||
| 
						 | 
					fbf7c44bbf | ||
| 
						 | 
					2f0275a4c3 | ||
| 
						 | 
					eb7ece1381 | ||
| 
						 | 
					5c60046553 | ||
| 
						 | 
					cbd64894ec | ||
| 
						 | 
					6de2649a6b | ||
| 
						 | 
					173e72e64c | ||
| 
						 | 
					80ccc66d7e | ||
| 
						 | 
					5de18d5d0d | ||
| 
						 | 
					e24fd37cda | ||
| 
						 | 
					890f2f8b92 | ||
| 
						 | 
					ca303d333b | ||
| 
						 | 
					15652f9825 | ||
| 
						 | 
					95248de327 | ||
| 
						 | 
					28997596f2 | ||
| 
						 | 
					bcb157f07f | ||
| 
						 | 
					e942c15451 | ||
| 
						 | 
					897dfd4eaa | ||
| 
						 | 
					c621fe6685 | ||
| 
						 | 
					feb4c32786 | ||
| 
						 | 
					63d86d067a | ||
| 
						 | 
					35ced1f705 | ||
| 
						 | 
					71a16946dc | ||
| 
						 | 
					5702e965d7 | ||
| 
						 | 
					654d227a86 | ||
| 
						 | 
					2f297fce73 | ||
| 
						 | 
					656829b78f | ||
| 
						 | 
					95dd301861 | ||
| 
						 | 
					4e2322892b | ||
| 
						 | 
					7b0d591dc3 | ||
| 
						 | 
					7bbb8c5620 | ||
| 
						 | 
					d0aeeee176 | ||
| 
						 | 
					afc1b1eab7 | ||
| 
						 | 
					5108690f19 | ||
| 
						 | 
					3c76bcded0 | ||
| 
						 | 
					ea5003bd1e | ||
| 
						 | 
					45ba475b81 | ||
| 
						 | 
					7067cbc8b5 | ||
| 
						 | 
					f990fae812 | ||
| 
						 | 
					a32d9eaf07 | ||
| 
						 | 
					f953c2d039 | ||
| 
						 | 
					342dbbbe4e | ||
| 
						 | 
					7c43601d44 | ||
| 
						 | 
					1aaa04191f | ||
| 
						 | 
					e46a281de5 | ||
| 
						 | 
					e1f1d28f34 | ||
| 
						 | 
					388aff08dc | ||
| 
						 | 
					3646578ae7 | ||
| 
						 | 
					4365e4aad9 | ||
| 
						 | 
					0850f11855 | ||
| 
						 | 
					975dfb1c6c | ||
| 
						 | 
					5cc2707742 | ||
| 
						 | 
					47edeb9f59 | ||
| 
						 | 
					35c77b7303 | ||
| 
						 | 
					273a808180 | ||
| 
						 | 
					7c9e81be40 | ||
| 
						 | 
					c4558efbf3 | ||
| 
						 | 
					750398acd8 | ||
| 
						 | 
					2527b94fec | ||
| 
						 | 
					d980abb22e | ||
| 
						 | 
					b7c37f2fc0 | ||
| 
						 | 
					7e47a69544 | ||
| 
						 | 
					9fa24352ce | ||
| 
						 | 
					3caeef94bd | ||
| 
						 | 
					f93a41877d | ||
| 
						 | 
					c98a45452b | ||
| 
						 | 
					0e4f7045ea | ||
| 
						 | 
					2141e6f30b | ||
| 
						 | 
					dd7e60bd70 | ||
| 
						 | 
					32620fe9d1 | ||
| 
						 | 
					1041ab696e | ||
| 
						 | 
					9970308c88 | ||
| 
						 | 
					2aec073a52 | ||
| 
						 | 
					b714a1fe09 | ||
| 
						 | 
					bbb4ee8574 | ||
| 
						 | 
					4af91ec072 | ||
| 
						 | 
					6b2a843970 | ||
| 
						 | 
					6b1f7beeee | ||
| 
						 | 
					8109e8305b | ||
| 
						 | 
					c4e6fb1524 | ||
| 
						 | 
					a693ead6dc | ||
| 
						 | 
					e33ac0e71d | ||
| 
						 | 
					93cab6b319 | ||
| 
						 | 
					2acc020b77 | ||
| 
						 | 
					7c770d572a | ||
| 
						 | 
					ea34a58385 | ||
| 
						 | 
					4568182a8b | ||
| 
						 | 
					e511c64a24 | ||
| 
						 | 
					c38b76bf69 | ||
| 
						 | 
					1703627ba8 | ||
| 
						 | 
					498e89fe9d | ||
| 
						 | 
					46bf83f07a | ||
| 
						 | 
					7c47f0d946 | ||
| 
						 | 
					058843bd0f | ||
| 
						 | 
					543fd85460 | ||
| 
						 | 
					1598af9ac9 | ||
| 
						 | 
					06b3b640eb | ||
| 
						 | 
					5bdf1f1a89 | ||
| 
						 | 
					f20c673d0d | ||
| 
						 | 
					a006fef78e | ||
| 
						 | 
					0e5cf7bc09 | ||
| 
						 | 
					bd2bceb91b | ||
| 
						 | 
					6f0a93b069 | ||
| 
						 | 
					ed60d9ded0 | ||
| 
						 | 
					e721909d7f | ||
| 
						 | 
					a0dcb8d821 | ||
| 
						 | 
					26906f2d93 | ||
| 
						 | 
					d4571f43e8 | ||
| 
						 | 
					eef6935426 | ||
| 
						 | 
					517dd307f9 | ||
| 
						 | 
					a6bbbf2ff5 | ||
| 
						 | 
					bba43f3f43 | ||
| 
						 | 
					4badfebefc | ||
| 
						 | 
					08e5536445 | ||
| 
						 | 
					e54e123549 | ||
| 
						 | 
					abd01ea214 | ||
| 
						 | 
					a5b2791cc9 | ||
| 
						 | 
					f00c54ae2e | ||
| 
						 | 
					e71972d177 | ||
| 
						 | 
					c1faa8b5b2 | ||
| 
						 | 
					b252cf0d98 | ||
| 
						 | 
					a4c4a7d5ca | ||
| 
						 | 
					bdcf772aa5 | ||
| 
						 | 
					89a5e2f704 | ||
| 
						 | 
					024e6fed62 | ||
| 
						 | 
					48b0951681 | ||
| 
						 | 
					2dabd82236 | ||
| 
						 | 
					09d0d67c13 | ||
| 
						 | 
					0028a23b9f | ||
| 
						 | 
					032b33059e | ||
| 
						 | 
					3a3f964eda | ||
| 
						 | 
					b7d1a1af76 | ||
| 
						 | 
					8cfb6411ff | ||
| 
						 | 
					2c0093d294 | ||
| 
						 | 
					947e129219 | ||
| 
						 | 
					0a2d5003df | ||
| 
						 | 
					fb0a520897 | ||
| 
						 | 
					230ec17d74 | ||
| 
						 | 
					668bcfd5ca | ||
| 
						 | 
					8774f78d1b | ||
| 
						 | 
					f469880c61 | ||
| 
						 | 
					bbdfbacdef | ||
| 
						 | 
					e9754726d2 | ||
| 
						 | 
					99fc818e93 | ||
| 
						 | 
					265f835e3e | ||
| 
						 | 
					33826fd028 | ||
| 
						 | 
					92821996de | ||
| 
						 | 
					11e2957d5f | ||
| 
						 | 
					3a778a2913 | ||
| 
						 | 
					4d2654783c | ||
| 
						 | 
					2a21cdbe6b | ||
| 
						 | 
					51e7a4378a | ||
| 
						 | 
					74cc3b583d | ||
| 
						 | 
					e7cf2b1022 | ||
| 
						 | 
					60938ae772 | ||
| 
						 | 
					4e71d95260 | ||
| 
						 | 
					fefc111a2a | ||
| 
						 | 
					b204ab6506 | ||
| 
						 | 
					ec40e5ff42 | ||
| 
						 | 
					b34aa49c25 | ||
| 
						 | 
					1e8b9e7e69 | ||
| 
						 | 
					d372d36592 | ||
| 
						 | 
					36b5bb6f2f | ||
| 
						 | 
					30c278aa6b | ||
| 
						 | 
					083bec780d | ||
| 
						 | 
					1edf8f1b4e | ||
| 
						 | 
					65f2a56580 | ||
| 
						 | 
					f1f5c70a04 | ||
| 
						 | 
					0090a686c0 | ||
| 
						 | 
					f5a7d5b164 | ||
| 
						 | 
					abd2ed012b | ||
| 
						 | 
					3bf15e2974 | ||
| 
						 | 
					8df400cf8d | ||
| 
						 | 
					fbeb85ecb9 | ||
| 
						 | 
					3766e7ccab | ||
| 
						 | 
					2e8cb108dc | ||
| 
						 | 
					256f9573c5 | ||
| 
						 | 
					b6b094fb77 | ||
| 
						 | 
					0db46a7dd7 | ||
| 
						 | 
					2537d46903 | ||
| 
						 | 
					5447f836a0 | ||
| 
						 | 
					66d9f2e521 | ||
| 
						 | 
					139cd16cc5 | ||
| 
						 | 
					fdb78f3d88 | ||
| 
						 | 
					95ea531864 | ||
| 
						 | 
					4842dde80c | ||
| 
						 | 
					f91926a240 | ||
| 
						 | 
					9282c33596 | ||
| 
						 | 
					c3cddeaec8 | ||
| 
						 | 
					df316fd43c | ||
| 
						 | 
					2fceff5ba3 | ||
| 
						 | 
					f404278186 | ||
| 
						 | 
					68f5500d31 | ||
| 
						 | 
					6f9076ff37 | ||
| 
						 | 
					904732f68b | ||
| 
						 | 
					cf5ecc3e1f | ||
| 
						 | 
					2c340864be | ||
| 
						 | 
					84bafb7471 | ||
| 
						 | 
					5087afa108 | ||
| 
						 | 
					93c2c9befc | ||
| 
						 | 
					d900c0ae14 | ||
| 
						 | 
					55b66f084d | ||
| 
						 | 
					96cfba0fb4 | ||
| 
						 | 
					cd68694646 | ||
| 
						 | 
					1c16fd1f03 | ||
| 
						 | 
					a5afc0a8f4 | ||
| 
						 | 
					20b431e3a9 | ||
| 
						 | 
					e83aefb3a0 | ||
| 
						 | 
					1740c9fbfc | ||
| 
						 | 
					2588d4ca41 | ||
| 
						 | 
					878b5d07ef | ||
| 
						 | 
					191b3f0ba9 | ||
| 
						 | 
					46a6cec699 | ||
| 
						 | 
					472af806ce | ||
| 
						 | 
					5c1393bfc3 | ||
| 
						 | 
					f7ac0ec89d | ||
| 
						 | 
					598c423e65 | ||
| 
						 | 
					360ef6769e | ||
| 
						 | 
					13cfb04343 | ||
| 
						 | 
					22b5d7c80b | ||
| 
						 | 
					685755937a | ||
| 
						 | 
					7c8ac50504 | ||
| 
						 | 
					095db6bdb8 | ||
| 
						 | 
					8dbeb110fb | ||
| 
						 | 
					765b413794 | ||
| 
						 | 
					d223dfe641 | ||
| 
						 | 
					1c455bc084 | ||
| 
						 | 
					9f6b0635ad | ||
| 
						 | 
					98a7edf9f0 | ||
| 
						 | 
					7831969634 | ||
| 
						 | 
					9ba297e49f | ||
| 
						 | 
					ddd13d677b | ||
| 
						 | 
					821244cf67 | ||
| 
						 | 
					edb128ce00 | ||
| 
						 | 
					642aa226db | ||
| 
						 | 
					b5cadfb564 | ||
| 
						 | 
					c4fc172240 | ||
| 
						 | 
					d88926f181 | ||
| 
						 | 
					24f77b34d5 | ||
| 
						 | 
					cccf27c89a | ||
| 
						 | 
					c5cd28bd64 | ||
| 
						 | 
					b3aee265c5 | ||
| 
						 | 
					9fc81acae6 | ||
| 
						 | 
					5d2e07f182 | ||
| 
						 | 
					aa714f3af4 | ||
| 
						 | 
					68c06bf6b2 | ||
| 
						 | 
					c7b7984ac9 | ||
| 
						 | 
					3db935a9e5 | ||
| 
						 | 
					63d103ea48 | ||
| 
						 | 
					999ffeca6c | ||
| 
						 | 
					ffa4579679 | ||
| 
						 | 
					51b9115b6d | ||
| 
						 | 
					8ab92fc646 | ||
| 
						 | 
					98dc178494 | ||
| 
						 | 
					89f1eb8213 | ||
| 
						 | 
					f717abd7c1 | ||
| 
						 | 
					d5630dd60e | ||
| 
						 | 
					134c00659a | ||
| 
						 | 
					8bb870df9e | ||
| 
						 | 
					95bba34b83 | ||
| 
						 | 
					96a4cf8c29 | ||
| 
						 | 
					da01515c40 | ||
| 
						 | 
					7c43ea50fd | ||
| 
						 | 
					c0832990f5 | ||
| 
						 | 
					7cb81398b7 | ||
| 
						 | 
					24798c5e59 | ||
| 
						 | 
					5b0e3daf50 | ||
| 
						 | 
					53d6bf40c1 | ||
| 
						 | 
					1e98169086 | ||
| 
						 | 
					866f1f41d1 | ||
| 
						 | 
					536a16435b | ||
| 
						 | 
					7f5bf370db | ||
| 
						 | 
					2c7af9cb6e | ||
| 
						 | 
					fe5772e9d0 | ||
| 
						 | 
					8be18f3459 | ||
| 
						 | 
					226afe4956 | ||
| 
						 | 
					cfb399ad55 | ||
| 
						 | 
					1efd583085 | ||
| 
						 | 
					8ed11a815e | ||
| 
						 | 
					38049c2bb9 | ||
| 
						 | 
					918e613a32 | ||
| 
						 | 
					23328d4b27 | ||
| 
						 | 
					30765fed55 | ||
| 
						 | 
					6a45ea4f88 | ||
| 
						 | 
					78c3e20579 | ||
| 
						 | 
					0c832ec5c6 | ||
| 
						 | 
					947d78275b | ||
| 
						 | 
					d35c0ff30b | ||
| 
						 | 
					057c8a2b9e | ||
| 
						 | 
					07a4ff79d2 | ||
| 
						 | 
					964eaad78c | ||
| 
						 | 
					3bc522a246 | ||
| 
						 | 
					fd3b0eb01d | ||
| 
						 | 
					d17b59e49f | ||
| 
						 | 
					aea4126e4e | ||
| 
						 | 
					eec82a0e1f | ||
| 
						 | 
					dea8068015 | ||
| 
						 | 
					4739ccdb39 | ||
| 
						 | 
					54a1f4480e | ||
| 
						 | 
					671c9e2dc8 | ||
| 
						 | 
					a70da5b3ec | ||
| 
						 | 
					c5f6da54fc | ||
| 
						 | 
					f11d0c7908 | ||
| 
						 | 
					323fa64559 | ||
| 
						 | 
					3ed6e22771 | ||
| 
						 | 
					e66055b8f7 | ||
| 
						 | 
					b460c8f896 | ||
| 
						 | 
					27e0c86307 | ||
| 
						 | 
					7f429a5dbf | ||
| 
						 | 
					c9d3ec6943 | ||
| 
						 | 
					e98c526b68 | ||
| 
						 | 
					1fda639ae7 | ||
| 
						 | 
					4d88fc8173 | ||
| 
						 | 
					b8c5929130 | ||
| 
						 | 
					800a4a707d | ||
| 
						 | 
					5cc2159526 | ||
| 
						 | 
					6373af15d3 | ||
| 
						 | 
					63d8834c26 | ||
| 
						 | 
					8df5518bd9 | ||
| 
						 | 
					9b222748e7 | ||
| 
						 | 
					17e820aec3 | ||
| 
						 | 
					244ed51a0d | ||
| 
						 | 
					4f3df8bea2 | ||
| 
						 | 
					2a7cbe77b3 | ||
| 
						 | 
					94a209d8e1 | ||
| 
						 | 
					24edfa9df9 | ||
| 
						 | 
					0a17b8de06 | ||
| 
						 | 
					e5db9c3b67 | ||
| 
						 | 
					2daceb0342 | ||
| 
						 | 
					147d4c96b0 | ||
| 
						 | 
					61d24f102d | ||
| 
						 | 
					79b184fb4b | ||
| 
						 | 
					648f551a4a | ||
| 
						 | 
					33a8de69dc | ||
| 
						 | 
					319354eb6c | ||
| 
						 | 
					e7db9896bb | ||
| 
						 | 
					4f16215b9d | ||
| 
						 | 
					a903e6919c | ||
| 
						 | 
					f26328c2f3 | ||
| 
						 | 
					a58fdc7a34 | ||
| 
						 | 
					d21bf10dea | ||
| 
						 | 
					d47c01a31a | ||
| 
						 | 
					ef6b34bec2 | ||
| 
						 | 
					becfdb995b | ||
| 
						 | 
					6206682a35 | ||
| 
						 | 
					88d6b87fca | ||
| 
						 | 
					0e1f390bad | ||
| 
						 | 
					be0d31b166 | ||
| 
						 | 
					ed83ba5321 | ||
| 
						 | 
					81f57e5a69 | ||
| 
						 | 
					1cf218bcaa | ||
| 
						 | 
					093050b660 | ||
| 
						 | 
					0db17852cd | ||
| 
						 | 
					1a9d60d2e3 | ||
| 
						 | 
					9a10ea3fc0 | ||
| 
						 | 
					1a002d88ad | ||
| 
						 | 
					619aab841c | ||
| 
						 | 
					a4aafeeef4 | ||
| 
						 | 
					2ea8035460 | ||
| 
						 | 
					5833e4f5d6 | ||
| 
						 | 
					99e59d634a | ||
| 
						 | 
					cb726fe8d4 | ||
| 
						 | 
					9ddd859d2a | ||
| 
						 | 
					f6ff1aa8e0 | ||
| 
						 | 
					3a5485a9f8 | ||
| 
						 | 
					9053c139fd | ||
| 
						 | 
					3b0648ebc9 | ||
| 
						 | 
					3ad344a517 | ||
| 
						 | 
					6dbb6219e7 | ||
| 
						 | 
					ec4a50b3c3 | ||
| 
						 | 
					d18b716d25 | ||
| 
						 | 
					1e4cb467e1 | ||
| 
						 | 
					74ecfab401 | ||
| 
						 | 
					5818a07a4f | ||
| 
						 | 
					050ce4ca42 | ||
| 
						 | 
					8e2a06bf5c | ||
| 
						 | 
					a1644902eb | ||
| 
						 | 
					bff9ce4db3 | ||
| 
						 | 
					b7bfe69b66 | ||
| 
						 | 
					5180f57c65 | ||
| 
						 | 
					63fe4ee14c | ||
| 
						 | 
					69f45c520c | ||
| 
						 | 
					7bb98eee3c | ||
| 
						 | 
					799379215e | ||
| 
						 | 
					701d593f70 | ||
| 
						 | 
					ee923b4cef | ||
| 
						 | 
					46a2b3387a | ||
| 
						 | 
					e09039c01c | ||
| 
						 | 
					da3bd2779d | ||
| 
						 | 
					b046d70676 | ||
| 
						 | 
					ae007d4d09 | ||
| 
						 | 
					660164a9ed | ||
| 
						 | 
					367b126491 | ||
| 
						 | 
					ac82e51f57 | ||
| 
						 | 
					9f27b1eec3 | ||
| 
						 | 
					9fd603be07 | ||
| 
						 | 
					bec44866f1 | ||
| 
						 | 
					5dbf4f42fb | ||
| 
						 | 
					c58de759c8 | ||
| 
						 | 
					44488723de | ||
| 
						 | 
					ea1d84358b | ||
| 
						 | 
					dd25165968 | ||
| 
						 | 
					657e29c199 | ||
| 
						 | 
					3208fc59db | ||
| 
						 | 
					87adf1fa96 | ||
| 
						 | 
					15a70fe510 | ||
| 
						 | 
					3dbc46dfcd | ||
| 
						 | 
					32e03a3016 | ||
| 
						 | 
					8d00f34239 | ||
| 
						 | 
					df53820170 | ||
| 
						 | 
					c65c5d05fd | ||
| 
						 | 
					8fdb4f1af3 | ||
| 
						 | 
					ae432028d1 | ||
| 
						 | 
					2dce10c56d | ||
| 
						 | 
					18d7158809 | ||
| 
						 | 
					0f39bab0df | ||
| 
						 | 
					d61ff83be9 | ||
| 
						 | 
					be681e123c | ||
| 
						 | 
					6251989eb6 | ||
| 
						 | 
					faee82c1bc | ||
| 
						 | 
					4453cd8c73 | ||
| 
						 | 
					a8f3b8b519 | ||
| 
						 | 
					0f229cce65 | ||
| 
						 | 
					020091406c | ||
| 
						 | 
					ad880dc469 | ||
| 
						 | 
					42a36658c1 | ||
| 
						 | 
					c4ff5d1147 | ||
| 
						 | 
					a5ee80b910 | ||
| 
						 | 
					93ab9e421e | ||
| 
						 | 
					dfcf48f499 | ||
| 
						 | 
					0bf8f110e0 | ||
| 
						 | 
					f3eac74bc5 | ||
| 
						 | 
					3a9b3852c6 | ||
| 
						 | 
					d2e1803197 | ||
| 
						 | 
					4b9e0b5f74 | ||
| 
						 | 
					447e1319b1 | ||
| 
						 | 
					e77ec2ba6f | ||
| 
						 | 
					195b9eeeed | ||
| 
						 | 
					80c42f3e0c | ||
| 
						 | 
					7a71af86ce | ||
| 
						 | 
					32e62d1cc4 | ||
| 
						 | 
					aeda172afd | ||
| 
						 | 
					8d1b199d26 | ||
| 
						 | 
					71fa451343 | ||
| 
						 | 
					a9e1c50bb0 | ||
| 
						 | 
					03c1d9f99d | ||
| 
						 | 
					f889bb0384 | ||
| 
						 | 
					83698d3191 | ||
| 
						 | 
					6a40ebe86b | ||
| 
						 | 
					d4bb6bddf8 | ||
| 
						 | 
					ee9bf3eb6c | ||
| 
						 | 
					41409651be | ||
| 
						 | 
					fd05495748 | ||
| 
						 | 
					4242a090c7 | ||
| 
						 | 
					c3b1303387 | ||
| 
						 | 
					5762f7778d | ||
| 
						 | 
					7a412ded50 | ||
| 
						 | 
					efb19e1330 | ||
| 
						 | 
					c46ecc3a55 | ||
| 
						 | 
					7388b43cae | ||
| 
						 | 
					225055c30b | ||
| 
						 | 
					e0311481b8 | ||
| 
						 | 
					f9c5e5d92e | ||
| 
						 | 
					9474483ab7 | ||
| 
						 | 
					a708609945 | ||
| 
						 | 
					a9e6c091d5 | ||
| 
						 | 
					df5705442c | ||
| 
						 | 
					a2b21191d9 | ||
| 
						 | 
					396f8b71ac | ||
| 
						 | 
					43d5b4ff31 | ||
| 
						 | 
					f2ad35821c | ||
| 
						 | 
					09e4e4b98e | ||
| 
						 | 
					ce33b42bc6 | ||
| 
						 | 
					579d553464 | ||
| 
						 | 
					71fa3bc5ec | ||
| 
						 | 
					e2f53b675a | ||
| 
						 | 
					797c61aa2d | ||
| 
						 | 
					597dab0fa8 | ||
| 
						 | 
					b36bab7812 | ||
| 
						 | 
					8ea92ddd13 | ||
| 
						 | 
					d9a9d10f4f | ||
| 
						 | 
					0d2baadfb4 | ||
| 
						 | 
					dce1cc2a59 | ||
| 
						 | 
					b214184160 | ||
| 
						 | 
					aa09c2c631 | ||
| 
						 | 
					6dd9b0fc43 | ||
| 
						 | 
					e36f6b9cfa | ||
| 
						 | 
					3e181369dd | ||
| 
						 | 
					d3ddf0228e | ||
| 
						 | 
					800e1cd969 | ||
| 
						 | 
					293706e72c | ||
| 
						 | 
					4a1fbd13ee | ||
| 
						 | 
					9eba5614fe | ||
| 
						 | 
					3b1fb1a022 | ||
| 
						 | 
					fc90e42c86 | ||
| 
						 | 
					26e6bac143 | ||
| 
						 | 
					fc6fc7ff38 | ||
| 
						 | 
					adfd95c2ac | ||
| 
						 | 
					80eb43519e | ||
| 
						 | 
					bbe0c8c5be | ||
| 
						 | 
					5a34fcd76e | ||
| 
						 | 
					b1fd0ccb38 | ||
| 
						 | 
					b2284ed34a | ||
| 
						 | 
					a43526302f | ||
| 
						 | 
					2131ce570a | ||
| 
						 | 
					45cd45bbbc | ||
| 
						 | 
					bc9583efa2 | ||
| 
						 | 
					a20152bdaf | ||
| 
						 | 
					fd2b65ce53 | ||
| 
						 | 
					263c62467d | ||
| 
						 | 
					82c5ac4599 | ||
| 
						 | 
					94e9215fbc | ||
| 
						 | 
					f62f792057 | ||
| 
						 | 
					5db9645f1b | ||
| 
						 | 
					86963f40f8 | ||
| 
						 | 
					d3379de5a9 | ||
| 
						 | 
					4736eab947 | ||
| 
						 | 
					23a05fa0c1 | ||
| 
						 | 
					482a7d80cf | ||
| 
						 | 
					ee743dca53 | ||
| 
						 | 
					6da165c631 | ||
| 
						 | 
					d0595f170c | ||
| 
						 | 
					751e26cb9b | ||
| 
						 | 
					f404acfa2c | ||
| 
						 | 
					7744ef1ada | ||
| 
						 | 
					ed998634cd | ||
| 
						 | 
					884c580e05 | ||
| 
						 | 
					bbbe61c958 | ||
| 
						 | 
					df27a35137 | ||
| 
						 | 
					f9ef874a21 | ||
| 
						 | 
					442c9f13d4 | ||
| 
						 | 
					156421a2af | ||
| 
						 | 
					61ad8262a0 | ||
| 
						 | 
					5c88dcca5b | ||
| 
						 | 
					d2add2efaa | ||
| 
						 | 
					b2ae61ecf2 | ||
| 
						 | 
					78dfd43955 | ||
| 
						 | 
					146b52edd1 | ||
| 
						 | 
					13747c6fda | ||
| 
						 | 
					174b07be93 | ||
| 
						 | 
					15a40af2ed | ||
| 
						 | 
					ea6e386008 | ||
| 
						 | 
					34b61f5a25 | ||
| 
						 | 
					e7f8ff4382 | ||
| 
						 | 
					62b6948a27 | ||
| 
						 | 
					0fbf8b9cea | ||
| 
						 | 
					d895f7f060 | ||
| 
						 | 
					ce0ed3b778 | ||
| 
						 | 
					358c372d16 | ||
| 
						 | 
					c4a52a6dca | ||
| 
						 | 
					797a2a102d | ||
| 
						 | 
					3c6a7cd44b | ||
| 
						 | 
					dc4f678cdc | ||
| 
						 | 
					0f2ece872d | ||
| 
						 | 
					68a7b5ae1e | ||
| 
						 | 
					161c9b4262 | ||
| 
						 | 
					57cb030cea | ||
| 
						 | 
					d441e6d8db | ||
| 
						 | 
					228a8599ff | ||
| 
						 | 
					d16bb406d4 | ||
| 
						 | 
					f7ef20c5ee | ||
| 
						 | 
					d0e68a98c5 | ||
| 
						 | 
					a36fb72584 | ||
| 
						 | 
					8f27a92754 | ||
| 
						 | 
					6941b7b918 | ||
| 
						 | 
					ef570cc869 | ||
| 
						 | 
					4d3670fa50 | ||
| 
						 | 
					5421196eca | ||
| 
						 | 
					74b4b49494 | ||
| 
						 | 
					de2b5b7439 | ||
| 
						 | 
					64095ce9d7 | ||
| 
						 | 
					206310c305 | ||
| 
						 | 
					5863163732 | ||
| 
						 | 
					83cb7c4635 | ||
| 
						 | 
					04296664e0 | ||
| 
						 | 
					fc7dae5229 | ||
| 
						 | 
					be81f4dd81 | ||
| 
						 | 
					e626c77808 | ||
| 
						 | 
					da2a5a79ef | ||
| 
						 | 
					11eaec9ae4 | ||
| 
						 | 
					cbc0b0ec2d | ||
| 
						 | 
					1df80b6561 | ||
| 
						 | 
					3770b988c0 | ||
| 
						 | 
					9641be2aac | ||
| 
						 | 
					f94cfe6a12 | ||
| 
						 | 
					7951c2699f | ||
| 
						 | 
					5997efca83 | ||
| 
						 | 
					57559471bf | ||
| 
						 | 
					f4e1169341 | ||
| 
						 | 
					febec8ff23 | ||
| 
						 | 
					0208ab2e3f | ||
| 
						 | 
					faed798c32 | ||
| 
						 | 
					f71c6e52f7 | ||
| 
						 | 
					9ade64dedf | ||
| 
						 | 
					c526ed410c | ||
| 
						 | 
					4379d0e457 | ||
| 
						 | 
					7568d15acd | ||
| 
						 | 
					08e4ea4884 | ||
| 
						 | 
					98909c1d5b | ||
| 
						 | 
					ccd395cbcc | ||
| 
						 | 
					0d60939515 | ||
| 
						 | 
					2ff5ac55c5 | ||
| 
						 | 
					1db5f356f5 | ||
| 
						 | 
					e6903980af | ||
| 
						 | 
					855d29184e | ||
| 
						 | 
					ac07bc8602 | ||
| 
						 | 
					8e1dc4d7ca | ||
| 
						 | 
					a985410d2d | ||
| 
						 | 
					0ecedec82d | ||
| 
						 | 
					9bd20155ba | ||
| 
						 | 
					5d13669a2c | ||
| 
						 | 
					adb5a2694a | ||
| 
						 | 
					23b93b587b | ||
| 
						 | 
					a50bce82ec | ||
| 
						 | 
					713f49119f | ||
| 
						 | 
					677741f87a | ||
| 
						 | 
					5beb93e114 | ||
| 
						 | 
					62d7dd5ffd | ||
| 
						 | 
					6e913f9901 | ||
| 
						 | 
					e255024bf7 | ||
| 
						 | 
					8fa397a6bc | ||
| 
						 | 
					03cf7e784c | ||
| 
						 | 
					ce0727f9bd | ||
| 
						 | 
					8e85545284 | ||
| 
						 | 
					6620bf3444 | ||
| 
						 | 
					7bb1cc9505 | ||
| 
						 | 
					59e68615ce | ||
| 
						 | 
					192540b522 | ||
| 
						 | 
					e2ca32fc2b | ||
| 
						 | 
					4d0bafb4ae | ||
| 
						 | 
					e745572493 | ||
| 
						 | 
					27dfffd5b7 | ||
| 
						 | 
					d0dc991c62 | ||
| 
						 | 
					2ec0497f08 | ||
| 
						 | 
					6bf896d9b1 | ||
| 
						 | 
					be71c37296 | ||
| 
						 | 
					0015572372 | ||
| 
						 | 
					6074fb0979 | ||
| 
						 | 
					25536ea6a7 | ||
| 
						 | 
					b3720c34e5 | ||
| 
						 | 
					5733919dbc | ||
| 
						 | 
					b333905011 | ||
| 
						 | 
					918fc30fa4 | ||
| 
						 | 
					0b9f5ef809 | ||
| 
						 | 
					4817504d06 | ||
| 
						 | 
					84b6e277d4 | ||
| 
						 | 
					fa2c72e549 | ||
| 
						 | 
					ffdfce8d14 | ||
| 
						 | 
					816e243a87 | ||
| 
						 | 
					c79f22c63a | ||
| 
						 | 
					f3d781bb43 | ||
| 
						 | 
					995a6b10e1 | ||
| 
						 | 
					9ef562bcc6 | ||
| 
						 | 
					7e159e0133 | ||
| 
						 | 
					b9e1488865 | ||
| 
						 | 
					e43bfb2906 | ||
| 
						 | 
					9c52c3e07c | ||
| 
						 | 
					1394b29120 | ||
| 
						 | 
					b646fc409d | ||
| 
						 | 
					f9b0b45238 | ||
| 
						 | 
					ad89bf7894 | ||
| 
						 | 
					e75440d2c9 | ||
| 
						 | 
					188c53f7e8 | ||
| 
						 | 
					7aba22ba28 | ||
| 
						 | 
					bdba45957a | ||
| 
						 | 
					0e1467a64c | ||
| 
						 | 
					f2fc30751e | ||
| 
						 | 
					1bfdb34f70 | ||
| 
						 | 
					405edfdcab | ||
| 
						 | 
					3c0ff9f939 | ||
| 
						 | 
					b9ef708e40 | ||
| 
						 | 
					e166891e0d | ||
| 
						 | 
					9a436c0f89 | ||
| 
						 | 
					7fd5df6b12 | ||
| 
						 | 
					8c98b2591f | ||
| 
						 | 
					be16cc23c6 | ||
| 
						 | 
					4fa35e7336 | ||
| 
						 | 
					a3a2e3a43d | ||
| 
						 | 
					67ef4f63f1 | ||
| 
						 | 
					3bfe583b8d | ||
| 
						 | 
					627b044536 | ||
| 
						 | 
					16363c0165 | ||
| 
						 | 
					7ffa48ad38 | ||
| 
						 | 
					5711dd8eac | ||
| 
						 | 
					990390ab52 | ||
| 
						 | 
					2ca873e8d8 | ||
| 
						 | 
					7a2362611f | ||
| 
						 | 
					618eb125f0 | ||
| 
						 | 
					afb14cda8c | ||
| 
						 | 
					df0cdf4ceb | ||
| 
						 | 
					19b0d0e75b | ||
| 
						 | 
					ea8c77a55b | ||
| 
						 | 
					a7c71d8955 | ||
| 
						 | 
					390c579568 | ||
| 
						 | 
					0798170966 | ||
| 
						 | 
					28ff14779e | ||
| 
						 | 
					6600126825 | ||
| 
						 | 
					f6c0bd641c | ||
| 
						 | 
					ea7fe214c4 | ||
| 
						 | 
					ebba6c4895 | ||
| 
						 | 
					6f31dd72d2 | ||
| 
						 | 
					4521eda739 | ||
| 
						 | 
					5b6aaac9e6 | ||
| 
						 | 
					8ce6421803 | ||
| 
						 | 
					2c3ee8ad80 | ||
| 
						 | 
					1c78c43bd3 | ||
| 
						 | 
					21b52dd3eb | ||
| 
						 | 
					d127ef78ad | ||
| 
						 | 
					d674bb4bc8 | ||
| 
						 | 
					e0af04056c | ||
| 
						 | 
					333f926d67 | ||
| 
						 | 
					dce7f142a6 | ||
| 
						 | 
					77aae9654f | ||
| 
						 | 
					ae55176091 | ||
| 
						 | 
					fe06864836 | ||
| 
						 | 
					0985bd4f80 | ||
| 
						 | 
					20bee9684d | ||
| 
						 | 
					0c58d22ad9 | ||
| 
						 | 
					6a828b7a8e | ||
| 
						 | 
					32268b183f | ||
| 
						 | 
					ff6f9f96fd | ||
| 
						 | 
					4a5397fb68 | ||
| 
						 | 
					f9542a4231 | ||
| 
						 | 
					acb2f06af1 | ||
| 
						 | 
					33387d4a88 | ||
| 
						 | 
					60d4e99cf3 | ||
| 
						 | 
					3c075bf07f | ||
| 
						 | 
					bdf40fd251 | ||
| 
						 | 
					3f54a7460c | ||
| 
						 | 
					bba391a99a | ||
| 
						 | 
					af0368458a | ||
| 
						 | 
					a2570242a9 | ||
| 
						 | 
					f6666ad19d | ||
| 
						 | 
					d43a7f2cc6 | ||
| 
						 | 
					7467b76fbf | ||
| 
						 | 
					6a0ea5d239 | ||
| 
						 | 
					9a480169cd | ||
| 
						 | 
					85a1a836a2 | ||
| 
						 | 
					a98b8ce652 | ||
| 
						 | 
					980e7e8bcd | ||
| 
						 | 
					f45c90bb1c | ||
| 
						 | 
					4692f9f7b6 | ||
| 
						 | 
					835d355b97 | ||
| 
						 | 
					29fd6746f5 | ||
| 
						 | 
					e879dd4386 | ||
| 
						 | 
					09f40a3cb9 | ||
| 
						 | 
					f4324e51dd | ||
| 
						 | 
					69569dd168 | ||
| 
						 | 
					12cc43782c | ||
| 
						 | 
					400b3b3614 | ||
| 
						 | 
					3ec9dceb15 | ||
| 
						 | 
					92064785ec | ||
| 
						 | 
					a75a52a43e | ||
| 
						 | 
					ada35f9c2c | ||
| 
						 | 
					6aaa942d53 | ||
| 
						 | 
					0933887112 | ||
| 
						 | 
					b08259cdfe | ||
| 
						 | 
					28507577b1 | ||
| 
						 | 
					930e801214 | ||
| 
						 | 
					fe0e302dff | ||
| 
						 | 
					32cf5baeae | ||
| 
						 | 
					45906fe63b | ||
| 
						 | 
					482cdf2489 | 
							
								
								
									
										20
									
								
								.cvsignore
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								.cvsignore
									
									
									
									
									
								
							@@ -1,20 +0,0 @@
 | 
			
		||||
openssl.pc
 | 
			
		||||
libcrypto.pc
 | 
			
		||||
libssl.pc
 | 
			
		||||
MINFO
 | 
			
		||||
makefile.one
 | 
			
		||||
outinc
 | 
			
		||||
rehash.time
 | 
			
		||||
testlog
 | 
			
		||||
make.log
 | 
			
		||||
maketest.log
 | 
			
		||||
cctest
 | 
			
		||||
cctest.c
 | 
			
		||||
cctest.a
 | 
			
		||||
*.flc
 | 
			
		||||
semantic.cache
 | 
			
		||||
Makefile
 | 
			
		||||
*.dll*
 | 
			
		||||
*.so*
 | 
			
		||||
*.sl*
 | 
			
		||||
*.dylib*
 | 
			
		||||
							
								
								
									
										118
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,118 @@
 | 
			
		||||
# Object files
 | 
			
		||||
*.o
 | 
			
		||||
*.obj
 | 
			
		||||
 | 
			
		||||
# editor artefacts
 | 
			
		||||
*.swp
 | 
			
		||||
.#*
 | 
			
		||||
#*#
 | 
			
		||||
*~
 | 
			
		||||
 | 
			
		||||
# Top level excludes
 | 
			
		||||
/Makefile.bak
 | 
			
		||||
/Makefile
 | 
			
		||||
/MINFO
 | 
			
		||||
/*.a
 | 
			
		||||
/include
 | 
			
		||||
/*.pc
 | 
			
		||||
/rehash.time
 | 
			
		||||
/inc.*
 | 
			
		||||
/makefile.*
 | 
			
		||||
/out.*
 | 
			
		||||
/tmp.*
 | 
			
		||||
 | 
			
		||||
# Most *.c files under test/ are symlinks
 | 
			
		||||
/test/*.c
 | 
			
		||||
# Apart from these
 | 
			
		||||
!/test/asn1test.c
 | 
			
		||||
!/test/methtest.c
 | 
			
		||||
!/test/dummytest.c
 | 
			
		||||
!/test/igetest.c
 | 
			
		||||
!/test/r160test.c
 | 
			
		||||
!/test/fips_algvs.c
 | 
			
		||||
!/test/testutil.c
 | 
			
		||||
 | 
			
		||||
/test/*.ss
 | 
			
		||||
/test/*.srl
 | 
			
		||||
/test/.rnd
 | 
			
		||||
/test/test*.pem
 | 
			
		||||
/test/newkey.pem
 | 
			
		||||
 | 
			
		||||
# Certificate symbolic links
 | 
			
		||||
*.0
 | 
			
		||||
 | 
			
		||||
# Links under apps
 | 
			
		||||
/apps/CA.pl
 | 
			
		||||
/apps/md4.c
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Auto generated headers
 | 
			
		||||
/crypto/buildinf.h
 | 
			
		||||
/crypto/opensslconf.h
 | 
			
		||||
 | 
			
		||||
# Auto generated assembly language source files
 | 
			
		||||
*.s
 | 
			
		||||
!/crypto/bn/asm/pa-risc2.s
 | 
			
		||||
!/crypto/bn/asm/pa-risc2W.s
 | 
			
		||||
crypto/aes/asm/a_win32.asm
 | 
			
		||||
crypto/bf/asm/b_win32.asm
 | 
			
		||||
crypto/bn/asm/bn_win32.asm
 | 
			
		||||
crypto/bn/asm/co_win32.asm
 | 
			
		||||
crypto/bn/asm/mt_win32.asm
 | 
			
		||||
crypto/cast/asm/c_win32.asm
 | 
			
		||||
crypto/cpu_win32.asm
 | 
			
		||||
crypto/des/asm/d_win32.asm
 | 
			
		||||
crypto/des/asm/y_win32.asm
 | 
			
		||||
crypto/md5/asm/m5_win32.asm
 | 
			
		||||
crypto/rc4/asm/r4_win32.asm
 | 
			
		||||
crypto/rc5/asm/r5_win32.asm
 | 
			
		||||
crypto/ripemd/asm/rm_win32.asm
 | 
			
		||||
crypto/sha/asm/s1_win32.asm
 | 
			
		||||
crypto/sha/asm/sha512-sse2.asm
 | 
			
		||||
 | 
			
		||||
# Executables
 | 
			
		||||
/apps/openssl
 | 
			
		||||
/test/sha256t
 | 
			
		||||
/test/sha512t
 | 
			
		||||
/test/gost2814789t
 | 
			
		||||
/test/*test
 | 
			
		||||
/test/fips_aesavs
 | 
			
		||||
/test/fips_desmovs
 | 
			
		||||
/test/fips_dhvs
 | 
			
		||||
/test/fips_drbgvs
 | 
			
		||||
/test/fips_dssvs
 | 
			
		||||
/test/fips_ecdhvs
 | 
			
		||||
/test/fips_ecdsavs
 | 
			
		||||
/test/fips_rngvs
 | 
			
		||||
/test/fips_test_suite
 | 
			
		||||
*.so*
 | 
			
		||||
*.dylib*
 | 
			
		||||
*.dll*
 | 
			
		||||
# Exceptions
 | 
			
		||||
!/test/bctest
 | 
			
		||||
!/crypto/des/times/486-50.sol
 | 
			
		||||
 | 
			
		||||
# Misc auto generated files
 | 
			
		||||
/tools/c_rehash
 | 
			
		||||
/test/evptests.txt
 | 
			
		||||
lib
 | 
			
		||||
Makefile.save
 | 
			
		||||
*.bak
 | 
			
		||||
tags
 | 
			
		||||
TAGS
 | 
			
		||||
cscope.out
 | 
			
		||||
*.d
 | 
			
		||||
 | 
			
		||||
# Windows
 | 
			
		||||
/tmp32dll
 | 
			
		||||
/tmp32dll.dbg
 | 
			
		||||
/out32dll
 | 
			
		||||
/out32dll.dbg
 | 
			
		||||
/inc32
 | 
			
		||||
/MINFO
 | 
			
		||||
ms/bcb.mak
 | 
			
		||||
ms/libeay32.def
 | 
			
		||||
ms/nt.mak
 | 
			
		||||
ms/ntdll.mak
 | 
			
		||||
ms/ssleay32.def
 | 
			
		||||
ms/version32.rc
 | 
			
		||||
@@ -10,13 +10,18 @@ OpenSSL project.
 | 
			
		||||
We would like to identify and thank the following such sponsors for their past
 | 
			
		||||
or current significant support of the OpenSSL project:
 | 
			
		||||
 | 
			
		||||
Major support:
 | 
			
		||||
 | 
			
		||||
	Qualys		http://www.qualys.com/
 | 
			
		||||
 | 
			
		||||
Very significant support:
 | 
			
		||||
 | 
			
		||||
	OpenGear: www.opengear.com
 | 
			
		||||
	OpenGear:	http://www.opengear.com/
 | 
			
		||||
 | 
			
		||||
Significant support:
 | 
			
		||||
 | 
			
		||||
	PSW Group: www.psw.net
 | 
			
		||||
	PSW Group:	http://www.psw.net/
 | 
			
		||||
	Acano Ltd.	http://acano.com/
 | 
			
		||||
 | 
			
		||||
Please note that we ask permission to identify sponsors and that some sponsors
 | 
			
		||||
we consider eligible for inclusion here have requested to remain anonymous.
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ eric (about to go bushwalking for the 4 day easter break :-)
 | 
			
		||||
7-Jan-98
 | 
			
		||||
    - Finally reworked the cipher string to ciphers again, so it
 | 
			
		||||
      works correctly
 | 
			
		||||
    - All the app_data stuff is now ex_data with funcion calls to access.
 | 
			
		||||
    - All the app_data stuff is now ex_data with function calls to access.
 | 
			
		||||
      The index is supplied by a function and 'methods' can be setup
 | 
			
		||||
      for the types that are called on XXX_new/XXX_free.  This lets
 | 
			
		||||
      applications get notified on creation and destruction.  Some of
 | 
			
		||||
@@ -937,7 +937,7 @@ Reasons to start playing with version 0.5.0
 | 
			
		||||
  certificate, it is my aim to use perl5/Tk but I don't have time to do
 | 
			
		||||
  this right now.  It will generate the certificates but the management
 | 
			
		||||
  scripts still need to be written.  This is not a hard task.
 | 
			
		||||
- Things have been cleaned up alot.
 | 
			
		||||
- Things have been cleaned up a lot.
 | 
			
		||||
- Have a look at the enc and dgst programs in the apps directory.
 | 
			
		||||
- It supports v3 of x509 certiticates.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										486
									
								
								Configure
									
									
									
									
									
								
							
							
						
						
									
										486
									
								
								Configure
									
									
									
									
									
								
							@@ -3,6 +3,8 @@ eval 'exec perl -S $0 ${1+"$@"}'
 | 
			
		||||
    if $running_under_some_shell;
 | 
			
		||||
##
 | 
			
		||||
##  Configure -- OpenSSL source tree configuration script
 | 
			
		||||
##  If editing this file, run this command before committing
 | 
			
		||||
##	make -f Makefile.org TABLE
 | 
			
		||||
##
 | 
			
		||||
 | 
			
		||||
require 5.000;
 | 
			
		||||
@@ -10,7 +12,7 @@ use strict;
 | 
			
		||||
 | 
			
		||||
# see INSTALL for instructions.
 | 
			
		||||
 | 
			
		||||
my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimental-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-dso] [no-krb5] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] os/compiler[:flags]\n";
 | 
			
		||||
my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimental-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-dso] [no-krb5] [sctp] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] os/compiler[:flags]\n";
 | 
			
		||||
 | 
			
		||||
# Options:
 | 
			
		||||
#
 | 
			
		||||
@@ -56,10 +58,11 @@ my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimenta
 | 
			
		||||
# [no-]zlib     [don't] compile support for zlib compression.
 | 
			
		||||
# zlib-dynamic	Like "zlib", but the zlib library is expected to be a shared
 | 
			
		||||
#		library and will be loaded in run-time by the OpenSSL library.
 | 
			
		||||
# sctp          include SCTP support
 | 
			
		||||
# 386           generate 80386 code
 | 
			
		||||
# no-sse2	disables IA-32 SSE2 code, above option implies no-sse2
 | 
			
		||||
# no-<cipher>   build without specified algorithm (rsa, idea, rc5, ...)
 | 
			
		||||
# -<xxx> +<xxx> compiler options are passed through 
 | 
			
		||||
# -<xxx> +<xxx> compiler options are passed through
 | 
			
		||||
#
 | 
			
		||||
# DEBUG_SAFESTACK use type-safe stacks to enforce type-safety on stack items
 | 
			
		||||
#		provided to stack calls. Generates unique stack functions for
 | 
			
		||||
@@ -100,10 +103,12 @@ my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimenta
 | 
			
		||||
# AES_ASM	ASE_[en|de]crypt is implemented in assembler
 | 
			
		||||
 | 
			
		||||
# Minimum warning options... any contributions to OpenSSL should at least get
 | 
			
		||||
# past these. 
 | 
			
		||||
# past these.
 | 
			
		||||
 | 
			
		||||
my $gcc_devteam_warn = "-Wall -pedantic -DPEDANTIC -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wshadow -Wformat -Werror -DCRYPTO_MDEBUG_ALL -DCRYPTO_MDEBUG_ABORT -DREF_CHECK -DOPENSSL_NO_DEPRECATED";
 | 
			
		||||
 | 
			
		||||
my $clang_disabled_warnings = "-Wno-language-extension-token -Wno-extended-offsetof -Wno-padded -Wno-shorten-64-to-32 -Wno-format-nonliteral -Wno-missing-noreturn -Wno-unused-parameter -Wno-sign-conversion -Wno-unreachable-code -Wno-conversion -Wno-documentation -Wno-missing-variable-declarations -Wno-cast-align -Wno-incompatible-pointer-types-discards-qualifiers -Wno-missing-variable-declarations -Wno-missing-field-initializers -Wno-unused-macros -Wno-disabled-macro-expansion -Wno-conditional-uninitialized -Wno-switch-enum";
 | 
			
		||||
 | 
			
		||||
my $strict_warnings = 0;
 | 
			
		||||
 | 
			
		||||
my $x86_gcc_des="DES_PTR DES_RISC1 DES_UNROLL";
 | 
			
		||||
@@ -123,27 +128,28 @@ my $tlib="-lnsl -lsocket";
 | 
			
		||||
my $bits1="THIRTY_TWO_BIT ";
 | 
			
		||||
my $bits2="SIXTY_FOUR_BIT ";
 | 
			
		||||
 | 
			
		||||
my $x86_asm="x86cpuid.o:bn-586.o co-586.o x86-mont.o x86-gf2m.o:des-586.o crypt586.o:aes-586.o vpaes-x86.o aesni-x86.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o:cmll-x86.o:ghash-x86.o:e_padlock-x86.o";
 | 
			
		||||
my $x86_asm="x86cpuid.o:bn-586.o co-586.o x86-mont.o x86-gf2m.o::des-586.o crypt586.o:aes-586.o vpaes-x86.o aesni-x86.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o:cmll-x86.o:ghash-x86.o:e_padlock-x86.o";
 | 
			
		||||
 | 
			
		||||
my $x86_elf_asm="$x86_asm:elf";
 | 
			
		||||
 | 
			
		||||
my $x86_64_asm="x86_64cpuid.o:x86_64-gcc.o x86_64-mont.o x86_64-mont5.o x86_64-gf2m.o modexp512-x86_64.o::aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o rc4-md5-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o:ghash-x86_64.o:e_padlock-x86_64.o";
 | 
			
		||||
my $ia64_asm="ia64cpuid.o:bn-ia64.o ia64-mont.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o::rc4-ia64.o rc4_skey.o:::::ghash-ia64.o::void";
 | 
			
		||||
my $sparcv9_asm="sparcv9cap.o sparccpuid.o:bn-sparcv9.o sparcv9-mont.o sparcv9a-mont.o:des_enc-sparc.o fcrypt_b.o:aes_core.o aes_cbc.o aes-sparcv9.o:::sha1-sparcv9.o sha256-sparcv9.o sha512-sparcv9.o:::::::ghash-sparcv9.o::void";
 | 
			
		||||
my $sparcv8_asm=":sparcv8.o:des_enc-sparc.o fcrypt_b.o:::::::::::::void";
 | 
			
		||||
my $alpha_asm="alphacpuid.o:bn_asm.o alpha-mont.o:::::sha1-alpha.o:::::::ghash-alpha.o::void";
 | 
			
		||||
my $mips32_asm=":bn-mips.o::aes_cbc.o aes-mips.o:::sha1-mips.o sha256-mips.o::::::::";
 | 
			
		||||
my $mips64_asm=":bn-mips.o mips-mont.o::aes_cbc.o aes-mips.o:::sha1-mips.o sha256-mips.o sha512-mips.o::::::::";
 | 
			
		||||
my $s390x_asm="s390xcap.o s390xcpuid.o:bn-s390x.o s390x-mont.o s390x-gf2m.o::aes_ctr.o aes-s390x.o:::sha1-s390x.o sha256-s390x.o sha512-s390x.o::rc4-s390x.o:::::ghash-s390x.o:";
 | 
			
		||||
my $armv4_asm="armcap.o armv4cpuid.o:bn_asm.o armv4-mont.o armv4-gf2m.o::aes_cbc.o aes-armv4.o:::sha1-armv4-large.o sha256-armv4.o sha512-armv4.o:::::::ghash-armv4.o::void";
 | 
			
		||||
my $parisc11_asm="pariscid.o:bn_asm.o parisc-mont.o::aes_core.o aes_cbc.o aes-parisc.o:::sha1-parisc.o sha256-parisc.o sha512-parisc.o::rc4-parisc.o:::::ghash-parisc.o::32";
 | 
			
		||||
my $parisc20_asm="pariscid.o:pa-risc2W.o parisc-mont.o::aes_core.o aes_cbc.o aes-parisc.o:::sha1-parisc.o sha256-parisc.o sha512-parisc.o::rc4-parisc.o:::::ghash-parisc.o::64";
 | 
			
		||||
my $ppc32_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o::::::::";
 | 
			
		||||
my $ppc64_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o sha512-ppc.o::::::::";
 | 
			
		||||
my $no_asm=":::::::::::::::void";
 | 
			
		||||
my $x86_64_asm="x86_64cpuid.o:x86_64-gcc.o x86_64-mont.o x86_64-mont5.o x86_64-gf2m.o rsaz_exp.o rsaz-x86_64.o rsaz-avx2.o:ecp_nistz256.o ecp_nistz256-x86_64.o::aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o aesni-sha256-x86_64.o aesni-mb-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o sha1-mb-x86_64.o sha256-mb-x86_64.o::rc4-x86_64.o rc4-md5-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o:ghash-x86_64.o aesni-gcm-x86_64.o:e_padlock-x86_64.o";
 | 
			
		||||
my $ia64_asm="ia64cpuid.o:bn-ia64.o ia64-mont.o:::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o::rc4-ia64.o rc4_skey.o:::::ghash-ia64.o::void";
 | 
			
		||||
my $sparcv9_asm="sparcv9cap.o sparccpuid.o:bn-sparcv9.o sparcv9-mont.o sparcv9a-mont.o vis3-mont.o sparct4-mont.o sparcv9-gf2m.o::des_enc-sparc.o fcrypt_b.o dest4-sparcv9.o:aes_core.o aes_cbc.o aes-sparcv9.o aest4-sparcv9.o::md5-sparcv9.o:sha1-sparcv9.o sha256-sparcv9.o sha512-sparcv9.o::::::camellia.o cmll_misc.o cmll_cbc.o cmllt4-sparcv9.o:ghash-sparcv9.o::void";
 | 
			
		||||
my $sparcv8_asm=":sparcv8.o::des_enc-sparc.o fcrypt_b.o:::::::::::::void";
 | 
			
		||||
my $alpha_asm="alphacpuid.o:bn_asm.o alpha-mont.o::::::sha1-alpha.o:::::::ghash-alpha.o::void";
 | 
			
		||||
my $mips64_asm=":bn-mips.o mips-mont.o:::aes_cbc.o aes-mips.o:::sha1-mips.o sha256-mips.o sha512-mips.o::::::::";
 | 
			
		||||
my $mips32_asm=$mips64_asm; $mips32_asm =~ s/\s*sha512\-mips\.o//;
 | 
			
		||||
my $s390x_asm="s390xcap.o s390xcpuid.o:bn-s390x.o s390x-mont.o s390x-gf2m.o:::aes-s390x.o aes-ctr.o aes-xts.o:::sha1-s390x.o sha256-s390x.o sha512-s390x.o::rc4-s390x.o:::::ghash-s390x.o:";
 | 
			
		||||
my $armv4_asm="armcap.o armv4cpuid.o:bn_asm.o armv4-mont.o armv4-gf2m.o:::aes_cbc.o aes-armv4.o bsaes-armv7.o aesv8-armx.o:::sha1-armv4-large.o sha256-armv4.o sha512-armv4.o:::::::ghash-armv4.o ghashv8-armx.o::void";
 | 
			
		||||
my $aarch64_asm="armcap.o arm64cpuid.o mem_clr.o::::aes_core.o aes_cbc.o aesv8-armx.o:::sha1-armv8.o sha256-armv8.o sha512-armv8.o:::::::ghashv8-armx.o:";
 | 
			
		||||
my $parisc11_asm="pariscid.o:bn_asm.o parisc-mont.o:::aes_core.o aes_cbc.o aes-parisc.o:::sha1-parisc.o sha256-parisc.o sha512-parisc.o::rc4-parisc.o:::::ghash-parisc.o::32";
 | 
			
		||||
my $parisc20_asm="pariscid.o:pa-risc2W.o parisc-mont.o:::aes_core.o aes_cbc.o aes-parisc.o:::sha1-parisc.o sha256-parisc.o sha512-parisc.o::rc4-parisc.o:::::ghash-parisc.o::64";
 | 
			
		||||
my $ppc64_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o:::aes_core.o aes_cbc.o aes-ppc.o vpaes-ppc.o aesp8-ppc.o:::sha1-ppc.o sha256-ppc.o sha512-ppc.o sha256p8-ppc.o sha512p8-ppc.o:::::::ghashp8-ppc.o:";
 | 
			
		||||
my $ppc32_asm=$ppc64_asm;
 | 
			
		||||
my $no_asm="::::::::::::::::void";
 | 
			
		||||
 | 
			
		||||
# As for $BSDthreads. Idea is to maintain "collective" set of flags,
 | 
			
		||||
# which would cover all BSD flavors. -pthread applies to them all, 
 | 
			
		||||
# which would cover all BSD flavors. -pthread applies to them all,
 | 
			
		||||
# but is treated differently. OpenBSD expands is as -D_POSIX_THREAD
 | 
			
		||||
# -lc_r, which is sufficient. FreeBSD 4.x expands it as -lc_r,
 | 
			
		||||
# which has to be accompanied by explicit -D_THREAD_SAFE and
 | 
			
		||||
@@ -151,7 +157,7 @@ my $no_asm=":::::::::::::::void";
 | 
			
		||||
# seems to be sufficient?
 | 
			
		||||
my $BSDthreads="-pthread -D_THREAD_SAFE -D_REENTRANT";
 | 
			
		||||
 | 
			
		||||
#config-string	$cc : $cflags : $unistd : $thread_cflag : $sys_id : $lflags : $bn_ops : $cpuid_obj : $bn_obj : $des_obj : $aes_obj : $bf_obj : $md5_obj : $sha1_obj : $cast_obj : $rc4_obj : $rmd160_obj : $rc5_obj : $wp_obj : $cmll_obj : $modes_obj : $engines_obj : $dso_scheme : $shared_target : $shared_cflag : $shared_ldflag : $shared_extension : $ranlib : $arflags : $multilib
 | 
			
		||||
#config-string	$cc : $cflags : $unistd : $thread_cflag : $sys_id : $lflags : $bn_ops : $cpuid_obj : $bn_obj : $ec_obj : $des_obj : $aes_obj : $bf_obj : $md5_obj : $sha1_obj : $cast_obj : $rc4_obj : $rmd160_obj : $rc5_obj : $wp_obj : $cmll_obj : $modes_obj : $engines_obj : $dso_scheme : $shared_target : $shared_cflag : $shared_ldflag : $shared_extension : $ranlib : $arflags : $multilib
 | 
			
		||||
 | 
			
		||||
my %table=(
 | 
			
		||||
# File 'TABLE' (created by 'make TABLE') contains the data from this list,
 | 
			
		||||
@@ -169,38 +175,46 @@ my %table=(
 | 
			
		||||
"debug-ben",	"gcc:$gcc_devteam_warn -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DDEBUG_SAFESTACK -O2 -pipe::(unknown):::::",
 | 
			
		||||
"debug-ben-openbsd","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::",
 | 
			
		||||
"debug-ben-openbsd-debug","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -g3 -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::",
 | 
			
		||||
"debug-ben-debug",	"gcc:$gcc_devteam_warn -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -g3 -O2 -pipe::(unknown)::::::",
 | 
			
		||||
"debug-ben-debug",	"gcc:$gcc_devteam_warn -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DOPENSSL_NO_HW_PADLOCK -g3 -O2 -pipe::(unknown)::::::",
 | 
			
		||||
"debug-ben-debug-64",	"gcc:$gcc_devteam_warn -Wno-error=overlength-strings -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-ben-debug-64-clang",	"clang:$gcc_devteam_warn -fsanitize=undefined -Wno-error=overlength-strings -Wno-error=extended-offsetof -Wno-error=language-extension-token -Wstrict-overflow -Qunused-arguments -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-ben-debug-64-noopt",	"gcc:$gcc_devteam_warn -Wno-error=overlength-strings -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -pipe::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-ben-macos",	"cc:$gcc_devteam_warn -DOPENSSL_NO_ASM -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch i386 -O3 -DL_ENDIAN -g3 -pipe::(unknown)::::::",
 | 
			
		||||
"debug-ben-no-opt",	"gcc: -Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG -Werror -DL_ENDIAN -DTERMIOS -Wall -g3::(unknown)::::::",
 | 
			
		||||
"debug-ben-strict",	"gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DCONST_STRICT -O2 -Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings -pipe::(unknown)::::::",
 | 
			
		||||
"debug-ben-darwin64","cc:$gcc_devteam_warn -Wno-language-extension-token -Wno-extended-offsetof -arch x86_64 -O3 -DL_ENDIAN -DMD32_REG_T=int -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:$x86_64_asm:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
 | 
			
		||||
"debug-bodo",	"gcc:$gcc_devteam_warn -DBN_DEBUG -DBN_DEBUG_RAND -DCONF_DEBUG -DBIO_PAIR_DEBUG -m64 -DL_ENDIAN -DTERMIO -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"debug-bodo",	"gcc:$gcc_devteam_warn -Wno-error=overlength-strings -DBN_DEBUG -DBN_DEBUG_RAND -DCONF_DEBUG -DBIO_PAIR_DEBUG -m64 -DL_ENDIAN -DTERMIO -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"debug-erbridge",   "gcc:$gcc_devteam_warn -DBN_DEBUG -DCONF_DEBUG -DCRYPTO_MDEBUG -m64 -DL_ENDIAN -DTERMIO -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"debug-ulf", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DBN_DEBUG_RAND -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations:::CYGWIN32:::${no_asm}:win32:cygwin-shared:::.dll",
 | 
			
		||||
"debug-steve64", "gcc:$gcc_devteam_warn -m64 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-steve32", "gcc:$gcc_devteam_warn -m32 -DL_ENDIAN -DCONF_DEBUG -DDEBUG_SAFESTACK -g -pipe::-D_REENTRANT::-rdynamic -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-steve-opt", "gcc:$gcc_devteam_warn -m64 -O3 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-steve64", "gcc:$gcc_devteam_warn -m64 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -Wno-overlength-strings -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-steve32", "gcc:$gcc_devteam_warn -m32 -DL_ENDIAN -DCONF_DEBUG -DDEBUG_SAFESTACK -Wno-overlength-strings -g -pipe::-D_REENTRANT::-rdynamic -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-steve-opt", "gcc:$gcc_devteam_warn -m64 -O3 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -Wno-overlength-strings -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -ggdb -g3 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -ggdb -g3 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-geoff32","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:BN_LLONG:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-geoff64","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-pentium","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -mcpu=pentium -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
 | 
			
		||||
"debug-linux-ppro","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -mcpu=pentiumpro -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
 | 
			
		||||
"debug-linux-elf","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -march=i486 -Wall::-D_REENTRANT::-lefence -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-elf-noefence","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -march=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-ia32-aes", "gcc:-DAES_EXPERIMENTAL -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:x86cpuid.o:bn-586.o co-586.o x86-mont.o:des-586.o crypt586.o:aes_x86core.o aes_cbc.o aesni-x86.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o::ghash-x86.o:e_padlock-x86.o:elf:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-ia32-aes", "gcc:-DAES_EXPERIMENTAL -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:x86cpuid.o:bn-586.o co-586.o x86-mont.o::des-586.o crypt586.o:aes_x86core.o aes_cbc.o aesni-x86.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o::ghash-x86.o:e_padlock-x86.o:elf:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-generic32","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DTERMIO -g -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-generic64","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DTERMIO -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-x86_64","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -m64 -DL_ENDIAN -DTERMIO -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"dist",		"cc:-O::(unknown)::::::",
 | 
			
		||||
"debug-test-64-clang",	"clang:$gcc_devteam_warn -Wno-error=overlength-strings -Wno-error=extended-offsetof -Wno-error=language-extension-token -Wno-error=unused-const-variable -Wstrict-overflow -Qunused-arguments -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"darwin64-debug-test-64-clang",  "clang:-arch x86_64 -DL_ENDIAN $gcc_devteam_warn -Wno-error=overlength-strings -Wno-error=extended-offsetof -Wno-error=language-extension-token -Wno-error=unused-const-variable -Wstrict-overflow -Qunused-arguments -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe::${BSDthreads}:MACOSX::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
 | 
			
		||||
# Basic configs that should work on any (32 and less bit) box
 | 
			
		||||
"gcc",		"gcc:-O3::(unknown):::BN_LLONG:::",
 | 
			
		||||
"cc",		"cc:-O::(unknown)::::::",
 | 
			
		||||
 | 
			
		||||
####VOS Configurations
 | 
			
		||||
"vos-gcc","gcc:-O3 -Wall -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
 | 
			
		||||
"debug-vos-gcc","gcc:-O0 -g -Wall -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
 | 
			
		||||
"vos-gcc","gcc:-O3 -Wall -DOPENSSL_SYSNAME_VOS -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
 | 
			
		||||
"debug-vos-gcc","gcc:-O0 -g -Wall -DOPENSSL_SYSNAME_VOS -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
 | 
			
		||||
 | 
			
		||||
#### Solaris x86 with GNU C setups
 | 
			
		||||
# -DOPENSSL_NO_INLINE_ASM switches off inline assembler. We have to do it
 | 
			
		||||
@@ -218,9 +232,9 @@ my %table=(
 | 
			
		||||
# compiler:-)
 | 
			
		||||
#						<appro@fy.chalmers.se>
 | 
			
		||||
"solaris64-x86_64-gcc","gcc:-m64 -O3 -Wall -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:solaris-shared:-fPIC:-m64 -shared -static-libgcc:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#### Solaris x86 with Sun C setups
 | 
			
		||||
"solaris-x86-cc","cc:-fast -O -Xa::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-x86-cc","cc:-fast -xarch=generic -O -Xa::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris64-x86_64-cc","cc:-fast -xarch=amd64 -xstrconst -Xa -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:solaris-shared:-KPIC:-xarch=amd64 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
 | 
			
		||||
 | 
			
		||||
#### SPARC Solaris with GNU C setups
 | 
			
		||||
@@ -240,14 +254,10 @@ my %table=(
 | 
			
		||||
"solaris-sparcv7-cc","cc:-xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-sparcv8-cc","cc:-xarch=v8 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-sparcv9-cc","cc:-xtarget=ultra -xarch=v8plus -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-xarch=v9 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):/usr/ccs/bin/ar rs::/64",
 | 
			
		||||
"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-xarch=v9 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
 | 
			
		||||
####
 | 
			
		||||
"debug-solaris-sparcv8-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xarch=v8 -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-solaris-sparcv9-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xtarget=ultra -xarch=v8plus -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 
 | 
			
		||||
 | 
			
		||||
#### SunOS configs, assuming sparc for the gcc one.
 | 
			
		||||
#"sunos-cc", "cc:-O4 -DNOPROTO -DNOCONST::(unknown):SUNOS::DES_UNROLL:${no_asm}::",
 | 
			
		||||
"sunos-gcc","gcc:-O3 -mv8 -Dssize_t=int::(unknown):SUNOS::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL DES_PTR DES_RISC1:${no_asm}::",
 | 
			
		||||
"debug-solaris-sparcv9-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xtarget=ultra -xarch=v8plus -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#### IRIX 5.x configs
 | 
			
		||||
# -mips2 flag is added by ./config when appropriate.
 | 
			
		||||
@@ -293,9 +303,9 @@ my %table=(
 | 
			
		||||
# Since there is mention of this in shlib/hpux10-cc.sh
 | 
			
		||||
"hpux-parisc-cc-o4","cc:-Ae +O4 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::-D_REENTRANT::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:${no_asm}:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc1_1-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:${parisc11_asm}:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc2-gcc","gcc:-march=2.0 -O3 -DB_ENDIAN -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL DES_RISC1::pa-risc2.o::::::::::::::void:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux64-parisc2-gcc","gcc:-O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::pa-risc2W.o::::::::::::::void:dlfcn:hpux-shared:-fpic:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_64",
 | 
			
		||||
"hpux-parisc1_1-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:${parisc11_asm}:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa1.1",
 | 
			
		||||
"hpux-parisc2-gcc","gcc:-march=2.0 -O3 -DB_ENDIAN -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL DES_RISC1:".eval{my $asm=$parisc20_asm;$asm=~s/2W\./2\./;$asm=~s/:64/:32/;$asm}.":dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_32",
 | 
			
		||||
"hpux64-parisc2-gcc","gcc:-O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::pa-risc2W.o:::::::::::::::void:dlfcn:hpux-shared:-fpic:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_64",
 | 
			
		||||
 | 
			
		||||
# More attempts at unified 10.X and 11.X targets for HP C compiler.
 | 
			
		||||
#
 | 
			
		||||
@@ -303,7 +313,7 @@ my %table=(
 | 
			
		||||
# Kevin Steves <ks@hp.se>
 | 
			
		||||
"hpux-parisc-cc","cc:+O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::-D_REENTRANT::-Wl,+s -ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc1_1-cc","cc:+DA1.1 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-Wl,+s -ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${parisc11_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa1.1",
 | 
			
		||||
"hpux-parisc2-cc","cc:+DA2.0 +DS2.0 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::pa-risc2.o::::::::::::::void:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc2-cc","cc:+DA2.0 +DS2.0 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:".eval{my $asm=$parisc20_asm;$asm=~s/2W\./2\./;$asm=~s/:64/:32/;$asm}.":dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_32",
 | 
			
		||||
"hpux64-parisc2-cc","cc:+DD64 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${parisc20_asm}:dlfcn:hpux-shared:+Z:+DD64 -b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_64",
 | 
			
		||||
 | 
			
		||||
# HP/UX IA-64 targets
 | 
			
		||||
@@ -313,7 +323,7 @@ my %table=(
 | 
			
		||||
"hpux64-ia64-cc","cc:-Ae +DD64 +O3 +Olit=all -z -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX DES_UNROLL DES_RISC1 DES_INT:${ia64_asm}:dlfcn:hpux-shared:+Z:+DD64 -b:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/hpux64",
 | 
			
		||||
# GCC builds...
 | 
			
		||||
"hpux-ia64-gcc","gcc:-O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX DES_UNROLL DES_RISC1 DES_INT:${ia64_asm}:dlfcn:hpux-shared:-fpic:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/hpux32",
 | 
			
		||||
"hpux64-ia64-gcc","gcc:-mlp64 -O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX DES_UNROLL DES_RISC1 DES_INT:${ia64_asm}:dlfcn:hpux-shared:-fpic:-mlp64 -shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/hpux64", 
 | 
			
		||||
"hpux64-ia64-gcc","gcc:-mlp64 -O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX DES_UNROLL DES_RISC1 DES_INT:${ia64_asm}:dlfcn:hpux-shared:-fpic:-mlp64 -shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/hpux64",
 | 
			
		||||
 | 
			
		||||
# Legacy HPUX 9.X configs...
 | 
			
		||||
"hpux-cc",	"cc:-DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY -Ae +ESlit +O2 -z::(unknown)::-Wl,+s -ldld:DES_PTR DES_UNROLL DES_RISC1:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
@@ -342,20 +352,57 @@ my %table=(
 | 
			
		||||
# throw in -D[BL]_ENDIAN, whichever appropriate...
 | 
			
		||||
"linux-generic32","gcc:-DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ppc",	"gcc:-DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc32_asm}:linux32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# It's believed that majority of ARM toolchains predefine appropriate -march.
 | 
			
		||||
# If you compiler does not, do complement config command line with one!
 | 
			
		||||
 | 
			
		||||
#######################################################################
 | 
			
		||||
# Note that -march is not among compiler options in below linux-armv4
 | 
			
		||||
# target line. Not specifying one is intentional to give you choice to:
 | 
			
		||||
#
 | 
			
		||||
# a) rely on your compiler default by not specifying one;
 | 
			
		||||
# b) specify your target platform explicitly for optimal performance,
 | 
			
		||||
#    e.g. -march=armv6 or -march=armv7-a;
 | 
			
		||||
# c) build "universal" binary that targets *range* of platforms by
 | 
			
		||||
#    specifying minimum and maximum supported architecture;
 | 
			
		||||
#
 | 
			
		||||
# As for c) option. It actually makes no sense to specify maximum to be
 | 
			
		||||
# less than ARMv7, because it's the least requirement for run-time
 | 
			
		||||
# switch between platform-specific code paths. And without run-time
 | 
			
		||||
# switch performance would be equivalent to one for minimum. Secondly,
 | 
			
		||||
# there are some natural limitations that you'd have to accept and
 | 
			
		||||
# respect. Most notably you can *not* build "universal" binary for
 | 
			
		||||
# big-endian platform. This is because ARMv7 processor always picks
 | 
			
		||||
# instructions in little-endian order. Another similar limitation is
 | 
			
		||||
# that -mthumb can't "cross" -march=armv6t2 boundary, because that's
 | 
			
		||||
# where it became Thumb-2. Well, this limitation is a bit artificial,
 | 
			
		||||
# because it's not really impossible, but it's deemed too tricky to
 | 
			
		||||
# support. And of course you have to be sure that your binutils are
 | 
			
		||||
# actually up to the task of handling maximum target platform. With all
 | 
			
		||||
# this in mind here is an example of how to configure "universal" build:
 | 
			
		||||
#
 | 
			
		||||
#       ./Configure linux-armv4 -march=armv6 -D__ARM_MAX_ARCH__=8
 | 
			
		||||
#
 | 
			
		||||
"linux-armv4",	"gcc:-DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-aarch64","gcc:-DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${aarch64_asm}:linux64:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# Configure script adds minimally required -march for assembly support,
 | 
			
		||||
# if no -march was specified at command line. mips32 and mips64 below
 | 
			
		||||
# refer to contemporary MIPS Architecture specifications, MIPS32 and
 | 
			
		||||
# MIPS64, rather than to kernel bitness.
 | 
			
		||||
"linux-mips32",	"gcc:-mabi=32 -DTERMIO -O3 -Wall -DBN_DIV3W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-mips64",   "gcc:-mabi=n32 -DTERMIO -O3 -Wall -DBN_DIV3W::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips64_asm}:n32:dlfcn:linux-shared:-fPIC:-mabi=n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::32",
 | 
			
		||||
"linux64-mips64",   "gcc:-mabi=64 -DTERMIO -O3 -Wall -DBN_DIV3W::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips64_asm}:64:dlfcn:linux-shared:-fPIC:-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
#### IA-32 targets...
 | 
			
		||||
"linux-ia32-icc",	"icc:-DL_ENDIAN -DTERMIO -O2 -no_cpprt::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia32-icc",	"icc:-DL_ENDIAN -DTERMIO -O2::-D_REENTRANT::-ldl -no_cpprt:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-elf",	"gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-aout",	"gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -march=i486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out",
 | 
			
		||||
####
 | 
			
		||||
"linux-generic64","gcc:-DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ppc64",	"gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc64_asm}:linux64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux-ppc64le","gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:$ppc64_asm:linux64le:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::",
 | 
			
		||||
"linux-ia64",	"gcc:-DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia64-ecc","ecc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia64-icc","icc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia64-icc","icc:-DL_ENDIAN -DTERMIO -O2 -Wall::-D_REENTRANT::-ldl -no_cpprt:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-x86_64",	"gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux-x86_64-clang",	"clang: -m64 -DL_ENDIAN -DTERMIO -O3 -Weverything $clang_disabled_warnings -Qunused-arguments::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux-x86_64-icc", "icc:-DL_ENDIAN -DTERMIO -O2::-D_REENTRANT::-ldl -no_cpprt:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux-x32",	"gcc:-mx32 -DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-mx32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::x32:",
 | 
			
		||||
"linux64-s390x",	"gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${s390x_asm}:64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
#### So called "highgprs" target for z/Architecture CPUs
 | 
			
		||||
# "Highgprs" is kernel feature first implemented in Linux 2.6.32, see
 | 
			
		||||
@@ -397,11 +444,15 @@ my %table=(
 | 
			
		||||
"linux-alpha+bwx-gcc","gcc:-O3 -DL_ENDIAN -DTERMIO::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${alpha_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-alpha-ccc","ccc:-fast -readonly_strings -DL_ENDIAN -DTERMIO::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
 | 
			
		||||
"linux-alpha+bwx-ccc","ccc:-fast -readonly_strings -DL_ENDIAN -DTERMIO::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
 | 
			
		||||
#
 | 
			
		||||
# TI_CGT_C6000_7.3.x is a requirement
 | 
			
		||||
"linux-c64xplus","cl6x:--linux -ea=.s -eo=.o -mv6400+ -o2 -ox -ms -pden -DOPENSSL_SMALL_FOOTPRINT::-D_REENTRANT:::BN_LLONG:c64xpluscpuid.o:bn-c64xplus.o c64xplus-gf2m.o:::aes-c64xplus.o aes_cbc.o aes_ctr.o:::sha1-c64xplus.o sha256-c64xplus.o sha512-c64xplus.o::rc4-c64xplus.o:::::ghash-c64xplus.o::void:dlfcn:linux-shared:--pic:-z --sysv --shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):true",
 | 
			
		||||
 | 
			
		||||
# Android: linux-* but without -DTERMIO and pointers to headers and libs.
 | 
			
		||||
"android","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"android-x86","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:".eval{my $asm=${x86_elf_asm};$asm=~s/:elf/:android/;$asm}.":dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"android-armv7","gcc:-march=armv7-a -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"android-mips","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#### *BSD [do see comment about ${BSDthreads} above!]
 | 
			
		||||
"BSD-generic32","gcc:-DTERMIOS -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
@@ -423,18 +474,11 @@ my %table=(
 | 
			
		||||
"nextstep",	"cc:-O -Wall:<libc.h>:(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::",
 | 
			
		||||
"nextstep3.3",	"cc:-O3 -Wall:<libc.h>:(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::",
 | 
			
		||||
 | 
			
		||||
# NCR MP-RAS UNIX ver 02.03.01
 | 
			
		||||
"ncr-scde","cc:-O6 -Xa -Hoff=BEHAVED -686 -Hwide -Hiw::(unknown)::-lsocket -lnsl -lc89:${x86_gcc_des} ${x86_gcc_opts}:::",
 | 
			
		||||
 | 
			
		||||
# QNX
 | 
			
		||||
"qnx4",	"cc:-DL_ENDIAN -DTERMIO::(unknown):::${x86_gcc_des} ${x86_gcc_opts}:",
 | 
			
		||||
"QNX6",       "gcc:-DTERMIOS::::-lsocket::${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"QNX6-i386",  "gcc:-DL_ENDIAN -DTERMIOS -O2 -Wall::::-lsocket:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
# BeOS
 | 
			
		||||
"beos-x86-r5",   "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall::-D_REENTRANT:BEOS:-lbe -lnet:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:beos:beos-shared:-fPIC -DPIC:-shared:.so",
 | 
			
		||||
"beos-x86-bone", "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall::-D_REENTRANT:BEOS:-lbe -lbind -lsocket:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:beos:beos-shared:-fPIC:-shared:.so",
 | 
			
		||||
 | 
			
		||||
#### SCO/Caldera targets.
 | 
			
		||||
#
 | 
			
		||||
# Originally we had like unixware-*, unixware-*-pentium, unixware-*-p6, etc.
 | 
			
		||||
@@ -449,57 +493,20 @@ my %table=(
 | 
			
		||||
# UnixWare 2.0x fails destest with -O.
 | 
			
		||||
"unixware-2.0","cc:-DFILIO_H -DNO_STRINGS_H::-Kthread::-lsocket -lnsl -lresolv -lx:${x86_gcc_des} ${x86_gcc_opts}:::",
 | 
			
		||||
"unixware-2.1","cc:-O -DFILIO_H::-Kthread::-lsocket -lnsl -lresolv -lx:${x86_gcc_des} ${x86_gcc_opts}:::",
 | 
			
		||||
"unixware-7","cc:-O -DFILIO_H -Kalloca::-Kthread::-lsocket -lnsl:BN_LLONG MD2_CHAR RC4_INDEX ${x86_gcc_des}:${x86_elf_asm}:dlfcn:svr5-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"unixware-7-gcc","gcc:-DL_ENDIAN -DFILIO_H -O3 -fomit-frame-pointer -march=pentium -Wall::-D_REENTRANT::-lsocket -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:gnu-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"unixware-7","cc:-O -DFILIO_H -Kalloca::-Kthread::-lsocket -lnsl:BN_LLONG MD2_CHAR RC4_INDEX ${x86_gcc_des}:${x86_elf_asm}-1:dlfcn:svr5-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"unixware-7-gcc","gcc:-DL_ENDIAN -DFILIO_H -O3 -fomit-frame-pointer -march=pentium -Wall::-D_REENTRANT::-lsocket -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}-1:dlfcn:gnu-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# SCO 5 - Ben Laurie <ben@algroup.co.uk> says the -O breaks the SCO cc.
 | 
			
		||||
"sco5-cc",  "cc:-belf::(unknown)::-lsocket -lnsl:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:svr3-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"sco5-gcc",  "gcc:-O3 -fomit-frame-pointer::(unknown)::-lsocket -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:svr3-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"sco5-cc",  "cc:-belf::(unknown)::-lsocket -lnsl:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}-1:dlfcn:svr3-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"sco5-gcc",  "gcc:-O3 -fomit-frame-pointer::(unknown)::-lsocket -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}-1:dlfcn:svr3-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#### IBM's AIX.
 | 
			
		||||
"aix3-cc",  "cc:-O -DB_ENDIAN -qmaxmem=16384::(unknown):AIX::BN_LLONG RC4_CHAR:::",
 | 
			
		||||
"aix-gcc",  "gcc:-O -DB_ENDIAN::-pthread:AIX::BN_LLONG RC4_CHAR:${ppc32_asm}:aix32:dlfcn:aix-shared::-shared -Wl,-G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X32",
 | 
			
		||||
"aix64-gcc","gcc:-maix64 -O -DB_ENDIAN::-pthread:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:${ppc64_asm}:aix64:dlfcn:aix-shared::-maix64 -shared -Wl,-G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X64",
 | 
			
		||||
"aix-gcc",  "gcc:-O -DB_ENDIAN::-pthread:AIX::BN_LLONG RC4_CHAR:$ppc32_asm:aix32:dlfcn:aix-shared::-shared -Wl,-G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X32",
 | 
			
		||||
"aix64-gcc","gcc:-maix64 -O -DB_ENDIAN::-pthread:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:$ppc64_asm:aix64:dlfcn:aix-shared::-maix64 -shared -Wl,-G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X64",
 | 
			
		||||
# Below targets assume AIX 5. Idea is to effectively disregard $OBJECT_MODE
 | 
			
		||||
# at build time. $OBJECT_MODE is respected at ./config stage!
 | 
			
		||||
"aix-cc",   "cc:-q32 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded:AIX::BN_LLONG RC4_CHAR:${ppc32_asm}:aix32:dlfcn:aix-shared::-q32 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 32",
 | 
			
		||||
"aix64-cc", "cc:-q64 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:${ppc64_asm}:aix64:dlfcn:aix-shared::-q64 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 64",
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Cray T90 and similar (SDSC)
 | 
			
		||||
# It's Big-endian, but the algorithms work properly when B_ENDIAN is NOT
 | 
			
		||||
# defined.  The T90 ints and longs are 8 bytes long, and apparently the
 | 
			
		||||
# B_ENDIAN code assumes 4 byte ints.  Fortunately, the non-B_ENDIAN and
 | 
			
		||||
# non L_ENDIAN code aligns the bytes in each word correctly.
 | 
			
		||||
#
 | 
			
		||||
# The BIT_FIELD_LIMITS define is to avoid two fatal compiler errors:
 | 
			
		||||
#'Taking the address of a bit field is not allowed. '
 | 
			
		||||
#'An expression with bit field exists as the operand of "sizeof" '
 | 
			
		||||
# (written by Wayne Schroeder <schroede@SDSC.EDU>)
 | 
			
		||||
#
 | 
			
		||||
# j90 is considered the base machine type for unicos machines,
 | 
			
		||||
# so this configuration is now called "cray-j90" ...
 | 
			
		||||
"cray-j90", "cc: -DBIT_FIELD_LIMITS -DTERMIOS::(unknown):CRAY::SIXTY_FOUR_BIT_LONG DES_INT:::",
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Cray T3E (Research Center Juelich, beckman@acl.lanl.gov)
 | 
			
		||||
#
 | 
			
		||||
# The BIT_FIELD_LIMITS define was written for the C90 (it seems).  I added
 | 
			
		||||
# another use.  Basically, the problem is that the T3E uses some bit fields
 | 
			
		||||
# for some st_addr stuff, and then sizeof and address-of fails
 | 
			
		||||
# I could not use the ams/alpha.o option because the Cray assembler, 'cam'
 | 
			
		||||
# did not like it.
 | 
			
		||||
"cray-t3e", "cc: -DBIT_FIELD_LIMITS -DTERMIOS::(unknown):CRAY::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT:::",
 | 
			
		||||
 | 
			
		||||
# DGUX, 88100.
 | 
			
		||||
"dgux-R3-gcc",	"gcc:-O3 -fomit-frame-pointer::(unknown):::RC4_INDEX DES_UNROLL:::",
 | 
			
		||||
"dgux-R4-gcc",	"gcc:-O3 -fomit-frame-pointer::(unknown)::-lnsl -lsocket:RC4_INDEX DES_UNROLL:::",
 | 
			
		||||
"dgux-R4-x86-gcc",	"gcc:-O3 -fomit-frame-pointer -DL_ENDIAN::(unknown)::-lnsl -lsocket:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
 | 
			
		||||
 | 
			
		||||
# Sinix/ReliantUNIX RM400
 | 
			
		||||
# NOTE: The CDS++ Compiler up to V2.0Bsomething has the IRIX_CC_BUG optimizer problem. Better use -g  */
 | 
			
		||||
"ReliantUNIX","cc:-KPIC -g -DTERMIOS -DB_ENDIAN::-Kthread:SNI:-lsocket -lnsl -lc -L/usr/ucblib -lucb:BN_LLONG DES_PTR DES_RISC2 DES_UNROLL BF_PTR:${no_asm}:dlfcn:reliantunix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"SINIX","cc:-O::(unknown):SNI:-lsocket -lnsl -lc -L/usr/ucblib -lucb:RC4_INDEX RC4_CHAR:::",
 | 
			
		||||
"SINIX-N","/usr/ucb/cc:-O2 -misaligned::(unknown)::-lucb:RC4_INDEX RC4_CHAR:::",
 | 
			
		||||
"aix-cc",   "cc:-q32 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded -D_THREAD_SAFE:AIX::BN_LLONG RC4_CHAR:$ppc32_asm:aix32:dlfcn:aix-shared::-q32 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 32",
 | 
			
		||||
"aix64-cc", "cc:-q64 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded -D_THREAD_SAFE:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:$ppc64_asm:aix64:dlfcn:aix-shared::-q64 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 64",
 | 
			
		||||
 | 
			
		||||
# SIEMENS BS2000/OSD: an EBCDIC-based mainframe
 | 
			
		||||
"BS2000-OSD","c89:-O -XLLML -XLLMK -XL -DB_ENDIAN -DTERMIOS -DCHARSET_EBCDIC::(unknown)::-lsocket -lnsl:THIRTY_TWO_BIT DES_PTR DES_UNROLL MD2_CHAR RC4_INDEX RC4_CHAR BF_PTR:::",
 | 
			
		||||
@@ -513,15 +520,15 @@ my %table=(
 | 
			
		||||
# Visual C targets
 | 
			
		||||
#
 | 
			
		||||
# Win64 targets, WIN64I denotes IA-64 and WIN64A - AMD64
 | 
			
		||||
"VC-WIN64I","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o ia64-mont.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ghash-ia64.o::ias:win32",
 | 
			
		||||
"VC-WIN64I","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o ia64-mont.o:::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ghash-ia64.o::ias:win32",
 | 
			
		||||
"VC-WIN64A","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64A::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:".eval{my $asm=$x86_64_asm;$asm=~s/x86_64-gcc\.o/bn_asm.o/;$asm}.":auto:win32",
 | 
			
		||||
"debug-VC-WIN64I","cl:-W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ghash-ia64.o::ias:win32",
 | 
			
		||||
"debug-VC-WIN64I","cl:-W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o:::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ghash-ia64.o::ias:win32",
 | 
			
		||||
"debug-VC-WIN64A","cl:-W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64A::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:".eval{my $asm=$x86_64_asm;$asm=~s/x86_64-gcc\.o/bn_asm.o/;$asm}.":auto:win32",
 | 
			
		||||
# x86 Win32 target defaults to ANSI API, if you want UNICODE, complement
 | 
			
		||||
# 'perl Configure VC-WIN32' with '-DUNICODE -D_UNICODE'
 | 
			
		||||
"VC-WIN32","cl:-W3 -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32",
 | 
			
		||||
# Unified CE target
 | 
			
		||||
"debug-VC-WIN32","cl:-W3 -WX -Gs0 -GF -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32",
 | 
			
		||||
"debug-VC-WIN32","cl:-W3 -Gs0 -GF -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32",
 | 
			
		||||
"VC-CE","cl::::WINCE::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${no_asm}:win32",
 | 
			
		||||
 | 
			
		||||
# Borland C++ 4.5
 | 
			
		||||
@@ -538,12 +545,13 @@ my %table=(
 | 
			
		||||
# with itself, Applink is never engaged and can as well be omitted.
 | 
			
		||||
"mingw64", "gcc:-mno-cygwin -DL_ENDIAN -O3 -Wall -DWIN32_LEAN_AND_MEAN -DUNICODE -D_UNICODE::-D_MT:MINGW64:-lws2_32 -lgdi32 -lcrypt32:SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:${x86_64_asm}:mingw64:win32:cygwin-shared:-D_WINDLL:-mno-cygwin:.dll.a",
 | 
			
		||||
 | 
			
		||||
# UWIN 
 | 
			
		||||
# UWIN
 | 
			
		||||
"UWIN", "cc:-DTERMIOS -DL_ENDIAN -O -Wall:::UWIN::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:win32",
 | 
			
		||||
 | 
			
		||||
# Cygwin
 | 
			
		||||
"Cygwin-pre1.3", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown):CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:win32",
 | 
			
		||||
"Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall:::CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:coff:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
 | 
			
		||||
"Cygwin-x86_64", "gcc:-DTERMIOS -DL_ENDIAN -O3 -Wall:::CYGWIN32::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:mingw64:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
 | 
			
		||||
"debug-Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror:::CYGWIN32:::${no_asm}:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
 | 
			
		||||
 | 
			
		||||
# NetWare from David Ward (dsward@novell.com)
 | 
			
		||||
@@ -570,21 +578,35 @@ my %table=(
 | 
			
		||||
# K&R C is no longer supported; you need gcc on old Ultrix installations
 | 
			
		||||
##"ultrix","cc:-O2 -DNOPROTO -DNOCONST -DL_ENDIAN::(unknown):::::::",
 | 
			
		||||
 | 
			
		||||
##### MacOS X (a.k.a. Rhapsody or Darwin) setup
 | 
			
		||||
"rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown):MACOSX_RHAPSODY::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}::",
 | 
			
		||||
##### MacOS X (a.k.a. Darwin) setup
 | 
			
		||||
"darwin-ppc-cc","cc:-arch ppc -O3 -DB_ENDIAN -Wa,-force_cpusubtype_ALL::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin64-ppc-cc","cc:-arch ppc64 -O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc64_asm}:osx64:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin-i386-cc","cc:-arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin-i386-cc","cc:-arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:".eval{my $asm=$x86_asm;$asm=~s/cast\-586\.o//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"debug-darwin-i386-cc","cc:-arch i386 -g3 -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin64-x86_64-cc","cc:-arch x86_64 -O3 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"debug-darwin64-x86_64-cc","cc:-arch x86_64 -ggdb -g2 -O0 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin64-x86_64-cc","cc:-arch x86_64 -O3 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"debug-darwin-ppc-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DB_ENDIAN -g -Wall -O::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
# iPhoneOS/iOS
 | 
			
		||||
#
 | 
			
		||||
# It takes three prior-set environment variables to make it work:
 | 
			
		||||
#
 | 
			
		||||
# CROSS_COMPILE=/where/toolchain/is/usr/bin/ [note ending slash]
 | 
			
		||||
# CROSS_TOP=/where/SDKs/are
 | 
			
		||||
# CROSS_SDK=iPhoneOSx.y.sdk
 | 
			
		||||
#
 | 
			
		||||
# Exact paths vary with Xcode releases, but for couple of last ones
 | 
			
		||||
# they would look like this:
 | 
			
		||||
#
 | 
			
		||||
# CROSS_COMPILE=`xcode-select --print-path`/Toolchains/XcodeDefault.xctoolchain/usr/bin/
 | 
			
		||||
# CROSS_TOP=`xcode-select --print-path`/Platforms/iPhoneOS.platform/Developer
 | 
			
		||||
# CROSS_SDK=iPhoneOS7.0.sdk
 | 
			
		||||
#
 | 
			
		||||
"iphoneos-cross","cc:-O3 -isysroot \$(CROSS_TOP)/SDKs/\$(CROSS_SDK) -fomit-frame-pointer -fno-common::-D_REENTRANT:iOS:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"ios64-cross","cc:-O3 -arch arm64 -mios-version-min=7.0.0 -isysroot \$(CROSS_TOP)/SDKs/\$(CROSS_SDK) -fno-common::-D_REENTRANT:iOS:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR -RC4_CHUNK DES_INT DES_UNROLL -BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
 | 
			
		||||
##### A/UX
 | 
			
		||||
"aux3-gcc","gcc:-O2 -DTERMIO::(unknown):AUX:-lbsd:RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
 | 
			
		||||
 | 
			
		||||
##### Sony NEWS-OS 4.x
 | 
			
		||||
"newsos4-gcc","gcc:-O -DB_ENDIAN::(unknown):NEWS4:-lmld -liberty:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::",
 | 
			
		||||
 | 
			
		||||
##### GNU Hurd
 | 
			
		||||
"hurd-x86",  "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -march=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC",
 | 
			
		||||
 | 
			
		||||
@@ -601,9 +623,6 @@ my %table=(
 | 
			
		||||
"vxworks-simlinux","ccpentium:-B\$(WIND_BASE)/host/\$(WIND_HOST_TYPE)/lib/gcc-lib/ -D_VSB_CONFIG_FILE=\"\$(WIND_BASE)/target/lib/h/config/vsbConfig.h\" -DL_ENDIAN -DCPU=SIMLINUX -DTOOL_FAMILY=gnu -DTOOL=gnu -fno-builtin -fno-defer-pop -DNO_STRINGS_H -I\$(WIND_BASE)/target/h -I\$(WIND_BASE)/target/h/wrn/coreip -DOPENSSL_NO_HW_PADLOCK:::VXWORKS:-r::${no_asm}::::::ranlibpentium:",
 | 
			
		||||
"vxworks-mips","ccmips:-mrtp -mips2 -O -G 0 -B\$(WIND_BASE)/host/\$(WIND_HOST_TYPE)/lib/gcc-lib/ -D_VSB_CONFIG_FILE=\"\$(WIND_BASE)/target/lib/h/config/vsbConfig.h\" -DCPU=MIPS32 -msoft-float -mno-branch-likely -DTOOL_FAMILY=gnu -DTOOL=gnu -fno-builtin -fno-defer-pop -DNO_STRINGS_H -I\$(WIND_BASE)/target/usr/h -I\$(WIND_BASE)/target/h/wrn/coreip::-D_REENTRANT:VXWORKS:-Wl,--defsym,__wrs_rtp_base=0xe0000000 -L \$(WIND_BASE)/target/usr/lib/mips/MIPSI32/sfcommon::${mips32_asm}:o32::::::ranlibmips:",
 | 
			
		||||
 | 
			
		||||
##### Compaq Non-Stop Kernel (Tandem)
 | 
			
		||||
"tandem-c89","c89:-Ww -D__TANDEM -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1 -D_TANDEM_SOURCE -DB_ENDIAN::(unknown):::THIRTY_TWO_BIT:::",
 | 
			
		||||
 | 
			
		||||
# uClinux
 | 
			
		||||
"uClinux-dist","$ENV{'CC'}:\$(CFLAGS)::-D_REENTRANT::\$(LDFLAGS) \$(LDLIBS):BN_LLONG:${no_asm}:$ENV{'LIBSSL_dlfcn'}:linux-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):$ENV{'RANLIB'}::",
 | 
			
		||||
"uClinux-dist64","$ENV{'CC'}:\$(CFLAGS)::-D_REENTRANT::\$(LDFLAGS) \$(LDLIBS):SIXTY_FOUR_BIT_LONG:${no_asm}:$ENV{'LIBSSL_dlfcn'}:linux-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):$ENV{'RANLIB'}::",
 | 
			
		||||
@@ -613,7 +632,7 @@ my %table=(
 | 
			
		||||
my @MK1MF_Builds=qw(VC-WIN64I VC-WIN64A
 | 
			
		||||
		    debug-VC-WIN64I debug-VC-WIN64A
 | 
			
		||||
		    VC-NT VC-CE VC-WIN32 debug-VC-WIN32
 | 
			
		||||
		    BC-32 
 | 
			
		||||
		    BC-32
 | 
			
		||||
		    netware-clib netware-clib-bsdsock
 | 
			
		||||
		    netware-libc netware-libc-bsdsock);
 | 
			
		||||
 | 
			
		||||
@@ -627,6 +646,7 @@ my $idx_lflags = $idx++;
 | 
			
		||||
my $idx_bn_ops = $idx++;
 | 
			
		||||
my $idx_cpuid_obj = $idx++;
 | 
			
		||||
my $idx_bn_obj = $idx++;
 | 
			
		||||
my $idx_ec_obj = $idx++;
 | 
			
		||||
my $idx_des_obj = $idx++;
 | 
			
		||||
my $idx_aes_obj = $idx++;
 | 
			
		||||
my $idx_bf_obj = $idx++;
 | 
			
		||||
@@ -658,8 +678,6 @@ my $install_prefix= "$ENV{'INSTALL_PREFIX'}";
 | 
			
		||||
my $cross_compile_prefix="";
 | 
			
		||||
my $fipslibdir="/usr/local/ssl/fips-2.0/lib/";
 | 
			
		||||
my $nofipscanistercheck=0;
 | 
			
		||||
my $fipscanisterinternal="n";
 | 
			
		||||
my $fipscanisteronly = 0;
 | 
			
		||||
my $baseaddr="0xFB00000";
 | 
			
		||||
my $no_threads=0;
 | 
			
		||||
my $threads=0;
 | 
			
		||||
@@ -700,37 +718,26 @@ my $fips=0;
 | 
			
		||||
# All of the following is disabled by default (RC5 was enabled before 0.9.8):
 | 
			
		||||
 | 
			
		||||
my %disabled = ( # "what"         => "comment" [or special keyword "experimental"]
 | 
			
		||||
		 "deprecated" => "default",
 | 
			
		||||
		 "ec_nistp_64_gcc_128" => "default",
 | 
			
		||||
		 "gmp"		  => "default",
 | 
			
		||||
		 "jpake"          => "experimental",
 | 
			
		||||
		 "md2"            => "default",
 | 
			
		||||
		 "rc5"            => "default",
 | 
			
		||||
		 "rfc3779"	  => "default",
 | 
			
		||||
		 "sctp"       => "default",
 | 
			
		||||
		 "shared"         => "default",
 | 
			
		||||
		 "ssl-trace"	  => "default",
 | 
			
		||||
		 "store"	  => "experimental",
 | 
			
		||||
		 "unit-test"	  => "default",
 | 
			
		||||
		 "zlib"           => "default",
 | 
			
		||||
		 "zlib-dynamic"   => "default"
 | 
			
		||||
	       );
 | 
			
		||||
my @experimental = ();
 | 
			
		||||
 | 
			
		||||
# If ssl directory missing assume truncated FIPS tarball
 | 
			
		||||
if (!-d "ssl")
 | 
			
		||||
	{
 | 
			
		||||
	print STDERR "Auto Configuring fipsonly\n";
 | 
			
		||||
	$fips = 1;
 | 
			
		||||
	$nofipscanistercheck = 1;
 | 
			
		||||
	$fipslibdir="";
 | 
			
		||||
	$fipscanisterinternal="y";
 | 
			
		||||
	$fipscanisteronly = 2;
 | 
			
		||||
	if (! -f "crypto/bn/bn_gf2m.c" )
 | 
			
		||||
		{
 | 
			
		||||
		$disabled{ec2m} = "forced";
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# This is what $depflags will look like with the above defaults
 | 
			
		||||
# (we need this to see if we should advise the user to run "make depend"):
 | 
			
		||||
my $default_depflags = " -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_STORE";
 | 
			
		||||
my $default_depflags = " -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST";
 | 
			
		||||
 | 
			
		||||
# Explicit "no-..." options will be collected in %disabled along with the defaults.
 | 
			
		||||
# To remove something from %disabled, use "enable-foo" (unless it's experimental).
 | 
			
		||||
@@ -788,6 +795,7 @@ PROCESS_ARGS:
 | 
			
		||||
 | 
			
		||||
		# rewrite some options in "enable-..." form
 | 
			
		||||
		s /^-?-?shared$/enable-shared/;
 | 
			
		||||
		s /^sctp$/enable-sctp/;
 | 
			
		||||
		s /^threads$/enable-threads/;
 | 
			
		||||
		s /^zlib$/enable-zlib/;
 | 
			
		||||
		s /^zlib-dynamic$/enable-zlib-dynamic/;
 | 
			
		||||
@@ -798,18 +806,22 @@ PROCESS_ARGS:
 | 
			
		||||
				{
 | 
			
		||||
				if ($1 eq "ssl")
 | 
			
		||||
					{
 | 
			
		||||
					$disabled{"ssl2"} = "option(ssl)";
 | 
			
		||||
					$disabled{"ssl3"} = "option(ssl)";
 | 
			
		||||
					}
 | 
			
		||||
				elsif ($1 eq "tls")
 | 
			
		||||
					{
 | 
			
		||||
					$disabled{"tls1"} = "option(tls)"
 | 
			
		||||
					}
 | 
			
		||||
				elsif ($1 eq "ssl3-method")
 | 
			
		||||
					{
 | 
			
		||||
					$disabled{"ssl3-method"} = "option(ssl)";
 | 
			
		||||
					$disabled{"ssl3"} = "option(ssl)";
 | 
			
		||||
					}
 | 
			
		||||
				else
 | 
			
		||||
					{
 | 
			
		||||
					$disabled{$1} = "option";
 | 
			
		||||
					}
 | 
			
		||||
				}			
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^enable-(.+)$/ || /^experimental-(.+)$/)
 | 
			
		||||
			{
 | 
			
		||||
@@ -872,43 +884,9 @@ PROCESS_ARGS:
 | 
			
		||||
			$fips = 1;
 | 
			
		||||
			$nofipscanistercheck = 1;
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^fipscheck$/)
 | 
			
		||||
			{
 | 
			
		||||
			if ($fipscanisteronly != 2)
 | 
			
		||||
				{
 | 
			
		||||
				print STDERR <<"EOF";
 | 
			
		||||
ERROR: FIPS not autodetected. Not running from restricted tarball??
 | 
			
		||||
EOF
 | 
			
		||||
				exit(1);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^fipscanisteronly$/)
 | 
			
		||||
			{
 | 
			
		||||
			$fips = 1;
 | 
			
		||||
			$nofipscanistercheck = 1;
 | 
			
		||||
			$fipslibdir="";
 | 
			
		||||
			$fipscanisterinternal="y";
 | 
			
		||||
			$fipscanisteronly = 1;
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^fipscanisterbuild$/)
 | 
			
		||||
			{
 | 
			
		||||
			$fips = 1;
 | 
			
		||||
			$nofipscanistercheck = 1;
 | 
			
		||||
			$fipslibdir="";
 | 
			
		||||
			$fipscanisterinternal="y";
 | 
			
		||||
			$fipscanisteronly = 1;
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^[-+]/)
 | 
			
		||||
			{
 | 
			
		||||
			if (/^-[lL](.*)$/ or /^-Wl,/)
 | 
			
		||||
				{
 | 
			
		||||
				$libs.=$_." ";
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^-[^-]/ or /^\+/)
 | 
			
		||||
				{
 | 
			
		||||
				$flags.=$_." ";
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^--prefix=(.*)$/)
 | 
			
		||||
			if (/^--prefix=(.*)$/)
 | 
			
		||||
				{
 | 
			
		||||
				$prefix=$1;
 | 
			
		||||
				}
 | 
			
		||||
@@ -948,10 +926,14 @@ EOF
 | 
			
		||||
				{
 | 
			
		||||
				$cross_compile_prefix=$1;
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
			elsif (/^-[lL](.*)$/ or /^-Wl,/)
 | 
			
		||||
				{
 | 
			
		||||
				print STDERR $usage;
 | 
			
		||||
				exit(1);
 | 
			
		||||
				$libs.=$_." ";
 | 
			
		||||
				}
 | 
			
		||||
			else	# common if (/^[-+]/), just pass down...
 | 
			
		||||
				{
 | 
			
		||||
				$_ =~ s/%([0-9a-f]{1,2})/chr(hex($1))/gei;
 | 
			
		||||
				$flags.=$_." ";
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		elsif ($_ =~ /^([^:]+):(.+)$/)
 | 
			
		||||
@@ -1012,12 +994,6 @@ if (defined($disabled{"ec"}))
 | 
			
		||||
	$disabled{"ecdh"} = "forced";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# SSL 2.0 requires MD5 and RSA
 | 
			
		||||
if (defined($disabled{"md5"}) || defined($disabled{"rsa"}))
 | 
			
		||||
	{
 | 
			
		||||
	$disabled{"ssl2"} = "forced";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# SSL 3.0 and TLS requires MD5 and SHA and either RSA or DSA+DH
 | 
			
		||||
if (defined($disabled{"md5"}) || defined($disabled{"sha"})
 | 
			
		||||
    || (defined($disabled{"rsa"})
 | 
			
		||||
@@ -1038,10 +1014,11 @@ if (defined($disabled{"ec"}) || defined($disabled{"dsa"})
 | 
			
		||||
	$disabled{"gost"} = "forced";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# SRP requires TLSEXT
 | 
			
		||||
# SRP and HEARTBEATS require TLSEXT
 | 
			
		||||
if (defined($disabled{"tlsext"}))
 | 
			
		||||
	{
 | 
			
		||||
	$disabled{"srp"} = "forced";
 | 
			
		||||
	$disabled{"heartbeats"} = "forced";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if ($target eq "TABLE") {
 | 
			
		||||
@@ -1103,7 +1080,7 @@ foreach (sort (keys %disabled))
 | 
			
		||||
			{
 | 
			
		||||
			$openssl_other_defines .= "#define OPENSSL_NO_$ALGO\n";
 | 
			
		||||
			print " OPENSSL_NO_$ALGO";
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
			if (/^err$/)	{ $flags .= "-DOPENSSL_NO_ERR "; }
 | 
			
		||||
			elsif (/^asm$/)	{ $no_asm = 1; }
 | 
			
		||||
			}
 | 
			
		||||
@@ -1117,6 +1094,8 @@ foreach (sort (keys %disabled))
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				push @skip, $algo;
 | 
			
		||||
				# fix-up crypto/directory name(s)
 | 
			
		||||
				@skip[$#skip]="whrlpool" if $algo eq "whirlpool";
 | 
			
		||||
				print " (skip dir)";
 | 
			
		||||
 | 
			
		||||
				$depflags .= " -DOPENSSL_NO_$ALGO";
 | 
			
		||||
@@ -1198,6 +1177,7 @@ my $lflags = $fields[$idx_lflags];
 | 
			
		||||
my $bn_ops = $fields[$idx_bn_ops];
 | 
			
		||||
my $cpuid_obj = $fields[$idx_cpuid_obj];
 | 
			
		||||
my $bn_obj = $fields[$idx_bn_obj];
 | 
			
		||||
my $ec_obj = $fields[$idx_ec_obj];
 | 
			
		||||
my $des_obj = $fields[$idx_des_obj];
 | 
			
		||||
my $aes_obj = $fields[$idx_aes_obj];
 | 
			
		||||
my $bf_obj = $fields[$idx_bf_obj];
 | 
			
		||||
@@ -1243,6 +1223,12 @@ if ($target =~ /^mingw/ && `$cc --target-help 2>&1` !~ m/\-mno\-cygwin/m)
 | 
			
		||||
	$shared_ldflag =~ s/\-mno\-cygwin\s*//;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if ($target =~ /linux.*\-mips/ && !$no_asm && $flags !~ /\-m(ips|arch=)/) {
 | 
			
		||||
	# minimally required architecture flags for assembly modules
 | 
			
		||||
	$cflags="-mips2 $cflags" if ($target =~ /mips32/);
 | 
			
		||||
	$cflags="-mips3 $cflags" if ($target =~ /mips64/);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
my $no_shared_warn=0;
 | 
			
		||||
my $no_user_cflags=0;
 | 
			
		||||
 | 
			
		||||
@@ -1363,13 +1349,13 @@ else
 | 
			
		||||
#			$thread_defines .= "#define $def\n";
 | 
			
		||||
#			}
 | 
			
		||||
#		}
 | 
			
		||||
	}	
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
$lflags="$libs$lflags" if ($libs ne "");
 | 
			
		||||
 | 
			
		||||
if ($no_asm)
 | 
			
		||||
	{
 | 
			
		||||
	$cpuid_obj=$bn_obj=
 | 
			
		||||
	$cpuid_obj=$bn_obj=$ec_obj=
 | 
			
		||||
	$des_obj=$aes_obj=$bf_obj=$cast_obj=$rc4_obj=$rc5_obj=$cmll_obj=
 | 
			
		||||
	$modes_obj=$sha1_obj=$md5_obj=$rmd160_obj=$wp_obj=$engines_obj="";
 | 
			
		||||
	$cflags=~s/\-D[BL]_ENDIAN//		if ($fips);
 | 
			
		||||
@@ -1411,6 +1397,12 @@ if ($zlib)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#Build the library with OPENSSL_USE_DEPRECATED if deprecation is not disabled
 | 
			
		||||
if(!defined($disabled{"deprecated"}))
 | 
			
		||||
	{
 | 
			
		||||
	$cflags = "-DOPENSSL_USE_DEPRECATED $cflags";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# You will find shlib_mark1 and shlib_mark2 explained in Makefile.org
 | 
			
		||||
my $shared_mark = "";
 | 
			
		||||
if ($shared_target eq "")
 | 
			
		||||
@@ -1456,6 +1448,7 @@ if ($target =~ /\-icc$/)	# Intel C compiler
 | 
			
		||||
		}
 | 
			
		||||
	if ($iccver>=8)
 | 
			
		||||
		{
 | 
			
		||||
		$cflags=~s/\-KPIC/-fPIC/;
 | 
			
		||||
		# Eliminate unnecessary dependency from libirc.a. This is
 | 
			
		||||
		# essential for shared library support, as otherwise
 | 
			
		||||
		# apps/openssl can end up in endless loop upon startup...
 | 
			
		||||
@@ -1463,12 +1456,17 @@ if ($target =~ /\-icc$/)	# Intel C compiler
 | 
			
		||||
		}
 | 
			
		||||
	if ($iccver>=9)
 | 
			
		||||
		{
 | 
			
		||||
		$cflags.=" -i-static";
 | 
			
		||||
		$cflags=~s/\-no_cpprt/-no-cpprt/;
 | 
			
		||||
		$lflags.=" -i-static";
 | 
			
		||||
		$lflags=~s/\-no_cpprt/-no-cpprt/;
 | 
			
		||||
		}
 | 
			
		||||
	if ($iccver>=10)
 | 
			
		||||
		{
 | 
			
		||||
		$cflags=~s/\-i\-static/-static-intel/;
 | 
			
		||||
		$lflags=~s/\-i\-static/-static-intel/;
 | 
			
		||||
		}
 | 
			
		||||
	if ($iccver>=11)
 | 
			
		||||
		{
 | 
			
		||||
		$cflags.=" -no-intel-extensions";	# disable Cilk
 | 
			
		||||
		$lflags=~s/\-no\-cpprt/-no-cxxlib/;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1515,11 +1513,6 @@ $cflags.=" -DOPENSSL_BN_ASM_GF2m" if ($bn_obj =~ /-gf2m/);
 | 
			
		||||
if ($fips)
 | 
			
		||||
	{
 | 
			
		||||
	$openssl_other_defines.="#define OPENSSL_FIPS\n";
 | 
			
		||||
	if ($fipscanisterinternal eq "y")
 | 
			
		||||
		{
 | 
			
		||||
		$openssl_other_defines.="#define OPENSSL_FIPSCANISTER\n";
 | 
			
		||||
		$cflags = "-DOPENSSL_FIPSCANISTER $cflags";
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
$cpuid_obj="mem_clr.o"	unless ($cpuid_obj =~ /\.o$/);
 | 
			
		||||
@@ -1553,12 +1546,13 @@ if ($rmd160_obj =~ /\.o$/)
 | 
			
		||||
	}
 | 
			
		||||
if ($aes_obj =~ /\.o$/)
 | 
			
		||||
	{
 | 
			
		||||
	$cflags.=" -DAES_ASM";
 | 
			
		||||
	# aes_ctr.o is not a real file, only indication that assembler
 | 
			
		||||
	$cflags.=" -DAES_ASM" if ($aes_obj =~ m/\baes\-/);;
 | 
			
		||||
	# aes-ctr.o is not a real file, only indication that assembler
 | 
			
		||||
	# module implements AES_ctr32_encrypt...
 | 
			
		||||
	$cflags.=" -DAES_CTR_ASM" if ($aes_obj =~ s/\s*aes_ctr\.o//);
 | 
			
		||||
	$cflags.=" -DAES_CTR_ASM" if ($aes_obj =~ s/\s*aes\-ctr\.o//);
 | 
			
		||||
	# aes-xts.o indicates presence of AES_xts_[en|de]crypt...
 | 
			
		||||
	$cflags.=" -DAES_XTS_ASM" if ($aes_obj =~ s/\s*aes\-xts\.o//);
 | 
			
		||||
	$aes_obj =~ s/\s*(vpaes|aesni)\-x86\.o//g if ($no_sse2);
 | 
			
		||||
	$aes_obj =~ s/\s*(vp|bs)aes-\w*\.o//g if ($fipscanisterinternal eq "y");
 | 
			
		||||
	$cflags.=" -DVPAES_ASM" if ($aes_obj =~ m/vpaes/);
 | 
			
		||||
	$cflags.=" -DBSAES_ASM" if ($aes_obj =~ m/bsaes/);
 | 
			
		||||
	}
 | 
			
		||||
@@ -1566,7 +1560,7 @@ else	{
 | 
			
		||||
	$aes_obj=$aes_enc;
 | 
			
		||||
	}
 | 
			
		||||
$wp_obj="" if ($wp_obj =~ /mmx/ && $processor eq "386");
 | 
			
		||||
if ($wp_obj =~ /\.o$/)
 | 
			
		||||
if ($wp_obj =~ /\.o$/ && !$disabled{"whirlpool"})
 | 
			
		||||
	{
 | 
			
		||||
	$cflags.=" -DWHIRLPOOL_ASM";
 | 
			
		||||
	}
 | 
			
		||||
@@ -1574,10 +1568,14 @@ else	{
 | 
			
		||||
	$wp_obj="wp_block.o";
 | 
			
		||||
	}
 | 
			
		||||
$cmll_obj=$cmll_enc	unless ($cmll_obj =~ /.o$/);
 | 
			
		||||
if ($modes_obj =~ /ghash/)
 | 
			
		||||
if ($modes_obj =~ /ghash\-/)
 | 
			
		||||
	{
 | 
			
		||||
	$cflags.=" -DGHASH_ASM";
 | 
			
		||||
	}
 | 
			
		||||
if ($ec_obj =~ /ecp_nistz256/)
 | 
			
		||||
	{
 | 
			
		||||
	$cflags.=" -DECP_NISTZ256_ASM";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# "Stringify" the C flags string.  This permits it to be made part of a string
 | 
			
		||||
# and works as well on command lines.
 | 
			
		||||
@@ -1618,42 +1616,19 @@ if ($shlib_version_number =~ /(^[0-9]*)\.([0-9\.]*)/)
 | 
			
		||||
if ($strict_warnings)
 | 
			
		||||
	{
 | 
			
		||||
	my $wopt;
 | 
			
		||||
	die "ERROR --strict-warnings requires gcc" unless ($cc =~ /gcc$/);
 | 
			
		||||
	die "ERROR --strict-warnings requires gcc or clang" unless ($cc =~ /gcc$/ or $cc =~ /clang$/);
 | 
			
		||||
	foreach $wopt (split /\s+/, $gcc_devteam_warn)
 | 
			
		||||
		{
 | 
			
		||||
		$cflags .= " $wopt" unless ($cflags =~ /$wopt/)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if ($fipscanisterinternal eq "y")
 | 
			
		||||
	{
 | 
			
		||||
	open(IN,"<fips/fips_auth.in") || die "can't open fips_auth.in";
 | 
			
		||||
	open(OUT,">fips/fips_auth.h") || die "can't open fips_auth.h";
 | 
			
		||||
	while(<IN>)
 | 
			
		||||
		{
 | 
			
		||||
		s/FIPS_AUTH_KEY.*$/FIPS_AUTH_KEY $fips_auth_key/ if defined $fips_auth_key;
 | 
			
		||||
		s/FIPS_AUTH_CRYPTO_OFFICER.*$/FIPS_AUTH_CRYPTO_OFFICER $fips_auth_officer/ if defined $fips_auth_officer;
 | 
			
		||||
		s/FIPS_AUTH_CRYPTO_USER.*$/FIPS_AUTH_CRYPTO_USER $fips_auth_user/ if defined $fips_auth_user;
 | 
			
		||||
		print OUT $_;
 | 
			
		||||
		}
 | 
			
		||||
	close IN;
 | 
			
		||||
	close OUT;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
my $mforg = $fipscanisteronly ? "Makefile.fips" : "Makefile.org";
 | 
			
		||||
 | 
			
		||||
open(IN,"<$mforg") || die "unable to read $mforg:$!\n";
 | 
			
		||||
open(IN,"<Makefile.org") || die "unable to read Makefile.org:$!\n";
 | 
			
		||||
unlink("$Makefile.new") || die "unable to remove old $Makefile.new:$!\n" if -e "$Makefile.new";
 | 
			
		||||
open(OUT,">$Makefile.new") || die "unable to create $Makefile.new:$!\n";
 | 
			
		||||
print OUT "### Generated automatically from $mforg by Configure.\n\n";
 | 
			
		||||
print OUT "### Generated automatically from Makefile.org by Configure.\n\n";
 | 
			
		||||
my $sdirs=0;
 | 
			
		||||
 | 
			
		||||
if ($fipscanisteronly)
 | 
			
		||||
	{
 | 
			
		||||
	$aes_obj =~ s/aesni-sha1-x86_64.o//;
 | 
			
		||||
	$bn_obj =~ s/modexp512-x86_64.o//;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
while (<IN>)
 | 
			
		||||
	{
 | 
			
		||||
	chomp;
 | 
			
		||||
@@ -1697,7 +1672,7 @@ while (<IN>)
 | 
			
		||||
		s/^CC=.*$/CC= $cc/;
 | 
			
		||||
		s/^AR=\s*ar/AR= $ar/;
 | 
			
		||||
		s/^RANLIB=.*/RANLIB= $ranlib/;
 | 
			
		||||
		s/^MAKEDEPPROG=.*$/MAKEDEPPROG= $cc/ if $cc eq "gcc";
 | 
			
		||||
		s/^MAKEDEPPROG=.*$/MAKEDEPPROG= $cc/ if $cc eq "gcc" || ($cc eq 'cc' && $target =~ /darwin/);
 | 
			
		||||
		}
 | 
			
		||||
	s/^CFLAG=.*$/CFLAG= $cflags/;
 | 
			
		||||
	s/^DEPFLAG=.*$/DEPFLAG=$depflags/;
 | 
			
		||||
@@ -1706,6 +1681,7 @@ while (<IN>)
 | 
			
		||||
	s/^EXE_EXT=.*$/EXE_EXT= $exe_ext/;
 | 
			
		||||
	s/^CPUID_OBJ=.*$/CPUID_OBJ= $cpuid_obj/;
 | 
			
		||||
	s/^BN_ASM=.*$/BN_ASM= $bn_obj/;
 | 
			
		||||
	s/^EC_ASM=.*$/EC_ASM= $ec_obj/;
 | 
			
		||||
	s/^DES_ENC=.*$/DES_ENC= $des_obj/;
 | 
			
		||||
	s/^AES_ENC=.*$/AES_ENC= $aes_obj/;
 | 
			
		||||
	s/^BF_ENC=.*$/BF_ENC= $bf_obj/;
 | 
			
		||||
@@ -1731,7 +1707,6 @@ while (<IN>)
 | 
			
		||||
	s/^FIPSCANLIB=.*/FIPSCANLIB=libcrypto/ if $fips;
 | 
			
		||||
	s/^SHARED_FIPS=.*/SHARED_FIPS=/;
 | 
			
		||||
	s/^SHLIBDIRS=.*/SHLIBDIRS= crypto ssl/;
 | 
			
		||||
	s/^FIPSCANISTERINTERNAL=.*/FIPSCANISTERINTERNAL=$fipscanisterinternal/;
 | 
			
		||||
	s/^BASEADDR=.*/BASEADDR=$baseaddr/;
 | 
			
		||||
	s/^SHLIB_TARGET=.*/SHLIB_TARGET=$shared_target/;
 | 
			
		||||
	s/^SHLIB_MARK=.*/SHLIB_MARK=$shared_mark/;
 | 
			
		||||
@@ -1755,10 +1730,6 @@ while (<IN>)
 | 
			
		||||
		s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.\$(SHLIB_MAJOR).dylib .dylib/;
 | 
			
		||||
		}
 | 
			
		||||
	s/^SHARED_LDFLAGS=.*/SHARED_LDFLAGS=$shared_ldflag/;
 | 
			
		||||
	if ($fipscanisteronly && exists $disabled{"ec2m"})
 | 
			
		||||
		{
 | 
			
		||||
		next if (/ec2_/ || /bn_gf2m/);
 | 
			
		||||
		}
 | 
			
		||||
	print OUT $_."\n";
 | 
			
		||||
	}
 | 
			
		||||
close(IN);
 | 
			
		||||
@@ -1771,6 +1742,7 @@ print "CFLAG         =$cflags\n";
 | 
			
		||||
print "EX_LIBS       =$lflags\n";
 | 
			
		||||
print "CPUID_OBJ     =$cpuid_obj\n";
 | 
			
		||||
print "BN_ASM        =$bn_obj\n";
 | 
			
		||||
print "EC_ASM        =$ec_obj\n";
 | 
			
		||||
print "DES_ENC       =$des_obj\n";
 | 
			
		||||
print "AES_ENC       =$aes_obj\n";
 | 
			
		||||
print "BF_ENC        =$bf_obj\n";
 | 
			
		||||
@@ -1844,6 +1816,9 @@ open(OUT,'>crypto/opensslconf.h.new') || die "unable to create crypto/opensslcon
 | 
			
		||||
print OUT "/* opensslconf.h */\n";
 | 
			
		||||
print OUT "/* WARNING: Generated automatically from opensslconf.h.in by Configure. */\n\n";
 | 
			
		||||
 | 
			
		||||
print OUT "#ifdef  __cplusplus\n";
 | 
			
		||||
print OUT "extern \"C\" {\n";
 | 
			
		||||
print OUT "#endif\n";
 | 
			
		||||
print OUT "/* OpenSSL was configured with the following options: */\n";
 | 
			
		||||
my $openssl_algorithm_defines_trans = $openssl_algorithm_defines;
 | 
			
		||||
$openssl_experimental_defines =~ s/^\s*#\s*define\s+OPENSSL_NO_(.*)/#ifndef OPENSSL_EXPERIMENTAL_$1\n# ifndef OPENSSL_NO_$1\n#  define OPENSSL_NO_$1\n# endif\n#endif/mg;
 | 
			
		||||
@@ -1948,6 +1923,9 @@ while (<IN>)
 | 
			
		||||
		{ print OUT $_; }
 | 
			
		||||
	}
 | 
			
		||||
close(IN);
 | 
			
		||||
print OUT "#ifdef  __cplusplus\n";
 | 
			
		||||
print OUT "}\n";
 | 
			
		||||
print OUT "#endif\n";
 | 
			
		||||
close(OUT);
 | 
			
		||||
rename("crypto/opensslconf.h","crypto/opensslconf.h.bak") || die "unable to rename crypto/opensslconf.h\n" if -e "crypto/opensslconf.h";
 | 
			
		||||
rename("crypto/opensslconf.h.new","crypto/opensslconf.h") || die "unable to rename crypto/opensslconf.h.new\n";
 | 
			
		||||
@@ -1974,8 +1952,8 @@ print "RC4_CHUNK is unsigned long long\n" if $rc4_chunk==2;
 | 
			
		||||
print "MD2 uses u$type[$md2_int]\n" if $md2_int != $def_int;
 | 
			
		||||
print "IDEA uses u$type[$idea_int]\n" if $idea_int != $def_int;
 | 
			
		||||
print "RC2 uses u$type[$rc2_int]\n" if $rc2_int != $def_int;
 | 
			
		||||
print "BF_PTR used\n" if $bf_ptr == 1; 
 | 
			
		||||
print "BF_PTR2 used\n" if $bf_ptr == 2; 
 | 
			
		||||
print "BF_PTR used\n" if $bf_ptr == 1;
 | 
			
		||||
print "BF_PTR2 used\n" if $bf_ptr == 2;
 | 
			
		||||
 | 
			
		||||
if($IsMK1MF) {
 | 
			
		||||
	open (OUT,">crypto/buildinf.h") || die "Can't open buildinf.h";
 | 
			
		||||
@@ -1995,11 +1973,9 @@ EOF
 | 
			
		||||
	$make_targets .= " links" if $symlink;
 | 
			
		||||
	$make_targets .= " depend" if $depflags ne $default_depflags && $make_depend;
 | 
			
		||||
	$make_targets .= " gentests" if $symlink;
 | 
			
		||||
	(system $make_command.$make_targets) == 0 or exit $?
 | 
			
		||||
	(system $make_command.$make_targets) == 0 or die "make $make_targets failed"
 | 
			
		||||
		if $make_targets ne "";
 | 
			
		||||
	if ( $fipscanisteronly )
 | 
			
		||||
		{}
 | 
			
		||||
	elsif ( $perl =~ m@^/@) {
 | 
			
		||||
	if ( $perl =~ m@^/@) {
 | 
			
		||||
	    &dofile("tools/c_rehash",$perl,'^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";', '^my \$prefix;$', 'my $prefix = "' . $prefix . '";');
 | 
			
		||||
	    &dofile("apps/CA.pl",$perl,'^#!/', '#!%s');
 | 
			
		||||
	} else {
 | 
			
		||||
@@ -2007,7 +1983,7 @@ EOF
 | 
			
		||||
	    &dofile("tools/c_rehash",'/usr/local/bin/perl','^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";',  '^my \$prefix;$', 'my $prefix = "' . $prefix . '";');
 | 
			
		||||
	    &dofile("apps/CA.pl",'/usr/local/bin/perl','^#!/', '#!%s');
 | 
			
		||||
	}
 | 
			
		||||
	if ($depflags ne $default_depflags && !$make_depend && !$fipscanisteronly) {
 | 
			
		||||
	if ($depflags ne $default_depflags && !$make_depend) {
 | 
			
		||||
		print <<EOF;
 | 
			
		||||
 | 
			
		||||
Since you've disabled or enabled at least one algorithm, you need to do
 | 
			
		||||
@@ -2053,7 +2029,7 @@ BEGIN
 | 
			
		||||
#if defined(FIPS)
 | 
			
		||||
	    VALUE "Comments", "WARNING: TEST VERSION ONLY ***NOT*** FIPS 140-2 VALIDATED.\\0"
 | 
			
		||||
#endif
 | 
			
		||||
	    // Required:	    
 | 
			
		||||
	    // Required:
 | 
			
		||||
	    VALUE "CompanyName", "The OpenSSL Project, http://www.openssl.org/\\0"
 | 
			
		||||
#if defined(FIPS)
 | 
			
		||||
	    VALUE "FileDescription", "TEST UNVALIDATED FIPS140-2 DLL\\0"
 | 
			
		||||
@@ -2089,7 +2065,7 @@ END
 | 
			
		||||
EOF
 | 
			
		||||
	close(OUT);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
print <<EOF;
 | 
			
		||||
 | 
			
		||||
Configured for $target.
 | 
			
		||||
@@ -2112,21 +2088,6 @@ libraries on this platform, they will at least look at it and try their best
 | 
			
		||||
(but please first make sure you have tried with a current version of OpenSSL).
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
print <<\EOF if ($fipscanisterinternal eq "y");
 | 
			
		||||
 | 
			
		||||
WARNING: OpenSSL has been configured using unsupported option(s) to internally
 | 
			
		||||
generate a fipscanister.o object module for TESTING PURPOSES ONLY; that
 | 
			
		||||
compiled module is NOT FIPS 140-2 validated and CANNOT be used to replace the
 | 
			
		||||
OpenSSL FIPS Object Module as identified by the CMVP
 | 
			
		||||
(http://csrc.nist.gov/cryptval/) in any application requiring the use of FIPS
 | 
			
		||||
140-2 validated software. 
 | 
			
		||||
 | 
			
		||||
This is a test OpenSSL 2.0 FIPS module.
 | 
			
		||||
 | 
			
		||||
See the file README.FIPS for details of how to build a test library.
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
exit(0);
 | 
			
		||||
 | 
			
		||||
sub usage
 | 
			
		||||
@@ -2199,14 +2160,14 @@ sub print_table_entry
 | 
			
		||||
	{
 | 
			
		||||
	my $target = shift;
 | 
			
		||||
 | 
			
		||||
	(my $cc,my $cflags,my $unistd,my $thread_cflag,my $sys_id,my $lflags,
 | 
			
		||||
	my $bn_ops,my $cpuid_obj,my $bn_obj,my $des_obj,my $aes_obj, my $bf_obj,
 | 
			
		||||
	my $md5_obj,my $sha1_obj,my $cast_obj,my $rc4_obj,my $rmd160_obj,
 | 
			
		||||
	my $rc5_obj,my $wp_obj,my $cmll_obj,my $modes_obj, my $engines_obj,
 | 
			
		||||
	my $perlasm_scheme,my $dso_scheme,my $shared_target,my $shared_cflag,
 | 
			
		||||
	my $shared_ldflag,my $shared_extension,my $ranlib,my $arflags,my $multilib)=
 | 
			
		||||
	my ($cc, $cflags, $unistd, $thread_cflag, $sys_id, $lflags,
 | 
			
		||||
	    $bn_ops, $cpuid_obj, $bn_obj, $ec_obj, $des_obj, $aes_obj, $bf_obj,
 | 
			
		||||
	    $md5_obj, $sha1_obj, $cast_obj, $rc4_obj, $rmd160_obj,
 | 
			
		||||
	    $rc5_obj, $wp_obj, $cmll_obj, $modes_obj, $engines_obj,
 | 
			
		||||
	    $perlasm_scheme, $dso_scheme, $shared_target, $shared_cflag,
 | 
			
		||||
	    $shared_ldflag, $shared_extension, $ranlib, $arflags, $multilib)=
 | 
			
		||||
	split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
	print <<EOF
 | 
			
		||||
 | 
			
		||||
*** $target
 | 
			
		||||
@@ -2219,6 +2180,7 @@ sub print_table_entry
 | 
			
		||||
\$bn_ops       = $bn_ops
 | 
			
		||||
\$cpuid_obj    = $cpuid_obj
 | 
			
		||||
\$bn_obj       = $bn_obj
 | 
			
		||||
\$ec_obj       = $ec_obj
 | 
			
		||||
\$des_obj      = $des_obj
 | 
			
		||||
\$aes_obj      = $aes_obj
 | 
			
		||||
\$bf_obj       = $bf_obj
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										133
									
								
								FAQ
									
									
									
									
									
								
							
							
						
						
									
										133
									
								
								FAQ
									
									
									
									
									
								
							@@ -10,6 +10,7 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* Why aren't tools like 'autoconf' and 'libtool' used?
 | 
			
		||||
* What is an 'engine' version?
 | 
			
		||||
* How do I check the authenticity of the OpenSSL distribution?
 | 
			
		||||
* How does the versioning scheme work?
 | 
			
		||||
 | 
			
		||||
[LEGAL] Legal questions
 | 
			
		||||
 | 
			
		||||
@@ -34,6 +35,7 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* What is a "128 bit certificate"? Can I create one with OpenSSL?
 | 
			
		||||
* Why does OpenSSL set the authority key identifier extension incorrectly?
 | 
			
		||||
* How can I set up a bundle of commercial root CA certificates?
 | 
			
		||||
* Some secure servers 'hang' with OpenSSL 1.0.1, is this a bug?
 | 
			
		||||
 | 
			
		||||
[BUILD] Questions about building and testing OpenSSL
 | 
			
		||||
 | 
			
		||||
@@ -74,6 +76,7 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* Why does Valgrind complain about the use of uninitialized data?
 | 
			
		||||
* Why doesn't a memory BIO work when a file does?
 | 
			
		||||
* Where are the declarations and implementations of d2i_X509() etc?
 | 
			
		||||
* When debugging I observe SIGILL during OpenSSL initialization: why?
 | 
			
		||||
 | 
			
		||||
===============================================================================
 | 
			
		||||
 | 
			
		||||
@@ -82,11 +85,10 @@ OpenSSL  -  Frequently Asked Questions
 | 
			
		||||
* Which is the current version of OpenSSL?
 | 
			
		||||
 | 
			
		||||
The current version is available from <URL: http://www.openssl.org>.
 | 
			
		||||
OpenSSL 1.0.0e was released on Sep 6th, 2011.
 | 
			
		||||
 | 
			
		||||
In addition to the current stable release, you can also access daily
 | 
			
		||||
snapshots of the OpenSSL development version at <URL:
 | 
			
		||||
ftp://ftp.openssl.org/snapshot/>, or get it by anonymous CVS access.
 | 
			
		||||
ftp://ftp.openssl.org/snapshot/>, or get it by anonymous Git access.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Where is the documentation?
 | 
			
		||||
@@ -108,12 +110,9 @@ In addition, you can read the most current versions at
 | 
			
		||||
<URL: http://www.openssl.org/docs/>. Note that the online documents refer
 | 
			
		||||
to the very latest development versions of OpenSSL and may include features
 | 
			
		||||
not present in released versions. If in doubt refer to the documentation
 | 
			
		||||
that came with the version of OpenSSL you are using.
 | 
			
		||||
 | 
			
		||||
For information on parts of libcrypto that are not yet documented, you
 | 
			
		||||
might want to read Ariel Glenn's documentation on SSLeay 0.9, OpenSSL's
 | 
			
		||||
predecessor, at <URL: http://www.columbia.edu/~ariel/ssleay/>.  Much
 | 
			
		||||
of this still applies to OpenSSL.
 | 
			
		||||
that came with the version of OpenSSL you are using. The pod format
 | 
			
		||||
documentation is included in each OpenSSL distribution under the docs
 | 
			
		||||
directory.
 | 
			
		||||
 | 
			
		||||
There is some documentation about certificate extensions and PKCS#12
 | 
			
		||||
in doc/openssl.txt
 | 
			
		||||
@@ -134,7 +133,7 @@ OpenSSL.  Information on the OpenSSL mailing lists is available from
 | 
			
		||||
* Where can I get a compiled version of OpenSSL?
 | 
			
		||||
 | 
			
		||||
You can finder pointers to binary distributions in
 | 
			
		||||
<URL: http://www.openssl.org/related/binaries.html> .
 | 
			
		||||
<URL: http://www.openssl.org/about/binaries.html> .
 | 
			
		||||
 | 
			
		||||
Some applications that use OpenSSL are distributed in binary form.
 | 
			
		||||
When using such an application, you don't need to install OpenSSL
 | 
			
		||||
@@ -173,14 +172,31 @@ just do:
 | 
			
		||||
 | 
			
		||||
   pgp TARBALL.asc
 | 
			
		||||
 | 
			
		||||
* How does the versioning scheme work?
 | 
			
		||||
 | 
			
		||||
After the release of OpenSSL 1.0.0 the versioning scheme changed. Letter 
 | 
			
		||||
releases (e.g. 1.0.1a) can only contain bug and security fixes and no
 | 
			
		||||
new features. Minor releases change the last number (e.g. 1.0.2) and 
 | 
			
		||||
can contain new features that retain binary compatibility. Changes to
 | 
			
		||||
the middle number are considered major releases and neither source nor
 | 
			
		||||
binary compatibility is guaranteed.
 | 
			
		||||
 | 
			
		||||
Therefore the answer to the common question "when will feature X be
 | 
			
		||||
backported to OpenSSL 1.0.0/0.9.8?" is "never" but it could appear
 | 
			
		||||
in the next minor release.
 | 
			
		||||
 | 
			
		||||
* What happens when the letter release reaches z?
 | 
			
		||||
 | 
			
		||||
It was decided after the release of OpenSSL 0.9.8y the next version should
 | 
			
		||||
be 0.9.8za then 0.9.8zb and so on.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[LEGAL] =======================================================================
 | 
			
		||||
 | 
			
		||||
* Do I need patent licenses to use OpenSSL?
 | 
			
		||||
 | 
			
		||||
The patents section of the README file lists patents that may apply to
 | 
			
		||||
you if you want to use OpenSSL.  For information on intellectual
 | 
			
		||||
property rights, please consult a lawyer.  The OpenSSL team does not
 | 
			
		||||
offer legal advice.
 | 
			
		||||
For information on intellectual property rights, please consult a lawyer.
 | 
			
		||||
The OpenSSL team does not offer legal advice.
 | 
			
		||||
 | 
			
		||||
You can configure OpenSSL so as not to use IDEA, MDC2 and RC5 by using
 | 
			
		||||
 ./config no-idea no-mdc2 no-rc5
 | 
			
		||||
@@ -284,7 +300,7 @@ current directory in this case, but this has changed with 0.9.6a.)
 | 
			
		||||
Check out the CA.pl(1) manual page. This provides a simple wrapper round
 | 
			
		||||
the 'req', 'verify', 'ca' and 'pkcs12' utilities. For finer control check
 | 
			
		||||
out the manual pages for the individual utilities and the certificate
 | 
			
		||||
extensions documentation (currently in doc/openssl.txt).
 | 
			
		||||
extensions documentation (in ca(1), req(1), x509v3_config(5) )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why can't I create certificate requests?
 | 
			
		||||
@@ -396,7 +412,7 @@ whatever name they choose.
 | 
			
		||||
The ways to print out the oneline format of the DN (Distinguished Name) have
 | 
			
		||||
been extended in version 0.9.7 of OpenSSL. Using the new X509_NAME_print_ex()
 | 
			
		||||
interface, the "-nameopt" option could be introduded. See the manual
 | 
			
		||||
page of the "openssl x509" commandline tool for details. The old behaviour
 | 
			
		||||
page of the "openssl x509" command line tool for details. The old behaviour
 | 
			
		||||
has however been left as default for the sake of compatibility.
 | 
			
		||||
 | 
			
		||||
* What is a "128 bit certificate"? Can I create one with OpenSSL?
 | 
			
		||||
@@ -418,7 +434,7 @@ software from the US only weak encryption algorithms could be freely exported
 | 
			
		||||
inadequate. A relaxation of the rules allowed the use of strong encryption but
 | 
			
		||||
only to an authorised server.
 | 
			
		||||
 | 
			
		||||
Two slighly different techniques were developed to support this, one used by
 | 
			
		||||
Two slightly different techniques were developed to support this, one used by
 | 
			
		||||
Netscape was called "step up", the other used by MSIE was called "Server Gated
 | 
			
		||||
Cryptography" (SGC). When a browser initially connected to a server it would
 | 
			
		||||
check to see if the certificate contained certain extensions and was issued by
 | 
			
		||||
@@ -469,6 +485,16 @@ bundle used by Mozilla and/or modssl as described in this article:
 | 
			
		||||
  <URL: http://www.mail-archive.com/modssl-users@modssl.org/msg16980.html>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Some secure servers 'hang' with OpenSSL 1.0.1, is this a bug?
 | 
			
		||||
 | 
			
		||||
OpenSSL 1.0.1 is the first release to support TLS 1.2, among other things,
 | 
			
		||||
this increases the size of the default ClientHello message to more than
 | 
			
		||||
255 bytes in length. Some software cannot handle this and hangs. For more
 | 
			
		||||
details and workarounds see:
 | 
			
		||||
 | 
			
		||||
  <URL: http://rt.openssl.org/Ticket/Display.html?user=guest&pass=guest&id=2771>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[BUILD] =======================================================================
 | 
			
		||||
 | 
			
		||||
* Why does the linker complain about undefined symbols?
 | 
			
		||||
@@ -597,8 +623,8 @@ valid for the current DOS session.
 | 
			
		||||
* What is special about OpenSSL on Redhat?
 | 
			
		||||
 | 
			
		||||
Red Hat Linux (release 7.0 and later) include a preinstalled limited
 | 
			
		||||
version of OpenSSL. For patent reasons, support for IDEA, RC5 and MDC2
 | 
			
		||||
is disabled in this version. The same may apply to other Linux distributions.
 | 
			
		||||
version of OpenSSL. Red Hat has chosen to disable support for IDEA, RC5 and
 | 
			
		||||
MDC2 in this version. The same may apply to other Linux distributions.
 | 
			
		||||
Users may therefore wish to install more or all of the features left out.
 | 
			
		||||
 | 
			
		||||
To do this you MUST ensure that you do not overwrite the openssl that is in
 | 
			
		||||
@@ -621,11 +647,6 @@ relevant updates in packages up to and including 0.9.6b.
 | 
			
		||||
A possible way around this is to persuade Red Hat to produce a non-US
 | 
			
		||||
version of Red Hat Linux.
 | 
			
		||||
 | 
			
		||||
FYI: Patent numbers and expiry dates of US patents:
 | 
			
		||||
MDC-2: 4,908,861 13/03/2007
 | 
			
		||||
IDEA:  5,214,703 25/05/2010
 | 
			
		||||
RC5:   5,724,428 03/03/2015
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Why does the OpenSSL compilation fail on MacOS X?
 | 
			
		||||
 | 
			
		||||
@@ -688,7 +709,7 @@ working across wider range of *BSD branches, not just OpenBSD.
 | 
			
		||||
If the test program in question fails withs SIGILL, Illegal Instruction
 | 
			
		||||
exception, then you more than likely to run SSE2-capable CPU, such as
 | 
			
		||||
Intel P4, under control of kernel which does not support SSE2
 | 
			
		||||
instruction extentions. See accompanying INSTALL file and
 | 
			
		||||
instruction extensions. See accompanying INSTALL file and
 | 
			
		||||
OPENSSL_ia32cap(3) documentation page for further information.
 | 
			
		||||
 | 
			
		||||
* Why does compiler fail to compile sha512.c?
 | 
			
		||||
@@ -702,15 +723,15 @@ possible alternative might be to switch to GCC.
 | 
			
		||||
 | 
			
		||||
* Test suite still fails, what to do?
 | 
			
		||||
 | 
			
		||||
Another common reason for failure to complete some particular test is
 | 
			
		||||
simply bad code generated by a buggy component in toolchain or deficiency
 | 
			
		||||
in run-time environment. There are few cases documented in PROBLEMS file,
 | 
			
		||||
consult it for possible workaround before you beat the drum. Even if you
 | 
			
		||||
don't find solution or even mention there, do reserve for possibility of
 | 
			
		||||
a compiler bug. Compiler bugs might appear in rather bizarre ways, they
 | 
			
		||||
never make sense, and tend to emerge when you least expect them. In order
 | 
			
		||||
to identify one, drop optimization level, e.g. by editing CFLAG line in
 | 
			
		||||
top-level Makefile, recompile and re-run the test.
 | 
			
		||||
Another common reason for test failures is bugs in the toolchain
 | 
			
		||||
or run-time environment.  Known cases of this are documented in the
 | 
			
		||||
PROBLEMS file, please review it before you beat the drum. Even if you
 | 
			
		||||
don't find anything in that file, please do consider the possibility
 | 
			
		||||
of a compiler bug. Compiler bugs often appear in rather bizarre ways,
 | 
			
		||||
they never make sense, and tend to emerge when you least expect
 | 
			
		||||
them. One thing to try is to reduce the level of optimization (such
 | 
			
		||||
as by editing the CFLAG variable line in the top-level Makefile),
 | 
			
		||||
and then recompile and re-run the test.
 | 
			
		||||
 | 
			
		||||
* I think I've found a bug, what should I do?
 | 
			
		||||
 | 
			
		||||
@@ -720,9 +741,16 @@ documentation and the mailing lists for similar queries. If you are still
 | 
			
		||||
unsure whether it is a bug or not submit a query to the openssl-users mailing
 | 
			
		||||
list.
 | 
			
		||||
 | 
			
		||||
If you think you have found a bug based on the output of static analysis tools
 | 
			
		||||
then please manually check the issue is genuine. Such tools can produce a
 | 
			
		||||
LOT of false positives.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* I'm SURE I've found a bug, how do I report it?
 | 
			
		||||
 | 
			
		||||
To avoid duplicated reports check the mailing lists and release notes for the
 | 
			
		||||
relevant version of OpenSSL to see if the problem has been reported already.
 | 
			
		||||
 | 
			
		||||
Bug reports with no security implications should be sent to the request
 | 
			
		||||
tracker. This can be done by mailing the report to <rt@openssl.org> (or its
 | 
			
		||||
alias <openssl-bugs@openssl.org>), please note that messages sent to the
 | 
			
		||||
@@ -750,7 +778,12 @@ See also <URL: http://www.openssl.org/support/rt.html>
 | 
			
		||||
If you think your bug has security implications then please send it to
 | 
			
		||||
openssl-security@openssl.org if you don't get a prompt reply at least 
 | 
			
		||||
acknowledging receipt then resend or mail it directly to one of the
 | 
			
		||||
more active team members (e.g. Steve).
 | 
			
		||||
more active team members (e.g. Steve). If you wish to use PGP to send
 | 
			
		||||
in a report please use one or more of the keys of the team members listed
 | 
			
		||||
at <URL: http://www.openssl.org/about/>
 | 
			
		||||
 | 
			
		||||
Note that bugs only present in the openssl utility are not in general
 | 
			
		||||
considered to be security issues. 
 | 
			
		||||
 | 
			
		||||
[PROG] ========================================================================
 | 
			
		||||
 | 
			
		||||
@@ -848,7 +881,7 @@ The opposite assumes we already have len bytes in buf:
 | 
			
		||||
 p = buf;
 | 
			
		||||
 p7 = d2i_PKCS7(NULL, &p, len);
 | 
			
		||||
 | 
			
		||||
At this point p7 contains a valid PKCS7 structure of NULL if an error
 | 
			
		||||
At this point p7 contains a valid PKCS7 structure or NULL if an error
 | 
			
		||||
occurred. If an error occurred ERR_print_errors(bio) should give more
 | 
			
		||||
information.
 | 
			
		||||
 | 
			
		||||
@@ -860,6 +893,21 @@ that has been read or written. This may well be uninitialized data
 | 
			
		||||
and attempts to free the buffer will have unpredictable results
 | 
			
		||||
because it no longer points to the same address.
 | 
			
		||||
 | 
			
		||||
Memory allocation and encoding can also be combined in a single
 | 
			
		||||
operation by the ASN1 routines:
 | 
			
		||||
 | 
			
		||||
 unsigned char *buf = NULL;	/* mandatory */
 | 
			
		||||
 int len;
 | 
			
		||||
 len = i2d_PKCS7(p7, &buf);
 | 
			
		||||
 if (len < 0)
 | 
			
		||||
	/* Error */
 | 
			
		||||
 /* Do some things with 'buf' */
 | 
			
		||||
 /* Finished with buf: free it */
 | 
			
		||||
 OPENSSL_free(buf);
 | 
			
		||||
 | 
			
		||||
In this special case the "buf" parameter is *not* incremented, it points
 | 
			
		||||
to the start of the encoding.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* OpenSSL uses DER but I need BER format: does OpenSSL support BER?
 | 
			
		||||
 | 
			
		||||
@@ -1021,5 +1069,20 @@ These are defined and implemented by macros of the form:
 | 
			
		||||
The implementation passes an ASN1 "template" defining the structure into an
 | 
			
		||||
ASN1 interpreter using generalised functions such as ASN1_item_d2i().
 | 
			
		||||
 | 
			
		||||
* When debugging I observe SIGILL during OpenSSL initialization: why?
 | 
			
		||||
 | 
			
		||||
OpenSSL adapts to processor it executes on and for this reason has to
 | 
			
		||||
query its capabilities. Unfortunately on some processors the only way
 | 
			
		||||
to achieve this for non-privileged code is to attempt instructions
 | 
			
		||||
that can cause Illegal Instruction exceptions. The initialization
 | 
			
		||||
procedure is coded to handle these exceptions to manipulate corresponding
 | 
			
		||||
bits in capabilities vector. This normally appears transparent, except
 | 
			
		||||
when you execute it under debugger, which stops prior delivering signal
 | 
			
		||||
to handler. Simply resuming execution does the trick, but when debugging
 | 
			
		||||
a lot it might feel counterproductive. Two options. Either set explicit
 | 
			
		||||
capability environment variable in order to bypass the capability query
 | 
			
		||||
(see corresponding crypto/*cap.c for details). Or configure debugger not
 | 
			
		||||
to stop upon SIGILL exception, e.g. in gdb case add 'handle SIGILL nostop'
 | 
			
		||||
to your .gdbinit.
 | 
			
		||||
 | 
			
		||||
===============================================================================
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								GitConfigure
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										10
									
								
								GitConfigure
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
BRANCH=`git rev-parse --abbrev-ref HEAD`
 | 
			
		||||
 | 
			
		||||
./Configure $@ no-symlinks
 | 
			
		||||
make files
 | 
			
		||||
util/mk1mf.pl OUT=out.$BRANCH TMP=tmp.$BRANCH INC=inc.$BRANCH copy > makefile.$BRANCH
 | 
			
		||||
MAKE=make
 | 
			
		||||
which bsdmake > /dev/null && MAKE=bsdmake
 | 
			
		||||
$MAKE -f makefile.$BRANCH init
 | 
			
		||||
							
								
								
									
										7
									
								
								GitMake
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								GitMake
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
BRANCH=`git rev-parse --abbrev-ref HEAD`
 | 
			
		||||
 | 
			
		||||
MAKE=make
 | 
			
		||||
which bsdmake > /dev/null && MAKE=bsdmake
 | 
			
		||||
$MAKE -f makefile.$BRANCH $@
 | 
			
		||||
							
								
								
									
										2
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								INSTALL
									
									
									
									
									
								
							@@ -79,7 +79,7 @@
 | 
			
		||||
                compiler flags for any other CPU specific configuration,
 | 
			
		||||
                e.g. "-m32" to build x86 code on an x64 system.
 | 
			
		||||
 | 
			
		||||
  no-sse2	Exclude SSE2 code pathes. Normally SSE2 extention is
 | 
			
		||||
  no-sse2	Exclude SSE2 code pathes. Normally SSE2 extension is
 | 
			
		||||
		detected at run-time, but the decision whether or not the
 | 
			
		||||
		machine code will be executed is taken solely on CPU
 | 
			
		||||
		capability vector. This means that if you happen to run OS
 | 
			
		||||
 
 | 
			
		||||
@@ -1,72 +0,0 @@
 | 
			
		||||
OpenSSL - Port To The Macintosh OS 9 or Earlier
 | 
			
		||||
===============================================
 | 
			
		||||
 | 
			
		||||
Thanks to Roy Wood <roy@centricsystems.ca> initial support for Mac OS (pre
 | 
			
		||||
X) is now provided. "Initial" means that unlike other platforms where you
 | 
			
		||||
get an SDK and a "swiss army" openssl application, on Macintosh you only
 | 
			
		||||
get one sample application which fetches a page over HTTPS(*) and dumps it
 | 
			
		||||
in a window. We don't even build the test applications so that we can't
 | 
			
		||||
guarantee that all algorithms are operational.
 | 
			
		||||
 | 
			
		||||
Required software:
 | 
			
		||||
 | 
			
		||||
- StuffIt Expander 5.5 or later, alternatively MacGzip and SUNtar;
 | 
			
		||||
- Scriptable Finder;
 | 
			
		||||
- CodeWarrior Pro 5;
 | 
			
		||||
 | 
			
		||||
Installation procedure:
 | 
			
		||||
 | 
			
		||||
- fetch the source at ftp://ftp.openssl.org/ (well, you probably already
 | 
			
		||||
  did, huh?)
 | 
			
		||||
- unpack the .tar.gz file:
 | 
			
		||||
	- if you have StuffIt Expander then just drag it over it;
 | 
			
		||||
	- otherwise uncompress it with MacGzip and then unpack with SUNtar;
 | 
			
		||||
- locate MacOS folder in OpenSSL source tree and open it;
 | 
			
		||||
- unbinhex mklinks.as.hqx and OpenSSL.mcp.hqx if present (**), do it
 | 
			
		||||
  "in-place", i.e. unpacked files should end-up in the very same folder;
 | 
			
		||||
- execute mklinks.as;
 | 
			
		||||
- open OpenSSL.mcp(***) and build 'GetHTTPS PPC' target(****);
 | 
			
		||||
- that's it for now;
 | 
			
		||||
 | 
			
		||||
(*)	URL is hardcoded into ./MacOS/GetHTTPS.src/GetHTTPS.cpp, lines 40
 | 
			
		||||
        to 42, change appropriately.
 | 
			
		||||
(**)	If you use SUNtar, then it might have already unbinhexed the files
 | 
			
		||||
	in question.
 | 
			
		||||
(***)	The project file was saved with CW Pro 5.3. If you have an earlier
 | 
			
		||||
	version and it refuses to open it, then download
 | 
			
		||||
	http://www.openssl.org/~appro/OpenSSL.mcp.xml and import it
 | 
			
		||||
	overwriting the original OpenSSL.mcp.
 | 
			
		||||
(****)	Other targets are works in progress. If you feel like giving 'em a
 | 
			
		||||
	shot, then you should know that OpenSSL* and Lib* targets are
 | 
			
		||||
	supposed to be built with the GUSI, MacOS library which mimics
 | 
			
		||||
	BSD sockets and some other POSIX APIs. The GUSI distribution is
 | 
			
		||||
	expected to be found in the same directory as the openssl source tree,
 | 
			
		||||
	i.e., in the parent directory to the one where this very file,
 | 
			
		||||
	namely INSTALL.MacOS, resides. For more information about GUSI, see
 | 
			
		||||
	http://www.iis.ee.ethz.ch/~neeri/macintosh/gusi-qa.html
 | 
			
		||||
 | 
			
		||||
Finally some essential comments from our generous contributor:-)
 | 
			
		||||
 | 
			
		||||
"I've gotten OpenSSL working on the Macintosh. It's probably a bit of a
 | 
			
		||||
hack, but it works for what I'm doing. If you don't like the way I've done
 | 
			
		||||
it, then feel free to change what I've done. I freely admit that I've done
 | 
			
		||||
some less-than-ideal things in my port, and if you don't like the way I've
 | 
			
		||||
done something, then feel free to change it-- I won't be offended!
 | 
			
		||||
 | 
			
		||||
... I've tweaked "bss_sock.c" a little to call routines in a "MacSocket"
 | 
			
		||||
library I wrote. My MacSocket library is a wrapper around OpenTransport,
 | 
			
		||||
handling stuff like endpoint creation, reading, writing, etc. It is not
 | 
			
		||||
designed as a high-performance package such as you'd use in a webserver,
 | 
			
		||||
but is fine for lots of other applications. MacSocket also uses some other
 | 
			
		||||
code libraries I've written to deal with string manipulations and error
 | 
			
		||||
handling. Feel free to use these things in your own code, but give me
 | 
			
		||||
credit and/or send me free stuff in appreciation! :-)
 | 
			
		||||
 | 
			
		||||
...
 | 
			
		||||
 | 
			
		||||
If you have any questions, feel free to email me as the following:
 | 
			
		||||
 | 
			
		||||
roy@centricsystems.ca
 | 
			
		||||
 | 
			
		||||
-Roy Wood"
 | 
			
		||||
 | 
			
		||||
@@ -378,7 +378,7 @@ The openssl program has numerous options and can be used for many different
 | 
			
		||||
things.  Many of the options operate in an interactive mode requiring the
 | 
			
		||||
user to enter data.  Because of this, a default screen is created for the
 | 
			
		||||
program.  However, when running the test script it is not desirable to
 | 
			
		||||
have a seperate screen.  Therefore, the build also creates openssl2.nlm.
 | 
			
		||||
have a separate screen.  Therefore, the build also creates openssl2.nlm.
 | 
			
		||||
Openssl2.nlm is functionally identical but uses the console screen.
 | 
			
		||||
Openssl2 can be used when a non-interactive mode is desired.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -134,7 +134,7 @@ Currently, the logical names supported are:
 | 
			
		||||
                        will not be implemented.  Supported algorithms to
 | 
			
		||||
                        do this with are: RSA, DSA, DH, MD2, MD4, MD5, RIPEMD,
 | 
			
		||||
                        SHA, DES, MDC2, CR2, RC4, RC5, IDEA, BF, CAST, HMAC,
 | 
			
		||||
                        SSL2.  So, for example, having the logical name
 | 
			
		||||
                        SSL3.  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.
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@
 | 
			
		||||
  is required if you intend to utilize assembler modules. Note that NASM
 | 
			
		||||
  is now the only supported assembler.
 | 
			
		||||
 | 
			
		||||
 If you are compiling from a tarball or a CVS snapshot then the Win32 files
 | 
			
		||||
 If you are compiling from a tarball or a Git snapshot then the Win32 files
 | 
			
		||||
 may well be not up to date. This may mean that some "tweaking" is required to
 | 
			
		||||
 get it all to work. See the trouble shooting section later on for if (when?)
 | 
			
		||||
 it goes wrong.
 | 
			
		||||
@@ -257,7 +257,7 @@
 | 
			
		||||
 | 
			
		||||
 then ms\do_XXX should not give a warning any more. However the numbers that
 | 
			
		||||
 get assigned by this technique may not match those that eventually get
 | 
			
		||||
 assigned in the CVS tree: so anything linked against this version of the
 | 
			
		||||
 assigned in the Git tree: so anything linked against this version of the
 | 
			
		||||
 library may need to be recompiled.
 | 
			
		||||
 | 
			
		||||
 If you get errors about unresolved symbols there are several possible
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										638
									
								
								Makefile.fips
									
									
									
									
									
								
							
							
						
						
									
										638
									
								
								Makefile.fips
									
									
									
									
									
								
							@@ -1,638 +0,0 @@
 | 
			
		||||
##
 | 
			
		||||
## Makefile for OpenSSL: fipscanister.o only
 | 
			
		||||
##
 | 
			
		||||
 | 
			
		||||
VERSION=fips-2.0-test
 | 
			
		||||
MAJOR=
 | 
			
		||||
MINOR=
 | 
			
		||||
SHLIB_VERSION_NUMBER=
 | 
			
		||||
SHLIB_VERSION_HISTORY=
 | 
			
		||||
SHLIB_MAJOR=
 | 
			
		||||
SHLIB_MINOR=
 | 
			
		||||
SHLIB_EXT=
 | 
			
		||||
PLATFORM=dist
 | 
			
		||||
OPTIONS=
 | 
			
		||||
CONFIGURE_ARGS=
 | 
			
		||||
SHLIB_TARGET=
 | 
			
		||||
 | 
			
		||||
# HERE indicates where this Makefile lives.  This can be used to indicate
 | 
			
		||||
# where sub-Makefiles are expected to be.  Currently has very limited usage,
 | 
			
		||||
# and should probably not be bothered with at all.
 | 
			
		||||
HERE=.
 | 
			
		||||
 | 
			
		||||
# INSTALL_PREFIX is for package builders so that they can configure
 | 
			
		||||
# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
 | 
			
		||||
# Normally it is left empty.
 | 
			
		||||
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= cc
 | 
			
		||||
CFLAG= -O
 | 
			
		||||
DEPFLAG= 
 | 
			
		||||
PEX_LIBS= 
 | 
			
		||||
EX_LIBS= 
 | 
			
		||||
EXE_EXT= 
 | 
			
		||||
ARFLAGS=
 | 
			
		||||
AR=ar $(ARFLAGS) r
 | 
			
		||||
RANLIB= ranlib
 | 
			
		||||
NM= nm
 | 
			
		||||
PERL= perl
 | 
			
		||||
TAR= tar
 | 
			
		||||
TARFLAGS= --no-recursion
 | 
			
		||||
MAKEDEPPROG=makedepend
 | 
			
		||||
LIBDIR=lib
 | 
			
		||||
 | 
			
		||||
# We let the C compiler driver to take care of .s files. This is done in
 | 
			
		||||
# order to be excused from maintaining a separate set of architecture
 | 
			
		||||
# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
 | 
			
		||||
# gcc, then the driver will automatically translate it to -xarch=v8plus
 | 
			
		||||
# and pass it down to assembler.
 | 
			
		||||
#AS=$(CC) -c
 | 
			
		||||
ASFLAG=$(CFLAG)
 | 
			
		||||
 | 
			
		||||
# For x86 assembler: Set PROCESSOR to 386 if you want to support
 | 
			
		||||
# the 80386.
 | 
			
		||||
PROCESSOR=
 | 
			
		||||
 | 
			
		||||
# CPUID module collects small commonly used assembler snippets
 | 
			
		||||
CPUID_OBJ= 
 | 
			
		||||
BN_ASM= bn_asm.o
 | 
			
		||||
DES_ENC= des_enc.o fcrypt_b.o
 | 
			
		||||
AES_ENC= aes_core.o aes_cbc.o
 | 
			
		||||
BF_ENC= bf_enc.o
 | 
			
		||||
CAST_ENC= c_enc.o
 | 
			
		||||
RC4_ENC= rc4_enc.o
 | 
			
		||||
RC5_ENC= rc5_enc.o
 | 
			
		||||
MD5_ASM_OBJ= 
 | 
			
		||||
SHA1_ASM_OBJ= 
 | 
			
		||||
RMD160_ASM_OBJ= 
 | 
			
		||||
WP_ASM_OBJ=
 | 
			
		||||
CMLL_ENC=
 | 
			
		||||
MODES_ASM_OBJ=
 | 
			
		||||
PERLASM_SCHEME=
 | 
			
		||||
 | 
			
		||||
# KRB5 stuff
 | 
			
		||||
KRB5_INCLUDES=
 | 
			
		||||
LIBKRB5=
 | 
			
		||||
 | 
			
		||||
# Zlib stuff
 | 
			
		||||
ZLIB_INCLUDE=
 | 
			
		||||
LIBZLIB=
 | 
			
		||||
 | 
			
		||||
# This is the location of fipscanister.o and friends.
 | 
			
		||||
# The FIPS module build will place it $(INSTALLTOP)/lib
 | 
			
		||||
# but since $(INSTALLTOP) can only take the default value
 | 
			
		||||
# when the module is built it will be in /usr/local/ssl/lib
 | 
			
		||||
# $(INSTALLTOP) for this build may be different so hard
 | 
			
		||||
# code the path.
 | 
			
		||||
 | 
			
		||||
FIPSLIBDIR=/usr/local/ssl/$(LIBDIR)/
 | 
			
		||||
 | 
			
		||||
# This is set to "y" if fipscanister.o is compiled internally as
 | 
			
		||||
# opposed to coming from an external validated location.
 | 
			
		||||
 | 
			
		||||
FIPSCANISTERINTERNAL=n
 | 
			
		||||
 | 
			
		||||
# This is set if we only build fipscanister.o
 | 
			
		||||
 | 
			
		||||
FIPSCANISTERONLY=y
 | 
			
		||||
 | 
			
		||||
# The location of the library which contains fipscanister.o
 | 
			
		||||
# normally it will be libcrypto unless fipsdso is set in which
 | 
			
		||||
# case it will be libfips. If not compiling in FIPS mode at all
 | 
			
		||||
# this is empty making it a useful test for a FIPS compile.
 | 
			
		||||
 | 
			
		||||
FIPSCANLIB=
 | 
			
		||||
 | 
			
		||||
# Shared library base address. Currently only used on Windows.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
BASEADDR=
 | 
			
		||||
 | 
			
		||||
DIRS=   crypto fips test 
 | 
			
		||||
ENGDIRS= ccgost
 | 
			
		||||
SHLIBDIRS= crypto 
 | 
			
		||||
 | 
			
		||||
# dirs in crypto to build
 | 
			
		||||
SDIRS=  \
 | 
			
		||||
	sha hmac des aes modes \
 | 
			
		||||
	bn ec rsa dsa ecdsa dh \
 | 
			
		||||
	buffer evp ecdh cmac
 | 
			
		||||
# keep in mind that the above list is adjusted by ./Configure
 | 
			
		||||
# according to no-xxx arguments...
 | 
			
		||||
 | 
			
		||||
LINKDIRS=  \
 | 
			
		||||
	objects sha hmac des aes modes \
 | 
			
		||||
	bn ec rsa dsa ecdh cmac ecdsa dh engine \
 | 
			
		||||
	buffer bio stack lhash rand err \
 | 
			
		||||
	evp asn1 ui
 | 
			
		||||
 | 
			
		||||
# tests to perform.  "alltests" is a special word indicating that all tests
 | 
			
		||||
# should be performed.
 | 
			
		||||
TESTS = alltests
 | 
			
		||||
 | 
			
		||||
MAKEFILE= Makefile
 | 
			
		||||
 | 
			
		||||
MANDIR=$(OPENSSLDIR)/man
 | 
			
		||||
MAN1=1
 | 
			
		||||
MAN3=3
 | 
			
		||||
MANSUFFIX=
 | 
			
		||||
HTMLSUFFIX=html
 | 
			
		||||
HTMLDIR=$(OPENSSLDIR)/html
 | 
			
		||||
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=   
 | 
			
		||||
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=        openssl-fips-2.0-test.tar
 | 
			
		||||
WTARFILE=       $(NAME)-win.tar
 | 
			
		||||
EXHEADER=       e_os2.h
 | 
			
		||||
HEADER=         e_os.h
 | 
			
		||||
 | 
			
		||||
all: Makefile build_all openssl.pc libssl.pc libcrypto.pc
 | 
			
		||||
 | 
			
		||||
# as we stick to -e, CLEARENV ensures that local variables in lower
 | 
			
		||||
# Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn
 | 
			
		||||
# shell, which [annoyingly enough] terminates unset with error if VAR
 | 
			
		||||
# is not present:-( TOP= && unset TOP is tribute to HP-UX /bin/sh,
 | 
			
		||||
# which terminates unset with error if no variable was present:-(
 | 
			
		||||
CLEARENV=	TOP= && unset TOP $${LIB+LIB} $${LIBS+LIBS}	\
 | 
			
		||||
		$${INCLUDE+INCLUDE} $${INCLUDES+INCLUDES}	\
 | 
			
		||||
		$${DIR+DIR} $${DIRS+DIRS} $${SRC+SRC}		\
 | 
			
		||||
		$${LIBSRC+LIBSRC} $${LIBOBJ+LIBOBJ} $${ALL+ALL}	\
 | 
			
		||||
		$${EXHEADER+EXHEADER} $${HEADER+HEADER}		\
 | 
			
		||||
		$${GENERAL+GENERAL} $${CFLAGS+CFLAGS}		\
 | 
			
		||||
		$${ASFLAGS+ASFLAGS} $${AFLAGS+AFLAGS}		\
 | 
			
		||||
		$${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS}		\
 | 
			
		||||
		$${SHAREDCMD+SHAREDCMD} $${SHAREDFLAGS+SHAREDFLAGS}	\
 | 
			
		||||
		$${SHARED_LIB+SHARED_LIB} $${LIBEXTRAS+LIBEXTRAS}
 | 
			
		||||
 | 
			
		||||
BUILDENV=	PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
 | 
			
		||||
		CC='$(CC)' CFLAG='$(CFLAG)' 			\
 | 
			
		||||
		ASFLAG='$(CFLAG) -c'			\
 | 
			
		||||
		AR='$(AR)' NM='$(NM)' RANLIB='$(RANLIB)'	\
 | 
			
		||||
		CROSS_COMPILE='$(CROSS_COMPILE)'	\
 | 
			
		||||
		PERL='$(PERL)' ENGDIRS='$(ENGDIRS)'		\
 | 
			
		||||
		SDIRS='$(SDIRS)' LIBRPATH='$(INSTALLTOP)/$(LIBDIR)'	\
 | 
			
		||||
		INSTALL_PREFIX='$(INSTALL_PREFIX)'		\
 | 
			
		||||
		INSTALLTOP='$(INSTALLTOP)' OPENSSLDIR='$(OPENSSLDIR)'	\
 | 
			
		||||
		LIBDIR='$(LIBDIR)'				\
 | 
			
		||||
		MAKEDEPEND='$$$${TOP}/util/domd $$$${TOP} -MD $(MAKEDEPPROG)' \
 | 
			
		||||
		DEPFLAG='-DOPENSSL_NO_DEPRECATED $(DEPFLAG)'	\
 | 
			
		||||
		MAKEDEPPROG='$(MAKEDEPPROG)'			\
 | 
			
		||||
		SHARED_LDFLAGS='$(SHARED_LDFLAGS)'		\
 | 
			
		||||
		KRB5_INCLUDES='$(KRB5_INCLUDES)' LIBKRB5='$(LIBKRB5)'	\
 | 
			
		||||
		ZLIB_INCLUDE='$(ZLIB_INCLUDE)' LIBZLIB='$(LIBZLIB)'	\
 | 
			
		||||
		EXE_EXT='$(EXE_EXT)' SHARED_LIBS='$(SHARED_LIBS)'	\
 | 
			
		||||
		SHLIB_EXT='$(SHLIB_EXT)' SHLIB_TARGET='$(SHLIB_TARGET)'	\
 | 
			
		||||
		PEX_LIBS='$(PEX_LIBS)' EX_LIBS='$(EX_LIBS)'	\
 | 
			
		||||
		CPUID_OBJ='$(CPUID_OBJ)'			\
 | 
			
		||||
		BN_ASM='$(BN_ASM)' DES_ENC='$(DES_ENC)' 	\
 | 
			
		||||
		AES_ENC='$(AES_ENC)' CMLL_ENC='$(CMLL_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)'		\
 | 
			
		||||
		WP_ASM_OBJ='$(WP_ASM_OBJ)'			\
 | 
			
		||||
		MODES_ASM_OBJ='$(MODES_ASM_OBJ)'		\
 | 
			
		||||
		PERLASM_SCHEME='$(PERLASM_SCHEME)'		\
 | 
			
		||||
		FIPSLIBDIR='${FIPSLIBDIR}'			\
 | 
			
		||||
		FIPSCANLIB="$${FIPSCANLIB:-$(FIPSCANLIB)}"	\
 | 
			
		||||
		FIPSCANISTERINTERNAL='${FIPSCANISTERINTERNAL}'	\
 | 
			
		||||
		FIPSCANISTERONLY='${FIPSCANISTERONLY}'	\
 | 
			
		||||
		FIPS_EX_OBJ='${FIPS_EX_OBJ}'	\
 | 
			
		||||
		THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
 | 
			
		||||
# MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors,
 | 
			
		||||
# which in turn eliminates ambiguities in variable treatment with -e.
 | 
			
		||||
 | 
			
		||||
# BUILD_CMD is a generic macro to build a given target in a given
 | 
			
		||||
# subdirectory.  The target must be given through the shell variable
 | 
			
		||||
# `target' and the subdirectory to build in must be given through `dir'.
 | 
			
		||||
# This macro shouldn't be used directly, use RECURSIVE_BUILD_CMD or
 | 
			
		||||
# BUILD_ONE_CMD instead.
 | 
			
		||||
#
 | 
			
		||||
# BUILD_ONE_CMD is a macro to build a given target in a given
 | 
			
		||||
# subdirectory if that subdirectory is part of $(DIRS).  It requires
 | 
			
		||||
# exactly the same shell variables as BUILD_CMD.
 | 
			
		||||
#
 | 
			
		||||
# RECURSIVE_BUILD_CMD is a macro to build a given target in all
 | 
			
		||||
# subdirectories defined in $(DIRS).  It requires that the target
 | 
			
		||||
# is given through the shell variable `target'.
 | 
			
		||||
BUILD_CMD=  if [ -d "$$dir" ]; then \
 | 
			
		||||
	    (	cd $$dir && echo "making $$target in $$dir..." && \
 | 
			
		||||
		$(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. DIR=$$dir $$target \
 | 
			
		||||
	    ) || exit 1; \
 | 
			
		||||
	    fi
 | 
			
		||||
RECURSIVE_BUILD_CMD=for dir in $(DIRS); do $(BUILD_CMD); done
 | 
			
		||||
BUILD_ONE_CMD=\
 | 
			
		||||
	if expr " $(DIRS) " : ".* $$dir " >/dev/null 2>&1; then \
 | 
			
		||||
		$(BUILD_CMD); \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
reflect:
 | 
			
		||||
	@[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)
 | 
			
		||||
 | 
			
		||||
FIPS_EX_OBJ= ../crypto/aes/aes_cfb.o \
 | 
			
		||||
	../crypto/aes/aes_ecb.o \
 | 
			
		||||
	../crypto/aes/aes_ofb.o \
 | 
			
		||||
	../crypto/bn/bn_add.o \
 | 
			
		||||
	../crypto/bn/bn_blind.o \
 | 
			
		||||
	../crypto/bn/bn_ctx.o \
 | 
			
		||||
	../crypto/bn/bn_div.o \
 | 
			
		||||
	../crypto/bn/bn_exp2.o \
 | 
			
		||||
	../crypto/bn/bn_exp.o \
 | 
			
		||||
	../crypto/bn/bn_gcd.o \
 | 
			
		||||
	../crypto/bn/bn_gf2m.o \
 | 
			
		||||
	../crypto/bn/bn_lib.o \
 | 
			
		||||
	../crypto/bn/bn_mod.o \
 | 
			
		||||
	../crypto/bn/bn_mont.o \
 | 
			
		||||
	../crypto/bn/bn_mul.o \
 | 
			
		||||
	../crypto/bn/bn_nist.o \
 | 
			
		||||
	../crypto/bn/bn_prime.o \
 | 
			
		||||
	../crypto/bn/bn_rand.o \
 | 
			
		||||
	../crypto/bn/bn_recp.o \
 | 
			
		||||
	../crypto/bn/bn_shift.o \
 | 
			
		||||
	../crypto/bn/bn_sqr.o \
 | 
			
		||||
	../crypto/bn/bn_word.o \
 | 
			
		||||
	../crypto/bn/bn_x931p.o \
 | 
			
		||||
	../crypto/buffer/buf_str.o \
 | 
			
		||||
	../crypto/cmac/cmac.o \
 | 
			
		||||
	../crypto/cryptlib.o \
 | 
			
		||||
	../crypto/des/cfb64ede.o \
 | 
			
		||||
	../crypto/des/cfb64enc.o \
 | 
			
		||||
	../crypto/des/cfb_enc.o \
 | 
			
		||||
	../crypto/des/ecb3_enc.o \
 | 
			
		||||
	../crypto/des/ofb64ede.o \
 | 
			
		||||
	../crypto/des/fcrypt.o \
 | 
			
		||||
	../crypto/des/set_key.o \
 | 
			
		||||
	../crypto/dh/dh_check.o \
 | 
			
		||||
	../crypto/dh/dh_gen.o \
 | 
			
		||||
	../crypto/dh/dh_key.o \
 | 
			
		||||
	../crypto/dsa/dsa_gen.o \
 | 
			
		||||
	../crypto/dsa/dsa_key.o \
 | 
			
		||||
	../crypto/dsa/dsa_ossl.o \
 | 
			
		||||
	../crypto/ec/ec_curve.o \
 | 
			
		||||
	../crypto/ec/ec_cvt.o \
 | 
			
		||||
	../crypto/ec/ec_key.o \
 | 
			
		||||
	../crypto/ec/ec_lib.o \
 | 
			
		||||
	../crypto/ec/ecp_mont.o \
 | 
			
		||||
	../crypto/ec/ec_mult.o \
 | 
			
		||||
	../crypto/ec/ecp_nist.o \
 | 
			
		||||
	../crypto/ec/ecp_smpl.o \
 | 
			
		||||
	../crypto/ec/ec2_mult.o \
 | 
			
		||||
	../crypto/ec/ec2_smpl.o \
 | 
			
		||||
	../crypto/ecdh/ech_key.o \
 | 
			
		||||
	../crypto/ecdh/ech_ossl.o \
 | 
			
		||||
	../crypto/ecdsa/ecs_ossl.o \
 | 
			
		||||
	../crypto/evp/e_aes.o \
 | 
			
		||||
	../crypto/evp/e_des3.o \
 | 
			
		||||
	../crypto/evp/e_null.o \
 | 
			
		||||
	../crypto/evp/m_sha1.o \
 | 
			
		||||
	../crypto/evp/m_dss1.o \
 | 
			
		||||
	../crypto/evp/m_dss.o \
 | 
			
		||||
	../crypto/evp/m_ecdsa.o \
 | 
			
		||||
	../crypto/hmac/hmac.o \
 | 
			
		||||
	../crypto/modes/cbc128.o \
 | 
			
		||||
	../crypto/modes/ccm128.o \
 | 
			
		||||
	../crypto/modes/cfb128.o \
 | 
			
		||||
	../crypto/modes/ctr128.o \
 | 
			
		||||
	../crypto/modes/gcm128.o \
 | 
			
		||||
	../crypto/modes/ofb128.o \
 | 
			
		||||
	../crypto/modes/xts128.o \
 | 
			
		||||
	../crypto/rsa/rsa_eay.o \
 | 
			
		||||
	../crypto/rsa/rsa_gen.o \
 | 
			
		||||
	../crypto/rsa/rsa_crpt.o \
 | 
			
		||||
	../crypto/rsa/rsa_none.o \
 | 
			
		||||
	../crypto/rsa/rsa_oaep.o \
 | 
			
		||||
	../crypto/rsa/rsa_pk1.o \
 | 
			
		||||
	../crypto/rsa/rsa_pss.o \
 | 
			
		||||
	../crypto/rsa/rsa_ssl.o \
 | 
			
		||||
	../crypto/rsa/rsa_x931.o \
 | 
			
		||||
	../crypto/rsa/rsa_x931g.o \
 | 
			
		||||
	../crypto/sha/sha1dgst.o \
 | 
			
		||||
	../crypto/sha/sha256.o \
 | 
			
		||||
	../crypto/sha/sha512.o \
 | 
			
		||||
	../crypto/thr_id.o \
 | 
			
		||||
	../crypto/uid.o
 | 
			
		||||
 | 
			
		||||
sub_all: build_all
 | 
			
		||||
build_all: build_libs
 | 
			
		||||
 | 
			
		||||
build_libs: build_crypto build_fips
 | 
			
		||||
 | 
			
		||||
build_fips:
 | 
			
		||||
	@dir=fips; target=all; [ -z "$(FIPSCANLIB)" ] || $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
build_crypto:
 | 
			
		||||
	if [ -n "$(FIPSCANLIB)" ]; then \
 | 
			
		||||
		EXCL_OBJ='$(AES_ENC) $(BN_ASM) $(DES_ENC) $(CPUID_OBJ) $(SHA1_ASM_OBJ) $(MODES_ASM_OBJ) $(FIPS_EX_OBJ)' ; export EXCL_OBJ ; \
 | 
			
		||||
		ARX='$(PERL) $${TOP}/util/arx.pl $(AR)' ; \
 | 
			
		||||
	else \
 | 
			
		||||
		ARX='${AR}' ; \
 | 
			
		||||
	fi ; export ARX ; \
 | 
			
		||||
	if [ $(FIPSCANISTERINTERNAL) = "y" ]; then \
 | 
			
		||||
		AS='$(PERL) $${TOP}/util/fipsas.pl $${TOP} $${<} $(CC)' ; \
 | 
			
		||||
	else \
 | 
			
		||||
		AS='$(CC) -c' ; \
 | 
			
		||||
	fi ; export AS ; \
 | 
			
		||||
		dir=crypto; target=fips; $(BUILD_ONE_CMD)
 | 
			
		||||
build_ssl:
 | 
			
		||||
	@dir=ssl; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_engines:
 | 
			
		||||
	@dir=engines; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_apps:
 | 
			
		||||
	@dir=apps; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_tests:
 | 
			
		||||
	@dir=test; target=fipsexe; $(BUILD_ONE_CMD)
 | 
			
		||||
build_tools:
 | 
			
		||||
	@dir=tools; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
all_testapps: build_libs build_testapps
 | 
			
		||||
build_testapps:
 | 
			
		||||
	@dir=crypto; target=testapps; $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
libcrypto$(SHLIB_EXT): libcrypto.a build_fips
 | 
			
		||||
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
			
		||||
		if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
 | 
			
		||||
			FIPSLD_CC="$(CC)"; CC=fips/fipsld; \
 | 
			
		||||
			export CC FIPSLD_CC; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		$(MAKE) SHLIBDIRS=crypto build-shared; \
 | 
			
		||||
	else \
 | 
			
		||||
		echo "There's no support for shared libraries on this platform" >&2; \
 | 
			
		||||
		exit 1; \
 | 
			
		||||
	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; \
 | 
			
		||||
		exit 1; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
clean-shared:
 | 
			
		||||
	@set -e; for i in $(SHLIBDIRS); do \
 | 
			
		||||
		if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
 | 
			
		||||
			tmp="$(SHARED_LIBS_LINK_EXTS)"; \
 | 
			
		||||
			for j in $${tmp:-x}; do \
 | 
			
		||||
				( 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:
 | 
			
		||||
	@ set -e; for i in $(SHLIBDIRS); do \
 | 
			
		||||
		$(MAKE) -f $(HERE)/Makefile.shared -e $(BUILDENV) \
 | 
			
		||||
			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):
 | 
			
		||||
	@ set -e; libs='-L. $(SHLIBDEPS)'; for i in $(SHLIBDIRS); do \
 | 
			
		||||
		if [ "$$i" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
			
		||||
			libs="$(LIBKRB5) $$libs"; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		$(CLEARENV) && $(MAKE) -f Makefile.shared -e $(BUILDENV) \
 | 
			
		||||
			LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \
 | 
			
		||||
			LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \
 | 
			
		||||
			LIBDEPS="$$libs $(EX_LIBS)" \
 | 
			
		||||
			link_a.$(SHLIB_TARGET); \
 | 
			
		||||
		libs="-l$$i $$libs"; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
libcrypto.pc: Makefile
 | 
			
		||||
	@ ( echo 'prefix=$(INSTALLTOP)'; \
 | 
			
		||||
	    echo 'exec_prefix=$${prefix}'; \
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
 | 
			
		||||
	    echo 'includedir=$${prefix}/include'; \
 | 
			
		||||
	    echo ''; \
 | 
			
		||||
	    echo 'Name: OpenSSL-libcrypto'; \
 | 
			
		||||
	    echo 'Description: OpenSSL cryptography library'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lcrypto $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc
 | 
			
		||||
 | 
			
		||||
libssl.pc: Makefile
 | 
			
		||||
	@ ( echo 'prefix=$(INSTALLTOP)'; \
 | 
			
		||||
	    echo 'exec_prefix=$${prefix}'; \
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
 | 
			
		||||
	    echo 'includedir=$${prefix}/include'; \
 | 
			
		||||
	    echo ''; \
 | 
			
		||||
	    echo 'Name: OpenSSL'; \
 | 
			
		||||
	    echo 'Description: Secure Sockets Layer and cryptography libraries'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
 | 
			
		||||
 | 
			
		||||
openssl.pc: Makefile
 | 
			
		||||
	@ ( echo 'prefix=$(INSTALLTOP)'; \
 | 
			
		||||
	    echo 'exec_prefix=$${prefix}'; \
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
 | 
			
		||||
	    echo 'includedir=$${prefix}/include'; \
 | 
			
		||||
	    echo ''; \
 | 
			
		||||
	    echo 'Name: OpenSSL'; \
 | 
			
		||||
	    echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
 | 
			
		||||
 | 
			
		||||
Makefile: Makefile.fips Configure config
 | 
			
		||||
	@echo "Makefile is older than Makefile.org, Configure or config."
 | 
			
		||||
	@echo "Reconfigure the source tree (via './config' or 'perl Configure'), please."
 | 
			
		||||
	@false
 | 
			
		||||
 | 
			
		||||
libclean:
 | 
			
		||||
	rm -f *.map *.so *.so.* *.dll engines/*.so engines/*.dll *.a engines/*.a */lib */*/lib
 | 
			
		||||
 | 
			
		||||
clean:	libclean
 | 
			
		||||
	rm -f shlib/*.o *.o core a.out fluff testlog make.log cctest cctest.c
 | 
			
		||||
	@set -e; target=clean; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
	rm -f $(LIBS)
 | 
			
		||||
	rm -f openssl.pc libssl.pc libcrypto.pc
 | 
			
		||||
	rm -f speed.* .pure
 | 
			
		||||
	rm -f $(TARFILE)
 | 
			
		||||
	@set -e; 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 > $(TOP)/MINFO
 | 
			
		||||
	@set -e; target=files; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
links:
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
 | 
			
		||||
	@$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
 | 
			
		||||
	@set -e; dir=fips target=links; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
	@(cd crypto ; SDIRS='$(LINKDIRS)' $(MAKE) -e links)
 | 
			
		||||
 | 
			
		||||
gentests:
 | 
			
		||||
	@(cd test && echo "generating dummy tests (if needed)..." && \
 | 
			
		||||
	$(CLEARENV) && $(MAKE) -e $(BUILDENV) TESTS='$(TESTS)' OPENSSL_DEBUG_MEMORY=on generate );
 | 
			
		||||
 | 
			
		||||
dclean:
 | 
			
		||||
	rm -rf *.bak include/openssl certs/.0
 | 
			
		||||
	@set -e; target=dclean; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
test:   tests
 | 
			
		||||
 | 
			
		||||
tests:
 | 
			
		||||
	@(cd test && echo "testing..." && \
 | 
			
		||||
	$(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. TESTS='$(TESTS)' OPENSSL_DEBUG_MEMORY=on OPENSSL_CONF=../apps/openssl.cnf tests );
 | 
			
		||||
	OPENSSL_CONF=apps/openssl.cnf util/opensslwrap.sh version -a
 | 
			
		||||
 | 
			
		||||
report:
 | 
			
		||||
	@$(PERL) util/selftest.pl
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	@echo make depend not supported ; false
 | 
			
		||||
 | 
			
		||||
lint:
 | 
			
		||||
	@set -e; target=lint; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
tags:
 | 
			
		||||
	rm -f TAGS
 | 
			
		||||
	find . -name '[^.]*.[ch]' | xargs etags -a
 | 
			
		||||
 | 
			
		||||
errors:
 | 
			
		||||
	$(PERL) util/mkerr.pl -recurse -write
 | 
			
		||||
	(cd engines; $(MAKE) PERL=$(PERL) errors)
 | 
			
		||||
	$(PERL) util/ck_errf.pl -strict */*.c */*/*.c
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
crypto/objects/obj_xref.h: crypto/objects/objxref.pl crypto/objects/obj_xref.txt crypto/objects/obj_mac.num
 | 
			
		||||
	$(PERL) crypto/objects/objxref.pl crypto/objects/obj_mac.num crypto/objects/obj_xref.txt >crypto/objects/obj_xref.h
 | 
			
		||||
 | 
			
		||||
apps/openssl-vms.cnf: apps/openssl.cnf
 | 
			
		||||
	$(PERL) VMS/VMSify-conf.pl < apps/openssl.cnf > apps/openssl-vms.cnf
 | 
			
		||||
 | 
			
		||||
crypto/bn/bn_prime.h: crypto/bn/bn_prime.pl
 | 
			
		||||
	$(PERL) crypto/bn/bn_prime.pl >crypto/bn/bn_prime.h
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TABLE: Configure
 | 
			
		||||
	(echo 'Output of `Configure TABLE'"':"; \
 | 
			
		||||
	$(PERL) Configure TABLE) > TABLE
 | 
			
		||||
 | 
			
		||||
update: errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h crypto/objects/obj_xref.h apps/openssl-vms.cnf crypto/bn/bn_prime.h TABLE depend
 | 
			
		||||
 | 
			
		||||
# Build distribution tar-file. As the list of files returned by "find" is
 | 
			
		||||
# pretty long, on several platforms a "too many arguments" error or similar
 | 
			
		||||
# would occur. Therefore the list of files is temporarily stored into a file
 | 
			
		||||
# 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 | $(BUILDENV) LINKDIRS='$(LINKDIRS)' $(PERL) util/fipsdist.pl | 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 fipscanisteronly
 | 
			
		||||
	@$(MAKE) dist_pem_h
 | 
			
		||||
	@$(MAKE) SDIRS='$(SDIRS)' clean
 | 
			
		||||
	@$(MAKE) -f Makefile.fips TAR='$(TAR)' TARFLAGS='$(TARFLAGS)' tar
 | 
			
		||||
 | 
			
		||||
dist_pem_h:
 | 
			
		||||
	(cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
 | 
			
		||||
 | 
			
		||||
install: all install_sw
 | 
			
		||||
 | 
			
		||||
install_sw:
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl
 | 
			
		||||
	@set -e; headerlist="$(EXHEADER)"; for i in $$headerlist;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
 | 
			
		||||
	done;
 | 
			
		||||
	@set -e; target=install; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
 | 
			
		||||
							
								
								
									
										255
									
								
								Makefile.org
									
									
									
									
									
								
							
							
						
						
									
										255
									
								
								Makefile.org
									
									
									
									
									
								
							@@ -68,6 +68,8 @@ AR=ar $(ARFLAGS) r
 | 
			
		||||
RANLIB= ranlib
 | 
			
		||||
NM= nm
 | 
			
		||||
PERL= perl
 | 
			
		||||
#RM= echo --
 | 
			
		||||
RM= rm -f
 | 
			
		||||
TAR= tar
 | 
			
		||||
TARFLAGS= --no-recursion
 | 
			
		||||
MAKEDEPPROG=makedepend
 | 
			
		||||
@@ -78,7 +80,7 @@ LIBDIR=lib
 | 
			
		||||
# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
 | 
			
		||||
# gcc, then the driver will automatically translate it to -xarch=v8plus
 | 
			
		||||
# and pass it down to assembler.
 | 
			
		||||
#AS=$(CC) -c
 | 
			
		||||
AS=$(CC) -c
 | 
			
		||||
ASFLAG=$(CFLAG)
 | 
			
		||||
 | 
			
		||||
# For x86 assembler: Set PROCESSOR to 386 if you want to support
 | 
			
		||||
@@ -88,6 +90,7 @@ PROCESSOR=
 | 
			
		||||
# CPUID module collects small commonly used assembler snippets
 | 
			
		||||
CPUID_OBJ= 
 | 
			
		||||
BN_ASM= bn_asm.o
 | 
			
		||||
EC_ASM=
 | 
			
		||||
DES_ENC= des_enc.o fcrypt_b.o
 | 
			
		||||
AES_ENC= aes_core.o aes_cbc.o
 | 
			
		||||
BF_ENC= bf_enc.o
 | 
			
		||||
@@ -120,15 +123,9 @@ LIBZLIB=
 | 
			
		||||
 | 
			
		||||
FIPSLIBDIR=/usr/local/ssl/$(LIBDIR)/
 | 
			
		||||
 | 
			
		||||
# This is set to "y" if fipscanister.o is compiled internally as
 | 
			
		||||
# opposed to coming from an external validated location.
 | 
			
		||||
 | 
			
		||||
FIPSCANISTERINTERNAL=n
 | 
			
		||||
 | 
			
		||||
# The location of the library which contains fipscanister.o
 | 
			
		||||
# normally it will be libcrypto unless fipsdso is set in which
 | 
			
		||||
# case it will be libfips. If not compiling in FIPS mode at all
 | 
			
		||||
# this is empty making it a useful test for a FIPS compile.
 | 
			
		||||
# normally it will be libcrypto. If not compiling in FIPS mode
 | 
			
		||||
# at all this is empty making it a useful test for a FIPS compile.
 | 
			
		||||
 | 
			
		||||
FIPSCANLIB=
 | 
			
		||||
 | 
			
		||||
@@ -137,7 +134,7 @@ FIPSCANLIB=
 | 
			
		||||
 | 
			
		||||
BASEADDR=
 | 
			
		||||
 | 
			
		||||
DIRS=   crypto fips ssl engines apps test tools
 | 
			
		||||
DIRS=   crypto ssl engines apps test tools
 | 
			
		||||
ENGDIRS= ccgost
 | 
			
		||||
SHLIBDIRS= crypto ssl
 | 
			
		||||
 | 
			
		||||
@@ -186,6 +183,17 @@ WTARFILE=       $(NAME)-win.tar
 | 
			
		||||
EXHEADER=       e_os2.h
 | 
			
		||||
HEADER=         e_os.h
 | 
			
		||||
 | 
			
		||||
# Directories created on install if they don't exist.
 | 
			
		||||
INSTALLDIRS=	\
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/bin \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/private
 | 
			
		||||
 | 
			
		||||
all: Makefile build_all openssl.pc libssl.pc libcrypto.pc
 | 
			
		||||
 | 
			
		||||
# as we stick to -e, CLEARENV ensures that local variables in lower
 | 
			
		||||
@@ -200,13 +208,13 @@ CLEARENV=	TOP= && unset TOP $${LIB+LIB} $${LIBS+LIBS}	\
 | 
			
		||||
		$${EXHEADER+EXHEADER} $${HEADER+HEADER}		\
 | 
			
		||||
		$${GENERAL+GENERAL} $${CFLAGS+CFLAGS}		\
 | 
			
		||||
		$${ASFLAGS+ASFLAGS} $${AFLAGS+AFLAGS}		\
 | 
			
		||||
		$${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS}		\
 | 
			
		||||
		$${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS} $${SCRIPTS+SCRIPTS}	\
 | 
			
		||||
		$${SHAREDCMD+SHAREDCMD} $${SHAREDFLAGS+SHAREDFLAGS}	\
 | 
			
		||||
		$${SHARED_LIB+SHARED_LIB} $${LIBEXTRAS+LIBEXTRAS}
 | 
			
		||||
 | 
			
		||||
BUILDENV=	PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
 | 
			
		||||
		CC='$(CC)' CFLAG='$(CFLAG)' 			\
 | 
			
		||||
		ASFLAG='$(CFLAG) -c'			\
 | 
			
		||||
		AS='$(CC)' ASFLAG='$(CFLAG) -c'			\
 | 
			
		||||
		AR='$(AR)' NM='$(NM)' RANLIB='$(RANLIB)'	\
 | 
			
		||||
		CROSS_COMPILE='$(CROSS_COMPILE)'	\
 | 
			
		||||
		PERL='$(PERL)' ENGDIRS='$(ENGDIRS)'		\
 | 
			
		||||
@@ -223,8 +231,8 @@ BUILDENV=	PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
 | 
			
		||||
		EXE_EXT='$(EXE_EXT)' SHARED_LIBS='$(SHARED_LIBS)'	\
 | 
			
		||||
		SHLIB_EXT='$(SHLIB_EXT)' SHLIB_TARGET='$(SHLIB_TARGET)'	\
 | 
			
		||||
		PEX_LIBS='$(PEX_LIBS)' EX_LIBS='$(EX_LIBS)'	\
 | 
			
		||||
		CPUID_OBJ='$(CPUID_OBJ)'			\
 | 
			
		||||
		BN_ASM='$(BN_ASM)' DES_ENC='$(DES_ENC)' 	\
 | 
			
		||||
		CPUID_OBJ='$(CPUID_OBJ)' BN_ASM='$(BN_ASM)'	\
 | 
			
		||||
		EC_ASM='$(EC_ASM)' DES_ENC='$(DES_ENC)'		\
 | 
			
		||||
		AES_ENC='$(AES_ENC)' CMLL_ENC='$(CMLL_ENC)'	\
 | 
			
		||||
		BF_ENC='$(BF_ENC)' CAST_ENC='$(CAST_ENC)'	\
 | 
			
		||||
		RC4_ENC='$(RC4_ENC)' RC5_ENC='$(RC5_ENC)'	\
 | 
			
		||||
@@ -237,7 +245,6 @@ BUILDENV=	PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
 | 
			
		||||
		PERLASM_SCHEME='$(PERLASM_SCHEME)'		\
 | 
			
		||||
		FIPSLIBDIR='${FIPSLIBDIR}'			\
 | 
			
		||||
		FIPSCANLIB="$${FIPSCANLIB:-$(FIPSCANLIB)}"	\
 | 
			
		||||
		FIPSCANISTERINTERNAL='${FIPSCANISTERINTERNAL}'	\
 | 
			
		||||
		FIPS_EX_OBJ='${FIPS_EX_OBJ}'	\
 | 
			
		||||
		THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
 | 
			
		||||
# MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors,
 | 
			
		||||
@@ -249,13 +256,13 @@ BUILDENV=	PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
 | 
			
		||||
# This macro shouldn't be used directly, use RECURSIVE_BUILD_CMD or
 | 
			
		||||
# BUILD_ONE_CMD instead.
 | 
			
		||||
#
 | 
			
		||||
# BUILD_ONE_CMD is a macro to build a given target in a given
 | 
			
		||||
# subdirectory if that subdirectory is part of $(DIRS).  It requires
 | 
			
		||||
# exactly the same shell variables as BUILD_CMD.
 | 
			
		||||
#
 | 
			
		||||
# RECURSIVE_BUILD_CMD is a macro to build a given target in all
 | 
			
		||||
# subdirectories defined in $(DIRS).  It requires that the target
 | 
			
		||||
# is given through the shell variable `target'.
 | 
			
		||||
#
 | 
			
		||||
# BUILD_ONE_CMD is a macro to build a given target in a given
 | 
			
		||||
# subdirectory if that subdirectory is part of $(DIRS).  It requires
 | 
			
		||||
# exactly the same shell variables as BUILD_CMD.
 | 
			
		||||
BUILD_CMD=  if [ -d "$$dir" ]; then \
 | 
			
		||||
	    (	cd $$dir && echo "making $$target in $$dir..." && \
 | 
			
		||||
		$(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. DIR=$$dir $$target \
 | 
			
		||||
@@ -354,48 +361,36 @@ FIPS_EX_OBJ= ../crypto/aes/aes_cfb.o \
 | 
			
		||||
	../crypto/uid.o
 | 
			
		||||
 | 
			
		||||
sub_all: build_all
 | 
			
		||||
 | 
			
		||||
build_all: build_libs build_apps build_tests build_tools
 | 
			
		||||
 | 
			
		||||
build_libs: build_crypto build_fips build_ssl build_engines
 | 
			
		||||
 | 
			
		||||
build_fips:
 | 
			
		||||
	@dir=fips; target=all; [ -z "$(FIPSCANLIB)" ] || $(BUILD_ONE_CMD)
 | 
			
		||||
build_libs: build_crypto build_ssl build_engines
 | 
			
		||||
 | 
			
		||||
build_crypto:
 | 
			
		||||
	if [ -n "$(FIPSCANLIB)" ]; then \
 | 
			
		||||
		EXCL_OBJ='$(AES_ENC) $(BN_ASM) $(DES_ENC) $(CPUID_OBJ) $(SHA1_ASM_OBJ) $(MODES_ASM_OBJ) $(FIPS_EX_OBJ)' ; export EXCL_OBJ ; \
 | 
			
		||||
		ARX='$(PERL) $${TOP}/util/arx.pl $(AR)' ; \
 | 
			
		||||
	else \
 | 
			
		||||
		ARX='${AR}' ; \
 | 
			
		||||
	fi ; export ARX ; \
 | 
			
		||||
	if [ $(FIPSCANISTERINTERNAL) = "y" ]; then \
 | 
			
		||||
		AS='$(PERL) $${TOP}/util/fipsas.pl $${TOP} $${<} $(CC) -c' ; \
 | 
			
		||||
	else \
 | 
			
		||||
		AS='$(CC) -c' ; \
 | 
			
		||||
	fi ; export AS ; \
 | 
			
		||||
		dir=crypto; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_ssl:
 | 
			
		||||
	@dir=crypto; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_ssl: build_crypto
 | 
			
		||||
	@dir=ssl; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_engines:
 | 
			
		||||
build_engines: build_crypto
 | 
			
		||||
	@dir=engines; target=all; AS='$(CC) -c'; export AS; $(BUILD_ONE_CMD)
 | 
			
		||||
build_apps:
 | 
			
		||||
 | 
			
		||||
build_apps: build_libs
 | 
			
		||||
	@dir=apps; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_tests:
 | 
			
		||||
build_tests: build_libs
 | 
			
		||||
	@dir=test; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_tools:
 | 
			
		||||
build_tools: build_libs
 | 
			
		||||
	@dir=tools; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
all_testapps: build_libs build_testapps
 | 
			
		||||
build_testapps:
 | 
			
		||||
	@dir=crypto; target=testapps; $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
libcrypto$(SHLIB_EXT): libcrypto.a build_fips
 | 
			
		||||
libcrypto$(SHLIB_EXT): libcrypto.a
 | 
			
		||||
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
			
		||||
		if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
 | 
			
		||||
			FIPSLD_CC="$(CC)"; CC=fips/fipsld; \
 | 
			
		||||
			export CC FIPSLD_CC; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		$(MAKE) -e SHLIBDIRS=crypto build-shared; \
 | 
			
		||||
		$(MAKE) -e SHLIBDIRS=crypto CC="$${CC:-$(CC)}" build-shared; \
 | 
			
		||||
	else \
 | 
			
		||||
		echo "There's no support for shared libraries on this platform" >&2; \
 | 
			
		||||
		exit 1; \
 | 
			
		||||
@@ -418,7 +413,7 @@ clean-shared:
 | 
			
		||||
			done; \
 | 
			
		||||
		fi; \
 | 
			
		||||
		( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
 | 
			
		||||
		if [ "$(PLATFORM)" = "Cygwin" ]; then \
 | 
			
		||||
		if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
 | 
			
		||||
			( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
 | 
			
		||||
		fi; \
 | 
			
		||||
	done
 | 
			
		||||
@@ -457,7 +452,8 @@ libcrypto.pc: Makefile
 | 
			
		||||
	    echo 'Description: OpenSSL cryptography library'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lcrypto $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lcrypto'; \
 | 
			
		||||
	    echo 'Libs.private: $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc
 | 
			
		||||
 | 
			
		||||
libssl.pc: Makefile
 | 
			
		||||
@@ -466,11 +462,12 @@ libssl.pc: Makefile
 | 
			
		||||
	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
 | 
			
		||||
	    echo 'includedir=$${prefix}/include'; \
 | 
			
		||||
	    echo ''; \
 | 
			
		||||
	    echo 'Name: OpenSSL'; \
 | 
			
		||||
	    echo 'Name: OpenSSL-libssl'; \
 | 
			
		||||
	    echo 'Description: Secure Sockets Layer and cryptography libraries'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Requires.private: libcrypto'; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl'; \
 | 
			
		||||
	    echo 'Libs.private: $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
 | 
			
		||||
 | 
			
		||||
openssl.pc: Makefile
 | 
			
		||||
@@ -482,9 +479,7 @@ openssl.pc: Makefile
 | 
			
		||||
	    echo 'Name: OpenSSL'; \
 | 
			
		||||
	    echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
 | 
			
		||||
	    echo 'Version: '$(VERSION); \
 | 
			
		||||
	    echo 'Requires: '; \
 | 
			
		||||
	    echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
 | 
			
		||||
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
 | 
			
		||||
	    echo 'Requires: libssl libcrypto' ) > openssl.pc
 | 
			
		||||
 | 
			
		||||
Makefile: Makefile.org Configure config
 | 
			
		||||
	@echo "Makefile is older than Makefile.org, Configure or config."
 | 
			
		||||
@@ -492,12 +487,13 @@ Makefile: Makefile.org Configure config
 | 
			
		||||
	@false
 | 
			
		||||
 | 
			
		||||
libclean:
 | 
			
		||||
	rm -f *.map *.so *.so.* *.dll engines/*.so engines/*.dll *.a engines/*.a */lib */*/lib
 | 
			
		||||
	rm -f *.map *.so *.so.* *.dylib *.dll engines/*.so engines/*.dll engines/*.dylib *.a engines/*.a */lib */*/lib
 | 
			
		||||
 | 
			
		||||
clean:	libclean
 | 
			
		||||
	rm -f shlib/*.o *.o core a.out fluff rehash.time testlog make.log cctest cctest.c
 | 
			
		||||
	rm -rf *.bak certs/.0
 | 
			
		||||
	@set -e; target=clean; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
	rm -f $(LIBS)
 | 
			
		||||
	rm -f $(LIBS) tags TAGS
 | 
			
		||||
	rm -f openssl.pc libssl.pc libcrypto.pc
 | 
			
		||||
	rm -f speed.* .pure
 | 
			
		||||
	rm -f $(TARFILE)
 | 
			
		||||
@@ -518,16 +514,12 @@ links:
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
 | 
			
		||||
	@$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
 | 
			
		||||
	@set -e; target=links; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
	@if [ -z "$(FIPSCANLIB)" ]; then \
 | 
			
		||||
		set -e; target=links; dir=fips ; $(BUILD_CMD) ; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
gentests:
 | 
			
		||||
	@(cd test && echo "generating dummy tests (if needed)..." && \
 | 
			
		||||
	$(CLEARENV) && $(MAKE) -e $(BUILDENV) TESTS='$(TESTS)' OPENSSL_DEBUG_MEMORY=on generate );
 | 
			
		||||
 | 
			
		||||
dclean:
 | 
			
		||||
	rm -rf *.bak include/openssl certs/.0
 | 
			
		||||
	@set -e; target=dclean; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
rehash: rehash.time
 | 
			
		||||
@@ -537,7 +529,7 @@ rehash.time: certs apps
 | 
			
		||||
		[ -x "apps/openssl.exe" ] && OPENSSL="apps/openssl.exe" || :; \
 | 
			
		||||
		OPENSSL_DEBUG_MEMORY=on; \
 | 
			
		||||
		export OPENSSL OPENSSL_DEBUG_MEMORY; \
 | 
			
		||||
		$(PERL) tools/c_rehash certs) && \
 | 
			
		||||
		$(PERL) tools/c_rehash certs/demo) && \
 | 
			
		||||
		touch rehash.time; \
 | 
			
		||||
	else :; fi
 | 
			
		||||
 | 
			
		||||
@@ -557,14 +549,17 @@ depend:
 | 
			
		||||
lint:
 | 
			
		||||
	@set -e; target=lint; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
tags:
 | 
			
		||||
	rm -f TAGS
 | 
			
		||||
	find . -name '[^.]*.[ch]' | xargs etags -a
 | 
			
		||||
tags TAGS: FORCE
 | 
			
		||||
	rm -f TAGS tags
 | 
			
		||||
	-ctags -R .
 | 
			
		||||
	-etags -R .
 | 
			
		||||
 | 
			
		||||
FORCE:
 | 
			
		||||
 | 
			
		||||
errors:
 | 
			
		||||
	$(PERL) util/ck_errf.pl -strict */*.c */*/*.c
 | 
			
		||||
	$(PERL) util/mkerr.pl -recurse -write
 | 
			
		||||
	(cd engines; $(MAKE) PERL=$(PERL) errors)
 | 
			
		||||
	$(PERL) util/ck_errf.pl -strict */*.c */*/*.c
 | 
			
		||||
 | 
			
		||||
stacks:
 | 
			
		||||
	$(PERL) util/mkstack.pl -write
 | 
			
		||||
@@ -632,15 +627,10 @@ dist_pem_h:
 | 
			
		||||
 | 
			
		||||
install: all install_docs install_sw
 | 
			
		||||
 | 
			
		||||
uninstall: uninstall_sw uninstall_docs
 | 
			
		||||
 | 
			
		||||
install_sw:
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig \
 | 
			
		||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
 | 
			
		||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/private
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALLDIRS)
 | 
			
		||||
	@set -e; headerlist="$(EXHEADER)"; for i in $$headerlist;\
 | 
			
		||||
	do \
 | 
			
		||||
	(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
 | 
			
		||||
@@ -663,11 +653,7 @@ install_sw:
 | 
			
		||||
		do \
 | 
			
		||||
			if [ -f "$$i" -o -f "$$i.a" ]; then \
 | 
			
		||||
			(       echo installing $$i; \
 | 
			
		||||
				if [ "$(PLATFORM)" != "Cygwin" ]; then \
 | 
			
		||||
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
				else \
 | 
			
		||||
				if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
 | 
			
		||||
					c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \
 | 
			
		||||
					cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
 | 
			
		||||
					chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
 | 
			
		||||
@@ -675,6 +661,10 @@ install_sw:
 | 
			
		||||
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
				else \
 | 
			
		||||
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
 | 
			
		||||
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
				fi ); \
 | 
			
		||||
				if expr $(PLATFORM) : 'mingw' > /dev/null; then \
 | 
			
		||||
				(	case $$i in \
 | 
			
		||||
@@ -682,9 +672,9 @@ install_sw:
 | 
			
		||||
						*ssl*)    i=ssleay32.dll;; \
 | 
			
		||||
					esac; \
 | 
			
		||||
					echo installing $$i; \
 | 
			
		||||
	 				cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \
 | 
			
		||||
	 				chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \
 | 
			
		||||
	 				mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i ); \
 | 
			
		||||
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \
 | 
			
		||||
					chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \
 | 
			
		||||
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i ); \
 | 
			
		||||
				fi; \
 | 
			
		||||
			fi; \
 | 
			
		||||
		done; \
 | 
			
		||||
@@ -705,16 +695,59 @@ install_sw:
 | 
			
		||||
	cp openssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc
 | 
			
		||||
 | 
			
		||||
uninstall_sw:
 | 
			
		||||
	cd include/openssl && files=* && cd $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl && $(RM) $$files
 | 
			
		||||
	@for i in $(LIBS) ;\
 | 
			
		||||
	do \
 | 
			
		||||
		test -f "$$i" && \
 | 
			
		||||
		echo $(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i && \
 | 
			
		||||
		$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
	done;
 | 
			
		||||
	@if [ -n "$(SHARED_LIBS)" ]; then \
 | 
			
		||||
		tmp="$(SHARED_LIBS)"; \
 | 
			
		||||
		for i in $${tmp:-x}; \
 | 
			
		||||
		do \
 | 
			
		||||
			if [ -f "$$i" -o -f "$$i.a" ]; then \
 | 
			
		||||
				if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
 | 
			
		||||
					c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \
 | 
			
		||||
					echo $(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \
 | 
			
		||||
					$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \
 | 
			
		||||
					echo $(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
					$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
				else \
 | 
			
		||||
					echo $(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
					$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
 | 
			
		||||
				fi; \
 | 
			
		||||
				if expr $(PLATFORM) : 'mingw' > /dev/null; then \
 | 
			
		||||
					case $$i in \
 | 
			
		||||
						*crypto*) i=libeay32.dll;; \
 | 
			
		||||
						*ssl*)    i=ssleay32.dll;; \
 | 
			
		||||
					esac; \
 | 
			
		||||
					echo $(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i; \
 | 
			
		||||
					$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i; \
 | 
			
		||||
				fi; \
 | 
			
		||||
			fi; \
 | 
			
		||||
		done; \
 | 
			
		||||
	fi
 | 
			
		||||
	$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libcrypto.pc
 | 
			
		||||
	$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libssl.pc
 | 
			
		||||
	$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc
 | 
			
		||||
	@target=uninstall; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
install_html_docs:
 | 
			
		||||
	here="`pwd`"; \
 | 
			
		||||
	filecase=; \
 | 
			
		||||
	case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*|darwin*-*-cc) \
 | 
			
		||||
		filecase=-i; \
 | 
			
		||||
	esac; \
 | 
			
		||||
	for subdir in apps crypto ssl; do \
 | 
			
		||||
		mkdir -p $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \
 | 
			
		||||
		$(PERL) $(TOP)/util/mkdir-p $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \
 | 
			
		||||
		for i in doc/$$subdir/*.pod; do \
 | 
			
		||||
			fn=`basename $$i .pod`; \
 | 
			
		||||
			echo "installing html/$$fn.$(HTMLSUFFIX)"; \
 | 
			
		||||
			cat $$i \
 | 
			
		||||
			| sed -r 's/L<([^)]*)(\([0-9]\))?\|([^)]*)(\([0-9]\))?>/L<\1|\3>/g' \
 | 
			
		||||
			| pod2html --podroot=doc --htmlroot=.. --podpath=apps:crypto:ssl \
 | 
			
		||||
			| pod2html --podroot=doc --htmlroot=.. --podpath=$$subdir:apps:crypto:ssl \
 | 
			
		||||
			| sed -r 's/<!DOCTYPE.*//g' \
 | 
			
		||||
			> $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir/$$fn.$(HTMLSUFFIX); \
 | 
			
		||||
			$(PERL) util/extract-names.pl < $$i | \
 | 
			
		||||
@@ -726,26 +759,43 @@ install_html_docs:
 | 
			
		||||
		done; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
uninstall_html_docs:
 | 
			
		||||
	here="`pwd`"; \
 | 
			
		||||
	filecase=; \
 | 
			
		||||
	case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*|darwin*-*-cc) \
 | 
			
		||||
		filecase=-i; \
 | 
			
		||||
	esac; \
 | 
			
		||||
	for subdir in apps crypto ssl; do \
 | 
			
		||||
		for i in doc/$$subdir/*.pod; do \
 | 
			
		||||
			fn=`basename $$i .pod`; \
 | 
			
		||||
			$(RM) $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir/$$fn.$(HTMLSUFFIX); \
 | 
			
		||||
			$(PERL) util/extract-names.pl < $$i | \
 | 
			
		||||
				grep -v $$filecase "^$$fn\$$" | \
 | 
			
		||||
				while read n; do \
 | 
			
		||||
					$(RM) $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir/"$$n".$(HTMLSUFFIX); \
 | 
			
		||||
				done; \
 | 
			
		||||
		done; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
install_docs:
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl \
 | 
			
		||||
		$(INSTALL_PREFIX)$(MANDIR)/man1 \
 | 
			
		||||
		$(INSTALL_PREFIX)$(MANDIR)/man3 \
 | 
			
		||||
		$(INSTALL_PREFIX)$(MANDIR)/man5 \
 | 
			
		||||
		$(INSTALL_PREFIX)$(MANDIR)/man7
 | 
			
		||||
	@pod2man="`cd ./util; ./pod2mantest $(PERL)`"; \
 | 
			
		||||
	here="`pwd`"; \
 | 
			
		||||
	filecase=; \
 | 
			
		||||
	if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" -o "$(PLATFORM)" = "mingw" ]; then \
 | 
			
		||||
	case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*|darwin*-*-cc) \
 | 
			
		||||
		filecase=-i; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	esac; \
 | 
			
		||||
	set -e; for i in doc/apps/*.pod; do \
 | 
			
		||||
		fn=`basename $$i .pod`; \
 | 
			
		||||
		sec=`$(PERL) util/extract-section.pl 1 < $$i`; \
 | 
			
		||||
		echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
 | 
			
		||||
		(cd `$(PERL) util/dirname.pl $$i`; \
 | 
			
		||||
		sh -c "$$pod2man \
 | 
			
		||||
		pod2man \
 | 
			
		||||
			--section=$$sec --center=OpenSSL \
 | 
			
		||||
			--release=$(VERSION) `basename $$i`") \
 | 
			
		||||
			--release=$(VERSION) `basename $$i`) \
 | 
			
		||||
			>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
 | 
			
		||||
		$(PERL) util/extract-names.pl < $$i | \
 | 
			
		||||
			(grep -v $$filecase "^$$fn\$$"; true) | \
 | 
			
		||||
@@ -760,9 +810,9 @@ install_docs:
 | 
			
		||||
		sec=`$(PERL) util/extract-section.pl 3 < $$i`; \
 | 
			
		||||
		echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
 | 
			
		||||
		(cd `$(PERL) util/dirname.pl $$i`; \
 | 
			
		||||
		sh -c "$$pod2man \
 | 
			
		||||
		pod2man \
 | 
			
		||||
			--section=$$sec --center=OpenSSL \
 | 
			
		||||
			--release=$(VERSION) `basename $$i`") \
 | 
			
		||||
			--release=$(VERSION) `basename $$i`) \
 | 
			
		||||
			>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
 | 
			
		||||
		$(PERL) util/extract-names.pl < $$i | \
 | 
			
		||||
			(grep -v $$filecase "^$$fn\$$"; true) | \
 | 
			
		||||
@@ -773,4 +823,37 @@ install_docs:
 | 
			
		||||
			 done); \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
uninstall_docs:
 | 
			
		||||
	@here="`pwd`"; \
 | 
			
		||||
	filecase=; \
 | 
			
		||||
	case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*) \
 | 
			
		||||
		filecase=-i; \
 | 
			
		||||
	esac; \
 | 
			
		||||
	for i in doc/apps/*.pod; do \
 | 
			
		||||
		fn=`basename $$i .pod`; \
 | 
			
		||||
		sec=`$(PERL) util/extract-section.pl 1 < $$i`; \
 | 
			
		||||
		echo $(RM) $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
 | 
			
		||||
		$(RM) $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
 | 
			
		||||
		$(PERL) util/extract-names.pl < $$i | \
 | 
			
		||||
			(grep -v $$filecase "^$$fn\$$"; true) | \
 | 
			
		||||
			(grep -v "[	]"; true) | \
 | 
			
		||||
			while read n; do \
 | 
			
		||||
				echo $(RM) $(INSTALL_PREFIX)$(MANDIR)/man$$sec/"$$n".$${sec}$(MANSUFFIX); \
 | 
			
		||||
				$(RM) $(INSTALL_PREFIX)$(MANDIR)/man$$sec/"$$n".$${sec}$(MANSUFFIX); \
 | 
			
		||||
			done; \
 | 
			
		||||
	done; \
 | 
			
		||||
	for i in doc/crypto/*.pod doc/ssl/*.pod; do \
 | 
			
		||||
		fn=`basename $$i .pod`; \
 | 
			
		||||
		sec=`$(PERL) util/extract-section.pl 3 < $$i`; \
 | 
			
		||||
		echo $(RM) $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
 | 
			
		||||
		$(RM) $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
 | 
			
		||||
		$(PERL) util/extract-names.pl < $$i | \
 | 
			
		||||
			(grep -v $$filecase "^$$fn\$$"; true) | \
 | 
			
		||||
			(grep -v "[	]"; true) | \
 | 
			
		||||
			while read n; do \
 | 
			
		||||
				echo $(RM) $(INSTALL_PREFIX)$(MANDIR)/man$$sec/"$$n".$${sec}$(MANSUFFIX); \
 | 
			
		||||
				$(RM) $(INSTALL_PREFIX)$(MANDIR)/man$$sec/"$$n".$${sec}$(MANSUFFIX); \
 | 
			
		||||
			done; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
 | 
			
		||||
 
 | 
			
		||||
@@ -170,17 +170,6 @@ link_a.gnu:
 | 
			
		||||
link_app.gnu:
 | 
			
		||||
	@ $(DO_GNU_APP); $(LINK_APP)
 | 
			
		||||
 | 
			
		||||
DO_BEOS_SO=	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	ALLSYMSFLAGS='-Wl,--whole-archive'; \
 | 
			
		||||
	NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
 | 
			
		||||
	SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-Bsymbolic -Wl,-soname=$$SHLIB$$SHLIB_SUFFIX"
 | 
			
		||||
 | 
			
		||||
link_o.beos:
 | 
			
		||||
	@ $(DO_BEOS_SO); $(LINK_SO_O)
 | 
			
		||||
link_a.beos:
 | 
			
		||||
	@ $(DO_BEOS_SO); $(LINK_SO_A)
 | 
			
		||||
 | 
			
		||||
link_o.bsd:
 | 
			
		||||
	@if $(DETECT_GNU_LD); then $(DO_GNU_SO); else \
 | 
			
		||||
	$(CALC_VERSIONS); \
 | 
			
		||||
@@ -555,28 +544,10 @@ link_app.aix:
 | 
			
		||||
	LDFLAGS="$(CFLAGS) -Wl,-brtl,-blibpath:$(LIBRPATH):$${LIBPATH:-/usr/lib:/lib}"; \
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
link_o.reliantunix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	ALLSYMSFLAGS=; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS='$(CFLAGS) -G'; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.reliantunix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	ALLSYMSFLAGS=; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS='$(CFLAGS) -G'; \
 | 
			
		||||
	$(LINK_SO_A_UNPACKED)
 | 
			
		||||
link_app.reliantunix:
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
# Targets to build symbolic links when needed
 | 
			
		||||
symlink.gnu symlink.solaris symlink.svr3 symlink.svr5 symlink.irix \
 | 
			
		||||
symlink.aix symlink.reliantunix:
 | 
			
		||||
symlink.aix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	$(SYMLINK_SO)
 | 
			
		||||
@@ -591,7 +562,7 @@ symlink.hpux:
 | 
			
		||||
	expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	$(SYMLINK_SO)
 | 
			
		||||
# The following lines means those specific architectures do no symlinks
 | 
			
		||||
symlink.cygwin symlink.alpha-osf1 symlink.tru64 symlink.tru64-rpath symlink.beos:
 | 
			
		||||
symlink.cygwin symlink.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
 | 
			
		||||
@@ -645,11 +616,3 @@ link_o.aix-shared: link_o.aix
 | 
			
		||||
link_a.aix-shared: link_a.aix
 | 
			
		||||
link_app.aix-shared: link_app.aix
 | 
			
		||||
symlink.aix-shared: symlink.aix
 | 
			
		||||
link_o.reliantunix-shared: link_o.reliantunix
 | 
			
		||||
link_a.reliantunix-shared: link_a.reliantunix
 | 
			
		||||
link_app.reliantunix-shared: link_app.reliantunix
 | 
			
		||||
symlink.reliantunix-shared: symlink.reliantunix
 | 
			
		||||
link_o.beos-shared: link_o.beos
 | 
			
		||||
link_a.beos-shared: link_a.beos
 | 
			
		||||
link_app.beos-shared: link_app.gnu
 | 
			
		||||
symlink.beos-shared: symlink.beos
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										291
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										291
									
								
								NEWS
									
									
									
									
									
								
							@@ -5,11 +5,147 @@
 | 
			
		||||
  This file gives a brief overview of the major changes between each OpenSSL
 | 
			
		||||
  release. For more details please read the CHANGES file.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0c and OpenSSL 1.0.0d:
 | 
			
		||||
  Major changes between OpenSSL 1.0.1j and OpenSSL 1.0.2 [in beta]:
 | 
			
		||||
 | 
			
		||||
      o Suite B support for TLS 1.2 and DTLS 1.2
 | 
			
		||||
      o Support for DTLS 1.2
 | 
			
		||||
      o TLS automatic EC curve selection.
 | 
			
		||||
      o API to set TLS supported signature algorithms and curves
 | 
			
		||||
      o SSL_CONF configuration API.
 | 
			
		||||
      o TLS Brainpool support.
 | 
			
		||||
      o ALPN support.
 | 
			
		||||
      o CMS support for RSA-PSS, RSA-OAEP, ECDH and X9.42 DH.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1i and OpenSSL 1.0.1j [15 Oct 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-3513
 | 
			
		||||
      o Fix for CVE-2014-3567
 | 
			
		||||
      o Mitigation for CVE-2014-3566 (SSL protocol vulnerability)
 | 
			
		||||
      o Fix for CVE-2014-3568
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1h and OpenSSL 1.0.1i [6 Aug 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-3512
 | 
			
		||||
      o Fix for CVE-2014-3511
 | 
			
		||||
      o Fix for CVE-2014-3510
 | 
			
		||||
      o Fix for CVE-2014-3507
 | 
			
		||||
      o Fix for CVE-2014-3506
 | 
			
		||||
      o Fix for CVE-2014-3505
 | 
			
		||||
      o Fix for CVE-2014-3509
 | 
			
		||||
      o Fix for CVE-2014-5139
 | 
			
		||||
      o Fix for CVE-2014-3508
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1g and OpenSSL 1.0.1h [5 Jun 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-0224
 | 
			
		||||
      o Fix for CVE-2014-0221
 | 
			
		||||
      o Fix for CVE-2014-0195
 | 
			
		||||
      o Fix for CVE-2014-3470
 | 
			
		||||
      o Fix for CVE-2010-5298
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1f and OpenSSL 1.0.1g [7 Apr 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-0160
 | 
			
		||||
      o Add TLS padding extension workaround for broken servers.
 | 
			
		||||
      o Fix for CVE-2014-0076
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1e and OpenSSL 1.0.1f [6 Jan 2014]
 | 
			
		||||
 | 
			
		||||
      o Don't include gmt_unix_time in TLS server and client random values
 | 
			
		||||
      o Fix for TLS record tampering bug CVE-2013-4353
 | 
			
		||||
      o Fix for TLS version checking bug CVE-2013-6449
 | 
			
		||||
      o Fix for DTLS retransmission bug CVE-2013-6450
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1d and OpenSSL 1.0.1e [11 Feb 2013]:
 | 
			
		||||
 | 
			
		||||
      o Corrected fix for CVE-2013-0169
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1c and OpenSSL 1.0.1d [4 Feb 2013]:
 | 
			
		||||
 | 
			
		||||
      o Fix renegotiation in TLS 1.1, 1.2 by using the correct TLS version.
 | 
			
		||||
      o Include the fips configuration module.
 | 
			
		||||
      o Fix OCSP bad key DoS attack CVE-2013-0166
 | 
			
		||||
      o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
 | 
			
		||||
      o Fix for TLS AESNI record handling flaw CVE-2012-2686
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1b and OpenSSL 1.0.1c [10 May 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix TLS/DTLS record length checking bug CVE-2012-2333
 | 
			
		||||
      o Don't attempt to use non-FIPS composite ciphers in FIPS mode.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1a and OpenSSL 1.0.1b [26 Apr 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix compilation error on non-x86 platforms.
 | 
			
		||||
      o Make FIPS capable OpenSSL ciphers work in non-FIPS mode.
 | 
			
		||||
      o Fix SSL_OP_NO_TLSv1_1 clash with SSL_OP_ALL in OpenSSL 1.0.0
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1 and OpenSSL 1.0.1a [19 Apr 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for ASN1 overflow bug CVE-2012-2110
 | 
			
		||||
      o Workarounds for some servers that hang on long client hellos.
 | 
			
		||||
      o Fix SEGV in AES code.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.1 [14 Mar 2012]:
 | 
			
		||||
 | 
			
		||||
      o TLS/DTLS heartbeat support.
 | 
			
		||||
      o SCTP support.
 | 
			
		||||
      o RFC 5705 TLS key material exporter.
 | 
			
		||||
      o RFC 5764 DTLS-SRTP negotiation.
 | 
			
		||||
      o Next Protocol Negotiation.
 | 
			
		||||
      o PSS signatures in certificates, requests and CRLs.
 | 
			
		||||
      o Support for password based recipient info for CMS.
 | 
			
		||||
      o Support TLS v1.2 and TLS v1.1.
 | 
			
		||||
      o Preliminary FIPS capability for unvalidated 2.0 FIPS module.
 | 
			
		||||
      o SRP support.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0k and OpenSSL 1.0.0l [6 Jan 2014]
 | 
			
		||||
 | 
			
		||||
      o Fix for DTLS retransmission bug CVE-2013-6450
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0j and OpenSSL 1.0.0k [5 Feb 2013]:
 | 
			
		||||
 | 
			
		||||
      o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
 | 
			
		||||
      o Fix OCSP bad key DoS attack CVE-2013-0166
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0i and OpenSSL 1.0.0j [10 May 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix DTLS record length checking bug CVE-2012-2333
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.0i [19 Apr 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for ASN1 overflow bug CVE-2012-2110
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0g and OpenSSL 1.0.0h [12 Mar 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for CMS/PKCS#7 MMA CVE-2012-0884
 | 
			
		||||
      o Corrected fix for CVE-2011-4619
 | 
			
		||||
      o Various DTLS fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0f and OpenSSL 1.0.0g [18 Jan 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for DTLS DoS issue CVE-2012-0050
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0e and OpenSSL 1.0.0f [4 Jan 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for DTLS plaintext recovery attack CVE-2011-4108
 | 
			
		||||
      o Clear block padding bytes of SSL 3.0 records CVE-2011-4576
 | 
			
		||||
      o Only allow one SGC handshake restart for SSL/TLS CVE-2011-4619
 | 
			
		||||
      o Check parameters are not NULL in GOST ENGINE CVE-2012-0027
 | 
			
		||||
      o Check for malformed RFC3779 data CVE-2011-4577
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0d and OpenSSL 1.0.0e [6 Sep 2011]:
 | 
			
		||||
 | 
			
		||||
      o Fix for CRL vulnerability issue CVE-2011-3207
 | 
			
		||||
      o Fix for ECDH crashes CVE-2011-3210
 | 
			
		||||
      o Protection against EC timing attacks.
 | 
			
		||||
      o Support ECDH ciphersuites for certificates using SHA2 algorithms.
 | 
			
		||||
      o Various DTLS fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0c and OpenSSL 1.0.0d [8 Feb 2011]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2011-0014
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0b and OpenSSL 1.0.0c:
 | 
			
		||||
  Major changes between OpenSSL 1.0.0b and OpenSSL 1.0.0c [2 Dec 2010]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-4180
 | 
			
		||||
      o Fix for CVE-2010-4252
 | 
			
		||||
@@ -17,18 +153,18 @@
 | 
			
		||||
      o Fix various platform compilation issues.
 | 
			
		||||
      o Corrected fix for security issue CVE-2010-3864.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0a and OpenSSL 1.0.0b:
 | 
			
		||||
  Major changes between OpenSSL 1.0.0a and OpenSSL 1.0.0b [16 Nov 2010]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-3864.
 | 
			
		||||
      o Fix for CVE-2010-2939
 | 
			
		||||
      o Fix WIN32 build system for GOST ENGINE.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a:
 | 
			
		||||
  Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a [1 Jun 2010]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-1633.
 | 
			
		||||
      o GOST MAC and CFB fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8n and OpenSSL 1.0.0:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8n and OpenSSL 1.0.0 [29 Mar 2010]:
 | 
			
		||||
 | 
			
		||||
      o RFC3280 path validation: sufficient to process PKITS tests.
 | 
			
		||||
      o Integrated support for PVK files and keyblobs.
 | 
			
		||||
@@ -51,20 +187,65 @@
 | 
			
		||||
      o Opaque PRF Input TLS extension support.
 | 
			
		||||
      o Updated time routines to avoid OS limitations.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8q and OpenSSL 0.9.8r:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8y and OpenSSL 0.9.8za [5 Jun 2014]:
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2014-0224
 | 
			
		||||
      o Fix for CVE-2014-0221
 | 
			
		||||
      o Fix for CVE-2014-0195
 | 
			
		||||
      o Fix for CVE-2014-3470
 | 
			
		||||
      o Fix for CVE-2014-0076
 | 
			
		||||
      o Fix for CVE-2010-5298
 | 
			
		||||
      o Fix to TLS alert handling.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8x and OpenSSL 0.9.8y [5 Feb 2013]:
 | 
			
		||||
 | 
			
		||||
      o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
 | 
			
		||||
      o Fix OCSP bad key DoS attack CVE-2013-0166
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8w and OpenSSL 0.9.8x [10 May 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix DTLS record length checking bug CVE-2012-2333
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8v and OpenSSL 0.9.8w [23 Apr 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2012-2131 (corrected fix for 0.9.8 and CVE-2012-2110)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8u and OpenSSL 0.9.8v [19 Apr 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for ASN1 overflow bug CVE-2012-2110
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8t and OpenSSL 0.9.8u [12 Mar 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for CMS/PKCS#7 MMA CVE-2012-0884
 | 
			
		||||
      o Corrected fix for CVE-2011-4619
 | 
			
		||||
      o Various DTLS fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8s and OpenSSL 0.9.8t [18 Jan 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for DTLS DoS issue CVE-2012-0050
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8r and OpenSSL 0.9.8s [4 Jan 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for DTLS plaintext recovery attack CVE-2011-4108
 | 
			
		||||
      o Fix policy check double free error CVE-2011-4109
 | 
			
		||||
      o Clear block padding bytes of SSL 3.0 records CVE-2011-4576
 | 
			
		||||
      o Only allow one SGC handshake restart for SSL/TLS CVE-2011-4619
 | 
			
		||||
      o Check for malformed RFC3779 data CVE-2011-4577
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8q and OpenSSL 0.9.8r [8 Feb 2011]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2011-0014
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8p and OpenSSL 0.9.8q:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8p and OpenSSL 0.9.8q [2 Dec 2010]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-4180
 | 
			
		||||
      o Fix for CVE-2010-4252
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8o and OpenSSL 0.9.8p:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8o and OpenSSL 0.9.8p [16 Nov 2010]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-3864.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8n and OpenSSL 0.9.8o:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8n and OpenSSL 0.9.8o [1 Jun 2010]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-0742.
 | 
			
		||||
      o Various DTLS fixes.
 | 
			
		||||
@@ -72,12 +253,12 @@
 | 
			
		||||
      o Fix for no-rc4 compilation.
 | 
			
		||||
      o Chil ENGINE unload workaround.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8m and OpenSSL 0.9.8n:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8m and OpenSSL 0.9.8n [24 Mar 2010]:
 | 
			
		||||
 | 
			
		||||
      o CFB cipher definition fixes.
 | 
			
		||||
      o Fix security issues CVE-2010-0740 and CVE-2010-0433.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8l and OpenSSL 0.9.8m:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8l and OpenSSL 0.9.8m [25 Feb 2010]:
 | 
			
		||||
 | 
			
		||||
      o Cipher definition fixes.
 | 
			
		||||
      o Workaround for slow RAND_poll() on some WIN32 versions.
 | 
			
		||||
@@ -89,33 +270,33 @@
 | 
			
		||||
      o Ticket and SNI coexistence fixes.
 | 
			
		||||
      o Many fixes to DTLS handling. 
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8k and OpenSSL 0.9.8l:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8k and OpenSSL 0.9.8l [5 Nov 2009]:
 | 
			
		||||
 | 
			
		||||
      o Temporary work around for CVE-2009-3555: disable renegotiation.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8j and OpenSSL 0.9.8k:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8j and OpenSSL 0.9.8k [25 Mar 2009]:
 | 
			
		||||
 | 
			
		||||
      o Fix various build issues.
 | 
			
		||||
      o Fix security issues (CVE-2009-0590, CVE-2009-0591, CVE-2009-0789)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8i and OpenSSL 0.9.8j:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8i and OpenSSL 0.9.8j [7 Jan 2009]:
 | 
			
		||||
 | 
			
		||||
      o Fix security issue (CVE-2008-5077)
 | 
			
		||||
      o Merge FIPS 140-2 branch code.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8g and OpenSSL 0.9.8h:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8g and OpenSSL 0.9.8h [28 May 2008]:
 | 
			
		||||
 | 
			
		||||
      o CryptoAPI ENGINE support.
 | 
			
		||||
      o Various precautionary measures.
 | 
			
		||||
      o Fix for bugs affecting certificate request creation.
 | 
			
		||||
      o Support for local machine keyset attribute in PKCS#12 files.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8f and OpenSSL 0.9.8g:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8f and OpenSSL 0.9.8g [19 Oct 2007]:
 | 
			
		||||
 | 
			
		||||
      o Backport of CMS functionality to 0.9.8.
 | 
			
		||||
      o Fixes for bugs introduced with 0.9.8f.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8e and OpenSSL 0.9.8f:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8e and OpenSSL 0.9.8f [11 Oct 2007]:
 | 
			
		||||
 | 
			
		||||
      o Add gcc 4.2 support.
 | 
			
		||||
      o Add support for AES and SSE2 assembly lanugauge optimization
 | 
			
		||||
@@ -126,23 +307,23 @@
 | 
			
		||||
      o RFC4507bis support.
 | 
			
		||||
      o TLS Extensions support.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e [23 Feb 2007]:
 | 
			
		||||
 | 
			
		||||
      o Various ciphersuite selection fixes.
 | 
			
		||||
      o RFC3779 support.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d [28 Sep 2006]:
 | 
			
		||||
 | 
			
		||||
      o Introduce limits to prevent malicious key DoS  (CVE-2006-2940)
 | 
			
		||||
      o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
 | 
			
		||||
      o Changes to ciphersuite selection algorithm
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8b and OpenSSL 0.9.8c:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8b and OpenSSL 0.9.8c [5 Sep 2006]:
 | 
			
		||||
 | 
			
		||||
      o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339
 | 
			
		||||
      o New cipher Camellia
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b [4 May 2006]:
 | 
			
		||||
 | 
			
		||||
      o Cipher string fixes.
 | 
			
		||||
      o Fixes for VC++ 2005.
 | 
			
		||||
@@ -152,12 +333,12 @@
 | 
			
		||||
      o Built in dynamic engine compilation support on Win32.
 | 
			
		||||
      o Fixes auto dynamic engine loading in Win32.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8 and OpenSSL 0.9.8a:
 | 
			
		||||
  Major changes between OpenSSL 0.9.8 and OpenSSL 0.9.8a [11 Oct 2005]:
 | 
			
		||||
 | 
			
		||||
      o Fix potential SSL 2.0 rollback, CVE-2005-2969
 | 
			
		||||
      o Extended Windows CE support
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.8:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.8 [5 Jul 2005]:
 | 
			
		||||
 | 
			
		||||
      o Major work on the BIGNUM library for higher efficiency and to
 | 
			
		||||
        make operations more streamlined and less contradictory.  This
 | 
			
		||||
@@ -231,36 +412,36 @@
 | 
			
		||||
      o Added initial support for Win64.
 | 
			
		||||
      o Added alternate pkg-config files.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7l and OpenSSL 0.9.7m:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7l and OpenSSL 0.9.7m [23 Feb 2007]:
 | 
			
		||||
 | 
			
		||||
      o FIPS 1.1.1 module linking.
 | 
			
		||||
      o Various ciphersuite selection fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7k and OpenSSL 0.9.7l:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7k and OpenSSL 0.9.7l [28 Sep 2006]:
 | 
			
		||||
 | 
			
		||||
      o Introduce limits to prevent malicious key DoS  (CVE-2006-2940)
 | 
			
		||||
      o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7j and OpenSSL 0.9.7k:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7j and OpenSSL 0.9.7k [5 Sep 2006]:
 | 
			
		||||
 | 
			
		||||
      o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j [4 May 2006]:
 | 
			
		||||
 | 
			
		||||
      o Visual C++ 2005 fixes.
 | 
			
		||||
      o Update Windows build system for FIPS.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7h and OpenSSL 0.9.7i:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7h and OpenSSL 0.9.7i [14 Oct 2005]:
 | 
			
		||||
 | 
			
		||||
      o Give EVP_MAX_MD_SIZE it's old value, except for a FIPS build.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.7h:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.7h [11 Oct 2005]:
 | 
			
		||||
 | 
			
		||||
      o Fix SSL 2.0 Rollback, CVE-2005-2969
 | 
			
		||||
      o Allow use of fixed-length exponent on DSA signing
 | 
			
		||||
      o Default fixed-window RSA, DSA, DH private-key operations
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g [11 Apr 2005]:
 | 
			
		||||
 | 
			
		||||
      o More compilation issues fixed.
 | 
			
		||||
      o Adaptation to more modern Kerberos API.
 | 
			
		||||
@@ -269,7 +450,7 @@
 | 
			
		||||
      o More constification.
 | 
			
		||||
      o Added processing of proxy certificates (RFC 3820).
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f [22 Mar 2005]:
 | 
			
		||||
 | 
			
		||||
      o Several compilation issues fixed.
 | 
			
		||||
      o Many memory allocation failure checks added.
 | 
			
		||||
@@ -277,12 +458,12 @@
 | 
			
		||||
      o Mandatory basic checks on certificates.
 | 
			
		||||
      o Performance improvements.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e [25 Oct 2004]:
 | 
			
		||||
 | 
			
		||||
      o Fix race condition in CRL checking code.
 | 
			
		||||
      o Fixes to PKCS#7 (S/MIME) code.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d [17 Mar 2004]:
 | 
			
		||||
 | 
			
		||||
      o Security: Fix Kerberos ciphersuite SSL/TLS handshaking bug
 | 
			
		||||
      o Security: Fix null-pointer assignment in do_change_cipher_spec()
 | 
			
		||||
@@ -290,14 +471,14 @@
 | 
			
		||||
      o Multiple X509 verification fixes
 | 
			
		||||
      o Speed up HMAC and other operations
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c [30 Sep 2003]:
 | 
			
		||||
 | 
			
		||||
      o Security: fix various ASN1 parsing bugs.
 | 
			
		||||
      o New -ignore_err option to OCSP utility.
 | 
			
		||||
      o Various interop and bug fixes in S/MIME code.
 | 
			
		||||
      o SSL/TLS protocol fix for unrequested client certificates.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b [10 Apr 2003]:
 | 
			
		||||
 | 
			
		||||
      o Security: counter the Klima-Pokorny-Rosa extension of
 | 
			
		||||
        Bleichbacher's attack 
 | 
			
		||||
@@ -308,7 +489,7 @@
 | 
			
		||||
      o ASN.1: treat domainComponent correctly.
 | 
			
		||||
      o Documentation: fixes and additions.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a:
 | 
			
		||||
  Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a [19 Feb 2003]:
 | 
			
		||||
 | 
			
		||||
      o Security: Important security related bugfixes.
 | 
			
		||||
      o Enhanced compatibility with MIT Kerberos.
 | 
			
		||||
@@ -319,7 +500,7 @@
 | 
			
		||||
      o SSL/TLS: now handles manual certificate chain building.
 | 
			
		||||
      o SSL/TLS: certain session ID malfunctions corrected.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7 [30 Dec 2002]:
 | 
			
		||||
 | 
			
		||||
      o New library section OCSP.
 | 
			
		||||
      o Complete rewrite of ASN1 code.
 | 
			
		||||
@@ -365,23 +546,23 @@
 | 
			
		||||
      o SSL/TLS: add callback to retrieve SSL/TLS messages.
 | 
			
		||||
      o SSL/TLS: support AES cipher suites (RFC3268).
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k [30 Sep 2003]:
 | 
			
		||||
 | 
			
		||||
      o Security: fix various ASN1 parsing bugs.
 | 
			
		||||
      o SSL/TLS protocol fix for unrequested client certificates.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j [10 Apr 2003]:
 | 
			
		||||
 | 
			
		||||
      o Security: counter the Klima-Pokorny-Rosa extension of
 | 
			
		||||
        Bleichbacher's attack 
 | 
			
		||||
      o Security: make RSA blinding default.
 | 
			
		||||
      o Build: shared library support fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i [19 Feb 2003]:
 | 
			
		||||
 | 
			
		||||
      o Important security related bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h [5 Dec 2002]:
 | 
			
		||||
 | 
			
		||||
      o New configuration targets for Tandem OSS and A/UX.
 | 
			
		||||
      o New OIDs for Microsoft attributes.
 | 
			
		||||
@@ -395,25 +576,25 @@
 | 
			
		||||
      o Fixes for smaller building problems.
 | 
			
		||||
      o Updates of manuals, FAQ and other instructive documents.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g [9 Aug 2002]:
 | 
			
		||||
 | 
			
		||||
      o Important building fixes on Unix.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f [8 Aug 2002]:
 | 
			
		||||
 | 
			
		||||
      o Various important bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e [30 Jul 2002]:
 | 
			
		||||
 | 
			
		||||
      o Important security related bugfixes.
 | 
			
		||||
      o Various SSL/TLS library bugfixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d [9 May 2002]:
 | 
			
		||||
 | 
			
		||||
      o Various SSL/TLS library bugfixes.
 | 
			
		||||
      o Fix DH parameter generation for 'non-standard' generators.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c [21 Dec 2001]:
 | 
			
		||||
 | 
			
		||||
      o Various SSL/TLS library bugfixes.
 | 
			
		||||
      o BIGNUM library fixes.
 | 
			
		||||
@@ -426,7 +607,7 @@
 | 
			
		||||
        Broadcom and Cryptographic Appliance's keyserver
 | 
			
		||||
        [in 0.9.6c-engine release].
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b [9 Jul 2001]:
 | 
			
		||||
 | 
			
		||||
      o Security fix: PRNG improvements.
 | 
			
		||||
      o Security fix: RSA OAEP check.
 | 
			
		||||
@@ -443,7 +624,7 @@
 | 
			
		||||
      o Increase default size for BIO buffering filter.
 | 
			
		||||
      o Compatibility fixes in some scripts.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.6a:
 | 
			
		||||
  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.6a [5 Apr 2001]:
 | 
			
		||||
 | 
			
		||||
      o Security fix: change behavior of OpenSSL to avoid using
 | 
			
		||||
        environment variables when running as root.
 | 
			
		||||
@@ -468,7 +649,7 @@
 | 
			
		||||
      o New function BN_rand_range().
 | 
			
		||||
      o Add "-rand" option to openssl s_client and s_server.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6:
 | 
			
		||||
  Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6 [10 Oct 2000]:
 | 
			
		||||
 | 
			
		||||
      o Some documentation for BIO and SSL libraries.
 | 
			
		||||
      o Enhanced chain verification using key identifiers.
 | 
			
		||||
@@ -483,7 +664,7 @@
 | 
			
		||||
    [1] The support for external crypto devices is currently a separate
 | 
			
		||||
        distribution.  See the file README.ENGINE.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a:
 | 
			
		||||
  Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a [1 Apr 2000]:
 | 
			
		||||
 | 
			
		||||
      o Bug fixes for Win32, SuSE Linux, NeXTSTEP and FreeBSD 2.2.8 
 | 
			
		||||
      o Shared library support for HPUX and Solaris-gcc
 | 
			
		||||
@@ -492,7 +673,7 @@
 | 
			
		||||
      o New 'rand' application
 | 
			
		||||
      o New way to check for existence of algorithms from scripts
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5:
 | 
			
		||||
  Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5 [25 May 2000]:
 | 
			
		||||
 | 
			
		||||
      o S/MIME support in new 'smime' command
 | 
			
		||||
      o Documentation for the OpenSSL command line application
 | 
			
		||||
@@ -528,7 +709,7 @@
 | 
			
		||||
      o Enhanced support for Alpha Linux
 | 
			
		||||
      o Experimental MacOS support
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4:
 | 
			
		||||
  Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4 [9 Aug 1999]:
 | 
			
		||||
 | 
			
		||||
      o Transparent support for PKCS#8 format private keys: these are used
 | 
			
		||||
        by several software packages and are more secure than the standard
 | 
			
		||||
@@ -539,7 +720,7 @@
 | 
			
		||||
      o New pipe-like BIO that allows using the SSL library when actual I/O
 | 
			
		||||
        must be handled by the application (BIO pair)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.2b and OpenSSL 0.9.3:
 | 
			
		||||
  Major changes between OpenSSL 0.9.2b and OpenSSL 0.9.3 [24 May 1999]:
 | 
			
		||||
      o Lots of enhancements and cleanups to the Configuration mechanism
 | 
			
		||||
      o RSA OEAP related fixes
 | 
			
		||||
      o Added `openssl ca -revoke' option for revoking a certificate
 | 
			
		||||
@@ -553,7 +734,7 @@
 | 
			
		||||
      o Sparc assembler bignum implementation, optimized hash functions
 | 
			
		||||
      o Option to disable selected ciphers
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.1c and OpenSSL 0.9.2b:
 | 
			
		||||
  Major changes between OpenSSL 0.9.1c and OpenSSL 0.9.2b [22 Mar 1999]:
 | 
			
		||||
      o Fixed a security hole related to session resumption
 | 
			
		||||
      o Fixed RSA encryption routines for the p < q case
 | 
			
		||||
      o "ALL" in cipher lists now means "everything except NULL ciphers"
 | 
			
		||||
@@ -575,7 +756,7 @@
 | 
			
		||||
      o Lots of memory leak fixes.
 | 
			
		||||
      o Lots of bug fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c:
 | 
			
		||||
  Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c [23 Dec 1998]:
 | 
			
		||||
      o Integration of the popular NO_RSA/NO_DSA patches
 | 
			
		||||
      o Initial support for compression inside the SSL record layer
 | 
			
		||||
      o Added BIO proxy and filtering functionality
 | 
			
		||||
 
 | 
			
		||||
@@ -270,22 +270,6 @@ sub ssl_tests
 | 
			
		||||
   print( OUT "\n========================================================\n");
 | 
			
		||||
   print( OUT "SSL TESTS:\n\n");
 | 
			
		||||
 | 
			
		||||
   system("ssltest -ssl2 (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2:");
 | 
			
		||||
   log_output("ssltest -ssl2", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("$ssltest -ssl2 -server_auth (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with server authentication:");
 | 
			
		||||
   log_output("$ssltest -ssl2 -server_auth", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("$ssltest -ssl2 -client_auth (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with client authentication:");
 | 
			
		||||
   log_output("$ssltest -ssl2 -client_auth", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("$ssltest -ssl2 -server_auth -client_auth (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with both client and server authentication:");
 | 
			
		||||
   log_output("$ssltest -ssl2 -server_auth -client_auth", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -ssl3 (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv3:");
 | 
			
		||||
   log_output("ssltest -ssl3", $outFile);
 | 
			
		||||
@@ -318,26 +302,10 @@ sub ssl_tests
 | 
			
		||||
   log_desc("Testing sslv2/sslv3 with both client and server authentication:");
 | 
			
		||||
   log_output("$ssltest -server_auth -client_auth", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -ssl2 (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -ssl2", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -dhe1024dsa -v (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2/sslv3 with 1024 bit DHE via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -dhe1024dsa -v", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("$ssltest -bio_pair -ssl2 -server_auth (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with server authentication via BIO pair:");
 | 
			
		||||
   log_output("$ssltest -bio_pair -ssl2 -server_auth", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("$ssltest -bio_pair -ssl2 -client_auth (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with client authentication via BIO pair:");
 | 
			
		||||
   log_output("$ssltest -bio_pair -ssl2 -client_auth", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("$ssltest -bio_pair -ssl2 -server_auth -client_auth (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv2 with both client and server authentication via BIO pair:");
 | 
			
		||||
   log_output("$ssltest -bio_pair -ssl2 -server_auth -client_auth", $outFile);
 | 
			
		||||
 | 
			
		||||
   system("ssltest -bio_pair -ssl3 (CLIB_OPT)/>$outFile");
 | 
			
		||||
   log_desc("Testing sslv3 via BIO pair:");
 | 
			
		||||
   log_output("ssltest -bio_pair -ssl3", $outFile);
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,7 @@ static LHASH *error_hash=NULL;
 | 
			
		||||
static LHASH *thread_hash=NULL;
 | 
			
		||||
 | 
			
		||||
several files have routines with static "init" to track if error strings
 | 
			
		||||
   have been loaded ( may not want seperate error strings for each process )
 | 
			
		||||
   have been loaded ( may not want separate error strings for each process )
 | 
			
		||||
   The "init" variable can't be left "global" because the error has is a ptr
 | 
			
		||||
   that is malloc'ed.  The malloc'ed error has is dependant on the "init"
 | 
			
		||||
   vars.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								PROBLEMS
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								PROBLEMS
									
									
									
									
									
								
							@@ -197,3 +197,17 @@ reconfigure with additional no-sse2 [or 386] option passed to ./config.
 | 
			
		||||
We don't have framework to associate -ldl with no-dso, therefore the only
 | 
			
		||||
way is to edit Makefile right after ./config no-dso and remove -ldl from
 | 
			
		||||
EX_LIBS line.
 | 
			
		||||
 | 
			
		||||
* hpux-parisc2-cc no-asm build fails with SEGV in ECDSA/DH.
 | 
			
		||||
 | 
			
		||||
Compiler bug, presumably at particular patch level. Remaining
 | 
			
		||||
hpux*-parisc*-cc configurations can be affected too. Drop optimization
 | 
			
		||||
level to +O2 when compiling bn_nist.o.
 | 
			
		||||
 | 
			
		||||
* solaris64-sparcv9-cc link failure
 | 
			
		||||
 | 
			
		||||
Solaris 8 ar can fail to maintain symbol table in .a, which results in
 | 
			
		||||
link failures. Apply 109147-09 or later or modify Makefile generated
 | 
			
		||||
by ./Configure solaris64-sparcv9-cc and replace RANLIB assignment with
 | 
			
		||||
 | 
			
		||||
	RANLIB= /usr/ccs/bin/ar rs
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								README
									
									
									
									
									
								
							@@ -90,32 +90,6 @@
 | 
			
		||||
        SSL/TLS Client and Server Tests
 | 
			
		||||
        Handling of S/MIME signed or encrypted mail
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 PATENTS
 | 
			
		||||
 -------
 | 
			
		||||
 | 
			
		||||
 Various companies hold various patents for various algorithms in various
 | 
			
		||||
 locations around the world. _YOU_ are responsible for ensuring that your use
 | 
			
		||||
 of any algorithms is legal by checking if there are any patents in your
 | 
			
		||||
 country.  The file contains some of the patents that we know about or are
 | 
			
		||||
 rumored to exist. This is not a definitive list.
 | 
			
		||||
 | 
			
		||||
 RSA Security holds software patents on the RC5 algorithm.  If you
 | 
			
		||||
 intend to use this cipher, you must contact RSA Security for
 | 
			
		||||
 licensing conditions. Their web page is http://www.rsasecurity.com/.
 | 
			
		||||
 | 
			
		||||
 RC4 is a trademark of RSA Security, so use of this label should perhaps
 | 
			
		||||
 only be used with RSA Security's permission.
 | 
			
		||||
 | 
			
		||||
 The IDEA algorithm is patented by Ascom in Austria, France, Germany, Italy,
 | 
			
		||||
 Japan, the Netherlands, Spain, Sweden, Switzerland, UK and the USA.  They
 | 
			
		||||
 should be contacted if that algorithm is to be used; their web page is
 | 
			
		||||
 http://www.ascom.ch/.
 | 
			
		||||
 | 
			
		||||
 NTT and Mitsubishi have patents and pending patents on the Camellia
 | 
			
		||||
 algorithm, but allow use at no charge without requiring an explicit
 | 
			
		||||
 licensing agreement: http://info.isl.ntt.co.jp/crypt/eng/info/chiteki.html
 | 
			
		||||
 | 
			
		||||
 INSTALLATION
 | 
			
		||||
 ------------
 | 
			
		||||
 | 
			
		||||
@@ -161,8 +135,7 @@
 | 
			
		||||
    - Problem Description (steps that will reproduce the problem, if known)
 | 
			
		||||
    - Stack Traceback (if the application dumps core)
 | 
			
		||||
 | 
			
		||||
 Report the bug to the OpenSSL project via the Request Tracker
 | 
			
		||||
 (http://www.openssl.org/support/rt.html) by mail to:
 | 
			
		||||
 Email the report to:
 | 
			
		||||
 | 
			
		||||
    openssl-bugs@openssl.org
 | 
			
		||||
 | 
			
		||||
@@ -170,10 +143,11 @@
 | 
			
		||||
 or support queries. Just because something doesn't work the way you expect
 | 
			
		||||
 does not mean it is necessarily a bug in OpenSSL.
 | 
			
		||||
 | 
			
		||||
 Note that mail to openssl-bugs@openssl.org is recorded in the publicly
 | 
			
		||||
 readable request tracker database and is forwarded to a public
 | 
			
		||||
 mailing list. Confidential mail may be sent to openssl-security@openssl.org
 | 
			
		||||
 (PGP key available from the key servers).
 | 
			
		||||
 Note that mail to openssl-bugs@openssl.org is recorded in the public
 | 
			
		||||
 request tracker database (see https://www.openssl.org/support/rt.html
 | 
			
		||||
 for details) and also forwarded to a public mailing list. Confidential
 | 
			
		||||
 mail may be sent to openssl-security@openssl.org (PGP key available from
 | 
			
		||||
 the key servers).
 | 
			
		||||
 | 
			
		||||
 HOW TO CONTRIBUTE TO OpenSSL
 | 
			
		||||
 ----------------------------
 | 
			
		||||
@@ -190,7 +164,7 @@
 | 
			
		||||
 reason as to why that feature isn't implemented.
 | 
			
		||||
 | 
			
		||||
 Patches should be as up to date as possible, preferably relative to the
 | 
			
		||||
 current CVS or the last snapshot. They should follow the coding style of
 | 
			
		||||
 current Git or the last snapshot. They should follow the coding style of
 | 
			
		||||
 OpenSSL and compile without warnings. Some of the core team developer targets
 | 
			
		||||
 can be used for testing purposes, (debug-steve64, debug-geoff etc). OpenSSL
 | 
			
		||||
 compiles on many varied platforms: try to ensure you only use portable
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										148
									
								
								STATUS
									
									
									
									
									
								
							
							
						
						
									
										148
									
								
								STATUS
									
									
									
									
									
								
							@@ -1,148 +0,0 @@
 | 
			
		||||
 | 
			
		||||
  OpenSSL STATUS                           Last modified at
 | 
			
		||||
  ______________                           $Date: 2011/02/08 17:48:56 $
 | 
			
		||||
 | 
			
		||||
  DEVELOPMENT STATE
 | 
			
		||||
 | 
			
		||||
    o  OpenSSL 1.1.0:  Under development...
 | 
			
		||||
    o  OpenSSL 1.0.1:  Under development...
 | 
			
		||||
    o  OpenSSL 1.0.0d: Released on February   8nd, 2011
 | 
			
		||||
    o  OpenSSL 1.0.0c: Released on December   2nd, 2010
 | 
			
		||||
    o  OpenSSL 1.0.0b: Released on November  16th, 2010
 | 
			
		||||
    o  OpenSSL 1.0.0a: Released on June      1st,  2010
 | 
			
		||||
    o  OpenSSL 1.0.0:  Released on March     29th, 2010
 | 
			
		||||
    o  OpenSSL 0.9.8r: Released on February   8nd, 2011
 | 
			
		||||
    o  OpenSSL 0.9.8q: Released on December   2nd, 2010
 | 
			
		||||
    o  OpenSSL 0.9.8p: Released on November  16th, 2010
 | 
			
		||||
    o  OpenSSL 0.9.8o: Released on June       1st, 2010
 | 
			
		||||
    o  OpenSSL 0.9.8n: Released on March     24th, 2010
 | 
			
		||||
    o  OpenSSL 0.9.8m: Released on February  25th, 2010
 | 
			
		||||
    o  OpenSSL 0.9.8l: Released on November   5th, 2009
 | 
			
		||||
    o  OpenSSL 0.9.8k: Released on March     25th, 2009
 | 
			
		||||
    o  OpenSSL 0.9.8j: Released on January    7th, 2009
 | 
			
		||||
    o  OpenSSL 0.9.8i: Released on September 15th, 2008
 | 
			
		||||
    o  OpenSSL 0.9.8h: Released on May       28th, 2008
 | 
			
		||||
    o  OpenSSL 0.9.8g: Released on October   19th, 2007
 | 
			
		||||
    o  OpenSSL 0.9.8f: Released on October   11th, 2007
 | 
			
		||||
    o  OpenSSL 0.9.8e: Released on February  23rd, 2007
 | 
			
		||||
    o  OpenSSL 0.9.8d: Released on September 28th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.8c: Released on September  5th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.8b: Released on May        4th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.8a: Released on October   11th, 2005
 | 
			
		||||
    o  OpenSSL 0.9.8:  Released on July       5th, 2005
 | 
			
		||||
    o  OpenSSL 0.9.7m: Released on February  23rd, 2007
 | 
			
		||||
    o  OpenSSL 0.9.7l: Released on September 28th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.7k: Released on September  5th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.7j: Released on May        4th, 2006
 | 
			
		||||
    o  OpenSSL 0.9.7i: Released on October   14th, 2005
 | 
			
		||||
    o  OpenSSL 0.9.7h: Released on October   11th, 2005
 | 
			
		||||
    o  OpenSSL 0.9.7g: Released on April     11th, 2005
 | 
			
		||||
    o  OpenSSL 0.9.7f: Released on March     22nd, 2005
 | 
			
		||||
    o  OpenSSL 0.9.7e: Released on October   25th, 2004
 | 
			
		||||
    o  OpenSSL 0.9.7d: Released on March     17th, 2004
 | 
			
		||||
    o  OpenSSL 0.9.7c: Released on September 30th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.7b: Released on April     10th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.7a: Released on February  19th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.7:  Released on December  31st, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6m: Released on March     17th, 2004
 | 
			
		||||
    o  OpenSSL 0.9.6l: Released on November   4th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.6k: Released on September 30th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.6j: Released on April     10th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.6i: Released on February  19th, 2003
 | 
			
		||||
    o  OpenSSL 0.9.6h: Released on December   5th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6g: Released on August     9th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6f: Released on August     8th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6e: Released on July      30th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6d: Released on May        9th, 2002
 | 
			
		||||
    o  OpenSSL 0.9.6c: Released on December  21st, 2001
 | 
			
		||||
    o  OpenSSL 0.9.6b: Released on July       9th, 2001
 | 
			
		||||
    o  OpenSSL 0.9.6a: Released on April      5th, 2001
 | 
			
		||||
    o  OpenSSL 0.9.6:  Released on September 24th, 2000
 | 
			
		||||
    o  OpenSSL 0.9.5a: Released on April      1st, 2000
 | 
			
		||||
    o  OpenSSL 0.9.5:  Released on February  28th, 2000
 | 
			
		||||
    o  OpenSSL 0.9.4:  Released on August    09th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.3a: Released on May       29th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.3:  Released on May       25th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.2b: Released on March     22th, 1999
 | 
			
		||||
    o  OpenSSL 0.9.1c: Released on December  23th, 1998
 | 
			
		||||
 | 
			
		||||
  [See also http://www.openssl.org/support/rt.html]
 | 
			
		||||
 | 
			
		||||
  RELEASE SHOWSTOPPERS
 | 
			
		||||
 | 
			
		||||
    o The Makefiles fail with some SysV makes.
 | 
			
		||||
    o 
 | 
			
		||||
 | 
			
		||||
  AVAILABLE PATCHES
 | 
			
		||||
 | 
			
		||||
    o 
 | 
			
		||||
 | 
			
		||||
  IN PROGRESS
 | 
			
		||||
 | 
			
		||||
    o Steve is currently working on (in no particular order):
 | 
			
		||||
        ASN1 code redesign, butchery, replacement.
 | 
			
		||||
        OCSP
 | 
			
		||||
        EVP cipher enhancement.
 | 
			
		||||
        Enhanced certificate chain verification.
 | 
			
		||||
	Private key, certificate and CRL API and implementation.
 | 
			
		||||
	Developing and bugfixing PKCS#7 (S/MIME code).
 | 
			
		||||
        Various X509 issues: character sets, certificate request extensions.
 | 
			
		||||
    o Richard is currently working on:
 | 
			
		||||
	Constification
 | 
			
		||||
	Attribute Certificate support
 | 
			
		||||
	Certificate Pair support
 | 
			
		||||
	Storage Engines (primarly an LDAP storage engine)
 | 
			
		||||
	Certificate chain validation with full RFC 3280 compatibility
 | 
			
		||||
 | 
			
		||||
  NEEDS PATCH
 | 
			
		||||
 | 
			
		||||
    o  0.9.8-dev: COMPLEMENTOFALL and COMPLEMENTOFDEFAULT do not
 | 
			
		||||
       handle ECCdraft cipher suites correctly.
 | 
			
		||||
 | 
			
		||||
    o  apps/ca.c: "Sign the certificate?" - "n" creates empty certificate file
 | 
			
		||||
 | 
			
		||||
    o  "OpenSSL STATUS" is never up-to-date.
 | 
			
		||||
 | 
			
		||||
  OPEN ISSUES
 | 
			
		||||
 | 
			
		||||
    o  The Makefile hierarchy and build mechanism is still not a round thing:
 | 
			
		||||
 | 
			
		||||
       1. The config vs. Configure scripts
 | 
			
		||||
          It's the same nasty situation as for Apache with APACI vs.
 | 
			
		||||
          src/Configure. It confuses.
 | 
			
		||||
          Suggestion: Merge Configure and config into a single configure
 | 
			
		||||
                      script with a Autoconf style interface ;-) and remove
 | 
			
		||||
                      Configure and config. Or even let us use GNU Autoconf
 | 
			
		||||
                      itself. Then we can avoid a lot of those platform checks
 | 
			
		||||
                      which are currently in Configure.
 | 
			
		||||
 | 
			
		||||
    o  Support for Shared Libraries has to be added at least
 | 
			
		||||
       for the major Unix platforms. The details we can rip from the stuff
 | 
			
		||||
       Ralf has done for the Apache src/Configure script. Ben wants the
 | 
			
		||||
       solution to be really simple.
 | 
			
		||||
 | 
			
		||||
       Status: Ralf will look how we can easily incorporate the
 | 
			
		||||
               compiler PIC and linker DSO flags from Apache
 | 
			
		||||
               into the OpenSSL Configure script.
 | 
			
		||||
 | 
			
		||||
               Ulf: +1 for using GNU autoconf and libtool (but not automake,
 | 
			
		||||
                    which apparently is not flexible enough to generate
 | 
			
		||||
                    libcrypto)
 | 
			
		||||
 | 
			
		||||
  WISHES
 | 
			
		||||
 | 
			
		||||
    o  Add variants of DH_generate_parameters() and BN_generate_prime() [etc?]
 | 
			
		||||
       where the callback function can request that the function be aborted.
 | 
			
		||||
       [Gregory Stark <ghstark@pobox.com>, <rayyang2000@yahoo.com>]
 | 
			
		||||
 | 
			
		||||
    o  SRP in TLS.
 | 
			
		||||
       [wished by:
 | 
			
		||||
        Dj <derek@yo.net>, Tom Wu <tom@arcot.com>,
 | 
			
		||||
        Tom Holroyd <tomh@po.crl.go.jp>]
 | 
			
		||||
 | 
			
		||||
       See http://search.ietf.org/internet-drafts/draft-ietf-tls-srp-00.txt
 | 
			
		||||
       as well as http://www-cs-students.stanford.edu/~tjw/srp/.
 | 
			
		||||
 | 
			
		||||
       Tom Holroyd tells us there is a SRP patch for OpenSSH at
 | 
			
		||||
       http://members.tripod.com/professor_tom/archives/, that could
 | 
			
		||||
       be useful.
 | 
			
		||||
@@ -6,6 +6,7 @@ $! P2: Zlib object library path (optional).
 | 
			
		||||
$!
 | 
			
		||||
$! Input:	[.UTIL]LIBEAY.NUM,[.xxx.EXE.CRYPTO]SSL_LIBCRYPTO[32].OLB
 | 
			
		||||
$!		[.UTIL]SSLEAY.NUM,[.xxx.EXE.SSL]SSL_LIBSSL[32].OLB
 | 
			
		||||
$!		[.CRYPTO.xxx]OPENSSLCONF.H
 | 
			
		||||
$! Output:	[.xxx.EXE.CRYPTO]SSL_LIBCRYPTO_SHR[32].OPT,.MAP,.EXE
 | 
			
		||||
$!		[.xxx.EXE.SSL]SSL_LIBSSL_SRH[32].OPT,.MAP,.EXE
 | 
			
		||||
$!
 | 
			
		||||
@@ -70,6 +71,9 @@ $     endif
 | 
			
		||||
$   endif
 | 
			
		||||
$ endif
 | 
			
		||||
$!
 | 
			
		||||
$! ----- Prepare info for processing: disabled algorithms info
 | 
			
		||||
$ gosub read_disabled_algorithms_info
 | 
			
		||||
$!
 | 
			
		||||
$ ZLIB = p2
 | 
			
		||||
$ zlib_lib = ""
 | 
			
		||||
$ if (ZLIB .nes. "")
 | 
			
		||||
@@ -384,8 +388,7 @@ $	alg_i = alg_i + 1
 | 
			
		||||
$       if alg_entry .eqs. "" then goto loop2
 | 
			
		||||
$       if alg_entry .nes. ","
 | 
			
		||||
$       then
 | 
			
		||||
$         if alg_entry .eqs. "KRB5" then goto loop ! Special for now
 | 
			
		||||
$	  if alg_entry .eqs. "STATIC_ENGINE" then goto loop ! Special for now
 | 
			
		||||
$	  if disabled_algorithms - ("," + alg_entry + ",") .nes disabled_algorithms then goto loop
 | 
			
		||||
$         if f$trnlnm("OPENSSL_NO_"+alg_entry) .nes. "" then goto loop
 | 
			
		||||
$	  goto loop2
 | 
			
		||||
$       endif
 | 
			
		||||
@@ -452,3 +455,22 @@ $     endif
 | 
			
		||||
$   endloop_rvi:
 | 
			
		||||
$   close vf
 | 
			
		||||
$   return
 | 
			
		||||
$
 | 
			
		||||
$! The disabled algorithms reader
 | 
			
		||||
$ read_disabled_algorithms_info:
 | 
			
		||||
$   disabled_algorithms = ","
 | 
			
		||||
$   open /read cf [.CRYPTO.'ARCH']OPENSSLCONF.H
 | 
			
		||||
$   loop_rci:
 | 
			
		||||
$     read/err=endloop_rci/end=endloop_rci cf rci_line
 | 
			
		||||
$     rci_line = f$edit(rci_line,"TRIM,COMPRESS")
 | 
			
		||||
$     rci_ei = 0
 | 
			
		||||
$     if f$extract(0,9,rci_line) .eqs. "# define " then rci_ei = 2
 | 
			
		||||
$     if f$extract(0,8,rci_line) .eqs. "#define " then rci_ei = 1
 | 
			
		||||
$     if rci_ei .eq. 0 then goto loop_rci
 | 
			
		||||
$     rci_e = f$element(rci_ei," ",rci_line)
 | 
			
		||||
$     if f$extract(0,11,rci_e) .nes. "OPENSSL_NO_" then goto loop_rci
 | 
			
		||||
$     disabled_algorithms = disabled_algorithms + f$extract(11,999,rci_e) + ","
 | 
			
		||||
$     goto loop_rci
 | 
			
		||||
$   endloop_rci:
 | 
			
		||||
$   close cf
 | 
			
		||||
$   return
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
openssl
 | 
			
		||||
Makefile.save
 | 
			
		||||
der_chop
 | 
			
		||||
der_chop.bak
 | 
			
		||||
CA.pl
 | 
			
		||||
*.flc
 | 
			
		||||
semantic.cache
 | 
			
		||||
*.dll
 | 
			
		||||
@@ -1,37 +1,10 @@
 | 
			
		||||
#!/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 - wrapper around ca to make it easier to use
 | 
			
		||||
#
 | 
			
		||||
# 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
 | 
			
		||||
@@ -57,6 +30,7 @@ $CATOP="./demoCA";
 | 
			
		||||
$CAKEY="cakey.pem";
 | 
			
		||||
$CAREQ="careq.pem";
 | 
			
		||||
$CACERT="cacert.pem";
 | 
			
		||||
$CACRL="crl.pem";
 | 
			
		||||
 | 
			
		||||
$DIRMODE = 0777;
 | 
			
		||||
 | 
			
		||||
@@ -65,6 +39,7 @@ $RET = 0;
 | 
			
		||||
foreach (@ARGV) {
 | 
			
		||||
	if ( /^(-\?|-h|-help)$/ ) {
 | 
			
		||||
	    print STDERR "usage: CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify\n";
 | 
			
		||||
	    print STDERR "       CA -crl|-revoke cert-filename [reason]\n";
 | 
			
		||||
	    exit 0;
 | 
			
		||||
	} elsif (/^-newcert$/) {
 | 
			
		||||
	    # create a certificate
 | 
			
		||||
@@ -160,17 +135,50 @@ foreach (@ARGV) {
 | 
			
		||||
	    } else {
 | 
			
		||||
		    system ("$VERIFY -CAfile $CATOP/$CACERT newcert.pem");
 | 
			
		||||
		    $RET=$?;
 | 
			
		||||
	    	    exit 0;
 | 
			
		||||
		    exit $RET;
 | 
			
		||||
	    }
 | 
			
		||||
	} elsif (/^-crl$/) {
 | 
			
		||||
		system ("$CA -gencrl -out $CATOP/crl/$CACRL");
 | 
			
		||||
		$RET=$?;
 | 
			
		||||
		print "Generated CRL is in $CATOP/crl/$CACRL\n" if (!$RET);
 | 
			
		||||
	} elsif (/^-revoke$/) {
 | 
			
		||||
		my $cname = $ARGV[1];
 | 
			
		||||
		if (!defined $cname) {
 | 
			
		||||
			print "Certificate filename is required; reason optional.\n";
 | 
			
		||||
			exit 1;
 | 
			
		||||
		}
 | 
			
		||||
		my $reason = $ARGV[2];
 | 
			
		||||
		$reason = " -crl_reason $reason"
 | 
			
		||||
			if defined $reason && crl_reason_ok($reason);
 | 
			
		||||
		my $cmd = "$CA -revoke \"$cname\"".$reason;
 | 
			
		||||
		system ($cmd);
 | 
			
		||||
		$RET=$?;
 | 
			
		||||
		exit $RET;
 | 
			
		||||
	} else {
 | 
			
		||||
	    print STDERR "Unknown arg $_\n";
 | 
			
		||||
	    print STDERR "usage: CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify\n";
 | 
			
		||||
	    print STDERR "       CA -crl|-revoke cert-filename [reason]\n";
 | 
			
		||||
	    exit 1;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exit $RET;
 | 
			
		||||
 | 
			
		||||
sub crl_reason_ok {
 | 
			
		||||
	my ($r) = shift;
 | 
			
		||||
	if ($r eq 'unspecified' || $r eq 'keyCompromise' ||
 | 
			
		||||
	$r eq 'CACompromise' || $r eq 'affiliationChanged' ||
 | 
			
		||||
	$r eq 'superseded' || $r eq 'cessationOfOperation' ||
 | 
			
		||||
	$r eq 'certificateHold' || $r eq 'removeFromCRL') {
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	print STDERR "Invalid CRL reason; must be one of:\n";
 | 
			
		||||
	print STDERR "    unspecified, keyCompromise, CACompromise,\n";
 | 
			
		||||
	print STDERR "    affiliationChanged, superseded, cessationOfOperation\n";
 | 
			
		||||
	print STDERR "    certificateHold, removeFromCRL";
 | 
			
		||||
	exit 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub cp_pem {
 | 
			
		||||
my ($infile, $outfile, $bound) = @_;
 | 
			
		||||
open IN, $infile;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										260
									
								
								apps/Makefile
									
									
									
									
									
								
							
							
						
						
									
										260
									
								
								apps/Makefile
									
									
									
									
									
								
							@@ -117,6 +117,19 @@ install:
 | 
			
		||||
	chmod 644 $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf.new; \
 | 
			
		||||
	mv -f  $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf.new $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf
 | 
			
		||||
 | 
			
		||||
uninstall:
 | 
			
		||||
	@set -e; for i in $(EXE); \
 | 
			
		||||
	do  \
 | 
			
		||||
		echo $(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i; \
 | 
			
		||||
		$(RM) $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i; \
 | 
			
		||||
	done;
 | 
			
		||||
	@set -e; for i in $(SCRIPTS); \
 | 
			
		||||
	do  \
 | 
			
		||||
		echo $(RM) $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$i; \
 | 
			
		||||
		$(RM) $(INSTALL_PREFIX)$(OPENSSLDIR)/misc/$$i; \
 | 
			
		||||
	done
 | 
			
		||||
	$(RM) $(INSTALL_PREFIX)$(OPENSSLDIR)/openssl.cnf
 | 
			
		||||
 | 
			
		||||
tags:
 | 
			
		||||
	ctags $(SRC)
 | 
			
		||||
 | 
			
		||||
@@ -137,7 +150,6 @@ depend:
 | 
			
		||||
dclean:
 | 
			
		||||
	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
 | 
			
		||||
	mv -f Makefile.new $(MAKEFILE)
 | 
			
		||||
	rm -f CA.pl
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f *.o *.obj *.dll lib tags core .pure .nfs* *.old *.bak fluff $(EXE)
 | 
			
		||||
@@ -245,13 +257,13 @@ ciphers.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
ciphers.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
ciphers.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
ciphers.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
ciphers.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
ciphers.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
ciphers.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
ciphers.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
ciphers.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
ciphers.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
ciphers.o: ciphers.c
 | 
			
		||||
ciphers.o: ../include/openssl/sha.h ../include/openssl/srtp.h
 | 
			
		||||
ciphers.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
ciphers.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
ciphers.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
ciphers.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
ciphers.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
ciphers.o: ../include/openssl/x509v3.h apps.h ciphers.c
 | 
			
		||||
cms.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
cms.o: ../include/openssl/buffer.h ../include/openssl/cms.h
 | 
			
		||||
cms.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -350,20 +362,18 @@ dsa.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h dsa.c
 | 
			
		||||
dsaparam.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
dsaparam.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
dsaparam.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
dsaparam.o: ../include/openssl/dh.h ../include/openssl/dsa.h
 | 
			
		||||
dsaparam.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
 | 
			
		||||
dsaparam.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
 | 
			
		||||
dsaparam.o: ../include/openssl/engine.h ../include/openssl/err.h
 | 
			
		||||
dsaparam.o: ../include/openssl/evp.h ../include/openssl/lhash.h
 | 
			
		||||
dsaparam.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
 | 
			
		||||
dsaparam.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
 | 
			
		||||
dsaparam.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
dsaparam.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
dsaparam.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
 | 
			
		||||
dsaparam.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 | 
			
		||||
dsaparam.o: ../include/openssl/sha.h ../include/openssl/stack.h
 | 
			
		||||
dsaparam.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
 | 
			
		||||
dsaparam.o: ../include/openssl/ui.h ../include/openssl/x509.h
 | 
			
		||||
dsaparam.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h
 | 
			
		||||
dsaparam.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
 | 
			
		||||
dsaparam.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
 | 
			
		||||
dsaparam.o: ../include/openssl/err.h ../include/openssl/evp.h
 | 
			
		||||
dsaparam.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
 | 
			
		||||
dsaparam.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
 | 
			
		||||
dsaparam.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
dsaparam.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
dsaparam.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
dsaparam.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
dsaparam.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
dsaparam.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
dsaparam.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
dsaparam.o: dsaparam.c
 | 
			
		||||
ec.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
@@ -427,13 +437,13 @@ engine.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
engine.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
engine.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
engine.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
engine.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
engine.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
engine.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
engine.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
engine.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
engine.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
engine.o: engine.c
 | 
			
		||||
engine.o: ../include/openssl/sha.h ../include/openssl/srtp.h
 | 
			
		||||
engine.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
engine.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
engine.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
engine.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
engine.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
engine.o: ../include/openssl/x509v3.h apps.h engine.c
 | 
			
		||||
errstr.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
errstr.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
errstr.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -448,32 +458,30 @@ errstr.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
errstr.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
errstr.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
errstr.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
errstr.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
errstr.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
errstr.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
errstr.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
errstr.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
errstr.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
errstr.o: errstr.c
 | 
			
		||||
errstr.o: ../include/openssl/sha.h ../include/openssl/srtp.h
 | 
			
		||||
errstr.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
errstr.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
errstr.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
errstr.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
errstr.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
errstr.o: ../include/openssl/x509v3.h apps.h errstr.c
 | 
			
		||||
gendh.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
gendh.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
gendh.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
gendh.o: ../include/openssl/dh.h ../include/openssl/dsa.h
 | 
			
		||||
gendh.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
 | 
			
		||||
gendh.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
 | 
			
		||||
gendh.o: ../include/openssl/engine.h ../include/openssl/err.h
 | 
			
		||||
gendh.o: ../include/openssl/evp.h ../include/openssl/lhash.h
 | 
			
		||||
gendh.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
 | 
			
		||||
gendh.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
 | 
			
		||||
gendh.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
gendh.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
gendh.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
 | 
			
		||||
gendh.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 | 
			
		||||
gendh.o: ../include/openssl/dh.h ../include/openssl/e_os2.h
 | 
			
		||||
gendh.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
 | 
			
		||||
gendh.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
 | 
			
		||||
gendh.o: ../include/openssl/err.h ../include/openssl/evp.h
 | 
			
		||||
gendh.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
 | 
			
		||||
gendh.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
 | 
			
		||||
gendh.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
gendh.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
gendh.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
gendh.o: ../include/openssl/rand.h ../include/openssl/safestack.h
 | 
			
		||||
gendh.o: ../include/openssl/sha.h ../include/openssl/stack.h
 | 
			
		||||
gendh.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
 | 
			
		||||
gendh.o: ../include/openssl/ui.h ../include/openssl/x509.h
 | 
			
		||||
gendh.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
gendh.o: gendh.c
 | 
			
		||||
gendh.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
gendh.o: ../include/openssl/x509v3.h apps.h gendh.c
 | 
			
		||||
gendsa.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
gendsa.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
gendsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -510,7 +518,6 @@ genpkey.o: genpkey.c
 | 
			
		||||
genrsa.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
genrsa.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
genrsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
genrsa.o: ../include/openssl/dh.h ../include/openssl/dsa.h
 | 
			
		||||
genrsa.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
 | 
			
		||||
genrsa.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
 | 
			
		||||
genrsa.o: ../include/openssl/engine.h ../include/openssl/err.h
 | 
			
		||||
@@ -523,9 +530,8 @@ genrsa.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
 | 
			
		||||
genrsa.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 | 
			
		||||
genrsa.o: ../include/openssl/sha.h ../include/openssl/stack.h
 | 
			
		||||
genrsa.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
 | 
			
		||||
genrsa.o: ../include/openssl/ui.h ../include/openssl/x509.h
 | 
			
		||||
genrsa.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
genrsa.o: genrsa.c
 | 
			
		||||
genrsa.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
genrsa.o: ../include/openssl/x509v3.h apps.h genrsa.c
 | 
			
		||||
nseq.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
nseq.o: ../include/openssl/buffer.h ../include/openssl/conf.h
 | 
			
		||||
nseq.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
@@ -556,12 +562,12 @@ ocsp.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
ocsp.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
ocsp.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
 | 
			
		||||
ocsp.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
ocsp.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
ocsp.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
ocsp.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
ocsp.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
ocsp.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
ocsp.o: ../include/openssl/x509v3.h apps.h ocsp.c
 | 
			
		||||
ocsp.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
 | 
			
		||||
ocsp.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
ocsp.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
ocsp.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
ocsp.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
ocsp.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h ocsp.c
 | 
			
		||||
openssl.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
openssl.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
openssl.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -575,8 +581,9 @@ openssl.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
 | 
			
		||||
openssl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
openssl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
openssl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
openssl.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
openssl.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
openssl.o: ../include/openssl/pqueue.h ../include/openssl/rand.h
 | 
			
		||||
openssl.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
openssl.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
 | 
			
		||||
openssl.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
openssl.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
openssl.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
@@ -729,21 +736,20 @@ rand.o: ../include/openssl/x509v3.h apps.h rand.c
 | 
			
		||||
req.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
req.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
req.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
req.o: ../include/openssl/dh.h ../include/openssl/dsa.h
 | 
			
		||||
req.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
 | 
			
		||||
req.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
 | 
			
		||||
req.o: ../include/openssl/engine.h ../include/openssl/err.h
 | 
			
		||||
req.o: ../include/openssl/evp.h ../include/openssl/lhash.h
 | 
			
		||||
req.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
 | 
			
		||||
req.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
 | 
			
		||||
req.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
req.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
req.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
 | 
			
		||||
req.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h
 | 
			
		||||
req.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
 | 
			
		||||
req.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
 | 
			
		||||
req.o: ../include/openssl/err.h ../include/openssl/evp.h
 | 
			
		||||
req.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
 | 
			
		||||
req.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
 | 
			
		||||
req.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
req.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
req.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
req.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 | 
			
		||||
req.o: ../include/openssl/sha.h ../include/openssl/stack.h
 | 
			
		||||
req.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
 | 
			
		||||
req.o: ../include/openssl/ui.h ../include/openssl/x509.h
 | 
			
		||||
req.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h req.c
 | 
			
		||||
req.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
req.o: ../include/openssl/x509v3.h apps.h req.c
 | 
			
		||||
rsa.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
rsa.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
rsa.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -777,8 +783,9 @@ rsautl.o: ../include/openssl/symhacks.h ../include/openssl/txt_db.h
 | 
			
		||||
rsautl.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
rsautl.o: ../include/openssl/x509v3.h apps.h rsautl.c
 | 
			
		||||
s_cb.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
s_cb.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
s_cb.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
s_cb.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
s_cb.o: ../include/openssl/comp.h ../include/openssl/conf.h
 | 
			
		||||
s_cb.o: ../include/openssl/crypto.h ../include/openssl/dh.h
 | 
			
		||||
s_cb.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h
 | 
			
		||||
s_cb.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
 | 
			
		||||
s_cb.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
 | 
			
		||||
@@ -791,12 +798,13 @@ s_cb.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
s_cb.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
s_cb.o: ../include/openssl/pqueue.h ../include/openssl/rand.h
 | 
			
		||||
s_cb.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
s_cb.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
s_cb.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
s_cb.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
s_cb.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
s_cb.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
s_cb.o: ../include/openssl/x509v3.h apps.h s_apps.h s_cb.c
 | 
			
		||||
s_cb.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
 | 
			
		||||
s_cb.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_cb.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_cb.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
s_cb.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
s_cb.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
s_cb.o: s_apps.h s_cb.c
 | 
			
		||||
s_client.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
s_client.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
s_client.o: ../include/openssl/comp.h ../include/openssl/conf.h
 | 
			
		||||
@@ -813,36 +821,37 @@ s_client.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
s_client.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
 | 
			
		||||
s_client.o: ../include/openssl/rand.h ../include/openssl/safestack.h
 | 
			
		||||
s_client.o: ../include/openssl/sha.h ../include/openssl/srp.h
 | 
			
		||||
s_client.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
s_client.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
s_client.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
s_client.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
s_client.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
s_client.o: ../include/openssl/x509v3.h apps.h s_apps.h s_client.c timeouts.h
 | 
			
		||||
s_client.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
 | 
			
		||||
s_client.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_client.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_client.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
s_client.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
s_client.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
s_client.o: s_apps.h s_client.c timeouts.h
 | 
			
		||||
s_server.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
s_server.o: ../include/openssl/bn.h ../include/openssl/buffer.h
 | 
			
		||||
s_server.o: ../include/openssl/comp.h ../include/openssl/conf.h
 | 
			
		||||
s_server.o: ../include/openssl/crypto.h ../include/openssl/dh.h
 | 
			
		||||
s_server.o: ../include/openssl/dsa.h ../include/openssl/dtls1.h
 | 
			
		||||
s_server.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
 | 
			
		||||
s_server.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
 | 
			
		||||
s_server.o: ../include/openssl/engine.h ../include/openssl/err.h
 | 
			
		||||
s_server.o: ../include/openssl/evp.h ../include/openssl/hmac.h
 | 
			
		||||
s_server.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
 | 
			
		||||
s_server.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
 | 
			
		||||
s_server.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
 | 
			
		||||
s_server.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
s_server.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
s_server.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
 | 
			
		||||
s_server.o: ../include/openssl/rand.h ../include/openssl/rsa.h
 | 
			
		||||
s_server.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
s_server.o: ../include/openssl/srp.h ../include/openssl/ssl.h
 | 
			
		||||
s_server.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h
 | 
			
		||||
s_server.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
 | 
			
		||||
s_server.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
 | 
			
		||||
s_server.o: ../include/openssl/err.h ../include/openssl/evp.h
 | 
			
		||||
s_server.o: ../include/openssl/hmac.h ../include/openssl/kssl.h
 | 
			
		||||
s_server.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
 | 
			
		||||
s_server.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
 | 
			
		||||
s_server.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
s_server.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
s_server.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
s_server.o: ../include/openssl/pqueue.h ../include/openssl/rand.h
 | 
			
		||||
s_server.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 | 
			
		||||
s_server.o: ../include/openssl/sha.h ../include/openssl/srp.h
 | 
			
		||||
s_server.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
 | 
			
		||||
s_server.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_server.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_server.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
s_server.o: ../include/openssl/txt_db.h ../include/openssl/ui.h
 | 
			
		||||
s_server.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
s_server.o: ../include/openssl/x509v3.h apps.h s_apps.h s_server.c timeouts.h
 | 
			
		||||
s_server.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
s_server.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
s_server.o: s_apps.h s_server.c timeouts.h
 | 
			
		||||
s_socket.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
s_socket.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
s_socket.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -857,12 +866,13 @@ s_socket.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
s_socket.o: ../include/openssl/pem.h ../include/openssl/pem2.h
 | 
			
		||||
s_socket.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
 | 
			
		||||
s_socket.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 | 
			
		||||
s_socket.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
s_socket.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
s_socket.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
s_socket.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
s_socket.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
s_socket.o: ../include/openssl/x509v3.h apps.h s_apps.h s_socket.c
 | 
			
		||||
s_socket.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
 | 
			
		||||
s_socket.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_socket.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_socket.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
s_socket.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
s_socket.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
s_socket.o: s_apps.h s_socket.c
 | 
			
		||||
s_time.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
s_time.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
s_time.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -877,13 +887,13 @@ s_time.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
s_time.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
s_time.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
s_time.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
s_time.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
s_time.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
s_time.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
s_time.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
s_time.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
s_time.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
s_time.o: s_apps.h s_time.c
 | 
			
		||||
s_time.o: ../include/openssl/sha.h ../include/openssl/srtp.h
 | 
			
		||||
s_time.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
s_time.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
s_time.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
s_time.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
s_time.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
s_time.o: ../include/openssl/x509v3.h apps.h s_apps.h s_time.c
 | 
			
		||||
sess_id.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
sess_id.o: ../include/openssl/buffer.h ../include/openssl/comp.h
 | 
			
		||||
sess_id.o: ../include/openssl/conf.h ../include/openssl/crypto.h
 | 
			
		||||
@@ -898,13 +908,13 @@ sess_id.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
sess_id.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
 | 
			
		||||
sess_id.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
 | 
			
		||||
sess_id.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
 | 
			
		||||
sess_id.o: ../include/openssl/sha.h ../include/openssl/ssl.h
 | 
			
		||||
sess_id.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 | 
			
		||||
sess_id.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 | 
			
		||||
sess_id.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
 | 
			
		||||
sess_id.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
 | 
			
		||||
sess_id.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
 | 
			
		||||
sess_id.o: sess_id.c
 | 
			
		||||
sess_id.o: ../include/openssl/sha.h ../include/openssl/srtp.h
 | 
			
		||||
sess_id.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 | 
			
		||||
sess_id.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 | 
			
		||||
sess_id.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
			
		||||
sess_id.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
 | 
			
		||||
sess_id.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
 | 
			
		||||
sess_id.o: ../include/openssl/x509v3.h apps.h sess_id.c
 | 
			
		||||
smime.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
 | 
			
		||||
smime.o: ../include/openssl/buffer.h ../include/openssl/conf.h
 | 
			
		||||
smime.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										188
									
								
								apps/app_rand.c
									
									
									
									
									
								
							
							
						
						
									
										188
									
								
								apps/app_rand.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -63,7 +63,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -115,104 +115,106 @@
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int seeded = 0;
 | 
			
		||||
static int egdsocket = 0;
 | 
			
		||||
 | 
			
		||||
int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn)
 | 
			
		||||
	{
 | 
			
		||||
	int consider_randfile = (file == NULL);
 | 
			
		||||
	char buffer[200];
 | 
			
		||||
	
 | 
			
		||||
{
 | 
			
		||||
    int consider_randfile = (file == NULL);
 | 
			
		||||
    char buffer[200];
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_SYS_WINDOWS
 | 
			
		||||
	BIO_printf(bio_e,"Loading 'screen' into random state -");
 | 
			
		||||
	BIO_flush(bio_e);
 | 
			
		||||
	RAND_screen();
 | 
			
		||||
	BIO_printf(bio_e," done\n");
 | 
			
		||||
    BIO_printf(bio_e, "Loading 'screen' into random state -");
 | 
			
		||||
    BIO_flush(bio_e);
 | 
			
		||||
    RAND_screen();
 | 
			
		||||
    BIO_printf(bio_e, " done\n");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (file == NULL)
 | 
			
		||||
		file = RAND_file_name(buffer, sizeof buffer);
 | 
			
		||||
	else if (RAND_egd(file) > 0)
 | 
			
		||||
		{
 | 
			
		||||
		/* we try if the given filename is an EGD socket.
 | 
			
		||||
		   if it is, we don't write anything back to the file. */
 | 
			
		||||
		egdsocket = 1;
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
	if (file == NULL || !RAND_load_file(file, -1))
 | 
			
		||||
		{
 | 
			
		||||
		if (RAND_status() == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!dont_warn)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_e,"unable to load 'random state'\n");
 | 
			
		||||
				BIO_printf(bio_e,"This means that the random number generator has not been seeded\n");
 | 
			
		||||
				BIO_printf(bio_e,"with much random data.\n");
 | 
			
		||||
				if (consider_randfile) /* explanation does not apply when a file is explicitly named */
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_e,"Consider setting the RANDFILE environment variable to point at a file that\n");
 | 
			
		||||
					BIO_printf(bio_e,"'random' data can be kept in (the file will be overwritten).\n");
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			return 0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	seeded = 1;
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
    if (file == NULL)
 | 
			
		||||
        file = RAND_file_name(buffer, sizeof buffer);
 | 
			
		||||
    else if (RAND_egd(file) > 0) {
 | 
			
		||||
        /*
 | 
			
		||||
         * we try if the given filename is an EGD socket. if it is, we don't
 | 
			
		||||
         * write anything back to the file.
 | 
			
		||||
         */
 | 
			
		||||
        egdsocket = 1;
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
    if (file == NULL || !RAND_load_file(file, -1)) {
 | 
			
		||||
        if (RAND_status() == 0) {
 | 
			
		||||
            if (!dont_warn) {
 | 
			
		||||
                BIO_printf(bio_e, "unable to load 'random state'\n");
 | 
			
		||||
                BIO_printf(bio_e,
 | 
			
		||||
                           "This means that the random number generator has not been seeded\n");
 | 
			
		||||
                BIO_printf(bio_e, "with much random data.\n");
 | 
			
		||||
                if (consider_randfile) { /* explanation does not apply when a
 | 
			
		||||
                                          * file is explicitly named */
 | 
			
		||||
                    BIO_printf(bio_e,
 | 
			
		||||
                               "Consider setting the RANDFILE environment variable to point at a file that\n");
 | 
			
		||||
                    BIO_printf(bio_e,
 | 
			
		||||
                               "'random' data can be kept in (the file will be overwritten).\n");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    seeded = 1;
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
long app_RAND_load_files(char *name)
 | 
			
		||||
	{
 | 
			
		||||
	char *p,*n;
 | 
			
		||||
	int last;
 | 
			
		||||
	long tot=0;
 | 
			
		||||
	int egd;
 | 
			
		||||
	
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		last=0;
 | 
			
		||||
		for (p=name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++);
 | 
			
		||||
		if (*p == '\0') last=1;
 | 
			
		||||
		*p='\0';
 | 
			
		||||
		n=name;
 | 
			
		||||
		name=p+1;
 | 
			
		||||
		if (*n == '\0') break;
 | 
			
		||||
{
 | 
			
		||||
    char *p, *n;
 | 
			
		||||
    int last;
 | 
			
		||||
    long tot = 0;
 | 
			
		||||
    int egd;
 | 
			
		||||
 | 
			
		||||
		egd=RAND_egd(n);
 | 
			
		||||
		if (egd > 0)
 | 
			
		||||
			tot+=egd;
 | 
			
		||||
		else
 | 
			
		||||
			tot+=RAND_load_file(n,-1);
 | 
			
		||||
		if (last) break;
 | 
			
		||||
		}
 | 
			
		||||
	if (tot > 512)
 | 
			
		||||
		app_RAND_allow_write_file();
 | 
			
		||||
	return(tot);
 | 
			
		||||
	}
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        last = 0;
 | 
			
		||||
        for (p = name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++) ;
 | 
			
		||||
        if (*p == '\0')
 | 
			
		||||
            last = 1;
 | 
			
		||||
        *p = '\0';
 | 
			
		||||
        n = name;
 | 
			
		||||
        name = p + 1;
 | 
			
		||||
        if (*n == '\0')
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        egd = RAND_egd(n);
 | 
			
		||||
        if (egd > 0)
 | 
			
		||||
            tot += egd;
 | 
			
		||||
        else
 | 
			
		||||
            tot += RAND_load_file(n, -1);
 | 
			
		||||
        if (last)
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
    if (tot > 512)
 | 
			
		||||
        app_RAND_allow_write_file();
 | 
			
		||||
    return (tot);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int app_RAND_write_file(const char *file, BIO *bio_e)
 | 
			
		||||
	{
 | 
			
		||||
	char buffer[200];
 | 
			
		||||
	
 | 
			
		||||
	if (egdsocket || !seeded)
 | 
			
		||||
		/* If we did not manage to read the seed file,
 | 
			
		||||
		 * we should not write a low-entropy seed file back --
 | 
			
		||||
		 * it would suppress a crucial warning the next time
 | 
			
		||||
		 * we want to use it. */
 | 
			
		||||
		return 0;
 | 
			
		||||
{
 | 
			
		||||
    char buffer[200];
 | 
			
		||||
 | 
			
		||||
	if (file == NULL)
 | 
			
		||||
		file = RAND_file_name(buffer, sizeof buffer);
 | 
			
		||||
	if (file == NULL || !RAND_write_file(file))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_e,"unable to write 'random state'\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
    if (egdsocket || !seeded)
 | 
			
		||||
        /*
 | 
			
		||||
         * If we did not manage to read the seed file, we should not write a
 | 
			
		||||
         * low-entropy seed file back -- it would suppress a crucial warning
 | 
			
		||||
         * the next time we want to use it.
 | 
			
		||||
         */
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
    if (file == NULL)
 | 
			
		||||
        file = RAND_file_name(buffer, sizeof buffer);
 | 
			
		||||
    if (file == NULL || !RAND_write_file(file)) {
 | 
			
		||||
        BIO_printf(bio_e, "unable to write 'random state'\n");
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void app_RAND_allow_write_file(void)
 | 
			
		||||
	{
 | 
			
		||||
	seeded = 1;
 | 
			
		||||
	}
 | 
			
		||||
{
 | 
			
		||||
    seeded = 1;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5017
									
								
								apps/apps.c
									
									
									
									
									
								
							
							
						
						
									
										5017
									
								
								apps/apps.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										350
									
								
								apps/apps.h
									
									
									
									
									
								
							
							
						
						
									
										350
									
								
								apps/apps.h
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -63,7 +63,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -110,120 +110,119 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef HEADER_APPS_H
 | 
			
		||||
#define HEADER_APPS_H
 | 
			
		||||
# define HEADER_APPS_H
 | 
			
		||||
 | 
			
		||||
#include "e_os.h"
 | 
			
		||||
# include "e_os.h"
 | 
			
		||||
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/lhash.h>
 | 
			
		||||
#include <openssl/conf.h>
 | 
			
		||||
#include <openssl/txt_db.h>
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#include <openssl/engine.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_OCSP
 | 
			
		||||
#include <openssl/ocsp.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <openssl/ossl_typ.h>
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/lhash.h>
 | 
			
		||||
# include <openssl/conf.h>
 | 
			
		||||
# include <openssl/txt_db.h>
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#  include <openssl/engine.h>
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_OCSP
 | 
			
		||||
#  include <openssl/ocsp.h>
 | 
			
		||||
# endif
 | 
			
		||||
# include <openssl/ossl_typ.h>
 | 
			
		||||
 | 
			
		||||
int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn);
 | 
			
		||||
int app_RAND_write_file(const char *file, BIO *bio_e);
 | 
			
		||||
/* When `file' is NULL, use defaults.
 | 
			
		||||
 * `bio_e' is for error messages. */
 | 
			
		||||
/*
 | 
			
		||||
 * When `file' is NULL, use defaults. `bio_e' is for error messages.
 | 
			
		||||
 */
 | 
			
		||||
void app_RAND_allow_write_file(void);
 | 
			
		||||
long app_RAND_load_files(char *file); /* `file' is a list of files to read,
 | 
			
		||||
                                       * separated by LIST_SEPARATOR_CHAR
 | 
			
		||||
                                       * (see e_os.h).  The string is
 | 
			
		||||
                                       * destroyed! */
 | 
			
		||||
 | 
			
		||||
#ifndef MONOLITH
 | 
			
		||||
# ifndef MONOLITH
 | 
			
		||||
 | 
			
		||||
#define MAIN(a,v)	main(a,v)
 | 
			
		||||
#  define MAIN(a,v)       main(a,v)
 | 
			
		||||
 | 
			
		||||
#ifndef NON_MAIN
 | 
			
		||||
CONF *config=NULL;
 | 
			
		||||
BIO *bio_err=NULL;
 | 
			
		||||
#else
 | 
			
		||||
#  ifndef NON_MAIN
 | 
			
		||||
CONF *config = NULL;
 | 
			
		||||
BIO *bio_err = NULL;
 | 
			
		||||
#  else
 | 
			
		||||
extern CONF *config;
 | 
			
		||||
extern BIO *bio_err;
 | 
			
		||||
#endif
 | 
			
		||||
#  endif
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
# else
 | 
			
		||||
 | 
			
		||||
#define MAIN(a,v)	PROG(a,v)
 | 
			
		||||
#  define MAIN(a,v)       PROG(a,v)
 | 
			
		||||
extern CONF *config;
 | 
			
		||||
extern char *default_config_file;
 | 
			
		||||
extern BIO *bio_err;
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_SYS_NETWARE
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
#endif
 | 
			
		||||
# ifndef OPENSSL_SYS_NETWARE
 | 
			
		||||
#  include <signal.h>
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#ifdef SIGPIPE
 | 
			
		||||
#define do_pipe_sig()	signal(SIGPIPE,SIG_IGN)
 | 
			
		||||
#else
 | 
			
		||||
#define do_pipe_sig()
 | 
			
		||||
#endif
 | 
			
		||||
# ifdef SIGPIPE
 | 
			
		||||
#  define do_pipe_sig()   signal(SIGPIPE,SIG_IGN)
 | 
			
		||||
# else
 | 
			
		||||
#  define do_pipe_sig()
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_NO_COMP
 | 
			
		||||
#define zlib_cleanup() 
 | 
			
		||||
#else
 | 
			
		||||
#define zlib_cleanup() COMP_zlib_cleanup()
 | 
			
		||||
#endif
 | 
			
		||||
# ifdef OPENSSL_NO_COMP
 | 
			
		||||
#  define zlib_cleanup()
 | 
			
		||||
# else
 | 
			
		||||
#  define zlib_cleanup() COMP_zlib_cleanup()
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#if defined(MONOLITH) && !defined(OPENSSL_C)
 | 
			
		||||
# if defined(MONOLITH) && !defined(OPENSSL_C)
 | 
			
		||||
#  define apps_startup() \
 | 
			
		||||
		do_pipe_sig()
 | 
			
		||||
                do_pipe_sig()
 | 
			
		||||
#  define apps_shutdown()
 | 
			
		||||
#else
 | 
			
		||||
# else
 | 
			
		||||
#  ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#    define apps_startup() \
 | 
			
		||||
			do { do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
			
		||||
			ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
 | 
			
		||||
			ENGINE_load_builtin_engines(); setup_ui_method(); } while(0)
 | 
			
		||||
#    define apps_shutdown() \
 | 
			
		||||
			do { CONF_modules_unload(1); destroy_ui_method(); \
 | 
			
		||||
			OBJ_cleanup(); EVP_cleanup(); ENGINE_cleanup(); \
 | 
			
		||||
			CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
 | 
			
		||||
			ERR_free_strings(); zlib_cleanup();} while(0)
 | 
			
		||||
#   define apps_startup() \
 | 
			
		||||
                        do { do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
			
		||||
                        ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
 | 
			
		||||
                        ENGINE_load_builtin_engines(); setup_ui_method(); } while(0)
 | 
			
		||||
#   define apps_shutdown() \
 | 
			
		||||
                        do { CONF_modules_unload(1); destroy_ui_method(); \
 | 
			
		||||
                        OBJ_cleanup(); EVP_cleanup(); ENGINE_cleanup(); \
 | 
			
		||||
                        CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
 | 
			
		||||
                        RAND_cleanup(); \
 | 
			
		||||
                        ERR_free_strings(); zlib_cleanup();} while(0)
 | 
			
		||||
#  else
 | 
			
		||||
#    define apps_startup() \
 | 
			
		||||
			do { do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
			
		||||
			ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
 | 
			
		||||
			setup_ui_method(); } while(0)
 | 
			
		||||
#    define apps_shutdown() \
 | 
			
		||||
			do { CONF_modules_unload(1); destroy_ui_method(); \
 | 
			
		||||
			OBJ_cleanup(); EVP_cleanup(); \
 | 
			
		||||
			CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
 | 
			
		||||
			ERR_free_strings(); zlib_cleanup(); } while(0)
 | 
			
		||||
#   define apps_startup() \
 | 
			
		||||
                        do { do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
			
		||||
                        ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
 | 
			
		||||
                        setup_ui_method(); } while(0)
 | 
			
		||||
#   define apps_shutdown() \
 | 
			
		||||
                        do { CONF_modules_unload(1); destroy_ui_method(); \
 | 
			
		||||
                        OBJ_cleanup(); EVP_cleanup(); \
 | 
			
		||||
                        CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
 | 
			
		||||
                        RAND_cleanup(); \
 | 
			
		||||
                        ERR_free_strings(); zlib_cleanup(); } while(0)
 | 
			
		||||
#  endif
 | 
			
		||||
#endif
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_SYSNAME_WIN32
 | 
			
		||||
# if defined(OPENSSL_SYSNAME_WIN32) || defined(OPENSSL_SYSNAME_WINCE)
 | 
			
		||||
#  define openssl_fdset(a,b) FD_SET((unsigned int)a, b)
 | 
			
		||||
#else
 | 
			
		||||
# else
 | 
			
		||||
#  define openssl_fdset(a,b) FD_SET(a, b)
 | 
			
		||||
#endif
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
typedef struct args_st {
 | 
			
		||||
    char **data;
 | 
			
		||||
    int count;
 | 
			
		||||
} ARGS;
 | 
			
		||||
 | 
			
		||||
typedef struct args_st
 | 
			
		||||
	{
 | 
			
		||||
	char **data;
 | 
			
		||||
	int count;
 | 
			
		||||
	} ARGS;
 | 
			
		||||
# define PW_MIN_LENGTH 4
 | 
			
		||||
typedef struct pw_cb_data {
 | 
			
		||||
    const void *password;
 | 
			
		||||
    const char *prompt_info;
 | 
			
		||||
} PW_CB_DATA;
 | 
			
		||||
 | 
			
		||||
#define PW_MIN_LENGTH 4
 | 
			
		||||
typedef struct pw_cb_data
 | 
			
		||||
	{
 | 
			
		||||
	const void *password;
 | 
			
		||||
	const char *prompt_info;
 | 
			
		||||
	} PW_CB_DATA;
 | 
			
		||||
 | 
			
		||||
int password_callback(char *buf, int bufsiz, int verify,
 | 
			
		||||
	PW_CB_DATA *cb_data);
 | 
			
		||||
int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_data);
 | 
			
		||||
 | 
			
		||||
int setup_ui_method(void);
 | 
			
		||||
void destroy_ui_method(void);
 | 
			
		||||
@@ -231,12 +230,13 @@ void destroy_ui_method(void);
 | 
			
		||||
int should_retry(int i);
 | 
			
		||||
int args_from_file(char *file, int *argc, char **argv[]);
 | 
			
		||||
int str2fmt(char *s);
 | 
			
		||||
void program_name(char *in,char *out,int size);
 | 
			
		||||
int chopup_args(ARGS *arg,char *buf, int *argc, char **argv[]);
 | 
			
		||||
#ifdef HEADER_X509_H
 | 
			
		||||
void program_name(char *in, char *out, int size);
 | 
			
		||||
int chopup_args(ARGS *arg, char *buf, int *argc, char **argv[]);
 | 
			
		||||
# ifdef HEADER_X509_H
 | 
			
		||||
int dump_cert_text(BIO *out, X509 *x);
 | 
			
		||||
void print_name(BIO *out, const char *title, X509_NAME *nm, unsigned long lflags);
 | 
			
		||||
#endif
 | 
			
		||||
void print_name(BIO *out, const char *title, X509_NAME *nm,
 | 
			
		||||
                unsigned long lflags);
 | 
			
		||||
# endif
 | 
			
		||||
int set_cert_ex(unsigned long *flags, const char *arg);
 | 
			
		||||
int set_name_ex(unsigned long *flags, const char *arg);
 | 
			
		||||
int set_ext_copy(int *copy_type, const char *arg);
 | 
			
		||||
@@ -244,129 +244,145 @@ int copy_extensions(X509 *x, X509_REQ *req, int copy_type);
 | 
			
		||||
int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2);
 | 
			
		||||
int add_oid_section(BIO *err, CONF *conf);
 | 
			
		||||
X509 *load_cert(BIO *err, const char *file, int format,
 | 
			
		||||
	const char *pass, ENGINE *e, const char *cert_descrip);
 | 
			
		||||
                const char *pass, ENGINE *e, const char *cert_descrip);
 | 
			
		||||
X509_CRL *load_crl(const char *infile, int format);
 | 
			
		||||
int load_cert_crl_http(const char *url, BIO *err,
 | 
			
		||||
                       X509 **pcert, X509_CRL **pcrl);
 | 
			
		||||
EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
 | 
			
		||||
	const char *pass, ENGINE *e, const char *key_descrip);
 | 
			
		||||
                   const char *pass, ENGINE *e, const char *key_descrip);
 | 
			
		||||
EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin,
 | 
			
		||||
	const char *pass, ENGINE *e, const char *key_descrip);
 | 
			
		||||
                      const char *pass, ENGINE *e, const char *key_descrip);
 | 
			
		||||
STACK_OF(X509) *load_certs(BIO *err, const char *file, int format,
 | 
			
		||||
	const char *pass, ENGINE *e, const char *cert_descrip);
 | 
			
		||||
                           const char *pass, ENGINE *e,
 | 
			
		||||
                           const char *cert_descrip);
 | 
			
		||||
STACK_OF(X509_CRL) *load_crls(BIO *err, const char *file, int format,
 | 
			
		||||
	const char *pass, ENGINE *e, const char *cert_descrip);
 | 
			
		||||
                              const char *pass, ENGINE *e,
 | 
			
		||||
                              const char *cert_descrip);
 | 
			
		||||
X509_STORE *setup_verify(BIO *bp, char *CAfile, char *CApath);
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
ENGINE *setup_engine(BIO *err, const char *engine, int debug);
 | 
			
		||||
#endif
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_OCSP
 | 
			
		||||
# ifndef OPENSSL_NO_OCSP
 | 
			
		||||
OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req,
 | 
			
		||||
			char *host, char *path, char *port, int use_ssl,
 | 
			
		||||
			STACK_OF(CONF_VALUE) *headers,
 | 
			
		||||
			int req_timeout);
 | 
			
		||||
#endif
 | 
			
		||||
                                 const char *host, const char *path,
 | 
			
		||||
                                 const char *port, int use_ssl,
 | 
			
		||||
                                 const STACK_OF(CONF_VALUE) *headers,
 | 
			
		||||
                                 int req_timeout);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
int load_config(BIO *err, CONF *cnf);
 | 
			
		||||
char *make_config_name(void);
 | 
			
		||||
 | 
			
		||||
/* Functions defined in ca.c and also used in ocsp.c */
 | 
			
		||||
int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
 | 
			
		||||
			ASN1_GENERALIZEDTIME **pinvtm, const char *str);
 | 
			
		||||
                   ASN1_GENERALIZEDTIME **pinvtm, const char *str);
 | 
			
		||||
 | 
			
		||||
#define DB_type         0
 | 
			
		||||
#define DB_exp_date     1
 | 
			
		||||
#define DB_rev_date     2
 | 
			
		||||
#define DB_serial       3       /* index - unique */
 | 
			
		||||
#define DB_file         4       
 | 
			
		||||
#define DB_name         5       /* index - unique when active and not disabled */
 | 
			
		||||
#define DB_NUMBER       6
 | 
			
		||||
# define DB_type         0
 | 
			
		||||
# define DB_exp_date     1
 | 
			
		||||
# define DB_rev_date     2
 | 
			
		||||
# define DB_serial       3      /* index - unique */
 | 
			
		||||
# define DB_file         4
 | 
			
		||||
# define DB_name         5      /* index - unique when active and not
 | 
			
		||||
                                 * disabled */
 | 
			
		||||
# define DB_NUMBER       6
 | 
			
		||||
 | 
			
		||||
#define DB_TYPE_REV	'R'
 | 
			
		||||
#define DB_TYPE_EXP	'E'
 | 
			
		||||
#define DB_TYPE_VAL	'V'
 | 
			
		||||
# define DB_TYPE_REV     'R'
 | 
			
		||||
# define DB_TYPE_EXP     'E'
 | 
			
		||||
# define DB_TYPE_VAL     'V'
 | 
			
		||||
 | 
			
		||||
typedef struct db_attr_st
 | 
			
		||||
	{
 | 
			
		||||
	int unique_subject;
 | 
			
		||||
	} DB_ATTR;
 | 
			
		||||
typedef struct ca_db_st
 | 
			
		||||
	{
 | 
			
		||||
	DB_ATTR attributes;
 | 
			
		||||
	TXT_DB *db;
 | 
			
		||||
	} CA_DB;
 | 
			
		||||
typedef struct db_attr_st {
 | 
			
		||||
    int unique_subject;
 | 
			
		||||
} DB_ATTR;
 | 
			
		||||
typedef struct ca_db_st {
 | 
			
		||||
    DB_ATTR attributes;
 | 
			
		||||
    TXT_DB *db;
 | 
			
		||||
} CA_DB;
 | 
			
		||||
 | 
			
		||||
BIGNUM *load_serial(char *serialfile, int create, ASN1_INTEGER **retai);
 | 
			
		||||
int save_serial(char *serialfile, char *suffix, BIGNUM *serial, ASN1_INTEGER **retai);
 | 
			
		||||
int save_serial(char *serialfile, char *suffix, BIGNUM *serial,
 | 
			
		||||
                ASN1_INTEGER **retai);
 | 
			
		||||
int rotate_serial(char *serialfile, char *new_suffix, char *old_suffix);
 | 
			
		||||
int rand_serial(BIGNUM *b, ASN1_INTEGER *ai);
 | 
			
		||||
CA_DB *load_index(char *dbfile, DB_ATTR *dbattr);
 | 
			
		||||
int index_index(CA_DB *db);
 | 
			
		||||
int save_index(const char *dbfile, const char *suffix, CA_DB *db);
 | 
			
		||||
int rotate_index(const char *dbfile, const char *new_suffix, const char *old_suffix);
 | 
			
		||||
int rotate_index(const char *dbfile, const char *new_suffix,
 | 
			
		||||
                 const char *old_suffix);
 | 
			
		||||
void free_index(CA_DB *db);
 | 
			
		||||
#define index_name_cmp_noconst(a, b) \
 | 
			
		||||
	index_name_cmp((const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, a), \
 | 
			
		||||
	(const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, b))
 | 
			
		||||
# define index_name_cmp_noconst(a, b) \
 | 
			
		||||
        index_name_cmp((const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, a), \
 | 
			
		||||
        (const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, b))
 | 
			
		||||
int index_name_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b);
 | 
			
		||||
int parse_yesno(const char *str, int def);
 | 
			
		||||
 | 
			
		||||
X509_NAME *parse_name(char *str, long chtype, int multirdn);
 | 
			
		||||
int args_verify(char ***pargs, int *pargc,
 | 
			
		||||
			int *badarg, BIO *err, X509_VERIFY_PARAM **pm);
 | 
			
		||||
                int *badarg, BIO *err, X509_VERIFY_PARAM **pm);
 | 
			
		||||
void policies_print(BIO *out, X509_STORE_CTX *ctx);
 | 
			
		||||
int bio_to_mem(unsigned char **out, int maxlen, BIO *in);
 | 
			
		||||
int pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value);
 | 
			
		||||
int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
 | 
			
		||||
			const char *algname, ENGINE *e, int do_param);
 | 
			
		||||
                 const char *algname, ENGINE *e, int do_param);
 | 
			
		||||
int do_X509_sign(BIO *err, X509 *x, EVP_PKEY *pkey, const EVP_MD *md,
 | 
			
		||||
			STACK_OF(OPENSSL_STRING) *sigopts);
 | 
			
		||||
                 STACK_OF(OPENSSL_STRING) *sigopts);
 | 
			
		||||
int do_X509_REQ_sign(BIO *err, X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md,
 | 
			
		||||
			STACK_OF(OPENSSL_STRING) *sigopts);
 | 
			
		||||
                     STACK_OF(OPENSSL_STRING) *sigopts);
 | 
			
		||||
int do_X509_CRL_sign(BIO *err, X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md,
 | 
			
		||||
			STACK_OF(OPENSSL_STRING) *sigopts);
 | 
			
		||||
#ifndef OPENSSL_NO_PSK
 | 
			
		||||
                     STACK_OF(OPENSSL_STRING) *sigopts);
 | 
			
		||||
# ifndef OPENSSL_NO_PSK
 | 
			
		||||
extern char *psk_key;
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_JPAKE
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_JPAKE
 | 
			
		||||
void jpake_client_auth(BIO *out, BIO *conn, const char *secret);
 | 
			
		||||
void jpake_server_auth(BIO *out, BIO *conn, const char *secret);
 | 
			
		||||
#endif
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#define FORMAT_UNDEF    0
 | 
			
		||||
#define FORMAT_ASN1     1
 | 
			
		||||
#define FORMAT_TEXT     2
 | 
			
		||||
#define FORMAT_PEM      3
 | 
			
		||||
#define FORMAT_NETSCAPE 4
 | 
			
		||||
#define FORMAT_PKCS12   5
 | 
			
		||||
#define FORMAT_SMIME    6
 | 
			
		||||
#define FORMAT_ENGINE   7
 | 
			
		||||
#define FORMAT_IISSGC	8	/* XXX this stupid macro helps us to avoid
 | 
			
		||||
				 * adding yet another param to load_*key() */
 | 
			
		||||
#define FORMAT_PEMRSA	9	/* PEM RSAPubicKey format */
 | 
			
		||||
#define FORMAT_ASN1RSA	10	/* DER RSAPubicKey format */
 | 
			
		||||
#define FORMAT_MSBLOB	11	/* MS Key blob format */
 | 
			
		||||
#define FORMAT_PVK	12	/* MS PVK file format */
 | 
			
		||||
# ifndef OPENSSL_NO_TLSEXT
 | 
			
		||||
unsigned char *next_protos_parse(unsigned short *outlen, const char *in);
 | 
			
		||||
# endif                         /* ndef OPENSSL_NO_TLSEXT */
 | 
			
		||||
 | 
			
		||||
#define EXT_COPY_NONE	0
 | 
			
		||||
#define EXT_COPY_ADD	1
 | 
			
		||||
#define EXT_COPY_ALL	2
 | 
			
		||||
void print_cert_checks(BIO *bio, X509 *x,
 | 
			
		||||
                       const char *checkhost,
 | 
			
		||||
                       const char *checkemail, const char *checkip);
 | 
			
		||||
 | 
			
		||||
#define NETSCAPE_CERT_HDR	"certificate"
 | 
			
		||||
void store_setup_crl_download(X509_STORE *st);
 | 
			
		||||
 | 
			
		||||
#define APP_PASS_LEN	1024
 | 
			
		||||
# define FORMAT_UNDEF    0
 | 
			
		||||
# define FORMAT_ASN1     1
 | 
			
		||||
# define FORMAT_TEXT     2
 | 
			
		||||
# define FORMAT_PEM      3
 | 
			
		||||
# define FORMAT_NETSCAPE 4
 | 
			
		||||
# define FORMAT_PKCS12   5
 | 
			
		||||
# define FORMAT_SMIME    6
 | 
			
		||||
# define FORMAT_ENGINE   7
 | 
			
		||||
# define FORMAT_IISSGC   8      /* XXX this stupid macro helps us to avoid
 | 
			
		||||
                                 * adding yet another param to load_*key() */
 | 
			
		||||
# define FORMAT_PEMRSA   9      /* PEM RSAPubicKey format */
 | 
			
		||||
# define FORMAT_ASN1RSA  10     /* DER RSAPubicKey format */
 | 
			
		||||
# define FORMAT_MSBLOB   11     /* MS Key blob format */
 | 
			
		||||
# define FORMAT_PVK      12     /* MS PVK file format */
 | 
			
		||||
# define FORMAT_HTTP     13     /* Download using HTTP */
 | 
			
		||||
# define FORMAT_NSS      14     /* NSS keylog format */
 | 
			
		||||
 | 
			
		||||
#define SERIAL_RAND_BITS	64
 | 
			
		||||
# define EXT_COPY_NONE   0
 | 
			
		||||
# define EXT_COPY_ADD    1
 | 
			
		||||
# define EXT_COPY_ALL    2
 | 
			
		||||
 | 
			
		||||
# define NETSCAPE_CERT_HDR       "certificate"
 | 
			
		||||
 | 
			
		||||
# define APP_PASS_LEN    1024
 | 
			
		||||
 | 
			
		||||
# define SERIAL_RAND_BITS        64
 | 
			
		||||
 | 
			
		||||
int app_isdir(const char *);
 | 
			
		||||
int raw_read_stdin(void *,int);
 | 
			
		||||
int raw_write_stdout(const void *,int);
 | 
			
		||||
int raw_read_stdin(void *, int);
 | 
			
		||||
int raw_write_stdout(const void *, int);
 | 
			
		||||
 | 
			
		||||
# define TM_START        0
 | 
			
		||||
# define TM_STOP         1
 | 
			
		||||
double app_tminterval(int stop, int usertime);
 | 
			
		||||
 | 
			
		||||
# define OPENSSL_NO_SSL_INTERN
 | 
			
		||||
 | 
			
		||||
#define TM_START	0
 | 
			
		||||
#define TM_STOP		1
 | 
			
		||||
double app_tminterval (int stop,int usertime);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define OPENSSL_NO_SSL_INTERN
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_NEXTPROTONEG
 | 
			
		||||
unsigned char *next_protos_parse(unsigned short *outlen, const char *in);
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										675
									
								
								apps/asn1pars.c
									
									
									
									
									
								
							
							
						
						
									
										675
									
								
								apps/asn1pars.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,15 +49,16 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* A nice addition from Dr Stephen Henson <steve@openssl.org> to 
 | 
			
		||||
 * add the -strparse option which parses nested binary structures
 | 
			
		||||
/*
 | 
			
		||||
 * A nice addition from Dr Stephen Henson <steve@openssl.org> to add the
 | 
			
		||||
 * -strparse option which parses nested binary structures
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
@@ -69,377 +70,385 @@
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -i		- indent the details by depth
 | 
			
		||||
 * -offset	- where in the file to start
 | 
			
		||||
 * -length	- how many bytes to use
 | 
			
		||||
 * -oid file	- extra oid description file
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -i           - indent the details by depth
 | 
			
		||||
 * -offset      - where in the file to start
 | 
			
		||||
 * -length      - how many bytes to use
 | 
			
		||||
 * -oid file    - extra oid description file
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	asn1parse_main
 | 
			
		||||
#define PROG    asn1parse_main
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int i,badops=0,offset=0,ret=1,j;
 | 
			
		||||
	unsigned int length=0;
 | 
			
		||||
	long num,tmplen;
 | 
			
		||||
	BIO *in=NULL,*out=NULL,*b64=NULL, *derout = NULL;
 | 
			
		||||
	int informat,indent=0, noout = 0, dump = 0;
 | 
			
		||||
	char *infile=NULL,*str=NULL,*prog,*oidfile=NULL, *derfile=NULL;
 | 
			
		||||
	char *genstr=NULL, *genconf=NULL;
 | 
			
		||||
	unsigned char *tmpbuf;
 | 
			
		||||
	const unsigned char *ctmpbuf;
 | 
			
		||||
	BUF_MEM *buf=NULL;
 | 
			
		||||
	STACK_OF(OPENSSL_STRING) *osk=NULL;
 | 
			
		||||
	ASN1_TYPE *at=NULL;
 | 
			
		||||
{
 | 
			
		||||
    int i, badops = 0, offset = 0, ret = 1, j;
 | 
			
		||||
    unsigned int length = 0;
 | 
			
		||||
    long num, tmplen;
 | 
			
		||||
    BIO *in = NULL, *out = NULL, *b64 = NULL, *derout = NULL;
 | 
			
		||||
    int informat, indent = 0, noout = 0, dump = 0, strictpem = 0;
 | 
			
		||||
    char *infile = NULL, *str = NULL, *prog, *oidfile = NULL, *derfile =
 | 
			
		||||
        NULL, *name = NULL, *header = NULL;
 | 
			
		||||
    char *genstr = NULL, *genconf = NULL;
 | 
			
		||||
    unsigned char *tmpbuf;
 | 
			
		||||
    const unsigned char *ctmpbuf;
 | 
			
		||||
    BUF_MEM *buf = NULL;
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *osk = NULL;
 | 
			
		||||
    ASN1_TYPE *at = NULL;
 | 
			
		||||
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	if ((osk=sk_OPENSSL_STRING_new_null()) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"Memory allocation failure\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			derfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-i") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			indent=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0) noout = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-oid") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			oidfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-offset") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			offset= atoi(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-length") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			length= atoi(*(++argv));
 | 
			
		||||
			if (length == 0) goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-dump") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			dump= -1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-dlimit") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			dump= atoi(*(++argv));
 | 
			
		||||
			if (dump <= 0) goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-strparse") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			sk_OPENSSL_STRING_push(osk,*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-genstr") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			genstr= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-genconf") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			genconf= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    if ((osk = sk_OPENSSL_STRING_new_null()) == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "Memory allocation failure\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            derfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-i") == 0) {
 | 
			
		||||
            indent = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-oid") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            oidfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-offset") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            offset = atoi(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-length") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            length = atoi(*(++argv));
 | 
			
		||||
            if (length == 0)
 | 
			
		||||
                goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-dump") == 0) {
 | 
			
		||||
            dump = -1;
 | 
			
		||||
        } else if (strcmp(*argv, "-dlimit") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            dump = atoi(*(++argv));
 | 
			
		||||
            if (dump <= 0)
 | 
			
		||||
                goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-strparse") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            sk_OPENSSL_STRING_push(osk, *(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-genstr") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            genstr = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-genconf") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            genconf = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-strictpem") == 0) {
 | 
			
		||||
            strictpem = 1;
 | 
			
		||||
            informat = FORMAT_PEM;
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - one of DER PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg       input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg      output file (output format is always DER\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout arg    don't produce any output\n");
 | 
			
		||||
		BIO_printf(bio_err," -offset arg   offset into file\n");
 | 
			
		||||
		BIO_printf(bio_err," -length arg   length of section in file\n");
 | 
			
		||||
		BIO_printf(bio_err," -i            indent entries\n");
 | 
			
		||||
		BIO_printf(bio_err," -dump         dump unknown data in hex form\n");
 | 
			
		||||
		BIO_printf(bio_err," -dlimit arg   dump the first arg bytes of unknown data in hex form\n");
 | 
			
		||||
		BIO_printf(bio_err," -oid file     file of extra oid definitions\n");
 | 
			
		||||
		BIO_printf(bio_err," -strparse offset\n");
 | 
			
		||||
		BIO_printf(bio_err,"               a series of these can be used to 'dig' into multiple\n");
 | 
			
		||||
		BIO_printf(bio_err,"               ASN1 blob wrappings\n");
 | 
			
		||||
		BIO_printf(bio_err," -genstr str   string to generate ASN1 structure from\n");
 | 
			
		||||
		BIO_printf(bio_err," -genconf file file to generate ASN1 structure from\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "%s [options] <infile\n", prog);
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, " -inform arg   input format - one of DER PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -in arg       input file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -out arg      output file (output format is always DER\n");
 | 
			
		||||
        BIO_printf(bio_err, " -noout arg    don't produce any output\n");
 | 
			
		||||
        BIO_printf(bio_err, " -offset arg   offset into file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -length arg   length of section in file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -i            indent entries\n");
 | 
			
		||||
        BIO_printf(bio_err, " -dump         dump unknown data in hex form\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -dlimit arg   dump the first arg bytes of unknown data in hex form\n");
 | 
			
		||||
        BIO_printf(bio_err, " -oid file     file of extra oid definitions\n");
 | 
			
		||||
        BIO_printf(bio_err, " -strparse offset\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "               a series of these can be used to 'dig' into multiple\n");
 | 
			
		||||
        BIO_printf(bio_err, "               ASN1 blob wrappings\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -genstr str   string to generate ASN1 structure from\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -genconf file file to generate ASN1 structure from\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -strictpem    do not attempt base64 decode outside PEM markers (-inform \n");
 | 
			
		||||
        BIO_printf(bio_err, "               will be ignored)\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	BIO_set_fp(out,stdout,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
	{
 | 
			
		||||
	BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
	out = BIO_push(tmpbio, out);
 | 
			
		||||
	}
 | 
			
		||||
    {
 | 
			
		||||
        BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
        out = BIO_push(tmpbio, out);
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (oidfile != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,oidfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"problems opening %s\n",oidfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		OBJ_create_objects(in);
 | 
			
		||||
		}
 | 
			
		||||
    if (oidfile != NULL) {
 | 
			
		||||
        if (BIO_read_filename(in, oidfile) <= 0) {
 | 
			
		||||
            BIO_printf(bio_err, "problems opening %s\n", oidfile);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        OBJ_create_objects(in);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
            perror(infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (derfile) {
 | 
			
		||||
		if(!(derout = BIO_new_file(derfile, "wb"))) {
 | 
			
		||||
			BIO_printf(bio_err,"problems opening %s\n",derfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
    if (derfile) {
 | 
			
		||||
        if (!(derout = BIO_new_file(derfile, "wb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "problems opening %s\n", derfile);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if ((buf=BUF_MEM_new()) == NULL) goto end;
 | 
			
		||||
	if (!BUF_MEM_grow(buf,BUFSIZ*8)) goto end; /* Pre-allocate :-) */
 | 
			
		||||
    if (strictpem) {
 | 
			
		||||
        if (PEM_read_bio(in, &name, &header, (unsigned char **)&str, &num) !=
 | 
			
		||||
            1) {
 | 
			
		||||
            BIO_printf(bio_err, "Error reading PEM file\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
 | 
			
		||||
	if (genstr || genconf)
 | 
			
		||||
		{
 | 
			
		||||
		num = do_generate(bio_err, genstr, genconf, buf);
 | 
			
		||||
		if (num < 0)
 | 
			
		||||
			{
 | 
			
		||||
			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 :-) */
 | 
			
		||||
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
        if (genstr || genconf) {
 | 
			
		||||
            num = do_generate(bio_err, genstr, genconf, buf);
 | 
			
		||||
            if (num < 0) {
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if (informat == FORMAT_PEM)
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmp;
 | 
			
		||||
        else {
 | 
			
		||||
 | 
			
		||||
			if ((b64=BIO_new(BIO_f_base64())) == NULL)
 | 
			
		||||
				goto end;
 | 
			
		||||
			BIO_push(b64,in);
 | 
			
		||||
			tmp=in;
 | 
			
		||||
			in=b64;
 | 
			
		||||
			b64=tmp;
 | 
			
		||||
			}
 | 
			
		||||
            if (informat == FORMAT_PEM) {
 | 
			
		||||
                BIO *tmp;
 | 
			
		||||
 | 
			
		||||
		num=0;
 | 
			
		||||
		for (;;)
 | 
			
		||||
			{
 | 
			
		||||
			if (!BUF_MEM_grow(buf,(int)num+BUFSIZ)) goto end;
 | 
			
		||||
			i=BIO_read(in,&(buf->data[num]),BUFSIZ);
 | 
			
		||||
			if (i <= 0) break;
 | 
			
		||||
			num+=i;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	str=buf->data;
 | 
			
		||||
                if ((b64 = BIO_new(BIO_f_base64())) == NULL)
 | 
			
		||||
                    goto end;
 | 
			
		||||
                BIO_push(b64, in);
 | 
			
		||||
                tmp = in;
 | 
			
		||||
                in = b64;
 | 
			
		||||
                b64 = tmp;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
	/* If any structs to parse go through in sequence */
 | 
			
		||||
            num = 0;
 | 
			
		||||
            for (;;) {
 | 
			
		||||
                if (!BUF_MEM_grow(buf, (int)num + BUFSIZ))
 | 
			
		||||
                    goto end;
 | 
			
		||||
                i = BIO_read(in, &(buf->data[num]), BUFSIZ);
 | 
			
		||||
                if (i <= 0)
 | 
			
		||||
                    break;
 | 
			
		||||
                num += i;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        str = buf->data;
 | 
			
		||||
 | 
			
		||||
	if (sk_OPENSSL_STRING_num(osk))
 | 
			
		||||
		{
 | 
			
		||||
		tmpbuf=(unsigned char *)str;
 | 
			
		||||
		tmplen=num;
 | 
			
		||||
		for (i=0; i<sk_OPENSSL_STRING_num(osk); i++)
 | 
			
		||||
			{
 | 
			
		||||
			ASN1_TYPE *atmp;
 | 
			
		||||
			int typ;
 | 
			
		||||
			j=atoi(sk_OPENSSL_STRING_value(osk,i));
 | 
			
		||||
			if (j == 0)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"'%s' is an invalid number\n",sk_OPENSSL_STRING_value(osk,i));
 | 
			
		||||
				continue;
 | 
			
		||||
				}
 | 
			
		||||
			tmpbuf+=j;
 | 
			
		||||
			tmplen-=j;
 | 
			
		||||
			atmp = at;
 | 
			
		||||
			ctmpbuf = tmpbuf;
 | 
			
		||||
			at = d2i_ASN1_TYPE(NULL,&ctmpbuf,tmplen);
 | 
			
		||||
			ASN1_TYPE_free(atmp);
 | 
			
		||||
			if(!at)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"Error parsing structure\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			typ = ASN1_TYPE_get(at);
 | 
			
		||||
			if ((typ == V_ASN1_OBJECT)
 | 
			
		||||
				|| (typ == V_ASN1_NULL))
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Can't parse %s type\n",
 | 
			
		||||
					typ == V_ASN1_NULL ? "NULL" : "OBJECT");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			/* hmm... this is a little evil but it works */
 | 
			
		||||
			tmpbuf=at->value.asn1_string->data;
 | 
			
		||||
			tmplen=at->value.asn1_string->length;
 | 
			
		||||
			}
 | 
			
		||||
		str=(char *)tmpbuf;
 | 
			
		||||
		num=tmplen;
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (offset >= num)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error: offset too large\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    /* If any structs to parse go through in sequence */
 | 
			
		||||
 | 
			
		||||
	num -= offset;
 | 
			
		||||
    if (sk_OPENSSL_STRING_num(osk)) {
 | 
			
		||||
        tmpbuf = (unsigned char *)str;
 | 
			
		||||
        tmplen = num;
 | 
			
		||||
        for (i = 0; i < sk_OPENSSL_STRING_num(osk); i++) {
 | 
			
		||||
            ASN1_TYPE *atmp;
 | 
			
		||||
            int typ;
 | 
			
		||||
            j = atoi(sk_OPENSSL_STRING_value(osk, i));
 | 
			
		||||
            if (j == 0) {
 | 
			
		||||
                BIO_printf(bio_err, "'%s' is an invalid number\n",
 | 
			
		||||
                           sk_OPENSSL_STRING_value(osk, i));
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            tmpbuf += j;
 | 
			
		||||
            tmplen -= j;
 | 
			
		||||
            atmp = at;
 | 
			
		||||
            ctmpbuf = tmpbuf;
 | 
			
		||||
            at = d2i_ASN1_TYPE(NULL, &ctmpbuf, tmplen);
 | 
			
		||||
            ASN1_TYPE_free(atmp);
 | 
			
		||||
            if (!at) {
 | 
			
		||||
                BIO_printf(bio_err, "Error parsing structure\n");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
            typ = ASN1_TYPE_get(at);
 | 
			
		||||
            if ((typ == V_ASN1_OBJECT)
 | 
			
		||||
                || (typ == V_ASN1_NULL)) {
 | 
			
		||||
                BIO_printf(bio_err, "Can't parse %s type\n",
 | 
			
		||||
                           typ == V_ASN1_NULL ? "NULL" : "OBJECT");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
            /* hmm... this is a little evil but it works */
 | 
			
		||||
            tmpbuf = at->value.asn1_string->data;
 | 
			
		||||
            tmplen = at->value.asn1_string->length;
 | 
			
		||||
        }
 | 
			
		||||
        str = (char *)tmpbuf;
 | 
			
		||||
        num = tmplen;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if ((length == 0) || ((long)length > num)) length=(unsigned int)num;
 | 
			
		||||
	if(derout) {
 | 
			
		||||
		if(BIO_write(derout, str + offset, length) != (int)length) {
 | 
			
		||||
			BIO_printf(bio_err, "Error writing output\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (!noout &&
 | 
			
		||||
	    !ASN1_parse_dump(out,(unsigned char *)&(str[offset]),length,
 | 
			
		||||
		    indent,dump))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	BIO_free(derout);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (b64 != NULL) BIO_free(b64);
 | 
			
		||||
	if (ret != 0)
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
	if (buf != NULL) BUF_MEM_free(buf);
 | 
			
		||||
	if (at != NULL) ASN1_TYPE_free(at);
 | 
			
		||||
	if (osk != NULL) sk_OPENSSL_STRING_free(osk);
 | 
			
		||||
	OBJ_cleanup();
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    if (offset >= num) {
 | 
			
		||||
        BIO_printf(bio_err, "Error: offset too large\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    num -= offset;
 | 
			
		||||
 | 
			
		||||
    if ((length == 0) || ((long)length > num))
 | 
			
		||||
        length = (unsigned int)num;
 | 
			
		||||
    if (derout) {
 | 
			
		||||
        if (BIO_write(derout, str + offset, length) != (int)length) {
 | 
			
		||||
            BIO_printf(bio_err, "Error writing output\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (!noout &&
 | 
			
		||||
        !ASN1_parse_dump(out, (unsigned char *)&(str[offset]), length,
 | 
			
		||||
                         indent, dump)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    BIO_free(derout);
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (b64 != NULL)
 | 
			
		||||
        BIO_free(b64);
 | 
			
		||||
    if (ret != 0)
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    if (buf != NULL)
 | 
			
		||||
        BUF_MEM_free(buf);
 | 
			
		||||
    if (name != NULL)
 | 
			
		||||
        OPENSSL_free(name);
 | 
			
		||||
    if (header != NULL)
 | 
			
		||||
        OPENSSL_free(header);
 | 
			
		||||
    if (strictpem && str != NULL)
 | 
			
		||||
        OPENSSL_free(str);
 | 
			
		||||
    if (at != NULL)
 | 
			
		||||
        ASN1_TYPE_free(at);
 | 
			
		||||
    if (osk != NULL)
 | 
			
		||||
        sk_OPENSSL_STRING_free(osk);
 | 
			
		||||
    OBJ_cleanup();
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf)
 | 
			
		||||
	{
 | 
			
		||||
	CONF *cnf = NULL;
 | 
			
		||||
	int len;
 | 
			
		||||
	long errline;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	ASN1_TYPE *atyp = NULL;
 | 
			
		||||
{
 | 
			
		||||
    CONF *cnf = NULL;
 | 
			
		||||
    int len;
 | 
			
		||||
    long errline;
 | 
			
		||||
    unsigned char *p;
 | 
			
		||||
    ASN1_TYPE *atyp = NULL;
 | 
			
		||||
 | 
			
		||||
	if (genconf)
 | 
			
		||||
		{
 | 
			
		||||
		cnf = NCONF_new(NULL);
 | 
			
		||||
		if (!NCONF_load(cnf, genconf, &errline))
 | 
			
		||||
			goto conferr;
 | 
			
		||||
		if (!genstr)
 | 
			
		||||
			genstr = NCONF_get_string(cnf, "default", "asn1");
 | 
			
		||||
		if (!genstr)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio, "Can't find 'asn1' in '%s'\n", genconf);
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (genconf) {
 | 
			
		||||
        cnf = NCONF_new(NULL);
 | 
			
		||||
        if (!NCONF_load(cnf, genconf, &errline))
 | 
			
		||||
            goto conferr;
 | 
			
		||||
        if (!genstr)
 | 
			
		||||
            genstr = NCONF_get_string(cnf, "default", "asn1");
 | 
			
		||||
        if (!genstr) {
 | 
			
		||||
            BIO_printf(bio, "Can't find 'asn1' in '%s'\n", genconf);
 | 
			
		||||
            goto err;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	atyp = ASN1_generate_nconf(genstr, cnf);
 | 
			
		||||
	NCONF_free(cnf);
 | 
			
		||||
	cnf = NULL;
 | 
			
		||||
    atyp = ASN1_generate_nconf(genstr, cnf);
 | 
			
		||||
    NCONF_free(cnf);
 | 
			
		||||
    cnf = NULL;
 | 
			
		||||
 | 
			
		||||
	if (!atyp)
 | 
			
		||||
		return -1;
 | 
			
		||||
    if (!atyp)
 | 
			
		||||
        return -1;
 | 
			
		||||
 | 
			
		||||
	len = i2d_ASN1_TYPE(atyp, NULL);
 | 
			
		||||
    len = i2d_ASN1_TYPE(atyp, NULL);
 | 
			
		||||
 | 
			
		||||
	if (len <= 0)
 | 
			
		||||
		goto err;
 | 
			
		||||
    if (len <= 0)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
	if (!BUF_MEM_grow(buf,len))
 | 
			
		||||
		goto err;
 | 
			
		||||
    if (!BUF_MEM_grow(buf, len))
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
	p=(unsigned char *)buf->data;
 | 
			
		||||
    p = (unsigned char *)buf->data;
 | 
			
		||||
 | 
			
		||||
	i2d_ASN1_TYPE(atyp, &p);
 | 
			
		||||
    i2d_ASN1_TYPE(atyp, &p);
 | 
			
		||||
 | 
			
		||||
	ASN1_TYPE_free(atyp);
 | 
			
		||||
	return len;
 | 
			
		||||
    ASN1_TYPE_free(atyp);
 | 
			
		||||
    return len;
 | 
			
		||||
 | 
			
		||||
	conferr:
 | 
			
		||||
 conferr:
 | 
			
		||||
 | 
			
		||||
	if (errline > 0)
 | 
			
		||||
		BIO_printf(bio, "Error on line %ld of config file '%s'\n",
 | 
			
		||||
							errline, genconf);
 | 
			
		||||
	else
 | 
			
		||||
		BIO_printf(bio, "Error loading config file '%s'\n", genconf);
 | 
			
		||||
    if (errline > 0)
 | 
			
		||||
        BIO_printf(bio, "Error on line %ld of config file '%s'\n",
 | 
			
		||||
                   errline, genconf);
 | 
			
		||||
    else
 | 
			
		||||
        BIO_printf(bio, "Error loading config file '%s'\n", genconf);
 | 
			
		||||
 | 
			
		||||
	err:
 | 
			
		||||
	NCONF_free(cnf);
 | 
			
		||||
	ASN1_TYPE_free(atyp);
 | 
			
		||||
 err:
 | 
			
		||||
    NCONF_free(cnf);
 | 
			
		||||
    ASN1_TYPE_free(atyp);
 | 
			
		||||
 | 
			
		||||
	return -1;
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										293
									
								
								apps/ciphers.c
									
									
									
									
									
								
							
							
						
						
									
										293
									
								
								apps/ciphers.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -59,173 +59,178 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#ifdef OPENSSL_NO_STDIO
 | 
			
		||||
#define APPS_WIN16
 | 
			
		||||
#endif
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	ciphers_main
 | 
			
		||||
#define PROG    ciphers_main
 | 
			
		||||
 | 
			
		||||
static const char *ciphers_usage[]={
 | 
			
		||||
"usage: ciphers args\n",
 | 
			
		||||
" -v          - verbose mode, a textual listing of the SSL/TLS ciphers in OpenSSL\n",
 | 
			
		||||
" -V          - even more verbose\n",
 | 
			
		||||
" -ssl2       - SSL2 mode\n",
 | 
			
		||||
" -ssl3       - SSL3 mode\n",
 | 
			
		||||
" -tls1       - TLS1 mode\n",
 | 
			
		||||
NULL
 | 
			
		||||
static const char *ciphers_usage[] = {
 | 
			
		||||
    "usage: ciphers args\n",
 | 
			
		||||
    " -v          - verbose mode, a textual listing of the SSL/TLS ciphers in OpenSSL\n",
 | 
			
		||||
    " -V          - even more verbose\n",
 | 
			
		||||
    " -ssl3       - SSL3 mode\n",
 | 
			
		||||
    " -tls1       - TLS1 mode\n",
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int ret=1,i;
 | 
			
		||||
	int verbose=0,Verbose=0;
 | 
			
		||||
	const char **pp;
 | 
			
		||||
	const char *p;
 | 
			
		||||
	int badops=0;
 | 
			
		||||
	SSL_CTX *ctx=NULL;
 | 
			
		||||
	SSL *ssl=NULL;
 | 
			
		||||
	char *ciphers=NULL;
 | 
			
		||||
	const SSL_METHOD *meth=NULL;
 | 
			
		||||
	STACK_OF(SSL_CIPHER) *sk;
 | 
			
		||||
	char buf[512];
 | 
			
		||||
	BIO *STDout=NULL;
 | 
			
		||||
 | 
			
		||||
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
	meth=SSLv23_server_method();
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
	meth=SSLv3_server_method();
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL2)
 | 
			
		||||
	meth=SSLv2_server_method();
 | 
			
		||||
{
 | 
			
		||||
    int ret = 1, i;
 | 
			
		||||
    int verbose = 0, Verbose = 0;
 | 
			
		||||
    int use_supported = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_SSL_TRACE
 | 
			
		||||
    int stdname = 0;
 | 
			
		||||
#endif
 | 
			
		||||
    const char **pp;
 | 
			
		||||
    const char *p;
 | 
			
		||||
    int badops = 0;
 | 
			
		||||
    SSL_CTX *ctx = NULL;
 | 
			
		||||
    SSL *ssl = NULL;
 | 
			
		||||
    char *ciphers = NULL;
 | 
			
		||||
    const SSL_METHOD *meth = NULL;
 | 
			
		||||
    STACK_OF(SSL_CIPHER) *sk = NULL;
 | 
			
		||||
    char buf[512];
 | 
			
		||||
    BIO *STDout = NULL;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    meth = SSLv23_server_method();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
			
		||||
	STDout=BIO_new_fp(stdout,BIO_NOCLOSE);
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
    STDout = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
	{
 | 
			
		||||
	BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
	STDout = BIO_push(tmpbio, STDout);
 | 
			
		||||
	}
 | 
			
		||||
    {
 | 
			
		||||
        BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
        STDout = BIO_push(tmpbio, STDout);
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if (strcmp(*argv,"-v") == 0)
 | 
			
		||||
			verbose=1;
 | 
			
		||||
		else if (strcmp(*argv,"-V") == 0)
 | 
			
		||||
			verbose=Verbose=1;
 | 
			
		||||
#ifndef OPENSSL_NO_SSL2
 | 
			
		||||
		else if (strcmp(*argv,"-ssl2") == 0)
 | 
			
		||||
			meth=SSLv2_client_method();
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-v") == 0)
 | 
			
		||||
            verbose = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-V") == 0)
 | 
			
		||||
            verbose = Verbose = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-s") == 0)
 | 
			
		||||
            use_supported = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_SSL_TRACE
 | 
			
		||||
        else if (strcmp(*argv, "-stdname") == 0)
 | 
			
		||||
            stdname = verbose = 1;
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SSL3
 | 
			
		||||
		else if (strcmp(*argv,"-ssl3") == 0)
 | 
			
		||||
			meth=SSLv3_client_method();
 | 
			
		||||
        else if (strcmp(*argv, "-ssl3") == 0)
 | 
			
		||||
            meth = SSLv3_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_TLS1
 | 
			
		||||
		else if (strcmp(*argv,"-tls1") == 0)
 | 
			
		||||
			meth=TLSv1_client_method();
 | 
			
		||||
        else if (strcmp(*argv, "-tls1") == 0)
 | 
			
		||||
            meth = TLSv1_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
		else if ((strncmp(*argv,"-h",2) == 0) ||
 | 
			
		||||
			 (strcmp(*argv,"-?") == 0))
 | 
			
		||||
			{
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			ciphers= *argv;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
        else if ((strncmp(*argv, "-h", 2) == 0) || (strcmp(*argv, "-?") == 0)) {
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        } else {
 | 
			
		||||
            ciphers = *argv;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
		for (pp=ciphers_usage; (*pp != NULL); pp++)
 | 
			
		||||
			BIO_printf(bio_err,"%s",*pp);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
        for (pp = ciphers_usage; (*pp != NULL); pp++)
 | 
			
		||||
            BIO_printf(bio_err, "%s", *pp);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	OpenSSL_add_ssl_algorithms();
 | 
			
		||||
    OpenSSL_add_ssl_algorithms();
 | 
			
		||||
 | 
			
		||||
	ctx=SSL_CTX_new(meth);
 | 
			
		||||
	if (ctx == NULL) goto err;
 | 
			
		||||
	if (ciphers != NULL) {
 | 
			
		||||
		if(!SSL_CTX_set_cipher_list(ctx,ciphers)) {
 | 
			
		||||
			BIO_printf(bio_err, "Error in cipher list\n");
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	ssl=SSL_new(ctx);
 | 
			
		||||
	if (ssl == NULL) goto err;
 | 
			
		||||
    ctx = SSL_CTX_new(meth);
 | 
			
		||||
    if (ctx == NULL)
 | 
			
		||||
        goto err;
 | 
			
		||||
    if (ciphers != NULL) {
 | 
			
		||||
        if (!SSL_CTX_set_cipher_list(ctx, ciphers)) {
 | 
			
		||||
            BIO_printf(bio_err, "Error in cipher list\n");
 | 
			
		||||
            goto err;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    ssl = SSL_new(ctx);
 | 
			
		||||
    if (ssl == NULL)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    if (use_supported)
 | 
			
		||||
        sk = SSL_get1_supported_ciphers(ssl);
 | 
			
		||||
    else
 | 
			
		||||
        sk = SSL_get_ciphers(ssl);
 | 
			
		||||
 | 
			
		||||
	if (!verbose)
 | 
			
		||||
		{
 | 
			
		||||
		for (i=0; ; i++)
 | 
			
		||||
			{
 | 
			
		||||
			p=SSL_get_cipher_list(ssl,i);
 | 
			
		||||
			if (p == NULL) break;
 | 
			
		||||
			if (i != 0) BIO_printf(STDout,":");
 | 
			
		||||
			BIO_printf(STDout,"%s",p);
 | 
			
		||||
			}
 | 
			
		||||
		BIO_printf(STDout,"\n");
 | 
			
		||||
		}
 | 
			
		||||
	else /* verbose */
 | 
			
		||||
		{
 | 
			
		||||
		sk=SSL_get_ciphers(ssl);
 | 
			
		||||
    if (!verbose) {
 | 
			
		||||
        for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
 | 
			
		||||
            SSL_CIPHER *c = sk_SSL_CIPHER_value(sk, i);
 | 
			
		||||
            p = SSL_CIPHER_get_name(c);
 | 
			
		||||
            if (p == NULL)
 | 
			
		||||
                break;
 | 
			
		||||
            if (i != 0)
 | 
			
		||||
                BIO_printf(STDout, ":");
 | 
			
		||||
            BIO_printf(STDout, "%s", p);
 | 
			
		||||
        }
 | 
			
		||||
        BIO_printf(STDout, "\n");
 | 
			
		||||
    } else {                    /* verbose */
 | 
			
		||||
 | 
			
		||||
		for (i=0; i<sk_SSL_CIPHER_num(sk); i++)
 | 
			
		||||
			{
 | 
			
		||||
			SSL_CIPHER *c;
 | 
			
		||||
        for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
 | 
			
		||||
            SSL_CIPHER *c;
 | 
			
		||||
 | 
			
		||||
			c = sk_SSL_CIPHER_value(sk,i);
 | 
			
		||||
			
 | 
			
		||||
			if (Verbose)
 | 
			
		||||
				{
 | 
			
		||||
				unsigned long id = SSL_CIPHER_get_id(c);
 | 
			
		||||
				int id0 = (int)(id >> 24);
 | 
			
		||||
				int id1 = (int)((id >> 16) & 0xffL);
 | 
			
		||||
				int id2 = (int)((id >> 8) & 0xffL);
 | 
			
		||||
				int id3 = (int)(id & 0xffL);
 | 
			
		||||
				
 | 
			
		||||
				if ((id & 0xff000000L) == 0x02000000L)
 | 
			
		||||
					BIO_printf(STDout, "     0x%02X,0x%02X,0x%02X - ", id1, id2, id3); /* SSL2 cipher */
 | 
			
		||||
				else if ((id & 0xff000000L) == 0x03000000L)
 | 
			
		||||
					BIO_printf(STDout, "          0x%02X,0x%02X - ", id2, id3); /* SSL3 cipher */
 | 
			
		||||
				else
 | 
			
		||||
					BIO_printf(STDout, "0x%02X,0x%02X,0x%02X,0x%02X - ", id0, id1, id2, id3); /* whatever */
 | 
			
		||||
				}
 | 
			
		||||
            c = sk_SSL_CIPHER_value(sk, i);
 | 
			
		||||
 | 
			
		||||
			BIO_puts(STDout,SSL_CIPHER_description(c,buf,sizeof buf));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
            if (Verbose) {
 | 
			
		||||
                unsigned long id = SSL_CIPHER_get_id(c);
 | 
			
		||||
                int id0 = (int)(id >> 24);
 | 
			
		||||
                int id1 = (int)((id >> 16) & 0xffL);
 | 
			
		||||
                int id2 = (int)((id >> 8) & 0xffL);
 | 
			
		||||
                int id3 = (int)(id & 0xffL);
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
	if (0)
 | 
			
		||||
		{
 | 
			
		||||
err:
 | 
			
		||||
		SSL_load_error_strings();
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
end:
 | 
			
		||||
	if (ctx != NULL) SSL_CTX_free(ctx);
 | 
			
		||||
	if (ssl != NULL) SSL_free(ssl);
 | 
			
		||||
	if (STDout != NULL) BIO_free_all(STDout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
                if ((id & 0xff000000L) == 0x03000000L) {
 | 
			
		||||
                    /* SSL3 cipher */
 | 
			
		||||
                    BIO_printf(STDout, "          0x%02X,0x%02X - ", id2,
 | 
			
		||||
                               id3);
 | 
			
		||||
                } else {
 | 
			
		||||
                    /* whatever */
 | 
			
		||||
                    BIO_printf(STDout, "0x%02X,0x%02X,0x%02X,0x%02X - ", id0,
 | 
			
		||||
                               id1, id2, id3);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
#ifndef OPENSSL_NO_SSL_TRACE
 | 
			
		||||
            if (stdname) {
 | 
			
		||||
                const char *nm = SSL_CIPHER_standard_name(c);
 | 
			
		||||
                if (nm == NULL)
 | 
			
		||||
                    nm = "UNKNOWN";
 | 
			
		||||
                BIO_printf(STDout, "%s - ", nm);
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
            BIO_puts(STDout, SSL_CIPHER_description(c, buf, sizeof buf));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ret = 0;
 | 
			
		||||
    if (0) {
 | 
			
		||||
 err:
 | 
			
		||||
        SSL_load_error_strings();
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    }
 | 
			
		||||
 end:
 | 
			
		||||
    if (use_supported && sk)
 | 
			
		||||
        sk_SSL_CIPHER_free(sk);
 | 
			
		||||
    if (ctx != NULL)
 | 
			
		||||
        SSL_CTX_free(ctx);
 | 
			
		||||
    if (ssl != NULL)
 | 
			
		||||
        SSL_free(ssl);
 | 
			
		||||
    if (STDout != NULL)
 | 
			
		||||
        BIO_free_all(STDout);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,24 +1,52 @@
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Client test cert (512 bit)
 | 
			
		||||
subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = Test Client Cert
 | 
			
		||||
issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB6TCCAVICAQIwDQYJKoZIhvcNAQEEBQAwWzELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYD
 | 
			
		||||
VQQDExJUZXN0IENBICgxMDI0IGJpdCkwHhcNOTcwNjA5MTM1NzU2WhcNOTgwNjA5
 | 
			
		||||
MTM1NzU2WjBjMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
 | 
			
		||||
A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxIzAhBgNVBAMTGkNsaWVudCB0ZXN0IGNl
 | 
			
		||||
cnQgKDUxMiBiaXQpMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALtv55QyzG6i2Plw
 | 
			
		||||
Z1pah7++Gv8L5j6Hnyr/uTZE1NLG0ABDDexmq/R4KedLjFEIYjocDui+IXs62NNt
 | 
			
		||||
XrT8odkCAwEAATANBgkqhkiG9w0BAQQFAAOBgQBwtMmI7oGUG8nKmftQssATViH5
 | 
			
		||||
NRRtoEw07DxJp/LfatHdrhqQB73eGdL5WILZJXk46Xz2e9WMSUjVCSYhdKxtflU3
 | 
			
		||||
UR2Ajv1Oo0sTNdfz0wDqJNirLNtzyhhsaq8qMTrLwXrCP31VxBiigFSQSUFnZyTE
 | 
			
		||||
9TKwhS4GlwbtCfxSKQ==
 | 
			
		||||
MIID5zCCAs+gAwIBAgIJALnu1NlVpZ6yMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV
 | 
			
		||||
BAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMSIwIAYDVQQLDBlGT1IgVEVT
 | 
			
		||||
VElORyBQVVJQT1NFUyBPTkxZMSUwIwYDVQQDDBxPcGVuU1NMIFRlc3QgSW50ZXJt
 | 
			
		||||
ZWRpYXRlIENBMB4XDTExMTIwODE0MDE0OFoXDTIxMTAxNjE0MDE0OFowZDELMAkG
 | 
			
		||||
A1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBU
 | 
			
		||||
RVNUSU5HIFBVUlBPU0VTIE9OTFkxGTAXBgNVBAMMEFRlc3QgQ2xpZW50IENlcnQw
 | 
			
		||||
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0ranbHRLcLVqN+0BzcZpY
 | 
			
		||||
+yOLqxzDWT1LD9eW1stC4NzXX9/DCtSIVyN7YIHdGLrIPr64IDdXXaMRzgZ2rOKs
 | 
			
		||||
lmHCAiFpO/ja99gGCJRxH0xwQatqAULfJVHeUhs7OEGOZc2nWifjqKvGfNTilP7D
 | 
			
		||||
nwi69ipQFq9oS19FmhwVHk2wg7KZGHI1qDyG04UrfCZMRitvS9+UVhPpIPjuiBi2
 | 
			
		||||
x3/FZIpL5gXJvvFK6xHY63oq2asyzBATntBgnP4qJFWWcvRx24wF1PnZabxuVoL2
 | 
			
		||||
bPnQ/KvONDrw3IdqkKhYNTul7jEcu3OlcZIMw+7DiaKJLAzKb/bBF5gm/pwW6As9
 | 
			
		||||
AgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBeAwLAYJYIZI
 | 
			
		||||
AYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQW
 | 
			
		||||
BBSZHKyLoTh7Mb409Zn/mK1ceSDAjDAfBgNVHSMEGDAWgBQ2w2yI55X+sL3szj49
 | 
			
		||||
hqshgYfa2jANBgkqhkiG9w0BAQUFAAOCAQEAD0mL7PtPYgCEuDyOQSbLpeND5hVS
 | 
			
		||||
curxQdGnrJ6Acrhodb7E9ccATokeb0PLx6HBLQUicxhTZIQ9FbO43YkQcOU6C3BB
 | 
			
		||||
IlwskqmtN6+VmrQzNolHCDzvxNZs9lYL2VbGPGqVRyjZeHpoAlf9cQr8PgDb4d4b
 | 
			
		||||
vUx2KAhHQvV2nkmYvKyXcgnRuHggumF87mkxidriGAEFwH4qfOqetUg64WyxP7P2
 | 
			
		||||
QLipm04SyQa7ONtIApfVXgHcE42Py4/f4arzCzMjKe3VyhGkS7nsT55X/fWgTaRm
 | 
			
		||||
CQPkO+H94P958WTvQDt77bQ+D3IvYaVvfil8n6HJMOJfFT0LJuSUbpSXJg==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIIBOwIBAAJBALtv55QyzG6i2PlwZ1pah7++Gv8L5j6Hnyr/uTZE1NLG0ABDDexm
 | 
			
		||||
q/R4KedLjFEIYjocDui+IXs62NNtXrT8odkCAwEAAQJAbwXq0vJ/+uyEvsNgxLko
 | 
			
		||||
/V86mGXQ/KrSkeKlL0r4ENxjcyeMAGoKu6J9yMY7+X9+Zm4nxShNfTsf/+Freoe1
 | 
			
		||||
HQIhAPOSm5Q1YI+KIsII2GeVJx1U69+wnd71OasIPakS1L1XAiEAxQAW+J3/JWE0
 | 
			
		||||
ftEYakbhUOKL8tD1OaFZS71/5GdG7E8CIQCefUMmySSvwd6kC0VlATSWbW+d+jp/
 | 
			
		||||
nWmM1KvqnAo5uQIhALqEADu5U1Wvt8UN8UDGBRPQulHWNycuNV45d3nnskWPAiAw
 | 
			
		||||
ueTyr6WsZ5+SD8g/Hy3xuvF3nPmJRH+rwvVihlcFOg==
 | 
			
		||||
MIIEpQIBAAKCAQEAtK2p2x0S3C1ajftAc3GaWPsji6scw1k9Sw/XltbLQuDc11/f
 | 
			
		||||
wwrUiFcje2CB3Ri6yD6+uCA3V12jEc4GdqzirJZhwgIhaTv42vfYBgiUcR9McEGr
 | 
			
		||||
agFC3yVR3lIbOzhBjmXNp1on46irxnzU4pT+w58IuvYqUBavaEtfRZocFR5NsIOy
 | 
			
		||||
mRhyNag8htOFK3wmTEYrb0vflFYT6SD47ogYtsd/xWSKS+YFyb7xSusR2Ot6Ktmr
 | 
			
		||||
MswQE57QYJz+KiRVlnL0cduMBdT52Wm8blaC9mz50PyrzjQ68NyHapCoWDU7pe4x
 | 
			
		||||
HLtzpXGSDMPuw4miiSwMym/2wReYJv6cFugLPQIDAQABAoIBAAZOyc9MhIwLSU4L
 | 
			
		||||
p4RgQvM4UVVe8/Id+3XTZ8NsXExJbWxXfIhiqGjaIfL8u4vsgRjcl+v1s/jo2/iT
 | 
			
		||||
KMab4o4D8gXD7UavQVDjtjb/ta79WL3SjRl2Uc9YjjMkyq6WmDNQeo2NKDdafCTB
 | 
			
		||||
1uzSJtLNipB8Z53ELPuHJhxX9QMHrMnuha49riQgXZ7buP9iQrHJFhImBjSzbxJx
 | 
			
		||||
L+TI6rkyLSf9Wi0Pd3L27Ob3QWNfNRYNSeTE+08eSRChkur5W0RuXAcuAICdQlCl
 | 
			
		||||
LBvWO/LmmvbzCqiDcgy/TliSb6CGGwgiNG7LJZmlkYNj8laGwalNlYZs3UrVv6NO
 | 
			
		||||
Br2loAECgYEA2kvCvPGj0Dg/6g7WhXDvAkEbcaL1tSeCxBbNH+6HS2UWMWvyTtCn
 | 
			
		||||
/bbD519QIdkvayy1QjEf32GV/UjUVmlULMLBcDy0DGjtL3+XpIhLKWDNxN1v1/ai
 | 
			
		||||
1oz23ZJCOgnk6K4qtFtlRS1XtynjA+rBetvYvLP9SKeFrnpzCgaA2r0CgYEA0+KX
 | 
			
		||||
1ACXDTNH5ySX3kMjSS9xdINf+OOw4CvPHFwbtc9aqk2HePlEsBTz5I/W3rKwXva3
 | 
			
		||||
NqZ/bRqVVeZB/hHKFywgdUQk2Uc5z/S7Lw70/w1HubNTXGU06Ngb6zOFAo/o/TwZ
 | 
			
		||||
zTP1BMIKSOB6PAZPS3l+aLO4FRIRotfFhgRHOoECgYEAmiZbqt8cJaJDB/5YYDzC
 | 
			
		||||
mp3tSk6gIb936Q6M5VqkMYp9pIKsxhk0N8aDCnTU+kIK6SzWBpr3/d9Ecmqmfyq7
 | 
			
		||||
5SvWO3KyVf0WWK9KH0abhOm2BKm2HBQvI0DB5u8sUx2/hsvOnjPYDISbZ11t0MtK
 | 
			
		||||
u35Zy89yMYcSsIYJjG/ROCUCgYEAgI2P9G5PNxEP5OtMwOsW84Y3Xat/hPAQFlI+
 | 
			
		||||
HES+AzbFGWJkeT8zL2nm95tVkFP1sggZ7Kxjz3w7cpx7GX0NkbWSE9O+T51pNASV
 | 
			
		||||
tN1sQ3p5M+/a+cnlqgfEGJVvc7iAcXQPa3LEi5h2yPR49QYXAgG6cifn3dDSpmwn
 | 
			
		||||
SUI7PQECgYEApGCIIpSRPLAEHTGmP87RBL1smurhwmy2s/pghkvUkWehtxg0sGHh
 | 
			
		||||
kuaqDWcskogv+QC0sVdytiLSz8G0DwcEcsHK1Fkyb8A+ayiw6jWJDo2m9+IF4Fww
 | 
			
		||||
1Te6jFPYDESnbhq7+TLGgHGhtwcu5cnb4vSuYXGXKupZGzoLOBbv1Zw=
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2466
									
								
								apps/cms.c
									
									
									
									
									
								
							
							
						
						
									
										2466
									
								
								apps/cms.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										704
									
								
								apps/crl.c
									
									
									
									
									
								
							
							
						
						
									
										704
									
								
								apps/crl.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -67,380 +67,376 @@
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	crl_main
 | 
			
		||||
#define PROG    crl_main
 | 
			
		||||
 | 
			
		||||
#undef POSTFIX
 | 
			
		||||
#define	POSTFIX	".rvk"
 | 
			
		||||
#define POSTFIX ".rvk"
 | 
			
		||||
 | 
			
		||||
static const char *crl_usage[]={
 | 
			
		||||
"usage: crl args\n",
 | 
			
		||||
"\n",
 | 
			
		||||
" -inform arg     - input format - default PEM (DER or PEM)\n",
 | 
			
		||||
" -outform arg    - output format - default PEM\n",
 | 
			
		||||
" -text           - print out a text format version\n",
 | 
			
		||||
" -in arg         - input file - default stdin\n",
 | 
			
		||||
" -out arg        - output file - default stdout\n",
 | 
			
		||||
" -hash           - print hash value\n",
 | 
			
		||||
" -fingerprint    - print the crl fingerprint\n",
 | 
			
		||||
" -issuer         - print issuer DN\n",
 | 
			
		||||
" -lastupdate     - lastUpdate field\n",
 | 
			
		||||
" -nextupdate     - nextUpdate field\n",
 | 
			
		||||
" -crlnumber      - print CRL number\n",
 | 
			
		||||
" -noout          - no CRL output\n",
 | 
			
		||||
" -CAfile  name   - verify CRL using certificates in file \"name\"\n",
 | 
			
		||||
" -CApath  dir    - verify CRL using certificates in \"dir\"\n",
 | 
			
		||||
" -nameopt arg    - various certificate name options\n",
 | 
			
		||||
NULL
 | 
			
		||||
static const char *crl_usage[] = {
 | 
			
		||||
    "usage: crl args\n",
 | 
			
		||||
    "\n",
 | 
			
		||||
    " -inform arg     - input format - default PEM (DER or PEM)\n",
 | 
			
		||||
    " -outform arg    - output format - default PEM\n",
 | 
			
		||||
    " -text           - print out a text format version\n",
 | 
			
		||||
    " -in arg         - input file - default stdin\n",
 | 
			
		||||
    " -out arg        - output file - default stdout\n",
 | 
			
		||||
    " -hash           - print hash value\n",
 | 
			
		||||
#ifndef OPENSSL_NO_MD5
 | 
			
		||||
    " -hash_old       - print old-style (MD5) hash value\n",
 | 
			
		||||
#endif
 | 
			
		||||
    " -fingerprint    - print the crl fingerprint\n",
 | 
			
		||||
    " -issuer         - print issuer DN\n",
 | 
			
		||||
    " -lastupdate     - lastUpdate field\n",
 | 
			
		||||
    " -nextupdate     - nextUpdate field\n",
 | 
			
		||||
    " -crlnumber      - print CRL number\n",
 | 
			
		||||
    " -noout          - no CRL output\n",
 | 
			
		||||
    " -CAfile  name   - verify CRL using certificates in file \"name\"\n",
 | 
			
		||||
    " -CApath  dir    - verify CRL using certificates in \"dir\"\n",
 | 
			
		||||
    " -nameopt arg    - various certificate name options\n",
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static X509_CRL *load_crl(char *file, int format);
 | 
			
		||||
static BIO *bio_out=NULL;
 | 
			
		||||
static BIO *bio_out = NULL;
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned long nmflag = 0;
 | 
			
		||||
	X509_CRL *x=NULL;
 | 
			
		||||
	char *CAfile = NULL, *CApath = NULL;
 | 
			
		||||
	int ret=1,i,num,badops=0;
 | 
			
		||||
	BIO *out=NULL;
 | 
			
		||||
	int informat,outformat;
 | 
			
		||||
	char *infile=NULL,*outfile=NULL;
 | 
			
		||||
	int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0;
 | 
			
		||||
	int fingerprint = 0, crlnumber = 0;
 | 
			
		||||
	const char **pp;
 | 
			
		||||
	X509_STORE *store = NULL;
 | 
			
		||||
	X509_STORE_CTX ctx;
 | 
			
		||||
	X509_LOOKUP *lookup = NULL;
 | 
			
		||||
	X509_OBJECT xobj;
 | 
			
		||||
	EVP_PKEY *pkey;
 | 
			
		||||
	int do_ver = 0;
 | 
			
		||||
	const EVP_MD *md_alg,*digest=EVP_sha1();
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	if (bio_out == NULL)
 | 
			
		||||
		if ((bio_out=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_set_fp(bio_out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			bio_out = BIO_push(tmpbio, bio_out);
 | 
			
		||||
			}
 | 
			
		||||
{
 | 
			
		||||
    unsigned long nmflag = 0;
 | 
			
		||||
    X509_CRL *x = NULL;
 | 
			
		||||
    char *CAfile = NULL, *CApath = NULL;
 | 
			
		||||
    int ret = 1, i, num, badops = 0, badsig = 0;
 | 
			
		||||
    BIO *out = NULL;
 | 
			
		||||
    int informat, outformat, keyformat;
 | 
			
		||||
    char *infile = NULL, *outfile = NULL, *crldiff = NULL, *keyfile = NULL;
 | 
			
		||||
    int hash = 0, issuer = 0, lastupdate = 0, nextupdate = 0, noout =
 | 
			
		||||
        0, text = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_MD5
 | 
			
		||||
    int hash_old = 0;
 | 
			
		||||
#endif
 | 
			
		||||
			}
 | 
			
		||||
    int fingerprint = 0, crlnumber = 0;
 | 
			
		||||
    const char **pp;
 | 
			
		||||
    X509_STORE *store = NULL;
 | 
			
		||||
    X509_STORE_CTX ctx;
 | 
			
		||||
    X509_LOOKUP *lookup = NULL;
 | 
			
		||||
    X509_OBJECT xobj;
 | 
			
		||||
    EVP_PKEY *pkey;
 | 
			
		||||
    int do_ver = 0;
 | 
			
		||||
    const EVP_MD *md_alg, *digest = EVP_sha1();
 | 
			
		||||
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	num=0;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
    if (bio_out == NULL)
 | 
			
		||||
        if ((bio_out = BIO_new(BIO_s_file())) != NULL) {
 | 
			
		||||
            BIO_set_fp(bio_out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
            {
 | 
			
		||||
                BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
                bio_out = BIO_push(tmpbio, bio_out);
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
    keyformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    num = 0;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
#ifdef undef
 | 
			
		||||
		if	(strcmp(*argv,"-p") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			if (!args_from_file(++argv,Nargc,Nargv)) { goto end; }*/
 | 
			
		||||
			}
 | 
			
		||||
        if (strcmp(*argv, "-p") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!args_from_file(++argv, Nargc, Nargv)) {
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        */}
 | 
			
		||||
#endif
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-CApath") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			CApath = *(++argv);
 | 
			
		||||
			do_ver = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-CAfile") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			CAfile = *(++argv);
 | 
			
		||||
			do_ver = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-verify") == 0)
 | 
			
		||||
			do_ver = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-hash") == 0)
 | 
			
		||||
			hash= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-nameopt") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			if (!set_name_ex(&nmflag, *(++argv))) goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-issuer") == 0)
 | 
			
		||||
			issuer= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-lastupdate") == 0)
 | 
			
		||||
			lastupdate= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-nextupdate") == 0)
 | 
			
		||||
			nextupdate= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-fingerprint") == 0)
 | 
			
		||||
			fingerprint= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-crlnumber") == 0)
 | 
			
		||||
			crlnumber= ++num;
 | 
			
		||||
		else if ((md_alg=EVP_get_digestbyname(*argv + 1)))
 | 
			
		||||
			{
 | 
			
		||||
			/* ok */
 | 
			
		||||
			digest=md_alg;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-gendelta") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            crldiff = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-key") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            keyfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-keyform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            keyformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-CApath") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            CApath = *(++argv);
 | 
			
		||||
            do_ver = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-CAfile") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            CAfile = *(++argv);
 | 
			
		||||
            do_ver = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-verify") == 0)
 | 
			
		||||
            do_ver = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-hash") == 0)
 | 
			
		||||
            hash = ++num;
 | 
			
		||||
#ifndef OPENSSL_NO_MD5
 | 
			
		||||
        else if (strcmp(*argv, "-hash_old") == 0)
 | 
			
		||||
            hash_old = ++num;
 | 
			
		||||
#endif
 | 
			
		||||
        else if (strcmp(*argv, "-nameopt") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!set_name_ex(&nmflag, *(++argv)))
 | 
			
		||||
                goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-issuer") == 0)
 | 
			
		||||
            issuer = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-lastupdate") == 0)
 | 
			
		||||
            lastupdate = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-nextupdate") == 0)
 | 
			
		||||
            nextupdate = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-fingerprint") == 0)
 | 
			
		||||
            fingerprint = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-crlnumber") == 0)
 | 
			
		||||
            crlnumber = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-badsig") == 0)
 | 
			
		||||
            badsig = 1;
 | 
			
		||||
        else if ((md_alg = EVP_get_digestbyname(*argv + 1))) {
 | 
			
		||||
            /* ok */
 | 
			
		||||
            digest = md_alg;
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		for (pp=crl_usage; (*pp != NULL); pp++)
 | 
			
		||||
			BIO_printf(bio_err,"%s",*pp);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        for (pp = crl_usage; (*pp != NULL); pp++)
 | 
			
		||||
            BIO_printf(bio_err, "%s", *pp);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	x=load_crl(infile,informat);
 | 
			
		||||
	if (x == NULL) { goto end; }
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    x = load_crl(infile, informat);
 | 
			
		||||
    if (x == NULL) {
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(do_ver) {
 | 
			
		||||
		store = X509_STORE_new();
 | 
			
		||||
		lookup=X509_STORE_add_lookup(store,X509_LOOKUP_file());
 | 
			
		||||
		if (lookup == NULL) goto end;
 | 
			
		||||
		if (!X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM))
 | 
			
		||||
			X509_LOOKUP_load_file(lookup,NULL,X509_FILETYPE_DEFAULT);
 | 
			
		||||
			
 | 
			
		||||
		lookup=X509_STORE_add_lookup(store,X509_LOOKUP_hash_dir());
 | 
			
		||||
		if (lookup == NULL) goto end;
 | 
			
		||||
		if (!X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM))
 | 
			
		||||
			X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
 | 
			
		||||
		ERR_clear_error();
 | 
			
		||||
    if (do_ver) {
 | 
			
		||||
        store = X509_STORE_new();
 | 
			
		||||
        lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());
 | 
			
		||||
        if (lookup == NULL)
 | 
			
		||||
            goto end;
 | 
			
		||||
        if (!X509_LOOKUP_load_file(lookup, CAfile, X509_FILETYPE_PEM))
 | 
			
		||||
            X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT);
 | 
			
		||||
 | 
			
		||||
		if(!X509_STORE_CTX_init(&ctx, store, NULL, NULL)) {
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				"Error initialising X509 store\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
        lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir());
 | 
			
		||||
        if (lookup == NULL)
 | 
			
		||||
            goto end;
 | 
			
		||||
        if (!X509_LOOKUP_add_dir(lookup, CApath, X509_FILETYPE_PEM))
 | 
			
		||||
            X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT);
 | 
			
		||||
        ERR_clear_error();
 | 
			
		||||
 | 
			
		||||
		i = X509_STORE_get_by_subject(&ctx, X509_LU_X509, 
 | 
			
		||||
					X509_CRL_get_issuer(x), &xobj);
 | 
			
		||||
		if(i <= 0) {
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				"Error getting CRL issuer certificate\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		pkey = X509_get_pubkey(xobj.data.x509);
 | 
			
		||||
		X509_OBJECT_free_contents(&xobj);
 | 
			
		||||
		if(!pkey) {
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				"Error getting CRL issuer public key\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		i = X509_CRL_verify(x, pkey);
 | 
			
		||||
		EVP_PKEY_free(pkey);
 | 
			
		||||
		if(i < 0) goto end;
 | 
			
		||||
		if(i == 0) BIO_printf(bio_err, "verify failure\n");
 | 
			
		||||
		else BIO_printf(bio_err, "verify OK\n");
 | 
			
		||||
	}
 | 
			
		||||
        if (!X509_STORE_CTX_init(&ctx, store, NULL, NULL)) {
 | 
			
		||||
            BIO_printf(bio_err, "Error initialising X509 store\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	if (num)
 | 
			
		||||
		{
 | 
			
		||||
		for (i=1; i<=num; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if (issuer == i)
 | 
			
		||||
				{
 | 
			
		||||
				print_name(bio_out, "issuer=", X509_CRL_get_issuer(x), nmflag);
 | 
			
		||||
				}
 | 
			
		||||
			if (crlnumber == i)
 | 
			
		||||
				{
 | 
			
		||||
				ASN1_INTEGER *crlnum;
 | 
			
		||||
				crlnum = X509_CRL_get_ext_d2i(x, NID_crl_number,
 | 
			
		||||
							      NULL, NULL);
 | 
			
		||||
				BIO_printf(bio_out,"crlNumber=");
 | 
			
		||||
				if (crlnum)
 | 
			
		||||
					{
 | 
			
		||||
					i2a_ASN1_INTEGER(bio_out, crlnum);
 | 
			
		||||
					ASN1_INTEGER_free(crlnum);
 | 
			
		||||
					}
 | 
			
		||||
				else
 | 
			
		||||
					BIO_puts(bio_out, "<NONE>");
 | 
			
		||||
				BIO_printf(bio_out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
			if (hash == i)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out,"%08lx\n",
 | 
			
		||||
					X509_NAME_hash(X509_CRL_get_issuer(x)));
 | 
			
		||||
				}
 | 
			
		||||
			if (lastupdate == i)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out,"lastUpdate=");
 | 
			
		||||
				ASN1_TIME_print(bio_out,
 | 
			
		||||
						X509_CRL_get_lastUpdate(x));
 | 
			
		||||
				BIO_printf(bio_out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
			if (nextupdate == i)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out,"nextUpdate=");
 | 
			
		||||
				if (X509_CRL_get_nextUpdate(x)) 
 | 
			
		||||
					ASN1_TIME_print(bio_out,
 | 
			
		||||
						X509_CRL_get_nextUpdate(x));
 | 
			
		||||
				else
 | 
			
		||||
					BIO_printf(bio_out,"NONE");
 | 
			
		||||
				BIO_printf(bio_out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
			if (fingerprint == i)
 | 
			
		||||
				{
 | 
			
		||||
				int j;
 | 
			
		||||
				unsigned int n;
 | 
			
		||||
				unsigned char md[EVP_MAX_MD_SIZE];
 | 
			
		||||
        i = X509_STORE_get_by_subject(&ctx, X509_LU_X509,
 | 
			
		||||
                                      X509_CRL_get_issuer(x), &xobj);
 | 
			
		||||
        if (i <= 0) {
 | 
			
		||||
            BIO_printf(bio_err, "Error getting CRL issuer certificate\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        pkey = X509_get_pubkey(xobj.data.x509);
 | 
			
		||||
        X509_OBJECT_free_contents(&xobj);
 | 
			
		||||
        if (!pkey) {
 | 
			
		||||
            BIO_printf(bio_err, "Error getting CRL issuer public key\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        i = X509_CRL_verify(x, pkey);
 | 
			
		||||
        EVP_PKEY_free(pkey);
 | 
			
		||||
        if (i < 0)
 | 
			
		||||
            goto end;
 | 
			
		||||
        if (i == 0)
 | 
			
		||||
            BIO_printf(bio_err, "verify failure\n");
 | 
			
		||||
        else
 | 
			
		||||
            BIO_printf(bio_err, "verify OK\n");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
				if (!X509_CRL_digest(x,digest,md,&n))
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,"out of memory\n");
 | 
			
		||||
					goto end;
 | 
			
		||||
					}
 | 
			
		||||
				BIO_printf(bio_out,"%s Fingerprint=",
 | 
			
		||||
						OBJ_nid2sn(EVP_MD_type(digest)));
 | 
			
		||||
				for (j=0; j<(int)n; j++)
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_out,"%02X%c",md[j],
 | 
			
		||||
						(j+1 == (int)n)
 | 
			
		||||
						?'\n':':');
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (crldiff) {
 | 
			
		||||
        X509_CRL *newcrl, *delta;
 | 
			
		||||
        if (!keyfile) {
 | 
			
		||||
            BIO_puts(bio_err, "Missing CRL signing key\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        newcrl = load_crl(crldiff, informat);
 | 
			
		||||
        if (!newcrl)
 | 
			
		||||
            goto end;
 | 
			
		||||
        pkey = load_key(bio_err, keyfile, keyformat, 0, NULL, NULL,
 | 
			
		||||
                        "CRL signing key");
 | 
			
		||||
        if (!pkey) {
 | 
			
		||||
            X509_CRL_free(newcrl);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        delta = X509_CRL_diff(x, newcrl, pkey, digest, 0);
 | 
			
		||||
        X509_CRL_free(newcrl);
 | 
			
		||||
        EVP_PKEY_free(pkey);
 | 
			
		||||
        if (delta) {
 | 
			
		||||
            X509_CRL_free(x);
 | 
			
		||||
            x = delta;
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_puts(bio_err, "Error creating delta CRL\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (num) {
 | 
			
		||||
        for (i = 1; i <= num; i++) {
 | 
			
		||||
            if (issuer == i) {
 | 
			
		||||
                print_name(bio_out, "issuer=", X509_CRL_get_issuer(x),
 | 
			
		||||
                           nmflag);
 | 
			
		||||
            }
 | 
			
		||||
            if (crlnumber == i) {
 | 
			
		||||
                ASN1_INTEGER *crlnum;
 | 
			
		||||
                crlnum = X509_CRL_get_ext_d2i(x, NID_crl_number, NULL, NULL);
 | 
			
		||||
                BIO_printf(bio_out, "crlNumber=");
 | 
			
		||||
                if (crlnum) {
 | 
			
		||||
                    i2a_ASN1_INTEGER(bio_out, crlnum);
 | 
			
		||||
                    ASN1_INTEGER_free(crlnum);
 | 
			
		||||
                } else
 | 
			
		||||
                    BIO_puts(bio_out, "<NONE>");
 | 
			
		||||
                BIO_printf(bio_out, "\n");
 | 
			
		||||
            }
 | 
			
		||||
            if (hash == i) {
 | 
			
		||||
                BIO_printf(bio_out, "%08lx\n",
 | 
			
		||||
                           X509_NAME_hash(X509_CRL_get_issuer(x)));
 | 
			
		||||
            }
 | 
			
		||||
#ifndef OPENSSL_NO_MD5
 | 
			
		||||
            if (hash_old == i) {
 | 
			
		||||
                BIO_printf(bio_out, "%08lx\n",
 | 
			
		||||
                           X509_NAME_hash_old(X509_CRL_get_issuer(x)));
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
            if (lastupdate == i) {
 | 
			
		||||
                BIO_printf(bio_out, "lastUpdate=");
 | 
			
		||||
                ASN1_TIME_print(bio_out, X509_CRL_get_lastUpdate(x));
 | 
			
		||||
                BIO_printf(bio_out, "\n");
 | 
			
		||||
            }
 | 
			
		||||
            if (nextupdate == i) {
 | 
			
		||||
                BIO_printf(bio_out, "nextUpdate=");
 | 
			
		||||
                if (X509_CRL_get_nextUpdate(x))
 | 
			
		||||
                    ASN1_TIME_print(bio_out, X509_CRL_get_nextUpdate(x));
 | 
			
		||||
                else
 | 
			
		||||
                    BIO_printf(bio_out, "NONE");
 | 
			
		||||
                BIO_printf(bio_out, "\n");
 | 
			
		||||
            }
 | 
			
		||||
            if (fingerprint == i) {
 | 
			
		||||
                int j;
 | 
			
		||||
                unsigned int n;
 | 
			
		||||
                unsigned char md[EVP_MAX_MD_SIZE];
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
                if (!X509_CRL_digest(x, digest, md, &n)) {
 | 
			
		||||
                    BIO_printf(bio_err, "out of memory\n");
 | 
			
		||||
                    goto end;
 | 
			
		||||
                }
 | 
			
		||||
                BIO_printf(bio_out, "%s Fingerprint=",
 | 
			
		||||
                           OBJ_nid2sn(EVP_MD_type(digest)));
 | 
			
		||||
                for (j = 0; j < (int)n; j++) {
 | 
			
		||||
                    BIO_printf(bio_out, "%02X%c", md[j], (j + 1 == (int)n)
 | 
			
		||||
                               ? '\n' : ':');
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if (out == NULL) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (text) X509_CRL_print(out, x);
 | 
			
		||||
    if (text)
 | 
			
		||||
        X509_CRL_print(out, x);
 | 
			
		||||
 | 
			
		||||
	if (noout) 
 | 
			
		||||
		{
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (noout) {
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
		i=(int)i2d_X509_CRL_bio(out,x);
 | 
			
		||||
	else if (outformat == FORMAT_PEM)
 | 
			
		||||
		i=PEM_write_bio_X509_CRL(out,x);
 | 
			
		||||
	else	
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (!i) { BIO_printf(bio_err,"unable to write CRL\n"); goto end; }
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	BIO_free_all(bio_out);
 | 
			
		||||
	bio_out=NULL;
 | 
			
		||||
	X509_CRL_free(x);
 | 
			
		||||
	if(store) {
 | 
			
		||||
		X509_STORE_CTX_cleanup(&ctx);
 | 
			
		||||
		X509_STORE_free(store);
 | 
			
		||||
	}
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static X509_CRL *load_crl(char *infile, int format)
 | 
			
		||||
	{
 | 
			
		||||
	X509_CRL *x=NULL;
 | 
			
		||||
	BIO *in=NULL;
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	if (in == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if 	(format == FORMAT_ASN1)
 | 
			
		||||
		x=d2i_X509_CRL_bio(in,NULL);
 | 
			
		||||
	else if (format == FORMAT_PEM)
 | 
			
		||||
		x=PEM_read_bio_X509_CRL(in,NULL,NULL,NULL);
 | 
			
		||||
	else	{
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified for input crl\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (x == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load CRL\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
end:
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	return(x);
 | 
			
		||||
	}
 | 
			
		||||
    if (badsig)
 | 
			
		||||
        x->signature->data[x->signature->length - 1] ^= 0x1;
 | 
			
		||||
 | 
			
		||||
    if (outformat == FORMAT_ASN1)
 | 
			
		||||
        i = (int)i2d_X509_CRL_bio(out, x);
 | 
			
		||||
    else if (outformat == FORMAT_PEM)
 | 
			
		||||
        i = PEM_write_bio_X509_CRL(out, x);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (!i) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to write CRL\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (ret != 0)
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    BIO_free_all(bio_out);
 | 
			
		||||
    bio_out = NULL;
 | 
			
		||||
    X509_CRL_free(x);
 | 
			
		||||
    if (store) {
 | 
			
		||||
        X509_STORE_CTX_cleanup(&ctx);
 | 
			
		||||
        X509_STORE_free(store);
 | 
			
		||||
    }
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										463
									
								
								apps/crl2p7.c
									
									
									
									
									
								
							
							
						
						
									
										463
									
								
								apps/crl2p7.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,16 +49,18 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* This was written by Gordon Chaffee <chaffee@plateau.cs.berkeley.edu>
 | 
			
		||||
 * and donated 'to the cause' along with lots and lots of other fixes to
 | 
			
		||||
 * the library. */
 | 
			
		||||
/*
 | 
			
		||||
 * This was written by Gordon Chaffee <chaffee@plateau.cs.berkeley.edu> and
 | 
			
		||||
 * donated 'to the cause' along with lots and lots of other fixes to the
 | 
			
		||||
 * library.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@@ -73,265 +75,260 @@
 | 
			
		||||
 | 
			
		||||
static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile);
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	crl2pkcs7_main
 | 
			
		||||
#define PROG    crl2pkcs7_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -out arg     - output file - default stdout
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int i,badops=0;
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat;
 | 
			
		||||
	char *infile,*outfile,*prog,*certfile;
 | 
			
		||||
	PKCS7 *p7 = NULL;
 | 
			
		||||
	PKCS7_SIGNED *p7s = NULL;
 | 
			
		||||
	X509_CRL *crl=NULL;
 | 
			
		||||
	STACK_OF(OPENSSL_STRING) *certflst=NULL;
 | 
			
		||||
	STACK_OF(X509_CRL) *crl_stack=NULL;
 | 
			
		||||
	STACK_OF(X509) *cert_stack=NULL;
 | 
			
		||||
	int ret=1,nocrl=0;
 | 
			
		||||
{
 | 
			
		||||
    int i, badops = 0;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int informat, outformat;
 | 
			
		||||
    char *infile, *outfile, *prog, *certfile;
 | 
			
		||||
    PKCS7 *p7 = NULL;
 | 
			
		||||
    PKCS7_SIGNED *p7s = NULL;
 | 
			
		||||
    X509_CRL *crl = NULL;
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *certflst = NULL;
 | 
			
		||||
    STACK_OF(X509_CRL) *crl_stack = NULL;
 | 
			
		||||
    STACK_OF(X509) *cert_stack = NULL;
 | 
			
		||||
    int ret = 1, nocrl = 0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    infile = NULL;
 | 
			
		||||
    outfile = NULL;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-nocrl") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			nocrl=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-certfile") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			if(!certflst) certflst = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
			sk_OPENSSL_STRING_push(certflst,*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-nocrl") == 0) {
 | 
			
		||||
            nocrl = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-certfile") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!certflst)
 | 
			
		||||
                certflst = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
            if (!certflst)
 | 
			
		||||
                goto end;
 | 
			
		||||
            if (!sk_OPENSSL_STRING_push(certflst, *(++argv))) {
 | 
			
		||||
                sk_OPENSSL_STRING_free(certflst);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg    input format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg   output format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg        input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg       output file\n");
 | 
			
		||||
		BIO_printf(bio_err," -certfile arg  certificates file of chain to a trusted CA\n");
 | 
			
		||||
		BIO_printf(bio_err,"                (can be used more than once)\n");
 | 
			
		||||
		BIO_printf(bio_err," -nocrl         no crl to load, just certs from '-certfile'\n");
 | 
			
		||||
		ret = 1;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, " -inform arg    input format - DER or PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -outform arg   output format - DER or PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -in arg        input file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -out arg       output file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -certfile arg  certificates file of chain to a trusted CA\n");
 | 
			
		||||
        BIO_printf(bio_err, "                (can be used more than once)\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -nocrl         no crl to load, just certs from '-certfile'\n");
 | 
			
		||||
        ret = 1;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!nocrl)
 | 
			
		||||
		{
 | 
			
		||||
		if (infile == NULL)
 | 
			
		||||
			BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				perror(infile);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
    if (!nocrl) {
 | 
			
		||||
        if (infile == NULL)
 | 
			
		||||
            BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
        else {
 | 
			
		||||
            if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
                perror(infile);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if 	(informat == FORMAT_ASN1)
 | 
			
		||||
			crl=d2i_X509_CRL_bio(in,NULL);
 | 
			
		||||
		else if (informat == FORMAT_PEM)
 | 
			
		||||
			crl=PEM_read_bio_X509_CRL(in,NULL,NULL,NULL);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad input format specified for input crl\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (crl == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to load CRL\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if ((p7=PKCS7_new()) == NULL) goto end;
 | 
			
		||||
	if ((p7s=PKCS7_SIGNED_new()) == NULL) goto end;
 | 
			
		||||
	p7->type=OBJ_nid2obj(NID_pkcs7_signed);
 | 
			
		||||
	p7->d.sign=p7s;
 | 
			
		||||
	p7s->contents->type=OBJ_nid2obj(NID_pkcs7_data);
 | 
			
		||||
        if (informat == FORMAT_ASN1)
 | 
			
		||||
            crl = d2i_X509_CRL_bio(in, NULL);
 | 
			
		||||
        else if (informat == FORMAT_PEM)
 | 
			
		||||
            crl = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad input format specified for input crl\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (crl == NULL) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to load CRL\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!ASN1_INTEGER_set(p7s->version,1)) goto end;
 | 
			
		||||
	if ((crl_stack=sk_X509_CRL_new_null()) == NULL) goto end;
 | 
			
		||||
	p7s->crl=crl_stack;
 | 
			
		||||
	if (crl != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		sk_X509_CRL_push(crl_stack,crl);
 | 
			
		||||
		crl=NULL; /* now part of p7 for OPENSSL_freeing */
 | 
			
		||||
		}
 | 
			
		||||
    if ((p7 = PKCS7_new()) == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
    if ((p7s = PKCS7_SIGNED_new()) == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
    p7->type = OBJ_nid2obj(NID_pkcs7_signed);
 | 
			
		||||
    p7->d.sign = p7s;
 | 
			
		||||
    p7s->contents->type = OBJ_nid2obj(NID_pkcs7_data);
 | 
			
		||||
 | 
			
		||||
	if ((cert_stack=sk_X509_new_null()) == NULL) goto end;
 | 
			
		||||
	p7s->cert=cert_stack;
 | 
			
		||||
    if (!ASN1_INTEGER_set(p7s->version, 1))
 | 
			
		||||
        goto end;
 | 
			
		||||
    if ((crl_stack = sk_X509_CRL_new_null()) == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
    p7s->crl = crl_stack;
 | 
			
		||||
    if (crl != NULL) {
 | 
			
		||||
        sk_X509_CRL_push(crl_stack, crl);
 | 
			
		||||
        crl = NULL;             /* now part of p7 for OPENSSL_freeing */
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(certflst) for(i = 0; i < sk_OPENSSL_STRING_num(certflst); i++) {
 | 
			
		||||
		certfile = sk_OPENSSL_STRING_value(certflst, i);
 | 
			
		||||
		if (add_certs_from_file(cert_stack,certfile) < 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "error loading certificates\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
	}
 | 
			
		||||
    if ((cert_stack = sk_X509_new_null()) == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
    p7s->cert = cert_stack;
 | 
			
		||||
 | 
			
		||||
	sk_OPENSSL_STRING_free(certflst);
 | 
			
		||||
    if (certflst)
 | 
			
		||||
        for (i = 0; i < sk_OPENSSL_STRING_num(certflst); i++) {
 | 
			
		||||
            certfile = sk_OPENSSL_STRING_value(certflst, i);
 | 
			
		||||
            if (add_certs_from_file(cert_stack, certfile) < 0) {
 | 
			
		||||
                BIO_printf(bio_err, "error loading certificates\n");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
    sk_OPENSSL_STRING_free(certflst);
 | 
			
		||||
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
		i=i2d_PKCS7_bio(out,p7);
 | 
			
		||||
	else if (outformat == FORMAT_PEM)
 | 
			
		||||
		i=PEM_write_bio_PKCS7(out,p7);
 | 
			
		||||
	else	{
 | 
			
		||||
		BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (!i)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to write pkcs7 object\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (p7 != NULL) PKCS7_free(p7);
 | 
			
		||||
	if (crl != NULL) X509_CRL_free(crl);
 | 
			
		||||
    if (outformat == FORMAT_ASN1)
 | 
			
		||||
        i = i2d_PKCS7_bio(out, p7);
 | 
			
		||||
    else if (outformat == FORMAT_PEM)
 | 
			
		||||
        i = PEM_write_bio_PKCS7(out, p7);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (!i) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to write pkcs7 object\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (p7 != NULL)
 | 
			
		||||
        PKCS7_free(p7);
 | 
			
		||||
    if (crl != NULL)
 | 
			
		||||
        X509_CRL_free(crl);
 | 
			
		||||
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
/*-
 | 
			
		||||
 *----------------------------------------------------------------------
 | 
			
		||||
 * int add_certs_from_file
 | 
			
		||||
 *
 | 
			
		||||
 *	Read a list of certificates to be checked from a file.
 | 
			
		||||
 *      Read a list of certificates to be checked from a file.
 | 
			
		||||
 *
 | 
			
		||||
 * Results:
 | 
			
		||||
 *	number of certs added if successful, -1 if not.
 | 
			
		||||
 *      number of certs added if successful, -1 if not.
 | 
			
		||||
 *----------------------------------------------------------------------
 | 
			
		||||
 */
 | 
			
		||||
static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile)
 | 
			
		||||
	{
 | 
			
		||||
	BIO *in=NULL;
 | 
			
		||||
	int count=0;
 | 
			
		||||
	int ret= -1;
 | 
			
		||||
	STACK_OF(X509_INFO) *sk=NULL;
 | 
			
		||||
	X509_INFO *xi;
 | 
			
		||||
{
 | 
			
		||||
    BIO *in = NULL;
 | 
			
		||||
    int count = 0;
 | 
			
		||||
    int ret = -1;
 | 
			
		||||
    STACK_OF(X509_INFO) *sk = NULL;
 | 
			
		||||
    X509_INFO *xi;
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (BIO_read_filename(in,certfile) <= 0))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"error opening the file, %s\n",certfile);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (BIO_read_filename(in, certfile) <= 0)) {
 | 
			
		||||
        BIO_printf(bio_err, "error opening the file, %s\n", certfile);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	/* This loads from a file, a stack of x509/crl/pkey sets */
 | 
			
		||||
	sk=PEM_X509_INFO_read_bio(in,NULL,NULL,NULL);
 | 
			
		||||
	if (sk == NULL) {
 | 
			
		||||
		BIO_printf(bio_err,"error reading the file, %s\n",certfile);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    /* This loads from a file, a stack of x509/crl/pkey sets */
 | 
			
		||||
    sk = PEM_X509_INFO_read_bio(in, NULL, NULL, NULL);
 | 
			
		||||
    if (sk == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "error reading the file, %s\n", certfile);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	/* scan over it and pull out the CRL's */
 | 
			
		||||
	while (sk_X509_INFO_num(sk))
 | 
			
		||||
		{
 | 
			
		||||
		xi=sk_X509_INFO_shift(sk);
 | 
			
		||||
		if (xi->x509 != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			sk_X509_push(stack,xi->x509);
 | 
			
		||||
			xi->x509=NULL;
 | 
			
		||||
			count++;
 | 
			
		||||
			}
 | 
			
		||||
		X509_INFO_free(xi);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ret=count;
 | 
			
		||||
end:
 | 
			
		||||
 	/* never need to OPENSSL_free x */
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (sk != NULL) sk_X509_INFO_free(sk);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
    /* scan over it and pull out the CRL's */
 | 
			
		||||
    while (sk_X509_INFO_num(sk)) {
 | 
			
		||||
        xi = sk_X509_INFO_shift(sk);
 | 
			
		||||
        if (xi->x509 != NULL) {
 | 
			
		||||
            sk_X509_push(stack, xi->x509);
 | 
			
		||||
            xi->x509 = NULL;
 | 
			
		||||
            count++;
 | 
			
		||||
        }
 | 
			
		||||
        X509_INFO_free(xi);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ret = count;
 | 
			
		||||
 end:
 | 
			
		||||
    /* never need to OPENSSL_free x */
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (sk != NULL)
 | 
			
		||||
        sk_X509_INFO_free(sk);
 | 
			
		||||
    return (ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1032
									
								
								apps/dgst.c
									
									
									
									
									
								
							
							
						
						
									
										1032
									
								
								apps/dgst.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										518
									
								
								apps/dh.c
									
									
									
									
									
								
							
							
						
						
									
										518
									
								
								apps/dh.c
									
									
									
									
									
								
							@@ -6,21 +6,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -35,10 +35,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -50,35 +50,36 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>	/* for OPENSSL_NO_DH */
 | 
			
		||||
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dh.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <stdlib.h>
 | 
			
		||||
# include <time.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
# include <openssl/dh.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dh_main
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG    dh_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
 * -check	- check the parameters are ok
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -out arg     - output file - default stdout
 | 
			
		||||
 * -check       - check the parameters are ok
 | 
			
		||||
 * -noout
 | 
			
		||||
 * -text
 | 
			
		||||
 * -C
 | 
			
		||||
@@ -87,269 +88,250 @@
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	DH *dh=NULL;
 | 
			
		||||
	int i,badops=0,text=0;
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat,check=0,noout=0,C=0,ret=1;
 | 
			
		||||
	char *infile,*outfile,*prog;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine;
 | 
			
		||||
#endif
 | 
			
		||||
{
 | 
			
		||||
    DH *dh = NULL;
 | 
			
		||||
    int i, badops = 0, text = 0;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int informat, outformat, check = 0, noout = 0, C = 0, ret = 1;
 | 
			
		||||
    char *infile, *outfile, *prog;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    infile = NULL;
 | 
			
		||||
    outfile = NULL;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-check") == 0)
 | 
			
		||||
			check=1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*argv,"-C") == 0)
 | 
			
		||||
			C=1;
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-check") == 0)
 | 
			
		||||
            check = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-C") == 0)
 | 
			
		||||
            C = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - one of DER PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg  output format - one of DER PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg       input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg      output file\n");
 | 
			
		||||
		BIO_printf(bio_err," -check        check the DH parameters\n");
 | 
			
		||||
		BIO_printf(bio_err," -text         print a text form of the DH parameters\n");
 | 
			
		||||
		BIO_printf(bio_err," -C            Output C code\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout        no output\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," -engine e     use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, " -inform arg   input format - one of DER PEM\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -outform arg  output format - one of DER PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -in arg       input file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -out arg      output file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -check        check the DH parameters\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -text         print a text form of the DH parameters\n");
 | 
			
		||||
        BIO_printf(bio_err, " -C            Output C code\n");
 | 
			
		||||
        BIO_printf(bio_err, " -noout        no output\n");
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -engine e     use engine e, possibly a hardware device.\n");
 | 
			
		||||
# endif
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
            perror(infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if	(informat == FORMAT_ASN1)
 | 
			
		||||
		dh=d2i_DHparams_bio(in,NULL);
 | 
			
		||||
	else if (informat == FORMAT_PEM)
 | 
			
		||||
		dh=PEM_read_bio_DHparams(in,NULL,NULL,NULL);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (dh == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load DH parameters\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (informat == FORMAT_ASN1)
 | 
			
		||||
        dh = d2i_DHparams_bio(in, NULL);
 | 
			
		||||
    else if (informat == FORMAT_PEM)
 | 
			
		||||
        dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "bad input format specified\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (dh == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to load DH parameters\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
    if (text) {
 | 
			
		||||
        DHparams_print(out, dh);
 | 
			
		||||
# ifdef undef
 | 
			
		||||
        printf("p=");
 | 
			
		||||
        BN_print(stdout, dh->p);
 | 
			
		||||
        printf("\ng=");
 | 
			
		||||
        BN_print(stdout, dh->g);
 | 
			
		||||
        printf("\n");
 | 
			
		||||
        if (dh->length != 0)
 | 
			
		||||
            printf("recommended private length=%ld\n", dh->length);
 | 
			
		||||
# endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		DHparams_print(out,dh);
 | 
			
		||||
#ifdef undef
 | 
			
		||||
		printf("p=");
 | 
			
		||||
		BN_print(stdout,dh->p);
 | 
			
		||||
		printf("\ng=");
 | 
			
		||||
		BN_print(stdout,dh->g);
 | 
			
		||||
		printf("\n");
 | 
			
		||||
		if (dh->length != 0)
 | 
			
		||||
			printf("recommended private length=%ld\n",dh->length);
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if (check)
 | 
			
		||||
		{
 | 
			
		||||
		if (!DH_check(dh,&i))
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (i & DH_CHECK_P_NOT_PRIME)
 | 
			
		||||
			printf("p value is not prime\n");
 | 
			
		||||
		if (i & DH_CHECK_P_NOT_SAFE_PRIME)
 | 
			
		||||
			printf("p value is not a safe prime\n");
 | 
			
		||||
		if (i & DH_UNABLE_TO_CHECK_GENERATOR)
 | 
			
		||||
			printf("unable to check the generator value\n");
 | 
			
		||||
		if (i & DH_NOT_SUITABLE_GENERATOR)
 | 
			
		||||
			printf("the g value is not a generator\n");
 | 
			
		||||
		if (i == 0)
 | 
			
		||||
			printf("DH parameters appear to be ok.\n");
 | 
			
		||||
		}
 | 
			
		||||
	if (C)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char *data;
 | 
			
		||||
		int len,l,bits;
 | 
			
		||||
    if (check) {
 | 
			
		||||
        if (!DH_check(dh, &i)) {
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (i & DH_CHECK_P_NOT_PRIME)
 | 
			
		||||
            printf("p value is not prime\n");
 | 
			
		||||
        if (i & DH_CHECK_P_NOT_SAFE_PRIME)
 | 
			
		||||
            printf("p value is not a safe prime\n");
 | 
			
		||||
        if (i & DH_UNABLE_TO_CHECK_GENERATOR)
 | 
			
		||||
            printf("unable to check the generator value\n");
 | 
			
		||||
        if (i & DH_NOT_SUITABLE_GENERATOR)
 | 
			
		||||
            printf("the g value is not a generator\n");
 | 
			
		||||
        if (i == 0)
 | 
			
		||||
            printf("DH parameters appear to be ok.\n");
 | 
			
		||||
    }
 | 
			
		||||
    if (C) {
 | 
			
		||||
        unsigned char *data;
 | 
			
		||||
        int len, l, bits;
 | 
			
		||||
 | 
			
		||||
		len=BN_num_bytes(dh->p);
 | 
			
		||||
		bits=BN_num_bits(dh->p);
 | 
			
		||||
		data=(unsigned char *)OPENSSL_malloc(len);
 | 
			
		||||
		if (data == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		l=BN_bn2bin(dh->p,data);
 | 
			
		||||
		printf("static unsigned char dh%d_p[]={",bits);
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t};\n");
 | 
			
		||||
        len = BN_num_bytes(dh->p);
 | 
			
		||||
        bits = BN_num_bits(dh->p);
 | 
			
		||||
        data = (unsigned char *)OPENSSL_malloc(len);
 | 
			
		||||
        if (data == NULL) {
 | 
			
		||||
            perror("OPENSSL_malloc");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        l = BN_bn2bin(dh->p, data);
 | 
			
		||||
        printf("static unsigned char dh%d_p[]={", bits);
 | 
			
		||||
        for (i = 0; i < l; i++) {
 | 
			
		||||
            if ((i % 12) == 0)
 | 
			
		||||
                printf("\n\t");
 | 
			
		||||
            printf("0x%02X,", data[i]);
 | 
			
		||||
        }
 | 
			
		||||
        printf("\n\t};\n");
 | 
			
		||||
 | 
			
		||||
		l=BN_bn2bin(dh->g,data);
 | 
			
		||||
		printf("static unsigned char dh%d_g[]={",bits);
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t};\n\n");
 | 
			
		||||
        l = BN_bn2bin(dh->g, data);
 | 
			
		||||
        printf("static unsigned char dh%d_g[]={", bits);
 | 
			
		||||
        for (i = 0; i < l; i++) {
 | 
			
		||||
            if ((i % 12) == 0)
 | 
			
		||||
                printf("\n\t");
 | 
			
		||||
            printf("0x%02X,", data[i]);
 | 
			
		||||
        }
 | 
			
		||||
        printf("\n\t};\n\n");
 | 
			
		||||
 | 
			
		||||
		printf("DH *get_dh%d()\n\t{\n",bits);
 | 
			
		||||
		printf("\tDH *dh;\n\n");
 | 
			
		||||
		printf("\tif ((dh=DH_new()) == NULL) return(NULL);\n");
 | 
			
		||||
		printf("\tdh->p=BN_bin2bn(dh%d_p,sizeof(dh%d_p),NULL);\n",
 | 
			
		||||
			bits,bits);
 | 
			
		||||
		printf("\tdh->g=BN_bin2bn(dh%d_g,sizeof(dh%d_g),NULL);\n",
 | 
			
		||||
			bits,bits);
 | 
			
		||||
		printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
 | 
			
		||||
		printf("\t\treturn(NULL);\n");
 | 
			
		||||
		printf("\treturn(dh);\n\t}\n");
 | 
			
		||||
		OPENSSL_free(data);
 | 
			
		||||
		}
 | 
			
		||||
        printf("DH *get_dh%d()\n\t{\n", bits);
 | 
			
		||||
        printf("\tDH *dh;\n\n");
 | 
			
		||||
        printf("\tif ((dh=DH_new()) == NULL) return(NULL);\n");
 | 
			
		||||
        printf("\tdh->p=BN_bin2bn(dh%d_p,sizeof(dh%d_p),NULL);\n",
 | 
			
		||||
               bits, bits);
 | 
			
		||||
        printf("\tdh->g=BN_bin2bn(dh%d_g,sizeof(dh%d_g),NULL);\n",
 | 
			
		||||
               bits, bits);
 | 
			
		||||
        printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
 | 
			
		||||
        printf("\t\treturn(NULL);\n");
 | 
			
		||||
        printf("\treturn(dh);\n\t}\n");
 | 
			
		||||
        OPENSSL_free(data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if (!noout)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_DHparams_bio(out,dh);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i=PEM_write_bio_DHparams(out,dh);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to write DH parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dh != NULL) DH_free(dh);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_DH */
 | 
			
		||||
    if (!noout) {
 | 
			
		||||
        if (outformat == FORMAT_ASN1)
 | 
			
		||||
            i = i2d_DHparams_bio(out, dh);
 | 
			
		||||
        else if (outformat == FORMAT_PEM)
 | 
			
		||||
            i = PEM_write_bio_DHparams(out, dh);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (!i) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to write DH parameters\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (dh != NULL)
 | 
			
		||||
        DH_free(dh);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
#else                           /* !OPENSSL_NO_DH */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										803
									
								
								apps/dhparam.c
									
									
									
									
									
								
							
							
						
						
									
										803
									
								
								apps/dhparam.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -63,7 +63,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -109,452 +109,445 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>	/* for OPENSSL_NO_DH */
 | 
			
		||||
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dh.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <stdlib.h>
 | 
			
		||||
# include <time.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
# include <openssl/dh.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
#include <openssl/dsa.h>
 | 
			
		||||
#endif
 | 
			
		||||
# ifndef OPENSSL_NO_DSA
 | 
			
		||||
#  include <openssl/dsa.h>
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dhparam_main
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG    dhparam_main
 | 
			
		||||
 | 
			
		||||
#define DEFBITS	512
 | 
			
		||||
# define DEFBITS 2048
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -out arg     - output file - default stdout
 | 
			
		||||
 * -dsaparam  - read or generate DSA parameters, convert to DH
 | 
			
		||||
 * -check	- check the parameters are ok
 | 
			
		||||
 * -check       - check the parameters are ok
 | 
			
		||||
 * -noout
 | 
			
		||||
 * -text
 | 
			
		||||
 * -C
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
static int dh_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	DH *dh=NULL;
 | 
			
		||||
	int i,badops=0,text=0;
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
	int dsaparam=0;
 | 
			
		||||
#endif
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat,check=0,noout=0,C=0,ret=1;
 | 
			
		||||
	char *infile,*outfile,*prog;
 | 
			
		||||
	char *inrand=NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int num = 0, g = 0;
 | 
			
		||||
{
 | 
			
		||||
    DH *dh = NULL;
 | 
			
		||||
    int i, badops = 0, text = 0;
 | 
			
		||||
# ifndef OPENSSL_NO_DSA
 | 
			
		||||
    int dsaparam = 0;
 | 
			
		||||
# endif
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int informat, outformat, check = 0, noout = 0, C = 0, ret = 1;
 | 
			
		||||
    char *infile, *outfile, *prog;
 | 
			
		||||
    char *inrand = NULL;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    int num = 0, g = 0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    infile = NULL;
 | 
			
		||||
    outfile = NULL;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-check") == 0)
 | 
			
		||||
			check=1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
		else if (strcmp(*argv,"-dsaparam") == 0)
 | 
			
		||||
			dsaparam=1;
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-C") == 0)
 | 
			
		||||
			C=1;
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-2") == 0)
 | 
			
		||||
			g=2;
 | 
			
		||||
		else if (strcmp(*argv,"-5") == 0)
 | 
			
		||||
			g=5;
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (((sscanf(*argv,"%d",&num) == 0) || (num <= 0)))
 | 
			
		||||
			goto bad;
 | 
			
		||||
		argv++;
 | 
			
		||||
		argc--;
 | 
			
		||||
		}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-check") == 0)
 | 
			
		||||
            check = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
# ifndef OPENSSL_NO_DSA
 | 
			
		||||
        else if (strcmp(*argv, "-dsaparam") == 0)
 | 
			
		||||
            dsaparam = 1;
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-C") == 0)
 | 
			
		||||
            C = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-2") == 0)
 | 
			
		||||
            g = 2;
 | 
			
		||||
        else if (strcmp(*argv, "-5") == 0)
 | 
			
		||||
            g = 5;
 | 
			
		||||
        else if (strcmp(*argv, "-rand") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            inrand = *(++argv);
 | 
			
		||||
        } else if (((sscanf(*argv, "%d", &num) == 0) || (num <= 0)))
 | 
			
		||||
            goto bad;
 | 
			
		||||
        argv++;
 | 
			
		||||
        argc--;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] [numbits]\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - one of DER PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg  output format - one of DER PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg       input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg      output file\n");
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
		BIO_printf(bio_err," -dsaparam     read or generate DSA parameters, convert to DH\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -check        check the DH parameters\n");
 | 
			
		||||
		BIO_printf(bio_err," -text         print a text form of the DH parameters\n");
 | 
			
		||||
		BIO_printf(bio_err," -C            Output C code\n");
 | 
			
		||||
		BIO_printf(bio_err," -2            generate parameters using  2 as the generator value\n");
 | 
			
		||||
		BIO_printf(bio_err," -5            generate parameters using  5 as the generator value\n");
 | 
			
		||||
		BIO_printf(bio_err," numbits       number of bits in to generate (default 512)\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," -engine e     use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,"               - load the file (or the files in the directory) into\n");
 | 
			
		||||
		BIO_printf(bio_err,"               the random number generator\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout        no output\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "%s [options] [numbits]\n", prog);
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, " -inform arg   input format - one of DER PEM\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -outform arg  output format - one of DER PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -in arg       input file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -out arg      output file\n");
 | 
			
		||||
# ifndef OPENSSL_NO_DSA
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -dsaparam     read or generate DSA parameters, convert to DH\n");
 | 
			
		||||
# endif
 | 
			
		||||
        BIO_printf(bio_err, " -check        check the DH parameters\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -text         print a text form of the DH parameters\n");
 | 
			
		||||
        BIO_printf(bio_err, " -C            Output C code\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -2            generate parameters using  2 as the generator value\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -5            generate parameters using  5 as the generator value\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " numbits       number of bits in to generate (default 2048)\n");
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -engine e     use engine e, possibly a hardware device.\n");
 | 
			
		||||
# endif
 | 
			
		||||
        BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR,
 | 
			
		||||
                   LIST_SEPARATOR_CHAR);
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "               - load the file (or the files in the directory) into\n");
 | 
			
		||||
        BIO_printf(bio_err, "               the random number generator\n");
 | 
			
		||||
        BIO_printf(bio_err, " -noout        no output\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	if (g && !num)
 | 
			
		||||
		num = DEFBITS;
 | 
			
		||||
    if (g && !num)
 | 
			
		||||
        num = DEFBITS;
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
	if (dsaparam)
 | 
			
		||||
		{
 | 
			
		||||
		if (g)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "generator may not be chosen for DSA parameters\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
#endif
 | 
			
		||||
		{
 | 
			
		||||
		/* DH parameters */
 | 
			
		||||
		if (num && !g)
 | 
			
		||||
			g = 2;
 | 
			
		||||
		}
 | 
			
		||||
# ifndef OPENSSL_NO_DSA
 | 
			
		||||
    if (dsaparam) {
 | 
			
		||||
        if (g) {
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "generator may not be chosen for DSA parameters\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else
 | 
			
		||||
# endif
 | 
			
		||||
    {
 | 
			
		||||
        /* DH parameters */
 | 
			
		||||
        if (num && !g)
 | 
			
		||||
            g = 2;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(num) {
 | 
			
		||||
    if (num) {
 | 
			
		||||
 | 
			
		||||
		BN_GENCB cb;
 | 
			
		||||
		BN_GENCB_set(&cb, dh_cb, bio_err);
 | 
			
		||||
		if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
			}
 | 
			
		||||
		if (inrand != NULL)
 | 
			
		||||
			BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
				app_RAND_load_files(inrand));
 | 
			
		||||
        BN_GENCB *cb;
 | 
			
		||||
        cb = BN_GENCB_new();
 | 
			
		||||
        if (!cb) {
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
		if (dsaparam)
 | 
			
		||||
			{
 | 
			
		||||
			DSA *dsa = DSA_new();
 | 
			
		||||
			
 | 
			
		||||
			BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
 | 
			
		||||
			if(!dsa || !DSA_generate_parameters_ex(dsa, num,
 | 
			
		||||
						NULL, 0, NULL, NULL, &cb))
 | 
			
		||||
				{
 | 
			
		||||
				if(dsa) DSA_free(dsa);
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
        BN_GENCB_set(cb, dh_cb, bio_err);
 | 
			
		||||
        if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) {
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
        }
 | 
			
		||||
        if (inrand != NULL)
 | 
			
		||||
            BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
 | 
			
		||||
                       app_RAND_load_files(inrand));
 | 
			
		||||
 | 
			
		||||
			dh = DSA_dup_DH(dsa);
 | 
			
		||||
			DSA_free(dsa);
 | 
			
		||||
			if (dh == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
#endif
 | 
			
		||||
			{
 | 
			
		||||
			dh = DH_new();
 | 
			
		||||
			BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g);
 | 
			
		||||
			BIO_printf(bio_err,"This is going to take a long time\n");
 | 
			
		||||
			if(!dh || !DH_generate_parameters_ex(dh, num, g, &cb))
 | 
			
		||||
				{
 | 
			
		||||
				if(dh) DH_free(dh);
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
# ifndef OPENSSL_NO_DSA
 | 
			
		||||
        if (dsaparam) {
 | 
			
		||||
            DSA *dsa = DSA_new();
 | 
			
		||||
 | 
			
		||||
		app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
	} else {
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "Generating DSA parameters, %d bit long prime\n", num);
 | 
			
		||||
            if (!dsa
 | 
			
		||||
                || !DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL,
 | 
			
		||||
                                               cb)) {
 | 
			
		||||
                if (dsa)
 | 
			
		||||
                    DSA_free(dsa);
 | 
			
		||||
                BN_GENCB_free(cb);
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
		in=BIO_new(BIO_s_file());
 | 
			
		||||
		if (in == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (infile == NULL)
 | 
			
		||||
			BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				perror(infile);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
            dh = DSA_dup_DH(dsa);
 | 
			
		||||
            DSA_free(dsa);
 | 
			
		||||
            if (dh == NULL) {
 | 
			
		||||
                BN_GENCB_free(cb);
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        } else
 | 
			
		||||
# endif
 | 
			
		||||
        {
 | 
			
		||||
            dh = DH_new();
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "Generating DH parameters, %d bit long safe prime, generator %d\n",
 | 
			
		||||
                       num, g);
 | 
			
		||||
            BIO_printf(bio_err, "This is going to take a long time\n");
 | 
			
		||||
            if (!dh || !DH_generate_parameters_ex(dh, num, g, cb)) {
 | 
			
		||||
                BN_GENCB_free(cb);
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if	(informat != FORMAT_ASN1 && informat != FORMAT_PEM)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"bad input format specified\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
        BN_GENCB_free(cb);
 | 
			
		||||
        app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
    } else {
 | 
			
		||||
 | 
			
		||||
#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;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
        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 (text)
 | 
			
		||||
		{
 | 
			
		||||
		DHparams_print(out,dh);
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if (check)
 | 
			
		||||
		{
 | 
			
		||||
		if (!DH_check(dh,&i))
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (i & DH_CHECK_P_NOT_PRIME)
 | 
			
		||||
			printf("p value is not prime\n");
 | 
			
		||||
		if (i & DH_CHECK_P_NOT_SAFE_PRIME)
 | 
			
		||||
			printf("p value is not a safe prime\n");
 | 
			
		||||
		if (i & DH_UNABLE_TO_CHECK_GENERATOR)
 | 
			
		||||
			printf("unable to check the generator value\n");
 | 
			
		||||
		if (i & DH_NOT_SUITABLE_GENERATOR)
 | 
			
		||||
			printf("the g value is not a generator\n");
 | 
			
		||||
		if (i == 0)
 | 
			
		||||
			printf("DH parameters appear to be ok.\n");
 | 
			
		||||
		}
 | 
			
		||||
	if (C)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char *data;
 | 
			
		||||
		int len,l,bits;
 | 
			
		||||
            if (informat == FORMAT_ASN1)
 | 
			
		||||
                dsa = d2i_DSAparams_bio(in, NULL);
 | 
			
		||||
            else                /* informat == FORMAT_PEM */
 | 
			
		||||
                dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL);
 | 
			
		||||
 | 
			
		||||
		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);
 | 
			
		||||
            if (dsa == NULL) {
 | 
			
		||||
                BIO_printf(bio_err, "unable to load DSA parameters\n");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
		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");
 | 
			
		||||
            dh = DSA_dup_DH(dsa);
 | 
			
		||||
            DSA_free(dsa);
 | 
			
		||||
            if (dh == NULL) {
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        } else
 | 
			
		||||
# endif
 | 
			
		||||
        {
 | 
			
		||||
            if (informat == FORMAT_ASN1)
 | 
			
		||||
                dh = d2i_DHparams_bio(in, NULL);
 | 
			
		||||
            else                /* informat == FORMAT_PEM */
 | 
			
		||||
                dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL);
 | 
			
		||||
 | 
			
		||||
		l=BN_bn2bin(dh->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");
 | 
			
		||||
            if (dh == NULL) {
 | 
			
		||||
                BIO_printf(bio_err, "unable to load DH parameters\n");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		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);
 | 
			
		||||
		}
 | 
			
		||||
        /* 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 (!noout)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_DHparams_bio(out,dh);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i=PEM_write_bio_DHparams(out,dh);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to write DH parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dh != NULL) DH_free(dh);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    if (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) {
 | 
			
		||||
            if (dh->q)
 | 
			
		||||
                i = PEM_write_bio_DHxparams(out, dh);
 | 
			
		||||
            else
 | 
			
		||||
                i = PEM_write_bio_DHparams(out, dh);
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (!i) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to write DH parameters\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (dh != NULL)
 | 
			
		||||
        DH_free(dh);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* dh_cb is identical to dsa_cb in apps/dsaparam.c */
 | 
			
		||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
static int dh_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
{
 | 
			
		||||
    char c = '*';
 | 
			
		||||
 | 
			
		||||
	if (p == 0) c='.';
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write(cb->arg,&c,1);
 | 
			
		||||
	(void)BIO_flush(cb->arg);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
    if (p == 0)
 | 
			
		||||
        c = '.';
 | 
			
		||||
    if (p == 1)
 | 
			
		||||
        c = '+';
 | 
			
		||||
    if (p == 2)
 | 
			
		||||
        c = '*';
 | 
			
		||||
    if (p == 3)
 | 
			
		||||
        c = '\n';
 | 
			
		||||
    BIO_write(BN_GENCB_get_arg(cb), &c, 1);
 | 
			
		||||
    (void)BIO_flush(BN_GENCB_get_arg(cb));
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else /* !OPENSSL_NO_DH */
 | 
			
		||||
#else                           /* !OPENSSL_NO_DH */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										570
									
								
								apps/dsa.c
									
									
									
									
									
								
							
							
						
						
									
										570
									
								
								apps/dsa.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,328 +49,326 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>	/* for OPENSSL_NO_DSA */
 | 
			
		||||
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/dsa.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <stdlib.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include <time.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/dsa.h>
 | 
			
		||||
# include <openssl/evp.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dsa_main
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG    dsa_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (one of DER, NET or PEM)
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (one of DER, NET or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
 * -des		- encrypt output if PEM format with DES in cbc mode
 | 
			
		||||
 * -des3	- encrypt output if PEM format
 | 
			
		||||
 * -idea	- encrypt output if PEM format
 | 
			
		||||
 * -aes128	- encrypt output if PEM format
 | 
			
		||||
 * -aes192	- encrypt output if PEM format
 | 
			
		||||
 * -aes256	- encrypt output if PEM format
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -out arg     - output file - default stdout
 | 
			
		||||
 * -des         - encrypt output if PEM format with DES in cbc mode
 | 
			
		||||
 * -des3        - encrypt output if PEM format
 | 
			
		||||
 * -idea        - encrypt output if PEM format
 | 
			
		||||
 * -aes128      - encrypt output if PEM format
 | 
			
		||||
 * -aes192      - encrypt output if PEM format
 | 
			
		||||
 * -aes256      - encrypt output if PEM format
 | 
			
		||||
 * -camellia128 - encrypt output if PEM format
 | 
			
		||||
 * -camellia192 - encrypt output if PEM format
 | 
			
		||||
 * -camellia256 - encrypt output if PEM format
 | 
			
		||||
 * -seed        - encrypt output if PEM format
 | 
			
		||||
 * -text	- print a text version
 | 
			
		||||
 * -modulus	- print the DSA public key
 | 
			
		||||
 * -text        - print a text version
 | 
			
		||||
 * -modulus     - print the DSA public key
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	DSA *dsa=NULL;
 | 
			
		||||
	int i,badops=0;
 | 
			
		||||
	const EVP_CIPHER *enc=NULL;
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat,text=0,noout=0;
 | 
			
		||||
	int pubin = 0, pubout = 0;
 | 
			
		||||
	char *infile,*outfile,*prog;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine;
 | 
			
		||||
#endif
 | 
			
		||||
	char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
	char *passin = NULL, *passout = NULL;
 | 
			
		||||
	int modulus=0;
 | 
			
		||||
{
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    DSA *dsa = NULL;
 | 
			
		||||
    int i, badops = 0;
 | 
			
		||||
    const EVP_CIPHER *enc = NULL;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int informat, outformat, text = 0, noout = 0;
 | 
			
		||||
    int pubin = 0, pubout = 0;
 | 
			
		||||
    char *infile, *outfile, *prog;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine;
 | 
			
		||||
# endif
 | 
			
		||||
    char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
    char *passin = NULL, *passout = NULL;
 | 
			
		||||
    int modulus = 0;
 | 
			
		||||
 | 
			
		||||
	int pvk_encr = 2;
 | 
			
		||||
    int pvk_encr = 2;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    infile = NULL;
 | 
			
		||||
    outfile = NULL;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-pvk-strong") == 0)
 | 
			
		||||
			pvk_encr=2;
 | 
			
		||||
		else if (strcmp(*argv,"-pvk-weak") == 0)
 | 
			
		||||
			pvk_encr=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pvk-none") == 0)
 | 
			
		||||
			pvk_encr=0;
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*argv,"-modulus") == 0)
 | 
			
		||||
			modulus=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pubin") == 0)
 | 
			
		||||
			pubin=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pubout") == 0)
 | 
			
		||||
			pubout=1;
 | 
			
		||||
		else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passin") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargin = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passout") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargout = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-pvk-strong") == 0)
 | 
			
		||||
            pvk_encr = 2;
 | 
			
		||||
        else if (strcmp(*argv, "-pvk-weak") == 0)
 | 
			
		||||
            pvk_encr = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pvk-none") == 0)
 | 
			
		||||
            pvk_encr = 0;
 | 
			
		||||
        else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-modulus") == 0)
 | 
			
		||||
            modulus = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pubin") == 0)
 | 
			
		||||
            pubin = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pubout") == 0)
 | 
			
		||||
            pubout = 1;
 | 
			
		||||
        else if ((enc = EVP_get_cipherbyname(&(argv[0][1]))) == NULL) {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg     input format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg    output format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg         input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -passin arg     input file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg        output file\n");
 | 
			
		||||
		BIO_printf(bio_err," -passout arg    output file pass phrase source\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," -engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -des            encrypt PEM output with cbc des\n");
 | 
			
		||||
		BIO_printf(bio_err," -des3           encrypt PEM output with ede cbc des using 168 bit key\n");
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		BIO_printf(bio_err," -idea           encrypt PEM output with cbc idea\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
		BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		BIO_printf(bio_err," -seed           encrypt PEM output with cbc seed\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -text           print the key in text\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout          don't print key out\n");
 | 
			
		||||
		BIO_printf(bio_err," -modulus        print the DSA public value\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, " -inform arg     input format - DER or PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -outform arg    output format - DER or PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -in arg         input file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -passin arg     input file pass phrase source\n");
 | 
			
		||||
        BIO_printf(bio_err, " -out arg        output file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -passout arg    output file pass phrase source\n");
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
# endif
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -des            encrypt PEM output with cbc des\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -des3           encrypt PEM output with ede cbc des using 168 bit key\n");
 | 
			
		||||
# ifndef OPENSSL_NO_IDEA
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -idea           encrypt PEM output with cbc idea\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_AES
 | 
			
		||||
        BIO_printf(bio_err, " -aes128, -aes192, -aes256\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
        BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_SEED
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -seed           encrypt PEM output with cbc seed\n");
 | 
			
		||||
# endif
 | 
			
		||||
        BIO_printf(bio_err, " -text           print the key in text\n");
 | 
			
		||||
        BIO_printf(bio_err, " -noout          don't print key out\n");
 | 
			
		||||
        BIO_printf(bio_err, " -modulus        print the DSA public value\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
            perror(infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err,"read DSA key\n");
 | 
			
		||||
    BIO_printf(bio_err, "read DSA key\n");
 | 
			
		||||
 | 
			
		||||
		{
 | 
			
		||||
		EVP_PKEY	*pkey;
 | 
			
		||||
    {
 | 
			
		||||
        EVP_PKEY *pkey;
 | 
			
		||||
 | 
			
		||||
		if (pubin)
 | 
			
		||||
			pkey = load_pubkey(bio_err, infile, informat, 1,
 | 
			
		||||
				passin, e, "Public Key");
 | 
			
		||||
		else
 | 
			
		||||
			pkey = load_key(bio_err, infile, informat, 1,
 | 
			
		||||
				passin, e, "Private Key");
 | 
			
		||||
        if (pubin)
 | 
			
		||||
            pkey = load_pubkey(bio_err, infile, informat, 1,
 | 
			
		||||
                               passin, e, "Public Key");
 | 
			
		||||
        else
 | 
			
		||||
            pkey = load_key(bio_err, infile, informat, 1,
 | 
			
		||||
                            passin, e, "Private Key");
 | 
			
		||||
 | 
			
		||||
		if (pkey)
 | 
			
		||||
			{
 | 
			
		||||
			dsa = EVP_PKEY_get1_DSA(pkey);
 | 
			
		||||
			EVP_PKEY_free(pkey);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (dsa == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load Key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
        if (pkey) {
 | 
			
		||||
            dsa = EVP_PKEY_get1_DSA(pkey);
 | 
			
		||||
            EVP_PKEY_free(pkey);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (dsa == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to load Key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (text) 
 | 
			
		||||
		if (!DSA_print(out,dsa,0))
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    if (text)
 | 
			
		||||
        if (!DSA_print(out, dsa, 0)) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	if (modulus)
 | 
			
		||||
		{
 | 
			
		||||
		fprintf(stdout,"Public Key=");
 | 
			
		||||
		BN_print(out,dsa->pub_key);
 | 
			
		||||
		fprintf(stdout,"\n");
 | 
			
		||||
		}
 | 
			
		||||
    if (modulus) {
 | 
			
		||||
        fprintf(stdout, "Public Key=");
 | 
			
		||||
        BN_print(out, dsa->pub_key);
 | 
			
		||||
        fprintf(stdout, "\n");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (noout) goto end;
 | 
			
		||||
	BIO_printf(bio_err,"writing DSA key\n");
 | 
			
		||||
	if 	(outformat == FORMAT_ASN1) {
 | 
			
		||||
		if(pubin || pubout) i=i2d_DSA_PUBKEY_bio(out,dsa);
 | 
			
		||||
		else i=i2d_DSAPrivateKey_bio(out,dsa);
 | 
			
		||||
	} else if (outformat == FORMAT_PEM) {
 | 
			
		||||
		if(pubin || pubout)
 | 
			
		||||
			i=PEM_write_bio_DSA_PUBKEY(out,dsa);
 | 
			
		||||
		else i=PEM_write_bio_DSAPrivateKey(out,dsa,enc,
 | 
			
		||||
							NULL,0,NULL, passout);
 | 
			
		||||
#if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_RC4)
 | 
			
		||||
	} else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
 | 
			
		||||
		EVP_PKEY *pk;
 | 
			
		||||
		pk = EVP_PKEY_new();
 | 
			
		||||
		EVP_PKEY_set1_DSA(pk, dsa);
 | 
			
		||||
		if (outformat == FORMAT_PVK)
 | 
			
		||||
			i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
 | 
			
		||||
		else if (pubin || pubout)
 | 
			
		||||
			i = i2b_PublicKey_bio(out, pk);
 | 
			
		||||
		else
 | 
			
		||||
			i = i2b_PrivateKey_bio(out, pk);
 | 
			
		||||
		EVP_PKEY_free(pk);
 | 
			
		||||
#endif
 | 
			
		||||
	} else {
 | 
			
		||||
		BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (i <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to write private key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if(in != NULL) BIO_free(in);
 | 
			
		||||
	if(out != NULL) BIO_free_all(out);
 | 
			
		||||
	if(dsa != NULL) DSA_free(dsa);
 | 
			
		||||
	if(passin) OPENSSL_free(passin);
 | 
			
		||||
	if(passout) OPENSSL_free(passout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_DSA */
 | 
			
		||||
    if (noout)
 | 
			
		||||
        goto end;
 | 
			
		||||
    BIO_printf(bio_err, "writing DSA key\n");
 | 
			
		||||
    if (outformat == FORMAT_ASN1) {
 | 
			
		||||
        if (pubin || pubout)
 | 
			
		||||
            i = i2d_DSA_PUBKEY_bio(out, dsa);
 | 
			
		||||
        else
 | 
			
		||||
            i = i2d_DSAPrivateKey_bio(out, dsa);
 | 
			
		||||
    } else if (outformat == FORMAT_PEM) {
 | 
			
		||||
        if (pubin || pubout)
 | 
			
		||||
            i = PEM_write_bio_DSA_PUBKEY(out, dsa);
 | 
			
		||||
        else
 | 
			
		||||
            i = PEM_write_bio_DSAPrivateKey(out, dsa, enc,
 | 
			
		||||
                                            NULL, 0, NULL, passout);
 | 
			
		||||
# if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_RC4)
 | 
			
		||||
    } else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
 | 
			
		||||
        EVP_PKEY *pk;
 | 
			
		||||
        pk = EVP_PKEY_new();
 | 
			
		||||
        EVP_PKEY_set1_DSA(pk, dsa);
 | 
			
		||||
        if (outformat == FORMAT_PVK)
 | 
			
		||||
            i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
 | 
			
		||||
        else if (pubin || pubout)
 | 
			
		||||
            i = i2b_PublicKey_bio(out, pk);
 | 
			
		||||
        else
 | 
			
		||||
            i = i2b_PrivateKey_bio(out, pk);
 | 
			
		||||
        EVP_PKEY_free(pk);
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (i <= 0) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to write private key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    } else
 | 
			
		||||
        ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (dsa != NULL)
 | 
			
		||||
        DSA_free(dsa);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
    if (passout)
 | 
			
		||||
        OPENSSL_free(passout);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
#else                           /* !OPENSSL_NO_DSA */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										758
									
								
								apps/dsaparam.c
									
									
									
									
									
								
							
							
						
						
									
										758
									
								
								apps/dsaparam.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,41 +49,37 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>	/* for OPENSSL_NO_DSA */
 | 
			
		||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code */
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dsa.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
# include <assert.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <stdlib.h>
 | 
			
		||||
# include <time.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
# include <openssl/dsa.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	dsaparam_main
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG    dsaparam_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -out arg     - output file - default stdout
 | 
			
		||||
 * -noout
 | 
			
		||||
 * -text
 | 
			
		||||
 * -C
 | 
			
		||||
@@ -94,400 +90,384 @@
 | 
			
		||||
 *  #endif
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
# ifdef GENCB_TEST
 | 
			
		||||
 | 
			
		||||
static int stop_keygen_flag = 0;
 | 
			
		||||
 | 
			
		||||
static void timebomb_sigalarm(int foo)
 | 
			
		||||
	{
 | 
			
		||||
	stop_keygen_flag = 1;
 | 
			
		||||
	}
 | 
			
		||||
{
 | 
			
		||||
    stop_keygen_flag = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
static int dsa_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	DSA *dsa=NULL;
 | 
			
		||||
	int i,badops=0,text=0;
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat,noout=0,C=0,ret=1;
 | 
			
		||||
	char *infile,*outfile,*prog,*inrand=NULL;
 | 
			
		||||
	int numbits= -1,num,genkey=0;
 | 
			
		||||
	int need_rand=0;
 | 
			
		||||
	int non_fips_allow = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
	int timebomb=0;
 | 
			
		||||
#endif
 | 
			
		||||
{
 | 
			
		||||
    DSA *dsa = NULL;
 | 
			
		||||
    int i, badops = 0, text = 0;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int informat, outformat, noout = 0, C = 0, ret = 1;
 | 
			
		||||
    char *infile, *outfile, *prog, *inrand = NULL;
 | 
			
		||||
    int numbits = -1, num, genkey = 0;
 | 
			
		||||
    int need_rand = 0;
 | 
			
		||||
    int non_fips_allow = 0;
 | 
			
		||||
    BN_GENCB *cb = NULL;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
# ifdef GENCB_TEST
 | 
			
		||||
    int timebomb = 0;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    infile = NULL;
 | 
			
		||||
    outfile = NULL;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if(strcmp(*argv, "-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine = *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
		else if(strcmp(*argv, "-timebomb") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			timebomb = atoi(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*argv,"-C") == 0)
 | 
			
		||||
			C=1;
 | 
			
		||||
		else if (strcmp(*argv,"-genkey") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			genkey=1;
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-non-fips-allow") == 0)
 | 
			
		||||
			non_fips_allow = 1;
 | 
			
		||||
		else if (sscanf(*argv,"%d",&num) == 1)
 | 
			
		||||
			{
 | 
			
		||||
			/* generate a key */
 | 
			
		||||
			numbits=num;
 | 
			
		||||
			need_rand=1;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
# ifdef GENCB_TEST
 | 
			
		||||
        else if (strcmp(*argv, "-timebomb") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            timebomb = atoi(*(++argv));
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-C") == 0)
 | 
			
		||||
            C = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-genkey") == 0) {
 | 
			
		||||
            genkey = 1;
 | 
			
		||||
            need_rand = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-rand") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            inrand = *(++argv);
 | 
			
		||||
            need_rand = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-non-fips-allow") == 0)
 | 
			
		||||
            non_fips_allow = 1;
 | 
			
		||||
        else if (sscanf(*argv, "%d", &num) == 1) {
 | 
			
		||||
            /* generate a key */
 | 
			
		||||
            numbits = num;
 | 
			
		||||
            need_rand = 1;
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] [bits] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg  output format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg       input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg      output file\n");
 | 
			
		||||
		BIO_printf(bio_err," -text         print as text\n");
 | 
			
		||||
		BIO_printf(bio_err," -C            Output C code\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout        no output\n");
 | 
			
		||||
		BIO_printf(bio_err," -genkey       generate a DSA key\n");
 | 
			
		||||
		BIO_printf(bio_err," -rand         files to use for random number input\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," -engine e     use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
		BIO_printf(bio_err," -timebomb n   interrupt keygen after <n> seconds\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," number        number of bits to use for generating private key\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "%s [options] [bits] <infile >outfile\n", prog);
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, " -inform arg   input format - DER or PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -outform arg  output format - DER or PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -in arg       input file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -out arg      output file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -text         print as text\n");
 | 
			
		||||
        BIO_printf(bio_err, " -C            Output C code\n");
 | 
			
		||||
        BIO_printf(bio_err, " -noout        no output\n");
 | 
			
		||||
        BIO_printf(bio_err, " -genkey       generate a DSA key\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -rand         files to use for random number input\n");
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -engine e     use engine e, possibly a hardware device.\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifdef GENCB_TEST
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -timebomb n   interrupt keygen after <n> seconds\n");
 | 
			
		||||
# endif
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " number        number of bits to use for generating private key\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
            perror(infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	if (need_rand)
 | 
			
		||||
		{
 | 
			
		||||
		app_RAND_load_file(NULL, bio_err, (inrand != NULL));
 | 
			
		||||
		if (inrand != NULL)
 | 
			
		||||
			BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
				app_RAND_load_files(inrand));
 | 
			
		||||
		}
 | 
			
		||||
    if (need_rand) {
 | 
			
		||||
        app_RAND_load_file(NULL, bio_err, (inrand != NULL));
 | 
			
		||||
        if (inrand != NULL)
 | 
			
		||||
            BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
 | 
			
		||||
                       app_RAND_load_files(inrand));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (numbits > 0)
 | 
			
		||||
		{
 | 
			
		||||
		BN_GENCB cb;
 | 
			
		||||
		BN_GENCB_set(&cb, dsa_cb, bio_err);
 | 
			
		||||
		assert(need_rand);
 | 
			
		||||
		dsa = DSA_new();
 | 
			
		||||
		if(!dsa)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"Error allocating DSA object\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (non_fips_allow)
 | 
			
		||||
			dsa->flags |= DSA_FLAG_NON_FIPS_ALLOW;
 | 
			
		||||
		BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
 | 
			
		||||
	        BIO_printf(bio_err,"This could take some time\n");
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
		if(timebomb > 0)
 | 
			
		||||
	{
 | 
			
		||||
		struct sigaction act;
 | 
			
		||||
		act.sa_handler = timebomb_sigalarm;
 | 
			
		||||
		act.sa_flags = 0;
 | 
			
		||||
		BIO_printf(bio_err,"(though I'll stop it if not done within %d secs)\n",
 | 
			
		||||
				timebomb);
 | 
			
		||||
		if(sigaction(SIGALRM, &act, NULL) != 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"Error, couldn't set SIGALRM handler\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		alarm(timebomb);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
	        if(!DSA_generate_parameters_ex(dsa,num,NULL,0,NULL,NULL, &cb))
 | 
			
		||||
			{
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
			if(stop_keygen_flag)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err,"DSA key generation time-stopped\n");
 | 
			
		||||
				/* This is an asked-for behaviour! */
 | 
			
		||||
				ret = 0;
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
#endif
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			BIO_printf(bio_err,"Error, DSA key generation failed\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else if	(informat == FORMAT_ASN1)
 | 
			
		||||
		dsa=d2i_DSAparams_bio(in,NULL);
 | 
			
		||||
	else if (informat == FORMAT_PEM)
 | 
			
		||||
		dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (dsa == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load DSA parameters\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (numbits > 0) {
 | 
			
		||||
        cb = BN_GENCB_new();
 | 
			
		||||
        if (!cb) {
 | 
			
		||||
            BIO_printf(bio_err, "Error allocating BN_GENCB object\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        BN_GENCB_set(cb, dsa_cb, bio_err);
 | 
			
		||||
        assert(need_rand);
 | 
			
		||||
        dsa = DSA_new();
 | 
			
		||||
        if (!dsa) {
 | 
			
		||||
            BIO_printf(bio_err, "Error allocating DSA object\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (non_fips_allow)
 | 
			
		||||
            dsa->flags |= DSA_FLAG_NON_FIPS_ALLOW;
 | 
			
		||||
        BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\n",
 | 
			
		||||
                   num);
 | 
			
		||||
        BIO_printf(bio_err, "This could take some time\n");
 | 
			
		||||
# ifdef GENCB_TEST
 | 
			
		||||
        if (timebomb > 0) {
 | 
			
		||||
            struct sigaction act;
 | 
			
		||||
            act.sa_handler = timebomb_sigalarm;
 | 
			
		||||
            act.sa_flags = 0;
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "(though I'll stop it if not done within %d secs)\n",
 | 
			
		||||
                       timebomb);
 | 
			
		||||
            if (sigaction(SIGALRM, &act, NULL) != 0) {
 | 
			
		||||
                BIO_printf(bio_err, "Error, couldn't set SIGALRM handler\n");
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
            alarm(timebomb);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        if (!DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL, cb)) {
 | 
			
		||||
# ifdef GENCB_TEST
 | 
			
		||||
            if (stop_keygen_flag) {
 | 
			
		||||
                BIO_printf(bio_err, "DSA key generation time-stopped\n");
 | 
			
		||||
                /* This is an asked-for behaviour! */
 | 
			
		||||
                ret = 0;
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
# endif
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            BIO_printf(bio_err, "Error, DSA key generation failed\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (informat == FORMAT_ASN1)
 | 
			
		||||
        dsa = d2i_DSAparams_bio(in, NULL);
 | 
			
		||||
    else if (informat == FORMAT_PEM)
 | 
			
		||||
        dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "bad input format specified\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (dsa == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to load DSA parameters\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		DSAparams_print(out,dsa);
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if (C)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char *data;
 | 
			
		||||
		int l,len,bits_p;
 | 
			
		||||
    if (text) {
 | 
			
		||||
        DSAparams_print(out, dsa);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		len=BN_num_bytes(dsa->p);
 | 
			
		||||
		bits_p=BN_num_bits(dsa->p);
 | 
			
		||||
		data=(unsigned char *)OPENSSL_malloc(len+20);
 | 
			
		||||
		if (data == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror("OPENSSL_malloc");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		l=BN_bn2bin(dsa->p,data);
 | 
			
		||||
		printf("static unsigned char dsa%d_p[]={",bits_p);
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t};\n");
 | 
			
		||||
    if (C) {
 | 
			
		||||
        unsigned char *data;
 | 
			
		||||
        int l, len, bits_p;
 | 
			
		||||
 | 
			
		||||
		l=BN_bn2bin(dsa->q,data);
 | 
			
		||||
		printf("static unsigned char dsa%d_q[]={",bits_p);
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t};\n");
 | 
			
		||||
        len = BN_num_bytes(dsa->p);
 | 
			
		||||
        bits_p = BN_num_bits(dsa->p);
 | 
			
		||||
        data = (unsigned char *)OPENSSL_malloc(len + 20);
 | 
			
		||||
        if (data == NULL) {
 | 
			
		||||
            perror("OPENSSL_malloc");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        l = BN_bn2bin(dsa->p, data);
 | 
			
		||||
        printf("static unsigned char dsa%d_p[]={", bits_p);
 | 
			
		||||
        for (i = 0; i < l; i++) {
 | 
			
		||||
            if ((i % 12) == 0)
 | 
			
		||||
                printf("\n\t");
 | 
			
		||||
            printf("0x%02X,", data[i]);
 | 
			
		||||
        }
 | 
			
		||||
        printf("\n\t};\n");
 | 
			
		||||
 | 
			
		||||
		l=BN_bn2bin(dsa->g,data);
 | 
			
		||||
		printf("static unsigned char dsa%d_g[]={",bits_p);
 | 
			
		||||
		for (i=0; i<l; i++)
 | 
			
		||||
			{
 | 
			
		||||
			if ((i%12) == 0) printf("\n\t");
 | 
			
		||||
			printf("0x%02X,",data[i]);
 | 
			
		||||
			}
 | 
			
		||||
		printf("\n\t};\n\n");
 | 
			
		||||
        l = BN_bn2bin(dsa->q, data);
 | 
			
		||||
        printf("static unsigned char dsa%d_q[]={", bits_p);
 | 
			
		||||
        for (i = 0; i < l; i++) {
 | 
			
		||||
            if ((i % 12) == 0)
 | 
			
		||||
                printf("\n\t");
 | 
			
		||||
            printf("0x%02X,", data[i]);
 | 
			
		||||
        }
 | 
			
		||||
        printf("\n\t};\n");
 | 
			
		||||
 | 
			
		||||
		printf("DSA *get_dsa%d()\n\t{\n",bits_p);
 | 
			
		||||
		printf("\tDSA *dsa;\n\n");
 | 
			
		||||
		printf("\tif ((dsa=DSA_new()) == NULL) return(NULL);\n");
 | 
			
		||||
		printf("\tdsa->p=BN_bin2bn(dsa%d_p,sizeof(dsa%d_p),NULL);\n",
 | 
			
		||||
			bits_p,bits_p);
 | 
			
		||||
		printf("\tdsa->q=BN_bin2bn(dsa%d_q,sizeof(dsa%d_q),NULL);\n",
 | 
			
		||||
			bits_p,bits_p);
 | 
			
		||||
		printf("\tdsa->g=BN_bin2bn(dsa%d_g,sizeof(dsa%d_g),NULL);\n",
 | 
			
		||||
			bits_p,bits_p);
 | 
			
		||||
		printf("\tif ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))\n");
 | 
			
		||||
		printf("\t\t{ DSA_free(dsa); return(NULL); }\n");
 | 
			
		||||
		printf("\treturn(dsa);\n\t}\n");
 | 
			
		||||
		}
 | 
			
		||||
        l = BN_bn2bin(dsa->g, data);
 | 
			
		||||
        printf("static unsigned char dsa%d_g[]={", bits_p);
 | 
			
		||||
        for (i = 0; i < l; i++) {
 | 
			
		||||
            if ((i % 12) == 0)
 | 
			
		||||
                printf("\n\t");
 | 
			
		||||
            printf("0x%02X,", data[i]);
 | 
			
		||||
        }
 | 
			
		||||
        printf("\n\t};\n\n");
 | 
			
		||||
 | 
			
		||||
        printf("DSA *get_dsa%d()\n\t{\n", bits_p);
 | 
			
		||||
        printf("\tDSA *dsa;\n\n");
 | 
			
		||||
        printf("\tif ((dsa=DSA_new()) == NULL) return(NULL);\n");
 | 
			
		||||
        printf("\tdsa->p=BN_bin2bn(dsa%d_p,sizeof(dsa%d_p),NULL);\n",
 | 
			
		||||
               bits_p, bits_p);
 | 
			
		||||
        printf("\tdsa->q=BN_bin2bn(dsa%d_q,sizeof(dsa%d_q),NULL);\n",
 | 
			
		||||
               bits_p, bits_p);
 | 
			
		||||
        printf("\tdsa->g=BN_bin2bn(dsa%d_g,sizeof(dsa%d_g),NULL);\n",
 | 
			
		||||
               bits_p, bits_p);
 | 
			
		||||
        printf
 | 
			
		||||
            ("\tif ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))\n");
 | 
			
		||||
        printf("\t\t{ DSA_free(dsa); return(NULL); }\n");
 | 
			
		||||
        printf("\treturn(dsa);\n\t}\n");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!noout)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_DSAparams_bio(out,dsa);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i=PEM_write_bio_DSAparams(out,dsa);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to write DSA parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (genkey)
 | 
			
		||||
		{
 | 
			
		||||
		DSA *dsakey;
 | 
			
		||||
    if (!noout) {
 | 
			
		||||
        if (outformat == FORMAT_ASN1)
 | 
			
		||||
            i = i2d_DSAparams_bio(out, dsa);
 | 
			
		||||
        else if (outformat == FORMAT_PEM)
 | 
			
		||||
            i = PEM_write_bio_DSAparams(out, dsa);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (!i) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to write DSA parameters\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (genkey) {
 | 
			
		||||
        DSA *dsakey;
 | 
			
		||||
 | 
			
		||||
		assert(need_rand);
 | 
			
		||||
		if ((dsakey=DSAparams_dup(dsa)) == NULL) goto end;
 | 
			
		||||
		if (non_fips_allow)
 | 
			
		||||
			dsakey->flags |= DSA_FLAG_NON_FIPS_ALLOW;
 | 
			
		||||
		if (!DSA_generate_key(dsakey))
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			DSA_free(dsakey);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_DSAPrivateKey_bio(out,dsakey);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i=PEM_write_bio_DSAPrivateKey(out,dsakey,NULL,NULL,0,NULL,NULL);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			DSA_free(dsakey);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		DSA_free(dsakey);
 | 
			
		||||
		}
 | 
			
		||||
	if (need_rand)
 | 
			
		||||
		app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dsa != NULL) DSA_free(dsa);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
        assert(need_rand);
 | 
			
		||||
        if ((dsakey = DSAparams_dup(dsa)) == NULL)
 | 
			
		||||
            goto end;
 | 
			
		||||
        if (non_fips_allow)
 | 
			
		||||
            dsakey->flags |= DSA_FLAG_NON_FIPS_ALLOW;
 | 
			
		||||
        if (!DSA_generate_key(dsakey)) {
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            DSA_free(dsakey);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (outformat == FORMAT_ASN1)
 | 
			
		||||
            i = i2d_DSAPrivateKey_bio(out, dsakey);
 | 
			
		||||
        else if (outformat == FORMAT_PEM)
 | 
			
		||||
            i = PEM_write_bio_DSAPrivateKey(out, dsakey, NULL, NULL, 0, NULL,
 | 
			
		||||
                                            NULL);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            DSA_free(dsakey);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        DSA_free(dsakey);
 | 
			
		||||
    }
 | 
			
		||||
    if (need_rand)
 | 
			
		||||
        app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (cb != NULL)
 | 
			
		||||
        BN_GENCB_free(cb);
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (dsa != NULL)
 | 
			
		||||
        DSA_free(dsa);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
static int dsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
{
 | 
			
		||||
    char c = '*';
 | 
			
		||||
 | 
			
		||||
	if (p == 0) c='.';
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write(cb->arg,&c,1);
 | 
			
		||||
	(void)BIO_flush(cb->arg);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef GENCB_TEST
 | 
			
		||||
	if(stop_keygen_flag)
 | 
			
		||||
		return 0;
 | 
			
		||||
#endif
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_DSA */
 | 
			
		||||
    if (p == 0)
 | 
			
		||||
        c = '.';
 | 
			
		||||
    if (p == 1)
 | 
			
		||||
        c = '+';
 | 
			
		||||
    if (p == 2)
 | 
			
		||||
        c = '*';
 | 
			
		||||
    if (p == 3)
 | 
			
		||||
        c = '\n';
 | 
			
		||||
    BIO_write(BN_GENCB_get_arg(cb), &c, 1);
 | 
			
		||||
    (void)BIO_flush(BN_GENCB_get_arg(cb));
 | 
			
		||||
# ifdef GENCB_TEST
 | 
			
		||||
    if (stop_keygen_flag)
 | 
			
		||||
        return 0;
 | 
			
		||||
# endif
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
#else                           /* !OPENSSL_NO_DSA */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										569
									
								
								apps/ec.c
									
									
									
									
									
								
							
							
						
						
									
										569
									
								
								apps/ec.c
									
									
									
									
									
								
							@@ -10,7 +10,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -58,19 +58,20 @@
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
#ifndef OPENSSL_NO_EC
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <stdlib.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/evp.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	ec_main
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG    ec_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg    - input format - default PEM (one of DER, NET or PEM)
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg    - input format - default PEM (one of DER, NET or PEM)
 | 
			
		||||
 * -outform arg   - output format - default PEM
 | 
			
		||||
 * -in arg        - input file - default stdin
 | 
			
		||||
 * -out arg       - output file - default stdout
 | 
			
		||||
@@ -85,322 +86,280 @@ int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	int 	ret = 1;
 | 
			
		||||
	EC_KEY 	*eckey = NULL;
 | 
			
		||||
	const EC_GROUP *group;
 | 
			
		||||
	int 	i, badops = 0;
 | 
			
		||||
	const EVP_CIPHER *enc = NULL;
 | 
			
		||||
	BIO 	*in = NULL, *out = NULL;
 | 
			
		||||
	int 	informat, outformat, text=0, noout=0;
 | 
			
		||||
	int  	pubin = 0, pubout = 0, param_out = 0;
 | 
			
		||||
	char 	*infile, *outfile, *prog, *engine;
 | 
			
		||||
	char 	*passargin = NULL, *passargout = NULL;
 | 
			
		||||
	char 	*passin = NULL, *passout = NULL;
 | 
			
		||||
	point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
 | 
			
		||||
	int	new_form = 0;
 | 
			
		||||
	int	asn1_flag = OPENSSL_EC_NAMED_CURVE;
 | 
			
		||||
	int 	new_asn1_flag = 0;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    EC_KEY *eckey = NULL;
 | 
			
		||||
    const EC_GROUP *group;
 | 
			
		||||
    int i, badops = 0;
 | 
			
		||||
    const EVP_CIPHER *enc = NULL;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int informat, outformat, text = 0, noout = 0;
 | 
			
		||||
    int pubin = 0, pubout = 0, param_out = 0;
 | 
			
		||||
    char *infile, *outfile, *prog, *engine;
 | 
			
		||||
    char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
    char *passin = NULL, *passout = NULL;
 | 
			
		||||
    point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
 | 
			
		||||
    int new_form = 0;
 | 
			
		||||
    int asn1_flag = OPENSSL_EC_NAMED_CURVE;
 | 
			
		||||
    int new_asn1_flag = 0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	engine = NULL;
 | 
			
		||||
	infile = NULL;
 | 
			
		||||
	outfile = NULL;
 | 
			
		||||
	informat = FORMAT_PEM;
 | 
			
		||||
	outformat = FORMAT_PEM;
 | 
			
		||||
    engine = NULL;
 | 
			
		||||
    infile = NULL;
 | 
			
		||||
    outfile = NULL;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog = argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if (strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
			noout = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
			text = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-conv_form") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
			new_form = 1;
 | 
			
		||||
			if (strcmp(*argv, "compressed") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_COMPRESSED;
 | 
			
		||||
			else if (strcmp(*argv, "uncompressed") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_UNCOMPRESSED;
 | 
			
		||||
			else if (strcmp(*argv, "hybrid") == 0)
 | 
			
		||||
				form = POINT_CONVERSION_HYBRID;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-param_enc") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			++argv;
 | 
			
		||||
			new_asn1_flag = 1;
 | 
			
		||||
			if (strcmp(*argv, "named_curve") == 0)
 | 
			
		||||
				asn1_flag = OPENSSL_EC_NAMED_CURVE;
 | 
			
		||||
			else if (strcmp(*argv, "explicit") == 0)
 | 
			
		||||
				asn1_flag = 0;
 | 
			
		||||
			else
 | 
			
		||||
				goto bad;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv, "-param_out") == 0)
 | 
			
		||||
			param_out = 1;
 | 
			
		||||
		else if (strcmp(*argv, "-pubin") == 0)
 | 
			
		||||
			pubin=1;
 | 
			
		||||
		else if (strcmp(*argv, "-pubout") == 0)
 | 
			
		||||
			pubout=1;
 | 
			
		||||
		else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passin") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargin = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passout") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargout = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-conv_form") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            ++argv;
 | 
			
		||||
            new_form = 1;
 | 
			
		||||
            if (strcmp(*argv, "compressed") == 0)
 | 
			
		||||
                form = POINT_CONVERSION_COMPRESSED;
 | 
			
		||||
            else if (strcmp(*argv, "uncompressed") == 0)
 | 
			
		||||
                form = POINT_CONVERSION_UNCOMPRESSED;
 | 
			
		||||
            else if (strcmp(*argv, "hybrid") == 0)
 | 
			
		||||
                form = POINT_CONVERSION_HYBRID;
 | 
			
		||||
            else
 | 
			
		||||
                goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-param_enc") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            ++argv;
 | 
			
		||||
            new_asn1_flag = 1;
 | 
			
		||||
            if (strcmp(*argv, "named_curve") == 0)
 | 
			
		||||
                asn1_flag = OPENSSL_EC_NAMED_CURVE;
 | 
			
		||||
            else if (strcmp(*argv, "explicit") == 0)
 | 
			
		||||
                asn1_flag = 0;
 | 
			
		||||
            else
 | 
			
		||||
                goto bad;
 | 
			
		||||
        } else if (strcmp(*argv, "-param_out") == 0)
 | 
			
		||||
            param_out = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pubin") == 0)
 | 
			
		||||
            pubin = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pubout") == 0)
 | 
			
		||||
            pubout = 1;
 | 
			
		||||
        else if ((enc = EVP_get_cipherbyname(&(argv[0][1]))) == NULL) {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
		BIO_printf(bio_err, " -inform arg     input format - "
 | 
			
		||||
				"DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err, " -outform arg    output format - "
 | 
			
		||||
				"DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err, " -in arg         input file\n");
 | 
			
		||||
		BIO_printf(bio_err, " -passin arg     input file pass "
 | 
			
		||||
				"phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err, " -out arg        output file\n");
 | 
			
		||||
		BIO_printf(bio_err, " -passout arg    output file pass "
 | 
			
		||||
				"phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err, " -engine e       use engine e, "
 | 
			
		||||
				"possibly a hardware device.\n");
 | 
			
		||||
		BIO_printf(bio_err, " -des            encrypt PEM output, "
 | 
			
		||||
				"instead of 'des' every other \n"
 | 
			
		||||
				"                 cipher "
 | 
			
		||||
				"supported by OpenSSL can be used\n");
 | 
			
		||||
		BIO_printf(bio_err, " -text           print the key\n");
 | 
			
		||||
		BIO_printf(bio_err, " -noout          don't print key out\n");
 | 
			
		||||
		BIO_printf(bio_err, " -param_out      print the elliptic "
 | 
			
		||||
				"curve parameters\n");
 | 
			
		||||
		BIO_printf(bio_err, " -conv_form arg  specifies the "
 | 
			
		||||
				"point conversion form \n");
 | 
			
		||||
		BIO_printf(bio_err, "                 possible values:"
 | 
			
		||||
				" compressed\n");
 | 
			
		||||
		BIO_printf(bio_err, "                                 "
 | 
			
		||||
				" uncompressed (default)\n");
 | 
			
		||||
		BIO_printf(bio_err, "                                  "
 | 
			
		||||
				" hybrid\n");
 | 
			
		||||
		BIO_printf(bio_err, " -param_enc arg  specifies the way"
 | 
			
		||||
				" the ec parameters are encoded\n");
 | 
			
		||||
		BIO_printf(bio_err, "                 in the asn1 der "
 | 
			
		||||
				"encoding\n");
 | 
			
		||||
		BIO_printf(bio_err, "                 possible values:"
 | 
			
		||||
				" named_curve (default)\n");
 | 
			
		||||
		BIO_printf(bio_err,"                                  "
 | 
			
		||||
				"explicit\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, " -inform arg     input format - "
 | 
			
		||||
                   "DER or PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -outform arg    output format - "
 | 
			
		||||
                   "DER or PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -in arg         input file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -passin arg     input file pass "
 | 
			
		||||
                   "phrase source\n");
 | 
			
		||||
        BIO_printf(bio_err, " -out arg        output file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -passout arg    output file pass "
 | 
			
		||||
                   "phrase source\n");
 | 
			
		||||
        BIO_printf(bio_err, " -engine e       use engine e, "
 | 
			
		||||
                   "possibly a hardware device.\n");
 | 
			
		||||
        BIO_printf(bio_err, " -des            encrypt PEM output, "
 | 
			
		||||
                   "instead of 'des' every other \n"
 | 
			
		||||
                   "                 cipher "
 | 
			
		||||
                   "supported by OpenSSL can be used\n");
 | 
			
		||||
        BIO_printf(bio_err, " -text           print the key\n");
 | 
			
		||||
        BIO_printf(bio_err, " -noout          don't print key out\n");
 | 
			
		||||
        BIO_printf(bio_err, " -param_out      print the elliptic "
 | 
			
		||||
                   "curve parameters\n");
 | 
			
		||||
        BIO_printf(bio_err, " -conv_form arg  specifies the "
 | 
			
		||||
                   "point conversion form \n");
 | 
			
		||||
        BIO_printf(bio_err, "                 possible values:"
 | 
			
		||||
                   " compressed\n");
 | 
			
		||||
        BIO_printf(bio_err, "                                 "
 | 
			
		||||
                   " uncompressed (default)\n");
 | 
			
		||||
        BIO_printf(bio_err, "                                  " " hybrid\n");
 | 
			
		||||
        BIO_printf(bio_err, " -param_enc arg  specifies the way"
 | 
			
		||||
                   " the ec parameters are encoded\n");
 | 
			
		||||
        BIO_printf(bio_err, "                 in the asn1 der " "encoding\n");
 | 
			
		||||
        BIO_printf(bio_err, "                 possible values:"
 | 
			
		||||
                   " named_curve (default)\n");
 | 
			
		||||
        BIO_printf(bio_err, "                                  "
 | 
			
		||||
                   "explicit\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) 
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	in = BIO_new(BIO_s_file());
 | 
			
		||||
	out = BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in, infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
            perror(infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err, "read EC key\n");
 | 
			
		||||
	if (informat == FORMAT_ASN1) 
 | 
			
		||||
		{
 | 
			
		||||
		if (pubin) 
 | 
			
		||||
			eckey = d2i_EC_PUBKEY_bio(in, NULL);
 | 
			
		||||
		else 
 | 
			
		||||
			eckey = d2i_ECPrivateKey_bio(in, NULL);
 | 
			
		||||
		} 
 | 
			
		||||
	else if (informat == FORMAT_PEM) 
 | 
			
		||||
		{
 | 
			
		||||
		if (pubin) 
 | 
			
		||||
			eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL, 
 | 
			
		||||
				NULL);
 | 
			
		||||
		else 
 | 
			
		||||
			eckey = PEM_read_bio_ECPrivateKey(in, NULL, NULL,
 | 
			
		||||
				passin);
 | 
			
		||||
		} 
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "bad input format specified for key\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (eckey == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load Key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    BIO_printf(bio_err, "read EC key\n");
 | 
			
		||||
    if (informat == FORMAT_ASN1) {
 | 
			
		||||
        if (pubin)
 | 
			
		||||
            eckey = d2i_EC_PUBKEY_bio(in, NULL);
 | 
			
		||||
        else
 | 
			
		||||
            eckey = d2i_ECPrivateKey_bio(in, NULL);
 | 
			
		||||
    } else if (informat == FORMAT_PEM) {
 | 
			
		||||
        if (pubin)
 | 
			
		||||
            eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL, NULL);
 | 
			
		||||
        else
 | 
			
		||||
            eckey = PEM_read_bio_ECPrivateKey(in, NULL, NULL, passin);
 | 
			
		||||
    } else {
 | 
			
		||||
        BIO_printf(bio_err, "bad input format specified for key\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (eckey == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to load Key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out, outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	group = EC_KEY_get0_group(eckey);
 | 
			
		||||
    group = EC_KEY_get0_group(eckey);
 | 
			
		||||
 | 
			
		||||
	if (new_form)
 | 
			
		||||
		EC_KEY_set_conv_form(eckey, form);
 | 
			
		||||
    if (new_form)
 | 
			
		||||
        EC_KEY_set_conv_form(eckey, form);
 | 
			
		||||
 | 
			
		||||
	if (new_asn1_flag)
 | 
			
		||||
		EC_KEY_set_asn1_flag(eckey, asn1_flag);
 | 
			
		||||
    if (new_asn1_flag)
 | 
			
		||||
        EC_KEY_set_asn1_flag(eckey, asn1_flag);
 | 
			
		||||
 | 
			
		||||
	if (text) 
 | 
			
		||||
		if (!EC_KEY_print(out, eckey, 0))
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    if (text)
 | 
			
		||||
        if (!EC_KEY_print(out, eckey, 0)) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	if (noout) 
 | 
			
		||||
		{
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (noout) {
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err, "writing EC key\n");
 | 
			
		||||
	if (outformat == FORMAT_ASN1) 
 | 
			
		||||
		{
 | 
			
		||||
		if (param_out)
 | 
			
		||||
			i = i2d_ECPKParameters_bio(out, group);
 | 
			
		||||
		else if (pubin || pubout) 
 | 
			
		||||
			i = i2d_EC_PUBKEY_bio(out, eckey);
 | 
			
		||||
		else 
 | 
			
		||||
			i = i2d_ECPrivateKey_bio(out, eckey);
 | 
			
		||||
		} 
 | 
			
		||||
	else if (outformat == FORMAT_PEM) 
 | 
			
		||||
		{
 | 
			
		||||
		if (param_out)
 | 
			
		||||
			i = PEM_write_bio_ECPKParameters(out, group);
 | 
			
		||||
		else if (pubin || pubout)
 | 
			
		||||
			i = PEM_write_bio_EC_PUBKEY(out, eckey);
 | 
			
		||||
		else 
 | 
			
		||||
			i = PEM_write_bio_ECPrivateKey(out, eckey, enc,
 | 
			
		||||
						NULL, 0, NULL, passout);
 | 
			
		||||
		} 
 | 
			
		||||
	else 
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "bad output format specified for "
 | 
			
		||||
			"outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    BIO_printf(bio_err, "writing EC key\n");
 | 
			
		||||
    if (outformat == FORMAT_ASN1) {
 | 
			
		||||
        if (param_out)
 | 
			
		||||
            i = i2d_ECPKParameters_bio(out, group);
 | 
			
		||||
        else if (pubin || pubout)
 | 
			
		||||
            i = i2d_EC_PUBKEY_bio(out, eckey);
 | 
			
		||||
        else
 | 
			
		||||
            i = i2d_ECPrivateKey_bio(out, eckey);
 | 
			
		||||
    } else if (outformat == FORMAT_PEM) {
 | 
			
		||||
        if (param_out)
 | 
			
		||||
            i = PEM_write_bio_ECPKParameters(out, group);
 | 
			
		||||
        else if (pubin || pubout)
 | 
			
		||||
            i = PEM_write_bio_EC_PUBKEY(out, eckey);
 | 
			
		||||
        else
 | 
			
		||||
            i = PEM_write_bio_ECPrivateKey(out, eckey, enc,
 | 
			
		||||
                                           NULL, 0, NULL, passout);
 | 
			
		||||
    } else {
 | 
			
		||||
        BIO_printf(bio_err, "bad output format specified for " "outfile\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!i)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "unable to write private key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (in)
 | 
			
		||||
		BIO_free(in);
 | 
			
		||||
	if (out)
 | 
			
		||||
		BIO_free_all(out);
 | 
			
		||||
	if (eckey)
 | 
			
		||||
		EC_KEY_free(eckey);
 | 
			
		||||
	if (passin)
 | 
			
		||||
		OPENSSL_free(passin);
 | 
			
		||||
	if (passout)
 | 
			
		||||
		OPENSSL_free(passout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
    if (!i) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to write private key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    } else
 | 
			
		||||
        ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (in)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (eckey)
 | 
			
		||||
        EC_KEY_free(eckey);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
    if (passout)
 | 
			
		||||
        OPENSSL_free(passout);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
#else /* !OPENSSL_NO_EC */
 | 
			
		||||
#else                           /* !OPENSSL_NO_EC */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1085
									
								
								apps/ecparam.c
									
									
									
									
									
								
							
							
						
						
									
										1085
									
								
								apps/ecparam.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1148
									
								
								apps/enc.c
									
									
									
									
									
								
							
							
						
						
									
										1148
									
								
								apps/enc.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										847
									
								
								apps/engine.c
									
									
									
									
									
								
							
							
						
						
									
										847
									
								
								apps/engine.c
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
/* apps/engine.c -*- mode: C; c-file-style: "eay" -*- */
 | 
			
		||||
/* Written by Richard Levitte <richard@levitte.org> for the OpenSSL
 | 
			
		||||
 * project 2000.
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Richard Levitte <richard@levitte.org> for the OpenSSL project
 | 
			
		||||
 * 2000.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2000 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -10,7 +11,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -56,494 +57,458 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#ifdef OPENSSL_NO_STDIO
 | 
			
		||||
#define APPS_WIN16
 | 
			
		||||
#endif
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#include <openssl/engine.h>
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
# include <openssl/engine.h>
 | 
			
		||||
# include <openssl/ssl.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	engine_main
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG    engine_main
 | 
			
		||||
 | 
			
		||||
static const char *engine_usage[]={
 | 
			
		||||
"usage: engine opts [engine ...]\n",
 | 
			
		||||
" -v[v[v[v]]] - verbose mode, for each engine, list its 'control commands'\n",
 | 
			
		||||
"               -vv will additionally display each command's description\n",
 | 
			
		||||
"               -vvv will also add the input flags for each command\n",
 | 
			
		||||
"               -vvvv will also show internal input flags\n",
 | 
			
		||||
" -c          - for each engine, also list the capabilities\n",
 | 
			
		||||
" -t[t]       - for each engine, check that they are really available\n",
 | 
			
		||||
"               -tt will display error trace for unavailable engines\n",
 | 
			
		||||
" -pre <cmd>  - runs command 'cmd' against the ENGINE before any attempts\n",
 | 
			
		||||
"               to load it (if -t is used)\n",
 | 
			
		||||
" -post <cmd> - runs command 'cmd' against the ENGINE after loading it\n",
 | 
			
		||||
"               (only used if -t is also provided)\n",
 | 
			
		||||
" NB: -pre and -post will be applied to all ENGINEs supplied on the command\n",
 | 
			
		||||
" line, or all supported ENGINEs if none are specified.\n",
 | 
			
		||||
" Eg. '-pre \"SO_PATH:/lib/libdriver.so\"' calls command \"SO_PATH\" with\n",
 | 
			
		||||
" argument \"/lib/libdriver.so\".\n",
 | 
			
		||||
NULL
 | 
			
		||||
static const char *engine_usage[] = {
 | 
			
		||||
    "usage: engine opts [engine ...]\n",
 | 
			
		||||
    " -v[v[v[v]]] - verbose mode, for each engine, list its 'control commands'\n",
 | 
			
		||||
    "               -vv will additionally display each command's description\n",
 | 
			
		||||
    "               -vvv will also add the input flags for each command\n",
 | 
			
		||||
    "               -vvvv will also show internal input flags\n",
 | 
			
		||||
    " -c          - for each engine, also list the capabilities\n",
 | 
			
		||||
    " -t[t]       - for each engine, check that they are really available\n",
 | 
			
		||||
    "               -tt will display error trace for unavailable engines\n",
 | 
			
		||||
    " -pre <cmd>  - runs command 'cmd' against the ENGINE before any attempts\n",
 | 
			
		||||
    "               to load it (if -t is used)\n",
 | 
			
		||||
    " -post <cmd> - runs command 'cmd' against the ENGINE after loading it\n",
 | 
			
		||||
    "               (only used if -t is also provided)\n",
 | 
			
		||||
    " NB: -pre and -post will be applied to all ENGINEs supplied on the command\n",
 | 
			
		||||
    " line, or all supported ENGINEs if none are specified.\n",
 | 
			
		||||
    " Eg. '-pre \"SO_PATH:/lib/libdriver.so\"' calls command \"SO_PATH\" with\n",
 | 
			
		||||
    " argument \"/lib/libdriver.so\".\n",
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void identity(char *ptr)
 | 
			
		||||
	{
 | 
			
		||||
	return;
 | 
			
		||||
	}
 | 
			
		||||
{
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int append_buf(char **buf, const char *s, int *size, int step)
 | 
			
		||||
	{
 | 
			
		||||
	int l = strlen(s);
 | 
			
		||||
{
 | 
			
		||||
    int l = strlen(s);
 | 
			
		||||
 | 
			
		||||
	if (*buf == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		*size = step;
 | 
			
		||||
		*buf = OPENSSL_malloc(*size);
 | 
			
		||||
		if (*buf == NULL)
 | 
			
		||||
			return 0;
 | 
			
		||||
		**buf = '\0';
 | 
			
		||||
		}
 | 
			
		||||
    if (*buf == NULL) {
 | 
			
		||||
        *size = step;
 | 
			
		||||
        *buf = OPENSSL_malloc(*size);
 | 
			
		||||
        if (*buf == NULL)
 | 
			
		||||
            return 0;
 | 
			
		||||
        **buf = '\0';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (**buf != '\0')
 | 
			
		||||
		l += 2;		/* ", " */
 | 
			
		||||
    if (**buf != '\0')
 | 
			
		||||
        l += 2;                 /* ", " */
 | 
			
		||||
 | 
			
		||||
	if (strlen(*buf) + strlen(s) >= (unsigned int)*size)
 | 
			
		||||
		{
 | 
			
		||||
		*size += step;
 | 
			
		||||
		*buf = OPENSSL_realloc(*buf, *size);
 | 
			
		||||
		}
 | 
			
		||||
    if (strlen(*buf) + strlen(s) >= (unsigned int)*size) {
 | 
			
		||||
        *size += step;
 | 
			
		||||
        *buf = OPENSSL_realloc(*buf, *size);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (*buf == NULL)
 | 
			
		||||
		return 0;
 | 
			
		||||
    if (*buf == NULL)
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
	if (**buf != '\0')
 | 
			
		||||
		BUF_strlcat(*buf, ", ", *size);
 | 
			
		||||
	BUF_strlcat(*buf, s, *size);
 | 
			
		||||
    if (**buf != '\0')
 | 
			
		||||
        BUF_strlcat(*buf, ", ", *size);
 | 
			
		||||
    BUF_strlcat(*buf, s, *size);
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int util_flags(BIO *bio_out, unsigned int flags, const char *indent)
 | 
			
		||||
	{
 | 
			
		||||
	int started = 0, err = 0;
 | 
			
		||||
	/* Indent before displaying input flags */
 | 
			
		||||
	BIO_printf(bio_out, "%s%s(input flags): ", indent, indent);
 | 
			
		||||
	if(flags == 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_out, "<no flags>\n");
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
        /* If the object is internal, mark it in a way that shows instead of
 | 
			
		||||
         * having it part of all the other flags, even if it really is. */
 | 
			
		||||
	if(flags & ENGINE_CMD_FLAG_INTERNAL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_out, "[Internal] ");
 | 
			
		||||
		}
 | 
			
		||||
{
 | 
			
		||||
    int started = 0, err = 0;
 | 
			
		||||
    /* Indent before displaying input flags */
 | 
			
		||||
    BIO_printf(bio_out, "%s%s(input flags): ", indent, indent);
 | 
			
		||||
    if (flags == 0) {
 | 
			
		||||
        BIO_printf(bio_out, "<no flags>\n");
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
    /*
 | 
			
		||||
     * If the object is internal, mark it in a way that shows instead of
 | 
			
		||||
     * having it part of all the other flags, even if it really is.
 | 
			
		||||
     */
 | 
			
		||||
    if (flags & ENGINE_CMD_FLAG_INTERNAL) {
 | 
			
		||||
        BIO_printf(bio_out, "[Internal] ");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(flags & ENGINE_CMD_FLAG_NUMERIC)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_out, "NUMERIC");
 | 
			
		||||
		started = 1;
 | 
			
		||||
		}
 | 
			
		||||
	/* Now we check that no combinations of the mutually exclusive NUMERIC,
 | 
			
		||||
	 * STRING, and NO_INPUT flags have been used. Future flags that can be
 | 
			
		||||
	 * OR'd together with these would need to added after these to preserve
 | 
			
		||||
	 * the testing logic. */
 | 
			
		||||
	if(flags & ENGINE_CMD_FLAG_STRING)
 | 
			
		||||
		{
 | 
			
		||||
		if(started)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_out, "|");
 | 
			
		||||
			err = 1;
 | 
			
		||||
			}
 | 
			
		||||
		BIO_printf(bio_out, "STRING");
 | 
			
		||||
		started = 1;
 | 
			
		||||
		}
 | 
			
		||||
	if(flags & ENGINE_CMD_FLAG_NO_INPUT)
 | 
			
		||||
		{
 | 
			
		||||
		if(started)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_out, "|");
 | 
			
		||||
			err = 1;
 | 
			
		||||
			}
 | 
			
		||||
		BIO_printf(bio_out, "NO_INPUT");
 | 
			
		||||
		started = 1;
 | 
			
		||||
		}
 | 
			
		||||
	/* Check for unknown flags */
 | 
			
		||||
	flags = flags & ~ENGINE_CMD_FLAG_NUMERIC &
 | 
			
		||||
			~ENGINE_CMD_FLAG_STRING &
 | 
			
		||||
			~ENGINE_CMD_FLAG_NO_INPUT &
 | 
			
		||||
			~ENGINE_CMD_FLAG_INTERNAL;
 | 
			
		||||
	if(flags)
 | 
			
		||||
		{
 | 
			
		||||
		if(started) BIO_printf(bio_out, "|");
 | 
			
		||||
		BIO_printf(bio_out, "<0x%04X>", flags);
 | 
			
		||||
		}
 | 
			
		||||
	if(err)
 | 
			
		||||
		BIO_printf(bio_out, "  <illegal flags!>");
 | 
			
		||||
	BIO_printf(bio_out, "\n");
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
    if (flags & ENGINE_CMD_FLAG_NUMERIC) {
 | 
			
		||||
        BIO_printf(bio_out, "NUMERIC");
 | 
			
		||||
        started = 1;
 | 
			
		||||
    }
 | 
			
		||||
    /*
 | 
			
		||||
     * Now we check that no combinations of the mutually exclusive NUMERIC,
 | 
			
		||||
     * STRING, and NO_INPUT flags have been used. Future flags that can be
 | 
			
		||||
     * OR'd together with these would need to added after these to preserve
 | 
			
		||||
     * the testing logic.
 | 
			
		||||
     */
 | 
			
		||||
    if (flags & ENGINE_CMD_FLAG_STRING) {
 | 
			
		||||
        if (started) {
 | 
			
		||||
            BIO_printf(bio_out, "|");
 | 
			
		||||
            err = 1;
 | 
			
		||||
        }
 | 
			
		||||
        BIO_printf(bio_out, "STRING");
 | 
			
		||||
        started = 1;
 | 
			
		||||
    }
 | 
			
		||||
    if (flags & ENGINE_CMD_FLAG_NO_INPUT) {
 | 
			
		||||
        if (started) {
 | 
			
		||||
            BIO_printf(bio_out, "|");
 | 
			
		||||
            err = 1;
 | 
			
		||||
        }
 | 
			
		||||
        BIO_printf(bio_out, "NO_INPUT");
 | 
			
		||||
        started = 1;
 | 
			
		||||
    }
 | 
			
		||||
    /* Check for unknown flags */
 | 
			
		||||
    flags = flags & ~ENGINE_CMD_FLAG_NUMERIC &
 | 
			
		||||
        ~ENGINE_CMD_FLAG_STRING &
 | 
			
		||||
        ~ENGINE_CMD_FLAG_NO_INPUT & ~ENGINE_CMD_FLAG_INTERNAL;
 | 
			
		||||
    if (flags) {
 | 
			
		||||
        if (started)
 | 
			
		||||
            BIO_printf(bio_out, "|");
 | 
			
		||||
        BIO_printf(bio_out, "<0x%04X>", flags);
 | 
			
		||||
    }
 | 
			
		||||
    if (err)
 | 
			
		||||
        BIO_printf(bio_out, "  <illegal flags!>");
 | 
			
		||||
    BIO_printf(bio_out, "\n");
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int util_verbose(ENGINE *e, int verbose, BIO *bio_out, const char *indent)
 | 
			
		||||
	{
 | 
			
		||||
	static const int line_wrap = 78;
 | 
			
		||||
	int num;
 | 
			
		||||
	int ret = 0;
 | 
			
		||||
	char *name = NULL;
 | 
			
		||||
	char *desc = NULL;
 | 
			
		||||
	int flags;
 | 
			
		||||
	int xpos = 0;
 | 
			
		||||
	STACK_OF(OPENSSL_STRING) *cmds = NULL;
 | 
			
		||||
	if(!ENGINE_ctrl(e, ENGINE_CTRL_HAS_CTRL_FUNCTION, 0, NULL, NULL) ||
 | 
			
		||||
			((num = ENGINE_ctrl(e, ENGINE_CTRL_GET_FIRST_CMD_TYPE,
 | 
			
		||||
					0, NULL, NULL)) <= 0))
 | 
			
		||||
		{
 | 
			
		||||
#if 0
 | 
			
		||||
		BIO_printf(bio_out, "%s<no control commands>\n", indent);
 | 
			
		||||
#endif
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
static int util_verbose(ENGINE *e, int verbose, BIO *bio_out,
 | 
			
		||||
                        const char *indent)
 | 
			
		||||
{
 | 
			
		||||
    static const int line_wrap = 78;
 | 
			
		||||
    int num;
 | 
			
		||||
    int ret = 0;
 | 
			
		||||
    char *name = NULL;
 | 
			
		||||
    char *desc = NULL;
 | 
			
		||||
    int flags;
 | 
			
		||||
    int xpos = 0;
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *cmds = NULL;
 | 
			
		||||
    if (!ENGINE_ctrl(e, ENGINE_CTRL_HAS_CTRL_FUNCTION, 0, NULL, NULL) ||
 | 
			
		||||
        ((num = ENGINE_ctrl(e, ENGINE_CTRL_GET_FIRST_CMD_TYPE,
 | 
			
		||||
                            0, NULL, NULL)) <= 0)) {
 | 
			
		||||
# if 0
 | 
			
		||||
        BIO_printf(bio_out, "%s<no control commands>\n", indent);
 | 
			
		||||
# endif
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	cmds = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
    cmds = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
 | 
			
		||||
	if(!cmds)
 | 
			
		||||
		goto err;
 | 
			
		||||
	do {
 | 
			
		||||
		int len;
 | 
			
		||||
		/* Get the command input flags */
 | 
			
		||||
		if((flags = ENGINE_ctrl(e, ENGINE_CTRL_GET_CMD_FLAGS, num,
 | 
			
		||||
					NULL, NULL)) < 0)
 | 
			
		||||
			goto err;
 | 
			
		||||
                if (!(flags & ENGINE_CMD_FLAG_INTERNAL) || verbose >= 4)
 | 
			
		||||
                        {
 | 
			
		||||
                        /* Get the command name */
 | 
			
		||||
                        if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_LEN_FROM_CMD, num,
 | 
			
		||||
                                NULL, NULL)) <= 0)
 | 
			
		||||
                                goto err;
 | 
			
		||||
                        if((name = OPENSSL_malloc(len + 1)) == NULL)
 | 
			
		||||
                                goto err;
 | 
			
		||||
                        if(ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_FROM_CMD, num, name,
 | 
			
		||||
    if (!cmds)
 | 
			
		||||
        goto err;
 | 
			
		||||
    do {
 | 
			
		||||
        int len;
 | 
			
		||||
        /* Get the command input flags */
 | 
			
		||||
        if ((flags = ENGINE_ctrl(e, ENGINE_CTRL_GET_CMD_FLAGS, num,
 | 
			
		||||
                                 NULL, NULL)) < 0)
 | 
			
		||||
            goto err;
 | 
			
		||||
        if (!(flags & ENGINE_CMD_FLAG_INTERNAL) || verbose >= 4) {
 | 
			
		||||
            /* Get the command name */
 | 
			
		||||
            if ((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_LEN_FROM_CMD, num,
 | 
			
		||||
                                   NULL, NULL)) <= 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
            if ((name = OPENSSL_malloc(len + 1)) == NULL)
 | 
			
		||||
                goto err;
 | 
			
		||||
            if (ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_FROM_CMD, num, name,
 | 
			
		||||
                            NULL) <= 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
            /* Get the command description */
 | 
			
		||||
            if ((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_LEN_FROM_CMD, num,
 | 
			
		||||
                                   NULL, NULL)) < 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
            if (len > 0) {
 | 
			
		||||
                if ((desc = OPENSSL_malloc(len + 1)) == NULL)
 | 
			
		||||
                    goto err;
 | 
			
		||||
                if (ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_FROM_CMD, num, desc,
 | 
			
		||||
                                NULL) <= 0)
 | 
			
		||||
                                goto err;
 | 
			
		||||
                        /* Get the command description */
 | 
			
		||||
                        if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_LEN_FROM_CMD, num,
 | 
			
		||||
                                NULL, NULL)) < 0)
 | 
			
		||||
                                goto err;
 | 
			
		||||
                        if(len > 0)
 | 
			
		||||
                                {
 | 
			
		||||
                                if((desc = OPENSSL_malloc(len + 1)) == NULL)
 | 
			
		||||
                                        goto err;
 | 
			
		||||
                                if(ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_FROM_CMD, num, desc,
 | 
			
		||||
                                        NULL) <= 0)
 | 
			
		||||
                                        goto err;
 | 
			
		||||
                                }
 | 
			
		||||
                        /* Now decide on the output */
 | 
			
		||||
                        if(xpos == 0)
 | 
			
		||||
                                /* Do an indent */
 | 
			
		||||
                                xpos = BIO_puts(bio_out, indent);
 | 
			
		||||
                        else
 | 
			
		||||
                                /* Otherwise prepend a ", " */
 | 
			
		||||
                                xpos += BIO_printf(bio_out, ", ");
 | 
			
		||||
                        if(verbose == 1)
 | 
			
		||||
                                {
 | 
			
		||||
                                /* We're just listing names, comma-delimited */
 | 
			
		||||
                                if((xpos > (int)strlen(indent)) &&
 | 
			
		||||
					(xpos + (int)strlen(name) > line_wrap))
 | 
			
		||||
                                        {
 | 
			
		||||
                                        BIO_printf(bio_out, "\n");
 | 
			
		||||
                                        xpos = BIO_puts(bio_out, indent);
 | 
			
		||||
                                        }
 | 
			
		||||
                                xpos += BIO_printf(bio_out, "%s", name);
 | 
			
		||||
                                }
 | 
			
		||||
                        else
 | 
			
		||||
                                {
 | 
			
		||||
                                /* We're listing names plus descriptions */
 | 
			
		||||
                                BIO_printf(bio_out, "%s: %s\n", name,
 | 
			
		||||
                                        (desc == NULL) ? "<no description>" : desc);
 | 
			
		||||
                                /* ... and sometimes input flags */
 | 
			
		||||
                                if((verbose >= 3) && !util_flags(bio_out, flags,
 | 
			
		||||
                                        indent))
 | 
			
		||||
                                        goto err;
 | 
			
		||||
                                xpos = 0;
 | 
			
		||||
                                }
 | 
			
		||||
                        }
 | 
			
		||||
		OPENSSL_free(name); name = NULL;
 | 
			
		||||
		if(desc) { OPENSSL_free(desc); desc = NULL; }
 | 
			
		||||
		/* Move to the next command */
 | 
			
		||||
		num = ENGINE_ctrl(e, ENGINE_CTRL_GET_NEXT_CMD_TYPE,
 | 
			
		||||
					num, NULL, NULL);
 | 
			
		||||
		} while(num > 0);
 | 
			
		||||
	if(xpos > 0)
 | 
			
		||||
		BIO_printf(bio_out, "\n");
 | 
			
		||||
	ret = 1;
 | 
			
		||||
err:
 | 
			
		||||
	if(cmds) sk_OPENSSL_STRING_pop_free(cmds, identity);
 | 
			
		||||
	if(name) OPENSSL_free(name);
 | 
			
		||||
	if(desc) OPENSSL_free(desc);
 | 
			
		||||
	return ret;
 | 
			
		||||
	}
 | 
			
		||||
                    goto err;
 | 
			
		||||
            }
 | 
			
		||||
            /* Now decide on the output */
 | 
			
		||||
            if (xpos == 0)
 | 
			
		||||
                /* Do an indent */
 | 
			
		||||
                xpos = BIO_puts(bio_out, indent);
 | 
			
		||||
            else
 | 
			
		||||
                /* Otherwise prepend a ", " */
 | 
			
		||||
                xpos += BIO_printf(bio_out, ", ");
 | 
			
		||||
            if (verbose == 1) {
 | 
			
		||||
                /*
 | 
			
		||||
                 * We're just listing names, comma-delimited
 | 
			
		||||
                 */
 | 
			
		||||
                if ((xpos > (int)strlen(indent)) &&
 | 
			
		||||
                    (xpos + (int)strlen(name) > line_wrap)) {
 | 
			
		||||
                    BIO_printf(bio_out, "\n");
 | 
			
		||||
                    xpos = BIO_puts(bio_out, indent);
 | 
			
		||||
                }
 | 
			
		||||
                xpos += BIO_printf(bio_out, "%s", name);
 | 
			
		||||
            } else {
 | 
			
		||||
                /* We're listing names plus descriptions */
 | 
			
		||||
                BIO_printf(bio_out, "%s: %s\n", name,
 | 
			
		||||
                           (desc == NULL) ? "<no description>" : desc);
 | 
			
		||||
                /* ... and sometimes input flags */
 | 
			
		||||
                if ((verbose >= 3) && !util_flags(bio_out, flags, indent))
 | 
			
		||||
                    goto err;
 | 
			
		||||
                xpos = 0;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        OPENSSL_free(name);
 | 
			
		||||
        name = NULL;
 | 
			
		||||
        if (desc) {
 | 
			
		||||
            OPENSSL_free(desc);
 | 
			
		||||
            desc = NULL;
 | 
			
		||||
        }
 | 
			
		||||
        /* Move to the next command */
 | 
			
		||||
        num = ENGINE_ctrl(e, ENGINE_CTRL_GET_NEXT_CMD_TYPE, num, NULL, NULL);
 | 
			
		||||
    } while (num > 0);
 | 
			
		||||
    if (xpos > 0)
 | 
			
		||||
        BIO_printf(bio_out, "\n");
 | 
			
		||||
    ret = 1;
 | 
			
		||||
 err:
 | 
			
		||||
    if (cmds)
 | 
			
		||||
        sk_OPENSSL_STRING_pop_free(cmds, identity);
 | 
			
		||||
    if (name)
 | 
			
		||||
        OPENSSL_free(name);
 | 
			
		||||
    if (desc)
 | 
			
		||||
        OPENSSL_free(desc);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void util_do_cmds(ENGINE *e, STACK_OF(OPENSSL_STRING) *cmds,
 | 
			
		||||
			BIO *bio_out, const char *indent)
 | 
			
		||||
	{
 | 
			
		||||
	int loop, res, num = sk_OPENSSL_STRING_num(cmds);
 | 
			
		||||
                         BIO *bio_out, const char *indent)
 | 
			
		||||
{
 | 
			
		||||
    int loop, res, num = sk_OPENSSL_STRING_num(cmds);
 | 
			
		||||
 | 
			
		||||
	if(num < 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_out, "[Error]: internal stack error\n");
 | 
			
		||||
		return;
 | 
			
		||||
		}
 | 
			
		||||
	for(loop = 0; loop < num; loop++)
 | 
			
		||||
		{
 | 
			
		||||
		char buf[256];
 | 
			
		||||
		const char *cmd, *arg;
 | 
			
		||||
		cmd = sk_OPENSSL_STRING_value(cmds, loop);
 | 
			
		||||
		res = 1; /* assume success */
 | 
			
		||||
		/* Check if this command has no ":arg" */
 | 
			
		||||
		if((arg = strstr(cmd, ":")) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			if(!ENGINE_ctrl_cmd_string(e, cmd, NULL, 0))
 | 
			
		||||
				res = 0;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if((int)(arg - cmd) > 254)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out,"[Error]: command name too long\n");
 | 
			
		||||
				return;
 | 
			
		||||
				}
 | 
			
		||||
			memcpy(buf, cmd, (int)(arg - cmd));
 | 
			
		||||
			buf[arg-cmd] = '\0';
 | 
			
		||||
			arg++; /* Move past the ":" */
 | 
			
		||||
			/* Call the command with the argument */
 | 
			
		||||
			if(!ENGINE_ctrl_cmd_string(e, buf, arg, 0))
 | 
			
		||||
				res = 0;
 | 
			
		||||
			}
 | 
			
		||||
		if(res)
 | 
			
		||||
			BIO_printf(bio_out, "[Success]: %s\n", cmd);
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_out, "[Failure]: %s\n", cmd);
 | 
			
		||||
			ERR_print_errors(bio_out);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
    if (num < 0) {
 | 
			
		||||
        BIO_printf(bio_out, "[Error]: internal stack error\n");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    for (loop = 0; loop < num; loop++) {
 | 
			
		||||
        char buf[256];
 | 
			
		||||
        const char *cmd, *arg;
 | 
			
		||||
        cmd = sk_OPENSSL_STRING_value(cmds, loop);
 | 
			
		||||
        res = 1;                /* assume success */
 | 
			
		||||
        /* Check if this command has no ":arg" */
 | 
			
		||||
        if ((arg = strstr(cmd, ":")) == NULL) {
 | 
			
		||||
            if (!ENGINE_ctrl_cmd_string(e, cmd, NULL, 0))
 | 
			
		||||
                res = 0;
 | 
			
		||||
        } else {
 | 
			
		||||
            if ((int)(arg - cmd) > 254) {
 | 
			
		||||
                BIO_printf(bio_out, "[Error]: command name too long\n");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            memcpy(buf, cmd, (int)(arg - cmd));
 | 
			
		||||
            buf[arg - cmd] = '\0';
 | 
			
		||||
            arg++;              /* Move past the ":" */
 | 
			
		||||
            /* Call the command with the argument */
 | 
			
		||||
            if (!ENGINE_ctrl_cmd_string(e, buf, arg, 0))
 | 
			
		||||
                res = 0;
 | 
			
		||||
        }
 | 
			
		||||
        if (res)
 | 
			
		||||
            BIO_printf(bio_out, "[Success]: %s\n", cmd);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_out, "[Failure]: %s\n", cmd);
 | 
			
		||||
            ERR_print_errors(bio_out);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int ret=1,i;
 | 
			
		||||
	const char **pp;
 | 
			
		||||
	int verbose=0, list_cap=0, test_avail=0, test_avail_noise = 0;
 | 
			
		||||
	ENGINE *e;
 | 
			
		||||
	STACK_OF(OPENSSL_STRING) *engines = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
	STACK_OF(OPENSSL_STRING) *pre_cmds = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
	STACK_OF(OPENSSL_STRING) *post_cmds = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
	int badops=1;
 | 
			
		||||
	BIO *bio_out=NULL;
 | 
			
		||||
	const char *indent = "     ";
 | 
			
		||||
{
 | 
			
		||||
    int ret = 1, i;
 | 
			
		||||
    const char **pp;
 | 
			
		||||
    int verbose = 0, list_cap = 0, test_avail = 0, test_avail_noise = 0;
 | 
			
		||||
    ENGINE *e;
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *engines = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *pre_cmds = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
    STACK_OF(OPENSSL_STRING) *post_cmds = sk_OPENSSL_STRING_new_null();
 | 
			
		||||
    int badops = 1;
 | 
			
		||||
    BIO *bio_out = NULL;
 | 
			
		||||
    const char *indent = "     ";
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
	SSL_load_error_strings();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
    SSL_load_error_strings();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
	bio_out=BIO_new_fp(stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
	{
 | 
			
		||||
	BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
	bio_out = BIO_push(tmpbio, bio_out);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
    bio_out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
    {
 | 
			
		||||
        BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
        bio_out = BIO_push(tmpbio, bio_out);
 | 
			
		||||
    }
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if (strncmp(*argv,"-v",2) == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if(strspn(*argv + 1, "v") < strlen(*argv + 1))
 | 
			
		||||
				goto skip_arg_loop;
 | 
			
		||||
			if((verbose=strlen(*argv + 1)) > 4)
 | 
			
		||||
				goto skip_arg_loop;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-c") == 0)
 | 
			
		||||
			list_cap=1;
 | 
			
		||||
		else if (strncmp(*argv,"-t",2) == 0)
 | 
			
		||||
			{
 | 
			
		||||
			test_avail=1;
 | 
			
		||||
			if(strspn(*argv + 1, "t") < strlen(*argv + 1))
 | 
			
		||||
				goto skip_arg_loop;
 | 
			
		||||
			if((test_avail_noise = strlen(*argv + 1) - 1) > 1)
 | 
			
		||||
				goto skip_arg_loop;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-pre") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			argc--; argv++;
 | 
			
		||||
			if (argc == 0)
 | 
			
		||||
				goto skip_arg_loop;
 | 
			
		||||
			sk_OPENSSL_STRING_push(pre_cmds,*argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-post") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			argc--; argv++;
 | 
			
		||||
			if (argc == 0)
 | 
			
		||||
				goto skip_arg_loop;
 | 
			
		||||
			sk_OPENSSL_STRING_push(post_cmds,*argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if ((strncmp(*argv,"-h",2) == 0) ||
 | 
			
		||||
				(strcmp(*argv,"-?") == 0))
 | 
			
		||||
			goto skip_arg_loop;
 | 
			
		||||
		else
 | 
			
		||||
			sk_OPENSSL_STRING_push(engines,*argv);
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
	/* Looks like everything went OK */
 | 
			
		||||
	badops = 0;
 | 
			
		||||
skip_arg_loop:
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strncmp(*argv, "-v", 2) == 0) {
 | 
			
		||||
            if (strspn(*argv + 1, "v") < strlen(*argv + 1))
 | 
			
		||||
                goto skip_arg_loop;
 | 
			
		||||
            if ((verbose = strlen(*argv + 1)) > 4)
 | 
			
		||||
                goto skip_arg_loop;
 | 
			
		||||
        } else if (strcmp(*argv, "-c") == 0)
 | 
			
		||||
            list_cap = 1;
 | 
			
		||||
        else if (strncmp(*argv, "-t", 2) == 0) {
 | 
			
		||||
            test_avail = 1;
 | 
			
		||||
            if (strspn(*argv + 1, "t") < strlen(*argv + 1))
 | 
			
		||||
                goto skip_arg_loop;
 | 
			
		||||
            if ((test_avail_noise = strlen(*argv + 1) - 1) > 1)
 | 
			
		||||
                goto skip_arg_loop;
 | 
			
		||||
        } else if (strcmp(*argv, "-pre") == 0) {
 | 
			
		||||
            argc--;
 | 
			
		||||
            argv++;
 | 
			
		||||
            if (argc == 0)
 | 
			
		||||
                goto skip_arg_loop;
 | 
			
		||||
            sk_OPENSSL_STRING_push(pre_cmds, *argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-post") == 0) {
 | 
			
		||||
            argc--;
 | 
			
		||||
            argv++;
 | 
			
		||||
            if (argc == 0)
 | 
			
		||||
                goto skip_arg_loop;
 | 
			
		||||
            sk_OPENSSL_STRING_push(post_cmds, *argv);
 | 
			
		||||
        } else if ((strncmp(*argv, "-h", 2) == 0) ||
 | 
			
		||||
                   (strcmp(*argv, "-?") == 0))
 | 
			
		||||
            goto skip_arg_loop;
 | 
			
		||||
        else
 | 
			
		||||
            sk_OPENSSL_STRING_push(engines, *argv);
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
    /* Looks like everything went OK */
 | 
			
		||||
    badops = 0;
 | 
			
		||||
 skip_arg_loop:
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
		for (pp=engine_usage; (*pp != NULL); pp++)
 | 
			
		||||
			BIO_printf(bio_err,"%s",*pp);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
        for (pp = engine_usage; (*pp != NULL); pp++)
 | 
			
		||||
            BIO_printf(bio_err, "%s", *pp);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (sk_OPENSSL_STRING_num(engines) == 0)
 | 
			
		||||
		{
 | 
			
		||||
		for(e = ENGINE_get_first(); e != NULL; e = ENGINE_get_next(e))
 | 
			
		||||
			{
 | 
			
		||||
			sk_OPENSSL_STRING_push(engines,(char *)ENGINE_get_id(e));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (sk_OPENSSL_STRING_num(engines) == 0) {
 | 
			
		||||
        for (e = ENGINE_get_first(); e != NULL; e = ENGINE_get_next(e)) {
 | 
			
		||||
            sk_OPENSSL_STRING_push(engines, (char *)ENGINE_get_id(e));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	for (i=0; i<sk_OPENSSL_STRING_num(engines); i++)
 | 
			
		||||
		{
 | 
			
		||||
		const char *id = sk_OPENSSL_STRING_value(engines,i);
 | 
			
		||||
		if ((e = ENGINE_by_id(id)) != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			const char *name = ENGINE_get_name(e);
 | 
			
		||||
			/* Do "id" first, then "name". Easier to auto-parse. */
 | 
			
		||||
			BIO_printf(bio_out, "(%s) %s\n", id, name);
 | 
			
		||||
			util_do_cmds(e, pre_cmds, bio_out, indent);
 | 
			
		||||
			if (strcmp(ENGINE_get_id(e), id) != 0)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out, "Loaded: (%s) %s\n",
 | 
			
		||||
					ENGINE_get_id(e), ENGINE_get_name(e));
 | 
			
		||||
				}
 | 
			
		||||
			if (list_cap)
 | 
			
		||||
				{
 | 
			
		||||
				int cap_size = 256;
 | 
			
		||||
				char *cap_buf = NULL;
 | 
			
		||||
				int k,n;
 | 
			
		||||
				const int *nids;
 | 
			
		||||
				ENGINE_CIPHERS_PTR fn_c;
 | 
			
		||||
				ENGINE_DIGESTS_PTR fn_d;
 | 
			
		||||
				ENGINE_PKEY_METHS_PTR fn_pk;
 | 
			
		||||
    for (i = 0; i < sk_OPENSSL_STRING_num(engines); i++) {
 | 
			
		||||
        const char *id = sk_OPENSSL_STRING_value(engines, i);
 | 
			
		||||
        if ((e = ENGINE_by_id(id)) != NULL) {
 | 
			
		||||
            const char *name = ENGINE_get_name(e);
 | 
			
		||||
            /*
 | 
			
		||||
             * Do "id" first, then "name". Easier to auto-parse.
 | 
			
		||||
             */
 | 
			
		||||
            BIO_printf(bio_out, "(%s) %s\n", id, name);
 | 
			
		||||
            util_do_cmds(e, pre_cmds, bio_out, indent);
 | 
			
		||||
            if (strcmp(ENGINE_get_id(e), id) != 0) {
 | 
			
		||||
                BIO_printf(bio_out, "Loaded: (%s) %s\n",
 | 
			
		||||
                           ENGINE_get_id(e), ENGINE_get_name(e));
 | 
			
		||||
            }
 | 
			
		||||
            if (list_cap) {
 | 
			
		||||
                int cap_size = 256;
 | 
			
		||||
                char *cap_buf = NULL;
 | 
			
		||||
                int k, n;
 | 
			
		||||
                const int *nids;
 | 
			
		||||
                ENGINE_CIPHERS_PTR fn_c;
 | 
			
		||||
                ENGINE_DIGESTS_PTR fn_d;
 | 
			
		||||
                ENGINE_PKEY_METHS_PTR fn_pk;
 | 
			
		||||
 | 
			
		||||
				if (ENGINE_get_RSA(e) != NULL
 | 
			
		||||
					&& !append_buf(&cap_buf, "RSA",
 | 
			
		||||
						&cap_size, 256))
 | 
			
		||||
					goto end;
 | 
			
		||||
				if (ENGINE_get_DSA(e) != NULL
 | 
			
		||||
					&& !append_buf(&cap_buf, "DSA",
 | 
			
		||||
						&cap_size, 256))
 | 
			
		||||
					goto end;
 | 
			
		||||
				if (ENGINE_get_DH(e) != NULL
 | 
			
		||||
					&& !append_buf(&cap_buf, "DH",
 | 
			
		||||
						&cap_size, 256))
 | 
			
		||||
					goto end;
 | 
			
		||||
				if (ENGINE_get_RAND(e) != NULL
 | 
			
		||||
					&& !append_buf(&cap_buf, "RAND",
 | 
			
		||||
						&cap_size, 256))
 | 
			
		||||
					goto end;
 | 
			
		||||
                if (ENGINE_get_RSA(e) != NULL
 | 
			
		||||
                    && !append_buf(&cap_buf, "RSA", &cap_size, 256))
 | 
			
		||||
                    goto end;
 | 
			
		||||
                if (ENGINE_get_DSA(e) != NULL
 | 
			
		||||
                    && !append_buf(&cap_buf, "DSA", &cap_size, 256))
 | 
			
		||||
                    goto end;
 | 
			
		||||
                if (ENGINE_get_DH(e) != NULL
 | 
			
		||||
                    && !append_buf(&cap_buf, "DH", &cap_size, 256))
 | 
			
		||||
                    goto end;
 | 
			
		||||
                if (ENGINE_get_RAND(e) != NULL
 | 
			
		||||
                    && !append_buf(&cap_buf, "RAND", &cap_size, 256))
 | 
			
		||||
                    goto end;
 | 
			
		||||
 | 
			
		||||
				fn_c = ENGINE_get_ciphers(e);
 | 
			
		||||
				if(!fn_c) goto skip_ciphers;
 | 
			
		||||
				n = fn_c(e, NULL, &nids, 0);
 | 
			
		||||
				for(k=0 ; k < n ; ++k)
 | 
			
		||||
					if(!append_buf(&cap_buf,
 | 
			
		||||
						       OBJ_nid2sn(nids[k]),
 | 
			
		||||
						       &cap_size, 256))
 | 
			
		||||
						goto end;
 | 
			
		||||
                fn_c = ENGINE_get_ciphers(e);
 | 
			
		||||
                if (!fn_c)
 | 
			
		||||
                    goto skip_ciphers;
 | 
			
		||||
                n = fn_c(e, NULL, &nids, 0);
 | 
			
		||||
                for (k = 0; k < n; ++k)
 | 
			
		||||
                    if (!append_buf(&cap_buf,
 | 
			
		||||
                                    OBJ_nid2sn(nids[k]), &cap_size, 256))
 | 
			
		||||
                        goto end;
 | 
			
		||||
 | 
			
		||||
skip_ciphers:
 | 
			
		||||
				fn_d = ENGINE_get_digests(e);
 | 
			
		||||
				if(!fn_d) goto skip_digests;
 | 
			
		||||
				n = fn_d(e, NULL, &nids, 0);
 | 
			
		||||
				for(k=0 ; k < n ; ++k)
 | 
			
		||||
					if(!append_buf(&cap_buf,
 | 
			
		||||
						       OBJ_nid2sn(nids[k]),
 | 
			
		||||
						       &cap_size, 256))
 | 
			
		||||
						goto end;
 | 
			
		||||
 skip_ciphers:
 | 
			
		||||
                fn_d = ENGINE_get_digests(e);
 | 
			
		||||
                if (!fn_d)
 | 
			
		||||
                    goto skip_digests;
 | 
			
		||||
                n = fn_d(e, NULL, &nids, 0);
 | 
			
		||||
                for (k = 0; k < n; ++k)
 | 
			
		||||
                    if (!append_buf(&cap_buf,
 | 
			
		||||
                                    OBJ_nid2sn(nids[k]), &cap_size, 256))
 | 
			
		||||
                        goto end;
 | 
			
		||||
 | 
			
		||||
skip_digests:
 | 
			
		||||
				fn_pk = ENGINE_get_pkey_meths(e);
 | 
			
		||||
				if(!fn_pk) goto skip_pmeths;
 | 
			
		||||
				n = fn_pk(e, NULL, &nids, 0);
 | 
			
		||||
				for(k=0 ; k < n ; ++k)
 | 
			
		||||
					if(!append_buf(&cap_buf,
 | 
			
		||||
						       OBJ_nid2sn(nids[k]),
 | 
			
		||||
						       &cap_size, 256))
 | 
			
		||||
						goto end;
 | 
			
		||||
skip_pmeths:
 | 
			
		||||
				if (cap_buf && (*cap_buf != '\0'))
 | 
			
		||||
					BIO_printf(bio_out, " [%s]\n", cap_buf);
 | 
			
		||||
 skip_digests:
 | 
			
		||||
                fn_pk = ENGINE_get_pkey_meths(e);
 | 
			
		||||
                if (!fn_pk)
 | 
			
		||||
                    goto skip_pmeths;
 | 
			
		||||
                n = fn_pk(e, NULL, &nids, 0);
 | 
			
		||||
                for (k = 0; k < n; ++k)
 | 
			
		||||
                    if (!append_buf(&cap_buf,
 | 
			
		||||
                                    OBJ_nid2sn(nids[k]), &cap_size, 256))
 | 
			
		||||
                        goto end;
 | 
			
		||||
 skip_pmeths:
 | 
			
		||||
                if (cap_buf && (*cap_buf != '\0'))
 | 
			
		||||
                    BIO_printf(bio_out, " [%s]\n", cap_buf);
 | 
			
		||||
 | 
			
		||||
				OPENSSL_free(cap_buf);
 | 
			
		||||
				}
 | 
			
		||||
			if(test_avail)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_out, "%s", indent);
 | 
			
		||||
				if (ENGINE_init(e))
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_out, "[ available ]\n");
 | 
			
		||||
					util_do_cmds(e, post_cmds, bio_out, indent);
 | 
			
		||||
					ENGINE_finish(e);
 | 
			
		||||
					}
 | 
			
		||||
				else
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_out, "[ unavailable ]\n");
 | 
			
		||||
					if(test_avail_noise)
 | 
			
		||||
						ERR_print_errors_fp(stdout);
 | 
			
		||||
					ERR_clear_error();
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			if((verbose > 0) && !util_verbose(e, verbose, bio_out, indent))
 | 
			
		||||
				goto end;
 | 
			
		||||
			ENGINE_free(e);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
                OPENSSL_free(cap_buf);
 | 
			
		||||
            }
 | 
			
		||||
            if (test_avail) {
 | 
			
		||||
                BIO_printf(bio_out, "%s", indent);
 | 
			
		||||
                if (ENGINE_init(e)) {
 | 
			
		||||
                    BIO_printf(bio_out, "[ available ]\n");
 | 
			
		||||
                    util_do_cmds(e, post_cmds, bio_out, indent);
 | 
			
		||||
                    ENGINE_finish(e);
 | 
			
		||||
                } else {
 | 
			
		||||
                    BIO_printf(bio_out, "[ unavailable ]\n");
 | 
			
		||||
                    if (test_avail_noise)
 | 
			
		||||
                        ERR_print_errors_fp(stdout);
 | 
			
		||||
                    ERR_clear_error();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if ((verbose > 0) && !util_verbose(e, verbose, bio_out, indent))
 | 
			
		||||
                goto end;
 | 
			
		||||
            ENGINE_free(e);
 | 
			
		||||
        } else
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
 | 
			
		||||
	ERR_print_errors(bio_err);
 | 
			
		||||
	sk_OPENSSL_STRING_pop_free(engines, identity);
 | 
			
		||||
	sk_OPENSSL_STRING_pop_free(pre_cmds, identity);
 | 
			
		||||
	sk_OPENSSL_STRING_pop_free(post_cmds, identity);
 | 
			
		||||
	if (bio_out != NULL) BIO_free_all(bio_out);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    ERR_print_errors(bio_err);
 | 
			
		||||
    sk_OPENSSL_STRING_pop_free(engines, identity);
 | 
			
		||||
    sk_OPENSSL_STRING_pop_free(pre_cmds, identity);
 | 
			
		||||
    sk_OPENSSL_STRING_pop_free(post_cmds, identity);
 | 
			
		||||
    if (bio_out != NULL)
 | 
			
		||||
        BIO_free_all(bio_out);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										101
									
								
								apps/errstr.c
									
									
									
									
									
								
							
							
						
						
									
										101
									
								
								apps/errstr.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -66,63 +66,56 @@
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	errstr_main
 | 
			
		||||
#define PROG    errstr_main
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int i,ret=0;
 | 
			
		||||
	char buf[256];
 | 
			
		||||
	unsigned long l;
 | 
			
		||||
{
 | 
			
		||||
    int i, ret = 0;
 | 
			
		||||
    char buf[256];
 | 
			
		||||
    unsigned long l;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	SSL_load_error_strings();
 | 
			
		||||
    SSL_load_error_strings();
 | 
			
		||||
 | 
			
		||||
	if ((argc > 1) && (strcmp(argv[1],"-stats") == 0))
 | 
			
		||||
		{
 | 
			
		||||
		BIO *out=NULL;
 | 
			
		||||
    if ((argc > 1) && (strcmp(argv[1], "-stats") == 0)) {
 | 
			
		||||
        BIO *out = NULL;
 | 
			
		||||
 | 
			
		||||
		out=BIO_new(BIO_s_file());
 | 
			
		||||
		if ((out != NULL) && BIO_set_fp(out,stdout,BIO_NOCLOSE))
 | 
			
		||||
			{
 | 
			
		||||
        out = BIO_new(BIO_s_file());
 | 
			
		||||
        if ((out != NULL) && BIO_set_fp(out, stdout, BIO_NOCLOSE)) {
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
            {
 | 
			
		||||
                BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
                out = BIO_push(tmpbio, out);
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
			lh_ERR_STRING_DATA_node_stats_bio(
 | 
			
		||||
						  ERR_get_string_table(), out);
 | 
			
		||||
			lh_ERR_STRING_DATA_stats_bio(ERR_get_string_table(),
 | 
			
		||||
						     out);
 | 
			
		||||
			lh_ERR_STRING_DATA_node_usage_stats_bio(
 | 
			
		||||
						    ERR_get_string_table(),out);
 | 
			
		||||
			}
 | 
			
		||||
		if (out != NULL) BIO_free_all(out);
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
            lh_ERR_STRING_DATA_node_stats_bio(ERR_get_string_table(), out);
 | 
			
		||||
            lh_ERR_STRING_DATA_stats_bio(ERR_get_string_table(), out);
 | 
			
		||||
            lh_ERR_STRING_DATA_node_usage_stats_bio(ERR_get_string_table(),
 | 
			
		||||
                                                    out);
 | 
			
		||||
        }
 | 
			
		||||
        if (out != NULL)
 | 
			
		||||
            BIO_free_all(out);
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	for (i=1; i<argc; i++)
 | 
			
		||||
		{
 | 
			
		||||
		if (sscanf(argv[i],"%lx",&l))
 | 
			
		||||
			{
 | 
			
		||||
			ERR_error_string_n(l, buf, sizeof buf);
 | 
			
		||||
			printf("%s\n",buf);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			printf("%s: bad error code\n",argv[i]);
 | 
			
		||||
			printf("usage: errstr [-stats] <errno> ...\n");
 | 
			
		||||
			ret++;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    for (i = 1; i < argc; i++) {
 | 
			
		||||
        if (sscanf(argv[i], "%lx", &l)) {
 | 
			
		||||
            ERR_error_string_n(l, buf, sizeof buf);
 | 
			
		||||
            printf("%s\n", buf);
 | 
			
		||||
        } else {
 | 
			
		||||
            printf("%s: bad error code\n", argv[i]);
 | 
			
		||||
            printf("usage: errstr [-stats] <errno> ...\n");
 | 
			
		||||
            ret++;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										328
									
								
								apps/gendh.c
									
									
									
									
									
								
							
							
						
						
									
										328
									
								
								apps/gendh.c
									
									
									
									
									
								
							@@ -6,21 +6,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -35,10 +35,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -50,7 +50,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -58,184 +58,188 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code */
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dh.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include <sys/types.h>
 | 
			
		||||
# include <sys/stat.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/rand.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
# include <openssl/dh.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#define DEFBITS	512
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG gendh_main
 | 
			
		||||
# define DEFBITS 2048
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG gendh_main
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
static int dh_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	BN_GENCB cb;
 | 
			
		||||
	DH *dh=NULL;
 | 
			
		||||
	int ret=1,num=DEFBITS;
 | 
			
		||||
	int g=2;
 | 
			
		||||
	char *outfile=NULL;
 | 
			
		||||
	char *inrand=NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	BIO *out=NULL;
 | 
			
		||||
{
 | 
			
		||||
    BN_GENCB *cb = NULL;
 | 
			
		||||
    DH *dh = NULL;
 | 
			
		||||
    int ret = 1, num = DEFBITS;
 | 
			
		||||
    int g = 2;
 | 
			
		||||
    char *outfile = NULL;
 | 
			
		||||
    char *inrand = NULL;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    BIO *out = NULL;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	BN_GENCB_set(&cb, dh_cb, bio_err);
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    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;
 | 
			
		||||
    cb = BN_GENCB_new();
 | 
			
		||||
    if (!cb)
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	argv++;
 | 
			
		||||
	argc--;
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (argc <= 0) break;
 | 
			
		||||
		if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-2") == 0)
 | 
			
		||||
			g=2;
 | 
			
		||||
	/*	else if (strcmp(*argv,"-3") == 0)
 | 
			
		||||
			g=3; */
 | 
			
		||||
		else if (strcmp(*argv,"-5") == 0)
 | 
			
		||||
			g=5;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			break;
 | 
			
		||||
		argv++;
 | 
			
		||||
		argc--;
 | 
			
		||||
		}
 | 
			
		||||
	if ((argc >= 1) && ((sscanf(*argv,"%d",&num) == 0) || (num < 0)))
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"usage: gendh [args] [numbits]\n");
 | 
			
		||||
		BIO_printf(bio_err," -out file - output the key to 'file\n");
 | 
			
		||||
		BIO_printf(bio_err," -2        - use 2 as the generator value\n");
 | 
			
		||||
	/*	BIO_printf(bio_err," -3        - use 3 as the generator value\n"); */
 | 
			
		||||
		BIO_printf(bio_err," -5        - use 5 as the generator value\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,"           - load the file (or the files in the directory) into\n");
 | 
			
		||||
		BIO_printf(bio_err,"             the random number generator\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
    BN_GENCB_set(cb, dh_cb, bio_err);
 | 
			
		||||
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    argv++;
 | 
			
		||||
    argc--;
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (argc <= 0)
 | 
			
		||||
            break;
 | 
			
		||||
        if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-2") == 0)
 | 
			
		||||
            g = 2;
 | 
			
		||||
/*-     else if (strcmp(*argv,"-3") == 0)
 | 
			
		||||
                g=3; */
 | 
			
		||||
        else if (strcmp(*argv, "-5") == 0)
 | 
			
		||||
            g = 5;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-rand") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            inrand = *(++argv);
 | 
			
		||||
        } else
 | 
			
		||||
            break;
 | 
			
		||||
        argv++;
 | 
			
		||||
        argc--;
 | 
			
		||||
    }
 | 
			
		||||
    if ((argc >= 1) && ((sscanf(*argv, "%d", &num) == 0) || (num < 0))) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "usage: gendh [args] [numbits]\n");
 | 
			
		||||
        BIO_printf(bio_err, " -out file - output the key to 'file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -2        - use 2 as the generator value\n");
 | 
			
		||||
        /*
 | 
			
		||||
         * BIO_printf(bio_err," -3 - use 3 as the generator value\n");
 | 
			
		||||
         */
 | 
			
		||||
        BIO_printf(bio_err, " -5        - use 5 as the generator value\n");
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -engine e - use engine e, possibly a hardware device.\n");
 | 
			
		||||
# endif
 | 
			
		||||
        BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR,
 | 
			
		||||
                   LIST_SEPARATOR_CHAR);
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "           - load the file (or the files in the directory) into\n");
 | 
			
		||||
        BIO_printf(bio_err, "             the random number generator\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	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));
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if (out == NULL) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g);
 | 
			
		||||
	BIO_printf(bio_err,"This is going to take a long time\n");
 | 
			
		||||
    if (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(((dh = DH_new()) == NULL) || !DH_generate_parameters_ex(dh, num, g, &cb))
 | 
			
		||||
		goto end;
 | 
			
		||||
		
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
    if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) {
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
    }
 | 
			
		||||
    if (inrand != NULL)
 | 
			
		||||
        BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
 | 
			
		||||
                   app_RAND_load_files(inrand));
 | 
			
		||||
 | 
			
		||||
	if (!PEM_write_bio_DHparams(out,dh))
 | 
			
		||||
		goto end;
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (ret != 0)
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dh != NULL) DH_free(dh);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    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");
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
    if (((dh = DH_new()) == NULL)
 | 
			
		||||
        || !DH_generate_parameters_ex(dh, num, g, cb))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	if (p == 0) c='.';
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write(cb->arg,&c,1);
 | 
			
		||||
	(void)BIO_flush(cb->arg);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_DH */
 | 
			
		||||
    app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 | 
			
		||||
    if (!PEM_write_bio_DHparams(out, dh))
 | 
			
		||||
        goto end;
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (ret != 0)
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (dh != NULL)
 | 
			
		||||
        DH_free(dh);
 | 
			
		||||
    if (cb != NULL)
 | 
			
		||||
        BN_GENCB_free(cb);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int dh_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
{
 | 
			
		||||
    char c = '*';
 | 
			
		||||
 | 
			
		||||
    if (p == 0)
 | 
			
		||||
        c = '.';
 | 
			
		||||
    if (p == 1)
 | 
			
		||||
        c = '+';
 | 
			
		||||
    if (p == 2)
 | 
			
		||||
        c = '*';
 | 
			
		||||
    if (p == 3)
 | 
			
		||||
        c = '\n';
 | 
			
		||||
    BIO_write(BN_GENCB_get_arg(cb), &c, 1);
 | 
			
		||||
    (void)BIO_flush(BN_GENCB_get_arg(cb));
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
#else                           /* !OPENSSL_NO_DH */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										418
									
								
								apps/gendsa.c
									
									
									
									
									
								
							
							
						
						
									
										418
									
								
								apps/gendsa.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,237 +49,239 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>	/* for OPENSSL_NO_DSA */
 | 
			
		||||
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dsa.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include <sys/types.h>
 | 
			
		||||
# include <sys/stat.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
# include <openssl/dsa.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#define DEFBITS	512
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG gendsa_main
 | 
			
		||||
# define DEFBITS 512
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG gendsa_main
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	DSA *dsa=NULL;
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	char *outfile=NULL;
 | 
			
		||||
	char *inrand=NULL,*dsaparams=NULL;
 | 
			
		||||
	char *passargout = NULL, *passout = NULL;
 | 
			
		||||
	BIO *out=NULL,*in=NULL;
 | 
			
		||||
	const EVP_CIPHER *enc=NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
{
 | 
			
		||||
    DSA *dsa = NULL;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    char *outfile = NULL;
 | 
			
		||||
    char *inrand = NULL, *dsaparams = NULL;
 | 
			
		||||
    char *passargout = NULL, *passout = NULL;
 | 
			
		||||
    BIO *out = NULL, *in = NULL;
 | 
			
		||||
    const EVP_CIPHER *enc = NULL;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	argv++;
 | 
			
		||||
	argc--;
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (argc <= 0) break;
 | 
			
		||||
		if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-") == 0)
 | 
			
		||||
			goto bad;
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
		else if (strcmp(*argv,"-des") == 0)
 | 
			
		||||
			enc=EVP_des_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-des3") == 0)
 | 
			
		||||
			enc=EVP_des_ede3_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		else if (strcmp(*argv,"-idea") == 0)
 | 
			
		||||
			enc=EVP_idea_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		else if (strcmp(*argv,"-seed") == 0)
 | 
			
		||||
			enc=EVP_seed_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		else if (strcmp(*argv,"-aes128") == 0)
 | 
			
		||||
			enc=EVP_aes_128_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-aes192") == 0)
 | 
			
		||||
			enc=EVP_aes_192_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-aes256") == 0)
 | 
			
		||||
			enc=EVP_aes_256_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
		else if (strcmp(*argv,"-camellia128") == 0)
 | 
			
		||||
			enc=EVP_camellia_128_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-camellia192") == 0)
 | 
			
		||||
			enc=EVP_camellia_192_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-camellia256") == 0)
 | 
			
		||||
			enc=EVP_camellia_256_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
		else if (**argv != '-' && dsaparams == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			dsaparams = *argv;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			goto bad;
 | 
			
		||||
		argv++;
 | 
			
		||||
		argc--;
 | 
			
		||||
		}
 | 
			
		||||
    argv++;
 | 
			
		||||
    argc--;
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (argc <= 0)
 | 
			
		||||
            break;
 | 
			
		||||
        if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passout") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargout = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-rand") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            inrand = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-") == 0)
 | 
			
		||||
            goto bad;
 | 
			
		||||
# ifndef OPENSSL_NO_DES
 | 
			
		||||
        else if (strcmp(*argv, "-des") == 0)
 | 
			
		||||
            enc = EVP_des_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-des3") == 0)
 | 
			
		||||
            enc = EVP_des_ede3_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_IDEA
 | 
			
		||||
        else if (strcmp(*argv, "-idea") == 0)
 | 
			
		||||
            enc = EVP_idea_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_SEED
 | 
			
		||||
        else if (strcmp(*argv, "-seed") == 0)
 | 
			
		||||
            enc = EVP_seed_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_AES
 | 
			
		||||
        else if (strcmp(*argv, "-aes128") == 0)
 | 
			
		||||
            enc = EVP_aes_128_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-aes192") == 0)
 | 
			
		||||
            enc = EVP_aes_192_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-aes256") == 0)
 | 
			
		||||
            enc = EVP_aes_256_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
        else if (strcmp(*argv, "-camellia128") == 0)
 | 
			
		||||
            enc = EVP_camellia_128_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-camellia192") == 0)
 | 
			
		||||
            enc = EVP_camellia_192_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-camellia256") == 0)
 | 
			
		||||
            enc = EVP_camellia_256_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
        else if (**argv != '-' && dsaparams == NULL) {
 | 
			
		||||
            dsaparams = *argv;
 | 
			
		||||
        } else
 | 
			
		||||
            goto bad;
 | 
			
		||||
        argv++;
 | 
			
		||||
        argc--;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (dsaparams == NULL)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"usage: gendsa [args] dsaparam-file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out file - output the key to 'file'\n");
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
		BIO_printf(bio_err," -des      - encrypt the generated key with DES in cbc mode\n");
 | 
			
		||||
		BIO_printf(bio_err," -des3     - encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		BIO_printf(bio_err," -idea     - encrypt the generated key with IDEA in cbc mode\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		BIO_printf(bio_err," -seed\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc seed\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
		BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,"           - load the file (or the files in the directory) into\n");
 | 
			
		||||
		BIO_printf(bio_err,"             the random number generator\n");
 | 
			
		||||
		BIO_printf(bio_err," dsaparam-file\n");
 | 
			
		||||
		BIO_printf(bio_err,"           - a DSA parameter file as generated by the dsaparam command\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (dsaparams == NULL) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "usage: gendsa [args] dsaparam-file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -out file - output the key to 'file'\n");
 | 
			
		||||
# ifndef OPENSSL_NO_DES
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -des      - encrypt the generated key with DES in cbc mode\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -des3     - encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_IDEA
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -idea     - encrypt the generated key with IDEA in cbc mode\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_SEED
 | 
			
		||||
        BIO_printf(bio_err, " -seed\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc seed\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_AES
 | 
			
		||||
        BIO_printf(bio_err, " -aes128, -aes192, -aes256\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
        BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -engine e - use engine e, possibly a hardware device.\n");
 | 
			
		||||
# endif
 | 
			
		||||
        BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR,
 | 
			
		||||
                   LIST_SEPARATOR_CHAR);
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "           - load the file (or the files in the directory) into\n");
 | 
			
		||||
        BIO_printf(bio_err, "             the random number generator\n");
 | 
			
		||||
        BIO_printf(bio_err, " dsaparam-file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "           - a DSA parameter file as generated by the dsaparam command\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
    if (!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    if (!(BIO_read_filename(in, dsaparams))) {
 | 
			
		||||
        perror(dsaparams);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ((dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL)) == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to load DSA parameter file\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    in = NULL;
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	if (!(BIO_read_filename(in,dsaparams)))
 | 
			
		||||
		{
 | 
			
		||||
		perror(dsaparams);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if (out == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	if ((dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL)) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load DSA parameter file\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	in = NULL;
 | 
			
		||||
		
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if (out == NULL) goto end;
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) {
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
    }
 | 
			
		||||
    if (inrand != NULL)
 | 
			
		||||
        BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
 | 
			
		||||
                   app_RAND_load_files(inrand));
 | 
			
		||||
 | 
			
		||||
	if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
		}
 | 
			
		||||
	if (inrand != NULL)
 | 
			
		||||
		BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
			app_RAND_load_files(inrand));
 | 
			
		||||
    BIO_printf(bio_err, "Generating DSA key, %d bits\n", BN_num_bits(dsa->p));
 | 
			
		||||
    if (!DSA_generate_key(dsa))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err,"Generating DSA key, %d bits\n",
 | 
			
		||||
							BN_num_bits(dsa->p));
 | 
			
		||||
	if (!DSA_generate_key(dsa)) goto end;
 | 
			
		||||
    app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 | 
			
		||||
	if (!PEM_write_bio_DSAPrivateKey(out,dsa,enc,NULL,0,NULL, passout))
 | 
			
		||||
		goto end;
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (ret != 0)
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (dsa != NULL) DSA_free(dsa);
 | 
			
		||||
	if(passout) OPENSSL_free(passout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_DSA */
 | 
			
		||||
    if (!PEM_write_bio_DSAPrivateKey(out, dsa, enc, NULL, 0, NULL, passout))
 | 
			
		||||
        goto end;
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (ret != 0)
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (dsa != NULL)
 | 
			
		||||
        DSA_free(dsa);
 | 
			
		||||
    if (passout)
 | 
			
		||||
        OPENSSL_free(passout);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
#else                           /* !OPENSSL_NO_DSA */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										600
									
								
								apps/genpkey.c
									
									
									
									
									
								
							
							
						
						
									
										600
									
								
								apps/genpkey.c
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
/* apps/genpkey.c */
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 2006
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 2006
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2006 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -10,7 +11,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -62,11 +63,11 @@
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#include <openssl/engine.h>
 | 
			
		||||
# include <openssl/engine.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
 | 
			
		||||
				const char *file, ENGINE *e);
 | 
			
		||||
                            const char *file, ENGINE *e);
 | 
			
		||||
static int genpkey_cb(EVP_PKEY_CTX *ctx);
 | 
			
		||||
 | 
			
		||||
#define PROG genpkey_main
 | 
			
		||||
@@ -74,367 +75,328 @@ static int genpkey_cb(EVP_PKEY_CTX *ctx);
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	char **args, *outfile = NULL;
 | 
			
		||||
	char *passarg = NULL;
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	const EVP_CIPHER *cipher = NULL;
 | 
			
		||||
	int outformat;
 | 
			
		||||
	int text = 0;
 | 
			
		||||
	EVP_PKEY *pkey=NULL;
 | 
			
		||||
	EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
	char *pass = NULL;
 | 
			
		||||
	int badarg = 0;
 | 
			
		||||
	int ret = 1, rv;
 | 
			
		||||
{
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    char **args, *outfile = NULL;
 | 
			
		||||
    char *passarg = NULL;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    const EVP_CIPHER *cipher = NULL;
 | 
			
		||||
    int outformat;
 | 
			
		||||
    int text = 0;
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
    EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
    char *pass = NULL;
 | 
			
		||||
    int badarg = 0;
 | 
			
		||||
    int ret = 1, rv;
 | 
			
		||||
 | 
			
		||||
	int do_param = 0;
 | 
			
		||||
    int do_param = 0;
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	OpenSSL_add_all_algorithms();
 | 
			
		||||
	args = argv + 1;
 | 
			
		||||
	while (!badarg && *args && *args[0] == '-')
 | 
			
		||||
		{
 | 
			
		||||
		if (!strcmp(*args,"-outform"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outformat=str2fmt(*args);
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-pass"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			passarg= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    OpenSSL_add_all_algorithms();
 | 
			
		||||
    args = argv + 1;
 | 
			
		||||
    while (!badarg && *args && *args[0] == '-') {
 | 
			
		||||
        if (!strcmp(*args, "-outform")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                outformat = str2fmt(*args);
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-pass")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passarg = *(++args);
 | 
			
		||||
        }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*args,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto bad;
 | 
			
		||||
        		e = setup_engine(bio_err, *(++args), 0);
 | 
			
		||||
			}
 | 
			
		||||
        else if (strcmp(*args, "-engine") == 0) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            e = setup_engine(bio_err, *(++args), 0);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		else if (!strcmp (*args, "-paramfile"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto bad;
 | 
			
		||||
			args++;
 | 
			
		||||
			if (do_param == 1)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			if (!init_keygen_file(bio_err, &ctx, *args, e))
 | 
			
		||||
				goto end;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-out"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outfile = *args;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-algorithm") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto bad;
 | 
			
		||||
			if (!init_gen_str(bio_err, &ctx, *(++args),e, do_param))
 | 
			
		||||
				goto end;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-pkeyopt") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1])
 | 
			
		||||
				goto bad;
 | 
			
		||||
			if (!ctx)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_puts(bio_err, "No keytype specified\n");
 | 
			
		||||
				goto bad;
 | 
			
		||||
				}
 | 
			
		||||
			else if (pkey_ctrl_string(ctx, *(++args)) <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_puts(bio_err, "parameter setting error\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-genparam") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (ctx)
 | 
			
		||||
				goto bad;
 | 
			
		||||
			do_param = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			cipher = EVP_get_cipherbyname(*args + 1);
 | 
			
		||||
			if (!cipher)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Unknown cipher %s\n",
 | 
			
		||||
								*args + 1);
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
				}
 | 
			
		||||
			if (do_param == 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		args++;
 | 
			
		||||
		}
 | 
			
		||||
        else if (!strcmp(*args, "-paramfile")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            args++;
 | 
			
		||||
            if (do_param == 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!init_keygen_file(bio_err, &ctx, *args, e))
 | 
			
		||||
                goto end;
 | 
			
		||||
        } else if (!strcmp(*args, "-out")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                outfile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (strcmp(*args, "-algorithm") == 0) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!init_gen_str(bio_err, &ctx, *(++args), e, do_param))
 | 
			
		||||
                goto end;
 | 
			
		||||
        } else if (strcmp(*args, "-pkeyopt") == 0) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!ctx) {
 | 
			
		||||
                BIO_puts(bio_err, "No keytype specified\n");
 | 
			
		||||
                goto bad;
 | 
			
		||||
            } else if (pkey_ctrl_string(ctx, *(++args)) <= 0) {
 | 
			
		||||
                BIO_puts(bio_err, "parameter setting error\n");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        } else if (strcmp(*args, "-genparam") == 0) {
 | 
			
		||||
            if (ctx)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            do_param = 1;
 | 
			
		||||
        } else if (strcmp(*args, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else {
 | 
			
		||||
            cipher = EVP_get_cipherbyname(*args + 1);
 | 
			
		||||
            if (!cipher) {
 | 
			
		||||
                BIO_printf(bio_err, "Unknown cipher %s\n", *args + 1);
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            }
 | 
			
		||||
            if (do_param == 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        }
 | 
			
		||||
        args++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
		badarg = 1;
 | 
			
		||||
    if (!ctx)
 | 
			
		||||
        badarg = 1;
 | 
			
		||||
 | 
			
		||||
	if (badarg)
 | 
			
		||||
		{
 | 
			
		||||
		bad:
 | 
			
		||||
		BIO_printf(bio_err, "Usage: genpkey [options]\n");
 | 
			
		||||
		BIO_printf(bio_err, "where options may be\n");
 | 
			
		||||
		BIO_printf(bio_err, "-out file          output file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-outform X         output format (DER or PEM)\n");
 | 
			
		||||
		BIO_printf(bio_err, "-pass arg          output file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err, "-<cipher>          use cipher <cipher> to encrypt the key\n");
 | 
			
		||||
    if (badarg) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "Usage: genpkey [options]\n");
 | 
			
		||||
        BIO_printf(bio_err, "where options may be\n");
 | 
			
		||||
        BIO_printf(bio_err, "-out file          output file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-outform X         output format (DER or PEM)\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-pass arg          output file pass phrase source\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-<cipher>          use cipher <cipher> to encrypt the key\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err, "-engine e          use engine e, possibly a hardware device.\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-engine e          use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err, "-paramfile file    parameters file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-algorithm alg     the public key algorithm\n");
 | 
			
		||||
		BIO_printf(bio_err, "-pkeyopt opt:value set the public key algorithm option <opt>\n"
 | 
			
		||||
				            "                   to value <value>\n");
 | 
			
		||||
		BIO_printf(bio_err, "-genparam          generate parameters, not key\n");
 | 
			
		||||
		BIO_printf(bio_err, "-text              print the in text\n");
 | 
			
		||||
		BIO_printf(bio_err, "NB: options order may be important!  See the manual page.\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
        BIO_printf(bio_err, "-paramfile file    parameters file\n");
 | 
			
		||||
        BIO_printf(bio_err, "-algorithm alg     the public key algorithm\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-pkeyopt opt:value set the public key algorithm option <opt>\n"
 | 
			
		||||
                   "                   to value <value>\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-genparam          generate parameters, not key\n");
 | 
			
		||||
        BIO_printf(bio_err, "-text              print the in text\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "NB: options order may be important!  See the manual page.\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!app_passwd(bio_err, passarg, NULL, &pass, NULL))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(bio_err, "Error getting password\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!app_passwd(bio_err, passarg, NULL, &pass, NULL)) {
 | 
			
		||||
        BIO_puts(bio_err, "Error getting password\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (outfile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(out = BIO_new_file (outfile, "wb")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		out = BIO_new_fp (stdout, BIO_NOCLOSE);
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "wb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open output file %s\n", outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	EVP_PKEY_CTX_set_cb(ctx, genpkey_cb);
 | 
			
		||||
	EVP_PKEY_CTX_set_app_data(ctx, bio_err);
 | 
			
		||||
    EVP_PKEY_CTX_set_cb(ctx, genpkey_cb);
 | 
			
		||||
    EVP_PKEY_CTX_set_app_data(ctx, bio_err);
 | 
			
		||||
 | 
			
		||||
	if (do_param)
 | 
			
		||||
		{
 | 
			
		||||
		if (EVP_PKEY_paramgen(ctx, &pkey) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_puts(bio_err, "Error generating parameters\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (EVP_PKEY_keygen(ctx, &pkey) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_puts(bio_err, "Error generating key\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (do_param) {
 | 
			
		||||
        if (EVP_PKEY_paramgen(ctx, &pkey) <= 0) {
 | 
			
		||||
            BIO_puts(bio_err, "Error generating parameters\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        if (EVP_PKEY_keygen(ctx, &pkey) <= 0) {
 | 
			
		||||
            BIO_puts(bio_err, "Error generating key\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (do_param)
 | 
			
		||||
		rv = PEM_write_bio_Parameters(out, pkey);
 | 
			
		||||
	else if (outformat == FORMAT_PEM) 
 | 
			
		||||
		rv = PEM_write_bio_PrivateKey(out, pkey, cipher, NULL, 0,
 | 
			
		||||
								NULL, pass);
 | 
			
		||||
	else if (outformat == FORMAT_ASN1)
 | 
			
		||||
		rv = i2d_PrivateKey_bio(out, pkey);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (do_param)
 | 
			
		||||
        rv = PEM_write_bio_Parameters(out, pkey);
 | 
			
		||||
    else if (outformat == FORMAT_PEM)
 | 
			
		||||
        rv = PEM_write_bio_PrivateKey(out, pkey, cipher, NULL, 0, NULL, pass);
 | 
			
		||||
    else if (outformat == FORMAT_ASN1)
 | 
			
		||||
        rv = i2d_PrivateKey_bio(out, pkey);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (rv <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(bio_err, "Error writing key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
    if (rv <= 0) {
 | 
			
		||||
        BIO_puts(bio_err, "Error writing key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		if (do_param)
 | 
			
		||||
			rv = EVP_PKEY_print_params(out, pkey, 0, NULL);
 | 
			
		||||
		else
 | 
			
		||||
			rv = EVP_PKEY_print_private(out, pkey, 0, NULL);
 | 
			
		||||
    if (text) {
 | 
			
		||||
        if (do_param)
 | 
			
		||||
            rv = EVP_PKEY_print_params(out, pkey, 0, NULL);
 | 
			
		||||
        else
 | 
			
		||||
            rv = EVP_PKEY_print_private(out, pkey, 0, NULL);
 | 
			
		||||
 | 
			
		||||
		if (rv <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_puts(bio_err, "Error printing key\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
        if (rv <= 0) {
 | 
			
		||||
            BIO_puts(bio_err, "Error printing key\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ret = 0;
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
	end:
 | 
			
		||||
	if (pkey)
 | 
			
		||||
		EVP_PKEY_free(pkey);
 | 
			
		||||
	if (ctx)
 | 
			
		||||
		EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
	if (out)
 | 
			
		||||
		BIO_free_all(out);
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	if (pass)
 | 
			
		||||
		OPENSSL_free(pass);
 | 
			
		||||
 end:
 | 
			
		||||
    if (pkey)
 | 
			
		||||
        EVP_PKEY_free(pkey);
 | 
			
		||||
    if (ctx)
 | 
			
		||||
        EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
    if (out)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    if (pass)
 | 
			
		||||
        OPENSSL_free(pass);
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
	}
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
 | 
			
		||||
				const char *file, ENGINE *e)
 | 
			
		||||
	{
 | 
			
		||||
	BIO *pbio;
 | 
			
		||||
	EVP_PKEY *pkey = NULL;
 | 
			
		||||
	EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
	if (*pctx)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(err, "Parameters already set!\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
                            const char *file, ENGINE *e)
 | 
			
		||||
{
 | 
			
		||||
    BIO *pbio;
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
    EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
    if (*pctx) {
 | 
			
		||||
        BIO_puts(err, "Parameters already set!\n");
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	pbio = BIO_new_file(file, "r");
 | 
			
		||||
	if (!pbio)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(err, "Can't open parameter file %s\n", file);
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
    pbio = BIO_new_file(file, "r");
 | 
			
		||||
    if (!pbio) {
 | 
			
		||||
        BIO_printf(err, "Can't open parameter file %s\n", file);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	pkey = PEM_read_bio_Parameters(pbio, NULL);
 | 
			
		||||
	BIO_free(pbio);
 | 
			
		||||
    pkey = PEM_read_bio_Parameters(pbio, NULL);
 | 
			
		||||
    BIO_free(pbio);
 | 
			
		||||
 | 
			
		||||
	if (!pkey)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error reading parameter file %s\n", file);
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
    if (!pkey) {
 | 
			
		||||
        BIO_printf(bio_err, "Error reading parameter file %s\n", file);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ctx = EVP_PKEY_CTX_new(pkey, e);
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
		goto err;
 | 
			
		||||
	if (EVP_PKEY_keygen_init(ctx) <= 0)
 | 
			
		||||
		goto err;
 | 
			
		||||
	EVP_PKEY_free(pkey);
 | 
			
		||||
	*pctx = ctx;
 | 
			
		||||
	return 1;
 | 
			
		||||
    ctx = EVP_PKEY_CTX_new(pkey, e);
 | 
			
		||||
    if (!ctx)
 | 
			
		||||
        goto err;
 | 
			
		||||
    if (EVP_PKEY_keygen_init(ctx) <= 0)
 | 
			
		||||
        goto err;
 | 
			
		||||
    EVP_PKEY_free(pkey);
 | 
			
		||||
    *pctx = ctx;
 | 
			
		||||
    return 1;
 | 
			
		||||
 | 
			
		||||
	err:
 | 
			
		||||
	BIO_puts(err, "Error initializing context\n");
 | 
			
		||||
	ERR_print_errors(err);
 | 
			
		||||
	if (ctx)
 | 
			
		||||
		EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
	if (pkey)
 | 
			
		||||
		EVP_PKEY_free(pkey);
 | 
			
		||||
	return 0;
 | 
			
		||||
 err:
 | 
			
		||||
    BIO_puts(err, "Error initializing context\n");
 | 
			
		||||
    ERR_print_errors(err);
 | 
			
		||||
    if (ctx)
 | 
			
		||||
        EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
    if (pkey)
 | 
			
		||||
        EVP_PKEY_free(pkey);
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
 | 
			
		||||
			const char *algname, ENGINE *e, int do_param)
 | 
			
		||||
	{
 | 
			
		||||
	EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
	const EVP_PKEY_ASN1_METHOD *ameth;
 | 
			
		||||
	ENGINE *tmpeng = NULL;
 | 
			
		||||
	int pkey_id;
 | 
			
		||||
                 const char *algname, ENGINE *e, int do_param)
 | 
			
		||||
{
 | 
			
		||||
    EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
    const EVP_PKEY_ASN1_METHOD *ameth;
 | 
			
		||||
    ENGINE *tmpeng = NULL;
 | 
			
		||||
    int pkey_id;
 | 
			
		||||
 | 
			
		||||
	if (*pctx)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(err, "Algorithm already set!\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
    if (*pctx) {
 | 
			
		||||
        BIO_puts(err, "Algorithm already set!\n");
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ameth = EVP_PKEY_asn1_find_str(&tmpeng, algname, -1);
 | 
			
		||||
    ameth = EVP_PKEY_asn1_find_str(&tmpeng, algname, -1);
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	if (!ameth && e)
 | 
			
		||||
		ameth = ENGINE_get_pkey_asn1_meth_str(e, algname, -1);
 | 
			
		||||
    if (!ameth && e)
 | 
			
		||||
        ameth = ENGINE_get_pkey_asn1_meth_str(e, algname, -1);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (!ameth)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Algorithm %s not found\n", algname);
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
    if (!ameth) {
 | 
			
		||||
        BIO_printf(bio_err, "Algorithm %s not found\n", algname);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_clear_error();
 | 
			
		||||
    ERR_clear_error();
 | 
			
		||||
 | 
			
		||||
	EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth);
 | 
			
		||||
    EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth);
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	if (tmpeng)
 | 
			
		||||
		ENGINE_finish(tmpeng);
 | 
			
		||||
    if (tmpeng)
 | 
			
		||||
        ENGINE_finish(tmpeng);
 | 
			
		||||
#endif
 | 
			
		||||
	ctx = EVP_PKEY_CTX_new_id(pkey_id, e);
 | 
			
		||||
    ctx = EVP_PKEY_CTX_new_id(pkey_id, e);
 | 
			
		||||
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
		goto err;
 | 
			
		||||
	if (do_param)
 | 
			
		||||
		{
 | 
			
		||||
		if (EVP_PKEY_paramgen_init(ctx) <= 0)
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (EVP_PKEY_keygen_init(ctx) <= 0)
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
    if (!ctx)
 | 
			
		||||
        goto err;
 | 
			
		||||
    if (do_param) {
 | 
			
		||||
        if (EVP_PKEY_paramgen_init(ctx) <= 0)
 | 
			
		||||
            goto err;
 | 
			
		||||
    } else {
 | 
			
		||||
        if (EVP_PKEY_keygen_init(ctx) <= 0)
 | 
			
		||||
            goto err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	*pctx = ctx;
 | 
			
		||||
	return 1;
 | 
			
		||||
    *pctx = ctx;
 | 
			
		||||
    return 1;
 | 
			
		||||
 | 
			
		||||
	err:
 | 
			
		||||
	BIO_printf(err, "Error initializing %s context\n", algname);
 | 
			
		||||
	ERR_print_errors(err);
 | 
			
		||||
	if (ctx)
 | 
			
		||||
		EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
	return 0;
 | 
			
		||||
 err:
 | 
			
		||||
    BIO_printf(err, "Error initializing %s context\n", algname);
 | 
			
		||||
    ERR_print_errors(err);
 | 
			
		||||
    if (ctx)
 | 
			
		||||
        EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int genpkey_cb(EVP_PKEY_CTX *ctx)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
	BIO *b = EVP_PKEY_CTX_get_app_data(ctx);
 | 
			
		||||
	int p;
 | 
			
		||||
	p = EVP_PKEY_CTX_get_keygen_info(ctx, 0);
 | 
			
		||||
	if (p == 0) c='.';
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write(b,&c,1);
 | 
			
		||||
	(void)BIO_flush(b);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
{
 | 
			
		||||
    char c = '*';
 | 
			
		||||
    BIO *b = EVP_PKEY_CTX_get_app_data(ctx);
 | 
			
		||||
    int p;
 | 
			
		||||
    p = EVP_PKEY_CTX_get_keygen_info(ctx, 0);
 | 
			
		||||
    if (p == 0)
 | 
			
		||||
        c = '.';
 | 
			
		||||
    if (p == 1)
 | 
			
		||||
        c = '+';
 | 
			
		||||
    if (p == 2)
 | 
			
		||||
        c = '*';
 | 
			
		||||
    if (p == 3)
 | 
			
		||||
        c = '\n';
 | 
			
		||||
    BIO_write(b, &c, 1);
 | 
			
		||||
    (void)BIO_flush(b);
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										525
									
								
								apps/genrsa.c
									
									
									
									
									
								
							
							
						
						
									
										525
									
								
								apps/genrsa.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -57,285 +57,292 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
 | 
			
		||||
 * deprecated functions for openssl-internal code */
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#undef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/rsa.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include <sys/types.h>
 | 
			
		||||
# include <sys/stat.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
# include <openssl/rsa.h>
 | 
			
		||||
# include <openssl/evp.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
# include <openssl/rand.h>
 | 
			
		||||
 | 
			
		||||
#define DEFBITS	512
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG genrsa_main
 | 
			
		||||
# define DEFBITS 2048
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG genrsa_main
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
static int genrsa_cb(int p, int n, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	BN_GENCB cb;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	int non_fips_allow = 0;
 | 
			
		||||
	int i,num=DEFBITS;
 | 
			
		||||
	long l;
 | 
			
		||||
	const EVP_CIPHER *enc=NULL;
 | 
			
		||||
	unsigned long f4=RSA_F4;
 | 
			
		||||
	char *outfile=NULL;
 | 
			
		||||
	char *passargout = NULL, *passout = NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	char *inrand=NULL;
 | 
			
		||||
	BIO *out=NULL;
 | 
			
		||||
	BIGNUM *bn = BN_new();
 | 
			
		||||
	RSA *rsa = NULL;
 | 
			
		||||
{
 | 
			
		||||
    BN_GENCB *cb = NULL;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    int non_fips_allow = 0;
 | 
			
		||||
    int num = DEFBITS;
 | 
			
		||||
    const EVP_CIPHER *enc = NULL;
 | 
			
		||||
    unsigned long f4 = RSA_F4;
 | 
			
		||||
    char *outfile = NULL;
 | 
			
		||||
    char *passargout = NULL, *passout = NULL;
 | 
			
		||||
    char *hexe, *dece;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    char *inrand = NULL;
 | 
			
		||||
    BIO *out = NULL;
 | 
			
		||||
    BIGNUM *bn = BN_new();
 | 
			
		||||
    RSA *rsa = NULL;
 | 
			
		||||
    if (!bn)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
	if(!bn) goto err;
 | 
			
		||||
    cb = BN_GENCB_new();
 | 
			
		||||
    if (!cb)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
	BN_GENCB_set(&cb, genrsa_cb, bio_err);
 | 
			
		||||
    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);
 | 
			
		||||
    BN_GENCB_set(cb, genrsa_cb, bio_err);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto err;
 | 
			
		||||
	if ((out=BIO_new(BIO_s_file())) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to create BIO for output\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	argv++;
 | 
			
		||||
	argc--;
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (argc <= 0) break;
 | 
			
		||||
		if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-3") == 0)
 | 
			
		||||
			f4=3;
 | 
			
		||||
		else if (strcmp(*argv,"-F4") == 0 || strcmp(*argv,"-f4") == 0)
 | 
			
		||||
			f4=RSA_F4;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			inrand= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
		else if (strcmp(*argv,"-des") == 0)
 | 
			
		||||
			enc=EVP_des_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-des3") == 0)
 | 
			
		||||
			enc=EVP_des_ede3_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		else if (strcmp(*argv,"-idea") == 0)
 | 
			
		||||
			enc=EVP_idea_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		else if (strcmp(*argv,"-seed") == 0)
 | 
			
		||||
			enc=EVP_seed_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		else if (strcmp(*argv,"-aes128") == 0)
 | 
			
		||||
			enc=EVP_aes_128_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-aes192") == 0)
 | 
			
		||||
			enc=EVP_aes_192_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-aes256") == 0)
 | 
			
		||||
			enc=EVP_aes_256_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
		else if (strcmp(*argv,"-camellia128") == 0)
 | 
			
		||||
			enc=EVP_camellia_128_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-camellia192") == 0)
 | 
			
		||||
			enc=EVP_camellia_192_cbc();
 | 
			
		||||
		else if (strcmp(*argv,"-camellia256") == 0)
 | 
			
		||||
			enc=EVP_camellia_256_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-non-fips-allow") == 0)
 | 
			
		||||
			non_fips_allow = 1;
 | 
			
		||||
		else
 | 
			
		||||
			break;
 | 
			
		||||
		argv++;
 | 
			
		||||
		argc--;
 | 
			
		||||
		}
 | 
			
		||||
	if ((argc >= 1) && ((sscanf(*argv,"%d",&num) == 0) || (num < 0)))
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"usage: genrsa [args] [numbits]\n");
 | 
			
		||||
		BIO_printf(bio_err," -des            encrypt the generated key with DES in cbc mode\n");
 | 
			
		||||
		BIO_printf(bio_err," -des3           encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		BIO_printf(bio_err," -idea           encrypt the generated key with IDEA in cbc mode\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		BIO_printf(bio_err," -seed\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc seed\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
		BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -out file       output the key to 'file\n");
 | 
			
		||||
		BIO_printf(bio_err," -passout arg    output file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err," -f4             use F4 (0x10001) for the E value\n");
 | 
			
		||||
		BIO_printf(bio_err," -3              use 3 for the E value\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," -engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err,"                 load the file (or the files in the directory) into\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 the random number generator\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto err;
 | 
			
		||||
    if ((out = BIO_new(BIO_s_file())) == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to create BIO for output\n");
 | 
			
		||||
        goto err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
    argv++;
 | 
			
		||||
    argc--;
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (argc <= 0)
 | 
			
		||||
            break;
 | 
			
		||||
        if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-3") == 0)
 | 
			
		||||
            f4 = 3;
 | 
			
		||||
        else if (strcmp(*argv, "-F4") == 0 || strcmp(*argv, "-f4") == 0)
 | 
			
		||||
            f4 = RSA_F4;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-rand") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            inrand = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# ifndef OPENSSL_NO_DES
 | 
			
		||||
        else if (strcmp(*argv, "-des") == 0)
 | 
			
		||||
            enc = EVP_des_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-des3") == 0)
 | 
			
		||||
            enc = EVP_des_ede3_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_IDEA
 | 
			
		||||
        else if (strcmp(*argv, "-idea") == 0)
 | 
			
		||||
            enc = EVP_idea_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_SEED
 | 
			
		||||
        else if (strcmp(*argv, "-seed") == 0)
 | 
			
		||||
            enc = EVP_seed_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_AES
 | 
			
		||||
        else if (strcmp(*argv, "-aes128") == 0)
 | 
			
		||||
            enc = EVP_aes_128_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-aes192") == 0)
 | 
			
		||||
            enc = EVP_aes_192_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-aes256") == 0)
 | 
			
		||||
            enc = EVP_aes_256_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
        else if (strcmp(*argv, "-camellia128") == 0)
 | 
			
		||||
            enc = EVP_camellia_128_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-camellia192") == 0)
 | 
			
		||||
            enc = EVP_camellia_192_cbc();
 | 
			
		||||
        else if (strcmp(*argv, "-camellia256") == 0)
 | 
			
		||||
            enc = EVP_camellia_256_cbc();
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-passout") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargout = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-non-fips-allow") == 0)
 | 
			
		||||
            non_fips_allow = 1;
 | 
			
		||||
        else
 | 
			
		||||
            break;
 | 
			
		||||
        argv++;
 | 
			
		||||
        argc--;
 | 
			
		||||
    }
 | 
			
		||||
    if ((argc >= 1) && ((sscanf(*argv, "%d", &num) == 0) || (num < 0))) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "usage: genrsa [args] [numbits]\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -des            encrypt the generated key with DES in cbc mode\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -des3           encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
 | 
			
		||||
# ifndef OPENSSL_NO_IDEA
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -idea           encrypt the generated key with IDEA in cbc mode\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_SEED
 | 
			
		||||
        BIO_printf(bio_err, " -seed\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc seed\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_AES
 | 
			
		||||
        BIO_printf(bio_err, " -aes128, -aes192, -aes256\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
        BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
# endif
 | 
			
		||||
        BIO_printf(bio_err, " -out file       output the key to 'file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -passout arg    output file pass phrase source\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -f4             use F4 (0x10001) for the E value\n");
 | 
			
		||||
        BIO_printf(bio_err, " -3              use 3 for the E value\n");
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
# endif
 | 
			
		||||
        BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR,
 | 
			
		||||
                   LIST_SEPARATOR_CHAR);
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 load the file (or the files in the directory) into\n");
 | 
			
		||||
        BIO_printf(bio_err, "                 the random number generator\n");
 | 
			
		||||
        goto err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto err;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
        goto err;
 | 
			
		||||
    }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
 | 
			
		||||
		&& !RAND_status())
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
		}
 | 
			
		||||
	if (inrand != NULL)
 | 
			
		||||
		BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
			app_RAND_load_files(inrand));
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto err;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	BIO_printf(bio_err,"Generating RSA private key, %d bit long modulus\n",
 | 
			
		||||
		num);
 | 
			
		||||
#ifdef OPENSSL_NO_ENGINE
 | 
			
		||||
	rsa = RSA_new();
 | 
			
		||||
#else
 | 
			
		||||
	rsa = RSA_new_method(e);
 | 
			
		||||
#endif
 | 
			
		||||
	if (!rsa)
 | 
			
		||||
		goto err;
 | 
			
		||||
    if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
 | 
			
		||||
        && !RAND_status()) {
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "warning, not much extra random data, consider using the -rand option\n");
 | 
			
		||||
    }
 | 
			
		||||
    if (inrand != NULL)
 | 
			
		||||
        BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
 | 
			
		||||
                   app_RAND_load_files(inrand));
 | 
			
		||||
 | 
			
		||||
	if (non_fips_allow)
 | 
			
		||||
		rsa->flags |= RSA_FLAG_NON_FIPS_ALLOW;
 | 
			
		||||
    BIO_printf(bio_err, "Generating RSA private key, %d bit long modulus\n",
 | 
			
		||||
               num);
 | 
			
		||||
# ifdef OPENSSL_NO_ENGINE
 | 
			
		||||
    rsa = RSA_new();
 | 
			
		||||
# else
 | 
			
		||||
    rsa = RSA_new_method(e);
 | 
			
		||||
# endif
 | 
			
		||||
    if (!rsa)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
	if(!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, &cb))
 | 
			
		||||
		goto err;
 | 
			
		||||
		
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
    if (non_fips_allow)
 | 
			
		||||
        rsa->flags |= RSA_FLAG_NON_FIPS_ALLOW;
 | 
			
		||||
 | 
			
		||||
	/* We need to do the following for when the base number size is <
 | 
			
		||||
	 * long, esp windows 3.1 :-(. */
 | 
			
		||||
	l=0L;
 | 
			
		||||
	for (i=0; i<rsa->e->top; i++)
 | 
			
		||||
		{
 | 
			
		||||
#ifndef SIXTY_FOUR_BIT
 | 
			
		||||
		l<<=BN_BITS4;
 | 
			
		||||
		l<<=BN_BITS4;
 | 
			
		||||
#endif
 | 
			
		||||
		l+=rsa->e->d[i];
 | 
			
		||||
		}
 | 
			
		||||
	BIO_printf(bio_err,"e is %ld (0x%lX)\n",l,l);
 | 
			
		||||
	{
 | 
			
		||||
	PW_CB_DATA cb_data;
 | 
			
		||||
	cb_data.password = passout;
 | 
			
		||||
	cb_data.prompt_info = outfile;
 | 
			
		||||
	if (!PEM_write_bio_RSAPrivateKey(out,rsa,enc,NULL,0,
 | 
			
		||||
		(pem_password_cb *)password_callback,&cb_data))
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
    if (!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, cb))
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
err:
 | 
			
		||||
	if (bn) BN_free(bn);
 | 
			
		||||
	if (rsa) RSA_free(rsa);
 | 
			
		||||
	if (out) BIO_free_all(out);
 | 
			
		||||
	if(passout) OPENSSL_free(passout);
 | 
			
		||||
	if (ret != 0)
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	char c='*';
 | 
			
		||||
    hexe = BN_bn2hex(rsa->e);
 | 
			
		||||
    dece = BN_bn2dec(rsa->e);
 | 
			
		||||
    if (hexe && dece) {
 | 
			
		||||
        BIO_printf(bio_err, "e is %s (0x%s)\n", dece, hexe);
 | 
			
		||||
    }
 | 
			
		||||
    if (hexe)
 | 
			
		||||
        OPENSSL_free(hexe);
 | 
			
		||||
    if (dece)
 | 
			
		||||
        OPENSSL_free(dece);
 | 
			
		||||
    {
 | 
			
		||||
        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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (p == 0) c='.';
 | 
			
		||||
	if (p == 1) c='+';
 | 
			
		||||
	if (p == 2) c='*';
 | 
			
		||||
	if (p == 3) c='\n';
 | 
			
		||||
	BIO_write(cb->arg,&c,1);
 | 
			
		||||
	(void)BIO_flush(cb->arg);
 | 
			
		||||
#ifdef LINT
 | 
			
		||||
	p=n;
 | 
			
		||||
#endif
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_RSA */
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 err:
 | 
			
		||||
    if (bn)
 | 
			
		||||
        BN_free(bn);
 | 
			
		||||
    if (cb)
 | 
			
		||||
        BN_GENCB_free(cb);
 | 
			
		||||
    if (rsa)
 | 
			
		||||
        RSA_free(rsa);
 | 
			
		||||
    if (out)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (passout)
 | 
			
		||||
        OPENSSL_free(passout);
 | 
			
		||||
    if (ret != 0)
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int genrsa_cb(int p, int n, BN_GENCB *cb)
 | 
			
		||||
{
 | 
			
		||||
    char c = '*';
 | 
			
		||||
 | 
			
		||||
    if (p == 0)
 | 
			
		||||
        c = '.';
 | 
			
		||||
    if (p == 1)
 | 
			
		||||
        c = '+';
 | 
			
		||||
    if (p == 2)
 | 
			
		||||
        c = '*';
 | 
			
		||||
    if (p == 3)
 | 
			
		||||
        c = '\n';
 | 
			
		||||
    BIO_write(BN_GENCB_get_arg(cb), &c, 1);
 | 
			
		||||
    (void)BIO_flush(BN_GENCB_get_arg(cb));
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
#else                           /* !OPENSSL_NO_RSA */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										181
									
								
								apps/nseq.c
									
									
									
									
									
								
							
							
						
						
									
										181
									
								
								apps/nseq.c
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
/* nseq.c */
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 1999.
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 1999.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -10,7 +11,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -69,99 +70,101 @@ int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	int toseq = 0;
 | 
			
		||||
	X509 *x509 = NULL;
 | 
			
		||||
	NETSCAPE_CERT_SEQUENCE *seq = NULL;
 | 
			
		||||
	int i, ret = 1;
 | 
			
		||||
	int badarg = 0;
 | 
			
		||||
	if (bio_err == NULL) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	args = argv + 1;
 | 
			
		||||
	while (!badarg && *args && *args[0] == '-') {
 | 
			
		||||
		if (!strcmp (*args, "-toseq")) toseq = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-in")) {
 | 
			
		||||
			if (args[1]) {
 | 
			
		||||
				args++;
 | 
			
		||||
				infile = *args;
 | 
			
		||||
			} else badarg = 1;
 | 
			
		||||
		} else if (!strcmp (*args, "-out")) {
 | 
			
		||||
			if (args[1]) {
 | 
			
		||||
				args++;
 | 
			
		||||
				outfile = *args;
 | 
			
		||||
			} else badarg = 1;
 | 
			
		||||
		} else badarg = 1;
 | 
			
		||||
		args++;
 | 
			
		||||
	}
 | 
			
		||||
    char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int toseq = 0;
 | 
			
		||||
    X509 *x509 = NULL;
 | 
			
		||||
    NETSCAPE_CERT_SEQUENCE *seq = NULL;
 | 
			
		||||
    int i, ret = 1;
 | 
			
		||||
    int badarg = 0;
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    args = argv + 1;
 | 
			
		||||
    while (!badarg && *args && *args[0] == '-') {
 | 
			
		||||
        if (!strcmp(*args, "-toseq"))
 | 
			
		||||
            toseq = 1;
 | 
			
		||||
        else if (!strcmp(*args, "-in")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                infile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-out")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                outfile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else
 | 
			
		||||
            badarg = 1;
 | 
			
		||||
        args++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badarg) {
 | 
			
		||||
		BIO_printf (bio_err, "Netscape certificate sequence utility\n");
 | 
			
		||||
		BIO_printf (bio_err, "Usage nseq [options]\n");
 | 
			
		||||
		BIO_printf (bio_err, "where options are\n");
 | 
			
		||||
		BIO_printf (bio_err, "-in file  input file\n");
 | 
			
		||||
		BIO_printf (bio_err, "-out file output file\n");
 | 
			
		||||
		BIO_printf (bio_err, "-toseq    output NS Sequence file\n");
 | 
			
		||||
		OPENSSL_EXIT(1);
 | 
			
		||||
	}
 | 
			
		||||
    if (badarg) {
 | 
			
		||||
        BIO_printf(bio_err, "Netscape certificate sequence utility\n");
 | 
			
		||||
        BIO_printf(bio_err, "Usage nseq [options]\n");
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, "-in file  input file\n");
 | 
			
		||||
        BIO_printf(bio_err, "-out file output file\n");
 | 
			
		||||
        BIO_printf(bio_err, "-toseq    output NS Sequence file\n");
 | 
			
		||||
        OPENSSL_EXIT(1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (infile) {
 | 
			
		||||
		if (!(in = BIO_new_file (infile, "r"))) {
 | 
			
		||||
			BIO_printf (bio_err,
 | 
			
		||||
				 "Can't open input file %s\n", infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	} else in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
    if (infile) {
 | 
			
		||||
        if (!(in = BIO_new_file(infile, "r"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open input file %s\n", infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else
 | 
			
		||||
        in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (outfile) {
 | 
			
		||||
		if (!(out = BIO_new_file (outfile, "w"))) {
 | 
			
		||||
			BIO_printf (bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "w"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open output file %s\n", outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
	if (toseq) {
 | 
			
		||||
		seq = NETSCAPE_CERT_SEQUENCE_new();
 | 
			
		||||
		seq->certs = sk_X509_new_null();
 | 
			
		||||
		while((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL))) 
 | 
			
		||||
		    sk_X509_push(seq->certs,x509);
 | 
			
		||||
    }
 | 
			
		||||
    if (toseq) {
 | 
			
		||||
        seq = NETSCAPE_CERT_SEQUENCE_new();
 | 
			
		||||
        seq->certs = sk_X509_new_null();
 | 
			
		||||
        while ((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL)))
 | 
			
		||||
            sk_X509_push(seq->certs, x509);
 | 
			
		||||
 | 
			
		||||
		if(!sk_X509_num(seq->certs))
 | 
			
		||||
		{
 | 
			
		||||
			BIO_printf (bio_err, "Error reading certs file %s\n", infile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		PEM_write_bio_NETSCAPE_CERT_SEQUENCE(out, seq);
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
        if (!sk_X509_num(seq->certs)) {
 | 
			
		||||
            BIO_printf(bio_err, "Error reading certs file %s\n", infile);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        PEM_write_bio_NETSCAPE_CERT_SEQUENCE(out, seq);
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!(seq = PEM_read_bio_NETSCAPE_CERT_SEQUENCE(in, NULL, NULL, NULL))) {
 | 
			
		||||
		BIO_printf (bio_err, "Error reading sequence file %s\n", infile);
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    if (!(seq = PEM_read_bio_NETSCAPE_CERT_SEQUENCE(in, NULL, NULL, NULL))) {
 | 
			
		||||
        BIO_printf(bio_err, "Error reading sequence file %s\n", infile);
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	for(i = 0; i < sk_X509_num(seq->certs); i++) {
 | 
			
		||||
		x509 = sk_X509_value(seq->certs, i);
 | 
			
		||||
		dump_cert_text(out, x509);
 | 
			
		||||
		PEM_write_bio_X509(out, x509);
 | 
			
		||||
	}
 | 
			
		||||
	ret = 0;
 | 
			
		||||
end:
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	NETSCAPE_CERT_SEQUENCE_free(seq);
 | 
			
		||||
    for (i = 0; i < sk_X509_num(seq->certs); i++) {
 | 
			
		||||
        x509 = sk_X509_value(seq->certs, i);
 | 
			
		||||
        dump_cert_text(out, x509);
 | 
			
		||||
        PEM_write_bio_X509(out, x509);
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    NETSCAPE_CERT_SEQUENCE_free(seq);
 | 
			
		||||
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2415
									
								
								apps/ocsp.c
									
									
									
									
									
								
							
							
						
						
									
										2415
									
								
								apps/ocsp.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -44,7 +44,7 @@ certs		= $dir.certs]		# Where the issued certs are kept
 | 
			
		||||
crl_dir		= $dir.crl]		# Where the issued crl are kept
 | 
			
		||||
database	= $dir]index.txt	# database index file.
 | 
			
		||||
#unique_subject	= no			# Set to 'no' to allow creation of
 | 
			
		||||
					# several ctificates with same subject.
 | 
			
		||||
					# several certs with same subject.
 | 
			
		||||
new_certs_dir	= $dir.newcerts]		# default place for new certs.
 | 
			
		||||
 | 
			
		||||
certificate	= $dir]cacert.pem 	# The CA certificate
 | 
			
		||||
@@ -55,7 +55,7 @@ crl		= $dir]crl.pem 		# The current CRL
 | 
			
		||||
private_key	= $dir.private]cakey.pem# The private key
 | 
			
		||||
RANDFILE	= $dir.private].rand	# private random number file
 | 
			
		||||
 | 
			
		||||
x509_extensions	= usr_cert		# The extentions to add to the cert
 | 
			
		||||
x509_extensions	= usr_cert		# The extensions to add to the cert
 | 
			
		||||
 | 
			
		||||
# Comment out the following two lines for the "traditional"
 | 
			
		||||
# (and highly broken) format.
 | 
			
		||||
@@ -103,11 +103,11 @@ emailAddress		= optional
 | 
			
		||||
 | 
			
		||||
####################################################################
 | 
			
		||||
[ req ]
 | 
			
		||||
default_bits		= 1024
 | 
			
		||||
default_bits		= 2048
 | 
			
		||||
default_keyfile 	= privkey.pem
 | 
			
		||||
distinguished_name	= req_distinguished_name
 | 
			
		||||
attributes		= req_attributes
 | 
			
		||||
x509_extensions	= v3_ca	# The extentions to add to the self signed cert
 | 
			
		||||
x509_extensions	= v3_ca	# The extensions to add to the self signed cert
 | 
			
		||||
 | 
			
		||||
# Passwords for private keys if not present they will be prompted for
 | 
			
		||||
# input_password = secret
 | 
			
		||||
@@ -145,7 +145,7 @@ localityName			= Locality Name (eg, city)
 | 
			
		||||
organizationalUnitName		= Organizational Unit Name (eg, section)
 | 
			
		||||
#organizationalUnitName_default	=
 | 
			
		||||
 | 
			
		||||
commonName			= Common Name (eg, YOUR name)
 | 
			
		||||
commonName			= Common Name (e.g. server FQDN or YOUR name)
 | 
			
		||||
commonName_max			= 64
 | 
			
		||||
 | 
			
		||||
emailAddress			= Email Address
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1012
									
								
								apps/openssl.c
									
									
									
									
									
								
							
							
						
						
									
										1012
									
								
								apps/openssl.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -44,7 +44,7 @@ certs		= $dir/certs		# Where the issued certs are kept
 | 
			
		||||
crl_dir		= $dir/crl		# Where the issued crl are kept
 | 
			
		||||
database	= $dir/index.txt	# database index file.
 | 
			
		||||
#unique_subject	= no			# Set to 'no' to allow creation of
 | 
			
		||||
					# several ctificates with same subject.
 | 
			
		||||
					# several certs with same subject.
 | 
			
		||||
new_certs_dir	= $dir/newcerts		# default place for new certs.
 | 
			
		||||
 | 
			
		||||
certificate	= $dir/cacert.pem 	# The CA certificate
 | 
			
		||||
@@ -55,7 +55,7 @@ crl		= $dir/crl.pem 		# The current CRL
 | 
			
		||||
private_key	= $dir/private/cakey.pem# The private key
 | 
			
		||||
RANDFILE	= $dir/private/.rand	# private random number file
 | 
			
		||||
 | 
			
		||||
x509_extensions	= usr_cert		# The extentions to add to the cert
 | 
			
		||||
x509_extensions	= usr_cert		# The extensions to add to the cert
 | 
			
		||||
 | 
			
		||||
# Comment out the following two lines for the "traditional"
 | 
			
		||||
# (and highly broken) format.
 | 
			
		||||
@@ -103,11 +103,11 @@ emailAddress		= optional
 | 
			
		||||
 | 
			
		||||
####################################################################
 | 
			
		||||
[ req ]
 | 
			
		||||
default_bits		= 1024
 | 
			
		||||
default_bits		= 2048
 | 
			
		||||
default_keyfile 	= privkey.pem
 | 
			
		||||
distinguished_name	= req_distinguished_name
 | 
			
		||||
attributes		= req_attributes
 | 
			
		||||
x509_extensions	= v3_ca	# The extentions to add to the self signed cert
 | 
			
		||||
x509_extensions	= v3_ca	# The extensions to add to the self signed cert
 | 
			
		||||
 | 
			
		||||
# Passwords for private keys if not present they will be prompted for
 | 
			
		||||
# input_password = secret
 | 
			
		||||
@@ -145,7 +145,7 @@ localityName			= Locality Name (eg, city)
 | 
			
		||||
organizationalUnitName		= Organizational Unit Name (eg, section)
 | 
			
		||||
#organizationalUnitName_default	=
 | 
			
		||||
 | 
			
		||||
commonName			= Common Name (eg, YOUR name)
 | 
			
		||||
commonName			= Common Name (e.g. server FQDN or YOUR name)
 | 
			
		||||
commonName_max			= 64
 | 
			
		||||
 | 
			
		||||
emailAddress			= Email Address
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										876
									
								
								apps/passwd.c
									
									
									
									
									
								
							
							
						
						
									
										876
									
								
								apps/passwd.c
									
									
									
									
									
								
							@@ -6,44 +6,44 @@
 | 
			
		||||
 | 
			
		||||
#if !defined(OPENSSL_NO_DES) || !defined(NO_MD5CRYPT_1)
 | 
			
		||||
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
# include <assert.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
# include <openssl/des.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef NO_MD5CRYPT_1
 | 
			
		||||
# include <openssl/md5.h>
 | 
			
		||||
#endif
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/evp.h>
 | 
			
		||||
# include <openssl/rand.h>
 | 
			
		||||
# ifndef OPENSSL_NO_DES
 | 
			
		||||
#  include <openssl/des.h>
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef NO_MD5CRYPT_1
 | 
			
		||||
#  include <openssl/md5.h>
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG passwd_main
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG passwd_main
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static unsigned const char cov_2char[64]={
 | 
			
		||||
	/* from crypto/des/fcrypt.c */
 | 
			
		||||
	0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35,
 | 
			
		||||
	0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,
 | 
			
		||||
	0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,
 | 
			
		||||
	0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,
 | 
			
		||||
	0x55,0x56,0x57,0x58,0x59,0x5A,0x61,0x62,
 | 
			
		||||
	0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,
 | 
			
		||||
	0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,
 | 
			
		||||
	0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A
 | 
			
		||||
static unsigned const char cov_2char[64] = {
 | 
			
		||||
    /* from crypto/des/fcrypt.c */
 | 
			
		||||
    0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,
 | 
			
		||||
    0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44,
 | 
			
		||||
    0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C,
 | 
			
		||||
    0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,
 | 
			
		||||
    0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62,
 | 
			
		||||
    0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A,
 | 
			
		||||
    0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72,
 | 
			
		||||
    0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
 | 
			
		||||
	char *passwd, BIO *out, int quiet, int table, int reverse,
 | 
			
		||||
	size_t pw_maxlen, int usecrypt, int use1, int useapr1);
 | 
			
		||||
                     char *passwd, BIO *out, int quiet, int table,
 | 
			
		||||
                     int reverse, size_t pw_maxlen, int usecrypt, int use1,
 | 
			
		||||
                     int useapr1);
 | 
			
		||||
 | 
			
		||||
/* -crypt        - standard Unix password algorithm (default)
 | 
			
		||||
/*-
 | 
			
		||||
 * -crypt        - standard Unix password algorithm (default)
 | 
			
		||||
 * -1            - MD5-based password algorithm
 | 
			
		||||
 * -apr1         - MD5-based password algorithm, Apache variant
 | 
			
		||||
 * -salt string  - salt
 | 
			
		||||
@@ -58,455 +58,437 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int ret = 1;
 | 
			
		||||
	char *infile = NULL;
 | 
			
		||||
	int in_stdin = 0;
 | 
			
		||||
	int in_noverify = 0;
 | 
			
		||||
	char *salt = NULL, *passwd = NULL, **passwds = NULL;
 | 
			
		||||
	char *salt_malloc = NULL, *passwd_malloc = NULL;
 | 
			
		||||
	size_t passwd_malloc_size = 0;
 | 
			
		||||
	int pw_source_defined = 0;
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	int i, badopt, opt_done;
 | 
			
		||||
	int passed_salt = 0, quiet = 0, table = 0, reverse = 0;
 | 
			
		||||
	int usecrypt = 0, use1 = 0, useapr1 = 0;
 | 
			
		||||
	size_t pw_maxlen = 0;
 | 
			
		||||
{
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    char *infile = NULL;
 | 
			
		||||
    int in_stdin = 0;
 | 
			
		||||
    int in_noverify = 0;
 | 
			
		||||
    char *salt = NULL, *passwd = NULL, **passwds = NULL;
 | 
			
		||||
    char *salt_malloc = NULL, *passwd_malloc = NULL;
 | 
			
		||||
    size_t passwd_malloc_size = 0;
 | 
			
		||||
    int pw_source_defined = 0;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int i, badopt, opt_done;
 | 
			
		||||
    int passed_salt = 0, quiet = 0, table = 0, reverse = 0;
 | 
			
		||||
    int usecrypt = 0, use1 = 0, useapr1 = 0;
 | 
			
		||||
    size_t pw_maxlen = 0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto err;
 | 
			
		||||
	out = BIO_new(BIO_s_file());
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
		goto err;
 | 
			
		||||
	BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
	{
 | 
			
		||||
	BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
	out = BIO_push(tmpbio, out);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto err;
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if (out == NULL)
 | 
			
		||||
        goto err;
 | 
			
		||||
    BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
    {
 | 
			
		||||
        BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
        out = BIO_push(tmpbio, out);
 | 
			
		||||
    }
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	badopt = 0, opt_done = 0;
 | 
			
		||||
	i = 0;
 | 
			
		||||
	while (!badopt && !opt_done && argv[++i] != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		if (strcmp(argv[i], "-crypt") == 0)
 | 
			
		||||
			usecrypt = 1;
 | 
			
		||||
		else if (strcmp(argv[i], "-1") == 0)
 | 
			
		||||
			use1 = 1;
 | 
			
		||||
		else if (strcmp(argv[i], "-apr1") == 0)
 | 
			
		||||
			useapr1 = 1;
 | 
			
		||||
		else if (strcmp(argv[i], "-salt") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if ((argv[i+1] != NULL) && (salt == NULL))
 | 
			
		||||
				{
 | 
			
		||||
				passed_salt = 1;
 | 
			
		||||
				salt = argv[++i];
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(argv[i], "-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if ((argv[i+1] != NULL) && !pw_source_defined)
 | 
			
		||||
				{
 | 
			
		||||
				pw_source_defined = 1;
 | 
			
		||||
				infile = argv[++i];
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(argv[i], "-stdin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!pw_source_defined)
 | 
			
		||||
				{
 | 
			
		||||
				pw_source_defined = 1;
 | 
			
		||||
				in_stdin = 1;
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(argv[i], "-noverify") == 0)
 | 
			
		||||
			in_noverify = 1;
 | 
			
		||||
		else if (strcmp(argv[i], "-quiet") == 0)
 | 
			
		||||
			quiet = 1;
 | 
			
		||||
		else if (strcmp(argv[i], "-table") == 0)
 | 
			
		||||
			table = 1;
 | 
			
		||||
		else if (strcmp(argv[i], "-reverse") == 0)
 | 
			
		||||
			reverse = 1;
 | 
			
		||||
		else if (argv[i][0] == '-')
 | 
			
		||||
			badopt = 1;
 | 
			
		||||
		else if (!pw_source_defined)
 | 
			
		||||
			/* non-option arguments, use as passwords */
 | 
			
		||||
			{
 | 
			
		||||
			pw_source_defined = 1;
 | 
			
		||||
			passwds = &argv[i];
 | 
			
		||||
			opt_done = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			badopt = 1;
 | 
			
		||||
		}
 | 
			
		||||
    badopt = 0, opt_done = 0;
 | 
			
		||||
    i = 0;
 | 
			
		||||
    while (!badopt && !opt_done && argv[++i] != NULL) {
 | 
			
		||||
        if (strcmp(argv[i], "-crypt") == 0)
 | 
			
		||||
            usecrypt = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-1") == 0)
 | 
			
		||||
            use1 = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-apr1") == 0)
 | 
			
		||||
            useapr1 = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-salt") == 0) {
 | 
			
		||||
            if ((argv[i + 1] != NULL) && (salt == NULL)) {
 | 
			
		||||
                passed_salt = 1;
 | 
			
		||||
                salt = argv[++i];
 | 
			
		||||
            } else
 | 
			
		||||
                badopt = 1;
 | 
			
		||||
        } else if (strcmp(argv[i], "-in") == 0) {
 | 
			
		||||
            if ((argv[i + 1] != NULL) && !pw_source_defined) {
 | 
			
		||||
                pw_source_defined = 1;
 | 
			
		||||
                infile = argv[++i];
 | 
			
		||||
            } else
 | 
			
		||||
                badopt = 1;
 | 
			
		||||
        } else if (strcmp(argv[i], "-stdin") == 0) {
 | 
			
		||||
            if (!pw_source_defined) {
 | 
			
		||||
                pw_source_defined = 1;
 | 
			
		||||
                in_stdin = 1;
 | 
			
		||||
            } else
 | 
			
		||||
                badopt = 1;
 | 
			
		||||
        } else if (strcmp(argv[i], "-noverify") == 0)
 | 
			
		||||
            in_noverify = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-quiet") == 0)
 | 
			
		||||
            quiet = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-table") == 0)
 | 
			
		||||
            table = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-reverse") == 0)
 | 
			
		||||
            reverse = 1;
 | 
			
		||||
        else if (argv[i][0] == '-')
 | 
			
		||||
            badopt = 1;
 | 
			
		||||
        else if (!pw_source_defined)
 | 
			
		||||
            /* non-option arguments, use as passwords */
 | 
			
		||||
        {
 | 
			
		||||
            pw_source_defined = 1;
 | 
			
		||||
            passwds = &argv[i];
 | 
			
		||||
            opt_done = 1;
 | 
			
		||||
        } else
 | 
			
		||||
            badopt = 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!usecrypt && !use1 && !useapr1) /* use default */
 | 
			
		||||
		usecrypt = 1;
 | 
			
		||||
	if (usecrypt + use1 + useapr1 > 1) /* conflict */
 | 
			
		||||
		badopt = 1;
 | 
			
		||||
    if (!usecrypt && !use1 && !useapr1) /* use default */
 | 
			
		||||
        usecrypt = 1;
 | 
			
		||||
    if (usecrypt + use1 + useapr1 > 1) /* conflict */
 | 
			
		||||
        badopt = 1;
 | 
			
		||||
 | 
			
		||||
	/* reject unsupported algorithms */
 | 
			
		||||
#ifdef OPENSSL_NO_DES
 | 
			
		||||
	if (usecrypt) badopt = 1;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef NO_MD5CRYPT_1
 | 
			
		||||
	if (use1 || useapr1) badopt = 1;
 | 
			
		||||
#endif
 | 
			
		||||
    /* reject unsupported algorithms */
 | 
			
		||||
# ifdef OPENSSL_NO_DES
 | 
			
		||||
    if (usecrypt)
 | 
			
		||||
        badopt = 1;
 | 
			
		||||
# endif
 | 
			
		||||
# ifdef NO_MD5CRYPT_1
 | 
			
		||||
    if (use1 || useapr1)
 | 
			
		||||
        badopt = 1;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	if (badopt) 
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Usage: passwd [options] [passwords]\n");
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
		BIO_printf(bio_err, "-crypt             standard Unix password algorithm (default)\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef NO_MD5CRYPT_1
 | 
			
		||||
		BIO_printf(bio_err, "-1                 MD5-based password algorithm\n");
 | 
			
		||||
		BIO_printf(bio_err, "-apr1              MD5-based password algorithm, Apache variant\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err, "-salt string       use provided salt\n");
 | 
			
		||||
		BIO_printf(bio_err, "-in file           read passwords from file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-stdin             read passwords from stdin\n");
 | 
			
		||||
		BIO_printf(bio_err, "-noverify          never verify when reading password from terminal\n");
 | 
			
		||||
		BIO_printf(bio_err, "-quiet             no warnings\n");
 | 
			
		||||
		BIO_printf(bio_err, "-table             format output as table\n");
 | 
			
		||||
		BIO_printf(bio_err, "-reverse           switch table columns\n");
 | 
			
		||||
		
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
    if (badopt) {
 | 
			
		||||
        BIO_printf(bio_err, "Usage: passwd [options] [passwords]\n");
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
# ifndef OPENSSL_NO_DES
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-crypt             standard Unix password algorithm (default)\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef NO_MD5CRYPT_1
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-1                 MD5-based password algorithm\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-apr1              MD5-based password algorithm, Apache variant\n");
 | 
			
		||||
# endif
 | 
			
		||||
        BIO_printf(bio_err, "-salt string       use provided salt\n");
 | 
			
		||||
        BIO_printf(bio_err, "-in file           read passwords from file\n");
 | 
			
		||||
        BIO_printf(bio_err, "-stdin             read passwords from stdin\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-noverify          never verify when reading password from terminal\n");
 | 
			
		||||
        BIO_printf(bio_err, "-quiet             no warnings\n");
 | 
			
		||||
        BIO_printf(bio_err, "-table             format output as table\n");
 | 
			
		||||
        BIO_printf(bio_err, "-reverse           switch table columns\n");
 | 
			
		||||
 | 
			
		||||
	if ((infile != NULL) || in_stdin)
 | 
			
		||||
		{
 | 
			
		||||
		in = BIO_new(BIO_s_file());
 | 
			
		||||
		if (in == NULL)
 | 
			
		||||
			goto err;
 | 
			
		||||
		if (infile != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			assert(in_stdin == 0);
 | 
			
		||||
			if (BIO_read_filename(in, infile) <= 0)
 | 
			
		||||
				goto err;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			assert(in_stdin);
 | 
			
		||||
			BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if (usecrypt)
 | 
			
		||||
		pw_maxlen = 8;
 | 
			
		||||
	else if (use1 || useapr1)
 | 
			
		||||
		pw_maxlen = 256; /* arbitrary limit, should be enough for most passwords */
 | 
			
		||||
        goto err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (passwds == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		/* no passwords on the command line */
 | 
			
		||||
    if ((infile != NULL) || in_stdin) {
 | 
			
		||||
        in = BIO_new(BIO_s_file());
 | 
			
		||||
        if (in == NULL)
 | 
			
		||||
            goto err;
 | 
			
		||||
        if (infile != NULL) {
 | 
			
		||||
            assert(in_stdin == 0);
 | 
			
		||||
            if (BIO_read_filename(in, infile) <= 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
        } else {
 | 
			
		||||
            assert(in_stdin);
 | 
			
		||||
            BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		passwd_malloc_size = pw_maxlen + 2;
 | 
			
		||||
		/* longer than necessary so that we can warn about truncation */
 | 
			
		||||
		passwd = passwd_malloc = OPENSSL_malloc(passwd_malloc_size);
 | 
			
		||||
		if (passwd_malloc == NULL)
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
    if (usecrypt)
 | 
			
		||||
        pw_maxlen = 8;
 | 
			
		||||
    else if (use1 || useapr1)
 | 
			
		||||
        pw_maxlen = 256;        /* arbitrary limit, should be enough for most
 | 
			
		||||
                                 * passwords */
 | 
			
		||||
 | 
			
		||||
	if ((in == NULL) && (passwds == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		/* build a null-terminated list */
 | 
			
		||||
		static char *passwds_static[2] = {NULL, NULL};
 | 
			
		||||
		
 | 
			
		||||
		passwds = passwds_static;
 | 
			
		||||
		if (in == NULL)
 | 
			
		||||
			if (EVP_read_pw_string(passwd_malloc, passwd_malloc_size, "Password: ", !(passed_salt || in_noverify)) != 0)
 | 
			
		||||
				goto err;
 | 
			
		||||
		passwds[0] = passwd_malloc;
 | 
			
		||||
		}
 | 
			
		||||
    if (passwds == NULL) {
 | 
			
		||||
        /* no passwords on the command line */
 | 
			
		||||
 | 
			
		||||
	if (in == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		assert(passwds != NULL);
 | 
			
		||||
		assert(*passwds != NULL);
 | 
			
		||||
		
 | 
			
		||||
		do /* loop over list of passwords */
 | 
			
		||||
			{
 | 
			
		||||
			passwd = *passwds++;
 | 
			
		||||
			if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out,
 | 
			
		||||
				quiet, table, reverse, pw_maxlen, usecrypt, use1, useapr1))
 | 
			
		||||
				goto err;
 | 
			
		||||
			}
 | 
			
		||||
		while (*passwds != NULL);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		/* in != NULL */
 | 
			
		||||
		{
 | 
			
		||||
		int done;
 | 
			
		||||
        passwd_malloc_size = pw_maxlen + 2;
 | 
			
		||||
        /*
 | 
			
		||||
         * longer than necessary so that we can warn about truncation
 | 
			
		||||
         */
 | 
			
		||||
        passwd = passwd_malloc = OPENSSL_malloc(passwd_malloc_size);
 | 
			
		||||
        if (passwd_malloc == NULL)
 | 
			
		||||
            goto err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		assert (passwd != NULL);
 | 
			
		||||
		do
 | 
			
		||||
			{
 | 
			
		||||
			int r = BIO_gets(in, passwd, pw_maxlen + 1);
 | 
			
		||||
			if (r > 0)
 | 
			
		||||
				{
 | 
			
		||||
				char *c = (strchr(passwd, '\n')) ;
 | 
			
		||||
				if (c != NULL)
 | 
			
		||||
					*c = 0; /* truncate at newline */
 | 
			
		||||
				else
 | 
			
		||||
					{
 | 
			
		||||
					/* ignore rest of line */
 | 
			
		||||
					char trash[BUFSIZ];
 | 
			
		||||
					do
 | 
			
		||||
						r = BIO_gets(in, trash, sizeof trash);
 | 
			
		||||
					while ((r > 0) && (!strchr(trash, '\n')));
 | 
			
		||||
					}
 | 
			
		||||
				
 | 
			
		||||
				if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out,
 | 
			
		||||
					quiet, table, reverse, pw_maxlen, usecrypt, use1, useapr1))
 | 
			
		||||
					goto err;
 | 
			
		||||
				}
 | 
			
		||||
			done = (r <= 0);
 | 
			
		||||
			}
 | 
			
		||||
		while (!done);
 | 
			
		||||
		}
 | 
			
		||||
	ret = 0;
 | 
			
		||||
    if ((in == NULL) && (passwds == NULL)) {
 | 
			
		||||
        /* build a null-terminated list */
 | 
			
		||||
        static char *passwds_static[2] = { NULL, NULL };
 | 
			
		||||
 | 
			
		||||
err:
 | 
			
		||||
	ERR_print_errors(bio_err);
 | 
			
		||||
	if (salt_malloc)
 | 
			
		||||
		OPENSSL_free(salt_malloc);
 | 
			
		||||
	if (passwd_malloc)
 | 
			
		||||
		OPENSSL_free(passwd_malloc);
 | 
			
		||||
	if (in)
 | 
			
		||||
		BIO_free(in);
 | 
			
		||||
	if (out)
 | 
			
		||||
		BIO_free_all(out);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
        passwds = passwds_static;
 | 
			
		||||
        if (in == NULL)
 | 
			
		||||
            if (EVP_read_pw_string
 | 
			
		||||
                (passwd_malloc, passwd_malloc_size, "Password: ",
 | 
			
		||||
                 !(passed_salt || in_noverify)) != 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
        passwds[0] = passwd_malloc;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (in == NULL) {
 | 
			
		||||
        assert(passwds != NULL);
 | 
			
		||||
        assert(*passwds != NULL);
 | 
			
		||||
 | 
			
		||||
#ifndef NO_MD5CRYPT_1
 | 
			
		||||
/* MD5-based password algorithm (should probably be available as a library
 | 
			
		||||
 * function; then the static buffer would not be acceptable).
 | 
			
		||||
 * For magic string "1", this should be compatible to the MD5-based BSD
 | 
			
		||||
 * password algorithm.
 | 
			
		||||
 * For 'magic' string "apr1", this is compatible to the MD5-based Apache
 | 
			
		||||
 * password algorithm.
 | 
			
		||||
 * (Apparently, the Apache password algorithm is identical except that the
 | 
			
		||||
 * 'magic' string was changed -- the laziest application of the NIH principle
 | 
			
		||||
 * I've ever encountered.)
 | 
			
		||||
        do {                    /* loop over list of passwords */
 | 
			
		||||
            passwd = *passwds++;
 | 
			
		||||
            if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out,
 | 
			
		||||
                           quiet, table, reverse, pw_maxlen, usecrypt, use1,
 | 
			
		||||
                           useapr1))
 | 
			
		||||
                goto err;
 | 
			
		||||
        }
 | 
			
		||||
        while (*passwds != NULL);
 | 
			
		||||
    } else
 | 
			
		||||
        /* in != NULL */
 | 
			
		||||
    {
 | 
			
		||||
        int done;
 | 
			
		||||
 | 
			
		||||
        assert(passwd != NULL);
 | 
			
		||||
        do {
 | 
			
		||||
            int r = BIO_gets(in, passwd, pw_maxlen + 1);
 | 
			
		||||
            if (r > 0) {
 | 
			
		||||
                char *c = (strchr(passwd, '\n'));
 | 
			
		||||
                if (c != NULL)
 | 
			
		||||
                    *c = 0;     /* truncate at newline */
 | 
			
		||||
                else {
 | 
			
		||||
                    /* ignore rest of line */
 | 
			
		||||
                    char trash[BUFSIZ];
 | 
			
		||||
                    do
 | 
			
		||||
                        r = BIO_gets(in, trash, sizeof trash);
 | 
			
		||||
                    while ((r > 0) && (!strchr(trash, '\n')));
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out,
 | 
			
		||||
                               quiet, table, reverse, pw_maxlen, usecrypt,
 | 
			
		||||
                               use1, useapr1))
 | 
			
		||||
                    goto err;
 | 
			
		||||
            }
 | 
			
		||||
            done = (r <= 0);
 | 
			
		||||
        }
 | 
			
		||||
        while (!done);
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
 err:
 | 
			
		||||
    ERR_print_errors(bio_err);
 | 
			
		||||
    if (salt_malloc)
 | 
			
		||||
        OPENSSL_free(salt_malloc);
 | 
			
		||||
    if (passwd_malloc)
 | 
			
		||||
        OPENSSL_free(passwd_malloc);
 | 
			
		||||
    if (in)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# ifndef NO_MD5CRYPT_1
 | 
			
		||||
/*
 | 
			
		||||
 * MD5-based password algorithm (should probably be available as a library
 | 
			
		||||
 * function; then the static buffer would not be acceptable). For magic
 | 
			
		||||
 * string "1", this should be compatible to the MD5-based BSD password
 | 
			
		||||
 * algorithm. For 'magic' string "apr1", this is compatible to the MD5-based
 | 
			
		||||
 * Apache password algorithm. (Apparently, the Apache password algorithm is
 | 
			
		||||
 * identical except that the 'magic' string was changed -- the laziest
 | 
			
		||||
 * application of the NIH principle I've ever encountered.)
 | 
			
		||||
 */
 | 
			
		||||
static char *md5crypt(const char *passwd, const char *magic, const char *salt)
 | 
			
		||||
	{
 | 
			
		||||
	static char out_buf[6 + 9 + 24 + 2]; /* "$apr1$..salt..$.......md5hash..........\0" */
 | 
			
		||||
	unsigned char buf[MD5_DIGEST_LENGTH];
 | 
			
		||||
	char *salt_out;
 | 
			
		||||
	int n;
 | 
			
		||||
	unsigned int i;
 | 
			
		||||
	EVP_MD_CTX md,md2;
 | 
			
		||||
	size_t passwd_len, salt_len;
 | 
			
		||||
{
 | 
			
		||||
    /* "$apr1$..salt..$.......md5hash..........\0" */
 | 
			
		||||
    static char out_buf[6 + 9 + 24 + 2];
 | 
			
		||||
    unsigned char buf[MD5_DIGEST_LENGTH];
 | 
			
		||||
    char *salt_out;
 | 
			
		||||
    int n;
 | 
			
		||||
    unsigned int i;
 | 
			
		||||
    EVP_MD_CTX md, md2;
 | 
			
		||||
    size_t passwd_len, salt_len;
 | 
			
		||||
 | 
			
		||||
	passwd_len = strlen(passwd);
 | 
			
		||||
	out_buf[0] = '$';
 | 
			
		||||
	out_buf[1] = 0;
 | 
			
		||||
	assert(strlen(magic) <= 4); /* "1" or "apr1" */
 | 
			
		||||
	strncat(out_buf, magic, 4);
 | 
			
		||||
	strncat(out_buf, "$", 1);
 | 
			
		||||
	strncat(out_buf, salt, 8);
 | 
			
		||||
	assert(strlen(out_buf) <= 6 + 8); /* "$apr1$..salt.." */
 | 
			
		||||
	salt_out = out_buf + 2 + strlen(magic);
 | 
			
		||||
	salt_len = strlen(salt_out);
 | 
			
		||||
	assert(salt_len <= 8);
 | 
			
		||||
	
 | 
			
		||||
	EVP_MD_CTX_init(&md);
 | 
			
		||||
	EVP_DigestInit_ex(&md,EVP_md5(), NULL);
 | 
			
		||||
	EVP_DigestUpdate(&md, passwd, passwd_len);
 | 
			
		||||
	EVP_DigestUpdate(&md, "$", 1);
 | 
			
		||||
	EVP_DigestUpdate(&md, magic, strlen(magic));
 | 
			
		||||
	EVP_DigestUpdate(&md, "$", 1);
 | 
			
		||||
	EVP_DigestUpdate(&md, salt_out, salt_len);
 | 
			
		||||
	
 | 
			
		||||
	EVP_MD_CTX_init(&md2);
 | 
			
		||||
	EVP_DigestInit_ex(&md2,EVP_md5(), NULL);
 | 
			
		||||
	EVP_DigestUpdate(&md2, passwd, passwd_len);
 | 
			
		||||
	EVP_DigestUpdate(&md2, salt_out, salt_len);
 | 
			
		||||
	EVP_DigestUpdate(&md2, passwd, passwd_len);
 | 
			
		||||
	EVP_DigestFinal_ex(&md2, buf, NULL);
 | 
			
		||||
    passwd_len = strlen(passwd);
 | 
			
		||||
    out_buf[0] = '$';
 | 
			
		||||
    out_buf[1] = 0;
 | 
			
		||||
    assert(strlen(magic) <= 4); /* "1" or "apr1" */
 | 
			
		||||
    strncat(out_buf, magic, 4);
 | 
			
		||||
    strncat(out_buf, "$", 1);
 | 
			
		||||
    strncat(out_buf, salt, 8);
 | 
			
		||||
    assert(strlen(out_buf) <= 6 + 8); /* "$apr1$..salt.." */
 | 
			
		||||
    salt_out = out_buf + 2 + strlen(magic);
 | 
			
		||||
    salt_len = strlen(salt_out);
 | 
			
		||||
    assert(salt_len <= 8);
 | 
			
		||||
 | 
			
		||||
	for (i = passwd_len; i > sizeof buf; i -= sizeof buf)
 | 
			
		||||
		EVP_DigestUpdate(&md, buf, sizeof buf);
 | 
			
		||||
	EVP_DigestUpdate(&md, buf, i);
 | 
			
		||||
	
 | 
			
		||||
	n = passwd_len;
 | 
			
		||||
	while (n)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_DigestUpdate(&md, (n & 1) ? "\0" : passwd, 1);
 | 
			
		||||
		n >>= 1;
 | 
			
		||||
		}
 | 
			
		||||
	EVP_DigestFinal_ex(&md, buf, NULL);
 | 
			
		||||
    EVP_MD_CTX_init(&md);
 | 
			
		||||
    EVP_DigestInit_ex(&md, EVP_md5(), NULL);
 | 
			
		||||
    EVP_DigestUpdate(&md, passwd, passwd_len);
 | 
			
		||||
    EVP_DigestUpdate(&md, "$", 1);
 | 
			
		||||
    EVP_DigestUpdate(&md, magic, strlen(magic));
 | 
			
		||||
    EVP_DigestUpdate(&md, "$", 1);
 | 
			
		||||
    EVP_DigestUpdate(&md, salt_out, salt_len);
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < 1000; i++)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_DigestInit_ex(&md2,EVP_md5(), NULL);
 | 
			
		||||
		EVP_DigestUpdate(&md2, (i & 1) ? (unsigned const char *) passwd : buf,
 | 
			
		||||
		                       (i & 1) ? passwd_len : sizeof buf);
 | 
			
		||||
		if (i % 3)
 | 
			
		||||
			EVP_DigestUpdate(&md2, salt_out, salt_len);
 | 
			
		||||
		if (i % 7)
 | 
			
		||||
			EVP_DigestUpdate(&md2, passwd, passwd_len);
 | 
			
		||||
		EVP_DigestUpdate(&md2, (i & 1) ? buf : (unsigned const char *) passwd,
 | 
			
		||||
		                       (i & 1) ? sizeof buf : passwd_len);
 | 
			
		||||
		EVP_DigestFinal_ex(&md2, buf, NULL);
 | 
			
		||||
		}
 | 
			
		||||
	EVP_MD_CTX_cleanup(&md2);
 | 
			
		||||
	
 | 
			
		||||
	 {
 | 
			
		||||
		/* transform buf into output string */
 | 
			
		||||
	
 | 
			
		||||
		unsigned char buf_perm[sizeof buf];
 | 
			
		||||
		int dest, source;
 | 
			
		||||
		char *output;
 | 
			
		||||
    EVP_MD_CTX_init(&md2);
 | 
			
		||||
    EVP_DigestInit_ex(&md2, EVP_md5(), NULL);
 | 
			
		||||
    EVP_DigestUpdate(&md2, passwd, passwd_len);
 | 
			
		||||
    EVP_DigestUpdate(&md2, salt_out, salt_len);
 | 
			
		||||
    EVP_DigestUpdate(&md2, passwd, passwd_len);
 | 
			
		||||
    EVP_DigestFinal_ex(&md2, buf, NULL);
 | 
			
		||||
 | 
			
		||||
		/* silly output permutation */
 | 
			
		||||
		for (dest = 0, source = 0; dest < 14; dest++, source = (source + 6) % 17)
 | 
			
		||||
			buf_perm[dest] = buf[source];
 | 
			
		||||
		buf_perm[14] = buf[5];
 | 
			
		||||
		buf_perm[15] = buf[11];
 | 
			
		||||
#ifndef PEDANTIC /* Unfortunately, this generates a "no effect" warning */
 | 
			
		||||
		assert(16 == sizeof buf_perm);
 | 
			
		||||
#endif
 | 
			
		||||
		
 | 
			
		||||
		output = salt_out + salt_len;
 | 
			
		||||
		assert(output == out_buf + strlen(out_buf));
 | 
			
		||||
		
 | 
			
		||||
		*output++ = '$';
 | 
			
		||||
    for (i = passwd_len; i > sizeof buf; i -= sizeof buf)
 | 
			
		||||
        EVP_DigestUpdate(&md, buf, sizeof buf);
 | 
			
		||||
    EVP_DigestUpdate(&md, buf, i);
 | 
			
		||||
 | 
			
		||||
		for (i = 0; i < 15; i += 3)
 | 
			
		||||
			{
 | 
			
		||||
			*output++ = cov_2char[buf_perm[i+2] & 0x3f];
 | 
			
		||||
			*output++ = cov_2char[((buf_perm[i+1] & 0xf) << 2) |
 | 
			
		||||
				                  (buf_perm[i+2] >> 6)];
 | 
			
		||||
			*output++ = cov_2char[((buf_perm[i] & 3) << 4) |
 | 
			
		||||
				                  (buf_perm[i+1] >> 4)];
 | 
			
		||||
			*output++ = cov_2char[buf_perm[i] >> 2];
 | 
			
		||||
			}
 | 
			
		||||
		assert(i == 15);
 | 
			
		||||
		*output++ = cov_2char[buf_perm[i] & 0x3f];
 | 
			
		||||
		*output++ = cov_2char[buf_perm[i] >> 6];
 | 
			
		||||
		*output = 0;
 | 
			
		||||
		assert(strlen(out_buf) < sizeof(out_buf));
 | 
			
		||||
	 }
 | 
			
		||||
	EVP_MD_CTX_cleanup(&md);
 | 
			
		||||
    n = passwd_len;
 | 
			
		||||
    while (n) {
 | 
			
		||||
        EVP_DigestUpdate(&md, (n & 1) ? "\0" : passwd, 1);
 | 
			
		||||
        n >>= 1;
 | 
			
		||||
    }
 | 
			
		||||
    EVP_DigestFinal_ex(&md, buf, NULL);
 | 
			
		||||
 | 
			
		||||
	return out_buf;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
    for (i = 0; i < 1000; i++) {
 | 
			
		||||
        EVP_DigestInit_ex(&md2, EVP_md5(), NULL);
 | 
			
		||||
        EVP_DigestUpdate(&md2, (i & 1) ? (unsigned const char *)passwd : buf,
 | 
			
		||||
                         (i & 1) ? passwd_len : sizeof buf);
 | 
			
		||||
        if (i % 3)
 | 
			
		||||
            EVP_DigestUpdate(&md2, salt_out, salt_len);
 | 
			
		||||
        if (i % 7)
 | 
			
		||||
            EVP_DigestUpdate(&md2, passwd, passwd_len);
 | 
			
		||||
        EVP_DigestUpdate(&md2, (i & 1) ? buf : (unsigned const char *)passwd,
 | 
			
		||||
                         (i & 1) ? sizeof buf : passwd_len);
 | 
			
		||||
        EVP_DigestFinal_ex(&md2, buf, NULL);
 | 
			
		||||
    }
 | 
			
		||||
    EVP_MD_CTX_cleanup(&md2);
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        /* transform buf into output string */
 | 
			
		||||
 | 
			
		||||
        unsigned char buf_perm[sizeof buf];
 | 
			
		||||
        int dest, source;
 | 
			
		||||
        char *output;
 | 
			
		||||
 | 
			
		||||
        /* silly output permutation */
 | 
			
		||||
        for (dest = 0, source = 0; dest < 14;
 | 
			
		||||
             dest++, source = (source + 6) % 17)
 | 
			
		||||
            buf_perm[dest] = buf[source];
 | 
			
		||||
        buf_perm[14] = buf[5];
 | 
			
		||||
        buf_perm[15] = buf[11];
 | 
			
		||||
#  ifndef PEDANTIC              /* Unfortunately, this generates a "no
 | 
			
		||||
                                 * effect" warning */
 | 
			
		||||
        assert(16 == sizeof buf_perm);
 | 
			
		||||
#  endif
 | 
			
		||||
 | 
			
		||||
        output = salt_out + salt_len;
 | 
			
		||||
        assert(output == out_buf + strlen(out_buf));
 | 
			
		||||
 | 
			
		||||
        *output++ = '$';
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < 15; i += 3) {
 | 
			
		||||
            *output++ = cov_2char[buf_perm[i + 2] & 0x3f];
 | 
			
		||||
            *output++ = cov_2char[((buf_perm[i + 1] & 0xf) << 2) |
 | 
			
		||||
                                  (buf_perm[i + 2] >> 6)];
 | 
			
		||||
            *output++ = cov_2char[((buf_perm[i] & 3) << 4) |
 | 
			
		||||
                                  (buf_perm[i + 1] >> 4)];
 | 
			
		||||
            *output++ = cov_2char[buf_perm[i] >> 2];
 | 
			
		||||
        }
 | 
			
		||||
        assert(i == 15);
 | 
			
		||||
        *output++ = cov_2char[buf_perm[i] & 0x3f];
 | 
			
		||||
        *output++ = cov_2char[buf_perm[i] >> 6];
 | 
			
		||||
        *output = 0;
 | 
			
		||||
        assert(strlen(out_buf) < sizeof(out_buf));
 | 
			
		||||
    }
 | 
			
		||||
    EVP_MD_CTX_cleanup(&md);
 | 
			
		||||
 | 
			
		||||
    return out_buf;
 | 
			
		||||
}
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
 | 
			
		||||
	char *passwd, BIO *out,	int quiet, int table, int reverse,
 | 
			
		||||
	size_t pw_maxlen, int usecrypt, int use1, int useapr1)
 | 
			
		||||
	{
 | 
			
		||||
	char *hash = NULL;
 | 
			
		||||
                     char *passwd, BIO *out, int quiet, int table,
 | 
			
		||||
                     int reverse, size_t pw_maxlen, int usecrypt, int use1,
 | 
			
		||||
                     int useapr1)
 | 
			
		||||
{
 | 
			
		||||
    char *hash = NULL;
 | 
			
		||||
 | 
			
		||||
	assert(salt_p != NULL);
 | 
			
		||||
	assert(salt_malloc_p != NULL);
 | 
			
		||||
    assert(salt_p != NULL);
 | 
			
		||||
    assert(salt_malloc_p != NULL);
 | 
			
		||||
 | 
			
		||||
	/* first make sure we have a salt */
 | 
			
		||||
	if (!passed_salt)
 | 
			
		||||
		{
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
		if (usecrypt)
 | 
			
		||||
			{
 | 
			
		||||
			if (*salt_malloc_p == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				*salt_p = *salt_malloc_p = OPENSSL_malloc(3);
 | 
			
		||||
				if (*salt_malloc_p == NULL)
 | 
			
		||||
					goto err;
 | 
			
		||||
				}
 | 
			
		||||
			if (RAND_pseudo_bytes((unsigned char *)*salt_p, 2) < 0)
 | 
			
		||||
				goto err;
 | 
			
		||||
			(*salt_p)[0] = cov_2char[(*salt_p)[0] & 0x3f]; /* 6 bits */
 | 
			
		||||
			(*salt_p)[1] = cov_2char[(*salt_p)[1] & 0x3f]; /* 6 bits */
 | 
			
		||||
			(*salt_p)[2] = 0;
 | 
			
		||||
#ifdef CHARSET_EBCDIC
 | 
			
		||||
			ascii2ebcdic(*salt_p, *salt_p, 2); /* des_crypt will convert
 | 
			
		||||
			                                    * back to ASCII */
 | 
			
		||||
#endif
 | 
			
		||||
			}
 | 
			
		||||
#endif /* !OPENSSL_NO_DES */
 | 
			
		||||
    /* first make sure we have a salt */
 | 
			
		||||
    if (!passed_salt) {
 | 
			
		||||
# ifndef OPENSSL_NO_DES
 | 
			
		||||
        if (usecrypt) {
 | 
			
		||||
            if (*salt_malloc_p == NULL) {
 | 
			
		||||
                *salt_p = *salt_malloc_p = OPENSSL_malloc(3);
 | 
			
		||||
                if (*salt_malloc_p == NULL)
 | 
			
		||||
                    goto err;
 | 
			
		||||
            }
 | 
			
		||||
            if (RAND_pseudo_bytes((unsigned char *)*salt_p, 2) < 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
            (*salt_p)[0] = cov_2char[(*salt_p)[0] & 0x3f]; /* 6 bits */
 | 
			
		||||
            (*salt_p)[1] = cov_2char[(*salt_p)[1] & 0x3f]; /* 6 bits */
 | 
			
		||||
            (*salt_p)[2] = 0;
 | 
			
		||||
#  ifdef CHARSET_EBCDIC
 | 
			
		||||
            ascii2ebcdic(*salt_p, *salt_p, 2); /* des_crypt will convert back
 | 
			
		||||
                                                * to ASCII */
 | 
			
		||||
#  endif
 | 
			
		||||
        }
 | 
			
		||||
# endif                         /* !OPENSSL_NO_DES */
 | 
			
		||||
 | 
			
		||||
#ifndef NO_MD5CRYPT_1
 | 
			
		||||
		if (use1 || useapr1)
 | 
			
		||||
			{
 | 
			
		||||
			int i;
 | 
			
		||||
			
 | 
			
		||||
			if (*salt_malloc_p == NULL)
 | 
			
		||||
				{
 | 
			
		||||
				*salt_p = *salt_malloc_p = OPENSSL_malloc(9);
 | 
			
		||||
				if (*salt_malloc_p == NULL)
 | 
			
		||||
					goto err;
 | 
			
		||||
				}
 | 
			
		||||
			if (RAND_pseudo_bytes((unsigned char *)*salt_p, 8) < 0)
 | 
			
		||||
				goto err;
 | 
			
		||||
			
 | 
			
		||||
			for (i = 0; i < 8; i++)
 | 
			
		||||
				(*salt_p)[i] = cov_2char[(*salt_p)[i] & 0x3f]; /* 6 bits */
 | 
			
		||||
			(*salt_p)[8] = 0;
 | 
			
		||||
			}
 | 
			
		||||
#endif /* !NO_MD5CRYPT_1 */
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	assert(*salt_p != NULL);
 | 
			
		||||
	
 | 
			
		||||
	/* truncate password if necessary */
 | 
			
		||||
	if ((strlen(passwd) > pw_maxlen))
 | 
			
		||||
		{
 | 
			
		||||
		if (!quiet)
 | 
			
		||||
			/* XXX: really we should know how to print a size_t, not cast it */
 | 
			
		||||
			BIO_printf(bio_err, "Warning: truncating password to %u characters\n", (unsigned)pw_maxlen);
 | 
			
		||||
		passwd[pw_maxlen] = 0;
 | 
			
		||||
		}
 | 
			
		||||
	assert(strlen(passwd) <= pw_maxlen);
 | 
			
		||||
	
 | 
			
		||||
	/* now compute password hash */
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	if (usecrypt)
 | 
			
		||||
		hash = DES_crypt(passwd, *salt_p);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef NO_MD5CRYPT_1
 | 
			
		||||
	if (use1 || useapr1)
 | 
			
		||||
		hash = md5crypt(passwd, (use1 ? "1" : "apr1"), *salt_p);
 | 
			
		||||
#endif
 | 
			
		||||
	assert(hash != NULL);
 | 
			
		||||
# ifndef NO_MD5CRYPT_1
 | 
			
		||||
        if (use1 || useapr1) {
 | 
			
		||||
            int i;
 | 
			
		||||
 | 
			
		||||
	if (table && !reverse)
 | 
			
		||||
		BIO_printf(out, "%s\t%s\n", passwd, hash);
 | 
			
		||||
	else if (table && reverse)
 | 
			
		||||
		BIO_printf(out, "%s\t%s\n", hash, passwd);
 | 
			
		||||
	else
 | 
			
		||||
		BIO_printf(out, "%s\n", hash);
 | 
			
		||||
	return 1;
 | 
			
		||||
	
 | 
			
		||||
err:
 | 
			
		||||
	return 0;
 | 
			
		||||
	}
 | 
			
		||||
            if (*salt_malloc_p == NULL) {
 | 
			
		||||
                *salt_p = *salt_malloc_p = OPENSSL_malloc(9);
 | 
			
		||||
                if (*salt_malloc_p == NULL)
 | 
			
		||||
                    goto err;
 | 
			
		||||
            }
 | 
			
		||||
            if (RAND_pseudo_bytes((unsigned char *)*salt_p, 8) < 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
 | 
			
		||||
            for (i = 0; i < 8; i++)
 | 
			
		||||
                (*salt_p)[i] = cov_2char[(*salt_p)[i] & 0x3f]; /* 6 bits */
 | 
			
		||||
            (*salt_p)[8] = 0;
 | 
			
		||||
        }
 | 
			
		||||
# endif                         /* !NO_MD5CRYPT_1 */
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    assert(*salt_p != NULL);
 | 
			
		||||
 | 
			
		||||
    /* truncate password if necessary */
 | 
			
		||||
    if ((strlen(passwd) > pw_maxlen)) {
 | 
			
		||||
        if (!quiet)
 | 
			
		||||
            /*
 | 
			
		||||
             * XXX: really we should know how to print a size_t, not cast it
 | 
			
		||||
             */
 | 
			
		||||
            BIO_printf(bio_err,
 | 
			
		||||
                       "Warning: truncating password to %u characters\n",
 | 
			
		||||
                       (unsigned)pw_maxlen);
 | 
			
		||||
        passwd[pw_maxlen] = 0;
 | 
			
		||||
    }
 | 
			
		||||
    assert(strlen(passwd) <= pw_maxlen);
 | 
			
		||||
 | 
			
		||||
    /* now compute password hash */
 | 
			
		||||
# ifndef OPENSSL_NO_DES
 | 
			
		||||
    if (usecrypt)
 | 
			
		||||
        hash = DES_crypt(passwd, *salt_p);
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef NO_MD5CRYPT_1
 | 
			
		||||
    if (use1 || useapr1)
 | 
			
		||||
        hash = md5crypt(passwd, (use1 ? "1" : "apr1"), *salt_p);
 | 
			
		||||
# endif
 | 
			
		||||
    assert(hash != NULL);
 | 
			
		||||
 | 
			
		||||
    if (table && !reverse)
 | 
			
		||||
        BIO_printf(out, "%s\t%s\n", passwd, hash);
 | 
			
		||||
    else if (table && reverse)
 | 
			
		||||
        BIO_printf(out, "%s\t%s\n", hash, passwd);
 | 
			
		||||
    else
 | 
			
		||||
        BIO_printf(out, "%s\n", hash);
 | 
			
		||||
    return 1;
 | 
			
		||||
 | 
			
		||||
 err:
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	fputs("Program not available.\n", stderr)
 | 
			
		||||
	OPENSSL_EXIT(1);
 | 
			
		||||
	}
 | 
			
		||||
{
 | 
			
		||||
    fputs("Program not available.\n", stderr)
 | 
			
		||||
        OPENSSL_EXIT(1);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1562
									
								
								apps/pkcs12.c
									
									
									
									
									
								
							
							
						
						
									
										1562
									
								
								apps/pkcs12.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										414
									
								
								apps/pkcs7.c
									
									
									
									
									
								
							
							
						
						
									
										414
									
								
								apps/pkcs7.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -69,252 +69,240 @@
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	pkcs7_main
 | 
			
		||||
#define PROG    pkcs7_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (DER or PEM)
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -out arg     - output file - default stdout
 | 
			
		||||
 * -print_certs
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	PKCS7 *p7=NULL;
 | 
			
		||||
	int i,badops=0;
 | 
			
		||||
	BIO *in=NULL,*out=NULL;
 | 
			
		||||
	int informat,outformat;
 | 
			
		||||
	char *infile,*outfile,*prog;
 | 
			
		||||
	int print_certs=0,text=0,noout=0,p7_print=0;
 | 
			
		||||
	int ret=1;
 | 
			
		||||
{
 | 
			
		||||
    PKCS7 *p7 = NULL;
 | 
			
		||||
    int i, badops = 0;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int informat, outformat;
 | 
			
		||||
    char *infile, *outfile, *prog;
 | 
			
		||||
    int print_certs = 0, text = 0, noout = 0, p7_print = 0;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    infile = NULL;
 | 
			
		||||
    outfile = NULL;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*argv,"-print") == 0)
 | 
			
		||||
			p7_print=1;
 | 
			
		||||
		else if (strcmp(*argv,"-print_certs") == 0)
 | 
			
		||||
			print_certs=1;
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-print") == 0)
 | 
			
		||||
            p7_print = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-print_certs") == 0)
 | 
			
		||||
            print_certs = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg   input format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg  output format - DER or PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg       input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg      output file\n");
 | 
			
		||||
		BIO_printf(bio_err," -print_certs  print any certs or crl in the input\n");
 | 
			
		||||
		BIO_printf(bio_err," -text         print full details of certificates\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout        don't output encoded data\n");
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, " -inform arg   input format - DER or PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -outform arg  output format - DER or PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -in arg       input file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -out arg      output file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -print_certs  print any certs or crl in the input\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -text         print full details of certificates\n");
 | 
			
		||||
        BIO_printf(bio_err, " -noout        don't output encoded data\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," -engine e     use engine e, possibly a hardware device.\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -engine e     use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		ret = 1;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
        ret = 1;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
	if ((in == NULL) || (out == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if ((in == NULL) || (out == NULL)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0)
 | 
			
		||||
            if (in == NULL) {
 | 
			
		||||
                perror(infile);
 | 
			
		||||
                goto end;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
		if (in == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (informat == FORMAT_ASN1)
 | 
			
		||||
        p7 = d2i_PKCS7_bio(in, NULL);
 | 
			
		||||
    else if (informat == FORMAT_PEM)
 | 
			
		||||
        p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "bad input format specified for pkcs7 object\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (p7 == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to load PKCS7 object\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if	(informat == FORMAT_ASN1)
 | 
			
		||||
		p7=d2i_PKCS7_bio(in,NULL);
 | 
			
		||||
	else if (informat == FORMAT_PEM)
 | 
			
		||||
		p7=PEM_read_bio_PKCS7(in,NULL,NULL,NULL);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified for pkcs7 object\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (p7 == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load PKCS7 object\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (p7_print)
 | 
			
		||||
		PKCS7_print_ctx(out, p7, 0, NULL);
 | 
			
		||||
    if (p7_print)
 | 
			
		||||
        PKCS7_print_ctx(out, p7, 0, NULL);
 | 
			
		||||
 | 
			
		||||
	if (print_certs)
 | 
			
		||||
		{
 | 
			
		||||
		STACK_OF(X509) *certs=NULL;
 | 
			
		||||
		STACK_OF(X509_CRL) *crls=NULL;
 | 
			
		||||
    if (print_certs) {
 | 
			
		||||
        STACK_OF(X509) *certs = NULL;
 | 
			
		||||
        STACK_OF(X509_CRL) *crls = NULL;
 | 
			
		||||
 | 
			
		||||
		i=OBJ_obj2nid(p7->type);
 | 
			
		||||
		switch (i)
 | 
			
		||||
			{
 | 
			
		||||
		case NID_pkcs7_signed:
 | 
			
		||||
			certs=p7->d.sign->cert;
 | 
			
		||||
			crls=p7->d.sign->crl;
 | 
			
		||||
			break;
 | 
			
		||||
		case NID_pkcs7_signedAndEnveloped:
 | 
			
		||||
			certs=p7->d.signed_and_enveloped->cert;
 | 
			
		||||
			crls=p7->d.signed_and_enveloped->crl;
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
        i = OBJ_obj2nid(p7->type);
 | 
			
		||||
        switch (i) {
 | 
			
		||||
        case NID_pkcs7_signed:
 | 
			
		||||
            certs = p7->d.sign->cert;
 | 
			
		||||
            crls = p7->d.sign->crl;
 | 
			
		||||
            break;
 | 
			
		||||
        case NID_pkcs7_signedAndEnveloped:
 | 
			
		||||
            certs = p7->d.signed_and_enveloped->cert;
 | 
			
		||||
            crls = p7->d.signed_and_enveloped->crl;
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if (certs != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			X509 *x;
 | 
			
		||||
        if (certs != NULL) {
 | 
			
		||||
            X509 *x;
 | 
			
		||||
 | 
			
		||||
			for (i=0; i<sk_X509_num(certs); i++)
 | 
			
		||||
				{
 | 
			
		||||
				x=sk_X509_value(certs,i);
 | 
			
		||||
				if(text) X509_print(out, x);
 | 
			
		||||
				else dump_cert_text(out, x);
 | 
			
		||||
            for (i = 0; i < sk_X509_num(certs); i++) {
 | 
			
		||||
                x = sk_X509_value(certs, i);
 | 
			
		||||
                if (text)
 | 
			
		||||
                    X509_print(out, x);
 | 
			
		||||
                else
 | 
			
		||||
                    dump_cert_text(out, x);
 | 
			
		||||
 | 
			
		||||
				if(!noout) PEM_write_bio_X509(out,x);
 | 
			
		||||
				BIO_puts(out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		if (crls != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			X509_CRL *crl;
 | 
			
		||||
                if (!noout)
 | 
			
		||||
                    PEM_write_bio_X509(out, x);
 | 
			
		||||
                BIO_puts(out, "\n");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (crls != NULL) {
 | 
			
		||||
            X509_CRL *crl;
 | 
			
		||||
 | 
			
		||||
			for (i=0; i<sk_X509_CRL_num(crls); i++)
 | 
			
		||||
				{
 | 
			
		||||
				crl=sk_X509_CRL_value(crls,i);
 | 
			
		||||
            for (i = 0; i < sk_X509_CRL_num(crls); i++) {
 | 
			
		||||
                crl = sk_X509_CRL_value(crls, i);
 | 
			
		||||
 | 
			
		||||
				X509_CRL_print(out, crl);
 | 
			
		||||
                X509_CRL_print(out, crl);
 | 
			
		||||
 | 
			
		||||
				if(!noout)PEM_write_bio_X509_CRL(out,crl);
 | 
			
		||||
				BIO_puts(out,"\n");
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
                if (!noout)
 | 
			
		||||
                    PEM_write_bio_X509_CRL(out, crl);
 | 
			
		||||
                BIO_puts(out, "\n");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		ret=0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(!noout) {
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_PKCS7_bio(out,p7);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i=PEM_write_bio_PKCS7(out,p7);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    if (!noout) {
 | 
			
		||||
        if (outformat == FORMAT_ASN1)
 | 
			
		||||
            i = i2d_PKCS7_bio(out, p7);
 | 
			
		||||
        else if (outformat == FORMAT_PEM)
 | 
			
		||||
            i = PEM_write_bio_PKCS7(out, p7);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if (!i)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unable to write pkcs7 object\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
	}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (p7 != NULL) PKCS7_free(p7);
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
        if (!i) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to write pkcs7 object\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (p7 != NULL)
 | 
			
		||||
        PKCS7_free(p7);
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										658
									
								
								apps/pkcs8.c
									
									
									
									
									
								
							
							
						
						
									
										658
									
								
								apps/pkcs8.c
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
/* pkcs8.c */
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 1999-2004.
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 1999-2004.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -10,7 +11,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -56,6 +57,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
@@ -68,372 +70,344 @@
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
	char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	int topk8 = 0;
 | 
			
		||||
	int pbe_nid = -1;
 | 
			
		||||
	const EVP_CIPHER *cipher = NULL;
 | 
			
		||||
	int iter = PKCS12_DEFAULT_ITER;
 | 
			
		||||
	int informat, outformat;
 | 
			
		||||
	int p8_broken = PKCS8_OK;
 | 
			
		||||
	int nocrypt = 0;
 | 
			
		||||
	X509_SIG *p8 = NULL;
 | 
			
		||||
	PKCS8_PRIV_KEY_INFO *p8inf = NULL;
 | 
			
		||||
	EVP_PKEY *pkey=NULL;
 | 
			
		||||
	char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL;
 | 
			
		||||
	int badarg = 0;
 | 
			
		||||
	int ret = 1;
 | 
			
		||||
{
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
    char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int topk8 = 0;
 | 
			
		||||
    int pbe_nid = -1;
 | 
			
		||||
    const EVP_CIPHER *cipher = NULL;
 | 
			
		||||
    int iter = PKCS12_DEFAULT_ITER;
 | 
			
		||||
    int informat, outformat;
 | 
			
		||||
    int p8_broken = PKCS8_OK;
 | 
			
		||||
    int nocrypt = 0;
 | 
			
		||||
    X509_SIG *p8 = NULL;
 | 
			
		||||
    PKCS8_PRIV_KEY_INFO *p8inf = NULL;
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
    char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL;
 | 
			
		||||
    int badarg = 0;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	OpenSSL_add_all_algorithms();
 | 
			
		||||
	args = argv + 1;
 | 
			
		||||
	while (!badarg && *args && *args[0] == '-')
 | 
			
		||||
		{
 | 
			
		||||
		if (!strcmp(*args,"-v2"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				cipher=EVP_get_cipherbyname(*args);
 | 
			
		||||
				if (!cipher)
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,
 | 
			
		||||
						 "Unknown cipher %s\n", *args);
 | 
			
		||||
					badarg = 1;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-v1"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				pbe_nid=OBJ_txt2nid(*args);
 | 
			
		||||
				if (pbe_nid == NID_undef)
 | 
			
		||||
					{
 | 
			
		||||
					BIO_printf(bio_err,
 | 
			
		||||
						 "Unknown PBE algorithm %s\n", *args);
 | 
			
		||||
					badarg = 1;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-inform"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				informat=str2fmt(*args);
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-outform"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outformat=str2fmt(*args);
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-topk8"))
 | 
			
		||||
			topk8 = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-noiter"))
 | 
			
		||||
			iter = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-nocrypt"))
 | 
			
		||||
			nocrypt = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-nooct"))
 | 
			
		||||
			p8_broken = PKCS8_NO_OCTET;
 | 
			
		||||
		else if (!strcmp (*args, "-nsdb"))
 | 
			
		||||
			p8_broken = PKCS8_NS_DB;
 | 
			
		||||
		else if (!strcmp (*args, "-embed"))
 | 
			
		||||
			p8_broken = PKCS8_EMBEDDED_PARAM;
 | 
			
		||||
		else if (!strcmp(*args,"-passin"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			passargin= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-passout"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			passargout= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    OpenSSL_add_all_algorithms();
 | 
			
		||||
    args = argv + 1;
 | 
			
		||||
    while (!badarg && *args && *args[0] == '-') {
 | 
			
		||||
        if (!strcmp(*args, "-v2")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                cipher = EVP_get_cipherbyname(*args);
 | 
			
		||||
                if (!cipher) {
 | 
			
		||||
                    BIO_printf(bio_err, "Unknown cipher %s\n", *args);
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
                }
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-v1")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                pbe_nid = OBJ_txt2nid(*args);
 | 
			
		||||
                if (pbe_nid == NID_undef) {
 | 
			
		||||
                    BIO_printf(bio_err, "Unknown PBE algorithm %s\n", *args);
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
                }
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-v2prf")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                pbe_nid = OBJ_txt2nid(*args);
 | 
			
		||||
                if (!EVP_PBE_find(EVP_PBE_TYPE_PRF, pbe_nid, NULL, NULL, 0)) {
 | 
			
		||||
                    BIO_printf(bio_err, "Unknown PRF algorithm %s\n", *args);
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
                }
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-inform")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                informat = str2fmt(*args);
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-outform")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                outformat = str2fmt(*args);
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-topk8"))
 | 
			
		||||
            topk8 = 1;
 | 
			
		||||
        else if (!strcmp(*args, "-noiter"))
 | 
			
		||||
            iter = 1;
 | 
			
		||||
        else if (!strcmp(*args, "-iter")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                iter = atoi(*(++args));
 | 
			
		||||
                if (iter <= 0)
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-nocrypt"))
 | 
			
		||||
            nocrypt = 1;
 | 
			
		||||
        else if (!strcmp(*args, "-nooct"))
 | 
			
		||||
            p8_broken = PKCS8_NO_OCTET;
 | 
			
		||||
        else if (!strcmp(*args, "-nsdb"))
 | 
			
		||||
            p8_broken = PKCS8_NS_DB;
 | 
			
		||||
        else if (!strcmp(*args, "-embed"))
 | 
			
		||||
            p8_broken = PKCS8_EMBEDDED_PARAM;
 | 
			
		||||
        else if (!strcmp(*args, "-passin")) {
 | 
			
		||||
            if (args[1])
 | 
			
		||||
                passargin = *(++args);
 | 
			
		||||
            else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-passout")) {
 | 
			
		||||
            if (args[1])
 | 
			
		||||
                passargout = *(++args);
 | 
			
		||||
            else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*args,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			engine= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
        else if (strcmp(*args, "-engine") == 0) {
 | 
			
		||||
            if (args[1])
 | 
			
		||||
                engine = *(++args);
 | 
			
		||||
            else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		else if (!strcmp (*args, "-in"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				infile = *args;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-out"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outfile = *args;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else badarg = 1;
 | 
			
		||||
		args++;
 | 
			
		||||
		}
 | 
			
		||||
        else if (!strcmp(*args, "-in")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                infile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-out")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                outfile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else
 | 
			
		||||
            badarg = 1;
 | 
			
		||||
        args++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badarg)
 | 
			
		||||
		{
 | 
			
		||||
		bad:
 | 
			
		||||
		BIO_printf(bio_err, "Usage pkcs8 [options]\n");
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
		BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-inform X       input format (DER or PEM)\n");
 | 
			
		||||
		BIO_printf(bio_err, "-passin arg     input file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err, "-outform X      output format (DER or PEM)\n");
 | 
			
		||||
		BIO_printf(bio_err, "-out file       output file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-passout arg    output file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err, "-topk8          output PKCS8 file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-nooct          use (nonstandard) no octet format\n");
 | 
			
		||||
		BIO_printf(bio_err, "-embed          use (nonstandard) embedded DSA parameters format\n");
 | 
			
		||||
		BIO_printf(bio_err, "-nsdb           use (nonstandard) DSA Netscape DB format\n");
 | 
			
		||||
		BIO_printf(bio_err, "-noiter         use 1 as iteration count\n");
 | 
			
		||||
		BIO_printf(bio_err, "-nocrypt        use or expect unencrypted private key\n");
 | 
			
		||||
		BIO_printf(bio_err, "-v2 alg         use PKCS#5 v2.0 and cipher \"alg\"\n");
 | 
			
		||||
		BIO_printf(bio_err, "-v1 obj         use PKCS#5 v1.5 and cipher \"alg\"\n");
 | 
			
		||||
    if (badarg) {
 | 
			
		||||
        BIO_printf(bio_err, "Usage pkcs8 [options]\n");
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
        BIO_printf(bio_err, "-inform X       input format (DER or PEM)\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-passin arg     input file pass phrase source\n");
 | 
			
		||||
        BIO_printf(bio_err, "-outform X      output format (DER or PEM)\n");
 | 
			
		||||
        BIO_printf(bio_err, "-out file       output file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-passout arg    output file pass phrase source\n");
 | 
			
		||||
        BIO_printf(bio_err, "-topk8          output PKCS8 file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-nooct          use (nonstandard) no octet format\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-embed          use (nonstandard) embedded DSA parameters format\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-nsdb           use (nonstandard) DSA Netscape DB format\n");
 | 
			
		||||
        BIO_printf(bio_err, "-iter count     use count as iteration count\n");
 | 
			
		||||
        BIO_printf(bio_err, "-noiter         use 1 as iteration count\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-nocrypt        use or expect unencrypted private key\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-v2 alg         use PKCS#5 v2.0 and cipher \"alg\"\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-v1 obj         use PKCS#5 v1.5 and cipher \"alg\"\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," -engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
    e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (!app_passwd(bio_err, passargin, passargout, &passin, &passout))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if ((pbe_nid == -1) && !cipher)
 | 
			
		||||
		pbe_nid = NID_pbeWithMD5AndDES_CBC;
 | 
			
		||||
    if ((pbe_nid == -1) && !cipher)
 | 
			
		||||
        pbe_nid = NID_pbeWithMD5AndDES_CBC;
 | 
			
		||||
 | 
			
		||||
	if (infile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(in = BIO_new_file(infile, "rb")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open input file %s\n", infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		in = BIO_new_fp (stdin, BIO_NOCLOSE);
 | 
			
		||||
    if (infile) {
 | 
			
		||||
        if (!(in = BIO_new_file(infile, "rb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open input file %s\n", infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else
 | 
			
		||||
        in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (outfile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(out = BIO_new_file (outfile, "wb")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		out = BIO_new_fp (stdout, BIO_NOCLOSE);
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "wb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open output file %s\n", outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	if (topk8)
 | 
			
		||||
		{
 | 
			
		||||
		pkey = load_key(bio_err, infile, informat, 1,
 | 
			
		||||
			passin, e, "key");
 | 
			
		||||
		if (!pkey)
 | 
			
		||||
			goto end;
 | 
			
		||||
		if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken)))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error converting key\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (nocrypt)
 | 
			
		||||
			{
 | 
			
		||||
			if (outformat == FORMAT_PEM) 
 | 
			
		||||
				PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf);
 | 
			
		||||
			else if (outformat == FORMAT_ASN1)
 | 
			
		||||
				i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf);
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (passout)
 | 
			
		||||
				p8pass = passout;
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				p8pass = pass;
 | 
			
		||||
				if (EVP_read_pw_string(pass, sizeof pass, "Enter Encryption Password:", 1))
 | 
			
		||||
					goto end;
 | 
			
		||||
				}
 | 
			
		||||
			app_RAND_load_file(NULL, bio_err, 0);
 | 
			
		||||
			if (!(p8 = PKCS8_encrypt(pbe_nid, cipher,
 | 
			
		||||
					p8pass, strlen(p8pass),
 | 
			
		||||
					NULL, 0, iter, p8inf)))
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Error encrypting key\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
			if (outformat == FORMAT_PEM) 
 | 
			
		||||
				PEM_write_bio_PKCS8(out, p8);
 | 
			
		||||
			else if (outformat == FORMAT_ASN1)
 | 
			
		||||
				i2d_PKCS8_bio(out, p8);
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
    }
 | 
			
		||||
    if (topk8) {
 | 
			
		||||
        pkey = load_key(bio_err, infile, informat, 1, passin, e, "key");
 | 
			
		||||
        if (!pkey)
 | 
			
		||||
            goto end;
 | 
			
		||||
        if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken))) {
 | 
			
		||||
            BIO_printf(bio_err, "Error converting key\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (nocrypt) {
 | 
			
		||||
            if (outformat == FORMAT_PEM)
 | 
			
		||||
                PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf);
 | 
			
		||||
            else if (outformat == FORMAT_ASN1)
 | 
			
		||||
                i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf);
 | 
			
		||||
            else {
 | 
			
		||||
                BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            if (passout)
 | 
			
		||||
                p8pass = passout;
 | 
			
		||||
            else {
 | 
			
		||||
                p8pass = pass;
 | 
			
		||||
                if (EVP_read_pw_string
 | 
			
		||||
                    (pass, sizeof pass, "Enter Encryption Password:", 1))
 | 
			
		||||
                    goto end;
 | 
			
		||||
            }
 | 
			
		||||
            app_RAND_load_file(NULL, bio_err, 0);
 | 
			
		||||
            if (!(p8 = PKCS8_encrypt(pbe_nid, cipher,
 | 
			
		||||
                                     p8pass, strlen(p8pass),
 | 
			
		||||
                                     NULL, 0, iter, p8inf))) {
 | 
			
		||||
                BIO_printf(bio_err, "Error encrypting key\n");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
            app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
            if (outformat == FORMAT_PEM)
 | 
			
		||||
                PEM_write_bio_PKCS8(out, p8);
 | 
			
		||||
            else if (outformat == FORMAT_ASN1)
 | 
			
		||||
                i2d_PKCS8_bio(out, p8);
 | 
			
		||||
            else {
 | 
			
		||||
                BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (nocrypt)
 | 
			
		||||
		{
 | 
			
		||||
		if (informat == FORMAT_PEM) 
 | 
			
		||||
			p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in,NULL,NULL, NULL);
 | 
			
		||||
		else if (informat == FORMAT_ASN1)
 | 
			
		||||
			p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL);
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (informat == FORMAT_PEM) 
 | 
			
		||||
			p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL);
 | 
			
		||||
		else if (informat == FORMAT_ASN1)
 | 
			
		||||
			p8 = d2i_PKCS8_bio(in, NULL);
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    if (nocrypt) {
 | 
			
		||||
        if (informat == FORMAT_PEM)
 | 
			
		||||
            p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in, NULL, NULL, NULL);
 | 
			
		||||
        else if (informat == FORMAT_ASN1)
 | 
			
		||||
            p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        if (informat == FORMAT_PEM)
 | 
			
		||||
            p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL);
 | 
			
		||||
        else if (informat == FORMAT_ASN1)
 | 
			
		||||
            p8 = d2i_PKCS8_bio(in, NULL);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if (!p8)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf (bio_err, "Error reading key\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (passin)
 | 
			
		||||
			p8pass = passin;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			p8pass = pass;
 | 
			
		||||
			EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0);
 | 
			
		||||
			}
 | 
			
		||||
		p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass));
 | 
			
		||||
		}
 | 
			
		||||
        if (!p8) {
 | 
			
		||||
            BIO_printf(bio_err, "Error reading key\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (passin)
 | 
			
		||||
            p8pass = passin;
 | 
			
		||||
        else {
 | 
			
		||||
            p8pass = pass;
 | 
			
		||||
            EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0);
 | 
			
		||||
        }
 | 
			
		||||
        p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!p8inf)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error decrypting key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!p8inf) {
 | 
			
		||||
        BIO_printf(bio_err, "Error decrypting key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!(pkey = EVP_PKCS82PKEY(p8inf)))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error converting key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if (p8inf->broken)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Warning: broken key encoding: ");
 | 
			
		||||
		switch (p8inf->broken)
 | 
			
		||||
			{
 | 
			
		||||
			case PKCS8_NO_OCTET:
 | 
			
		||||
			BIO_printf(bio_err, "No Octet String in PrivateKey\n");
 | 
			
		||||
			break;
 | 
			
		||||
    if (!(pkey = EVP_PKCS82PKEY(p8inf))) {
 | 
			
		||||
        BIO_printf(bio_err, "Error converting key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
			case PKCS8_EMBEDDED_PARAM:
 | 
			
		||||
			BIO_printf(bio_err, "DSA parameters included in PrivateKey\n");
 | 
			
		||||
			break;
 | 
			
		||||
    if (p8inf->broken) {
 | 
			
		||||
        BIO_printf(bio_err, "Warning: broken key encoding: ");
 | 
			
		||||
        switch (p8inf->broken) {
 | 
			
		||||
        case PKCS8_NO_OCTET:
 | 
			
		||||
            BIO_printf(bio_err, "No Octet String in PrivateKey\n");
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
			case PKCS8_NS_DB:
 | 
			
		||||
			BIO_printf(bio_err, "DSA public key include in PrivateKey\n");
 | 
			
		||||
			break;
 | 
			
		||||
        case PKCS8_EMBEDDED_PARAM:
 | 
			
		||||
            BIO_printf(bio_err, "DSA parameters included in PrivateKey\n");
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
			case PKCS8_NEG_PRIVKEY:
 | 
			
		||||
			BIO_printf(bio_err, "DSA private key value is negative\n");
 | 
			
		||||
			break;
 | 
			
		||||
        case PKCS8_NS_DB:
 | 
			
		||||
            BIO_printf(bio_err, "DSA public key include in PrivateKey\n");
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
			default:
 | 
			
		||||
			BIO_printf(bio_err, "Unknown broken type\n");
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (outformat == FORMAT_PEM) 
 | 
			
		||||
		PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout);
 | 
			
		||||
	else if (outformat == FORMAT_ASN1)
 | 
			
		||||
		i2d_PrivateKey_bio(out, pkey);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	ret = 0;
 | 
			
		||||
        case PKCS8_NEG_PRIVKEY:
 | 
			
		||||
            BIO_printf(bio_err, "DSA private key value is negative\n");
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
	end:
 | 
			
		||||
	X509_SIG_free(p8);
 | 
			
		||||
	PKCS8_PRIV_KEY_INFO_free(p8inf);
 | 
			
		||||
	EVP_PKEY_free(pkey);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	if (passin)
 | 
			
		||||
		OPENSSL_free(passin);
 | 
			
		||||
	if (passout)
 | 
			
		||||
		OPENSSL_free(passout);
 | 
			
		||||
        default:
 | 
			
		||||
            BIO_printf(bio_err, "Unknown broken type\n");
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
	}
 | 
			
		||||
    if (outformat == FORMAT_PEM)
 | 
			
		||||
        PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout);
 | 
			
		||||
    else if (outformat == FORMAT_ASN1)
 | 
			
		||||
        i2d_PrivateKey_bio(out, pkey);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
 end:
 | 
			
		||||
    X509_SIG_free(p8);
 | 
			
		||||
    PKCS8_PRIV_KEY_INFO_free(p8inf);
 | 
			
		||||
    EVP_PKEY_free(pkey);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
    if (passout)
 | 
			
		||||
        OPENSSL_free(passout);
 | 
			
		||||
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										355
									
								
								apps/pkey.c
									
									
									
									
									
								
							
							
						
						
									
										355
									
								
								apps/pkey.c
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
/* apps/pkey.c */
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 2006
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 2006
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2006 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -10,7 +11,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -67,218 +68,184 @@
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
	char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	const EVP_CIPHER *cipher = NULL;
 | 
			
		||||
	int informat, outformat;
 | 
			
		||||
	int pubin = 0, pubout = 0, pubtext = 0, text = 0, noout = 0;
 | 
			
		||||
	EVP_PKEY *pkey=NULL;
 | 
			
		||||
	char *passin = NULL, *passout = NULL;
 | 
			
		||||
	int badarg = 0;
 | 
			
		||||
{
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
    char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    const EVP_CIPHER *cipher = NULL;
 | 
			
		||||
    int informat, outformat;
 | 
			
		||||
    int pubin = 0, pubout = 0, pubtext = 0, text = 0, noout = 0;
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
    char *passin = NULL, *passout = NULL;
 | 
			
		||||
    int badarg = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int ret = 1;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	OpenSSL_add_all_algorithms();
 | 
			
		||||
	args = argv + 1;
 | 
			
		||||
	while (!badarg && *args && *args[0] == '-')
 | 
			
		||||
		{
 | 
			
		||||
		if (!strcmp(*args,"-inform"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				informat=str2fmt(*args);
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-outform"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outformat=str2fmt(*args);
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-passin"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			passargin= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*args,"-passout"))
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			passargout= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    OpenSSL_add_all_algorithms();
 | 
			
		||||
    args = argv + 1;
 | 
			
		||||
    while (!badarg && *args && *args[0] == '-') {
 | 
			
		||||
        if (!strcmp(*args, "-inform")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                informat = str2fmt(*args);
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-outform")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                outformat = str2fmt(*args);
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-passin")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargin = *(++args);
 | 
			
		||||
        } else if (!strcmp(*args, "-passout")) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargout = *(++args);
 | 
			
		||||
        }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*args,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			engine= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
        else if (strcmp(*args, "-engine") == 0) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++args);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		else if (!strcmp (*args, "-in"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				infile = *args;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-out"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outfile = *args;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-pubin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			pubin=1;
 | 
			
		||||
			pubout=1;
 | 
			
		||||
			pubtext=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-pubout") == 0)
 | 
			
		||||
			pubout=1;
 | 
			
		||||
		else if (strcmp(*args,"-text_pub") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			pubtext=1;
 | 
			
		||||
			text=1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*args,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*args,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			cipher = EVP_get_cipherbyname(*args + 1);
 | 
			
		||||
			if (!cipher)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Unknown cipher %s\n",
 | 
			
		||||
								*args + 1);
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		args++;
 | 
			
		||||
		}
 | 
			
		||||
        else if (!strcmp(*args, "-in")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                infile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-out")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                outfile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (strcmp(*args, "-pubin") == 0) {
 | 
			
		||||
            pubin = 1;
 | 
			
		||||
            pubout = 1;
 | 
			
		||||
            pubtext = 1;
 | 
			
		||||
        } else if (strcmp(*args, "-pubout") == 0)
 | 
			
		||||
            pubout = 1;
 | 
			
		||||
        else if (strcmp(*args, "-text_pub") == 0) {
 | 
			
		||||
            pubtext = 1;
 | 
			
		||||
            text = 1;
 | 
			
		||||
        } else if (strcmp(*args, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*args, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else {
 | 
			
		||||
            cipher = EVP_get_cipherbyname(*args + 1);
 | 
			
		||||
            if (!cipher) {
 | 
			
		||||
                BIO_printf(bio_err, "Unknown cipher %s\n", *args + 1);
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        args++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badarg)
 | 
			
		||||
		{
 | 
			
		||||
		bad:
 | 
			
		||||
		BIO_printf(bio_err, "Usage pkey [options]\n");
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
		BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-inform X       input format (DER or PEM)\n");
 | 
			
		||||
		BIO_printf(bio_err, "-passin arg     input file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err, "-outform X      output format (DER or PEM)\n");
 | 
			
		||||
		BIO_printf(bio_err, "-out file       output file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-passout arg    output file pass phrase source\n");
 | 
			
		||||
    if (badarg) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "Usage pkey [options]\n");
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
        BIO_printf(bio_err, "-inform X       input format (DER or PEM)\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-passin arg     input file pass phrase source\n");
 | 
			
		||||
        BIO_printf(bio_err, "-outform X      output format (DER or PEM)\n");
 | 
			
		||||
        BIO_printf(bio_err, "-out file       output file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-passout arg    output file pass phrase source\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err, "-engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
    e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (!app_passwd(bio_err, passargin, passargout, &passin, &passout))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (outfile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(out = BIO_new_file (outfile, "wb")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		out = BIO_new_fp (stdout, BIO_NOCLOSE);
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "wb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open output file %s\n", outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (pubin)
 | 
			
		||||
		pkey = load_pubkey(bio_err, infile, informat, 1,
 | 
			
		||||
			passin, e, "Public Key");
 | 
			
		||||
	else
 | 
			
		||||
		pkey = load_key(bio_err, infile, informat, 1,
 | 
			
		||||
			passin, e, "key");
 | 
			
		||||
	if (!pkey)
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (pubin)
 | 
			
		||||
        pkey = load_pubkey(bio_err, infile, informat, 1,
 | 
			
		||||
                           passin, e, "Public Key");
 | 
			
		||||
    else
 | 
			
		||||
        pkey = load_key(bio_err, infile, informat, 1, passin, e, "key");
 | 
			
		||||
    if (!pkey)
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	if (!noout)
 | 
			
		||||
		{
 | 
			
		||||
		if (outformat == FORMAT_PEM) 
 | 
			
		||||
			{
 | 
			
		||||
			if (pubout)
 | 
			
		||||
				PEM_write_bio_PUBKEY(out,pkey);
 | 
			
		||||
			else
 | 
			
		||||
				PEM_write_bio_PrivateKey(out, pkey, cipher,
 | 
			
		||||
							NULL, 0, NULL, passout);
 | 
			
		||||
			}
 | 
			
		||||
		else if (outformat == FORMAT_ASN1)
 | 
			
		||||
			{
 | 
			
		||||
			if (pubout)
 | 
			
		||||
				i2d_PUBKEY_bio(out, pkey);
 | 
			
		||||
			else
 | 
			
		||||
				i2d_PrivateKey_bio(out, pkey);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    if (!noout) {
 | 
			
		||||
        if (outformat == FORMAT_PEM) {
 | 
			
		||||
            if (pubout)
 | 
			
		||||
                PEM_write_bio_PUBKEY(out, pkey);
 | 
			
		||||
            else
 | 
			
		||||
                PEM_write_bio_PrivateKey(out, pkey, cipher,
 | 
			
		||||
                                         NULL, 0, NULL, passout);
 | 
			
		||||
        } else if (outformat == FORMAT_ASN1) {
 | 
			
		||||
            if (pubout)
 | 
			
		||||
                i2d_PUBKEY_bio(out, pkey);
 | 
			
		||||
            else
 | 
			
		||||
                i2d_PrivateKey_bio(out, pkey);
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "Bad format specified for key\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		if (pubtext)
 | 
			
		||||
			EVP_PKEY_print_public(out, pkey, 0, NULL);
 | 
			
		||||
		else
 | 
			
		||||
			EVP_PKEY_print_private(out, pkey, 0, NULL);
 | 
			
		||||
		}
 | 
			
		||||
    if (text) {
 | 
			
		||||
        if (pubtext)
 | 
			
		||||
            EVP_PKEY_print_public(out, pkey, 0, NULL);
 | 
			
		||||
        else
 | 
			
		||||
            EVP_PKEY_print_private(out, pkey, 0, NULL);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ret = 0;
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
	end:
 | 
			
		||||
	EVP_PKEY_free(pkey);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	if (passin)
 | 
			
		||||
		OPENSSL_free(passin);
 | 
			
		||||
	if (passout)
 | 
			
		||||
		OPENSSL_free(passout);
 | 
			
		||||
 end:
 | 
			
		||||
    EVP_PKEY_free(pkey);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
    if (passout)
 | 
			
		||||
        OPENSSL_free(passout);
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
	}
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										203
									
								
								apps/pkeyparam.c
									
									
									
									
									
								
							
							
						
						
									
										203
									
								
								apps/pkeyparam.c
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
/* apps/pkeyparam.c */
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 2006
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 2006
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2006 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -10,7 +11,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -67,134 +68,118 @@
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	int text = 0, noout = 0;
 | 
			
		||||
	EVP_PKEY *pkey=NULL;
 | 
			
		||||
	int badarg = 0;
 | 
			
		||||
{
 | 
			
		||||
    char **args, *infile = NULL, *outfile = NULL;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int text = 0, noout = 0;
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
    int badarg = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int ret = 1;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	OpenSSL_add_all_algorithms();
 | 
			
		||||
	args = argv + 1;
 | 
			
		||||
	while (!badarg && *args && *args[0] == '-')
 | 
			
		||||
		{
 | 
			
		||||
		if (!strcmp (*args, "-in"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				infile = *args;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp (*args, "-out"))
 | 
			
		||||
			{
 | 
			
		||||
			if (args[1])
 | 
			
		||||
				{
 | 
			
		||||
				args++;
 | 
			
		||||
				outfile = *args;
 | 
			
		||||
				}
 | 
			
		||||
			else badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    OpenSSL_add_all_algorithms();
 | 
			
		||||
    args = argv + 1;
 | 
			
		||||
    while (!badarg && *args && *args[0] == '-') {
 | 
			
		||||
        if (!strcmp(*args, "-in")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                infile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*args, "-out")) {
 | 
			
		||||
            if (args[1]) {
 | 
			
		||||
                args++;
 | 
			
		||||
                outfile = *args;
 | 
			
		||||
            } else
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*args,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!args[1]) goto bad;
 | 
			
		||||
			engine= *(++args);
 | 
			
		||||
			}
 | 
			
		||||
        else if (strcmp(*args, "-engine") == 0) {
 | 
			
		||||
            if (!args[1])
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++args);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		else if (strcmp(*args,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*args,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		args++;
 | 
			
		||||
		}
 | 
			
		||||
        else if (strcmp(*args, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*args, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        args++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badarg)
 | 
			
		||||
		{
 | 
			
		||||
    if (badarg) {
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		bad:
 | 
			
		||||
 bad:
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err, "Usage pkeyparam [options]\n");
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
		BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-out file       output file\n");
 | 
			
		||||
		BIO_printf(bio_err, "-text           print parameters as text\n");
 | 
			
		||||
		BIO_printf(bio_err, "-noout          don't output encoded parameters\n");
 | 
			
		||||
        BIO_printf(bio_err, "Usage pkeyparam [options]\n");
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
        BIO_printf(bio_err, "-out file       output file\n");
 | 
			
		||||
        BIO_printf(bio_err, "-text           print parameters as text\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-noout          don't output encoded parameters\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err, "-engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (infile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(in = BIO_new_file (infile, "r")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open input file %s\n", infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		in = BIO_new_fp (stdin, BIO_NOCLOSE);
 | 
			
		||||
    if (infile) {
 | 
			
		||||
        if (!(in = BIO_new_file(infile, "r"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open input file %s\n", infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else
 | 
			
		||||
        in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (outfile)
 | 
			
		||||
		{
 | 
			
		||||
		if (!(out = BIO_new_file (outfile, "w")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,
 | 
			
		||||
				 "Can't open output file %s\n", outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		out = BIO_new_fp (stdout, BIO_NOCLOSE);
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "w"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open output file %s\n", outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	pkey = PEM_read_bio_Parameters(in, NULL);
 | 
			
		||||
	if (!pkey)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error reading parameters\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    pkey = PEM_read_bio_Parameters(in, NULL);
 | 
			
		||||
    if (!pkey) {
 | 
			
		||||
        BIO_printf(bio_err, "Error reading parameters\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!noout)
 | 
			
		||||
		PEM_write_bio_Parameters(out,pkey);
 | 
			
		||||
    if (!noout)
 | 
			
		||||
        PEM_write_bio_Parameters(out, pkey);
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		EVP_PKEY_print_params(out, pkey, 0, NULL);
 | 
			
		||||
    if (text)
 | 
			
		||||
        EVP_PKEY_print_params(out, pkey, 0, NULL);
 | 
			
		||||
 | 
			
		||||
	ret = 0;
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
	end:
 | 
			
		||||
	EVP_PKEY_free(pkey);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
 end:
 | 
			
		||||
    EVP_PKEY_free(pkey);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
	}
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										817
									
								
								apps/pkeyutl.c
									
									
									
									
									
								
							
							
						
						
									
										817
									
								
								apps/pkeyutl.c
									
									
									
									
									
								
							@@ -1,5 +1,6 @@
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 2006.
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 2006.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2006 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -9,7 +10,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -55,16 +56,15 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
 | 
			
		||||
#define KEY_PRIVKEY	1
 | 
			
		||||
#define KEY_PUBKEY	2
 | 
			
		||||
#define KEY_CERT	3
 | 
			
		||||
#define KEY_PRIVKEY     1
 | 
			
		||||
#define KEY_PUBKEY      2
 | 
			
		||||
#define KEY_CERT        3
 | 
			
		||||
 | 
			
		||||
static void usage(void);
 | 
			
		||||
 | 
			
		||||
@@ -73,498 +73,451 @@ static void usage(void);
 | 
			
		||||
#define PROG pkeyutl_main
 | 
			
		||||
 | 
			
		||||
static EVP_PKEY_CTX *init_ctx(int *pkeysize,
 | 
			
		||||
				char *keyfile, int keyform, int key_type,
 | 
			
		||||
				char *passargin, int pkey_op, ENGINE *e);
 | 
			
		||||
                              char *keyfile, int keyform, int key_type,
 | 
			
		||||
                              char *passargin, int pkey_op, ENGINE *e);
 | 
			
		||||
 | 
			
		||||
static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
 | 
			
		||||
							const char *file);
 | 
			
		||||
                      const char *file);
 | 
			
		||||
 | 
			
		||||
static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
 | 
			
		||||
		unsigned char *out, size_t *poutlen,
 | 
			
		||||
		unsigned char *in, size_t inlen);
 | 
			
		||||
                    unsigned char *out, size_t *poutlen,
 | 
			
		||||
                    unsigned char *in, size_t inlen);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	char *infile = NULL, *outfile = NULL, *sigfile = NULL;
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	int pkey_op = EVP_PKEY_OP_SIGN, key_type = KEY_PRIVKEY;
 | 
			
		||||
	int keyform = FORMAT_PEM, peerform = FORMAT_PEM;
 | 
			
		||||
	char badarg = 0, rev = 0;
 | 
			
		||||
	char hexdump = 0, asn1parse = 0;
 | 
			
		||||
	EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
	char *passargin = NULL;
 | 
			
		||||
	int keysize = -1;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    char *infile = NULL, *outfile = NULL, *sigfile = NULL;
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    int pkey_op = EVP_PKEY_OP_SIGN, key_type = KEY_PRIVKEY;
 | 
			
		||||
    int keyform = FORMAT_PEM, peerform = FORMAT_PEM;
 | 
			
		||||
    char badarg = 0, rev = 0;
 | 
			
		||||
    char hexdump = 0, asn1parse = 0;
 | 
			
		||||
    EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
    char *passargin = NULL;
 | 
			
		||||
    int keysize = -1;
 | 
			
		||||
 | 
			
		||||
	unsigned char *buf_in = NULL, *buf_out = NULL, *sig = NULL;
 | 
			
		||||
	size_t buf_outlen;
 | 
			
		||||
	int buf_inlen = 0, siglen = -1;
 | 
			
		||||
    unsigned char *buf_in = NULL, *buf_out = NULL, *sig = NULL;
 | 
			
		||||
    size_t buf_outlen;
 | 
			
		||||
    int buf_inlen = 0, siglen = -1;
 | 
			
		||||
 | 
			
		||||
	int ret = 1, rv = -1;
 | 
			
		||||
    int ret = 1, rv = -1;
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
 | 
			
		||||
	if(!bio_err) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
    if (!bio_err)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	OpenSSL_add_all_algorithms();
 | 
			
		||||
	
 | 
			
		||||
	while(argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if (!strcmp(*argv,"-in"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) badarg = 1;
 | 
			
		||||
                        else infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*argv,"-out"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) badarg = 1;
 | 
			
		||||
			else outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*argv,"-sigfile"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) badarg = 1;
 | 
			
		||||
			else sigfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if(!strcmp(*argv, "-inkey"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				ctx = init_ctx(&keysize,
 | 
			
		||||
						*(++argv), keyform, key_type,
 | 
			
		||||
						passargin, pkey_op, e);
 | 
			
		||||
				if (!ctx)
 | 
			
		||||
					{
 | 
			
		||||
					BIO_puts(bio_err,
 | 
			
		||||
						"Error initializing context\n");
 | 
			
		||||
					ERR_print_errors(bio_err);
 | 
			
		||||
					badarg = 1;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*argv,"-peerkey"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else if (!setup_peer(bio_err, ctx, peerform, *(++argv)))
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (!strcmp(*argv,"-passin"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) badarg = 1;
 | 
			
		||||
			else passargin= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-peerform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) badarg = 1;
 | 
			
		||||
			else peerform=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-keyform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) badarg = 1;
 | 
			
		||||
			else keyform=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    OpenSSL_add_all_algorithms();
 | 
			
		||||
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (!strcmp(*argv, "-in")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                infile = *(++argv);
 | 
			
		||||
        } else if (!strcmp(*argv, "-out")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                outfile = *(++argv);
 | 
			
		||||
        } else if (!strcmp(*argv, "-sigfile")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                sigfile = *(++argv);
 | 
			
		||||
        } else if (!strcmp(*argv, "-inkey")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else {
 | 
			
		||||
                ctx = init_ctx(&keysize,
 | 
			
		||||
                               *(++argv), keyform, key_type,
 | 
			
		||||
                               passargin, pkey_op, e);
 | 
			
		||||
                if (!ctx) {
 | 
			
		||||
                    BIO_puts(bio_err, "Error initializing context\n");
 | 
			
		||||
                    ERR_print_errors(bio_err);
 | 
			
		||||
                    badarg = 1;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } else if (!strcmp(*argv, "-peerkey")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else if (!setup_peer(bio_err, ctx, peerform, *(++argv)))
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
        } else if (!strcmp(*argv, "-passin")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                passargin = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-peerform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                peerform = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-keyform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                keyform = str2fmt(*(++argv));
 | 
			
		||||
        }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if(!strcmp(*argv, "-engine"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
				e = setup_engine(bio_err, *(++argv), 0);
 | 
			
		||||
			}
 | 
			
		||||
        else if (!strcmp(*argv, "-engine")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                e = setup_engine(bio_err, *(++argv), 0);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		else if(!strcmp(*argv, "-pubin"))
 | 
			
		||||
			key_type = KEY_PUBKEY;
 | 
			
		||||
		else if(!strcmp(*argv, "-certin"))
 | 
			
		||||
			key_type = KEY_CERT;
 | 
			
		||||
		else if(!strcmp(*argv, "-asn1parse"))
 | 
			
		||||
			asn1parse = 1;
 | 
			
		||||
		else if(!strcmp(*argv, "-hexdump"))
 | 
			
		||||
			hexdump = 1;
 | 
			
		||||
		else if(!strcmp(*argv, "-sign"))
 | 
			
		||||
			pkey_op = EVP_PKEY_OP_SIGN;
 | 
			
		||||
		else if(!strcmp(*argv, "-verify"))
 | 
			
		||||
			pkey_op = EVP_PKEY_OP_VERIFY;
 | 
			
		||||
		else if(!strcmp(*argv, "-verifyrecover"))
 | 
			
		||||
			pkey_op = EVP_PKEY_OP_VERIFYRECOVER;
 | 
			
		||||
		else if(!strcmp(*argv, "-rev"))
 | 
			
		||||
			rev = 1;
 | 
			
		||||
		else if(!strcmp(*argv, "-encrypt"))
 | 
			
		||||
			pkey_op = EVP_PKEY_OP_ENCRYPT;
 | 
			
		||||
		else if(!strcmp(*argv, "-decrypt"))
 | 
			
		||||
			pkey_op = EVP_PKEY_OP_DECRYPT;
 | 
			
		||||
		else if(!strcmp(*argv, "-derive"))
 | 
			
		||||
			pkey_op = EVP_PKEY_OP_DERIVE;
 | 
			
		||||
		else if (strcmp(*argv,"-pkeyopt") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else if (!ctx)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_puts(bio_err,
 | 
			
		||||
					"-pkeyopt command before -inkey\n");
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
				}
 | 
			
		||||
			else if (pkey_ctrl_string(ctx, *(++argv)) <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_puts(bio_err, "parameter setting error\n");
 | 
			
		||||
				ERR_print_errors(bio_err);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else badarg = 1;
 | 
			
		||||
		if(badarg)
 | 
			
		||||
			{
 | 
			
		||||
			usage();
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
        else if (!strcmp(*argv, "-pubin"))
 | 
			
		||||
            key_type = KEY_PUBKEY;
 | 
			
		||||
        else if (!strcmp(*argv, "-certin"))
 | 
			
		||||
            key_type = KEY_CERT;
 | 
			
		||||
        else if (!strcmp(*argv, "-asn1parse"))
 | 
			
		||||
            asn1parse = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-hexdump"))
 | 
			
		||||
            hexdump = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-sign"))
 | 
			
		||||
            pkey_op = EVP_PKEY_OP_SIGN;
 | 
			
		||||
        else if (!strcmp(*argv, "-verify"))
 | 
			
		||||
            pkey_op = EVP_PKEY_OP_VERIFY;
 | 
			
		||||
        else if (!strcmp(*argv, "-verifyrecover"))
 | 
			
		||||
            pkey_op = EVP_PKEY_OP_VERIFYRECOVER;
 | 
			
		||||
        else if (!strcmp(*argv, "-rev"))
 | 
			
		||||
            rev = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-encrypt"))
 | 
			
		||||
            pkey_op = EVP_PKEY_OP_ENCRYPT;
 | 
			
		||||
        else if (!strcmp(*argv, "-decrypt"))
 | 
			
		||||
            pkey_op = EVP_PKEY_OP_DECRYPT;
 | 
			
		||||
        else if (!strcmp(*argv, "-derive"))
 | 
			
		||||
            pkey_op = EVP_PKEY_OP_DERIVE;
 | 
			
		||||
        else if (strcmp(*argv, "-pkeyopt") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else if (!ctx) {
 | 
			
		||||
                BIO_puts(bio_err, "-pkeyopt command before -inkey\n");
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            } else if (pkey_ctrl_string(ctx, *(++argv)) <= 0) {
 | 
			
		||||
                BIO_puts(bio_err, "parameter setting error\n");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        } else
 | 
			
		||||
            badarg = 1;
 | 
			
		||||
        if (badarg) {
 | 
			
		||||
            usage();
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
		{
 | 
			
		||||
		usage();
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!ctx) {
 | 
			
		||||
        usage();
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (sigfile && (pkey_op != EVP_PKEY_OP_VERIFY))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(bio_err, "Signature file specified for non verify\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (sigfile && (pkey_op != EVP_PKEY_OP_VERIFY)) {
 | 
			
		||||
        BIO_puts(bio_err, "Signature file specified for non verify\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!sigfile && (pkey_op == EVP_PKEY_OP_VERIFY))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(bio_err, "No signature file specified for verify\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (!sigfile && (pkey_op == EVP_PKEY_OP_VERIFY)) {
 | 
			
		||||
        BIO_puts(bio_err, "No signature file specified for verify\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
/* FIXME: seed PRNG only if needed */
 | 
			
		||||
	app_RAND_load_file(NULL, bio_err, 0);
 | 
			
		||||
    app_RAND_load_file(NULL, bio_err, 0);
 | 
			
		||||
 | 
			
		||||
	if (pkey_op != EVP_PKEY_OP_DERIVE)
 | 
			
		||||
		{
 | 
			
		||||
		if(infile)
 | 
			
		||||
			{
 | 
			
		||||
			if(!(in = BIO_new_file(infile, "rb")))
 | 
			
		||||
				{
 | 
			
		||||
				BIO_puts(bio_err,
 | 
			
		||||
					"Error Opening Input File\n");
 | 
			
		||||
				ERR_print_errors(bio_err);	
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
		}
 | 
			
		||||
    if (pkey_op != EVP_PKEY_OP_DERIVE) {
 | 
			
		||||
        if (infile) {
 | 
			
		||||
            if (!(in = BIO_new_file(infile, "rb"))) {
 | 
			
		||||
                BIO_puts(bio_err, "Error Opening Input File\n");
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        } else
 | 
			
		||||
            in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(outfile)
 | 
			
		||||
		{
 | 
			
		||||
		if(!(out = BIO_new_file(outfile, "wb")))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error Creating Output File\n");
 | 
			
		||||
			ERR_print_errors(bio_err);	
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "wb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Error Creating Output File\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		    out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (sigfile)
 | 
			
		||||
		{
 | 
			
		||||
		BIO *sigbio = BIO_new_file(sigfile, "rb");
 | 
			
		||||
		if (!sigbio)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Can't open signature file %s\n",
 | 
			
		||||
								sigfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		siglen = bio_to_mem(&sig, keysize * 10, sigbio);
 | 
			
		||||
		BIO_free(sigbio);
 | 
			
		||||
		if (siglen <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error reading signature data\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	if (in)
 | 
			
		||||
		{
 | 
			
		||||
		/* Read the input data */
 | 
			
		||||
		buf_inlen = bio_to_mem(&buf_in, keysize * 10, in);
 | 
			
		||||
		if(buf_inlen <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error reading input Data\n");
 | 
			
		||||
			exit(1);
 | 
			
		||||
			}
 | 
			
		||||
		if(rev)
 | 
			
		||||
			{
 | 
			
		||||
			size_t i;
 | 
			
		||||
			unsigned char ctmp;
 | 
			
		||||
			size_t l = (size_t)buf_inlen;
 | 
			
		||||
			for(i = 0; i < l/2; i++)
 | 
			
		||||
				{
 | 
			
		||||
				ctmp = buf_in[i];
 | 
			
		||||
				buf_in[i] = buf_in[l - 1 - i];
 | 
			
		||||
				buf_in[l - 1 - i] = ctmp;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (sigfile) {
 | 
			
		||||
        BIO *sigbio = BIO_new_file(sigfile, "rb");
 | 
			
		||||
        if (!sigbio) {
 | 
			
		||||
            BIO_printf(bio_err, "Can't open signature file %s\n", sigfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        siglen = bio_to_mem(&sig, keysize * 10, sigbio);
 | 
			
		||||
        BIO_free(sigbio);
 | 
			
		||||
        if (siglen <= 0) {
 | 
			
		||||
            BIO_printf(bio_err, "Error reading signature data\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(pkey_op == EVP_PKEY_OP_VERIFY)
 | 
			
		||||
		{
 | 
			
		||||
		rv  = EVP_PKEY_verify(ctx, sig, (size_t)siglen,
 | 
			
		||||
				      buf_in, (size_t)buf_inlen);
 | 
			
		||||
		if (rv == 0)
 | 
			
		||||
			BIO_puts(out, "Signature Verification Failure\n");
 | 
			
		||||
		else if (rv == 1)
 | 
			
		||||
			BIO_puts(out, "Signature Verified Successfully\n");
 | 
			
		||||
		if (rv >= 0)
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{	
 | 
			
		||||
		rv = do_keyop(ctx, pkey_op, NULL, (size_t *)&buf_outlen,
 | 
			
		||||
			      buf_in, (size_t)buf_inlen);
 | 
			
		||||
		if (rv > 0)
 | 
			
		||||
			{
 | 
			
		||||
			buf_out = OPENSSL_malloc(buf_outlen);
 | 
			
		||||
			if (!buf_out)
 | 
			
		||||
				rv = -1;
 | 
			
		||||
			else
 | 
			
		||||
				rv = do_keyop(ctx, pkey_op,
 | 
			
		||||
						buf_out, (size_t *)&buf_outlen,
 | 
			
		||||
						buf_in, (size_t)buf_inlen);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (in) {
 | 
			
		||||
        /* Read the input data */
 | 
			
		||||
        buf_inlen = bio_to_mem(&buf_in, keysize * 10, in);
 | 
			
		||||
        if (buf_inlen <= 0) {
 | 
			
		||||
            BIO_printf(bio_err, "Error reading input Data\n");
 | 
			
		||||
            exit(1);
 | 
			
		||||
        }
 | 
			
		||||
        if (rev) {
 | 
			
		||||
            size_t i;
 | 
			
		||||
            unsigned char ctmp;
 | 
			
		||||
            size_t l = (size_t)buf_inlen;
 | 
			
		||||
            for (i = 0; i < l / 2; i++) {
 | 
			
		||||
                ctmp = buf_in[i];
 | 
			
		||||
                buf_in[i] = buf_in[l - 1 - i];
 | 
			
		||||
                buf_in[l - 1 - i] = ctmp;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(rv <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Public Key operation error\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	ret = 0;
 | 
			
		||||
	if(asn1parse)
 | 
			
		||||
		{
 | 
			
		||||
		if(!ASN1_parse_dump(out, buf_out, buf_outlen, 1, -1))
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
	else if(hexdump)
 | 
			
		||||
		BIO_dump(out, (char *)buf_out, buf_outlen);
 | 
			
		||||
	else
 | 
			
		||||
		BIO_write(out, buf_out, buf_outlen);
 | 
			
		||||
    if (pkey_op == EVP_PKEY_OP_VERIFY) {
 | 
			
		||||
        rv = EVP_PKEY_verify(ctx, sig, (size_t)siglen,
 | 
			
		||||
                             buf_in, (size_t)buf_inlen);
 | 
			
		||||
        if (rv == 0)
 | 
			
		||||
            BIO_puts(out, "Signature Verification Failure\n");
 | 
			
		||||
        else if (rv == 1)
 | 
			
		||||
            BIO_puts(out, "Signature Verified Successfully\n");
 | 
			
		||||
        if (rv >= 0)
 | 
			
		||||
            goto end;
 | 
			
		||||
    } else {
 | 
			
		||||
        rv = do_keyop(ctx, pkey_op, NULL, (size_t *)&buf_outlen,
 | 
			
		||||
                      buf_in, (size_t)buf_inlen);
 | 
			
		||||
        if (rv > 0) {
 | 
			
		||||
            buf_out = OPENSSL_malloc(buf_outlen);
 | 
			
		||||
            if (!buf_out)
 | 
			
		||||
                rv = -1;
 | 
			
		||||
            else
 | 
			
		||||
                rv = do_keyop(ctx, pkey_op,
 | 
			
		||||
                              buf_out, (size_t *)&buf_outlen,
 | 
			
		||||
                              buf_in, (size_t)buf_inlen);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	end:
 | 
			
		||||
	if (ctx)
 | 
			
		||||
		EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	if (buf_in)
 | 
			
		||||
		OPENSSL_free(buf_in);
 | 
			
		||||
	if (buf_out)
 | 
			
		||||
		OPENSSL_free(buf_out);
 | 
			
		||||
	if (sig)
 | 
			
		||||
		OPENSSL_free(sig);
 | 
			
		||||
	return ret;
 | 
			
		||||
    if (rv <= 0) {
 | 
			
		||||
        BIO_printf(bio_err, "Public Key operation error\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
    if (asn1parse) {
 | 
			
		||||
        if (!ASN1_parse_dump(out, buf_out, buf_outlen, 1, -1))
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
    } else if (hexdump)
 | 
			
		||||
        BIO_dump(out, (char *)buf_out, buf_outlen);
 | 
			
		||||
    else
 | 
			
		||||
        BIO_write(out, buf_out, buf_outlen);
 | 
			
		||||
 | 
			
		||||
 end:
 | 
			
		||||
    if (ctx)
 | 
			
		||||
        EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    if (buf_in)
 | 
			
		||||
        OPENSSL_free(buf_in);
 | 
			
		||||
    if (buf_out)
 | 
			
		||||
        OPENSSL_free(buf_out);
 | 
			
		||||
    if (sig)
 | 
			
		||||
        OPENSSL_free(sig);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void usage()
 | 
			
		||||
{
 | 
			
		||||
	BIO_printf(bio_err, "Usage: pkeyutl [options]\n");
 | 
			
		||||
	BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
	BIO_printf(bio_err, "-out file       output file\n");
 | 
			
		||||
	BIO_printf(bio_err, "-sigfile file signature file (verify operation only)\n");
 | 
			
		||||
	BIO_printf(bio_err, "-inkey file     input key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-keyform arg    private key format - default PEM\n");
 | 
			
		||||
	BIO_printf(bio_err, "-pubin          input is a public key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-certin         input is a certificate carrying a public key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-pkeyopt X:Y    public key options\n");
 | 
			
		||||
	BIO_printf(bio_err, "-sign           sign with private key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-verify         verify with public key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-verifyrecover  verify with public key, recover original data\n");
 | 
			
		||||
	BIO_printf(bio_err, "-encrypt        encrypt with public key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-decrypt        decrypt with private key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-derive         derive shared secret\n");
 | 
			
		||||
	BIO_printf(bio_err, "-hexdump        hex dump output\n");
 | 
			
		||||
    BIO_printf(bio_err, "Usage: pkeyutl [options]\n");
 | 
			
		||||
    BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
    BIO_printf(bio_err, "-out file       output file\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               "-sigfile file signature file (verify operation only)\n");
 | 
			
		||||
    BIO_printf(bio_err, "-inkey file     input key\n");
 | 
			
		||||
    BIO_printf(bio_err, "-keyform arg    private key format - default PEM\n");
 | 
			
		||||
    BIO_printf(bio_err, "-pubin          input is a public key\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               "-certin         input is a certificate carrying a public key\n");
 | 
			
		||||
    BIO_printf(bio_err, "-pkeyopt X:Y    public key options\n");
 | 
			
		||||
    BIO_printf(bio_err, "-sign           sign with private key\n");
 | 
			
		||||
    BIO_printf(bio_err, "-verify         verify with public key\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               "-verifyrecover  verify with public key, recover original data\n");
 | 
			
		||||
    BIO_printf(bio_err, "-encrypt        encrypt with public key\n");
 | 
			
		||||
    BIO_printf(bio_err, "-decrypt        decrypt with private key\n");
 | 
			
		||||
    BIO_printf(bio_err, "-derive         derive shared secret\n");
 | 
			
		||||
    BIO_printf(bio_err, "-hexdump        hex dump output\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	BIO_printf(bio_err, "-engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               "-engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
	BIO_printf(bio_err, "-passin arg     pass phrase source\n");
 | 
			
		||||
    BIO_printf(bio_err, "-passin arg     pass phrase source\n");
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static EVP_PKEY_CTX *init_ctx(int *pkeysize,
 | 
			
		||||
				char *keyfile, int keyform, int key_type,
 | 
			
		||||
				char *passargin, int pkey_op, ENGINE *e)
 | 
			
		||||
	{
 | 
			
		||||
	EVP_PKEY *pkey = NULL;
 | 
			
		||||
	EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
	char *passin = NULL;
 | 
			
		||||
	int rv = -1;
 | 
			
		||||
	X509 *x;
 | 
			
		||||
	if(((pkey_op == EVP_PKEY_OP_SIGN) || (pkey_op == EVP_PKEY_OP_DECRYPT) 
 | 
			
		||||
		|| (pkey_op == EVP_PKEY_OP_DERIVE))
 | 
			
		||||
		&& (key_type != KEY_PRIVKEY))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "A private key is needed for this operation\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, NULL, &passin, NULL))
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	switch(key_type)
 | 
			
		||||
		{
 | 
			
		||||
		case KEY_PRIVKEY:
 | 
			
		||||
		pkey = load_key(bio_err, keyfile, keyform, 0,
 | 
			
		||||
			passin, e, "Private Key");
 | 
			
		||||
		break;
 | 
			
		||||
                              char *keyfile, int keyform, int key_type,
 | 
			
		||||
                              char *passargin, int pkey_op, ENGINE *e)
 | 
			
		||||
{
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
    EVP_PKEY_CTX *ctx = NULL;
 | 
			
		||||
    char *passin = NULL;
 | 
			
		||||
    int rv = -1;
 | 
			
		||||
    X509 *x;
 | 
			
		||||
    if (((pkey_op == EVP_PKEY_OP_SIGN) || (pkey_op == EVP_PKEY_OP_DECRYPT)
 | 
			
		||||
         || (pkey_op == EVP_PKEY_OP_DERIVE))
 | 
			
		||||
        && (key_type != KEY_PRIVKEY)) {
 | 
			
		||||
        BIO_printf(bio_err, "A private key is needed for this operation\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    switch (key_type) {
 | 
			
		||||
    case KEY_PRIVKEY:
 | 
			
		||||
        pkey = load_key(bio_err, keyfile, keyform, 0,
 | 
			
		||||
                        passin, e, "Private Key");
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case KEY_PUBKEY:
 | 
			
		||||
		pkey = load_pubkey(bio_err, keyfile, keyform, 0,
 | 
			
		||||
			NULL, e, "Public Key");
 | 
			
		||||
		break;
 | 
			
		||||
    case KEY_PUBKEY:
 | 
			
		||||
        pkey = load_pubkey(bio_err, keyfile, keyform, 0,
 | 
			
		||||
                           NULL, e, "Public Key");
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case KEY_CERT:
 | 
			
		||||
		x = load_cert(bio_err, keyfile, keyform,
 | 
			
		||||
			NULL, e, "Certificate");
 | 
			
		||||
		if(x)
 | 
			
		||||
			{
 | 
			
		||||
			pkey = X509_get_pubkey(x);
 | 
			
		||||
			X509_free(x);
 | 
			
		||||
			}
 | 
			
		||||
		break;
 | 
			
		||||
    case KEY_CERT:
 | 
			
		||||
        x = load_cert(bio_err, keyfile, keyform, NULL, e, "Certificate");
 | 
			
		||||
        if (x) {
 | 
			
		||||
            pkey = X509_get_pubkey(x);
 | 
			
		||||
            X509_free(x);
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	*pkeysize = EVP_PKEY_size(pkey);
 | 
			
		||||
    *pkeysize = EVP_PKEY_size(pkey);
 | 
			
		||||
 | 
			
		||||
	if (!pkey)
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!pkey)
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	ctx = EVP_PKEY_CTX_new(pkey, e);
 | 
			
		||||
    ctx = EVP_PKEY_CTX_new(pkey, e);
 | 
			
		||||
 | 
			
		||||
	EVP_PKEY_free(pkey);
 | 
			
		||||
    EVP_PKEY_free(pkey);
 | 
			
		||||
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!ctx)
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	switch(pkey_op)
 | 
			
		||||
		{
 | 
			
		||||
		case EVP_PKEY_OP_SIGN:
 | 
			
		||||
		rv = EVP_PKEY_sign_init(ctx);
 | 
			
		||||
		break;
 | 
			
		||||
    switch (pkey_op) {
 | 
			
		||||
    case EVP_PKEY_OP_SIGN:
 | 
			
		||||
        rv = EVP_PKEY_sign_init(ctx);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_VERIFY:
 | 
			
		||||
		rv = EVP_PKEY_verify_init(ctx);
 | 
			
		||||
		break;
 | 
			
		||||
    case EVP_PKEY_OP_VERIFY:
 | 
			
		||||
        rv = EVP_PKEY_verify_init(ctx);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_VERIFYRECOVER:
 | 
			
		||||
		rv = EVP_PKEY_verify_recover_init(ctx);
 | 
			
		||||
		break;
 | 
			
		||||
    case EVP_PKEY_OP_VERIFYRECOVER:
 | 
			
		||||
        rv = EVP_PKEY_verify_recover_init(ctx);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_ENCRYPT:
 | 
			
		||||
		rv = EVP_PKEY_encrypt_init(ctx);
 | 
			
		||||
		break;
 | 
			
		||||
    case EVP_PKEY_OP_ENCRYPT:
 | 
			
		||||
        rv = EVP_PKEY_encrypt_init(ctx);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_DECRYPT:
 | 
			
		||||
		rv = EVP_PKEY_decrypt_init(ctx);
 | 
			
		||||
		break;
 | 
			
		||||
    case EVP_PKEY_OP_DECRYPT:
 | 
			
		||||
        rv = EVP_PKEY_decrypt_init(ctx);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_DERIVE:
 | 
			
		||||
		rv = EVP_PKEY_derive_init(ctx);
 | 
			
		||||
		break;
 | 
			
		||||
		}
 | 
			
		||||
    case EVP_PKEY_OP_DERIVE:
 | 
			
		||||
        rv = EVP_PKEY_derive_init(ctx);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (rv <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
		ctx = NULL;
 | 
			
		||||
		}
 | 
			
		||||
    if (rv <= 0) {
 | 
			
		||||
        EVP_PKEY_CTX_free(ctx);
 | 
			
		||||
        ctx = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	end:
 | 
			
		||||
 end:
 | 
			
		||||
 | 
			
		||||
	if (passin)
 | 
			
		||||
		OPENSSL_free(passin);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
 | 
			
		||||
	return ctx;
 | 
			
		||||
    return ctx;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
 | 
			
		||||
							const char *file)
 | 
			
		||||
	{
 | 
			
		||||
	EVP_PKEY *peer = NULL;
 | 
			
		||||
	int ret;
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_puts(err, "-peerkey command before -inkey\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
	peer = load_pubkey(bio_err, file, peerform, 0, NULL, NULL, "Peer Key");
 | 
			
		||||
                      const char *file)
 | 
			
		||||
{
 | 
			
		||||
    EVP_PKEY *peer = NULL;
 | 
			
		||||
    int ret;
 | 
			
		||||
    if (!ctx) {
 | 
			
		||||
        BIO_puts(err, "-peerkey command before -inkey\n");
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!peer)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error reading peer key %s\n", file);
 | 
			
		||||
		ERR_print_errors(err);
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
    peer = load_pubkey(bio_err, file, peerform, 0, NULL, NULL, "Peer Key");
 | 
			
		||||
 | 
			
		||||
	ret = EVP_PKEY_derive_set_peer(ctx, peer);
 | 
			
		||||
    if (!peer) {
 | 
			
		||||
        BIO_printf(bio_err, "Error reading peer key %s\n", file);
 | 
			
		||||
        ERR_print_errors(err);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	EVP_PKEY_free(peer);
 | 
			
		||||
	if (ret <= 0)
 | 
			
		||||
		ERR_print_errors(err);
 | 
			
		||||
	return ret;
 | 
			
		||||
	}
 | 
			
		||||
    ret = EVP_PKEY_derive_set_peer(ctx, peer);
 | 
			
		||||
 | 
			
		||||
    EVP_PKEY_free(peer);
 | 
			
		||||
    if (ret <= 0)
 | 
			
		||||
        ERR_print_errors(err);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
 | 
			
		||||
		unsigned char *out, size_t *poutlen,
 | 
			
		||||
		unsigned char *in, size_t inlen)
 | 
			
		||||
	{
 | 
			
		||||
	int rv = 0;
 | 
			
		||||
	switch(pkey_op)
 | 
			
		||||
		{
 | 
			
		||||
		case EVP_PKEY_OP_VERIFYRECOVER:
 | 
			
		||||
		rv  = EVP_PKEY_verify_recover(ctx, out, poutlen, in, inlen);
 | 
			
		||||
		break;
 | 
			
		||||
                    unsigned char *out, size_t *poutlen,
 | 
			
		||||
                    unsigned char *in, size_t inlen)
 | 
			
		||||
{
 | 
			
		||||
    int rv = 0;
 | 
			
		||||
    switch (pkey_op) {
 | 
			
		||||
    case EVP_PKEY_OP_VERIFYRECOVER:
 | 
			
		||||
        rv = EVP_PKEY_verify_recover(ctx, out, poutlen, in, inlen);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_SIGN:
 | 
			
		||||
		rv  = EVP_PKEY_sign(ctx, out, poutlen, in, inlen);
 | 
			
		||||
		break;
 | 
			
		||||
    case EVP_PKEY_OP_SIGN:
 | 
			
		||||
        rv = EVP_PKEY_sign(ctx, out, poutlen, in, inlen);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_ENCRYPT:
 | 
			
		||||
		rv  = EVP_PKEY_encrypt(ctx, out, poutlen, in, inlen);
 | 
			
		||||
		break;
 | 
			
		||||
    case EVP_PKEY_OP_ENCRYPT:
 | 
			
		||||
        rv = EVP_PKEY_encrypt(ctx, out, poutlen, in, inlen);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_DECRYPT:
 | 
			
		||||
		rv  = EVP_PKEY_decrypt(ctx, out, poutlen, in, inlen);
 | 
			
		||||
		break; 
 | 
			
		||||
    case EVP_PKEY_OP_DECRYPT:
 | 
			
		||||
        rv = EVP_PKEY_decrypt(ctx, out, poutlen, in, inlen);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case EVP_PKEY_OP_DERIVE:
 | 
			
		||||
		rv  = EVP_PKEY_derive(ctx, out, poutlen);
 | 
			
		||||
		break;
 | 
			
		||||
    case EVP_PKEY_OP_DERIVE:
 | 
			
		||||
        rv = EVP_PKEY_derive(ctx, out, poutlen);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	return rv;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    return rv;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										149
									
								
								apps/prime.c
									
									
									
									
									
								
							
							
						
						
									
										149
									
								
								apps/prime.c
									
									
									
									
									
								
							@@ -6,7 +6,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -52,109 +52,100 @@
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG prime_main
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
    {
 | 
			
		||||
    int hex=0;
 | 
			
		||||
    int checks=20;
 | 
			
		||||
    int generate=0;
 | 
			
		||||
    int bits=0;
 | 
			
		||||
    int safe=0;
 | 
			
		||||
    BIGNUM *bn=NULL;
 | 
			
		||||
{
 | 
			
		||||
    int hex = 0;
 | 
			
		||||
    int checks = 20;
 | 
			
		||||
    int generate = 0;
 | 
			
		||||
    int bits = 0;
 | 
			
		||||
    int safe = 0;
 | 
			
		||||
    BIGNUM *bn = NULL;
 | 
			
		||||
    BIO *bio_out;
 | 
			
		||||
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
	if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
	    BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
    --argc;
 | 
			
		||||
    ++argv;
 | 
			
		||||
    while (argc >= 1 && **argv == '-')
 | 
			
		||||
	{
 | 
			
		||||
	if(!strcmp(*argv,"-hex"))
 | 
			
		||||
	    hex=1;
 | 
			
		||||
	else if(!strcmp(*argv,"-generate"))
 | 
			
		||||
	    generate=1;
 | 
			
		||||
	else if(!strcmp(*argv,"-bits"))
 | 
			
		||||
	    if(--argc < 1)
 | 
			
		||||
		goto bad;
 | 
			
		||||
	    else
 | 
			
		||||
		bits=atoi(*++argv);
 | 
			
		||||
	else if(!strcmp(*argv,"-safe"))
 | 
			
		||||
	    safe=1;
 | 
			
		||||
	else if(!strcmp(*argv,"-checks"))
 | 
			
		||||
	    if(--argc < 1)
 | 
			
		||||
		goto bad;
 | 
			
		||||
	    else
 | 
			
		||||
		checks=atoi(*++argv);
 | 
			
		||||
	else
 | 
			
		||||
	    {
 | 
			
		||||
	    BIO_printf(bio_err,"Unknown option '%s'\n",*argv);
 | 
			
		||||
	    goto bad;
 | 
			
		||||
	    }
 | 
			
		||||
	--argc;
 | 
			
		||||
	++argv;
 | 
			
		||||
	}
 | 
			
		||||
    while (argc >= 1 && **argv == '-') {
 | 
			
		||||
        if (!strcmp(*argv, "-hex"))
 | 
			
		||||
            hex = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-generate"))
 | 
			
		||||
            generate = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-bits"))
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            else
 | 
			
		||||
                bits = atoi(*++argv);
 | 
			
		||||
        else if (!strcmp(*argv, "-safe"))
 | 
			
		||||
            safe = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-checks"))
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            else
 | 
			
		||||
                checks = atoi(*++argv);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "Unknown option '%s'\n", *argv);
 | 
			
		||||
            goto bad;
 | 
			
		||||
        }
 | 
			
		||||
        --argc;
 | 
			
		||||
        ++argv;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (argv[0] == NULL && !generate)
 | 
			
		||||
	{
 | 
			
		||||
	BIO_printf(bio_err,"No prime specified\n");
 | 
			
		||||
	goto bad;
 | 
			
		||||
	}
 | 
			
		||||
    if (argv[0] == NULL && !generate) {
 | 
			
		||||
        BIO_printf(bio_err, "No prime specified\n");
 | 
			
		||||
        goto bad;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ((bio_out=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
	{
 | 
			
		||||
	BIO_set_fp(bio_out,stdout,BIO_NOCLOSE);
 | 
			
		||||
    if ((bio_out = BIO_new(BIO_s_file())) != NULL) {
 | 
			
		||||
        BIO_set_fp(bio_out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
	    {
 | 
			
		||||
	    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
	    bio_out = BIO_push(tmpbio, bio_out);
 | 
			
		||||
	    }
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            bio_out = BIO_push(tmpbio, bio_out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(generate)
 | 
			
		||||
	{
 | 
			
		||||
	char *s;
 | 
			
		||||
    if (generate) {
 | 
			
		||||
        char *s;
 | 
			
		||||
 | 
			
		||||
	if(!bits)
 | 
			
		||||
	    {
 | 
			
		||||
	    BIO_printf(bio_err,"Specifiy the number of bits.\n");
 | 
			
		||||
	    return 1;
 | 
			
		||||
	    }
 | 
			
		||||
	bn=BN_new();
 | 
			
		||||
	BN_generate_prime_ex(bn,bits,safe,NULL,NULL,NULL);
 | 
			
		||||
	s=hex ? BN_bn2hex(bn) : BN_bn2dec(bn);
 | 
			
		||||
	BIO_printf(bio_out,"%s\n",s);
 | 
			
		||||
	OPENSSL_free(s);
 | 
			
		||||
	}
 | 
			
		||||
    else
 | 
			
		||||
	{
 | 
			
		||||
	if(hex)
 | 
			
		||||
	    BN_hex2bn(&bn,argv[0]);
 | 
			
		||||
	else
 | 
			
		||||
	    BN_dec2bn(&bn,argv[0]);
 | 
			
		||||
        if (!bits) {
 | 
			
		||||
            BIO_printf(bio_err, "Specifiy the number of bits.\n");
 | 
			
		||||
            return 1;
 | 
			
		||||
        }
 | 
			
		||||
        bn = BN_new();
 | 
			
		||||
        BN_generate_prime_ex(bn, bits, safe, NULL, NULL, NULL);
 | 
			
		||||
        s = hex ? BN_bn2hex(bn) : BN_bn2dec(bn);
 | 
			
		||||
        BIO_printf(bio_out, "%s\n", s);
 | 
			
		||||
        OPENSSL_free(s);
 | 
			
		||||
    } else {
 | 
			
		||||
        if (hex)
 | 
			
		||||
            BN_hex2bn(&bn, argv[0]);
 | 
			
		||||
        else
 | 
			
		||||
            BN_dec2bn(&bn, argv[0]);
 | 
			
		||||
 | 
			
		||||
	BN_print(bio_out,bn);
 | 
			
		||||
	BIO_printf(bio_out," is %sprime\n",
 | 
			
		||||
		   BN_is_prime_ex(bn,checks,NULL,NULL) ? "" : "not ");
 | 
			
		||||
	}
 | 
			
		||||
        BN_print(bio_out, bn);
 | 
			
		||||
        BIO_printf(bio_out, " is %sprime\n",
 | 
			
		||||
                   BN_is_prime_ex(bn, checks, NULL, NULL) ? "" : "not ");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    BN_free(bn);
 | 
			
		||||
    BIO_free_all(bio_out);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
    bad:
 | 
			
		||||
    BIO_printf(bio_err,"options are\n");
 | 
			
		||||
    BIO_printf(bio_err,"%-14s hex\n","-hex");
 | 
			
		||||
    BIO_printf(bio_err,"%-14s number of checks\n","-checks <n>");
 | 
			
		||||
 bad:
 | 
			
		||||
    BIO_printf(bio_err, "options are\n");
 | 
			
		||||
    BIO_printf(bio_err, "%-14s hex\n", "-hex");
 | 
			
		||||
    BIO_printf(bio_err, "%-14s number of checks\n", "-checks <n>");
 | 
			
		||||
    return 1;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										370
									
								
								apps/progs.h
									
									
									
									
									
								
							
							
						
						
									
										370
									
								
								apps/progs.h
									
									
									
									
									
								
							@@ -1,366 +1,378 @@
 | 
			
		||||
/* apps/progs.h */
 | 
			
		||||
/* automatically generated by progs.pl for openssl.c */
 | 
			
		||||
 | 
			
		||||
extern int verify_main(int argc,char *argv[]);
 | 
			
		||||
extern int asn1parse_main(int argc,char *argv[]);
 | 
			
		||||
extern int req_main(int argc,char *argv[]);
 | 
			
		||||
extern int dgst_main(int argc,char *argv[]);
 | 
			
		||||
extern int dh_main(int argc,char *argv[]);
 | 
			
		||||
extern int dhparam_main(int argc,char *argv[]);
 | 
			
		||||
extern int enc_main(int argc,char *argv[]);
 | 
			
		||||
extern int passwd_main(int argc,char *argv[]);
 | 
			
		||||
extern int gendh_main(int argc,char *argv[]);
 | 
			
		||||
extern int errstr_main(int argc,char *argv[]);
 | 
			
		||||
extern int ca_main(int argc,char *argv[]);
 | 
			
		||||
extern int crl_main(int argc,char *argv[]);
 | 
			
		||||
extern int rsa_main(int argc,char *argv[]);
 | 
			
		||||
extern int rsautl_main(int argc,char *argv[]);
 | 
			
		||||
extern int dsa_main(int argc,char *argv[]);
 | 
			
		||||
extern int dsaparam_main(int argc,char *argv[]);
 | 
			
		||||
extern int ec_main(int argc,char *argv[]);
 | 
			
		||||
extern int ecparam_main(int argc,char *argv[]);
 | 
			
		||||
extern int x509_main(int argc,char *argv[]);
 | 
			
		||||
extern int genrsa_main(int argc,char *argv[]);
 | 
			
		||||
extern int gendsa_main(int argc,char *argv[]);
 | 
			
		||||
extern int genpkey_main(int argc,char *argv[]);
 | 
			
		||||
extern int s_server_main(int argc,char *argv[]);
 | 
			
		||||
extern int s_client_main(int argc,char *argv[]);
 | 
			
		||||
extern int speed_main(int argc,char *argv[]);
 | 
			
		||||
extern int s_time_main(int argc,char *argv[]);
 | 
			
		||||
extern int version_main(int argc,char *argv[]);
 | 
			
		||||
extern int pkcs7_main(int argc,char *argv[]);
 | 
			
		||||
extern int cms_main(int argc,char *argv[]);
 | 
			
		||||
extern int crl2pkcs7_main(int argc,char *argv[]);
 | 
			
		||||
extern int sess_id_main(int argc,char *argv[]);
 | 
			
		||||
extern int ciphers_main(int argc,char *argv[]);
 | 
			
		||||
extern int nseq_main(int argc,char *argv[]);
 | 
			
		||||
extern int pkcs12_main(int argc,char *argv[]);
 | 
			
		||||
extern int pkcs8_main(int argc,char *argv[]);
 | 
			
		||||
extern int pkey_main(int argc,char *argv[]);
 | 
			
		||||
extern int pkeyparam_main(int argc,char *argv[]);
 | 
			
		||||
extern int pkeyutl_main(int argc,char *argv[]);
 | 
			
		||||
extern int spkac_main(int argc,char *argv[]);
 | 
			
		||||
extern int smime_main(int argc,char *argv[]);
 | 
			
		||||
extern int rand_main(int argc,char *argv[]);
 | 
			
		||||
extern int engine_main(int argc,char *argv[]);
 | 
			
		||||
extern int ocsp_main(int argc,char *argv[]);
 | 
			
		||||
extern int srp_main(int argc,char *argv[]);
 | 
			
		||||
extern int prime_main(int argc,char *argv[]);
 | 
			
		||||
extern int ts_main(int argc,char *argv[]);
 | 
			
		||||
extern int verify_main(int argc, char *argv[]);
 | 
			
		||||
extern int asn1parse_main(int argc, char *argv[]);
 | 
			
		||||
extern int req_main(int argc, char *argv[]);
 | 
			
		||||
extern int dgst_main(int argc, char *argv[]);
 | 
			
		||||
extern int dh_main(int argc, char *argv[]);
 | 
			
		||||
extern int dhparam_main(int argc, char *argv[]);
 | 
			
		||||
extern int enc_main(int argc, char *argv[]);
 | 
			
		||||
extern int passwd_main(int argc, char *argv[]);
 | 
			
		||||
extern int gendh_main(int argc, char *argv[]);
 | 
			
		||||
extern int errstr_main(int argc, char *argv[]);
 | 
			
		||||
extern int ca_main(int argc, char *argv[]);
 | 
			
		||||
extern int crl_main(int argc, char *argv[]);
 | 
			
		||||
extern int rsa_main(int argc, char *argv[]);
 | 
			
		||||
extern int rsautl_main(int argc, char *argv[]);
 | 
			
		||||
extern int dsa_main(int argc, char *argv[]);
 | 
			
		||||
extern int dsaparam_main(int argc, char *argv[]);
 | 
			
		||||
extern int ec_main(int argc, char *argv[]);
 | 
			
		||||
extern int ecparam_main(int argc, char *argv[]);
 | 
			
		||||
extern int x509_main(int argc, char *argv[]);
 | 
			
		||||
extern int genrsa_main(int argc, char *argv[]);
 | 
			
		||||
extern int gendsa_main(int argc, char *argv[]);
 | 
			
		||||
extern int genpkey_main(int argc, char *argv[]);
 | 
			
		||||
extern int s_server_main(int argc, char *argv[]);
 | 
			
		||||
extern int s_client_main(int argc, char *argv[]);
 | 
			
		||||
extern int speed_main(int argc, char *argv[]);
 | 
			
		||||
extern int s_time_main(int argc, char *argv[]);
 | 
			
		||||
extern int version_main(int argc, char *argv[]);
 | 
			
		||||
extern int pkcs7_main(int argc, char *argv[]);
 | 
			
		||||
extern int cms_main(int argc, char *argv[]);
 | 
			
		||||
extern int crl2pkcs7_main(int argc, char *argv[]);
 | 
			
		||||
extern int sess_id_main(int argc, char *argv[]);
 | 
			
		||||
extern int ciphers_main(int argc, char *argv[]);
 | 
			
		||||
extern int nseq_main(int argc, char *argv[]);
 | 
			
		||||
extern int pkcs12_main(int argc, char *argv[]);
 | 
			
		||||
extern int pkcs8_main(int argc, char *argv[]);
 | 
			
		||||
extern int pkey_main(int argc, char *argv[]);
 | 
			
		||||
extern int pkeyparam_main(int argc, char *argv[]);
 | 
			
		||||
extern int pkeyutl_main(int argc, char *argv[]);
 | 
			
		||||
extern int spkac_main(int argc, char *argv[]);
 | 
			
		||||
extern int smime_main(int argc, char *argv[]);
 | 
			
		||||
extern int rand_main(int argc, char *argv[]);
 | 
			
		||||
extern int engine_main(int argc, char *argv[]);
 | 
			
		||||
extern int ocsp_main(int argc, char *argv[]);
 | 
			
		||||
extern int prime_main(int argc, char *argv[]);
 | 
			
		||||
extern int ts_main(int argc, char *argv[]);
 | 
			
		||||
extern int srp_main(int argc, char *argv[]);
 | 
			
		||||
 | 
			
		||||
#define FUNC_TYPE_GENERAL	1
 | 
			
		||||
#define FUNC_TYPE_MD		2
 | 
			
		||||
#define FUNC_TYPE_CIPHER	3
 | 
			
		||||
#define FUNC_TYPE_PKEY		4
 | 
			
		||||
#define FUNC_TYPE_MD_ALG	5
 | 
			
		||||
#define FUNC_TYPE_CIPHER_ALG	6
 | 
			
		||||
#define FUNC_TYPE_GENERAL       1
 | 
			
		||||
#define FUNC_TYPE_MD            2
 | 
			
		||||
#define FUNC_TYPE_CIPHER        3
 | 
			
		||||
#define FUNC_TYPE_PKEY          4
 | 
			
		||||
#define FUNC_TYPE_MD_ALG        5
 | 
			
		||||
#define FUNC_TYPE_CIPHER_ALG    6
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
	int type;
 | 
			
		||||
	const char *name;
 | 
			
		||||
	int (*func)(int argc,char *argv[]);
 | 
			
		||||
	} FUNCTION;
 | 
			
		||||
    int type;
 | 
			
		||||
    const char *name;
 | 
			
		||||
    int (*func) (int argc, char *argv[]);
 | 
			
		||||
} FUNCTION;
 | 
			
		||||
DECLARE_LHASH_OF(FUNCTION);
 | 
			
		||||
 | 
			
		||||
FUNCTION functions[] = {
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"verify",verify_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"asn1parse",asn1parse_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"req",req_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"dgst",dgst_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "verify", verify_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "asn1parse", asn1parse_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "req", req_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "dgst", dgst_main},
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"dh",dh_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "dh", dh_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"dhparam",dhparam_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "dhparam", dhparam_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"enc",enc_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"passwd",passwd_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "enc", enc_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "passwd", passwd_main},
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"gendh",gendh_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "gendh", gendh_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"errstr",errstr_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ca",ca_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"crl",crl_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "errstr", errstr_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "ca", ca_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "crl", crl_main},
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"rsa",rsa_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "rsa", rsa_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"rsautl",rsautl_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "rsautl", rsautl_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"dsa",dsa_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "dsa", dsa_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"dsaparam",dsaparam_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "dsaparam", dsaparam_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_EC
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ec",ec_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "ec", ec_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_EC
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ecparam",ecparam_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "ecparam", ecparam_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"x509",x509_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "x509", x509_main},
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"genrsa",genrsa_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "genrsa", genrsa_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"gendsa",gendsa_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "gendsa", gendsa_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"genpkey",genpkey_main},
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"s_server",s_server_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "genpkey", genpkey_main},
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK)
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "s_server", s_server_main},
 | 
			
		||||
#endif
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"s_client",s_client_main},
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK)
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "s_client", s_client_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SPEED
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"speed",speed_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "speed", speed_main},
 | 
			
		||||
#endif
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"s_time",s_time_main},
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK)
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "s_time", s_time_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"version",version_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"pkcs7",pkcs7_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "version", version_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "pkcs7", pkcs7_main},
 | 
			
		||||
#ifndef OPENSSL_NO_CMS
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"cms",cms_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "cms", cms_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"crl2pkcs7",crl2pkcs7_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"sess_id",sess_id_main},
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ciphers",ciphers_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "crl2pkcs7", crl2pkcs7_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "sess_id", sess_id_main},
 | 
			
		||||
#if !defined(OPENSSL_NO_SOCK)
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "ciphers", ciphers_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"nseq",nseq_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "nseq", nseq_main},
 | 
			
		||||
#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1)
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"pkcs12",pkcs12_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "pkcs12", pkcs12_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"pkcs8",pkcs8_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"pkey",pkey_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"pkeyparam",pkeyparam_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"pkeyutl",pkeyutl_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"spkac",spkac_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"smime",smime_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"rand",rand_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "pkcs8", pkcs8_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "pkey", pkey_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "pkeyparam", pkeyparam_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "pkeyutl", pkeyutl_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "spkac", spkac_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "smime", smime_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "rand", rand_main},
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"engine",engine_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "engine", engine_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_OCSP
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ocsp",ocsp_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "ocsp", ocsp_main},
 | 
			
		||||
#endif
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "prime", prime_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "ts", ts_main},
 | 
			
		||||
#ifndef OPENSSL_NO_SRP
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"srp",srp_main},
 | 
			
		||||
    {FUNC_TYPE_GENERAL, "srp", srp_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"prime",prime_main},
 | 
			
		||||
	{FUNC_TYPE_GENERAL,"ts",ts_main},
 | 
			
		||||
#ifndef OPENSSL_NO_MD2
 | 
			
		||||
	{FUNC_TYPE_MD,"md2",dgst_main},
 | 
			
		||||
    {FUNC_TYPE_MD, "md2", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_MD4
 | 
			
		||||
	{FUNC_TYPE_MD,"md4",dgst_main},
 | 
			
		||||
    {FUNC_TYPE_MD, "md4", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_MD5
 | 
			
		||||
	{FUNC_TYPE_MD,"md5",dgst_main},
 | 
			
		||||
    {FUNC_TYPE_MD, "md5", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SHA
 | 
			
		||||
	{FUNC_TYPE_MD,"sha",dgst_main},
 | 
			
		||||
    {FUNC_TYPE_MD, "sha", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SHA1
 | 
			
		||||
	{FUNC_TYPE_MD,"sha1",dgst_main},
 | 
			
		||||
    {FUNC_TYPE_MD, "sha1", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_MDC2
 | 
			
		||||
	{FUNC_TYPE_MD,"mdc2",dgst_main},
 | 
			
		||||
    {FUNC_TYPE_MD, "mdc2", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RMD160
 | 
			
		||||
	{FUNC_TYPE_MD,"rmd160",dgst_main},
 | 
			
		||||
    {FUNC_TYPE_MD, "rmd160", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SHA224
 | 
			
		||||
    {FUNC_TYPE_MD, "sha224", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SHA256
 | 
			
		||||
    {FUNC_TYPE_MD, "sha256", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SHA384
 | 
			
		||||
    {FUNC_TYPE_MD, "sha384", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SHA512
 | 
			
		||||
    {FUNC_TYPE_MD, "sha512", dgst_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"aes-128-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "aes-128-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"aes-128-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "aes-128-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"aes-192-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "aes-192-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"aes-192-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "aes-192-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"aes-256-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "aes-256-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"aes-256-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "aes-256-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"camellia-128-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "camellia-128-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"camellia-128-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "camellia-128-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"camellia-192-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "camellia-192-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"camellia-192-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "camellia-192-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"camellia-256-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "camellia-256-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"camellia-256-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "camellia-256-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"base64",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "base64", enc_main},
 | 
			
		||||
#ifdef ZLIB
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"zlib",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "zlib", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des3",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des3", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"desx",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "desx", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"idea",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "idea", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"seed",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "seed", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC4
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc4",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc4", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC4
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc4-40",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc4-40", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc2",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc2", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"bf",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "bf", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAST
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"cast",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "cast", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC5
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc5",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc5", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ede",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ede", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ede3",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ede3", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ede-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ede-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ede3-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ede3-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ede-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ede-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ede3-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ede3-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ede-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ede-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"des-ede3-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "des-ede3-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"idea-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "idea-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"idea-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "idea-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"idea-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "idea-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"idea-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "idea-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"seed-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "seed-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"seed-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "seed-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"seed-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "seed-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"seed-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "seed-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc2-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc2-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc2-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc2-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc2-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc2-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc2-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc2-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc2-64-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc2-64-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc2-40-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc2-40-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"bf-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "bf-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"bf-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "bf-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"bf-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "bf-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"bf-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "bf-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAST
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"cast5-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "cast5-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAST
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"cast5-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "cast5-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAST
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"cast5-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "cast5-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAST
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"cast5-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "cast5-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAST
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"cast-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "cast-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC5
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc5-cbc",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc5-cbc", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC5
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc5-ecb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc5-ecb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC5
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc5-cfb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc5-cfb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC5
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc5-ofb",enc_main},
 | 
			
		||||
    {FUNC_TYPE_CIPHER, "rc5-ofb", enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
	{0,NULL,NULL}
 | 
			
		||||
	};
 | 
			
		||||
    {0, NULL, NULL}
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ foreach (@ARGV)
 | 
			
		||||
	push(@files,$_);
 | 
			
		||||
	$str="\t{FUNC_TYPE_GENERAL,\"$_\",${_}_main},\n";
 | 
			
		||||
	if (($_ =~ /^s_/) || ($_ =~ /^ciphers$/))
 | 
			
		||||
		{ print "#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))\n${str}#endif\n"; } 
 | 
			
		||||
		{ print "#if !defined(OPENSSL_NO_SOCK)\n${str}#endif\n"; } 
 | 
			
		||||
	elsif ( ($_ =~ /^speed$/))
 | 
			
		||||
		{ print "#ifndef OPENSSL_NO_SPEED\n${str}#endif\n"; }
 | 
			
		||||
	elsif ( ($_ =~ /^engine$/))
 | 
			
		||||
@@ -51,11 +51,13 @@ foreach (@ARGV)
 | 
			
		||||
		{ print "#ifndef OPENSSL_NO_CMS\n${str}#endif\n"; }
 | 
			
		||||
	elsif ( ($_ =~ /^ocsp$/))
 | 
			
		||||
		{ print "#ifndef OPENSSL_NO_OCSP\n${str}#endif\n"; }
 | 
			
		||||
	elsif ( ($_ =~ /^srp$/))
 | 
			
		||||
		{ print "#ifndef OPENSSL_NO_SRP\n${str}#endif\n"; }
 | 
			
		||||
	else
 | 
			
		||||
		{ print $str; }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
foreach ("md2","md4","md5","sha","sha1","mdc2","rmd160")
 | 
			
		||||
foreach ("md2","md4","md5","sha","sha1","mdc2","rmd160","sha224","sha256","sha384","sha512")
 | 
			
		||||
	{
 | 
			
		||||
	push(@files,$_);
 | 
			
		||||
	printf "#ifndef OPENSSL_NO_".uc($_)."\n\t{FUNC_TYPE_MD,\"".$_."\",dgst_main},\n#endif\n";
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										280
									
								
								apps/rand.c
									
									
									
									
									
								
							
							
						
						
									
										280
									
								
								apps/rand.c
									
									
									
									
									
								
							@@ -7,7 +7,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -66,7 +66,8 @@
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG rand_main
 | 
			
		||||
 | 
			
		||||
/* -out file         - write to file
 | 
			
		||||
/*-
 | 
			
		||||
 * -out file         - write to file
 | 
			
		||||
 * -rand file:file   - PRNG seed files
 | 
			
		||||
 * -base64           - base64 encode output
 | 
			
		||||
 * -hex              - hex encode output
 | 
			
		||||
@@ -76,170 +77,153 @@
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int i, r, ret = 1;
 | 
			
		||||
	int badopt;
 | 
			
		||||
	char *outfile = NULL;
 | 
			
		||||
	char *inrand = NULL;
 | 
			
		||||
	int base64 = 0;
 | 
			
		||||
	int hex = 0;
 | 
			
		||||
	BIO *out = NULL;
 | 
			
		||||
	int num = -1;
 | 
			
		||||
{
 | 
			
		||||
    int i, r, ret = 1;
 | 
			
		||||
    int badopt;
 | 
			
		||||
    char *outfile = NULL;
 | 
			
		||||
    char *inrand = NULL;
 | 
			
		||||
    int base64 = 0;
 | 
			
		||||
    int hex = 0;
 | 
			
		||||
    BIO *out = NULL;
 | 
			
		||||
    int num = -1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto err;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
	badopt = 0;
 | 
			
		||||
	i = 0;
 | 
			
		||||
	while (!badopt && argv[++i] != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		if (strcmp(argv[i], "-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if ((argv[i+1] != NULL) && (outfile == NULL))
 | 
			
		||||
				outfile = argv[++i];
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
    badopt = 0;
 | 
			
		||||
    i = 0;
 | 
			
		||||
    while (!badopt && argv[++i] != NULL) {
 | 
			
		||||
        if (strcmp(argv[i], "-out") == 0) {
 | 
			
		||||
            if ((argv[i + 1] != NULL) && (outfile == NULL))
 | 
			
		||||
                outfile = argv[++i];
 | 
			
		||||
            else
 | 
			
		||||
                badopt = 1;
 | 
			
		||||
        }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(argv[i], "-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if ((argv[i+1] != NULL) && (engine == NULL))
 | 
			
		||||
				engine = argv[++i];
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
        else if (strcmp(argv[i], "-engine") == 0) {
 | 
			
		||||
            if ((argv[i + 1] != NULL) && (engine == NULL))
 | 
			
		||||
                engine = argv[++i];
 | 
			
		||||
            else
 | 
			
		||||
                badopt = 1;
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(argv[i], "-rand") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if ((argv[i+1] != NULL) && (inrand == NULL))
 | 
			
		||||
				inrand = argv[++i];
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(argv[i], "-base64") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!base64)
 | 
			
		||||
				base64 = 1;
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(argv[i], "-hex") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!hex)
 | 
			
		||||
				hex = 1;
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (isdigit((unsigned char)argv[i][0]))
 | 
			
		||||
			{
 | 
			
		||||
			if (num < 0)
 | 
			
		||||
				{
 | 
			
		||||
				r = sscanf(argv[i], "%d", &num);
 | 
			
		||||
				if (r == 0 || num < 0)
 | 
			
		||||
					badopt = 1;
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				badopt = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			badopt = 1;
 | 
			
		||||
		}
 | 
			
		||||
        else if (strcmp(argv[i], "-rand") == 0) {
 | 
			
		||||
            if ((argv[i + 1] != NULL) && (inrand == NULL))
 | 
			
		||||
                inrand = argv[++i];
 | 
			
		||||
            else
 | 
			
		||||
                badopt = 1;
 | 
			
		||||
        } else if (strcmp(argv[i], "-base64") == 0) {
 | 
			
		||||
            if (!base64)
 | 
			
		||||
                base64 = 1;
 | 
			
		||||
            else
 | 
			
		||||
                badopt = 1;
 | 
			
		||||
        } else if (strcmp(argv[i], "-hex") == 0) {
 | 
			
		||||
            if (!hex)
 | 
			
		||||
                hex = 1;
 | 
			
		||||
            else
 | 
			
		||||
                badopt = 1;
 | 
			
		||||
        } else if (isdigit((unsigned char)argv[i][0])) {
 | 
			
		||||
            if (num < 0) {
 | 
			
		||||
                r = sscanf(argv[i], "%d", &num);
 | 
			
		||||
                if (r == 0 || num < 0)
 | 
			
		||||
                    badopt = 1;
 | 
			
		||||
            } else
 | 
			
		||||
                badopt = 1;
 | 
			
		||||
        } else
 | 
			
		||||
            badopt = 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (hex && base64)
 | 
			
		||||
		badopt = 1;
 | 
			
		||||
    if (hex && base64)
 | 
			
		||||
        badopt = 1;
 | 
			
		||||
 | 
			
		||||
	if (num < 0)
 | 
			
		||||
		badopt = 1;
 | 
			
		||||
	
 | 
			
		||||
	if (badopt) 
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Usage: rand [options] num\n");
 | 
			
		||||
		BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
		BIO_printf(bio_err, "-out file             - write to file\n");
 | 
			
		||||
    if (num < 0)
 | 
			
		||||
        badopt = 1;
 | 
			
		||||
 | 
			
		||||
    if (badopt) {
 | 
			
		||||
        BIO_printf(bio_err, "Usage: rand [options] num\n");
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, "-out file             - write to file\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err, "-engine e             - use engine e, possibly a hardware device.\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-engine e             - use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err, "-rand file%cfile%c... - seed PRNG from files\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
		BIO_printf(bio_err, "-base64               - base64 encode output\n");
 | 
			
		||||
		BIO_printf(bio_err, "-hex                  - hex encode output\n");
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        BIO_printf(bio_err, "-rand file%cfile%c... - seed PRNG from files\n",
 | 
			
		||||
                   LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
			
		||||
        BIO_printf(bio_err, "-base64               - base64 encode output\n");
 | 
			
		||||
        BIO_printf(bio_err, "-hex                  - hex encode output\n");
 | 
			
		||||
        goto err;
 | 
			
		||||
    }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        setup_engine(bio_err, engine, 0);
 | 
			
		||||
    setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	app_RAND_load_file(NULL, bio_err, (inrand != NULL));
 | 
			
		||||
	if (inrand != NULL)
 | 
			
		||||
		BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
			
		||||
			app_RAND_load_files(inrand));
 | 
			
		||||
    app_RAND_load_file(NULL, bio_err, (inrand != NULL));
 | 
			
		||||
    if (inrand != NULL)
 | 
			
		||||
        BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
 | 
			
		||||
                   app_RAND_load_files(inrand));
 | 
			
		||||
 | 
			
		||||
	out = BIO_new(BIO_s_file());
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
		goto err;
 | 
			
		||||
	if (outfile != NULL)
 | 
			
		||||
		r = BIO_write_filename(out, outfile);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
    if (out == NULL)
 | 
			
		||||
        goto err;
 | 
			
		||||
    if (outfile != NULL)
 | 
			
		||||
        r = BIO_write_filename(out, outfile);
 | 
			
		||||
    else {
 | 
			
		||||
        r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	if (r <= 0)
 | 
			
		||||
		goto err;
 | 
			
		||||
    }
 | 
			
		||||
    if (r <= 0)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
	if (base64)
 | 
			
		||||
		{
 | 
			
		||||
		BIO *b64 = BIO_new(BIO_f_base64());
 | 
			
		||||
		if (b64 == NULL)
 | 
			
		||||
			goto err;
 | 
			
		||||
		out = BIO_push(b64, out);
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	while (num > 0) 
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char buf[4096];
 | 
			
		||||
		int chunk;
 | 
			
		||||
    if (base64) {
 | 
			
		||||
        BIO *b64 = BIO_new(BIO_f_base64());
 | 
			
		||||
        if (b64 == NULL)
 | 
			
		||||
            goto err;
 | 
			
		||||
        out = BIO_push(b64, out);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		chunk = num;
 | 
			
		||||
		if (chunk > (int)sizeof(buf))
 | 
			
		||||
			chunk = sizeof buf;
 | 
			
		||||
		r = RAND_bytes(buf, chunk);
 | 
			
		||||
		if (r <= 0)
 | 
			
		||||
			goto err;
 | 
			
		||||
		if (!hex) 
 | 
			
		||||
			BIO_write(out, buf, chunk);
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			for (i = 0; i < chunk; i++)
 | 
			
		||||
				BIO_printf(out, "%02x", buf[i]);
 | 
			
		||||
			}
 | 
			
		||||
		num -= chunk;
 | 
			
		||||
		}
 | 
			
		||||
	if (hex)
 | 
			
		||||
		BIO_puts(out, "\n");
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
    while (num > 0) {
 | 
			
		||||
        unsigned char buf[4096];
 | 
			
		||||
        int chunk;
 | 
			
		||||
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
	ret = 0;
 | 
			
		||||
	
 | 
			
		||||
err:
 | 
			
		||||
	ERR_print_errors(bio_err);
 | 
			
		||||
	if (out)
 | 
			
		||||
		BIO_free_all(out);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
        chunk = num;
 | 
			
		||||
        if (chunk > (int)sizeof(buf))
 | 
			
		||||
            chunk = sizeof buf;
 | 
			
		||||
        r = RAND_bytes(buf, chunk);
 | 
			
		||||
        if (r <= 0)
 | 
			
		||||
            goto err;
 | 
			
		||||
        if (!hex)
 | 
			
		||||
            BIO_write(out, buf, chunk);
 | 
			
		||||
        else {
 | 
			
		||||
            for (i = 0; i < chunk; i++)
 | 
			
		||||
                BIO_printf(out, "%02x", buf[i]);
 | 
			
		||||
        }
 | 
			
		||||
        num -= chunk;
 | 
			
		||||
    }
 | 
			
		||||
    if (hex)
 | 
			
		||||
        BIO_puts(out, "\n");
 | 
			
		||||
    (void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
    app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
 err:
 | 
			
		||||
    ERR_print_errors(bio_err);
 | 
			
		||||
    if (out)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2984
									
								
								apps/req.c
									
									
									
									
									
								
							
							
						
						
									
										2984
									
								
								apps/req.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										703
									
								
								apps/rsa.c
									
									
									
									
									
								
							
							
						
						
									
										703
									
								
								apps/rsa.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -58,393 +58,382 @@
 | 
			
		||||
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/rsa.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <stdlib.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include <time.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <openssl/bio.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/rsa.h>
 | 
			
		||||
# include <openssl/evp.h>
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
# include <openssl/bn.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	rsa_main
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG    rsa_main
 | 
			
		||||
 | 
			
		||||
/* -inform arg	- input format - default PEM (one of DER, NET or PEM)
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (one of DER, NET or PEM)
 | 
			
		||||
 * -outform arg - output format - default PEM
 | 
			
		||||
 * -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
 * -des		- encrypt output if PEM format with DES in cbc mode
 | 
			
		||||
 * -des3	- encrypt output if PEM format
 | 
			
		||||
 * -idea	- encrypt output if PEM format
 | 
			
		||||
 * -seed	- encrypt output if PEM format
 | 
			
		||||
 * -aes128	- encrypt output if PEM format
 | 
			
		||||
 * -aes192	- encrypt output if PEM format
 | 
			
		||||
 * -aes256	- encrypt output if PEM format
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -out arg     - output file - default stdout
 | 
			
		||||
 * -des         - encrypt output if PEM format with DES in cbc mode
 | 
			
		||||
 * -des3        - encrypt output if PEM format
 | 
			
		||||
 * -idea        - encrypt output if PEM format
 | 
			
		||||
 * -seed        - encrypt output if PEM format
 | 
			
		||||
 * -aes128      - encrypt output if PEM format
 | 
			
		||||
 * -aes192      - encrypt output if PEM format
 | 
			
		||||
 * -aes256      - encrypt output if PEM format
 | 
			
		||||
 * -camellia128 - encrypt output if PEM format
 | 
			
		||||
 * -camellia192 - encrypt output if PEM format
 | 
			
		||||
 * -camellia256 - encrypt output if PEM format
 | 
			
		||||
 * -text	- print a text version
 | 
			
		||||
 * -modulus	- print the RSA key modulus
 | 
			
		||||
 * -check	- verify key consistency
 | 
			
		||||
 * -pubin	- Expect a public key in input file.
 | 
			
		||||
 * -pubout	- Output a public key.
 | 
			
		||||
 * -text        - print a text version
 | 
			
		||||
 * -modulus     - print the RSA key modulus
 | 
			
		||||
 * -check       - verify key consistency
 | 
			
		||||
 * -pubin       - Expect a public key in input file.
 | 
			
		||||
 * -pubout      - Output a public key.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	RSA *rsa=NULL;
 | 
			
		||||
	int i,badops=0, sgckey=0;
 | 
			
		||||
	const EVP_CIPHER *enc=NULL;
 | 
			
		||||
	BIO *out=NULL;
 | 
			
		||||
	int informat,outformat,text=0,check=0,noout=0;
 | 
			
		||||
	int pubin = 0, pubout = 0;
 | 
			
		||||
	char *infile,*outfile,*prog;
 | 
			
		||||
	char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
	char *passin = NULL, *passout = NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	int modulus=0;
 | 
			
		||||
{
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    RSA *rsa = NULL;
 | 
			
		||||
    int i, badops = 0, sgckey = 0;
 | 
			
		||||
    const EVP_CIPHER *enc = NULL;
 | 
			
		||||
    BIO *out = NULL;
 | 
			
		||||
    int informat, outformat, text = 0, check = 0, noout = 0;
 | 
			
		||||
    int pubin = 0, pubout = 0;
 | 
			
		||||
    char *infile, *outfile, *prog;
 | 
			
		||||
    char *passargin = NULL, *passargout = NULL;
 | 
			
		||||
    char *passin = NULL, *passout = NULL;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    int modulus = 0;
 | 
			
		||||
 | 
			
		||||
	int pvk_encr = 2;
 | 
			
		||||
    int pvk_encr = 2;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    infile = NULL;
 | 
			
		||||
    outfile = NULL;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargout= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-sgckey") == 0)
 | 
			
		||||
			sgckey=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pubin") == 0)
 | 
			
		||||
			pubin=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pubout") == 0)
 | 
			
		||||
			pubout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-RSAPublicKey_in") == 0)
 | 
			
		||||
			pubin = 2;
 | 
			
		||||
		else if (strcmp(*argv,"-RSAPublicKey_out") == 0)
 | 
			
		||||
			pubout = 2;
 | 
			
		||||
		else if (strcmp(*argv,"-pvk-strong") == 0)
 | 
			
		||||
			pvk_encr=2;
 | 
			
		||||
		else if (strcmp(*argv,"-pvk-weak") == 0)
 | 
			
		||||
			pvk_encr=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pvk-none") == 0)
 | 
			
		||||
			pvk_encr=0;
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text=1;
 | 
			
		||||
		else if (strcmp(*argv,"-modulus") == 0)
 | 
			
		||||
			modulus=1;
 | 
			
		||||
		else if (strcmp(*argv,"-check") == 0)
 | 
			
		||||
			check=1;
 | 
			
		||||
		else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passin") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargin = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passout") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargout = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
        else if (strcmp(*argv, "-sgckey") == 0)
 | 
			
		||||
            sgckey = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pubin") == 0)
 | 
			
		||||
            pubin = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pubout") == 0)
 | 
			
		||||
            pubout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-RSAPublicKey_in") == 0)
 | 
			
		||||
            pubin = 2;
 | 
			
		||||
        else if (strcmp(*argv, "-RSAPublicKey_out") == 0)
 | 
			
		||||
            pubout = 2;
 | 
			
		||||
        else if (strcmp(*argv, "-pvk-strong") == 0)
 | 
			
		||||
            pvk_encr = 2;
 | 
			
		||||
        else if (strcmp(*argv, "-pvk-weak") == 0)
 | 
			
		||||
            pvk_encr = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pvk-none") == 0)
 | 
			
		||||
            pvk_encr = 0;
 | 
			
		||||
        else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-modulus") == 0)
 | 
			
		||||
            modulus = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-check") == 0)
 | 
			
		||||
            check = 1;
 | 
			
		||||
        else if ((enc = EVP_get_cipherbyname(&(argv[0][1]))) == NULL) {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -inform arg     input format - one of DER NET PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -outform arg    output format - one of DER NET PEM\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg         input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -sgckey         Use IIS SGC key format\n");
 | 
			
		||||
		BIO_printf(bio_err," -passin arg     input file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg        output file\n");
 | 
			
		||||
		BIO_printf(bio_err," -passout arg    output file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err," -des            encrypt PEM output with cbc des\n");
 | 
			
		||||
		BIO_printf(bio_err," -des3           encrypt PEM output with ede cbc des using 168 bit key\n");
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		BIO_printf(bio_err," -idea           encrypt PEM output with cbc idea\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		BIO_printf(bio_err," -seed           encrypt PEM output with cbc seed\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
		BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -text           print the key in text\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout          don't print key out\n");
 | 
			
		||||
		BIO_printf(bio_err," -modulus        print the RSA key modulus\n");
 | 
			
		||||
		BIO_printf(bio_err," -check          verify key consistency\n");
 | 
			
		||||
		BIO_printf(bio_err," -pubin          expect a public key in input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -pubout         output a public key\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," -engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -inform arg     input format - one of DER NET PEM\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -outform arg    output format - one of DER NET PEM\n");
 | 
			
		||||
        BIO_printf(bio_err, " -in arg         input file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -sgckey         Use IIS SGC key format\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -passin arg     input file pass phrase source\n");
 | 
			
		||||
        BIO_printf(bio_err, " -out arg        output file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -passout arg    output file pass phrase source\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -des            encrypt PEM output with cbc des\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -des3           encrypt PEM output with ede cbc des using 168 bit key\n");
 | 
			
		||||
# ifndef OPENSSL_NO_IDEA
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -idea           encrypt PEM output with cbc idea\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_SEED
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -seed           encrypt PEM output with cbc seed\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_AES
 | 
			
		||||
        BIO_printf(bio_err, " -aes128, -aes192, -aes256\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
# endif
 | 
			
		||||
# ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
        BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
# endif
 | 
			
		||||
        BIO_printf(bio_err, " -text           print the key in text\n");
 | 
			
		||||
        BIO_printf(bio_err, " -noout          don't print key out\n");
 | 
			
		||||
        BIO_printf(bio_err, " -modulus        print the RSA key modulus\n");
 | 
			
		||||
        BIO_printf(bio_err, " -check          verify key consistency\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -pubin          expect a public key in input file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -pubout         output a public key\n");
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
# endif
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting passwords\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(check && pubin) {
 | 
			
		||||
		BIO_printf(bio_err, "Only private keys can be checked\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    if (check && pubin) {
 | 
			
		||||
        BIO_printf(bio_err, "Only private keys can be checked\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	out=BIO_new(BIO_s_file());
 | 
			
		||||
    out = BIO_new(BIO_s_file());
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
		EVP_PKEY	*pkey;
 | 
			
		||||
    {
 | 
			
		||||
        EVP_PKEY *pkey;
 | 
			
		||||
 | 
			
		||||
		if (pubin)
 | 
			
		||||
			{
 | 
			
		||||
			int tmpformat=-1;
 | 
			
		||||
			if (pubin == 2)
 | 
			
		||||
				{
 | 
			
		||||
				if (informat == FORMAT_PEM)
 | 
			
		||||
					tmpformat = FORMAT_PEMRSA;
 | 
			
		||||
				else if (informat == FORMAT_ASN1)
 | 
			
		||||
					tmpformat = FORMAT_ASN1RSA;
 | 
			
		||||
				}
 | 
			
		||||
			else if (informat == FORMAT_NETSCAPE && sgckey)
 | 
			
		||||
				tmpformat = FORMAT_IISSGC;
 | 
			
		||||
			else
 | 
			
		||||
				tmpformat = informat;
 | 
			
		||||
					
 | 
			
		||||
			pkey = load_pubkey(bio_err, infile, tmpformat, 1,
 | 
			
		||||
				passin, e, "Public Key");
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			pkey = load_key(bio_err, infile,
 | 
			
		||||
				(informat == FORMAT_NETSCAPE && sgckey ?
 | 
			
		||||
					FORMAT_IISSGC : informat), 1,
 | 
			
		||||
				passin, e, "Private Key");
 | 
			
		||||
        if (pubin) {
 | 
			
		||||
            int tmpformat = -1;
 | 
			
		||||
            if (pubin == 2) {
 | 
			
		||||
                if (informat == FORMAT_PEM)
 | 
			
		||||
                    tmpformat = FORMAT_PEMRSA;
 | 
			
		||||
                else if (informat == FORMAT_ASN1)
 | 
			
		||||
                    tmpformat = FORMAT_ASN1RSA;
 | 
			
		||||
            } else if (informat == FORMAT_NETSCAPE && sgckey)
 | 
			
		||||
                tmpformat = FORMAT_IISSGC;
 | 
			
		||||
            else
 | 
			
		||||
                tmpformat = informat;
 | 
			
		||||
 | 
			
		||||
		if (pkey != NULL)
 | 
			
		||||
			rsa = EVP_PKEY_get1_RSA(pkey);
 | 
			
		||||
		EVP_PKEY_free(pkey);
 | 
			
		||||
	}
 | 
			
		||||
            pkey = load_pubkey(bio_err, infile, tmpformat, 1,
 | 
			
		||||
                               passin, e, "Public Key");
 | 
			
		||||
        } else
 | 
			
		||||
            pkey = load_key(bio_err, infile,
 | 
			
		||||
                            (informat == FORMAT_NETSCAPE && sgckey ?
 | 
			
		||||
                             FORMAT_IISSGC : informat), 1,
 | 
			
		||||
                            passin, e, "Private Key");
 | 
			
		||||
 | 
			
		||||
	if (rsa == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
        if (pkey != NULL)
 | 
			
		||||
            rsa = EVP_PKEY_get1_RSA(pkey);
 | 
			
		||||
        EVP_PKEY_free(pkey);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (outfile == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (rsa == NULL) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (text) 
 | 
			
		||||
		if (!RSA_print(out,rsa,0))
 | 
			
		||||
			{
 | 
			
		||||
			perror(outfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    if (outfile == NULL) {
 | 
			
		||||
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (modulus)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(out,"Modulus=");
 | 
			
		||||
		BN_print(out,rsa->n);
 | 
			
		||||
		BIO_printf(out,"\n");
 | 
			
		||||
		}
 | 
			
		||||
    if (text)
 | 
			
		||||
        if (!RSA_print(out, rsa, 0)) {
 | 
			
		||||
            perror(outfile);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	if (check)
 | 
			
		||||
		{
 | 
			
		||||
		int r = RSA_check_key(rsa);
 | 
			
		||||
    if (modulus) {
 | 
			
		||||
        BIO_printf(out, "Modulus=");
 | 
			
		||||
        BN_print(out, rsa->n);
 | 
			
		||||
        BIO_printf(out, "\n");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		if (r == 1)
 | 
			
		||||
			BIO_printf(out,"RSA key ok\n");
 | 
			
		||||
		else if (r == 0)
 | 
			
		||||
			{
 | 
			
		||||
			unsigned long err;
 | 
			
		||||
    if (check) {
 | 
			
		||||
        int r = RSA_check_key(rsa);
 | 
			
		||||
 | 
			
		||||
			while ((err = ERR_peek_error()) != 0 &&
 | 
			
		||||
				ERR_GET_LIB(err) == ERR_LIB_RSA &&
 | 
			
		||||
				ERR_GET_FUNC(err) == RSA_F_RSA_CHECK_KEY &&
 | 
			
		||||
				ERR_GET_REASON(err) != ERR_R_MALLOC_FAILURE)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(out, "RSA key error: %s\n", ERR_reason_error_string(err));
 | 
			
		||||
				ERR_get_error(); /* remove e from error stack */
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		
 | 
			
		||||
		if (r == -1 || ERR_peek_error() != 0) /* should happen only if r == -1 */
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
	if (noout)
 | 
			
		||||
		{
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	BIO_printf(bio_err,"writing RSA key\n");
 | 
			
		||||
	if 	(outformat == FORMAT_ASN1) {
 | 
			
		||||
		if(pubout || pubin) 
 | 
			
		||||
			{
 | 
			
		||||
			if (pubout == 2)
 | 
			
		||||
				i=i2d_RSAPublicKey_bio(out,rsa);
 | 
			
		||||
			else
 | 
			
		||||
				i=i2d_RSA_PUBKEY_bio(out,rsa);
 | 
			
		||||
			}
 | 
			
		||||
		else i=i2d_RSAPrivateKey_bio(out,rsa);
 | 
			
		||||
	}
 | 
			
		||||
#ifndef OPENSSL_NO_RC4
 | 
			
		||||
	else if (outformat == FORMAT_NETSCAPE)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char *p,*pp;
 | 
			
		||||
		int size;
 | 
			
		||||
        if (r == 1)
 | 
			
		||||
            BIO_printf(out, "RSA key ok\n");
 | 
			
		||||
        else if (r == 0) {
 | 
			
		||||
            unsigned long err;
 | 
			
		||||
 | 
			
		||||
		i=1;
 | 
			
		||||
		size=i2d_RSA_NET(rsa,NULL,NULL, sgckey);
 | 
			
		||||
		if ((p=(unsigned char *)OPENSSL_malloc(size)) == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"Memory allocation failure\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		pp=p;
 | 
			
		||||
		i2d_RSA_NET(rsa,&p,NULL, sgckey);
 | 
			
		||||
		BIO_write(out,(char *)pp,size);
 | 
			
		||||
		OPENSSL_free(pp);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	else if (outformat == FORMAT_PEM) {
 | 
			
		||||
		if(pubout || pubin)
 | 
			
		||||
			{
 | 
			
		||||
			if (pubout == 2)
 | 
			
		||||
		    		i=PEM_write_bio_RSAPublicKey(out,rsa);
 | 
			
		||||
			else
 | 
			
		||||
		    		i=PEM_write_bio_RSA_PUBKEY(out,rsa);
 | 
			
		||||
			}
 | 
			
		||||
		else i=PEM_write_bio_RSAPrivateKey(out,rsa,
 | 
			
		||||
						enc,NULL,0,NULL,passout);
 | 
			
		||||
#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_RC4)
 | 
			
		||||
	} else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
 | 
			
		||||
		EVP_PKEY *pk;
 | 
			
		||||
		pk = EVP_PKEY_new();
 | 
			
		||||
		EVP_PKEY_set1_RSA(pk, rsa);
 | 
			
		||||
		if (outformat == FORMAT_PVK)
 | 
			
		||||
			i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
 | 
			
		||||
		else if (pubin || pubout)
 | 
			
		||||
			i = i2b_PublicKey_bio(out, pk);
 | 
			
		||||
		else
 | 
			
		||||
			i = i2b_PrivateKey_bio(out, pk);
 | 
			
		||||
		EVP_PKEY_free(pk);
 | 
			
		||||
#endif
 | 
			
		||||
	} else	{
 | 
			
		||||
		BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (i <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to write key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if(out != NULL) BIO_free_all(out);
 | 
			
		||||
	if(rsa != NULL) RSA_free(rsa);
 | 
			
		||||
	if(passin) OPENSSL_free(passin);
 | 
			
		||||
	if(passout) OPENSSL_free(passout);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
#else /* !OPENSSL_NO_RSA */
 | 
			
		||||
            while ((err = ERR_peek_error()) != 0 &&
 | 
			
		||||
                   ERR_GET_LIB(err) == ERR_LIB_RSA &&
 | 
			
		||||
                   ERR_GET_FUNC(err) == RSA_F_RSA_CHECK_KEY &&
 | 
			
		||||
                   ERR_GET_REASON(err) != ERR_R_MALLOC_FAILURE) {
 | 
			
		||||
                BIO_printf(out, "RSA key error: %s\n",
 | 
			
		||||
                           ERR_reason_error_string(err));
 | 
			
		||||
                ERR_get_error(); /* remove e from error stack */
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (r == -1 || ERR_peek_error() != 0) { /* should happen only if r ==
 | 
			
		||||
                                                 * -1 */
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (noout) {
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    BIO_printf(bio_err, "writing RSA key\n");
 | 
			
		||||
    if (outformat == FORMAT_ASN1) {
 | 
			
		||||
        if (pubout || pubin) {
 | 
			
		||||
            if (pubout == 2)
 | 
			
		||||
                i = i2d_RSAPublicKey_bio(out, rsa);
 | 
			
		||||
            else
 | 
			
		||||
                i = i2d_RSA_PUBKEY_bio(out, rsa);
 | 
			
		||||
        } else
 | 
			
		||||
            i = i2d_RSAPrivateKey_bio(out, rsa);
 | 
			
		||||
    }
 | 
			
		||||
# ifndef OPENSSL_NO_RC4
 | 
			
		||||
    else if (outformat == FORMAT_NETSCAPE) {
 | 
			
		||||
        unsigned char *p, *pp;
 | 
			
		||||
        int size;
 | 
			
		||||
 | 
			
		||||
        i = 1;
 | 
			
		||||
        size = i2d_RSA_NET(rsa, NULL, NULL, sgckey);
 | 
			
		||||
        if ((p = (unsigned char *)OPENSSL_malloc(size)) == NULL) {
 | 
			
		||||
            BIO_printf(bio_err, "Memory allocation failure\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        pp = p;
 | 
			
		||||
        i2d_RSA_NET(rsa, &p, NULL, sgckey);
 | 
			
		||||
        BIO_write(out, (char *)pp, size);
 | 
			
		||||
        OPENSSL_free(pp);
 | 
			
		||||
    }
 | 
			
		||||
# endif
 | 
			
		||||
    else if (outformat == FORMAT_PEM) {
 | 
			
		||||
        if (pubout || pubin) {
 | 
			
		||||
            if (pubout == 2)
 | 
			
		||||
                i = PEM_write_bio_RSAPublicKey(out, rsa);
 | 
			
		||||
            else
 | 
			
		||||
                i = PEM_write_bio_RSA_PUBKEY(out, rsa);
 | 
			
		||||
        } else
 | 
			
		||||
            i = PEM_write_bio_RSAPrivateKey(out, rsa,
 | 
			
		||||
                                            enc, NULL, 0, NULL, passout);
 | 
			
		||||
# if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_RC4)
 | 
			
		||||
    } else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
 | 
			
		||||
        EVP_PKEY *pk;
 | 
			
		||||
        pk = EVP_PKEY_new();
 | 
			
		||||
        EVP_PKEY_set1_RSA(pk, rsa);
 | 
			
		||||
        if (outformat == FORMAT_PVK)
 | 
			
		||||
            i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
 | 
			
		||||
        else if (pubin || pubout)
 | 
			
		||||
            i = i2b_PublicKey_bio(out, pk);
 | 
			
		||||
        else
 | 
			
		||||
            i = i2b_PrivateKey_bio(out, pk);
 | 
			
		||||
        EVP_PKEY_free(pk);
 | 
			
		||||
# endif
 | 
			
		||||
    } else {
 | 
			
		||||
        BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (i <= 0) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to write key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    } else
 | 
			
		||||
        ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (rsa != NULL)
 | 
			
		||||
        RSA_free(rsa);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
    if (passout)
 | 
			
		||||
        OPENSSL_free(passout);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
#else                           /* !OPENSSL_NO_RSA */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										509
									
								
								apps/rsautl.c
									
									
									
									
									
								
							
							
						
						
									
										509
									
								
								apps/rsautl.c
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
/* rsautl.c */
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 2000.
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 2000.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2000 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -10,7 +11,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -59,293 +60,311 @@
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include <openssl/rsa.h>
 | 
			
		||||
# include "apps.h"
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include <openssl/err.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
# include <openssl/rsa.h>
 | 
			
		||||
 | 
			
		||||
#define RSA_SIGN 	1
 | 
			
		||||
#define RSA_VERIFY 	2
 | 
			
		||||
#define RSA_ENCRYPT 	3
 | 
			
		||||
#define RSA_DECRYPT 	4
 | 
			
		||||
# define RSA_SIGN        1
 | 
			
		||||
# define RSA_VERIFY      2
 | 
			
		||||
# define RSA_ENCRYPT     3
 | 
			
		||||
# define RSA_DECRYPT     4
 | 
			
		||||
 | 
			
		||||
#define KEY_PRIVKEY	1
 | 
			
		||||
#define KEY_PUBKEY	2
 | 
			
		||||
#define KEY_CERT	3
 | 
			
		||||
# define KEY_PRIVKEY     1
 | 
			
		||||
# define KEY_PUBKEY      2
 | 
			
		||||
# define KEY_CERT        3
 | 
			
		||||
 | 
			
		||||
static void usage(void);
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
# undef PROG
 | 
			
		||||
 | 
			
		||||
#define PROG rsautl_main
 | 
			
		||||
# define PROG rsautl_main
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	BIO *in = NULL, *out = NULL;
 | 
			
		||||
	char *infile = NULL, *outfile = NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	char *keyfile = NULL;
 | 
			
		||||
	char rsa_mode = RSA_VERIFY, key_type = KEY_PRIVKEY;
 | 
			
		||||
	int keyform = FORMAT_PEM;
 | 
			
		||||
	char need_priv = 0, badarg = 0, rev = 0;
 | 
			
		||||
	char hexdump = 0, asn1parse = 0;
 | 
			
		||||
	X509 *x;
 | 
			
		||||
	EVP_PKEY *pkey = NULL;
 | 
			
		||||
	RSA *rsa = NULL;
 | 
			
		||||
	unsigned char *rsa_in = NULL, *rsa_out = NULL, pad;
 | 
			
		||||
	char *passargin = NULL, *passin = NULL;
 | 
			
		||||
	int rsa_inlen, rsa_outlen = 0;
 | 
			
		||||
	int keysize;
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    char *infile = NULL, *outfile = NULL;
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
# endif
 | 
			
		||||
    char *keyfile = NULL;
 | 
			
		||||
    char rsa_mode = RSA_VERIFY, key_type = KEY_PRIVKEY;
 | 
			
		||||
    int keyform = FORMAT_PEM;
 | 
			
		||||
    char need_priv = 0, badarg = 0, rev = 0;
 | 
			
		||||
    char hexdump = 0, asn1parse = 0;
 | 
			
		||||
    X509 *x;
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
    RSA *rsa = NULL;
 | 
			
		||||
    unsigned char *rsa_in = NULL, *rsa_out = NULL, pad;
 | 
			
		||||
    char *passargin = NULL, *passin = NULL;
 | 
			
		||||
    int rsa_inlen, rsa_outlen = 0;
 | 
			
		||||
    int keysize;
 | 
			
		||||
 | 
			
		||||
	int ret = 1;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
 | 
			
		||||
	if(!bio_err) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
    if (!bio_err)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	OpenSSL_add_all_algorithms();
 | 
			
		||||
	pad = RSA_PKCS1_PADDING;
 | 
			
		||||
	
 | 
			
		||||
	while(argc >= 1)
 | 
			
		||||
	{
 | 
			
		||||
		if (!strcmp(*argv,"-in")) {
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
				infile= *(++argv);
 | 
			
		||||
		} else if (!strcmp(*argv,"-out")) {
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
				outfile= *(++argv);
 | 
			
		||||
		} else if(!strcmp(*argv, "-inkey")) {
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
				keyfile = *(++argv);
 | 
			
		||||
		} else if (!strcmp(*argv,"-passin")) {
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
				passargin= *(++argv);
 | 
			
		||||
		} else if (strcmp(*argv,"-keyform") == 0) {
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
				keyform=str2fmt(*(++argv));
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		} else if(!strcmp(*argv, "-engine")) {
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
				badarg = 1;
 | 
			
		||||
			else
 | 
			
		||||
				engine = *(++argv);
 | 
			
		||||
#endif
 | 
			
		||||
		} else if(!strcmp(*argv, "-pubin")) {
 | 
			
		||||
			key_type = KEY_PUBKEY;
 | 
			
		||||
		} else if(!strcmp(*argv, "-certin")) {
 | 
			
		||||
			key_type = KEY_CERT;
 | 
			
		||||
		} 
 | 
			
		||||
		else if(!strcmp(*argv, "-asn1parse")) asn1parse = 1;
 | 
			
		||||
		else if(!strcmp(*argv, "-hexdump")) hexdump = 1;
 | 
			
		||||
		else if(!strcmp(*argv, "-raw")) pad = RSA_NO_PADDING;
 | 
			
		||||
		else if(!strcmp(*argv, "-oaep")) pad = RSA_PKCS1_OAEP_PADDING;
 | 
			
		||||
		else if(!strcmp(*argv, "-ssl")) pad = RSA_SSLV23_PADDING;
 | 
			
		||||
		else if(!strcmp(*argv, "-pkcs")) pad = RSA_PKCS1_PADDING;
 | 
			
		||||
		else if(!strcmp(*argv, "-x931")) pad = RSA_X931_PADDING;
 | 
			
		||||
		else if(!strcmp(*argv, "-sign")) {
 | 
			
		||||
			rsa_mode = RSA_SIGN;
 | 
			
		||||
			need_priv = 1;
 | 
			
		||||
		} else if(!strcmp(*argv, "-verify")) rsa_mode = RSA_VERIFY;
 | 
			
		||||
		else if(!strcmp(*argv, "-rev")) rev = 1;
 | 
			
		||||
		else if(!strcmp(*argv, "-encrypt")) rsa_mode = RSA_ENCRYPT;
 | 
			
		||||
		else if(!strcmp(*argv, "-decrypt")) {
 | 
			
		||||
			rsa_mode = RSA_DECRYPT;
 | 
			
		||||
			need_priv = 1;
 | 
			
		||||
		} else badarg = 1;
 | 
			
		||||
		if(badarg) {
 | 
			
		||||
			usage();
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
	}
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    OpenSSL_add_all_algorithms();
 | 
			
		||||
    pad = RSA_PKCS1_PADDING;
 | 
			
		||||
 | 
			
		||||
	if(need_priv && (key_type != KEY_PRIVKEY)) {
 | 
			
		||||
		BIO_printf(bio_err, "A private key is needed for this operation\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (!strcmp(*argv, "-in")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                infile = *(++argv);
 | 
			
		||||
        } else if (!strcmp(*argv, "-out")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                outfile = *(++argv);
 | 
			
		||||
        } else if (!strcmp(*argv, "-inkey")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                keyfile = *(++argv);
 | 
			
		||||
        } else if (!strcmp(*argv, "-passin")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                passargin = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-keyform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                keyform = str2fmt(*(++argv));
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        } else if (!strcmp(*argv, "-engine")) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                badarg = 1;
 | 
			
		||||
            else
 | 
			
		||||
                engine = *(++argv);
 | 
			
		||||
# endif
 | 
			
		||||
        } else if (!strcmp(*argv, "-pubin")) {
 | 
			
		||||
            key_type = KEY_PUBKEY;
 | 
			
		||||
        } else if (!strcmp(*argv, "-certin")) {
 | 
			
		||||
            key_type = KEY_CERT;
 | 
			
		||||
        } else if (!strcmp(*argv, "-asn1parse"))
 | 
			
		||||
            asn1parse = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-hexdump"))
 | 
			
		||||
            hexdump = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-raw"))
 | 
			
		||||
            pad = RSA_NO_PADDING;
 | 
			
		||||
        else if (!strcmp(*argv, "-oaep"))
 | 
			
		||||
            pad = RSA_PKCS1_OAEP_PADDING;
 | 
			
		||||
        else if (!strcmp(*argv, "-ssl"))
 | 
			
		||||
            pad = RSA_SSLV23_PADDING;
 | 
			
		||||
        else if (!strcmp(*argv, "-pkcs"))
 | 
			
		||||
            pad = RSA_PKCS1_PADDING;
 | 
			
		||||
        else if (!strcmp(*argv, "-x931"))
 | 
			
		||||
            pad = RSA_X931_PADDING;
 | 
			
		||||
        else if (!strcmp(*argv, "-sign")) {
 | 
			
		||||
            rsa_mode = RSA_SIGN;
 | 
			
		||||
            need_priv = 1;
 | 
			
		||||
        } else if (!strcmp(*argv, "-verify"))
 | 
			
		||||
            rsa_mode = RSA_VERIFY;
 | 
			
		||||
        else if (!strcmp(*argv, "-rev"))
 | 
			
		||||
            rev = 1;
 | 
			
		||||
        else if (!strcmp(*argv, "-encrypt"))
 | 
			
		||||
            rsa_mode = RSA_ENCRYPT;
 | 
			
		||||
        else if (!strcmp(*argv, "-decrypt")) {
 | 
			
		||||
            rsa_mode = RSA_DECRYPT;
 | 
			
		||||
            need_priv = 1;
 | 
			
		||||
        } else
 | 
			
		||||
            badarg = 1;
 | 
			
		||||
        if (badarg) {
 | 
			
		||||
            usage();
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    if (need_priv && (key_type != KEY_PRIVKEY)) {
 | 
			
		||||
        BIO_printf(bio_err, "A private key is needed for this operation\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
# endif
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
/* FIXME: seed PRNG only if needed */
 | 
			
		||||
	app_RAND_load_file(NULL, bio_err, 0);
 | 
			
		||||
	
 | 
			
		||||
	switch(key_type) {
 | 
			
		||||
		case KEY_PRIVKEY:
 | 
			
		||||
		pkey = load_key(bio_err, keyfile, keyform, 0,
 | 
			
		||||
			passin, e, "Private Key");
 | 
			
		||||
		break;
 | 
			
		||||
    app_RAND_load_file(NULL, bio_err, 0);
 | 
			
		||||
 | 
			
		||||
		case KEY_PUBKEY:
 | 
			
		||||
		pkey = load_pubkey(bio_err, keyfile, keyform, 0,
 | 
			
		||||
			NULL, e, "Public Key");
 | 
			
		||||
		break;
 | 
			
		||||
    switch (key_type) {
 | 
			
		||||
    case KEY_PRIVKEY:
 | 
			
		||||
        pkey = load_key(bio_err, keyfile, keyform, 0,
 | 
			
		||||
                        passin, e, "Private Key");
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case KEY_CERT:
 | 
			
		||||
		x = load_cert(bio_err, keyfile, keyform,
 | 
			
		||||
			NULL, e, "Certificate");
 | 
			
		||||
		if(x) {
 | 
			
		||||
			pkey = X509_get_pubkey(x);
 | 
			
		||||
			X509_free(x);
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
    case KEY_PUBKEY:
 | 
			
		||||
        pkey = load_pubkey(bio_err, keyfile, keyform, 0,
 | 
			
		||||
                           NULL, e, "Public Key");
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
	if(!pkey) {
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
    case KEY_CERT:
 | 
			
		||||
        x = load_cert(bio_err, keyfile, keyform, NULL, e, "Certificate");
 | 
			
		||||
        if (x) {
 | 
			
		||||
            pkey = X509_get_pubkey(x);
 | 
			
		||||
            X509_free(x);
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	rsa = EVP_PKEY_get1_RSA(pkey);
 | 
			
		||||
	EVP_PKEY_free(pkey);
 | 
			
		||||
    if (!pkey) {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(!rsa) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting RSA key\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    rsa = EVP_PKEY_get1_RSA(pkey);
 | 
			
		||||
    EVP_PKEY_free(pkey);
 | 
			
		||||
 | 
			
		||||
    if (!rsa) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting RSA key\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(infile) {
 | 
			
		||||
		if(!(in = BIO_new_file(infile, "rb"))) {
 | 
			
		||||
			BIO_printf(bio_err, "Error Reading Input File\n");
 | 
			
		||||
			ERR_print_errors(bio_err);	
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	} else in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
    if (infile) {
 | 
			
		||||
        if (!(in = BIO_new_file(infile, "rb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Error Reading Input File\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else
 | 
			
		||||
        in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if(outfile) {
 | 
			
		||||
		if(!(out = BIO_new_file(outfile, "wb"))) {
 | 
			
		||||
			BIO_printf(bio_err, "Error Reading Output File\n");
 | 
			
		||||
			ERR_print_errors(bio_err);	
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		    out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
    if (outfile) {
 | 
			
		||||
        if (!(out = BIO_new_file(outfile, "wb"))) {
 | 
			
		||||
            BIO_printf(bio_err, "Error Reading Output File\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
# endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	keysize = RSA_size(rsa);
 | 
			
		||||
    keysize = RSA_size(rsa);
 | 
			
		||||
 | 
			
		||||
	rsa_in = OPENSSL_malloc(keysize * 2);
 | 
			
		||||
	rsa_out = OPENSSL_malloc(keysize);
 | 
			
		||||
    rsa_in = OPENSSL_malloc(keysize * 2);
 | 
			
		||||
    rsa_out = OPENSSL_malloc(keysize);
 | 
			
		||||
 | 
			
		||||
	/* Read the input data */
 | 
			
		||||
	rsa_inlen = BIO_read(in, rsa_in, keysize * 2);
 | 
			
		||||
	if(rsa_inlen <= 0) {
 | 
			
		||||
		BIO_printf(bio_err, "Error reading input Data\n");
 | 
			
		||||
		exit(1);
 | 
			
		||||
	}
 | 
			
		||||
	if(rev) {
 | 
			
		||||
		int i;
 | 
			
		||||
		unsigned char ctmp;
 | 
			
		||||
		for(i = 0; i < rsa_inlen/2; i++) {
 | 
			
		||||
			ctmp = rsa_in[i];
 | 
			
		||||
			rsa_in[i] = rsa_in[rsa_inlen - 1 - i];
 | 
			
		||||
			rsa_in[rsa_inlen - 1 - i] = ctmp;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	switch(rsa_mode) {
 | 
			
		||||
    /* Read the input data */
 | 
			
		||||
    rsa_inlen = BIO_read(in, rsa_in, keysize * 2);
 | 
			
		||||
    if (rsa_inlen <= 0) {
 | 
			
		||||
        BIO_printf(bio_err, "Error reading input Data\n");
 | 
			
		||||
        exit(1);
 | 
			
		||||
    }
 | 
			
		||||
    if (rev) {
 | 
			
		||||
        int i;
 | 
			
		||||
        unsigned char ctmp;
 | 
			
		||||
        for (i = 0; i < rsa_inlen / 2; i++) {
 | 
			
		||||
            ctmp = rsa_in[i];
 | 
			
		||||
            rsa_in[i] = rsa_in[rsa_inlen - 1 - i];
 | 
			
		||||
            rsa_in[rsa_inlen - 1 - i] = ctmp;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    switch (rsa_mode) {
 | 
			
		||||
 | 
			
		||||
		case RSA_VERIFY:
 | 
			
		||||
			rsa_outlen  = RSA_public_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
		break;
 | 
			
		||||
    case RSA_VERIFY:
 | 
			
		||||
        rsa_outlen = RSA_public_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case RSA_SIGN:
 | 
			
		||||
			rsa_outlen  = RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
		break;
 | 
			
		||||
    case RSA_SIGN:
 | 
			
		||||
        rsa_outlen =
 | 
			
		||||
            RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case RSA_ENCRYPT:
 | 
			
		||||
			rsa_outlen  = RSA_public_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
		break;
 | 
			
		||||
    case RSA_ENCRYPT:
 | 
			
		||||
        rsa_outlen = RSA_public_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
		case RSA_DECRYPT:
 | 
			
		||||
			rsa_outlen  = RSA_private_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
		break;
 | 
			
		||||
    case RSA_DECRYPT:
 | 
			
		||||
        rsa_outlen =
 | 
			
		||||
            RSA_private_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(rsa_outlen <= 0) {
 | 
			
		||||
		BIO_printf(bio_err, "RSA operation error\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
	ret = 0;
 | 
			
		||||
	if(asn1parse) {
 | 
			
		||||
		if(!ASN1_parse_dump(out, rsa_out, rsa_outlen, 1, -1)) {
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
		}
 | 
			
		||||
	} else if(hexdump) BIO_dump(out, (char *)rsa_out, rsa_outlen);
 | 
			
		||||
	else BIO_write(out, rsa_out, rsa_outlen);
 | 
			
		||||
	end:
 | 
			
		||||
	RSA_free(rsa);
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	if(rsa_in) OPENSSL_free(rsa_in);
 | 
			
		||||
	if(rsa_out) OPENSSL_free(rsa_out);
 | 
			
		||||
	if(passin) OPENSSL_free(passin);
 | 
			
		||||
	return ret;
 | 
			
		||||
    if (rsa_outlen <= 0) {
 | 
			
		||||
        BIO_printf(bio_err, "RSA operation error\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
    if (asn1parse) {
 | 
			
		||||
        if (!ASN1_parse_dump(out, rsa_out, rsa_outlen, 1, -1)) {
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
        }
 | 
			
		||||
    } else if (hexdump)
 | 
			
		||||
        BIO_dump(out, (char *)rsa_out, rsa_outlen);
 | 
			
		||||
    else
 | 
			
		||||
        BIO_write(out, rsa_out, rsa_outlen);
 | 
			
		||||
 end:
 | 
			
		||||
    RSA_free(rsa);
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    if (rsa_in)
 | 
			
		||||
        OPENSSL_free(rsa_in);
 | 
			
		||||
    if (rsa_out)
 | 
			
		||||
        OPENSSL_free(rsa_out);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void usage()
 | 
			
		||||
{
 | 
			
		||||
	BIO_printf(bio_err, "Usage: rsautl [options]\n");
 | 
			
		||||
	BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
	BIO_printf(bio_err, "-out file       output file\n");
 | 
			
		||||
	BIO_printf(bio_err, "-inkey file     input key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-keyform arg    private key format - default PEM\n");
 | 
			
		||||
	BIO_printf(bio_err, "-pubin          input is an RSA public\n");
 | 
			
		||||
	BIO_printf(bio_err, "-certin         input is a certificate carrying an RSA public key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-ssl            use SSL v2 padding\n");
 | 
			
		||||
	BIO_printf(bio_err, "-raw            use no padding\n");
 | 
			
		||||
	BIO_printf(bio_err, "-pkcs           use PKCS#1 v1.5 padding (default)\n");
 | 
			
		||||
	BIO_printf(bio_err, "-oaep           use PKCS#1 OAEP\n");
 | 
			
		||||
	BIO_printf(bio_err, "-sign           sign with private key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-verify         verify with public key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-encrypt        encrypt with public key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-decrypt        decrypt with private key\n");
 | 
			
		||||
	BIO_printf(bio_err, "-hexdump        hex dump output\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	BIO_printf(bio_err, "-engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
	BIO_printf (bio_err, "-passin arg    pass phrase source\n");
 | 
			
		||||
#endif
 | 
			
		||||
    BIO_printf(bio_err, "Usage: rsautl [options]\n");
 | 
			
		||||
    BIO_printf(bio_err, "-in file        input file\n");
 | 
			
		||||
    BIO_printf(bio_err, "-out file       output file\n");
 | 
			
		||||
    BIO_printf(bio_err, "-inkey file     input key\n");
 | 
			
		||||
    BIO_printf(bio_err, "-keyform arg    private key format - default PEM\n");
 | 
			
		||||
    BIO_printf(bio_err, "-pubin          input is an RSA public\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               "-certin         input is a certificate carrying an RSA public key\n");
 | 
			
		||||
    BIO_printf(bio_err, "-ssl            use SSL v2 padding\n");
 | 
			
		||||
    BIO_printf(bio_err, "-raw            use no padding\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               "-pkcs           use PKCS#1 v1.5 padding (default)\n");
 | 
			
		||||
    BIO_printf(bio_err, "-oaep           use PKCS#1 OAEP\n");
 | 
			
		||||
    BIO_printf(bio_err, "-sign           sign with private key\n");
 | 
			
		||||
    BIO_printf(bio_err, "-verify         verify with public key\n");
 | 
			
		||||
    BIO_printf(bio_err, "-encrypt        encrypt with public key\n");
 | 
			
		||||
    BIO_printf(bio_err, "-decrypt        decrypt with private key\n");
 | 
			
		||||
    BIO_printf(bio_err, "-hexdump        hex dump output\n");
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               "-engine e       use engine e, possibly a hardware device.\n");
 | 
			
		||||
    BIO_printf(bio_err, "-passin arg    pass phrase source\n");
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else /* !OPENSSL_NO_RSA */
 | 
			
		||||
#else                           /* !OPENSSL_NO_RSA */
 | 
			
		||||
 | 
			
		||||
# if PEDANTIC
 | 
			
		||||
static void *dummy=&dummy;
 | 
			
		||||
static void *dummy = &dummy;
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										127
									
								
								apps/s_apps.h
									
									
									
									
									
								
							
							
						
						
									
										127
									
								
								apps/s_apps.h
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -63,7 +63,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -108,69 +108,114 @@
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(OPENSSL_SYS_NETWARE)  /* conflicts with winsock2 stuff on netware */
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
/* conflicts with winsock2 stuff on netware */
 | 
			
		||||
#if !defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
# include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <openssl/opensslconf.h>
 | 
			
		||||
 | 
			
		||||
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
 | 
			
		||||
#include <conio.h>
 | 
			
		||||
# include <conio.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(OPENSSL_SYS_MSDOS) && !defined(_WIN32)
 | 
			
		||||
#define _kbhit kbhit
 | 
			
		||||
# define _kbhit kbhit
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(OPENSSL_SYS_VMS) && !defined(FD_SET)
 | 
			
		||||
/* VAX C does not defined fd_set and friends, but it's actually quite simple */
 | 
			
		||||
/* These definitions are borrowed from SOCKETSHR.	/Richard Levitte */
 | 
			
		||||
#define MAX_NOFILE	32
 | 
			
		||||
#define	NBBY		 8		/* number of bits in a byte	*/
 | 
			
		||||
/*
 | 
			
		||||
 * VAX C does not defined fd_set and friends, but it's actually quite simple
 | 
			
		||||
 */
 | 
			
		||||
/* These definitions are borrowed from SOCKETSHR.       /Richard Levitte */
 | 
			
		||||
# define MAX_NOFILE      32
 | 
			
		||||
# define NBBY             8     /* number of bits in a byte */
 | 
			
		||||
 | 
			
		||||
#ifndef	FD_SETSIZE
 | 
			
		||||
#define	FD_SETSIZE	MAX_NOFILE
 | 
			
		||||
#endif	/* FD_SETSIZE */
 | 
			
		||||
# ifndef FD_SETSIZE
 | 
			
		||||
#  define FD_SETSIZE      MAX_NOFILE
 | 
			
		||||
# endif                         /* FD_SETSIZE */
 | 
			
		||||
 | 
			
		||||
/* How many things we'll allow select to use. 0 if unlimited */
 | 
			
		||||
#define MAXSELFD	MAX_NOFILE
 | 
			
		||||
typedef int	fd_mask;	/* int here! VMS prototypes int, not long */
 | 
			
		||||
#define NFDBITS	(sizeof(fd_mask) * NBBY)	/* bits per mask (power of 2!)*/
 | 
			
		||||
#define NFDSHIFT 5				/* Shift based on above */
 | 
			
		||||
# define MAXSELFD        MAX_NOFILE
 | 
			
		||||
typedef int fd_mask;            /* int here! VMS prototypes int, not long */
 | 
			
		||||
# define NFDBITS (sizeof(fd_mask) * NBBY)/* bits per mask (power of 2!) */
 | 
			
		||||
# define NFDSHIFT 5             /* Shift based on above */
 | 
			
		||||
 | 
			
		||||
typedef fd_mask fd_set;
 | 
			
		||||
#define	FD_SET(n, p)	(*(p) |= (1 << ((n) % NFDBITS)))
 | 
			
		||||
#define	FD_CLR(n, p)	(*(p) &= ~(1 << ((n) % NFDBITS)))
 | 
			
		||||
#define	FD_ISSET(n, p)	(*(p) & (1 << ((n) % NFDBITS)))
 | 
			
		||||
#define FD_ZERO(p)	memset((char *)(p), 0, sizeof(*(p)))
 | 
			
		||||
# define FD_SET(n, p)    (*(p) |= (1 << ((n) % NFDBITS)))
 | 
			
		||||
# define FD_CLR(n, p)    (*(p) &= ~(1 << ((n) % NFDBITS)))
 | 
			
		||||
# define FD_ISSET(n, p)  (*(p) & (1 << ((n) % NFDBITS)))
 | 
			
		||||
# define FD_ZERO(p)      memset((char *)(p), 0, sizeof(*(p)))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define PORT            4433
 | 
			
		||||
#define PORT_STR        "4433"
 | 
			
		||||
#define PROTOCOL        "tcp"
 | 
			
		||||
 | 
			
		||||
int do_server(int port, int type, int *ret, int (*cb) (char *hostname, int s, unsigned char *context), unsigned char *context);
 | 
			
		||||
int do_server(int port, int type, int *ret,
 | 
			
		||||
              int (*cb) (char *hostname, int s, int stype,
 | 
			
		||||
                         unsigned char *context), unsigned char *context,
 | 
			
		||||
              int naccept);
 | 
			
		||||
#ifndef NO_SYS_UN_H
 | 
			
		||||
int do_server_unix(const char *path, int *ret,
 | 
			
		||||
                   int (*cb) (char *hostname, int s, int stype,
 | 
			
		||||
                              unsigned char *context), unsigned char *context,
 | 
			
		||||
                   int naccept);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HEADER_X509_H
 | 
			
		||||
int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx);
 | 
			
		||||
int verify_callback(int ok, X509_STORE_CTX *ctx);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HEADER_SSL_H
 | 
			
		||||
int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file);
 | 
			
		||||
int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key);
 | 
			
		||||
int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key,
 | 
			
		||||
                       STACK_OF(X509) *chain, int build_chain);
 | 
			
		||||
int ssl_print_sigalgs(BIO *out, SSL *s);
 | 
			
		||||
int ssl_print_point_formats(BIO *out, SSL *s);
 | 
			
		||||
int ssl_print_curves(BIO *out, SSL *s, int noshared);
 | 
			
		||||
#endif
 | 
			
		||||
int ssl_print_tmp_key(BIO *out, SSL *s);
 | 
			
		||||
int init_client(int *sock, const char *server, int port, int type);
 | 
			
		||||
#ifndef NO_SYS_UN_H
 | 
			
		||||
int init_client_unix(int *sock, const char *server);
 | 
			
		||||
#endif
 | 
			
		||||
int init_client(int *sock, char *server, int port, int type);
 | 
			
		||||
int should_retry(int i);
 | 
			
		||||
int extract_port(char *str, short *port_ptr);
 | 
			
		||||
int extract_host_port(char *str,char **host_ptr,unsigned char *ip,short *p);
 | 
			
		||||
int extract_port(const char *str, short *port_ptr);
 | 
			
		||||
int extract_host_port(char *str, char **host_ptr, unsigned char *ip,
 | 
			
		||||
                      short *p);
 | 
			
		||||
 | 
			
		||||
long MS_CALLBACK bio_dump_callback(BIO *bio, int cmd, const char *argp,
 | 
			
		||||
				   int argi, long argl, long ret);
 | 
			
		||||
long bio_dump_callback(BIO *bio, int cmd, const char *argp,
 | 
			
		||||
                       int argi, long argl, long ret);
 | 
			
		||||
 | 
			
		||||
#ifdef HEADER_SSL_H
 | 
			
		||||
void MS_CALLBACK apps_ssl_info_callback(const SSL *s, int where, int ret);
 | 
			
		||||
void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg);
 | 
			
		||||
void MS_CALLBACK tlsext_cb(SSL *s, int client_server, int type,
 | 
			
		||||
					unsigned char *data, int len,
 | 
			
		||||
					void *arg);
 | 
			
		||||
void apps_ssl_info_callback(const SSL *s, int where, int ret);
 | 
			
		||||
void msg_cb(int write_p, int version, int content_type, const void *buf,
 | 
			
		||||
            size_t len, SSL *ssl, void *arg);
 | 
			
		||||
void tlsext_cb(SSL *s, int client_server, int type, unsigned char *data,
 | 
			
		||||
               int len, void *arg);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len);
 | 
			
		||||
int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int cookie_len);
 | 
			
		||||
int generate_cookie_callback(SSL *ssl, unsigned char *cookie,
 | 
			
		||||
                             unsigned int *cookie_len);
 | 
			
		||||
int verify_cookie_callback(SSL *ssl, unsigned char *cookie,
 | 
			
		||||
                           unsigned int cookie_len);
 | 
			
		||||
 | 
			
		||||
typedef struct ssl_excert_st SSL_EXCERT;
 | 
			
		||||
 | 
			
		||||
void ssl_ctx_set_excert(SSL_CTX *ctx, SSL_EXCERT *exc);
 | 
			
		||||
void ssl_excert_free(SSL_EXCERT *exc);
 | 
			
		||||
int args_excert(char ***pargs, int *pargc,
 | 
			
		||||
                int *badarg, BIO *err, SSL_EXCERT **pexc);
 | 
			
		||||
int load_excert(SSL_EXCERT **pexc, BIO *err);
 | 
			
		||||
void print_ssl_summary(BIO *bio, SSL *s);
 | 
			
		||||
#ifdef HEADER_SSL_H
 | 
			
		||||
int args_ssl(char ***pargs, int *pargc, SSL_CONF_CTX *cctx,
 | 
			
		||||
             int *badarg, BIO *err, STACK_OF(OPENSSL_STRING) **pstr);
 | 
			
		||||
int args_ssl_call(SSL_CTX *ctx, BIO *err, SSL_CONF_CTX *cctx,
 | 
			
		||||
                  STACK_OF(OPENSSL_STRING) *str, int no_ecdhe, int no_jpake);
 | 
			
		||||
int ssl_ctx_add_crls(SSL_CTX *ctx, STACK_OF(X509_CRL) *crls,
 | 
			
		||||
                     int crl_download);
 | 
			
		||||
int ssl_load_stores(SSL_CTX *ctx, const char *vfyCApath,
 | 
			
		||||
                    const char *vfyCAfile, const char *chCApath,
 | 
			
		||||
                    const char *chCAfile, STACK_OF(X509_CRL) *crls,
 | 
			
		||||
                    int crl_download);
 | 
			
		||||
void ssl_ctx_security_debug(SSL_CTX *ctx, BIO *out, int verbose);
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2252
									
								
								apps/s_cb.c
									
									
									
									
									
								
							
							
						
						
									
										2252
									
								
								apps/s_cb.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3519
									
								
								apps/s_client.c
									
									
									
									
									
								
							
							
						
						
									
										3519
									
								
								apps/s_client.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										5195
									
								
								apps/s_server.c
									
									
									
									
									
								
							
							
						
						
									
										5195
									
								
								apps/s_server.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1085
									
								
								apps/s_socket.c
									
									
									
									
									
								
							
							
						
						
									
										1085
									
								
								apps/s_socket.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										748
									
								
								apps/s_time.c
									
									
									
									
									
								
							
							
						
						
									
										748
									
								
								apps/s_time.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -58,7 +58,7 @@
 | 
			
		||||
 | 
			
		||||
#define NO_SHUTDOWN
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------
 | 
			
		||||
/* ----------------------------------------
 | 
			
		||||
   s_time - SSL client connection timer program
 | 
			
		||||
   Written and donated by Larry Streepy <streepy@healthcare.com>
 | 
			
		||||
  -----------------------------------------*/
 | 
			
		||||
@@ -69,20 +69,17 @@
 | 
			
		||||
 | 
			
		||||
#define USE_SOCKETS
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
#ifdef OPENSSL_NO_STDIO
 | 
			
		||||
#define APPS_WIN16
 | 
			
		||||
#endif
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
#include "s_apps.h"
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
#ifdef WIN32_STUFF
 | 
			
		||||
#include "winmain.h"
 | 
			
		||||
#include "wintext.h"
 | 
			
		||||
# include "winmain.h"
 | 
			
		||||
# include "wintext.h"
 | 
			
		||||
#endif
 | 
			
		||||
#if !defined(OPENSSL_SYS_MSDOS)
 | 
			
		||||
#include OPENSSL_UNISTD
 | 
			
		||||
# include OPENSSL_UNISTD
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
@@ -91,9 +88,12 @@
 | 
			
		||||
#undef ioctl
 | 
			
		||||
#define ioctl ioctlsocket
 | 
			
		||||
 | 
			
		||||
#define SSL_CONNECT_NAME	"localhost:4433"
 | 
			
		||||
#define SSL_CONNECT_NAME        "localhost:4433"
 | 
			
		||||
 | 
			
		||||
/*#define TEST_CERT "client.pem" */ /* no default cert. */
 | 
			
		||||
/* no default cert. */
 | 
			
		||||
/*
 | 
			
		||||
 * #define TEST_CERT "client.pem"
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#undef BUFSIZZ
 | 
			
		||||
#define BUFSIZZ 1024*10
 | 
			
		||||
@@ -106,13 +106,13 @@
 | 
			
		||||
#define max(a,b) (((a) > (b)) ? (a) : (b))
 | 
			
		||||
 | 
			
		||||
#undef SECONDS
 | 
			
		||||
#define SECONDS	30
 | 
			
		||||
#define SECONDS 30
 | 
			
		||||
extern int verify_depth;
 | 
			
		||||
extern int verify_error;
 | 
			
		||||
 | 
			
		||||
static void s_time_usage(void);
 | 
			
		||||
static int parseArgs( int argc, char **argv );
 | 
			
		||||
static SSL *doConnection( SSL *scon );
 | 
			
		||||
static int parseArgs(int argc, char **argv);
 | 
			
		||||
static SSL *doConnection(SSL *scon);
 | 
			
		||||
static void s_time_init(void);
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
@@ -120,58 +120,58 @@ static void s_time_init(void);
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* static char *port=PORT_STR;*/
 | 
			
		||||
static char *host=SSL_CONNECT_NAME;
 | 
			
		||||
static char *t_cert_file=NULL;
 | 
			
		||||
static char *t_key_file=NULL;
 | 
			
		||||
static char *CApath=NULL;
 | 
			
		||||
static char *CAfile=NULL;
 | 
			
		||||
static char *tm_cipher=NULL;
 | 
			
		||||
static char *host = SSL_CONNECT_NAME;
 | 
			
		||||
static char *t_cert_file = NULL;
 | 
			
		||||
static char *t_key_file = NULL;
 | 
			
		||||
static char *CApath = NULL;
 | 
			
		||||
static char *CAfile = NULL;
 | 
			
		||||
static char *tm_cipher = NULL;
 | 
			
		||||
static int tm_verify = SSL_VERIFY_NONE;
 | 
			
		||||
static int maxTime = SECONDS;
 | 
			
		||||
static SSL_CTX *tm_ctx=NULL;
 | 
			
		||||
static const SSL_METHOD *s_time_meth=NULL;
 | 
			
		||||
static char *s_www_path=NULL;
 | 
			
		||||
static long bytes_read=0; 
 | 
			
		||||
static int st_bugs=0;
 | 
			
		||||
static int perform=0;
 | 
			
		||||
static SSL_CTX *tm_ctx = NULL;
 | 
			
		||||
static const SSL_METHOD *s_time_meth = NULL;
 | 
			
		||||
static char *s_www_path = NULL;
 | 
			
		||||
static long bytes_read = 0;
 | 
			
		||||
static int st_bugs = 0;
 | 
			
		||||
static int perform = 0;
 | 
			
		||||
#ifdef FIONBIO
 | 
			
		||||
static int t_nbio=0;
 | 
			
		||||
static int t_nbio = 0;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef OPENSSL_SYS_WIN32
 | 
			
		||||
static int exitNow = 0;		/* Set when it's time to exit main */
 | 
			
		||||
static int exitNow = 0;         /* Set when it's time to exit main */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void s_time_init(void)
 | 
			
		||||
	{
 | 
			
		||||
	host=SSL_CONNECT_NAME;
 | 
			
		||||
	t_cert_file=NULL;
 | 
			
		||||
	t_key_file=NULL;
 | 
			
		||||
	CApath=NULL;
 | 
			
		||||
	CAfile=NULL;
 | 
			
		||||
	tm_cipher=NULL;
 | 
			
		||||
	tm_verify = SSL_VERIFY_NONE;
 | 
			
		||||
	maxTime = SECONDS;
 | 
			
		||||
	tm_ctx=NULL;
 | 
			
		||||
	s_time_meth=NULL;
 | 
			
		||||
	s_www_path=NULL;
 | 
			
		||||
	bytes_read=0; 
 | 
			
		||||
	st_bugs=0;
 | 
			
		||||
	perform=0;
 | 
			
		||||
{
 | 
			
		||||
    host = SSL_CONNECT_NAME;
 | 
			
		||||
    t_cert_file = NULL;
 | 
			
		||||
    t_key_file = NULL;
 | 
			
		||||
    CApath = NULL;
 | 
			
		||||
    CAfile = NULL;
 | 
			
		||||
    tm_cipher = NULL;
 | 
			
		||||
    tm_verify = SSL_VERIFY_NONE;
 | 
			
		||||
    maxTime = SECONDS;
 | 
			
		||||
    tm_ctx = NULL;
 | 
			
		||||
    s_time_meth = NULL;
 | 
			
		||||
    s_www_path = NULL;
 | 
			
		||||
    bytes_read = 0;
 | 
			
		||||
    st_bugs = 0;
 | 
			
		||||
    perform = 0;
 | 
			
		||||
 | 
			
		||||
#ifdef FIONBIO
 | 
			
		||||
	t_nbio=0;
 | 
			
		||||
    t_nbio = 0;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef OPENSSL_SYS_WIN32
 | 
			
		||||
	exitNow = 0;		/* Set when it's time to exit main */
 | 
			
		||||
    exitNow = 0;                /* Set when it's time to exit main */
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
 * usage - display usage message
 | 
			
		||||
 */
 | 
			
		||||
static void s_time_usage(void)
 | 
			
		||||
{
 | 
			
		||||
	static char umsg[] = "\
 | 
			
		||||
    static char umsg[] = "\
 | 
			
		||||
-time arg     - max number of seconds to collect data, default %d\n\
 | 
			
		||||
-verify arg   - turn on peer certificate verification, arg == depth\n\
 | 
			
		||||
-cert arg     - certificate file to use, PEM format assumed\n\
 | 
			
		||||
@@ -181,19 +181,19 @@ static void s_time_usage(void)
 | 
			
		||||
-CAfile arg   - PEM format file of CA's\n\
 | 
			
		||||
-cipher       - preferred cipher to use, play with 'openssl ciphers'\n\n";
 | 
			
		||||
 | 
			
		||||
	printf( "usage: s_time <args>\n\n" );
 | 
			
		||||
    printf("usage: s_time <args>\n\n");
 | 
			
		||||
 | 
			
		||||
	printf("-connect host:port - host:port to connect to (default is %s)\n",SSL_CONNECT_NAME);
 | 
			
		||||
    printf("-connect host:port - host:port to connect to (default is %s)\n",
 | 
			
		||||
           SSL_CONNECT_NAME);
 | 
			
		||||
#ifdef FIONBIO
 | 
			
		||||
	printf("-nbio         - Run with non-blocking IO\n");
 | 
			
		||||
	printf("-ssl2         - Just use SSLv2\n");
 | 
			
		||||
	printf("-ssl3         - Just use SSLv3\n");
 | 
			
		||||
	printf("-bugs         - Turn on SSL bug compatibility\n");
 | 
			
		||||
	printf("-new          - Just time new connections\n");
 | 
			
		||||
	printf("-reuse        - Just time connection reuse\n");
 | 
			
		||||
	printf("-www page     - Retrieve 'page' from the site\n");
 | 
			
		||||
    printf("-nbio         - Run with non-blocking IO\n");
 | 
			
		||||
    printf("-ssl3         - Just use SSLv3\n");
 | 
			
		||||
    printf("-bugs         - Turn on SSL bug compatibility\n");
 | 
			
		||||
    printf("-new          - Just time new connections\n");
 | 
			
		||||
    printf("-reuse        - Just time connection reuse\n");
 | 
			
		||||
    printf("-www page     - Retrieve 'page' from the site\n");
 | 
			
		||||
#endif
 | 
			
		||||
	printf( umsg,SECONDS );
 | 
			
		||||
    printf(umsg, SECONDS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
@@ -205,428 +205,420 @@ static int parseArgs(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    int badop = 0;
 | 
			
		||||
 | 
			
		||||
    verify_depth=0;
 | 
			
		||||
    verify_error=X509_V_OK;
 | 
			
		||||
    verify_depth = 0;
 | 
			
		||||
    verify_error = X509_V_OK;
 | 
			
		||||
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
	if (strcmp(*argv,"-connect") == 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (--argc < 1) goto bad;
 | 
			
		||||
		host= *(++argv);
 | 
			
		||||
		}
 | 
			
		||||
        if (strcmp(*argv, "-connect") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            host = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
#if 0
 | 
			
		||||
	else if( strcmp(*argv,"-host") == 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (--argc < 1) goto bad;
 | 
			
		||||
		host= *(++argv);
 | 
			
		||||
		}
 | 
			
		||||
	else if( strcmp(*argv,"-port") == 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (--argc < 1) goto bad;
 | 
			
		||||
		port= *(++argv);
 | 
			
		||||
		}
 | 
			
		||||
        else if (strcmp(*argv, "-host") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            host = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-port") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            port = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
	else if (strcmp(*argv,"-reuse") == 0)
 | 
			
		||||
		perform=2;
 | 
			
		||||
	else if (strcmp(*argv,"-new") == 0)
 | 
			
		||||
		perform=1;
 | 
			
		||||
	else if( strcmp(*argv,"-verify") == 0) {
 | 
			
		||||
        else if (strcmp(*argv, "-reuse") == 0)
 | 
			
		||||
            perform = 2;
 | 
			
		||||
        else if (strcmp(*argv, "-new") == 0)
 | 
			
		||||
            perform = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-verify") == 0) {
 | 
			
		||||
 | 
			
		||||
	    tm_verify=SSL_VERIFY_PEER|SSL_VERIFY_CLIENT_ONCE;
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    verify_depth=atoi(*(++argv));
 | 
			
		||||
	    BIO_printf(bio_err,"verify depth is %d\n",verify_depth);
 | 
			
		||||
            tm_verify = SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE;
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            verify_depth = atoi(*(++argv));
 | 
			
		||||
            BIO_printf(bio_err, "verify depth is %d\n", verify_depth);
 | 
			
		||||
 | 
			
		||||
	} else if( strcmp(*argv,"-cert") == 0) {
 | 
			
		||||
        } else if (strcmp(*argv, "-cert") == 0) {
 | 
			
		||||
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    t_cert_file= *(++argv);
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            t_cert_file = *(++argv);
 | 
			
		||||
 | 
			
		||||
	} else if( strcmp(*argv,"-key") == 0) {
 | 
			
		||||
        } else if (strcmp(*argv, "-key") == 0) {
 | 
			
		||||
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    t_key_file= *(++argv);
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            t_key_file = *(++argv);
 | 
			
		||||
 | 
			
		||||
	} else if( strcmp(*argv,"-CApath") == 0) {
 | 
			
		||||
        } else if (strcmp(*argv, "-CApath") == 0) {
 | 
			
		||||
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    CApath= *(++argv);
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            CApath = *(++argv);
 | 
			
		||||
 | 
			
		||||
	} else if( strcmp(*argv,"-CAfile") == 0) {
 | 
			
		||||
        } else if (strcmp(*argv, "-CAfile") == 0) {
 | 
			
		||||
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    CAfile= *(++argv);
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            CAfile = *(++argv);
 | 
			
		||||
 | 
			
		||||
	} else if( strcmp(*argv,"-cipher") == 0) {
 | 
			
		||||
        } else if (strcmp(*argv, "-cipher") == 0) {
 | 
			
		||||
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    tm_cipher= *(++argv);
 | 
			
		||||
	}
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            tm_cipher = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
#ifdef FIONBIO
 | 
			
		||||
	else if(strcmp(*argv,"-nbio") == 0) {
 | 
			
		||||
	    t_nbio=1;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
	else if(strcmp(*argv,"-www") == 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (--argc < 1) goto bad;
 | 
			
		||||
		s_www_path= *(++argv);
 | 
			
		||||
		if(strlen(s_www_path) > MYBUFSIZ-100)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"-www option too long\n");
 | 
			
		||||
			badop=1;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else if(strcmp(*argv,"-bugs") == 0)
 | 
			
		||||
	    st_bugs=1;
 | 
			
		||||
#ifndef OPENSSL_NO_SSL2
 | 
			
		||||
	else if(strcmp(*argv,"-ssl2") == 0)
 | 
			
		||||
	    s_time_meth=SSLv2_client_method();
 | 
			
		||||
        else if (strcmp(*argv, "-nbio") == 0) {
 | 
			
		||||
            t_nbio = 1;
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
        else if (strcmp(*argv, "-www") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            s_www_path = *(++argv);
 | 
			
		||||
            if (strlen(s_www_path) > MYBUFSIZ - 100) {
 | 
			
		||||
                BIO_printf(bio_err, "-www option too long\n");
 | 
			
		||||
                badop = 1;
 | 
			
		||||
            }
 | 
			
		||||
        } else if (strcmp(*argv, "-bugs") == 0)
 | 
			
		||||
            st_bugs = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_SSL3
 | 
			
		||||
	else if(strcmp(*argv,"-ssl3") == 0)
 | 
			
		||||
	    s_time_meth=SSLv3_client_method();
 | 
			
		||||
        else if (strcmp(*argv, "-ssl3") == 0)
 | 
			
		||||
            s_time_meth = SSLv3_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
	else if( strcmp(*argv,"-time") == 0) {
 | 
			
		||||
        else if (strcmp(*argv, "-time") == 0) {
 | 
			
		||||
 | 
			
		||||
	    if (--argc < 1) goto bad;
 | 
			
		||||
	    maxTime= atoi(*(++argv));
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
	    BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
	    badop=1;
 | 
			
		||||
	    break;
 | 
			
		||||
	}
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            maxTime = atoi(*(++argv));
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badop = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (perform == 0) perform=3;
 | 
			
		||||
    if (perform == 0)
 | 
			
		||||
        perform = 3;
 | 
			
		||||
 | 
			
		||||
    if(badop) {
 | 
			
		||||
bad:
 | 
			
		||||
		s_time_usage();
 | 
			
		||||
		return -1;
 | 
			
		||||
    if (badop) {
 | 
			
		||||
 bad:
 | 
			
		||||
        s_time_usage();
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	return 0;			/* Valid args */
 | 
			
		||||
    return 0;                   /* Valid args */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
 * TIME - time functions
 | 
			
		||||
 */
 | 
			
		||||
#define START	0
 | 
			
		||||
#define STOP	1
 | 
			
		||||
#define START   0
 | 
			
		||||
#define STOP    1
 | 
			
		||||
 | 
			
		||||
static double tm_Time_F(int s)
 | 
			
		||||
	{
 | 
			
		||||
	return app_tminterval(s,1);
 | 
			
		||||
	}
 | 
			
		||||
{
 | 
			
		||||
    return app_tminterval(s, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
 * MAIN - main processing area for client
 | 
			
		||||
 *			real name depends on MONOLITH
 | 
			
		||||
 *                      real name depends on MONOLITH
 | 
			
		||||
 */
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	double totalTime = 0.0;
 | 
			
		||||
	int nConn = 0;
 | 
			
		||||
	SSL *scon=NULL;
 | 
			
		||||
	long finishtime=0;
 | 
			
		||||
	int ret=1,i;
 | 
			
		||||
	MS_STATIC char buf[1024*8];
 | 
			
		||||
	int ver;
 | 
			
		||||
{
 | 
			
		||||
    double totalTime = 0.0;
 | 
			
		||||
    int nConn = 0;
 | 
			
		||||
    SSL *scon = NULL;
 | 
			
		||||
    long finishtime = 0;
 | 
			
		||||
    int ret = 1, i;
 | 
			
		||||
    MS_STATIC char buf[1024 * 8];
 | 
			
		||||
    int ver;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
	s_time_init();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
    s_time_init();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
	s_time_meth=SSLv23_client_method();
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL3)
 | 
			
		||||
	s_time_meth=SSLv3_client_method();
 | 
			
		||||
#elif !defined(OPENSSL_NO_SSL2)
 | 
			
		||||
	s_time_meth=SSLv2_client_method();
 | 
			
		||||
#endif
 | 
			
		||||
    s_time_meth = SSLv23_client_method();
 | 
			
		||||
 | 
			
		||||
	/* parse the command line arguments */
 | 
			
		||||
	if( parseArgs( argc, argv ) < 0 )
 | 
			
		||||
		goto end;
 | 
			
		||||
    /* parse the command line arguments */
 | 
			
		||||
    if (parseArgs(argc, argv) < 0)
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	OpenSSL_add_ssl_algorithms();
 | 
			
		||||
	if ((tm_ctx=SSL_CTX_new(s_time_meth)) == NULL) return(1);
 | 
			
		||||
    OpenSSL_add_ssl_algorithms();
 | 
			
		||||
    if ((tm_ctx = SSL_CTX_new(s_time_meth)) == NULL)
 | 
			
		||||
        return (1);
 | 
			
		||||
 | 
			
		||||
	SSL_CTX_set_quiet_shutdown(tm_ctx,1);
 | 
			
		||||
    SSL_CTX_set_quiet_shutdown(tm_ctx, 1);
 | 
			
		||||
 | 
			
		||||
	if (st_bugs) SSL_CTX_set_options(tm_ctx,SSL_OP_ALL);
 | 
			
		||||
	SSL_CTX_set_cipher_list(tm_ctx,tm_cipher);
 | 
			
		||||
	if(!set_cert_stuff(tm_ctx,t_cert_file,t_key_file)) 
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (st_bugs)
 | 
			
		||||
        SSL_CTX_set_options(tm_ctx, SSL_OP_ALL);
 | 
			
		||||
    SSL_CTX_set_cipher_list(tm_ctx, tm_cipher);
 | 
			
		||||
    if (!set_cert_stuff(tm_ctx, t_cert_file, t_key_file))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	SSL_load_error_strings();
 | 
			
		||||
    SSL_load_error_strings();
 | 
			
		||||
 | 
			
		||||
	if ((!SSL_CTX_load_verify_locations(tm_ctx,CAfile,CApath)) ||
 | 
			
		||||
		(!SSL_CTX_set_default_verify_paths(tm_ctx)))
 | 
			
		||||
		{
 | 
			
		||||
		/* BIO_printf(bio_err,"error setting default verify locations\n"); */
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		/* goto end; */
 | 
			
		||||
		}
 | 
			
		||||
    if ((!SSL_CTX_load_verify_locations(tm_ctx, CAfile, CApath)) ||
 | 
			
		||||
        (!SSL_CTX_set_default_verify_paths(tm_ctx))) {
 | 
			
		||||
        /*
 | 
			
		||||
         * BIO_printf(bio_err,"error setting default verify locations\n");
 | 
			
		||||
         */
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        /* goto end; */
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (tm_cipher == NULL)
 | 
			
		||||
		tm_cipher = getenv("SSL_CIPHER");
 | 
			
		||||
    if (tm_cipher == NULL)
 | 
			
		||||
        tm_cipher = getenv("SSL_CIPHER");
 | 
			
		||||
 | 
			
		||||
	if (tm_cipher == NULL ) {
 | 
			
		||||
		fprintf( stderr, "No CIPHER specified\n" );
 | 
			
		||||
	}
 | 
			
		||||
    if (tm_cipher == NULL) {
 | 
			
		||||
        fprintf(stderr, "No CIPHER specified\n");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!(perform & 1)) goto next;
 | 
			
		||||
	printf( "Collecting connection statistics for %d seconds\n", maxTime );
 | 
			
		||||
    if (!(perform & 1))
 | 
			
		||||
        goto next;
 | 
			
		||||
    printf("Collecting connection statistics for %d seconds\n", maxTime);
 | 
			
		||||
 | 
			
		||||
	/* Loop and time how long it takes to make connections */
 | 
			
		||||
    /* Loop and time how long it takes to make connections */
 | 
			
		||||
 | 
			
		||||
	bytes_read=0;
 | 
			
		||||
	finishtime=(long)time(NULL)+maxTime;
 | 
			
		||||
	tm_Time_F(START);
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (finishtime < (long)time(NULL)) break;
 | 
			
		||||
    bytes_read = 0;
 | 
			
		||||
    finishtime = (long)time(NULL) + maxTime;
 | 
			
		||||
    tm_Time_F(START);
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (finishtime < (long)time(NULL))
 | 
			
		||||
            break;
 | 
			
		||||
#ifdef WIN32_STUFF
 | 
			
		||||
 | 
			
		||||
		if( flushWinMsgs(0) == -1 )
 | 
			
		||||
			goto end;
 | 
			
		||||
        if (flushWinMsgs(0) == -1)
 | 
			
		||||
            goto end;
 | 
			
		||||
 | 
			
		||||
		if( waitingToDie || exitNow )		/* we're dead */
 | 
			
		||||
			goto end;
 | 
			
		||||
        if (waitingToDie || exitNow) /* we're dead */
 | 
			
		||||
            goto end;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		if( (scon = doConnection( NULL )) == NULL )
 | 
			
		||||
			goto end;
 | 
			
		||||
 | 
			
		||||
		if (s_www_path != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
			
		||||
			SSL_write(scon,buf,strlen(buf));
 | 
			
		||||
			while ((i=SSL_read(scon,buf,sizeof(buf))) > 0)
 | 
			
		||||
				bytes_read+=i;
 | 
			
		||||
			}
 | 
			
		||||
        if ((scon = doConnection(NULL)) == NULL)
 | 
			
		||||
            goto end;
 | 
			
		||||
 | 
			
		||||
        if (s_www_path != NULL) {
 | 
			
		||||
            BIO_snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n",
 | 
			
		||||
                         s_www_path);
 | 
			
		||||
            SSL_write(scon, buf, strlen(buf));
 | 
			
		||||
            while ((i = SSL_read(scon, buf, sizeof(buf))) > 0)
 | 
			
		||||
                bytes_read += i;
 | 
			
		||||
        }
 | 
			
		||||
#ifdef NO_SHUTDOWN
 | 
			
		||||
		SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
 | 
			
		||||
        SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
 | 
			
		||||
#else
 | 
			
		||||
		SSL_shutdown(scon);
 | 
			
		||||
        SSL_shutdown(scon);
 | 
			
		||||
#endif
 | 
			
		||||
		SHUTDOWN2(SSL_get_fd(scon));
 | 
			
		||||
        SHUTDOWN2(SSL_get_fd(scon));
 | 
			
		||||
 | 
			
		||||
		nConn += 1;
 | 
			
		||||
		if (SSL_session_reused(scon))
 | 
			
		||||
			ver='r';
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			ver=SSL_version(scon);
 | 
			
		||||
			if (ver == TLS1_VERSION)
 | 
			
		||||
				ver='t';
 | 
			
		||||
			else if (ver == SSL3_VERSION)
 | 
			
		||||
				ver='3';
 | 
			
		||||
			else if (ver == SSL2_VERSION)
 | 
			
		||||
				ver='2';
 | 
			
		||||
			else
 | 
			
		||||
				ver='*';
 | 
			
		||||
			}
 | 
			
		||||
		fputc(ver,stdout);
 | 
			
		||||
		fflush(stdout);
 | 
			
		||||
        nConn += 1;
 | 
			
		||||
        if (SSL_session_reused(scon))
 | 
			
		||||
            ver = 'r';
 | 
			
		||||
        else {
 | 
			
		||||
            ver = SSL_version(scon);
 | 
			
		||||
            if (ver == TLS1_VERSION)
 | 
			
		||||
                ver = 't';
 | 
			
		||||
            else if (ver == SSL3_VERSION)
 | 
			
		||||
                ver = '3';
 | 
			
		||||
            else
 | 
			
		||||
                ver = '*';
 | 
			
		||||
        }
 | 
			
		||||
        fputc(ver, stdout);
 | 
			
		||||
        fflush(stdout);
 | 
			
		||||
 | 
			
		||||
		SSL_free( scon );
 | 
			
		||||
		scon=NULL;
 | 
			
		||||
		}
 | 
			
		||||
	totalTime += tm_Time_F(STOP); /* Add the time for this iteration */
 | 
			
		||||
        SSL_free(scon);
 | 
			
		||||
        scon = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    totalTime += tm_Time_F(STOP); /* Add the time for this iteration */
 | 
			
		||||
 | 
			
		||||
	i=(int)((long)time(NULL)-finishtime+maxTime);
 | 
			
		||||
	printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read);
 | 
			
		||||
	printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn);
 | 
			
		||||
    i = (int)((long)time(NULL) - finishtime + maxTime);
 | 
			
		||||
    printf
 | 
			
		||||
        ("\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n",
 | 
			
		||||
         nConn, totalTime, ((double)nConn / totalTime), bytes_read);
 | 
			
		||||
    printf
 | 
			
		||||
        ("%d connections in %ld real seconds, %ld bytes read per connection\n",
 | 
			
		||||
         nConn, (long)time(NULL) - finishtime + maxTime, bytes_read / nConn);
 | 
			
		||||
 | 
			
		||||
	/* Now loop and time connections using the same session id over and over */
 | 
			
		||||
    /*
 | 
			
		||||
     * Now loop and time connections using the same session id over and over
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
next:
 | 
			
		||||
	if (!(perform & 2)) goto end;
 | 
			
		||||
	printf( "\n\nNow timing with session id reuse.\n" );
 | 
			
		||||
 next:
 | 
			
		||||
    if (!(perform & 2))
 | 
			
		||||
        goto end;
 | 
			
		||||
    printf("\n\nNow timing with session id reuse.\n");
 | 
			
		||||
 | 
			
		||||
	/* Get an SSL object so we can reuse the session id */
 | 
			
		||||
	if( (scon = doConnection( NULL )) == NULL )
 | 
			
		||||
		{
 | 
			
		||||
		fprintf( stderr, "Unable to get connection\n" );
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    /* Get an SSL object so we can reuse the session id */
 | 
			
		||||
    if ((scon = doConnection(NULL)) == NULL) {
 | 
			
		||||
        fprintf(stderr, "Unable to get connection\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (s_www_path != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
			
		||||
		SSL_write(scon,buf,strlen(buf));
 | 
			
		||||
		while (SSL_read(scon,buf,sizeof(buf)) > 0)
 | 
			
		||||
			;
 | 
			
		||||
		}
 | 
			
		||||
    if (s_www_path != NULL) {
 | 
			
		||||
        BIO_snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n", s_www_path);
 | 
			
		||||
        SSL_write(scon, buf, strlen(buf));
 | 
			
		||||
        while (SSL_read(scon, buf, sizeof(buf)) > 0) ;
 | 
			
		||||
    }
 | 
			
		||||
#ifdef NO_SHUTDOWN
 | 
			
		||||
	SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
 | 
			
		||||
    SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
 | 
			
		||||
#else
 | 
			
		||||
	SSL_shutdown(scon);
 | 
			
		||||
    SSL_shutdown(scon);
 | 
			
		||||
#endif
 | 
			
		||||
	SHUTDOWN2(SSL_get_fd(scon));
 | 
			
		||||
    SHUTDOWN2(SSL_get_fd(scon));
 | 
			
		||||
 | 
			
		||||
	nConn = 0;
 | 
			
		||||
	totalTime = 0.0;
 | 
			
		||||
    nConn = 0;
 | 
			
		||||
    totalTime = 0.0;
 | 
			
		||||
 | 
			
		||||
	finishtime=(long)time(NULL)+maxTime;
 | 
			
		||||
    finishtime = (long)time(NULL) + maxTime;
 | 
			
		||||
 | 
			
		||||
	printf( "starting\n" );
 | 
			
		||||
	bytes_read=0;
 | 
			
		||||
	tm_Time_F(START);
 | 
			
		||||
		
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (finishtime < (long)time(NULL)) break;
 | 
			
		||||
    printf("starting\n");
 | 
			
		||||
    bytes_read = 0;
 | 
			
		||||
    tm_Time_F(START);
 | 
			
		||||
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (finishtime < (long)time(NULL))
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
#ifdef WIN32_STUFF
 | 
			
		||||
		if( flushWinMsgs(0) == -1 )
 | 
			
		||||
			goto end;
 | 
			
		||||
        if (flushWinMsgs(0) == -1)
 | 
			
		||||
            goto end;
 | 
			
		||||
 | 
			
		||||
		if( waitingToDie || exitNow )	/* we're dead */
 | 
			
		||||
			goto end;
 | 
			
		||||
        if (waitingToDie || exitNow) /* we're dead */
 | 
			
		||||
            goto end;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	 	if( (doConnection( scon )) == NULL )
 | 
			
		||||
			goto end;
 | 
			
		||||
 | 
			
		||||
		if (s_www_path)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
			
		||||
			SSL_write(scon,buf,strlen(buf));
 | 
			
		||||
			while ((i=SSL_read(scon,buf,sizeof(buf))) > 0)
 | 
			
		||||
				bytes_read+=i;
 | 
			
		||||
			}
 | 
			
		||||
        if ((doConnection(scon)) == NULL)
 | 
			
		||||
            goto end;
 | 
			
		||||
 | 
			
		||||
        if (s_www_path) {
 | 
			
		||||
            BIO_snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n",
 | 
			
		||||
                         s_www_path);
 | 
			
		||||
            SSL_write(scon, buf, strlen(buf));
 | 
			
		||||
            while ((i = SSL_read(scon, buf, sizeof(buf))) > 0)
 | 
			
		||||
                bytes_read += i;
 | 
			
		||||
        }
 | 
			
		||||
#ifdef NO_SHUTDOWN
 | 
			
		||||
		SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
 | 
			
		||||
        SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
 | 
			
		||||
#else
 | 
			
		||||
		SSL_shutdown(scon);
 | 
			
		||||
        SSL_shutdown(scon);
 | 
			
		||||
#endif
 | 
			
		||||
		SHUTDOWN2(SSL_get_fd(scon));
 | 
			
		||||
	
 | 
			
		||||
		nConn += 1;
 | 
			
		||||
		if (SSL_session_reused(scon))
 | 
			
		||||
			ver='r';
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			ver=SSL_version(scon);
 | 
			
		||||
			if (ver == TLS1_VERSION)
 | 
			
		||||
				ver='t';
 | 
			
		||||
			else if (ver == SSL3_VERSION)
 | 
			
		||||
				ver='3';
 | 
			
		||||
			else if (ver == SSL2_VERSION)
 | 
			
		||||
				ver='2';
 | 
			
		||||
			else
 | 
			
		||||
				ver='*';
 | 
			
		||||
			}
 | 
			
		||||
		fputc(ver,stdout);
 | 
			
		||||
		fflush(stdout);
 | 
			
		||||
		}
 | 
			
		||||
	totalTime += tm_Time_F(STOP); /* Add the time for this iteration*/
 | 
			
		||||
        SHUTDOWN2(SSL_get_fd(scon));
 | 
			
		||||
 | 
			
		||||
        nConn += 1;
 | 
			
		||||
        if (SSL_session_reused(scon))
 | 
			
		||||
            ver = 'r';
 | 
			
		||||
        else {
 | 
			
		||||
            ver = SSL_version(scon);
 | 
			
		||||
            if (ver == TLS1_VERSION)
 | 
			
		||||
                ver = 't';
 | 
			
		||||
            else if (ver == SSL3_VERSION)
 | 
			
		||||
                ver = '3';
 | 
			
		||||
            else
 | 
			
		||||
                ver = '*';
 | 
			
		||||
        }
 | 
			
		||||
        fputc(ver, stdout);
 | 
			
		||||
        fflush(stdout);
 | 
			
		||||
    }
 | 
			
		||||
    totalTime += tm_Time_F(STOP); /* Add the time for this iteration */
 | 
			
		||||
 | 
			
		||||
	printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read);
 | 
			
		||||
	printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn);
 | 
			
		||||
    printf
 | 
			
		||||
        ("\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n",
 | 
			
		||||
         nConn, totalTime, ((double)nConn / totalTime), bytes_read);
 | 
			
		||||
    printf
 | 
			
		||||
        ("%d connections in %ld real seconds, %ld bytes read per connection\n",
 | 
			
		||||
         nConn, (long)time(NULL) - finishtime + maxTime, bytes_read / nConn);
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (scon != NULL) SSL_free(scon);
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (scon != NULL)
 | 
			
		||||
        SSL_free(scon);
 | 
			
		||||
 | 
			
		||||
	if (tm_ctx != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		SSL_CTX_free(tm_ctx);
 | 
			
		||||
		tm_ctx=NULL;
 | 
			
		||||
		}
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    if (tm_ctx != NULL) {
 | 
			
		||||
        SSL_CTX_free(tm_ctx);
 | 
			
		||||
        tm_ctx = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
/*-
 | 
			
		||||
 * doConnection - make a connection
 | 
			
		||||
 * Args:
 | 
			
		||||
 *		scon	= earlier ssl connection for session id, or NULL
 | 
			
		||||
 *              scon    = earlier ssl connection for session id, or NULL
 | 
			
		||||
 * Returns:
 | 
			
		||||
 *		SSL *	= the connection pointer.
 | 
			
		||||
 *              SSL *   = the connection pointer.
 | 
			
		||||
 */
 | 
			
		||||
static SSL *doConnection(SSL *scon)
 | 
			
		||||
	{
 | 
			
		||||
	BIO *conn;
 | 
			
		||||
	SSL *serverCon;
 | 
			
		||||
	int width, i;
 | 
			
		||||
	fd_set readfds;
 | 
			
		||||
{
 | 
			
		||||
    BIO *conn;
 | 
			
		||||
    SSL *serverCon;
 | 
			
		||||
    int width, i;
 | 
			
		||||
    fd_set readfds;
 | 
			
		||||
 | 
			
		||||
	if ((conn=BIO_new(BIO_s_connect())) == NULL)
 | 
			
		||||
		return(NULL);
 | 
			
		||||
    if ((conn = BIO_new(BIO_s_connect())) == NULL)
 | 
			
		||||
        return (NULL);
 | 
			
		||||
 | 
			
		||||
/*	BIO_set_conn_port(conn,port);*/
 | 
			
		||||
	BIO_set_conn_hostname(conn,host);
 | 
			
		||||
/*      BIO_set_conn_port(conn,port);*/
 | 
			
		||||
    BIO_set_conn_hostname(conn, host);
 | 
			
		||||
 | 
			
		||||
	if (scon == NULL)
 | 
			
		||||
		serverCon=SSL_new(tm_ctx);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		serverCon=scon;
 | 
			
		||||
		SSL_set_connect_state(serverCon);
 | 
			
		||||
		}
 | 
			
		||||
    if (scon == NULL)
 | 
			
		||||
        serverCon = SSL_new(tm_ctx);
 | 
			
		||||
    else {
 | 
			
		||||
        serverCon = scon;
 | 
			
		||||
        SSL_set_connect_state(serverCon);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	SSL_set_bio(serverCon,conn,conn);
 | 
			
		||||
    SSL_set_bio(serverCon, conn, conn);
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
	if( scon != NULL )
 | 
			
		||||
		SSL_set_session(serverCon,SSL_get_session(scon));
 | 
			
		||||
    if (scon != NULL)
 | 
			
		||||
        SSL_set_session(serverCon, SSL_get_session(scon));
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	/* ok, lets connect */
 | 
			
		||||
	for(;;) {
 | 
			
		||||
		i=SSL_connect(serverCon);
 | 
			
		||||
		if (BIO_sock_should_retry(i))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"DELAY\n");
 | 
			
		||||
 | 
			
		||||
			i=SSL_get_fd(serverCon);
 | 
			
		||||
			width=i+1;
 | 
			
		||||
			FD_ZERO(&readfds);
 | 
			
		||||
			openssl_fdset(i,&readfds);
 | 
			
		||||
			/* Note: under VMS with SOCKETSHR the 2nd parameter
 | 
			
		||||
			 * is currently of type (int *) whereas under other
 | 
			
		||||
			 * systems it is (void *) if you don't have a cast it
 | 
			
		||||
			 * will choke the compiler: if you do have a cast then
 | 
			
		||||
			 * you can either go for (int *) or (void *).
 | 
			
		||||
			 */
 | 
			
		||||
			select(width,(void *)&readfds,NULL,NULL,NULL);
 | 
			
		||||
			continue;
 | 
			
		||||
			}
 | 
			
		||||
		break;
 | 
			
		||||
		}
 | 
			
		||||
	if(i <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"ERROR\n");
 | 
			
		||||
		if (verify_error != X509_V_OK)
 | 
			
		||||
			BIO_printf(bio_err,"verify error:%s\n",
 | 
			
		||||
				X509_verify_cert_error_string(verify_error));
 | 
			
		||||
		else
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
		if (scon == NULL)
 | 
			
		||||
			SSL_free(serverCon);
 | 
			
		||||
		return NULL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	return serverCon;
 | 
			
		||||
	}
 | 
			
		||||
    /* ok, lets connect */
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        i = SSL_connect(serverCon);
 | 
			
		||||
        if (BIO_sock_should_retry(i)) {
 | 
			
		||||
            BIO_printf(bio_err, "DELAY\n");
 | 
			
		||||
 | 
			
		||||
            i = SSL_get_fd(serverCon);
 | 
			
		||||
            width = i + 1;
 | 
			
		||||
            FD_ZERO(&readfds);
 | 
			
		||||
            openssl_fdset(i, &readfds);
 | 
			
		||||
            /*
 | 
			
		||||
             * Note: under VMS with SOCKETSHR the 2nd parameter is currently
 | 
			
		||||
             * of type (int *) whereas under other systems it is (void *) if
 | 
			
		||||
             * you don't have a cast it will choke the compiler: if you do
 | 
			
		||||
             * have a cast then you can either go for (int *) or (void *).
 | 
			
		||||
             */
 | 
			
		||||
            select(width, (void *)&readfds, NULL, NULL, NULL);
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    if (i <= 0) {
 | 
			
		||||
        BIO_printf(bio_err, "ERROR\n");
 | 
			
		||||
        if (verify_error != X509_V_OK)
 | 
			
		||||
            BIO_printf(bio_err, "verify error:%s\n",
 | 
			
		||||
                       X509_verify_cert_error_string(verify_error));
 | 
			
		||||
        else
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
        if (scon == NULL)
 | 
			
		||||
            SSL_free(serverCon);
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return serverCon;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										413
									
								
								apps/server.pem
									
									
									
									
									
								
							
							
						
						
									
										413
									
								
								apps/server.pem
									
									
									
									
									
								
							@@ -1,369 +1,52 @@
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
 | 
			
		||||
subject= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Server test cert (512 bit)
 | 
			
		||||
subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = Test Server Cert
 | 
			
		||||
issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB6TCCAVICAQYwDQYJKoZIhvcNAQEEBQAwWzELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYD
 | 
			
		||||
VQQDExJUZXN0IENBICgxMDI0IGJpdCkwHhcNMDAxMDE2MjIzMTAzWhcNMDMwMTE0
 | 
			
		||||
MjIzMTAzWjBjMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
 | 
			
		||||
A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxIzAhBgNVBAMTGlNlcnZlciB0ZXN0IGNl
 | 
			
		||||
cnQgKDUxMiBiaXQpMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ+zw4Qnlf8SMVIP
 | 
			
		||||
Fe9GEcStgOY2Ww/dgNdhjeD8ckUJNP5VZkVDTGiXav6ooKXfX3j/7tdkuD8Ey2//
 | 
			
		||||
Kv7+ue0CAwEAATANBgkqhkiG9w0BAQQFAAOBgQCT0grFQeZaqYb5EYfk20XixZV4
 | 
			
		||||
GmyAbXMftG1Eo7qGiMhYzRwGNWxEYojf5PZkYZXvSqZ/ZXHXa4g59jK/rJNnaVGM
 | 
			
		||||
k+xIX8mxQvlV0n5O9PIha5BX5teZnkHKgL8aKKLKW1BK7YTngsfSzzaeame5iKfz
 | 
			
		||||
itAE+OjGF+PFKbwX8Q==
 | 
			
		||||
MIID5zCCAs+gAwIBAgIJALnu1NlVpZ6zMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV
 | 
			
		||||
BAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMSIwIAYDVQQLDBlGT1IgVEVT
 | 
			
		||||
VElORyBQVVJQT1NFUyBPTkxZMSUwIwYDVQQDDBxPcGVuU1NMIFRlc3QgSW50ZXJt
 | 
			
		||||
ZWRpYXRlIENBMB4XDTExMTIwODE0MDE0OFoXDTIxMTAxNjE0MDE0OFowZDELMAkG
 | 
			
		||||
A1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBU
 | 
			
		||||
RVNUSU5HIFBVUlBPU0VTIE9OTFkxGTAXBgNVBAMMEFRlc3QgU2VydmVyIENlcnQw
 | 
			
		||||
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDzhPOSNtyyRspmeuUpxfNJ
 | 
			
		||||
KCLTuf7g3uQ4zu4iHOmRO5TQci+HhVlLZrHF9XqFXcIP0y4pWDbMSGuiorUmzmfi
 | 
			
		||||
R7bfSdI/+qIQt8KXRH6HNG1t8ou0VSvWId5TS5Dq/er5ODUr9OaaDva7EquHIcMv
 | 
			
		||||
vPQGuI+OEAcnleVCy9HVEIySrO4P3CNIicnGkwwiAud05yUAq/gPXBC1hTtmlPD7
 | 
			
		||||
TVcGVSEiJdvzqqlgv02qedGrkki6GY4S7GjZxrrf7Foc2EP+51LJzwLQx3/JfrCU
 | 
			
		||||
41NEWAsu/Sl0tQabXESN+zJ1pDqoZ3uHMgpQjeGiE0olr+YcsSW/tJmiU9OiAr8R
 | 
			
		||||
AgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBeAwLAYJYIZI
 | 
			
		||||
AYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQW
 | 
			
		||||
BBSCvM8AABPR9zklmifnr9LvIBturDAfBgNVHSMEGDAWgBQ2w2yI55X+sL3szj49
 | 
			
		||||
hqshgYfa2jANBgkqhkiG9w0BAQUFAAOCAQEAqb1NV0B0/pbpK9Z4/bNjzPQLTRLK
 | 
			
		||||
WnSNm/Jh5v0GEUOE/Beg7GNjNrmeNmqxAlpqWz9qoeoFZax+QBpIZYjROU3TS3fp
 | 
			
		||||
yLsrnlr0CDQ5R7kCCDGa8dkXxemmpZZLbUCpW2Uoy8sAA4JjN9OtsZY7dvUXFgJ7
 | 
			
		||||
vVNTRnI01ghknbtD+2SxSQd3CWF6QhcRMAzZJ1z1cbbwGDDzfvGFPzJ+Sq+zEPds
 | 
			
		||||
xoVLLSetCiBc+40ZcDS5dV98h9XD7JMTQfxzA7mNGv73JoZJA6nFgj+ADSlJsY/t
 | 
			
		||||
JBv+z1iQRueoh9Qeee+ZbRifPouCB8FDx+AltvHTANdAq0t/K3o+pplMVA==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIIBPAIBAAJBAJ+zw4Qnlf8SMVIPFe9GEcStgOY2Ww/dgNdhjeD8ckUJNP5VZkVD
 | 
			
		||||
TGiXav6ooKXfX3j/7tdkuD8Ey2//Kv7+ue0CAwEAAQJAN6W31vDEP2DjdqhzCDDu
 | 
			
		||||
OA4NACqoiFqyblo7yc2tM4h4xMbC3Yx5UKMN9ZkCtX0gzrz6DyF47bdKcWBzNWCj
 | 
			
		||||
gQIhANEoojVt7hq+SQ6MCN6FTAysGgQf56Q3TYoJMoWvdiXVAiEAw3e3rc+VJpOz
 | 
			
		||||
rHuDo6bgpjUAAXM+v3fcpsfZSNO6V7kCIQCtbVjanpUwvZkMI9by02oUk9taki3b
 | 
			
		||||
PzPfAfNPYAbCJQIhAJXNQDWyqwn/lGmR11cqY2y9nZ1+5w3yHGatLrcDnQHxAiEA
 | 
			
		||||
vnlEGo8K85u+KwIOimM48ZG8oTk7iFdkqLJR1utT3aU=
 | 
			
		||||
MIIEpAIBAAKCAQEA84TzkjbcskbKZnrlKcXzSSgi07n+4N7kOM7uIhzpkTuU0HIv
 | 
			
		||||
h4VZS2axxfV6hV3CD9MuKVg2zEhroqK1Js5n4ke230nSP/qiELfCl0R+hzRtbfKL
 | 
			
		||||
tFUr1iHeU0uQ6v3q+Tg1K/Tmmg72uxKrhyHDL7z0BriPjhAHJ5XlQsvR1RCMkqzu
 | 
			
		||||
D9wjSInJxpMMIgLndOclAKv4D1wQtYU7ZpTw+01XBlUhIiXb86qpYL9NqnnRq5JI
 | 
			
		||||
uhmOEuxo2ca63+xaHNhD/udSyc8C0Md/yX6wlONTRFgLLv0pdLUGm1xEjfsydaQ6
 | 
			
		||||
qGd7hzIKUI3hohNKJa/mHLElv7SZolPTogK/EQIDAQABAoIBAADq9FwNtuE5IRQn
 | 
			
		||||
zGtO4q7Y5uCzZ8GDNYr9RKp+P2cbuWDbvVAecYq2NV9QoIiWJOAYZKklOvekIju3
 | 
			
		||||
r0UZLA0PRiIrTg6NrESx3JrjWDK8QNlUO7CPTZ39/K+FrmMkV9lem9yxjJjyC34D
 | 
			
		||||
AQB+YRTx+l14HppjdxNwHjAVQpIx/uO2F5xAMuk32+3K+pq9CZUtrofe1q4Agj9R
 | 
			
		||||
5s8mSy9pbRo9kW9wl5xdEotz1LivFOEiqPUJTUq5J5PeMKao3vdK726XI4Z455Nm
 | 
			
		||||
W2/MA0YV0ug2FYinHcZdvKM6dimH8GLfa3X8xKRfzjGjTiMSwsdjgMa4awY3tEHH
 | 
			
		||||
674jhAECgYEA/zqMrc0zsbNk83sjgaYIug5kzEpN4ic020rSZsmQxSCerJTgNhmg
 | 
			
		||||
utKSCt0Re09Jt3LqG48msahX8ycqDsHNvlEGPQSbMu9IYeO3Wr3fAm75GEtFWePY
 | 
			
		||||
BhM73I7gkRt4s8bUiUepMG/wY45c5tRF23xi8foReHFFe9MDzh8fJFECgYEA9EFX
 | 
			
		||||
4qAik1pOJGNei9BMwmx0I0gfVEIgu0tzeVqT45vcxbxr7RkTEaDoAG6PlbWP6D9a
 | 
			
		||||
WQNLp4gsgRM90ZXOJ4up5DsAWDluvaF4/omabMA+MJJ5kGZ0gCj5rbZbKqUws7x8
 | 
			
		||||
bp+6iBfUPJUbcqNqFmi/08Yt7vrDnMnyMw2A/sECgYEAiiuRMxnuzVm34hQcsbhH
 | 
			
		||||
6ymVqf7j0PW2qK0F4H1ocT9qhzWFd+RB3kHWrCjnqODQoI6GbGr/4JepHUpre1ex
 | 
			
		||||
4UEN5oSS3G0ru0rC3U4C59dZ5KwDHFm7ffZ1pr52ljfQDUsrjjIMRtuiwNK2OoRa
 | 
			
		||||
WSsqiaL+SDzSB+nBmpnAizECgYBdt/y6rerWUx4MhDwwtTnel7JwHyo2MDFS6/5g
 | 
			
		||||
n8qC2Lj6/fMDRE22w+CA2esp7EJNQJGv+b27iFpbJEDh+/Lf5YzIT4MwVskQ5bYB
 | 
			
		||||
JFcmRxUVmf4e09D7o705U/DjCgMH09iCsbLmqQ38ONIRSHZaJtMDtNTHD1yi+jF+
 | 
			
		||||
OT43gQKBgQC/2OHZoko6iRlNOAQ/tMVFNq7fL81GivoQ9F1U0Qr+DH3ZfaH8eIkX
 | 
			
		||||
xT0ToMPJUzWAn8pZv0snA0um6SIgvkCuxO84OkANCVbttzXImIsL7pFzfcwV/ERK
 | 
			
		||||
UM6j0ZuSMFOCr/lGPAoOQU0fskidGEHi1/kW+suSr28TqsyYZpwBDQ==
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
subject=/C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
 | 
			
		||||
issuer= /C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
 | 
			
		||||
notBefore=950413210656Z
 | 
			
		||||
notAfter =970412210656Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICCDCCAXECAQAwDQYJKoZIhvcNAQEEBQAwTjELMAkGA1UEBhMCVVMxHzAdBgNV
 | 
			
		||||
BAoUFkFUJlQgQmVsbCBMYWJvcmF0b3JpZXMxHjAcBgNVBAsUFVByb3RvdHlwZSBS
 | 
			
		||||
ZXNlYXJjaCBDQTAeFw05NTA0MTMyMTA2NTZaFw05NzA0MTIyMTA2NTZaME4xCzAJ
 | 
			
		||||
BgNVBAYTAlVTMR8wHQYDVQQKFBZBVCZUIEJlbGwgTGFib3JhdG9yaWVzMR4wHAYD
 | 
			
		||||
VQQLFBVQcm90b3R5cGUgUmVzZWFyY2ggQ0EwgZwwDQYJKoZIhvcNAQEBBQADgYoA
 | 
			
		||||
MIGGAoGAebOmgtSCl+wCYZc86UGYeTLY8cjmW2P0FN8ToT/u2pECCoFdrlycX0OR
 | 
			
		||||
3wt0ZhpFXLVNeDnHwEE9veNUih7pCL2ZBFqoIoQkB1lZmXRiVtjGonz8BLm/qrFM
 | 
			
		||||
YHb0lme/Ol+s118mwKVxnn6bSAeI/OXKhLaVdYZWk+aEaxEDkVkCAQ8wDQYJKoZI
 | 
			
		||||
hvcNAQEEBQADgYEAAZMG14lZmZ8bahkaHaTV9dQf4p2FZiQTFwHP9ZyGsXPC+LT5
 | 
			
		||||
dG5iTaRmyjNIJdPWohZDl97kAci79aBndvuEvRKOjLHs3WRGBIwERnAcnY9Mz8u/
 | 
			
		||||
zIHK23PjYVxGGaZd669OJwD0CYyqH22HH9nFUGaoJdsv39ChW0NRdLE9+y8=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICJjCCAY8CAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
 | 
			
		||||
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTc0M1oXDTAxMDYw
 | 
			
		||||
OTEzNTc0M1owWzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
 | 
			
		||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYDVQQDExJUZXN0IENBICgxMDI0
 | 
			
		||||
IGJpdCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKO7o8t116VP6cgybTsZ
 | 
			
		||||
DCZhr95nYlZuya3aCi1IKoztqwWnjbmDFIriOqGFPrZQ+moMETC9D59iRW/dFXSv
 | 
			
		||||
1F65ka/XY2hLh9exCCo7XuUcDs53Qp3bI3AmMqHjgzE8oO3ajyJAzJkTTOUecQU2
 | 
			
		||||
mw/gI4tMM0LqWMQS7luTy4+xAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAM7achv3v
 | 
			
		||||
hLQJcv/65eGEpBXM40ZDVoFQFFJWaY5p883HTqLB1x4FdzsXHH0QKBTcKpWwqyu4
 | 
			
		||||
YDm3fb8oDugw72bCzfyZK/zVZPR/hVlqI/fvU109Qoc+7oPvIXWky71HfcK6ZBCA
 | 
			
		||||
q30KIqGM/uoM60INq97qjDmCJapagcNBGQs=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIICXQIBAAKBgQCju6PLddelT+nIMm07GQwmYa/eZ2JWbsmt2gotSCqM7asFp425
 | 
			
		||||
gxSK4jqhhT62UPpqDBEwvQ+fYkVv3RV0r9ReuZGv12NoS4fXsQgqO17lHA7Od0Kd
 | 
			
		||||
2yNwJjKh44MxPKDt2o8iQMyZE0zlHnEFNpsP4COLTDNC6ljEEu5bk8uPsQIDAQAB
 | 
			
		||||
AoGAVZmpFZsDZfr0l2S9tLLwpjRWNOlKATQkno6q2WesT0eGLQufTciY+c8ypfU6
 | 
			
		||||
hyio8r5iUl/VhhdjhAtKx1mRpiotftHo/eYf8rtsrnprOnWG0bWjLjtIoMbcxGn2
 | 
			
		||||
J3bN6LJmbJMjDs0eJ3KnTu646F3nDUw2oGAwmpzKXA1KAP0CQQDRvQhxk2D3Pehs
 | 
			
		||||
HvG665u2pB5ipYQngEFlZO7RHJZzJOZEWSLuuMqaF/7pTfA5jiBvWqCgJeCRRInL
 | 
			
		||||
21ru4dlPAkEAx9jj7BgKn5TYnMoBSSe0afjsV9oApVpN1Nacb1YDtCwy+scp3++s
 | 
			
		||||
nFxlv98wxIlSdpwMUn+AUWfjiWR7Tu/G/wJBAJ/KjwZIrFVxewP0x2ILYsTRYLzz
 | 
			
		||||
MS4PDsO7FB+I0i7DbBOifXS2oNSpd3I0CNMwrxFnUHzynpbOStVfN3ZL5w0CQQCa
 | 
			
		||||
pwFahxBRhkJKsxhjoFJBX9yl75JoY4Wvm5Tbo9ih6UJaRx3kqfkN14L2BKYcsZgb
 | 
			
		||||
KY9vmDOYy6iNfjDeWTfJAkBkfPUb8oTJ/nSP5zN6sqGxSY4krc4xLxpRmxoJ8HL2
 | 
			
		||||
XfhqXkTzbU13RX9JJ/NZ8vQN9Vm2NhxRGJocQkmcdVtJ
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
MIICYDCCAiACAgEoMAkGBSsOAwINBQAwfDELMAkGA1UEBhMCVVMxNjA0BgNVBAoT
 | 
			
		||||
LU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFuZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZ
 | 
			
		||||
MBcGA1UECxMQVGVzdCBFbnZpcm9ubWVudDEaMBgGA1UECxMRRFNTLU5BU0EtUGls
 | 
			
		||||
b3QtQ0EwHhcNOTYwMjI2MTYzMjQ1WhcNOTcwMjI1MTYzMjQ1WjB8MQswCQYDVQQG
 | 
			
		||||
EwJVUzE2MDQGA1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFk
 | 
			
		||||
bWluaXN0cmF0aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MRowGAYDVQQL
 | 
			
		||||
ExFEU1MtTkFTQS1QaWxvdC1DQTCB8jAJBgUrDgMCDAUAA4HkADCB4AJBAMA/ssKb
 | 
			
		||||
hPNUG7ZlASfVwEJU21O5OyF/iyBzgHI1O8eOhJGUYO8cc8wDMjR508Mr9cp6Uhl/
 | 
			
		||||
ZB7FV5GkLNEnRHYCQQDUEaSg45P2qrDwixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLb
 | 
			
		||||
bn3QK74T2IxY1yY+kCNq8XrIqf5fJJzIH0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3
 | 
			
		||||
fVd0geUCQQCzCFUQAh+ZkEmp5804cs6ZWBhrUAfnra8lJItYo9xPcXgdIfLfibcX
 | 
			
		||||
R71UsyO77MRD7B0+Ag2tq794IleCVcEEMAkGBSsOAwINBQADLwAwLAIUUayDfreR
 | 
			
		||||
Yh2WeU86/pHNdkUC1IgCFEfxe1f0oMpxJyrJ5XIxTi7vGdoK
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICGTCCAdgCAwCqTDAJBgUrDgMCDQUAMHwxCzAJBgNVBAYTAlVTMTYwNAYDVQQK
 | 
			
		||||
Ey1OYXRpb25hbCBBZXJvbmF1dGljcyBhbmQgU3BhY2UgQWRtaW5pc3RyYXRpb24x
 | 
			
		||||
GTAXBgNVBAsTEFRlc3QgRW52aXJvbm1lbnQxGjAYBgNVBAsTEURTUy1OQVNBLVBp
 | 
			
		||||
bG90LUNBMB4XDTk2MDUxNDE3MDE0MVoXDTk3MDUxNDE3MDE0MVowMzELMAkGA1UE
 | 
			
		||||
BhMCQVUxDzANBgNVBAoTBk1pbmNvbTETMBEGA1UEAxMKRXJpYyBZb3VuZzCB8jAJ
 | 
			
		||||
BgUrDgMCDAUAA4HkADCB4AJBAKbfHz6vE6pXXMTpswtGUec2tvnfLJUsoxE9qs4+
 | 
			
		||||
ObZX7LmLvragNPUeiTJx7UOWZ5DfBj6bXLc8eYne0lP1g3ACQQDUEaSg45P2qrDw
 | 
			
		||||
ixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLbbn3QK74T2IxY1yY+kCNq8XrIqf5fJJzI
 | 
			
		||||
H0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3fVd0geUCQQCzCFUQAh+ZkEmp5804cs6Z
 | 
			
		||||
WBhrUAfnra8lJItYo9xPcXgdIfLfibcXR71UsyO77MRD7B0+Ag2tq794IleCVcEE
 | 
			
		||||
MAkGBSsOAwINBQADMAAwLQIUWsuuJRE3VT4ueWkWMAJMJaZjj1ECFQCYY0zX4bzM
 | 
			
		||||
LC7obsrHD8XAHG+ZRG==
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICTTCCAbagAwIBAgIBADANBgkqhkiG9w0BAQQFADBMMQswCQYDVQQGEwJHQjEM
 | 
			
		||||
MAoGA1UEChMDVUNMMRgwFgYDVQQLEw9JQ0UtVEVMIFByb2plY3QxFTATBgNVBAMT
 | 
			
		||||
DFRydXN0RmFjdG9yeTAeFw05NzA0MjIxNDM5MTRaFw05ODA0MjIxNDM5MTRaMEwx
 | 
			
		||||
CzAJBgNVBAYTAkdCMQwwCgYDVQQKEwNVQ0wxGDAWBgNVBAsTD0lDRS1URUwgUHJv
 | 
			
		||||
amVjdDEVMBMGA1UEAxMMVHJ1c3RGYWN0b3J5MIGcMAoGBFUIAQECAgQAA4GNADCB
 | 
			
		||||
iQKBgQCEieR8NcXkUW1f0G6aC6u0i8q/98JqS6RxK5YmHIGKCkuTWAUjzLfUa4dt
 | 
			
		||||
U9igGCjTuxaDqlzEim+t/02pmiBZT9HaX++35MjQPUWmsChcYU5WyzGErXi+rQaw
 | 
			
		||||
zlwS73zM8qiPj/97lXYycWhgL0VaiDSPxRXEUdWoaGruom4mNQIDAQABo0IwQDAd
 | 
			
		||||
BgNVHQ4EFgQUHal1LZr7oVg5z6lYzrhTgZRCmcUwDgYDVR0PAQH/BAQDAgH2MA8G
 | 
			
		||||
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAfaggfl6FZoioecjv0dq8
 | 
			
		||||
/DXo/u11iMZvXn08gjX/zl2b4wtPbShOSY5FhkSm8GeySasz+/Nwb/uzfnIhokWi
 | 
			
		||||
lfPZHtlCWtXbIy/TN51eJyq04ceDCQDWvLC2enVg9KB+GJ34b5c5VaPRzq8MBxsA
 | 
			
		||||
S7ELuYGtmYgYm9NZOIr7yU0=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB6jCCAZQCAgEtMA0GCSqGSIb3DQEBBAUAMIGAMQswCQYDVQQGEwJVUzE2MDQG
 | 
			
		||||
A1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFkbWluaXN0cmF0
 | 
			
		||||
aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MR4wHAYDVQQLExVNRDUtUlNB
 | 
			
		||||
LU5BU0EtUGlsb3QtQ0EwHhcNOTYwNDMwMjIwNTAwWhcNOTcwNDMwMjIwNTAwWjCB
 | 
			
		||||
gDELMAkGA1UEBhMCVVMxNjA0BgNVBAoTLU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFu
 | 
			
		||||
ZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZMBcGA1UECxMQVGVzdCBFbnZpcm9ubWVu
 | 
			
		||||
dDEeMBwGA1UECxMVTUQ1LVJTQS1OQVNBLVBpbG90LUNBMFkwCgYEVQgBAQICAgAD
 | 
			
		||||
SwAwSAJBALmmX5+GqAvcrWK13rfDrNX9UfeA7f+ijyBgeFQjYUoDpFqapw4nzQBL
 | 
			
		||||
bAXug8pKkRwa2Zh8YODhXsRWu2F/UckCAwEAATANBgkqhkiG9w0BAQQFAANBAH9a
 | 
			
		||||
OBA+QCsjxXgnSqHx04gcU8S49DVUb1f2XVoLnHlIb8RnX0k5O6mpHT5eti9bLkiW
 | 
			
		||||
GJNMJ4L0AJ/ac+SmHZc=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICajCCAdMCBDGA0QUwDQYJKoZIhvcNAQEEBQAwfTELMAkGA1UEBhMCQ2ExDzAN
 | 
			
		||||
BgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmlsaXR5IEFjY2VwdGVkMR8w
 | 
			
		||||
HQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRwwGgYDVQQDExNFbnRydXN0
 | 
			
		||||
IERlbW8gV2ViIENBMB4XDTk2MDQyNjEzMzUwMVoXDTA2MDQyNjEzMzUwMVowfTEL
 | 
			
		||||
MAkGA1UEBhMCQ2ExDzANBgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmls
 | 
			
		||||
aXR5IEFjY2VwdGVkMR8wHQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRww
 | 
			
		||||
GgYDVQQDExNFbnRydXN0IERlbW8gV2ViIENBMIGdMA0GCSqGSIb3DQEBAQUAA4GL
 | 
			
		||||
ADCBhwKBgQCaroS7O1DA0hm4IefNYU1cx/nqOmzEnk291d1XqznDeF4wEgakbkCc
 | 
			
		||||
zTKxK791yNpXG5RmngqH7cygDRTHZJ6mfCRn0wGC+AI00F2vYTGqPGRQL1N3lZT0
 | 
			
		||||
YDKFC0SQeMMjFIZ1aeQigroFQnHo0VB3zWIMpNkka8PY9lxHZAmWwQIBAzANBgkq
 | 
			
		||||
hkiG9w0BAQQFAAOBgQBAx0UMVA1s54lMQyXjMX5kj99FJN5itb8bK1Rk+cegPQPF
 | 
			
		||||
cWO9SEWyEjjBjIkjjzAwBkaEszFsNGxemxtXvwjIm1xEUMTVlPEWTs2qnDvAUA9W
 | 
			
		||||
YqhWbhH0toGT36236QAsqCZ76rbTRVSSX2BHyJwJMG2tCRv7kRJ//NIgxj3H4w==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICJzCCAZACAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
 | 
			
		||||
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTczN1oXDTAxMDYw
 | 
			
		||||
OTEzNTczN1owXDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
 | 
			
		||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYDVQQDExNUZXN0IFBDQSAoMTAy
 | 
			
		||||
NCBiaXQpMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdoWk/3+WcMlfjIrkg
 | 
			
		||||
40ketmnQaEogQe1LLcuOJV6rKfUSAsPgwgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp
 | 
			
		||||
22Jp85PmemiDzyUIStwk72qhp1imbANZvlmlCFKiQrjUyuDfu4TABmn+kkt3vR1Y
 | 
			
		||||
BEOGt+IFye1UBVSATVdRJ2UVhwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABNA1u/S
 | 
			
		||||
Cg/LJZWb7GliiKJsvuhxlE4E5JxQF2zMub/CSNbF97//tYSyj96sxeFQxZXbcjm9
 | 
			
		||||
xt6mr/xNLA4szNQMJ4P+L7b5e/jC5DSqlwS+CUYJgaFs/SP+qJoCSu1bR3IM9XWO
 | 
			
		||||
cRBpDmcBbYLkSyB92WURvsZ1LtjEcn+cdQVI
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIICXAIBAAKBgQCdoWk/3+WcMlfjIrkg40ketmnQaEogQe1LLcuOJV6rKfUSAsPg
 | 
			
		||||
wgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp22Jp85PmemiDzyUIStwk72qhp1imbANZ
 | 
			
		||||
vlmlCFKiQrjUyuDfu4TABmn+kkt3vR1YBEOGt+IFye1UBVSATVdRJ2UVhwIDAQAB
 | 
			
		||||
AoGAba4fTtuap5l7/8ZsbE7Z1O32KJY4ZcOZukLOLUUhXxXduT+FTgGWujc0/rgc
 | 
			
		||||
z9qYCLlNZHOouMYTgtSfYvuMuLZ11VIt0GYH+nRioLShE59Yy+zCRyC+gPigS1kz
 | 
			
		||||
xvo14AsOIPYV14Tk/SsHyq6E0eTk7VzaIE197giiINUERPECQQDSKmtPTh/lRKw7
 | 
			
		||||
HSZSM0I1mFWn/1zqrAbontRQY5w98QWIOe5qmzYyFbPXYT3d9BzlsMyhgiRNoBbD
 | 
			
		||||
yvohSHXJAkEAwAHx6ezAZeWWzD5yXD36nyjpkVCw7Tk7TSmOceLJMWt1QcrCfqlS
 | 
			
		||||
xA5jjpQ6Z8suU5DdtWAryM2sAir1WisYzwJAd6Zcx56jvAQ3xcPXsE6scBTVFzrj
 | 
			
		||||
7FqZ6E+cclPzfLQ+QQsyOBE7bpI6e/FJppY26XGZXo3YGzV8IGXrt40oOQJALETG
 | 
			
		||||
h86EFXo3qGOFbmsDy4pdP5nBERCu8X1xUCSfintiD4c2DInxgS5oGclnJeMcjTvL
 | 
			
		||||
QjQoJCX3UJCi/OUO1QJBAKgcDHWjMvt+l1pjJBsSEZ0HX9AAIIVx0RQmbFGS+F2Q
 | 
			
		||||
hhu5l77WnnZOQ9vvhV5u7NPCUF9nhU3jh60qWWO8mkc=
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
subject=/C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
 | 
			
		||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
 | 
			
		||||
notBefore=941104185834Z
 | 
			
		||||
notAfter =991103185834Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICIzCCAZACBQJBAAAWMA0GCSqGSIb3DQEBAgUAMFwxCzAJBgNVBAYTAlVTMSAw
 | 
			
		||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVy
 | 
			
		||||
Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDQxODU4MzRaFw05
 | 
			
		||||
OTExMDMxODU4MzRaMFwxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBT
 | 
			
		||||
ZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9u
 | 
			
		||||
IEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCk+4Fie84QJ93o
 | 
			
		||||
975sbsZwmdu41QUDaSiCnHJ/lj+O7Kwpkj+KFPhCdr69XQO5kNTQvAayUTNfxMK/
 | 
			
		||||
touPmbZiImDd298ggrTKoi8tUO2UMt7gVY3UaOLgTNLNBRYulWZcYVI4HlGogqHE
 | 
			
		||||
7yXpCuaLK44xZtn42f29O2nZ6wIDAQABMA0GCSqGSIb3DQEBAgUAA34AdrW2EP4j
 | 
			
		||||
9/dZYkuwX5zBaLxJu7NJbyFHXSudVMQAKD+YufKKg5tgf+tQx6sFEC097TgCwaVI
 | 
			
		||||
0v5loMC86qYjFmZsGySp8+x5NRhPJsjjr1BKx6cxa9B8GJ1Qv6km+iYrRpwUqbtb
 | 
			
		||||
MJhCKLVLU7tDCZJAuqiqWqTGtotXTcU=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
subject=/C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
 | 
			
		||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
 | 
			
		||||
notBefore=941109235417Z
 | 
			
		||||
notAfter =991231235417Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICKTCCAZYCBQJBAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMSAw
 | 
			
		||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJl
 | 
			
		||||
IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDkyMzU0MTda
 | 
			
		||||
Fw05OTEyMzEyMzU0MTdaMF8xCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0
 | 
			
		||||
YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJlIFNlcnZlciBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCSznrB
 | 
			
		||||
roM+WqqJg1esJQF2DK2ujiw3zus1eGRUA+WEQFHJv48I4oqCCNIWhjdV6bEhAq12
 | 
			
		||||
aIGaBaJLyUslZiJWbIgHj/eBWW2EB2VwE3F2Ppt3TONQiVaYSLkdpykaEy5KEVmc
 | 
			
		||||
HhXVSVQsczppgrGXOZxtcGdI5d0t1sgeewIDAQABMA0GCSqGSIb3DQEBAgUAA34A
 | 
			
		||||
iNHReSHO4ovo+MF9NFM/YYPZtgs4F7boviGNjwC4i1N+RGceIr2XJ+CchcxK9oU7
 | 
			
		||||
suK+ktPlDemvXA4MRpX/oRxePug2WHpzpgr4IhFrwwk4fia7c+8AvQKk8xQNMD9h
 | 
			
		||||
cHsg/jKjn7P0Z1LctO6EjJY2IN6BCINxIYoPnqk=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
subject=/C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
 | 
			
		||||
	/OU=Certification Services Division/CN=Thawte Server CA
 | 
			
		||||
	/Email=server-certs@thawte.com
 | 
			
		||||
issuer= /C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
 | 
			
		||||
	/OU=Certification Services Division/CN=Thawte Server CA
 | 
			
		||||
	/Email=server-certs@thawte.com
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIC+TCCAmICAQAwDQYJKoZIhvcNAQEEBQAwgcQxCzAJBgNVBAYTAlpBMRUwEwYD
 | 
			
		||||
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
 | 
			
		||||
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
 | 
			
		||||
dmljZXMgRGl2aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkq
 | 
			
		||||
hkiG9w0BCQEWF3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMB4XDTk2MDcyNzE4MDc1
 | 
			
		||||
N1oXDTk4MDcyNzE4MDc1N1owgcQxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0
 | 
			
		||||
ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMUVGhhd3RlIENv
 | 
			
		||||
bnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
 | 
			
		||||
aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkqhkiG9w0BCQEW
 | 
			
		||||
F3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
 | 
			
		||||
iQKBgQDTpFBuyP9Wa+bPXbbqDGh1R6KqwtqEJfyo9EdR2oW1IHSUhh4PdcnpCGH1
 | 
			
		||||
Bm0wbhUZAulSwGLbTZme4moMRDjN/r7jZAlwxf6xaym2L0nIO9QnBCUQly/nkG3A
 | 
			
		||||
KEKZ10xD3sP1IW1Un13DWOHA5NlbsLjctHvfNjrCtWYiEtaHDQIDAQABMA0GCSqG
 | 
			
		||||
SIb3DQEBBAUAA4GBAIsvn7ifX3RUIrvYXtpI4DOfARkTogwm6o7OwVdl93yFhDcX
 | 
			
		||||
7h5t0XZ11MUAMziKdde3rmTvzUYIUCYoY5b032IwGMTvdiclK+STN6NP2m5nvFAM
 | 
			
		||||
qJT5gC5O+j/jBuZRQ4i0AMYQr5F4lT8oBJnhgafw6PL8aDY2vMHGSPl9+7uf
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIDDTCCAnYCAQAwDQYJKoZIhvcNAQEEBQAwgc4xCzAJBgNVBAYTAlpBMRUwEwYD
 | 
			
		||||
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
 | 
			
		||||
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
 | 
			
		||||
dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBD
 | 
			
		||||
QTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTAeFw05
 | 
			
		||||
NjA3MjcxODA3MTRaFw05ODA3MjcxODA3MTRaMIHOMQswCQYDVQQGEwJaQTEVMBMG
 | 
			
		||||
A1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xHTAbBgNVBAoT
 | 
			
		||||
FFRoYXd0ZSBDb25zdWx0aW5nIGNjMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNl
 | 
			
		||||
cnZpY2VzIERpdmlzaW9uMSEwHwYDVQQDExhUaGF3dGUgUHJlbWl1bSBTZXJ2ZXIg
 | 
			
		||||
Q0ExKDAmBgkqhkiG9w0BCQEWGXByZW1pdW0tc2VydmVyQHRoYXd0ZS5jb20wgZ8w
 | 
			
		||||
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANI2NmqL18JbntqBQWKPOO5JBFXW0O8c
 | 
			
		||||
G5UWR+8YSDU6UvQragaPOy/qVuOvho2eF/eetGV1Ak3vywmiIVHYm9Bn0LoNkgYU
 | 
			
		||||
c9STy5cqAJxcTgy8+hVS/PJEbtoRSm4Iny8t4/mqOoZztkZTWMiJBb2DEbhzP6oH
 | 
			
		||||
jfRCTedAnRw3AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAutFIgTRZVYerIZfL9lvR
 | 
			
		||||
w9Eifvvo5KTZ3h+Bj+VzNnyw4Qc/IyXkPOu6SIiH9LQ3sCmWBdxpe+qr4l77rLj2
 | 
			
		||||
GYuMtESFfn1XVALzkYgC7JcPuTOjMfIiMByt+uFf8AV8x0IW/Qkuv+hEQcyM9vxK
 | 
			
		||||
3VZdLbCVIhNoEsysrxCpxcI=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
Tims test GCI CA
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB8DCCAZoCAQAwDQYJKoZIhvcNAQEEBQAwgYIxCzAJBgNVBAYTAkFVMRMwEQYD
 | 
			
		||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
 | 
			
		||||
cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2RldmVsb3BtZW50MRkwFwYDVQQDExBD
 | 
			
		||||
cnlwdFNvZnQgRGV2IENBMB4XDTk3MDMyMjEzMzQwNFoXDTk4MDMyMjEzMzQwNFow
 | 
			
		||||
gYIxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhC
 | 
			
		||||
cmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2Rl
 | 
			
		||||
dmVsb3BtZW50MRkwFwYDVQQDExBDcnlwdFNvZnQgRGV2IENBMFwwDQYJKoZIhvcN
 | 
			
		||||
AQEBBQADSwAwSAJBAOAOAqogG5QwAmLhzyO4CoRnx/wVy4NZP4dxJy83O1EnL0rw
 | 
			
		||||
OdsamJKvPOLHgSXo3gDu9uVyvCf/QJmZAmC5ml8CAwEAATANBgkqhkiG9w0BAQQF
 | 
			
		||||
AANBADRRS/GVdd7rAqRW6SdmgLJduOU2yq3avBu99kRqbp9A/dLu6r6jU+eP4oOA
 | 
			
		||||
TfdbFZtAAD2Hx9jUtY3tfdrJOb8= 
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICVjCCAgACAQAwDQYJKoZIhvcNAQEEBQAwgbUxCzAJBgNVBAYTAkFVMRMwEQYD
 | 
			
		||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
 | 
			
		||||
cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsTI1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9O
 | 
			
		||||
IEFVVEhPUklUSUVTMTQwMgYDVQQDEytaRVJPIFZBTFVFIENBIC0gREVNT05TVFJB
 | 
			
		||||
VElPTiBQVVJQT1NFUyBPTkxZMB4XDTk3MDQwMzEzMjI1NFoXDTk4MDQwMzEzMjI1
 | 
			
		||||
NFowgbUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQH
 | 
			
		||||
EwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsT
 | 
			
		||||
I1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9OIEFVVEhPUklUSUVTMTQwMgYDVQQDEyta
 | 
			
		||||
RVJPIFZBTFVFIENBIC0gREVNT05TVFJBVElPTiBQVVJQT1NFUyBPTkxZMFwwDQYJ
 | 
			
		||||
KoZIhvcNAQEBBQADSwAwSAJBAOZ7T7yqP/tyspcko3yPY1y0Cm2EmwNvzW4QgVXR
 | 
			
		||||
Fjs3HmJ4xtSpXdo6mwcGezL3Abt/aQXaxv9PU8xt+Jr0OFUCAwEAATANBgkqhkiG
 | 
			
		||||
9w0BAQQFAANBAOQpYmGgyCqCy1OljgJhCqQOu627oVlHzK1L+t9vBaMfn40AVUR4
 | 
			
		||||
WzQVWO31KTgi5vTK1U+3h46fgUWqQ0h+6rU=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIAwgKADAgECAgEAMA0GCSqGSIb3DQEBBAUAMGIxETAPBgNVBAcTCEludGVybmV0
 | 
			
		||||
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xh
 | 
			
		||||
c3MgMSBDQSAtIEluZGl2aWR1YWwgU3Vic2NyaWJlcjAeFw05NjA0MDgxMDIwMjda
 | 
			
		||||
Fw05NzA0MDgxMDIwMjdaMGIxETAPBgNVBAcTCEludGVybmV0MRcwFQYDVQQKEw5W
 | 
			
		||||
ZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xhc3MgMSBDQSAtIElu
 | 
			
		||||
ZGl2aWR1YWwgU3Vic2NyaWJlcjCAMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2
 | 
			
		||||
FKbPTdAFDdjKI9BvqrQpkmOOLPhvltcunXZLEbE2jVfJw/0cxrr+Hgi6M8qV6r7j
 | 
			
		||||
W80GqLd5HUQq7XPysVKDaBBwZJHXPmv5912dFEObbpdFmIFH0S3L3bty10w/cari
 | 
			
		||||
QPJUObwW7s987LrbP2wqsxaxhhKdrpM01bjV0Pc+qQIDAQABAAAAADANBgkqhkiG
 | 
			
		||||
9w0BAQQFAAOBgQA+1nJryNt8VBRjRr07ArDAV/3jAH7GjDc9jsrxZS68ost9v06C
 | 
			
		||||
TvTNKGL+LISNmFLXl+JXhgGB0JZ9fvyYzNgHQ46HBUng1H6voalfJgS2KdEo50wW
 | 
			
		||||
8EFZYMDkT1k4uynwJqkVN2QJK/2q4/A/VCov5h6SlM8Affg2W+1TLqvqkwAA
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
 subject=/L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
 | 
			
		||||
 issuer= /L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIEkzCCA/ygAwIBAgIRANDTUpSRL3nTFeMrMayFSPAwDQYJKoZIhvcNAQECBQAw
 | 
			
		||||
YjERMA8GA1UEBxMISW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQw
 | 
			
		||||
MgYDVQQLEytWZXJpU2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3Jp
 | 
			
		||||
YmVyMB4XDTk2MDYwNDAwMDAwMFoXDTk4MDYwNDIzNTk1OVowYjERMA8GA1UEBxMI
 | 
			
		||||
SW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQLEytWZXJp
 | 
			
		||||
U2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3JpYmVyMIGfMA0GCSqG
 | 
			
		||||
SIb3DQEBAQUAA4GNADCBiQKBgQC6A+2czKGRcYMfm8gdnk+0de99TDDzsqo0v5nb
 | 
			
		||||
RsbUmMcdRQ7nsMbRWe0SAb/9QoLTZ/cJ0iOBqdrkz7UpqqKarVoTSdlSMVM92tWp
 | 
			
		||||
3bJncZHQD1t4xd6lQVdI1/T6R+5J0T1ukOdsI9Jmf+F28S6g3R3L1SFwiHKeZKZv
 | 
			
		||||
z+793wIDAQABo4ICRzCCAkMwggIpBgNVHQMBAf8EggIdMIICGTCCAhUwggIRBgtg
 | 
			
		||||
hkgBhvhFAQcBATCCAgAWggGrVGhpcyBjZXJ0aWZpY2F0ZSBpbmNvcnBvcmF0ZXMg
 | 
			
		||||
YnkgcmVmZXJlbmNlLCBhbmQgaXRzIHVzZSBpcyBzdHJpY3RseSBzdWJqZWN0IHRv
 | 
			
		||||
LCB0aGUgVmVyaVNpZ24gQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQg
 | 
			
		||||
KENQUyksIGF2YWlsYWJsZSBhdDogaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL0NQ
 | 
			
		||||
Uy0xLjA7IGJ5IEUtbWFpbCBhdCBDUFMtcmVxdWVzdHNAdmVyaXNpZ24uY29tOyBv
 | 
			
		||||
ciBieSBtYWlsIGF0IFZlcmlTaWduLCBJbmMuLCAyNTkzIENvYXN0IEF2ZS4sIE1v
 | 
			
		||||
dW50YWluIFZpZXcsIENBIDk0MDQzIFVTQSBUZWwuICsxICg0MTUpIDk2MS04ODMw
 | 
			
		||||
IENvcHlyaWdodCAoYykgMTk5NiBWZXJpU2lnbiwgSW5jLiAgQWxsIFJpZ2h0cyBS
 | 
			
		||||
ZXNlcnZlZC4gQ0VSVEFJTiBXQVJSQU5USUVTIERJU0NMQUlNRUQgYW5kIExJQUJJ
 | 
			
		||||
TElUWSBMSU1JVEVELqAOBgxghkgBhvhFAQcBAQGhDgYMYIZIAYb4RQEHAQECMC8w
 | 
			
		||||
LRYraHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvQ1BTLTEuMDAU
 | 
			
		||||
BglghkgBhvhCAQEBAf8EBAMCAgQwDQYJKoZIhvcNAQECBQADgYEApRJRkNBqLLgs
 | 
			
		||||
53IR/d18ODdLOWMTZ+QOOxBrq460iBEdUwgF8vmPRX1ku7UiDeNzaLlurE6eFqHq
 | 
			
		||||
2zPyK5j60zfTLVJMWKcQWwTJLjHtXrW8pxhNtFc6Fdvy5ZkHnC/9NIl7/t4U6WqB
 | 
			
		||||
p4y+p7SdMIkEwIZfds0VbnQyX5MRUJY=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
 subject=/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
			
		||||
 issuer= /C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICMTCCAZoCBQKhAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
 | 
			
		||||
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMg
 | 
			
		||||
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
 | 
			
		||||
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
 | 
			
		||||
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyVxZ
 | 
			
		||||
nvIbigEUtBDfBEDb41evakVAj4QMC9Ez2dkRz+4CWB8l9yqoRAWq7AMfeH+ek7ma
 | 
			
		||||
AKojfdashaJjRcdyJ8z0TMZ1cdI5709C8HXfCpDGjiBvmA/4rCNfcCk2pMmG57Ga
 | 
			
		||||
IMtTpYXnPb59mv4kRTPcdhXtD6JxZExlLoFoRacCAwEAATANBgkqhkiG9w0BAQIF
 | 
			
		||||
AAOBgQB1Zmw+0c2B27X4LzZRtvdCvM1Cr9wO+hVs+GeTVzrrtpLotgHKjLeOQ7RJ
 | 
			
		||||
Zfk+7r11Ri7J/CVdqMcvi5uPaM+0nJcYwE3vH9mvgrPmZLiEXIqaB1JDYft0nls6
 | 
			
		||||
NvxMsvwaPxUupVs8G5DsiCnkWRb5zget7Ond2tIxik/W2O8XjQ==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 subject=/C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
 | 
			
		||||
 issuer= /C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICMTCCAZoCBQKmAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
 | 
			
		||||
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMg
 | 
			
		||||
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
 | 
			
		||||
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
 | 
			
		||||
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LJ1
 | 
			
		||||
9njQrlpQ9OlQqZ+M1++RlHDo0iSQdomF1t+s5gEXMoDwnZNHvJplnR+Xrr/phnVj
 | 
			
		||||
IIm9gFidBAydqMEk6QvlMXi9/C0MN2qeeIDpRnX57aP7E3vIwUzSo+/1PLBij0pd
 | 
			
		||||
O92VZ48TucE81qcmm+zDO3rZTbxtm+gVAePwR6kCAwEAATANBgkqhkiG9w0BAQIF
 | 
			
		||||
AAOBgQBT3dPwnCR+QKri/AAa19oM/DJhuBUNlvP6Vxt/M3yv6ZiaYch6s7f/sdyZ
 | 
			
		||||
g9ysEvxwyR84Qu1E9oAuW2szaayc01znX1oYx7EteQSWQZGZQbE8DbqEOcY7l/Am
 | 
			
		||||
yY7uvcxClf8exwI/VAx49byqYHwCaejcrOICdmHEPgPq0ook0Q==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										420
									
								
								apps/server2.pem
									
									
									
									
									
								
							
							
						
						
									
										420
									
								
								apps/server2.pem
									
									
									
									
									
								
							@@ -1,376 +1,52 @@
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Server test cert (1024 bit)
 | 
			
		||||
subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = Test Server Cert #2
 | 
			
		||||
issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICLjCCAZcCAQEwDQYJKoZIhvcNAQEEBQAwWzELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYD
 | 
			
		||||
VQQDExJUZXN0IENBICgxMDI0IGJpdCkwHhcNOTcwNjA5MTM1NzU0WhcNOTgwNjA5
 | 
			
		||||
MTM1NzU0WjBkMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
 | 
			
		||||
A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxJDAiBgNVBAMTG1NlcnZlciB0ZXN0IGNl
 | 
			
		||||
cnQgKDEwMjQgYml0KTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsxH1PBPm
 | 
			
		||||
RkxrR11eV4bzNi4N9n11CI8nV29+ARlT1+qDe/mjVUvXlmsr1v/vf71G9GgqopSa
 | 
			
		||||
6RXrICLVdk/FYYYzhPvl1M+OrjaXDFO8BzBAF1Lnz6c7aRZvGRJNrRSr2nZEkqDf
 | 
			
		||||
JW9dY7r2VZEpD5QeuaRYUnuECkqeieB65GMCAwEAATANBgkqhkiG9w0BAQQFAAOB
 | 
			
		||||
gQCWsOta6C0wiVzXz8wPmJKyTrurMlgUss2iSuW9366iwofZddsNg7FXniMzkIf6
 | 
			
		||||
dp7jnmWZwKZ9cXsNUS2o4OL07qOk2HOywC0YsNZQsOBu1CBTYYkIefDiKFL1zQHh
 | 
			
		||||
8lwwNd4NP+OE3NzUNkCfh4DnFfg9WHkXUlD5UpxNRJ4gJA==
 | 
			
		||||
MIID6jCCAtKgAwIBAgIJALnu1NlVpZ60MA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV
 | 
			
		||||
BAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMSIwIAYDVQQLDBlGT1IgVEVT
 | 
			
		||||
VElORyBQVVJQT1NFUyBPTkxZMSUwIwYDVQQDDBxPcGVuU1NMIFRlc3QgSW50ZXJt
 | 
			
		||||
ZWRpYXRlIENBMB4XDTExMTIwODE0MDE0OFoXDTIxMTAxNjE0MDE0OFowZzELMAkG
 | 
			
		||||
A1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBU
 | 
			
		||||
RVNUSU5HIFBVUlBPU0VTIE9OTFkxHDAaBgNVBAMME1Rlc3QgU2VydmVyIENlcnQg
 | 
			
		||||
IzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrdi7j9yctG+L4EjBy
 | 
			
		||||
gjPmEqZzOJEQba26MoQGzglU7e5Xf59Rb/hgVQuKAoiZe7/R8rK4zJ4W7iXdXw0L
 | 
			
		||||
qBpyG8B5aGKeI32w+A9TcBApoXXL2CrYQEQjZwUIpLlYBIi2NkJj3nVkq5dgl1gO
 | 
			
		||||
ALiQ+W8jg3kzg5Ec9rimp9r93N8wsSL3awsafurmYCvOf7leHaMP1WJ/zDRGUNHG
 | 
			
		||||
/WtDjXc8ZUG1+6EXU9Jc2Fs+2Omf7fcN0l00AK/wPg8OaNS0rKyGq9JdIT9FRGV1
 | 
			
		||||
bXe/rx58FaE5CItdwCSYhJvF/O95LWQoxJXye5bCFLmvDTEyVq9FMSCptfsmbXjE
 | 
			
		||||
ZGsXAgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBeAwLAYJ
 | 
			
		||||
YIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1Ud
 | 
			
		||||
DgQWBBR52UaWWTKzZGDH/X4mWNcuqeQVazAfBgNVHSMEGDAWgBQ2w2yI55X+sL3s
 | 
			
		||||
zj49hqshgYfa2jANBgkqhkiG9w0BAQUFAAOCAQEANBW+XYLlHBqVY/31ie+3gRlS
 | 
			
		||||
LPfy4SIqn0t3RJjagT29MXprblBO2cbMO8VGjkQdKGpmMXjxbht2arOOUXRHX4n/
 | 
			
		||||
XTyn/QHEf0bcwIITMReO3DZUPAEw8hSjn9xEOM0IRVOCP+mH5fi74QzzQaZVCyYg
 | 
			
		||||
5VtLKdww/+sc0nCbKl2KWgDluriH0nfVx95qgW3mg9dhXRr0zmf1w2zkBHYpARYL
 | 
			
		||||
Dew6Z8EE4tS3HJu8/qM6meWzNtrfonQ3eiiMxjZBxzV46jchBwa2z9XYhP6AmpPb
 | 
			
		||||
oeTSzcQNbWsxaGYzWo46oLDUZmJOwSBawbS31bZNMCoPIY6ukoesCzFSsUKZww==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIICXgIBAAKBgQCzEfU8E+ZGTGtHXV5XhvM2Lg32fXUIjydXb34BGVPX6oN7+aNV
 | 
			
		||||
S9eWayvW/+9/vUb0aCqilJrpFesgItV2T8VhhjOE++XUz46uNpcMU7wHMEAXUufP
 | 
			
		||||
pztpFm8ZEk2tFKvadkSSoN8lb11juvZVkSkPlB65pFhSe4QKSp6J4HrkYwIDAQAB
 | 
			
		||||
AoGBAKy8jvb0Lzby8q11yNLf7+78wCVdYi7ugMHcYA1JVFK8+zb1WfSm44FLQo/0
 | 
			
		||||
dSChAjgz36TTexeLODPYxleJndjVcOMVzsLJjSM8dLpXsTS4FCeMbhw2s2u+xqKY
 | 
			
		||||
bbPWfk+HOTyJjfnkcC5Nbg44eOmruq0gSmBeUXVM5UntlTnxAkEA7TGCA3h7kx5E
 | 
			
		||||
Bl4zl2pc3gPAGt+dyfk5Po9mGJUUXhF5p2zueGmYWW74TmOWB1kzt4QRdYMzFePq
 | 
			
		||||
zfDNXEa1CwJBAMFErdY0xp0UJ13WwBbUTk8rujqQdHtjw0klhpbuKkjxu2hN0wwM
 | 
			
		||||
6p0D9qxF7JHaghqVRI0fAW/EE0OzdHMR9QkCQQDNR26dMFXKsoPu+vItljj/UEGf
 | 
			
		||||
QG7gERiQ4yxaFBPHgdpGo0kT31eh9x9hQGDkxTe0GNG/YSgCRvm8+C3TMcKXAkBD
 | 
			
		||||
dhGn36wkUFCddMSAM4NSJ1VN8/Z0y5HzCmI8dM3VwGtGMUQlxKxwOl30LEQzdS5M
 | 
			
		||||
0SWojNYXiT2gOBfBwtbhAkEAhafl5QEOIgUz+XazS/IlZ8goNKdDVfYgK3mHHjvv
 | 
			
		||||
nY5G+AuGebdNkXJr4KSWxDcN+C2i47zuj4QXA16MAOandA==
 | 
			
		||||
MIIEowIBAAKCAQEA63Yu4/cnLRvi+BIwcoIz5hKmcziREG2tujKEBs4JVO3uV3+f
 | 
			
		||||
UW/4YFULigKImXu/0fKyuMyeFu4l3V8NC6gachvAeWhiniN9sPgPU3AQKaF1y9gq
 | 
			
		||||
2EBEI2cFCKS5WASItjZCY951ZKuXYJdYDgC4kPlvI4N5M4ORHPa4pqfa/dzfMLEi
 | 
			
		||||
92sLGn7q5mArzn+5Xh2jD9Vif8w0RlDRxv1rQ413PGVBtfuhF1PSXNhbPtjpn+33
 | 
			
		||||
DdJdNACv8D4PDmjUtKyshqvSXSE/RURldW13v68efBWhOQiLXcAkmISbxfzveS1k
 | 
			
		||||
KMSV8nuWwhS5rw0xMlavRTEgqbX7Jm14xGRrFwIDAQABAoIBAHLsTPihIfLnYIE5
 | 
			
		||||
x4GsQQ5zXeBw5ITDM37ktwHnQDC+rIzyUl1aLD1AZRBoKinXd4lOTqLZ4/NHKx4A
 | 
			
		||||
DYr58mZtWyUmqLOMmQVuHXTZBlp7XtYuXMMNovQwjQlp9LicBeoBU6gQ5PVMtubD
 | 
			
		||||
F4xGF89Sn0cTHW3iMkqTtQ5KcR1j57OcJO0FEb1vPvk2MXI5ZyAatUYE7YacbEzd
 | 
			
		||||
rg02uIwx3FqNSkuSI79uz4hMdV5TPtuhxx9nTwj9aLUhXFeZ0mn2PVgVzEnnMoJb
 | 
			
		||||
+znlsZDgzDlJqdaD744YGWh8Z3OEssB35KfzFcdOeO6yH8lmv2Zfznk7pNPT7LTb
 | 
			
		||||
Lae9VgkCgYEA92p1qnAB3NtJtNcaW53i0S5WJgS1hxWKvUDx3lTB9s8X9fHpqL1a
 | 
			
		||||
E94fDfWzp/hax6FefUKIvBOukPLQ6bYjTMiFoOHzVirghAIuIUoMI5VtLhwD1hKs
 | 
			
		||||
Lr7l/dptMgKb1nZHyXoKHRBthsy3K4+udsPi8TzMvYElgEqyQIe/Rk0CgYEA86GL
 | 
			
		||||
8HC6zLszzKERDPBxrboRmoFvVUCTQDhsfj1M8aR3nQ8V5LkdIJc7Wqm/Ggfk9QRf
 | 
			
		||||
rJ8M2WUMlU5CNnCn/KCrKzCNZIReze3fV+HnKdbcXGLvgbHPrhnz8yYehUFG+RGq
 | 
			
		||||
bVyDWRU94T38izy2s5qMYrMJWZEYyXncSPbfcPMCgYAtaXfxcZ+V5xYPQFARMtiX
 | 
			
		||||
5nZfggvDoJuXgx0h3tK/N2HBfcaSdzbaYLG4gTmZggc/jwnl2dl5E++9oSPhUdIG
 | 
			
		||||
3ONSFUbxsOsGr9PBvnKd8WZZyUCXAVRjPBzAzF+whzQNWCZy/5htnz9LN7YDI9s0
 | 
			
		||||
5113Q96cheDZPFydZY0hHQKBgQDVbEhNukM5xCiNcu+f2SaMnLp9EjQ4h5g3IvaP
 | 
			
		||||
5B16daw/Dw8LzcohWboqIxeAsze0GD/D1ZUJAEd0qBjC3g+a9BjefervCjKOzXng
 | 
			
		||||
38mEUm+6EwVjJSQcjSmycEs+Sr/kwr/8i5WYvU32+jk4tFgMoC+o6tQe/Uesf68k
 | 
			
		||||
z/dPVwKBgGbF7Vv1/3SmhlOy+zYyvJ0CrWtKxH9QP6tLIEgEpd8x7YTSuCH94yok
 | 
			
		||||
kToMXYA3sWNPt22GbRDZ+rcp4c7HkDx6I6vpdP9aQEwJTp0EPy0sgWr2XwYmreIQ
 | 
			
		||||
NFmkk8Itn9EY2R9VBaP7GLv5kvwxDdLAnmwGmzVtbmaVdxCaBwUk
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
subject=/C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
 | 
			
		||||
issuer= /C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
 | 
			
		||||
notBefore=950413210656Z
 | 
			
		||||
notAfter =970412210656Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICCDCCAXECAQAwDQYJKoZIhvcNAQEEBQAwTjELMAkGA1UEBhMCVVMxHzAdBgNV
 | 
			
		||||
BAoUFkFUJlQgQmVsbCBMYWJvcmF0b3JpZXMxHjAcBgNVBAsUFVByb3RvdHlwZSBS
 | 
			
		||||
ZXNlYXJjaCBDQTAeFw05NTA0MTMyMTA2NTZaFw05NzA0MTIyMTA2NTZaME4xCzAJ
 | 
			
		||||
BgNVBAYTAlVTMR8wHQYDVQQKFBZBVCZUIEJlbGwgTGFib3JhdG9yaWVzMR4wHAYD
 | 
			
		||||
VQQLFBVQcm90b3R5cGUgUmVzZWFyY2ggQ0EwgZwwDQYJKoZIhvcNAQEBBQADgYoA
 | 
			
		||||
MIGGAoGAebOmgtSCl+wCYZc86UGYeTLY8cjmW2P0FN8ToT/u2pECCoFdrlycX0OR
 | 
			
		||||
3wt0ZhpFXLVNeDnHwEE9veNUih7pCL2ZBFqoIoQkB1lZmXRiVtjGonz8BLm/qrFM
 | 
			
		||||
YHb0lme/Ol+s118mwKVxnn6bSAeI/OXKhLaVdYZWk+aEaxEDkVkCAQ8wDQYJKoZI
 | 
			
		||||
hvcNAQEEBQADgYEAAZMG14lZmZ8bahkaHaTV9dQf4p2FZiQTFwHP9ZyGsXPC+LT5
 | 
			
		||||
dG5iTaRmyjNIJdPWohZDl97kAci79aBndvuEvRKOjLHs3WRGBIwERnAcnY9Mz8u/
 | 
			
		||||
zIHK23PjYVxGGaZd669OJwD0CYyqH22HH9nFUGaoJdsv39ChW0NRdLE9+y8=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICJjCCAY8CAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
 | 
			
		||||
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTc0M1oXDTAxMDYw
 | 
			
		||||
OTEzNTc0M1owWzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
 | 
			
		||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYDVQQDExJUZXN0IENBICgxMDI0
 | 
			
		||||
IGJpdCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKO7o8t116VP6cgybTsZ
 | 
			
		||||
DCZhr95nYlZuya3aCi1IKoztqwWnjbmDFIriOqGFPrZQ+moMETC9D59iRW/dFXSv
 | 
			
		||||
1F65ka/XY2hLh9exCCo7XuUcDs53Qp3bI3AmMqHjgzE8oO3ajyJAzJkTTOUecQU2
 | 
			
		||||
mw/gI4tMM0LqWMQS7luTy4+xAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAM7achv3v
 | 
			
		||||
hLQJcv/65eGEpBXM40ZDVoFQFFJWaY5p883HTqLB1x4FdzsXHH0QKBTcKpWwqyu4
 | 
			
		||||
YDm3fb8oDugw72bCzfyZK/zVZPR/hVlqI/fvU109Qoc+7oPvIXWky71HfcK6ZBCA
 | 
			
		||||
q30KIqGM/uoM60INq97qjDmCJapagcNBGQs=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIICXQIBAAKBgQCju6PLddelT+nIMm07GQwmYa/eZ2JWbsmt2gotSCqM7asFp425
 | 
			
		||||
gxSK4jqhhT62UPpqDBEwvQ+fYkVv3RV0r9ReuZGv12NoS4fXsQgqO17lHA7Od0Kd
 | 
			
		||||
2yNwJjKh44MxPKDt2o8iQMyZE0zlHnEFNpsP4COLTDNC6ljEEu5bk8uPsQIDAQAB
 | 
			
		||||
AoGAVZmpFZsDZfr0l2S9tLLwpjRWNOlKATQkno6q2WesT0eGLQufTciY+c8ypfU6
 | 
			
		||||
hyio8r5iUl/VhhdjhAtKx1mRpiotftHo/eYf8rtsrnprOnWG0bWjLjtIoMbcxGn2
 | 
			
		||||
J3bN6LJmbJMjDs0eJ3KnTu646F3nDUw2oGAwmpzKXA1KAP0CQQDRvQhxk2D3Pehs
 | 
			
		||||
HvG665u2pB5ipYQngEFlZO7RHJZzJOZEWSLuuMqaF/7pTfA5jiBvWqCgJeCRRInL
 | 
			
		||||
21ru4dlPAkEAx9jj7BgKn5TYnMoBSSe0afjsV9oApVpN1Nacb1YDtCwy+scp3++s
 | 
			
		||||
nFxlv98wxIlSdpwMUn+AUWfjiWR7Tu/G/wJBAJ/KjwZIrFVxewP0x2ILYsTRYLzz
 | 
			
		||||
MS4PDsO7FB+I0i7DbBOifXS2oNSpd3I0CNMwrxFnUHzynpbOStVfN3ZL5w0CQQCa
 | 
			
		||||
pwFahxBRhkJKsxhjoFJBX9yl75JoY4Wvm5Tbo9ih6UJaRx3kqfkN14L2BKYcsZgb
 | 
			
		||||
KY9vmDOYy6iNfjDeWTfJAkBkfPUb8oTJ/nSP5zN6sqGxSY4krc4xLxpRmxoJ8HL2
 | 
			
		||||
XfhqXkTzbU13RX9JJ/NZ8vQN9Vm2NhxRGJocQkmcdVtJ
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
MIICYDCCAiACAgEoMAkGBSsOAwINBQAwfDELMAkGA1UEBhMCVVMxNjA0BgNVBAoT
 | 
			
		||||
LU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFuZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZ
 | 
			
		||||
MBcGA1UECxMQVGVzdCBFbnZpcm9ubWVudDEaMBgGA1UECxMRRFNTLU5BU0EtUGls
 | 
			
		||||
b3QtQ0EwHhcNOTYwMjI2MTYzMjQ1WhcNOTcwMjI1MTYzMjQ1WjB8MQswCQYDVQQG
 | 
			
		||||
EwJVUzE2MDQGA1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFk
 | 
			
		||||
bWluaXN0cmF0aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MRowGAYDVQQL
 | 
			
		||||
ExFEU1MtTkFTQS1QaWxvdC1DQTCB8jAJBgUrDgMCDAUAA4HkADCB4AJBAMA/ssKb
 | 
			
		||||
hPNUG7ZlASfVwEJU21O5OyF/iyBzgHI1O8eOhJGUYO8cc8wDMjR508Mr9cp6Uhl/
 | 
			
		||||
ZB7FV5GkLNEnRHYCQQDUEaSg45P2qrDwixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLb
 | 
			
		||||
bn3QK74T2IxY1yY+kCNq8XrIqf5fJJzIH0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3
 | 
			
		||||
fVd0geUCQQCzCFUQAh+ZkEmp5804cs6ZWBhrUAfnra8lJItYo9xPcXgdIfLfibcX
 | 
			
		||||
R71UsyO77MRD7B0+Ag2tq794IleCVcEEMAkGBSsOAwINBQADLwAwLAIUUayDfreR
 | 
			
		||||
Yh2WeU86/pHNdkUC1IgCFEfxe1f0oMpxJyrJ5XIxTi7vGdoK
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICGTCCAdgCAwCqTDAJBgUrDgMCDQUAMHwxCzAJBgNVBAYTAlVTMTYwNAYDVQQK
 | 
			
		||||
Ey1OYXRpb25hbCBBZXJvbmF1dGljcyBhbmQgU3BhY2UgQWRtaW5pc3RyYXRpb24x
 | 
			
		||||
GTAXBgNVBAsTEFRlc3QgRW52aXJvbm1lbnQxGjAYBgNVBAsTEURTUy1OQVNBLVBp
 | 
			
		||||
bG90LUNBMB4XDTk2MDUxNDE3MDE0MVoXDTk3MDUxNDE3MDE0MVowMzELMAkGA1UE
 | 
			
		||||
BhMCQVUxDzANBgNVBAoTBk1pbmNvbTETMBEGA1UEAxMKRXJpYyBZb3VuZzCB8jAJ
 | 
			
		||||
BgUrDgMCDAUAA4HkADCB4AJBAKbfHz6vE6pXXMTpswtGUec2tvnfLJUsoxE9qs4+
 | 
			
		||||
ObZX7LmLvragNPUeiTJx7UOWZ5DfBj6bXLc8eYne0lP1g3ACQQDUEaSg45P2qrDw
 | 
			
		||||
ixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLbbn3QK74T2IxY1yY+kCNq8XrIqf5fJJzI
 | 
			
		||||
H0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3fVd0geUCQQCzCFUQAh+ZkEmp5804cs6Z
 | 
			
		||||
WBhrUAfnra8lJItYo9xPcXgdIfLfibcXR71UsyO77MRD7B0+Ag2tq794IleCVcEE
 | 
			
		||||
MAkGBSsOAwINBQADMAAwLQIUWsuuJRE3VT4ueWkWMAJMJaZjj1ECFQCYY0zX4bzM
 | 
			
		||||
LC7obsrHD8XAHG+ZRG==
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICTTCCAbagAwIBAgIBADANBgkqhkiG9w0BAQQFADBMMQswCQYDVQQGEwJHQjEM
 | 
			
		||||
MAoGA1UEChMDVUNMMRgwFgYDVQQLEw9JQ0UtVEVMIFByb2plY3QxFTATBgNVBAMT
 | 
			
		||||
DFRydXN0RmFjdG9yeTAeFw05NzA0MjIxNDM5MTRaFw05ODA0MjIxNDM5MTRaMEwx
 | 
			
		||||
CzAJBgNVBAYTAkdCMQwwCgYDVQQKEwNVQ0wxGDAWBgNVBAsTD0lDRS1URUwgUHJv
 | 
			
		||||
amVjdDEVMBMGA1UEAxMMVHJ1c3RGYWN0b3J5MIGcMAoGBFUIAQECAgQAA4GNADCB
 | 
			
		||||
iQKBgQCEieR8NcXkUW1f0G6aC6u0i8q/98JqS6RxK5YmHIGKCkuTWAUjzLfUa4dt
 | 
			
		||||
U9igGCjTuxaDqlzEim+t/02pmiBZT9HaX++35MjQPUWmsChcYU5WyzGErXi+rQaw
 | 
			
		||||
zlwS73zM8qiPj/97lXYycWhgL0VaiDSPxRXEUdWoaGruom4mNQIDAQABo0IwQDAd
 | 
			
		||||
BgNVHQ4EFgQUHal1LZr7oVg5z6lYzrhTgZRCmcUwDgYDVR0PAQH/BAQDAgH2MA8G
 | 
			
		||||
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAfaggfl6FZoioecjv0dq8
 | 
			
		||||
/DXo/u11iMZvXn08gjX/zl2b4wtPbShOSY5FhkSm8GeySasz+/Nwb/uzfnIhokWi
 | 
			
		||||
lfPZHtlCWtXbIy/TN51eJyq04ceDCQDWvLC2enVg9KB+GJ34b5c5VaPRzq8MBxsA
 | 
			
		||||
S7ELuYGtmYgYm9NZOIr7yU0=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB6jCCAZQCAgEtMA0GCSqGSIb3DQEBBAUAMIGAMQswCQYDVQQGEwJVUzE2MDQG
 | 
			
		||||
A1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFkbWluaXN0cmF0
 | 
			
		||||
aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MR4wHAYDVQQLExVNRDUtUlNB
 | 
			
		||||
LU5BU0EtUGlsb3QtQ0EwHhcNOTYwNDMwMjIwNTAwWhcNOTcwNDMwMjIwNTAwWjCB
 | 
			
		||||
gDELMAkGA1UEBhMCVVMxNjA0BgNVBAoTLU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFu
 | 
			
		||||
ZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZMBcGA1UECxMQVGVzdCBFbnZpcm9ubWVu
 | 
			
		||||
dDEeMBwGA1UECxMVTUQ1LVJTQS1OQVNBLVBpbG90LUNBMFkwCgYEVQgBAQICAgAD
 | 
			
		||||
SwAwSAJBALmmX5+GqAvcrWK13rfDrNX9UfeA7f+ijyBgeFQjYUoDpFqapw4nzQBL
 | 
			
		||||
bAXug8pKkRwa2Zh8YODhXsRWu2F/UckCAwEAATANBgkqhkiG9w0BAQQFAANBAH9a
 | 
			
		||||
OBA+QCsjxXgnSqHx04gcU8S49DVUb1f2XVoLnHlIb8RnX0k5O6mpHT5eti9bLkiW
 | 
			
		||||
GJNMJ4L0AJ/ac+SmHZc=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICajCCAdMCBDGA0QUwDQYJKoZIhvcNAQEEBQAwfTELMAkGA1UEBhMCQ2ExDzAN
 | 
			
		||||
BgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmlsaXR5IEFjY2VwdGVkMR8w
 | 
			
		||||
HQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRwwGgYDVQQDExNFbnRydXN0
 | 
			
		||||
IERlbW8gV2ViIENBMB4XDTk2MDQyNjEzMzUwMVoXDTA2MDQyNjEzMzUwMVowfTEL
 | 
			
		||||
MAkGA1UEBhMCQ2ExDzANBgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmls
 | 
			
		||||
aXR5IEFjY2VwdGVkMR8wHQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRww
 | 
			
		||||
GgYDVQQDExNFbnRydXN0IERlbW8gV2ViIENBMIGdMA0GCSqGSIb3DQEBAQUAA4GL
 | 
			
		||||
ADCBhwKBgQCaroS7O1DA0hm4IefNYU1cx/nqOmzEnk291d1XqznDeF4wEgakbkCc
 | 
			
		||||
zTKxK791yNpXG5RmngqH7cygDRTHZJ6mfCRn0wGC+AI00F2vYTGqPGRQL1N3lZT0
 | 
			
		||||
YDKFC0SQeMMjFIZ1aeQigroFQnHo0VB3zWIMpNkka8PY9lxHZAmWwQIBAzANBgkq
 | 
			
		||||
hkiG9w0BAQQFAAOBgQBAx0UMVA1s54lMQyXjMX5kj99FJN5itb8bK1Rk+cegPQPF
 | 
			
		||||
cWO9SEWyEjjBjIkjjzAwBkaEszFsNGxemxtXvwjIm1xEUMTVlPEWTs2qnDvAUA9W
 | 
			
		||||
YqhWbhH0toGT36236QAsqCZ76rbTRVSSX2BHyJwJMG2tCRv7kRJ//NIgxj3H4w==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICJzCCAZACAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
 | 
			
		||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
 | 
			
		||||
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTczN1oXDTAxMDYw
 | 
			
		||||
OTEzNTczN1owXDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
 | 
			
		||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYDVQQDExNUZXN0IFBDQSAoMTAy
 | 
			
		||||
NCBiaXQpMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdoWk/3+WcMlfjIrkg
 | 
			
		||||
40ketmnQaEogQe1LLcuOJV6rKfUSAsPgwgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp
 | 
			
		||||
22Jp85PmemiDzyUIStwk72qhp1imbANZvlmlCFKiQrjUyuDfu4TABmn+kkt3vR1Y
 | 
			
		||||
BEOGt+IFye1UBVSATVdRJ2UVhwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABNA1u/S
 | 
			
		||||
Cg/LJZWb7GliiKJsvuhxlE4E5JxQF2zMub/CSNbF97//tYSyj96sxeFQxZXbcjm9
 | 
			
		||||
xt6mr/xNLA4szNQMJ4P+L7b5e/jC5DSqlwS+CUYJgaFs/SP+qJoCSu1bR3IM9XWO
 | 
			
		||||
cRBpDmcBbYLkSyB92WURvsZ1LtjEcn+cdQVI
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIICXAIBAAKBgQCdoWk/3+WcMlfjIrkg40ketmnQaEogQe1LLcuOJV6rKfUSAsPg
 | 
			
		||||
wgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp22Jp85PmemiDzyUIStwk72qhp1imbANZ
 | 
			
		||||
vlmlCFKiQrjUyuDfu4TABmn+kkt3vR1YBEOGt+IFye1UBVSATVdRJ2UVhwIDAQAB
 | 
			
		||||
AoGAba4fTtuap5l7/8ZsbE7Z1O32KJY4ZcOZukLOLUUhXxXduT+FTgGWujc0/rgc
 | 
			
		||||
z9qYCLlNZHOouMYTgtSfYvuMuLZ11VIt0GYH+nRioLShE59Yy+zCRyC+gPigS1kz
 | 
			
		||||
xvo14AsOIPYV14Tk/SsHyq6E0eTk7VzaIE197giiINUERPECQQDSKmtPTh/lRKw7
 | 
			
		||||
HSZSM0I1mFWn/1zqrAbontRQY5w98QWIOe5qmzYyFbPXYT3d9BzlsMyhgiRNoBbD
 | 
			
		||||
yvohSHXJAkEAwAHx6ezAZeWWzD5yXD36nyjpkVCw7Tk7TSmOceLJMWt1QcrCfqlS
 | 
			
		||||
xA5jjpQ6Z8suU5DdtWAryM2sAir1WisYzwJAd6Zcx56jvAQ3xcPXsE6scBTVFzrj
 | 
			
		||||
7FqZ6E+cclPzfLQ+QQsyOBE7bpI6e/FJppY26XGZXo3YGzV8IGXrt40oOQJALETG
 | 
			
		||||
h86EFXo3qGOFbmsDy4pdP5nBERCu8X1xUCSfintiD4c2DInxgS5oGclnJeMcjTvL
 | 
			
		||||
QjQoJCX3UJCi/OUO1QJBAKgcDHWjMvt+l1pjJBsSEZ0HX9AAIIVx0RQmbFGS+F2Q
 | 
			
		||||
hhu5l77WnnZOQ9vvhV5u7NPCUF9nhU3jh60qWWO8mkc=
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
subject=/C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
 | 
			
		||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
 | 
			
		||||
notBefore=941104185834Z
 | 
			
		||||
notAfter =991103185834Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICIzCCAZACBQJBAAAWMA0GCSqGSIb3DQEBAgUAMFwxCzAJBgNVBAYTAlVTMSAw
 | 
			
		||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVy
 | 
			
		||||
Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDQxODU4MzRaFw05
 | 
			
		||||
OTExMDMxODU4MzRaMFwxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBT
 | 
			
		||||
ZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9u
 | 
			
		||||
IEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCk+4Fie84QJ93o
 | 
			
		||||
975sbsZwmdu41QUDaSiCnHJ/lj+O7Kwpkj+KFPhCdr69XQO5kNTQvAayUTNfxMK/
 | 
			
		||||
touPmbZiImDd298ggrTKoi8tUO2UMt7gVY3UaOLgTNLNBRYulWZcYVI4HlGogqHE
 | 
			
		||||
7yXpCuaLK44xZtn42f29O2nZ6wIDAQABMA0GCSqGSIb3DQEBAgUAA34AdrW2EP4j
 | 
			
		||||
9/dZYkuwX5zBaLxJu7NJbyFHXSudVMQAKD+YufKKg5tgf+tQx6sFEC097TgCwaVI
 | 
			
		||||
0v5loMC86qYjFmZsGySp8+x5NRhPJsjjr1BKx6cxa9B8GJ1Qv6km+iYrRpwUqbtb
 | 
			
		||||
MJhCKLVLU7tDCZJAuqiqWqTGtotXTcU=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
subject=/C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
 | 
			
		||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
 | 
			
		||||
notBefore=941109235417Z
 | 
			
		||||
notAfter =991231235417Z
 | 
			
		||||
-----BEGIN X509 CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
MIICKTCCAZYCBQJBAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMSAw
 | 
			
		||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJl
 | 
			
		||||
IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDkyMzU0MTda
 | 
			
		||||
Fw05OTEyMzEyMzU0MTdaMF8xCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0
 | 
			
		||||
YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJlIFNlcnZlciBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCSznrB
 | 
			
		||||
roM+WqqJg1esJQF2DK2ujiw3zus1eGRUA+WEQFHJv48I4oqCCNIWhjdV6bEhAq12
 | 
			
		||||
aIGaBaJLyUslZiJWbIgHj/eBWW2EB2VwE3F2Ppt3TONQiVaYSLkdpykaEy5KEVmc
 | 
			
		||||
HhXVSVQsczppgrGXOZxtcGdI5d0t1sgeewIDAQABMA0GCSqGSIb3DQEBAgUAA34A
 | 
			
		||||
iNHReSHO4ovo+MF9NFM/YYPZtgs4F7boviGNjwC4i1N+RGceIr2XJ+CchcxK9oU7
 | 
			
		||||
suK+ktPlDemvXA4MRpX/oRxePug2WHpzpgr4IhFrwwk4fia7c+8AvQKk8xQNMD9h
 | 
			
		||||
cHsg/jKjn7P0Z1LctO6EjJY2IN6BCINxIYoPnqk=
 | 
			
		||||
-----END X509 CERTIFICATE-----
 | 
			
		||||
subject=/C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
 | 
			
		||||
	/OU=Certification Services Division/CN=Thawte Server CA
 | 
			
		||||
	/Email=server-certs@thawte.com
 | 
			
		||||
issuer= /C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
 | 
			
		||||
	/OU=Certification Services Division/CN=Thawte Server CA
 | 
			
		||||
	/Email=server-certs@thawte.com
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIC+TCCAmICAQAwDQYJKoZIhvcNAQEEBQAwgcQxCzAJBgNVBAYTAlpBMRUwEwYD
 | 
			
		||||
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
 | 
			
		||||
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
 | 
			
		||||
dmljZXMgRGl2aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkq
 | 
			
		||||
hkiG9w0BCQEWF3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMB4XDTk2MDcyNzE4MDc1
 | 
			
		||||
N1oXDTk4MDcyNzE4MDc1N1owgcQxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0
 | 
			
		||||
ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMUVGhhd3RlIENv
 | 
			
		||||
bnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
 | 
			
		||||
aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkqhkiG9w0BCQEW
 | 
			
		||||
F3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
 | 
			
		||||
iQKBgQDTpFBuyP9Wa+bPXbbqDGh1R6KqwtqEJfyo9EdR2oW1IHSUhh4PdcnpCGH1
 | 
			
		||||
Bm0wbhUZAulSwGLbTZme4moMRDjN/r7jZAlwxf6xaym2L0nIO9QnBCUQly/nkG3A
 | 
			
		||||
KEKZ10xD3sP1IW1Un13DWOHA5NlbsLjctHvfNjrCtWYiEtaHDQIDAQABMA0GCSqG
 | 
			
		||||
SIb3DQEBBAUAA4GBAIsvn7ifX3RUIrvYXtpI4DOfARkTogwm6o7OwVdl93yFhDcX
 | 
			
		||||
7h5t0XZ11MUAMziKdde3rmTvzUYIUCYoY5b032IwGMTvdiclK+STN6NP2m5nvFAM
 | 
			
		||||
qJT5gC5O+j/jBuZRQ4i0AMYQr5F4lT8oBJnhgafw6PL8aDY2vMHGSPl9+7uf
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIDDTCCAnYCAQAwDQYJKoZIhvcNAQEEBQAwgc4xCzAJBgNVBAYTAlpBMRUwEwYD
 | 
			
		||||
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
 | 
			
		||||
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
 | 
			
		||||
dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBD
 | 
			
		||||
QTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTAeFw05
 | 
			
		||||
NjA3MjcxODA3MTRaFw05ODA3MjcxODA3MTRaMIHOMQswCQYDVQQGEwJaQTEVMBMG
 | 
			
		||||
A1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xHTAbBgNVBAoT
 | 
			
		||||
FFRoYXd0ZSBDb25zdWx0aW5nIGNjMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNl
 | 
			
		||||
cnZpY2VzIERpdmlzaW9uMSEwHwYDVQQDExhUaGF3dGUgUHJlbWl1bSBTZXJ2ZXIg
 | 
			
		||||
Q0ExKDAmBgkqhkiG9w0BCQEWGXByZW1pdW0tc2VydmVyQHRoYXd0ZS5jb20wgZ8w
 | 
			
		||||
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANI2NmqL18JbntqBQWKPOO5JBFXW0O8c
 | 
			
		||||
G5UWR+8YSDU6UvQragaPOy/qVuOvho2eF/eetGV1Ak3vywmiIVHYm9Bn0LoNkgYU
 | 
			
		||||
c9STy5cqAJxcTgy8+hVS/PJEbtoRSm4Iny8t4/mqOoZztkZTWMiJBb2DEbhzP6oH
 | 
			
		||||
jfRCTedAnRw3AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAutFIgTRZVYerIZfL9lvR
 | 
			
		||||
w9Eifvvo5KTZ3h+Bj+VzNnyw4Qc/IyXkPOu6SIiH9LQ3sCmWBdxpe+qr4l77rLj2
 | 
			
		||||
GYuMtESFfn1XVALzkYgC7JcPuTOjMfIiMByt+uFf8AV8x0IW/Qkuv+hEQcyM9vxK
 | 
			
		||||
3VZdLbCVIhNoEsysrxCpxcI=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
Tims test GCI CA
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB8DCCAZoCAQAwDQYJKoZIhvcNAQEEBQAwgYIxCzAJBgNVBAYTAkFVMRMwEQYD
 | 
			
		||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
 | 
			
		||||
cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2RldmVsb3BtZW50MRkwFwYDVQQDExBD
 | 
			
		||||
cnlwdFNvZnQgRGV2IENBMB4XDTk3MDMyMjEzMzQwNFoXDTk4MDMyMjEzMzQwNFow
 | 
			
		||||
gYIxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhC
 | 
			
		||||
cmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2Rl
 | 
			
		||||
dmVsb3BtZW50MRkwFwYDVQQDExBDcnlwdFNvZnQgRGV2IENBMFwwDQYJKoZIhvcN
 | 
			
		||||
AQEBBQADSwAwSAJBAOAOAqogG5QwAmLhzyO4CoRnx/wVy4NZP4dxJy83O1EnL0rw
 | 
			
		||||
OdsamJKvPOLHgSXo3gDu9uVyvCf/QJmZAmC5ml8CAwEAATANBgkqhkiG9w0BAQQF
 | 
			
		||||
AANBADRRS/GVdd7rAqRW6SdmgLJduOU2yq3avBu99kRqbp9A/dLu6r6jU+eP4oOA
 | 
			
		||||
TfdbFZtAAD2Hx9jUtY3tfdrJOb8= 
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICVjCCAgACAQAwDQYJKoZIhvcNAQEEBQAwgbUxCzAJBgNVBAYTAkFVMRMwEQYD
 | 
			
		||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
 | 
			
		||||
cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsTI1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9O
 | 
			
		||||
IEFVVEhPUklUSUVTMTQwMgYDVQQDEytaRVJPIFZBTFVFIENBIC0gREVNT05TVFJB
 | 
			
		||||
VElPTiBQVVJQT1NFUyBPTkxZMB4XDTk3MDQwMzEzMjI1NFoXDTk4MDQwMzEzMjI1
 | 
			
		||||
NFowgbUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQH
 | 
			
		||||
EwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsT
 | 
			
		||||
I1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9OIEFVVEhPUklUSUVTMTQwMgYDVQQDEyta
 | 
			
		||||
RVJPIFZBTFVFIENBIC0gREVNT05TVFJBVElPTiBQVVJQT1NFUyBPTkxZMFwwDQYJ
 | 
			
		||||
KoZIhvcNAQEBBQADSwAwSAJBAOZ7T7yqP/tyspcko3yPY1y0Cm2EmwNvzW4QgVXR
 | 
			
		||||
Fjs3HmJ4xtSpXdo6mwcGezL3Abt/aQXaxv9PU8xt+Jr0OFUCAwEAATANBgkqhkiG
 | 
			
		||||
9w0BAQQFAANBAOQpYmGgyCqCy1OljgJhCqQOu627oVlHzK1L+t9vBaMfn40AVUR4
 | 
			
		||||
WzQVWO31KTgi5vTK1U+3h46fgUWqQ0h+6rU=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIAwgKADAgECAgEAMA0GCSqGSIb3DQEBBAUAMGIxETAPBgNVBAcTCEludGVybmV0
 | 
			
		||||
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xh
 | 
			
		||||
c3MgMSBDQSAtIEluZGl2aWR1YWwgU3Vic2NyaWJlcjAeFw05NjA0MDgxMDIwMjda
 | 
			
		||||
Fw05NzA0MDgxMDIwMjdaMGIxETAPBgNVBAcTCEludGVybmV0MRcwFQYDVQQKEw5W
 | 
			
		||||
ZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xhc3MgMSBDQSAtIElu
 | 
			
		||||
ZGl2aWR1YWwgU3Vic2NyaWJlcjCAMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2
 | 
			
		||||
FKbPTdAFDdjKI9BvqrQpkmOOLPhvltcunXZLEbE2jVfJw/0cxrr+Hgi6M8qV6r7j
 | 
			
		||||
W80GqLd5HUQq7XPysVKDaBBwZJHXPmv5912dFEObbpdFmIFH0S3L3bty10w/cari
 | 
			
		||||
QPJUObwW7s987LrbP2wqsxaxhhKdrpM01bjV0Pc+qQIDAQABAAAAADANBgkqhkiG
 | 
			
		||||
9w0BAQQFAAOBgQA+1nJryNt8VBRjRr07ArDAV/3jAH7GjDc9jsrxZS68ost9v06C
 | 
			
		||||
TvTNKGL+LISNmFLXl+JXhgGB0JZ9fvyYzNgHQ46HBUng1H6voalfJgS2KdEo50wW
 | 
			
		||||
8EFZYMDkT1k4uynwJqkVN2QJK/2q4/A/VCov5h6SlM8Affg2W+1TLqvqkwAA
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
 subject=/L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
 | 
			
		||||
 issuer= /L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
 | 
			
		||||
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIEkzCCA/ygAwIBAgIRANDTUpSRL3nTFeMrMayFSPAwDQYJKoZIhvcNAQECBQAw
 | 
			
		||||
YjERMA8GA1UEBxMISW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQw
 | 
			
		||||
MgYDVQQLEytWZXJpU2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3Jp
 | 
			
		||||
YmVyMB4XDTk2MDYwNDAwMDAwMFoXDTk4MDYwNDIzNTk1OVowYjERMA8GA1UEBxMI
 | 
			
		||||
SW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQLEytWZXJp
 | 
			
		||||
U2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3JpYmVyMIGfMA0GCSqG
 | 
			
		||||
SIb3DQEBAQUAA4GNADCBiQKBgQC6A+2czKGRcYMfm8gdnk+0de99TDDzsqo0v5nb
 | 
			
		||||
RsbUmMcdRQ7nsMbRWe0SAb/9QoLTZ/cJ0iOBqdrkz7UpqqKarVoTSdlSMVM92tWp
 | 
			
		||||
3bJncZHQD1t4xd6lQVdI1/T6R+5J0T1ukOdsI9Jmf+F28S6g3R3L1SFwiHKeZKZv
 | 
			
		||||
z+793wIDAQABo4ICRzCCAkMwggIpBgNVHQMBAf8EggIdMIICGTCCAhUwggIRBgtg
 | 
			
		||||
hkgBhvhFAQcBATCCAgAWggGrVGhpcyBjZXJ0aWZpY2F0ZSBpbmNvcnBvcmF0ZXMg
 | 
			
		||||
YnkgcmVmZXJlbmNlLCBhbmQgaXRzIHVzZSBpcyBzdHJpY3RseSBzdWJqZWN0IHRv
 | 
			
		||||
LCB0aGUgVmVyaVNpZ24gQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQg
 | 
			
		||||
KENQUyksIGF2YWlsYWJsZSBhdDogaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL0NQ
 | 
			
		||||
Uy0xLjA7IGJ5IEUtbWFpbCBhdCBDUFMtcmVxdWVzdHNAdmVyaXNpZ24uY29tOyBv
 | 
			
		||||
ciBieSBtYWlsIGF0IFZlcmlTaWduLCBJbmMuLCAyNTkzIENvYXN0IEF2ZS4sIE1v
 | 
			
		||||
dW50YWluIFZpZXcsIENBIDk0MDQzIFVTQSBUZWwuICsxICg0MTUpIDk2MS04ODMw
 | 
			
		||||
IENvcHlyaWdodCAoYykgMTk5NiBWZXJpU2lnbiwgSW5jLiAgQWxsIFJpZ2h0cyBS
 | 
			
		||||
ZXNlcnZlZC4gQ0VSVEFJTiBXQVJSQU5USUVTIERJU0NMQUlNRUQgYW5kIExJQUJJ
 | 
			
		||||
TElUWSBMSU1JVEVELqAOBgxghkgBhvhFAQcBAQGhDgYMYIZIAYb4RQEHAQECMC8w
 | 
			
		||||
LRYraHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvQ1BTLTEuMDAU
 | 
			
		||||
BglghkgBhvhCAQEBAf8EBAMCAgQwDQYJKoZIhvcNAQECBQADgYEApRJRkNBqLLgs
 | 
			
		||||
53IR/d18ODdLOWMTZ+QOOxBrq460iBEdUwgF8vmPRX1ku7UiDeNzaLlurE6eFqHq
 | 
			
		||||
2zPyK5j60zfTLVJMWKcQWwTJLjHtXrW8pxhNtFc6Fdvy5ZkHnC/9NIl7/t4U6WqB
 | 
			
		||||
p4y+p7SdMIkEwIZfds0VbnQyX5MRUJY=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 | 
			
		||||
 subject=/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
			
		||||
 issuer= /C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICMTCCAZoCBQKhAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
 | 
			
		||||
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMg
 | 
			
		||||
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
 | 
			
		||||
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
 | 
			
		||||
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyVxZ
 | 
			
		||||
nvIbigEUtBDfBEDb41evakVAj4QMC9Ez2dkRz+4CWB8l9yqoRAWq7AMfeH+ek7ma
 | 
			
		||||
AKojfdashaJjRcdyJ8z0TMZ1cdI5709C8HXfCpDGjiBvmA/4rCNfcCk2pMmG57Ga
 | 
			
		||||
IMtTpYXnPb59mv4kRTPcdhXtD6JxZExlLoFoRacCAwEAATANBgkqhkiG9w0BAQIF
 | 
			
		||||
AAOBgQB1Zmw+0c2B27X4LzZRtvdCvM1Cr9wO+hVs+GeTVzrrtpLotgHKjLeOQ7RJ
 | 
			
		||||
Zfk+7r11Ri7J/CVdqMcvi5uPaM+0nJcYwE3vH9mvgrPmZLiEXIqaB1JDYft0nls6
 | 
			
		||||
NvxMsvwaPxUupVs8G5DsiCnkWRb5zget7Ond2tIxik/W2O8XjQ==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 subject=/C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
 | 
			
		||||
 issuer= /C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICMTCCAZoCBQKmAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
 | 
			
		||||
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMg
 | 
			
		||||
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
 | 
			
		||||
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
 | 
			
		||||
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
 | 
			
		||||
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LJ1
 | 
			
		||||
9njQrlpQ9OlQqZ+M1++RlHDo0iSQdomF1t+s5gEXMoDwnZNHvJplnR+Xrr/phnVj
 | 
			
		||||
IIm9gFidBAydqMEk6QvlMXi9/C0MN2qeeIDpRnX57aP7E3vIwUzSo+/1PLBij0pd
 | 
			
		||||
O92VZ48TucE81qcmm+zDO3rZTbxtm+gVAePwR6kCAwEAATANBgkqhkiG9w0BAQIF
 | 
			
		||||
AAOBgQBT3dPwnCR+QKri/AAa19oM/DJhuBUNlvP6Vxt/M3yv6ZiaYch6s7f/sdyZ
 | 
			
		||||
g9ysEvxwyR84Qu1E9oAuW2szaayc01znX1oYx7EteQSWQZGZQbE8DbqEOcY7l/Am
 | 
			
		||||
yY7uvcxClf8exwI/VAx49byqYHwCaejcrOICdmHEPgPq0ook0Q==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										436
									
								
								apps/sess_id.c
									
									
									
									
									
								
							
							
						
						
									
										436
									
								
								apps/sess_id.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -67,20 +67,20 @@
 | 
			
		||||
#include <openssl/ssl.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	sess_id_main
 | 
			
		||||
#define PROG    sess_id_main
 | 
			
		||||
 | 
			
		||||
static const char *sess_id_usage[]={
 | 
			
		||||
"usage: sess_id args\n",
 | 
			
		||||
"\n",
 | 
			
		||||
" -inform arg     - input format - default PEM (DER or PEM)\n",
 | 
			
		||||
" -outform arg    - output format - default PEM\n",
 | 
			
		||||
" -in arg         - input file - default stdin\n",
 | 
			
		||||
" -out arg        - output file - default stdout\n",
 | 
			
		||||
" -text           - print ssl session id details\n",
 | 
			
		||||
" -cert           - output certificate \n",
 | 
			
		||||
" -noout          - no CRL output\n",
 | 
			
		||||
" -context arg    - set the session ID context\n",
 | 
			
		||||
NULL
 | 
			
		||||
static const char *sess_id_usage[] = {
 | 
			
		||||
    "usage: sess_id args\n",
 | 
			
		||||
    "\n",
 | 
			
		||||
    " -inform arg     - input format - default PEM (DER or PEM)\n",
 | 
			
		||||
    " -outform arg    - output format - default PEM (PEM, DER or NSS)\n",
 | 
			
		||||
    " -in arg         - input file - default stdin\n",
 | 
			
		||||
    " -out arg        - output file - default stdout\n",
 | 
			
		||||
    " -text           - print ssl session id details\n",
 | 
			
		||||
    " -cert           - output certificate \n",
 | 
			
		||||
    " -noout          - no output of encoded session info\n",
 | 
			
		||||
    " -context arg    - set the session ID context\n",
 | 
			
		||||
    NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static SSL_SESSION *load_sess_id(char *file, int format);
 | 
			
		||||
@@ -88,235 +88,215 @@ static SSL_SESSION *load_sess_id(char *file, int format);
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	SSL_SESSION *x=NULL;
 | 
			
		||||
	X509 *peer = NULL;
 | 
			
		||||
	int ret=1,i,num,badops=0;
 | 
			
		||||
	BIO *out=NULL;
 | 
			
		||||
	int informat,outformat;
 | 
			
		||||
	char *infile=NULL,*outfile=NULL,*context=NULL;
 | 
			
		||||
	int cert=0,noout=0,text=0;
 | 
			
		||||
	const char **pp;
 | 
			
		||||
{
 | 
			
		||||
    SSL_SESSION *x = NULL;
 | 
			
		||||
    X509 *peer = NULL;
 | 
			
		||||
    int ret = 1, i, num, badops = 0;
 | 
			
		||||
    BIO *out = NULL;
 | 
			
		||||
    int informat, outformat;
 | 
			
		||||
    char *infile = NULL, *outfile = NULL, *context = NULL;
 | 
			
		||||
    int cert = 0, noout = 0, text = 0;
 | 
			
		||||
    const char **pp;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
	outformat=FORMAT_PEM;
 | 
			
		||||
    informat = FORMAT_PEM;
 | 
			
		||||
    outformat = FORMAT_PEM;
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	num=0;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(strcmp(*argv,"-inform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			informat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-outform") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outformat=str2fmt(*(++argv));
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-text") == 0)
 | 
			
		||||
			text= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-cert") == 0)
 | 
			
		||||
			cert= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout= ++num;
 | 
			
		||||
		else if (strcmp(*argv,"-context") == 0)
 | 
			
		||||
		    {
 | 
			
		||||
		    if(--argc < 1) goto bad;
 | 
			
		||||
		    context=*++argv;
 | 
			
		||||
		    }
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
			
		||||
			badops=1;
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    num = 0;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-inform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            informat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-outform") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outformat = str2fmt(*(++argv));
 | 
			
		||||
        } else if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-text") == 0)
 | 
			
		||||
            text = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-cert") == 0)
 | 
			
		||||
            cert = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = ++num;
 | 
			
		||||
        else if (strcmp(*argv, "-context") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            context = *++argv;
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badops = 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		for (pp=sess_id_usage; (*pp != NULL); pp++)
 | 
			
		||||
			BIO_printf(bio_err,"%s",*pp);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        for (pp = sess_id_usage; (*pp != NULL); pp++)
 | 
			
		||||
            BIO_printf(bio_err, "%s", *pp);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	x=load_sess_id(infile,informat);
 | 
			
		||||
	if (x == NULL) { goto end; }
 | 
			
		||||
	peer = SSL_SESSION_get0_peer(x);
 | 
			
		||||
 | 
			
		||||
	if(context)
 | 
			
		||||
	    {
 | 
			
		||||
	    size_t ctx_len = strlen(context);
 | 
			
		||||
	    if(ctx_len > SSL_MAX_SID_CTX_LENGTH)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"Context too long\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	    SSL_SESSION_set1_id_context(x, (unsigned char *)context, ctx_len);
 | 
			
		||||
	    }
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    x = load_sess_id(infile, informat);
 | 
			
		||||
    if (x == NULL) {
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    peer = SSL_SESSION_get0_peer(x);
 | 
			
		||||
 | 
			
		||||
    if (context) {
 | 
			
		||||
        size_t ctx_len = strlen(context);
 | 
			
		||||
        if (ctx_len > SSL_MAX_SID_CTX_LENGTH) {
 | 
			
		||||
            BIO_printf(bio_err, "Context too long\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        SSL_SESSION_set1_id_context(x, (unsigned char *)context, ctx_len);
 | 
			
		||||
    }
 | 
			
		||||
#ifdef undef
 | 
			
		||||
	/* just testing for memory leaks :-) */
 | 
			
		||||
	{
 | 
			
		||||
	SSL_SESSION *s;
 | 
			
		||||
	char buf[1024*10],*p;
 | 
			
		||||
	int i;
 | 
			
		||||
    /* just testing for memory leaks :-) */
 | 
			
		||||
    {
 | 
			
		||||
        SSL_SESSION *s;
 | 
			
		||||
        char buf[1024 * 10], *p;
 | 
			
		||||
        int i;
 | 
			
		||||
 | 
			
		||||
	s=SSL_SESSION_new();
 | 
			
		||||
        s = SSL_SESSION_new();
 | 
			
		||||
 | 
			
		||||
	p= &buf;
 | 
			
		||||
	i=i2d_SSL_SESSION(x,&p);
 | 
			
		||||
	p= &buf;
 | 
			
		||||
	d2i_SSL_SESSION(&s,&p,(long)i);
 | 
			
		||||
	p= &buf;
 | 
			
		||||
	d2i_SSL_SESSION(&s,&p,(long)i);
 | 
			
		||||
	p= &buf;
 | 
			
		||||
	d2i_SSL_SESSION(&s,&p,(long)i);
 | 
			
		||||
	SSL_SESSION_free(s);
 | 
			
		||||
	}
 | 
			
		||||
        p = &buf;
 | 
			
		||||
        i = i2d_SSL_SESSION(x, &p);
 | 
			
		||||
        p = &buf;
 | 
			
		||||
        d2i_SSL_SESSION(&s, &p, (long)i);
 | 
			
		||||
        p = &buf;
 | 
			
		||||
        d2i_SSL_SESSION(&s, &p, (long)i);
 | 
			
		||||
        p = &buf;
 | 
			
		||||
        d2i_SSL_SESSION(&s, &p, (long)i);
 | 
			
		||||
        SSL_SESSION_free(s);
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (!noout || text)
 | 
			
		||||
		{
 | 
			
		||||
		out=BIO_new(BIO_s_file());
 | 
			
		||||
		if (out == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
    if (!noout || text) {
 | 
			
		||||
        out = BIO_new(BIO_s_file());
 | 
			
		||||
        if (out == NULL) {
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if (outfile == NULL)
 | 
			
		||||
			{
 | 
			
		||||
			BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
			
		||||
        if (outfile == NULL) {
 | 
			
		||||
            BIO_set_fp(out, stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
            {
 | 
			
		||||
                BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
                out = BIO_push(tmpbio, out);
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (BIO_write_filename(out,outfile) <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				perror(outfile);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
        } else {
 | 
			
		||||
            if (BIO_write_filename(out, outfile) <= 0) {
 | 
			
		||||
                perror(outfile);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (text)
 | 
			
		||||
		{
 | 
			
		||||
		SSL_SESSION_print(out,x);
 | 
			
		||||
    if (text) {
 | 
			
		||||
        SSL_SESSION_print(out, x);
 | 
			
		||||
 | 
			
		||||
		if (cert)
 | 
			
		||||
			{
 | 
			
		||||
			if (peer == NULL)
 | 
			
		||||
				BIO_puts(out,"No certificate present\n");
 | 
			
		||||
			else
 | 
			
		||||
				X509_print(out,peer);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
        if (cert) {
 | 
			
		||||
            if (peer == NULL)
 | 
			
		||||
                BIO_puts(out, "No certificate present\n");
 | 
			
		||||
            else
 | 
			
		||||
                X509_print(out, peer);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (!noout && !cert)
 | 
			
		||||
		{
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=i2d_SSL_SESSION_bio(out,x);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i=PEM_write_bio_SSL_SESSION(out,x);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (!i) {
 | 
			
		||||
			BIO_printf(bio_err,"unable to write SSL_SESSION\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else if (!noout && (peer != NULL)) /* just print the certificate */
 | 
			
		||||
		{
 | 
			
		||||
		if 	(outformat == FORMAT_ASN1)
 | 
			
		||||
			i=(int)i2d_X509_bio(out,peer);
 | 
			
		||||
		else if (outformat == FORMAT_PEM)
 | 
			
		||||
			i=PEM_write_bio_X509(out,peer);
 | 
			
		||||
		else	{
 | 
			
		||||
			BIO_printf(bio_err,"bad output format specified for outfile\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		if (!i) {
 | 
			
		||||
			BIO_printf(bio_err,"unable to write X509\n");
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (out != NULL) BIO_free_all(out);
 | 
			
		||||
	if (x != NULL) SSL_SESSION_free(x);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    if (!noout && !cert) {
 | 
			
		||||
        if (outformat == FORMAT_ASN1)
 | 
			
		||||
            i = i2d_SSL_SESSION_bio(out, x);
 | 
			
		||||
        else if (outformat == FORMAT_PEM)
 | 
			
		||||
            i = PEM_write_bio_SSL_SESSION(out, x);
 | 
			
		||||
        else if (outformat == FORMAT_NSS)
 | 
			
		||||
            i = SSL_SESSION_print_keylog(out, x);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (!i) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to write SSL_SESSION\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (!noout && (peer != NULL)) { /* just print the certificate */
 | 
			
		||||
        if (outformat == FORMAT_ASN1)
 | 
			
		||||
            i = (int)i2d_X509_bio(out, peer);
 | 
			
		||||
        else if (outformat == FORMAT_PEM)
 | 
			
		||||
            i = PEM_write_bio_X509(out, peer);
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "bad output format specified for outfile\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (!i) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to write X509\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (out != NULL)
 | 
			
		||||
        BIO_free_all(out);
 | 
			
		||||
    if (x != NULL)
 | 
			
		||||
        SSL_SESSION_free(x);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static SSL_SESSION *load_sess_id(char *infile, int format)
 | 
			
		||||
	{
 | 
			
		||||
	SSL_SESSION *x=NULL;
 | 
			
		||||
	BIO *in=NULL;
 | 
			
		||||
{
 | 
			
		||||
    SSL_SESSION *x = NULL;
 | 
			
		||||
    BIO *in = NULL;
 | 
			
		||||
 | 
			
		||||
	in=BIO_new(BIO_s_file());
 | 
			
		||||
	if (in == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    if (in == NULL) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (infile == NULL)
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
			
		||||
			{
 | 
			
		||||
			perror(infile);
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if 	(format == FORMAT_ASN1)
 | 
			
		||||
		x=d2i_SSL_SESSION_bio(in,NULL);
 | 
			
		||||
	else if (format == FORMAT_PEM)
 | 
			
		||||
		x=PEM_read_bio_SSL_SESSION(in,NULL,NULL,NULL);
 | 
			
		||||
	else	{
 | 
			
		||||
		BIO_printf(bio_err,"bad input format specified for input crl\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if (x == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"unable to load SSL_SESSION\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
end:
 | 
			
		||||
	if (in != NULL) BIO_free(in);
 | 
			
		||||
	return(x);
 | 
			
		||||
	}
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
            perror(infile);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (format == FORMAT_ASN1)
 | 
			
		||||
        x = d2i_SSL_SESSION_bio(in, NULL);
 | 
			
		||||
    else if (format == FORMAT_PEM)
 | 
			
		||||
        x = PEM_read_bio_SSL_SESSION(in, NULL, NULL, NULL);
 | 
			
		||||
    else {
 | 
			
		||||
        BIO_printf(bio_err, "bad input format specified for input crl\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (x == NULL) {
 | 
			
		||||
        BIO_printf(bio_err, "unable to load SSL_SESSION\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 end:
 | 
			
		||||
    if (in != NULL)
 | 
			
		||||
        BIO_free(in);
 | 
			
		||||
    return (x);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1333
									
								
								apps/smime.c
									
									
									
									
									
								
							
							
						
						
									
										1333
									
								
								apps/smime.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										5291
									
								
								apps/speed.c
									
									
									
									
									
								
							
							
						
						
									
										5291
									
								
								apps/speed.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										404
									
								
								apps/spkac.c
									
									
									
									
									
								
							
							
						
						
									
										404
									
								
								apps/spkac.c
									
									
									
									
									
								
							@@ -1,8 +1,8 @@
 | 
			
		||||
/* apps/spkac.c */
 | 
			
		||||
 | 
			
		||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
 | 
			
		||||
 * project 1999. Based on an original idea by Massimiliano Pala
 | 
			
		||||
 * (madwolf@openca.org).
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 | 
			
		||||
 * 1999. Based on an original idea by Massimiliano Pala (madwolf@openca.org).
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -71,238 +71,242 @@
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	spkac_main
 | 
			
		||||
#define PROG    spkac_main
 | 
			
		||||
 | 
			
		||||
/* -in arg	- input file - default stdin
 | 
			
		||||
 * -out arg	- output file - default stdout
 | 
			
		||||
/*-
 | 
			
		||||
 * -in arg      - input file - default stdin
 | 
			
		||||
 * -out arg     - output file - default stdout
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	int i,badops=0, ret = 1;
 | 
			
		||||
	BIO *in = NULL,*out = NULL;
 | 
			
		||||
	int verify=0,noout=0,pubkey=0;
 | 
			
		||||
	char *infile = NULL,*outfile = NULL,*prog;
 | 
			
		||||
	char *passargin = NULL, *passin = NULL;
 | 
			
		||||
	const char *spkac = "SPKAC", *spksect = "default";
 | 
			
		||||
	char *spkstr = NULL;
 | 
			
		||||
	char *challenge = NULL, *keyfile = NULL;
 | 
			
		||||
	CONF *conf = NULL;
 | 
			
		||||
	NETSCAPE_SPKI *spki = NULL;
 | 
			
		||||
	EVP_PKEY *pkey = NULL;
 | 
			
		||||
{
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    int i, badops = 0, ret = 1;
 | 
			
		||||
    BIO *in = NULL, *out = NULL;
 | 
			
		||||
    int verify = 0, noout = 0, pubkey = 0;
 | 
			
		||||
    char *infile = NULL, *outfile = NULL, *prog;
 | 
			
		||||
    char *passargin = NULL, *passin = NULL;
 | 
			
		||||
    const char *spkac = "SPKAC", *spksect = "default";
 | 
			
		||||
    char *spkstr = NULL;
 | 
			
		||||
    char *challenge = NULL, *keyfile = NULL;
 | 
			
		||||
    CONF *conf = NULL;
 | 
			
		||||
    NETSCAPE_SPKI *spki = NULL;
 | 
			
		||||
    EVP_PKEY *pkey = NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (!bio_err) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
    if (!bio_err)
 | 
			
		||||
        bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	prog=argv[0];
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (argc >= 1)
 | 
			
		||||
		{
 | 
			
		||||
		if (strcmp(*argv,"-in") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			infile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-out") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			outfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-passin") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			passargin= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-key") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			keyfile= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-challenge") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			challenge= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-spkac") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			spkac= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-spksect") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			spksect= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (argc >= 1) {
 | 
			
		||||
        if (strcmp(*argv, "-in") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            infile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-out") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            outfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-passin") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            passargin = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-key") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            keyfile = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-challenge") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            challenge = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-spkac") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            spkac = *(++argv);
 | 
			
		||||
        } else if (strcmp(*argv, "-spksect") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            spksect = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			engine= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
        else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            engine = *(++argv);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
			
		||||
			noout=1;
 | 
			
		||||
		else if (strcmp(*argv,"-pubkey") == 0)
 | 
			
		||||
			pubkey=1;
 | 
			
		||||
		else if (strcmp(*argv,"-verify") == 0)
 | 
			
		||||
			verify=1;
 | 
			
		||||
		else badops = 1;
 | 
			
		||||
		argc--;
 | 
			
		||||
		argv++;
 | 
			
		||||
		}
 | 
			
		||||
        else if (strcmp(*argv, "-noout") == 0)
 | 
			
		||||
            noout = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-pubkey") == 0)
 | 
			
		||||
            pubkey = 1;
 | 
			
		||||
        else if (strcmp(*argv, "-verify") == 0)
 | 
			
		||||
            verify = 1;
 | 
			
		||||
        else
 | 
			
		||||
            badops = 1;
 | 
			
		||||
        argc--;
 | 
			
		||||
        argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (badops)
 | 
			
		||||
		{
 | 
			
		||||
bad:
 | 
			
		||||
		BIO_printf(bio_err,"%s [options]\n",prog);
 | 
			
		||||
		BIO_printf(bio_err,"where options are\n");
 | 
			
		||||
		BIO_printf(bio_err," -in arg        input file\n");
 | 
			
		||||
		BIO_printf(bio_err," -out arg       output file\n");
 | 
			
		||||
		BIO_printf(bio_err," -key arg       create SPKAC using private key\n");
 | 
			
		||||
		BIO_printf(bio_err," -passin arg    input file pass phrase source\n");
 | 
			
		||||
		BIO_printf(bio_err," -challenge arg challenge string\n");
 | 
			
		||||
		BIO_printf(bio_err," -spkac arg     alternative SPKAC name\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout         don't print SPKAC\n");
 | 
			
		||||
		BIO_printf(bio_err," -pubkey        output public key\n");
 | 
			
		||||
		BIO_printf(bio_err," -verify        verify SPKAC signature\n");
 | 
			
		||||
    if (badops) {
 | 
			
		||||
 bad:
 | 
			
		||||
        BIO_printf(bio_err, "%s [options]\n", prog);
 | 
			
		||||
        BIO_printf(bio_err, "where options are\n");
 | 
			
		||||
        BIO_printf(bio_err, " -in arg        input file\n");
 | 
			
		||||
        BIO_printf(bio_err, " -out arg       output file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -key arg       create SPKAC using private key\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -passin arg    input file pass phrase source\n");
 | 
			
		||||
        BIO_printf(bio_err, " -challenge arg challenge string\n");
 | 
			
		||||
        BIO_printf(bio_err, " -spkac arg     alternative SPKAC name\n");
 | 
			
		||||
        BIO_printf(bio_err, " -noout         don't print SPKAC\n");
 | 
			
		||||
        BIO_printf(bio_err, " -pubkey        output public key\n");
 | 
			
		||||
        BIO_printf(bio_err, " -verify        verify SPKAC signature\n");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," -engine e      use engine e, possibly a hardware device.\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -engine e      use engine e, possibly a hardware device.\n");
 | 
			
		||||
#endif
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
 | 
			
		||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
    if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
 | 
			
		||||
        BIO_printf(bio_err, "Error getting password\n");
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
    e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if(keyfile) {
 | 
			
		||||
		pkey = load_key(bio_err,
 | 
			
		||||
				strcmp(keyfile, "-") ? keyfile : NULL,
 | 
			
		||||
				FORMAT_PEM, 1, passin, e, "private key");
 | 
			
		||||
		if(!pkey) {
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		spki = NETSCAPE_SPKI_new();
 | 
			
		||||
		if(challenge) ASN1_STRING_set(spki->spkac->challenge,
 | 
			
		||||
						 challenge, (int)strlen(challenge));
 | 
			
		||||
		NETSCAPE_SPKI_set_pubkey(spki, pkey);
 | 
			
		||||
		NETSCAPE_SPKI_sign(spki, pkey, EVP_md5());
 | 
			
		||||
		spkstr = NETSCAPE_SPKI_b64_encode(spki);
 | 
			
		||||
    if (keyfile) {
 | 
			
		||||
        pkey = load_key(bio_err,
 | 
			
		||||
                        strcmp(keyfile, "-") ? keyfile : NULL,
 | 
			
		||||
                        FORMAT_PEM, 1, passin, e, "private key");
 | 
			
		||||
        if (!pkey) {
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        spki = NETSCAPE_SPKI_new();
 | 
			
		||||
        if (challenge)
 | 
			
		||||
            ASN1_STRING_set(spki->spkac->challenge,
 | 
			
		||||
                            challenge, (int)strlen(challenge));
 | 
			
		||||
        NETSCAPE_SPKI_set_pubkey(spki, pkey);
 | 
			
		||||
        NETSCAPE_SPKI_sign(spki, pkey, EVP_md5());
 | 
			
		||||
        spkstr = NETSCAPE_SPKI_b64_encode(spki);
 | 
			
		||||
 | 
			
		||||
		if (outfile) out = BIO_new_file(outfile, "w");
 | 
			
		||||
		else {
 | 
			
		||||
			out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
        if (outfile)
 | 
			
		||||
            out = BIO_new_file(outfile, "w");
 | 
			
		||||
        else {
 | 
			
		||||
            out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
			{
 | 
			
		||||
			    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
			    out = BIO_push(tmpbio, out);
 | 
			
		||||
			}
 | 
			
		||||
            {
 | 
			
		||||
                BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
                out = BIO_push(tmpbio, out);
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if(!out) {
 | 
			
		||||
			BIO_printf(bio_err, "Error opening output file\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
		BIO_printf(out, "SPKAC=%s\n", spkstr);
 | 
			
		||||
		OPENSSL_free(spkstr);
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
        if (!out) {
 | 
			
		||||
            BIO_printf(bio_err, "Error opening output file\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        BIO_printf(out, "SPKAC=%s\n", spkstr);
 | 
			
		||||
        OPENSSL_free(spkstr);
 | 
			
		||||
        ret = 0;
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
    if (infile)
 | 
			
		||||
        in = BIO_new_file(infile, "r");
 | 
			
		||||
    else
 | 
			
		||||
        in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
	if (infile) in = BIO_new_file(infile, "r");
 | 
			
		||||
	else in = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
			
		||||
    if (!in) {
 | 
			
		||||
        BIO_printf(bio_err, "Error opening input file\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(!in) {
 | 
			
		||||
		BIO_printf(bio_err, "Error opening input file\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    conf = NCONF_new(NULL);
 | 
			
		||||
    i = NCONF_load_bio(conf, in, NULL);
 | 
			
		||||
 | 
			
		||||
	conf = NCONF_new(NULL);
 | 
			
		||||
	i = NCONF_load_bio(conf, in, NULL);
 | 
			
		||||
    if (!i) {
 | 
			
		||||
        BIO_printf(bio_err, "Error parsing config file\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(!i) {
 | 
			
		||||
		BIO_printf(bio_err, "Error parsing config file\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    spkstr = NCONF_get_string(conf, spksect, spkac);
 | 
			
		||||
 | 
			
		||||
	spkstr = NCONF_get_string(conf, spksect, spkac);
 | 
			
		||||
		
 | 
			
		||||
	if(!spkstr) {
 | 
			
		||||
		BIO_printf(bio_err, "Can't find SPKAC called \"%s\"\n", spkac);
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    if (!spkstr) {
 | 
			
		||||
        BIO_printf(bio_err, "Can't find SPKAC called \"%s\"\n", spkac);
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	spki = NETSCAPE_SPKI_b64_decode(spkstr, -1);
 | 
			
		||||
	
 | 
			
		||||
	if(!spki) {
 | 
			
		||||
		BIO_printf(bio_err, "Error loading SPKAC\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    spki = NETSCAPE_SPKI_b64_decode(spkstr, -1);
 | 
			
		||||
 | 
			
		||||
	if (outfile) out = BIO_new_file(outfile, "w");
 | 
			
		||||
	else {
 | 
			
		||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
    if (!spki) {
 | 
			
		||||
        BIO_printf(bio_err, "Error loading SPKAC\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (outfile)
 | 
			
		||||
        out = BIO_new_file(outfile, "w");
 | 
			
		||||
    else {
 | 
			
		||||
        out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
		{
 | 
			
		||||
		    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
		    out = BIO_push(tmpbio, out);
 | 
			
		||||
		}
 | 
			
		||||
        {
 | 
			
		||||
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
			
		||||
            out = BIO_push(tmpbio, out);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(!out) {
 | 
			
		||||
		BIO_printf(bio_err, "Error opening output file\n");
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
	}
 | 
			
		||||
    if (!out) {
 | 
			
		||||
        BIO_printf(bio_err, "Error opening output file\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(!noout) NETSCAPE_SPKI_print(out, spki);
 | 
			
		||||
	pkey = NETSCAPE_SPKI_get_pubkey(spki);
 | 
			
		||||
	if(verify) {
 | 
			
		||||
		i = NETSCAPE_SPKI_verify(spki, pkey);
 | 
			
		||||
		if (i > 0) BIO_printf(bio_err, "Signature OK\n");
 | 
			
		||||
		else {
 | 
			
		||||
			BIO_printf(bio_err, "Signature Failure\n");
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if(pubkey) PEM_write_bio_PUBKEY(out, pkey);
 | 
			
		||||
    if (!noout)
 | 
			
		||||
        NETSCAPE_SPKI_print(out, spki);
 | 
			
		||||
    pkey = NETSCAPE_SPKI_get_pubkey(spki);
 | 
			
		||||
    if (verify) {
 | 
			
		||||
        i = NETSCAPE_SPKI_verify(spki, pkey);
 | 
			
		||||
        if (i > 0)
 | 
			
		||||
            BIO_printf(bio_err, "Signature OK\n");
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "Signature Failure\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (pubkey)
 | 
			
		||||
        PEM_write_bio_PUBKEY(out, pkey);
 | 
			
		||||
 | 
			
		||||
	ret = 0;
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
end:
 | 
			
		||||
	NCONF_free(conf);
 | 
			
		||||
	NETSCAPE_SPKI_free(spki);
 | 
			
		||||
	BIO_free(in);
 | 
			
		||||
	BIO_free_all(out);
 | 
			
		||||
	EVP_PKEY_free(pkey);
 | 
			
		||||
	if(passin) OPENSSL_free(passin);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
 end:
 | 
			
		||||
    NCONF_free(conf);
 | 
			
		||||
    NETSCAPE_SPKI_free(spki);
 | 
			
		||||
    BIO_free(in);
 | 
			
		||||
    BIO_free_all(out);
 | 
			
		||||
    EVP_PKEY_free(pkey);
 | 
			
		||||
    if (passin)
 | 
			
		||||
        OPENSSL_free(passin);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1215
									
								
								apps/srp.c
									
									
									
									
									
								
							
							
						
						
									
										1215
									
								
								apps/srp.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										420
									
								
								apps/testdsa.h
									
									
									
									
									
								
							
							
						
						
									
										420
									
								
								apps/testdsa.h
									
									
									
									
									
								
							@@ -1,217 +1,233 @@
 | 
			
		||||
/* NOCW */
 | 
			
		||||
/* used by apps/speed.c */
 | 
			
		||||
DSA *get_dsa512(void );
 | 
			
		||||
DSA *get_dsa1024(void );
 | 
			
		||||
DSA *get_dsa2048(void );
 | 
			
		||||
DSA *get_dsa512(void);
 | 
			
		||||
DSA *get_dsa1024(void);
 | 
			
		||||
DSA *get_dsa2048(void);
 | 
			
		||||
static unsigned char dsa512_priv[] = {
 | 
			
		||||
	0x65,0xe5,0xc7,0x38,0x60,0x24,0xb5,0x89,0xd4,0x9c,0xeb,0x4c,
 | 
			
		||||
	0x9c,0x1d,0x7a,0x22,0xbd,0xd1,0xc2,0xd2,
 | 
			
		||||
	};
 | 
			
		||||
    0x65, 0xe5, 0xc7, 0x38, 0x60, 0x24, 0xb5, 0x89, 0xd4, 0x9c, 0xeb, 0x4c,
 | 
			
		||||
    0x9c, 0x1d, 0x7a, 0x22, 0xbd, 0xd1, 0xc2, 0xd2,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa512_pub[] = {
 | 
			
		||||
	0x00,0x95,0xa7,0x0d,0xec,0x93,0x68,0xba,0x5f,0xf7,0x5f,0x07,
 | 
			
		||||
	0xf2,0x3b,0xad,0x6b,0x01,0xdc,0xbe,0xec,0xde,0x04,0x7a,0x3a,
 | 
			
		||||
	0x27,0xb3,0xec,0x49,0xfd,0x08,0x43,0x3d,0x7e,0xa8,0x2c,0x5e,
 | 
			
		||||
	0x7b,0xbb,0xfc,0xf4,0x6e,0xeb,0x6c,0xb0,0x6e,0xf8,0x02,0x12,
 | 
			
		||||
	0x8c,0x38,0x5d,0x83,0x56,0x7d,0xee,0x53,0x05,0x3e,0x24,0x84,
 | 
			
		||||
	0xbe,0xba,0x0a,0x6b,0xc8,
 | 
			
		||||
	};
 | 
			
		||||
static unsigned char dsa512_p[]={
 | 
			
		||||
	0x9D,0x1B,0x69,0x8E,0x26,0xDB,0xF2,0x2B,0x11,0x70,0x19,0x86,
 | 
			
		||||
	0xF6,0x19,0xC8,0xF8,0x19,0xF2,0x18,0x53,0x94,0x46,0x06,0xD0,
 | 
			
		||||
	0x62,0x50,0x33,0x4B,0x02,0x3C,0x52,0x30,0x03,0x8B,0x3B,0xF9,
 | 
			
		||||
	0x5F,0xD1,0x24,0x06,0x4F,0x7B,0x4C,0xBA,0xAA,0x40,0x9B,0xFD,
 | 
			
		||||
	0x96,0xE4,0x37,0x33,0xBB,0x2D,0x5A,0xD7,0x5A,0x11,0x40,0x66,
 | 
			
		||||
	0xA2,0x76,0x7D,0x31,
 | 
			
		||||
	};
 | 
			
		||||
static unsigned char dsa512_q[]={
 | 
			
		||||
	0xFB,0x53,0xEF,0x50,0xB4,0x40,0x92,0x31,0x56,0x86,0x53,0x7A,
 | 
			
		||||
	0xE8,0x8B,0x22,0x9A,0x49,0xFB,0x71,0x8F,
 | 
			
		||||
	};
 | 
			
		||||
static unsigned char dsa512_g[]={
 | 
			
		||||
	0x83,0x3E,0x88,0xE5,0xC5,0x89,0x73,0xCE,0x3B,0x6C,0x01,0x49,
 | 
			
		||||
	0xBF,0xB3,0xC7,0x9F,0x0A,0xEA,0x44,0x91,0xE5,0x30,0xAA,0xD9,
 | 
			
		||||
	0xBE,0x5B,0x5F,0xB7,0x10,0xD7,0x89,0xB7,0x8E,0x74,0xFB,0xCF,
 | 
			
		||||
	0x29,0x1E,0xEB,0xA8,0x2C,0x54,0x51,0xB8,0x10,0xDE,0xA0,0xCE,
 | 
			
		||||
	0x2F,0xCC,0x24,0x6B,0x90,0x77,0xDE,0xA2,0x68,0xA6,0x52,0x12,
 | 
			
		||||
	0xA2,0x03,0x9D,0x20,
 | 
			
		||||
	};
 | 
			
		||||
    0x00, 0x95, 0xa7, 0x0d, 0xec, 0x93, 0x68, 0xba, 0x5f, 0xf7, 0x5f, 0x07,
 | 
			
		||||
    0xf2, 0x3b, 0xad, 0x6b, 0x01, 0xdc, 0xbe, 0xec, 0xde, 0x04, 0x7a, 0x3a,
 | 
			
		||||
    0x27, 0xb3, 0xec, 0x49, 0xfd, 0x08, 0x43, 0x3d, 0x7e, 0xa8, 0x2c, 0x5e,
 | 
			
		||||
    0x7b, 0xbb, 0xfc, 0xf4, 0x6e, 0xeb, 0x6c, 0xb0, 0x6e, 0xf8, 0x02, 0x12,
 | 
			
		||||
    0x8c, 0x38, 0x5d, 0x83, 0x56, 0x7d, 0xee, 0x53, 0x05, 0x3e, 0x24, 0x84,
 | 
			
		||||
    0xbe, 0xba, 0x0a, 0x6b, 0xc8,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa512_p[] = {
 | 
			
		||||
    0x9D, 0x1B, 0x69, 0x8E, 0x26, 0xDB, 0xF2, 0x2B, 0x11, 0x70, 0x19, 0x86,
 | 
			
		||||
    0xF6, 0x19, 0xC8, 0xF8, 0x19, 0xF2, 0x18, 0x53, 0x94, 0x46, 0x06, 0xD0,
 | 
			
		||||
    0x62, 0x50, 0x33, 0x4B, 0x02, 0x3C, 0x52, 0x30, 0x03, 0x8B, 0x3B, 0xF9,
 | 
			
		||||
    0x5F, 0xD1, 0x24, 0x06, 0x4F, 0x7B, 0x4C, 0xBA, 0xAA, 0x40, 0x9B, 0xFD,
 | 
			
		||||
    0x96, 0xE4, 0x37, 0x33, 0xBB, 0x2D, 0x5A, 0xD7, 0x5A, 0x11, 0x40, 0x66,
 | 
			
		||||
    0xA2, 0x76, 0x7D, 0x31,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa512_q[] = {
 | 
			
		||||
    0xFB, 0x53, 0xEF, 0x50, 0xB4, 0x40, 0x92, 0x31, 0x56, 0x86, 0x53, 0x7A,
 | 
			
		||||
    0xE8, 0x8B, 0x22, 0x9A, 0x49, 0xFB, 0x71, 0x8F,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa512_g[] = {
 | 
			
		||||
    0x83, 0x3E, 0x88, 0xE5, 0xC5, 0x89, 0x73, 0xCE, 0x3B, 0x6C, 0x01, 0x49,
 | 
			
		||||
    0xBF, 0xB3, 0xC7, 0x9F, 0x0A, 0xEA, 0x44, 0x91, 0xE5, 0x30, 0xAA, 0xD9,
 | 
			
		||||
    0xBE, 0x5B, 0x5F, 0xB7, 0x10, 0xD7, 0x89, 0xB7, 0x8E, 0x74, 0xFB, 0xCF,
 | 
			
		||||
    0x29, 0x1E, 0xEB, 0xA8, 0x2C, 0x54, 0x51, 0xB8, 0x10, 0xDE, 0xA0, 0xCE,
 | 
			
		||||
    0x2F, 0xCC, 0x24, 0x6B, 0x90, 0x77, 0xDE, 0xA2, 0x68, 0xA6, 0x52, 0x12,
 | 
			
		||||
    0xA2, 0x03, 0x9D, 0x20,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
DSA *get_dsa512()
 | 
			
		||||
	{
 | 
			
		||||
	DSA *dsa;
 | 
			
		||||
{
 | 
			
		||||
    DSA *dsa;
 | 
			
		||||
 | 
			
		||||
	if ((dsa=DSA_new()) == NULL) return(NULL);
 | 
			
		||||
	dsa->priv_key=BN_bin2bn(dsa512_priv,sizeof(dsa512_priv),NULL);
 | 
			
		||||
	dsa->pub_key=BN_bin2bn(dsa512_pub,sizeof(dsa512_pub),NULL);
 | 
			
		||||
	dsa->p=BN_bin2bn(dsa512_p,sizeof(dsa512_p),NULL);
 | 
			
		||||
	dsa->q=BN_bin2bn(dsa512_q,sizeof(dsa512_q),NULL);
 | 
			
		||||
	dsa->g=BN_bin2bn(dsa512_g,sizeof(dsa512_g),NULL);
 | 
			
		||||
	if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL) ||
 | 
			
		||||
				(dsa->q == NULL) || (dsa->g == NULL))
 | 
			
		||||
		return(NULL);
 | 
			
		||||
	return(dsa);
 | 
			
		||||
	}
 | 
			
		||||
    if ((dsa = DSA_new()) == NULL)
 | 
			
		||||
        return (NULL);
 | 
			
		||||
    dsa->priv_key = BN_bin2bn(dsa512_priv, sizeof(dsa512_priv), NULL);
 | 
			
		||||
    dsa->pub_key = BN_bin2bn(dsa512_pub, sizeof(dsa512_pub), NULL);
 | 
			
		||||
    dsa->p = BN_bin2bn(dsa512_p, sizeof(dsa512_p), NULL);
 | 
			
		||||
    dsa->q = BN_bin2bn(dsa512_q, sizeof(dsa512_q), NULL);
 | 
			
		||||
    dsa->g = BN_bin2bn(dsa512_g, sizeof(dsa512_g), NULL);
 | 
			
		||||
    if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL)
 | 
			
		||||
        || (dsa->q == NULL) || (dsa->g == NULL))
 | 
			
		||||
        return (NULL);
 | 
			
		||||
    return (dsa);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa1024_priv[]={
 | 
			
		||||
	0x7d,0x21,0xda,0xbb,0x62,0x15,0x47,0x36,0x07,0x67,0x12,0xe8,
 | 
			
		||||
	0x8c,0xaa,0x1c,0xcd,0x38,0x12,0x61,0x18,
 | 
			
		||||
	};
 | 
			
		||||
static unsigned char dsa1024_pub[]={
 | 
			
		||||
	0x3c,0x4e,0x9c,0x2a,0x7f,0x16,0xc1,0x25,0xeb,0xac,0x78,0x63,
 | 
			
		||||
	0x90,0x14,0x8c,0x8b,0xf4,0x68,0x43,0x3c,0x2d,0xee,0x65,0x50,
 | 
			
		||||
	0x7d,0x9c,0x8f,0x8c,0x8a,0x51,0xd6,0x11,0x2b,0x99,0xaf,0x1e,
 | 
			
		||||
	0x90,0x97,0xb5,0xd3,0xa6,0x20,0x25,0xd6,0xfe,0x43,0x02,0xd5,
 | 
			
		||||
	0x91,0x7d,0xa7,0x8c,0xdb,0xc9,0x85,0xa3,0x36,0x48,0xf7,0x68,
 | 
			
		||||
	0xaa,0x60,0xb1,0xf7,0x05,0x68,0x3a,0xa3,0x3f,0xd3,0x19,0x82,
 | 
			
		||||
	0xd8,0x82,0x7a,0x77,0xfb,0xef,0xf4,0x15,0x0a,0xeb,0x06,0x04,
 | 
			
		||||
	0x7f,0x53,0x07,0x0c,0xbc,0xcb,0x2d,0x83,0xdb,0x3e,0xd1,0x28,
 | 
			
		||||
	0xa5,0xa1,0x31,0xe0,0x67,0xfa,0x50,0xde,0x9b,0x07,0x83,0x7e,
 | 
			
		||||
	0x2c,0x0b,0xc3,0x13,0x50,0x61,0xe5,0xad,0xbd,0x36,0xb8,0x97,
 | 
			
		||||
	0x4e,0x40,0x7d,0xe8,0x83,0x0d,0xbc,0x4b
 | 
			
		||||
	};
 | 
			
		||||
static unsigned char dsa1024_p[]={
 | 
			
		||||
	0xA7,0x3F,0x6E,0x85,0xBF,0x41,0x6A,0x29,0x7D,0xF0,0x9F,0x47,
 | 
			
		||||
	0x19,0x30,0x90,0x9A,0x09,0x1D,0xDA,0x6A,0x33,0x1E,0xC5,0x3D,
 | 
			
		||||
	0x86,0x96,0xB3,0x15,0xE0,0x53,0x2E,0x8F,0xE0,0x59,0x82,0x73,
 | 
			
		||||
	0x90,0x3E,0x75,0x31,0x99,0x47,0x7A,0x52,0xFB,0x85,0xE4,0xD9,
 | 
			
		||||
	0xA6,0x7B,0x38,0x9B,0x68,0x8A,0x84,0x9B,0x87,0xC6,0x1E,0xB5,
 | 
			
		||||
	0x7E,0x86,0x4B,0x53,0x5B,0x59,0xCF,0x71,0x65,0x19,0x88,0x6E,
 | 
			
		||||
	0xCE,0x66,0xAE,0x6B,0x88,0x36,0xFB,0xEC,0x28,0xDC,0xC2,0xD7,
 | 
			
		||||
	0xA5,0xBB,0xE5,0x2C,0x39,0x26,0x4B,0xDA,0x9A,0x70,0x18,0x95,
 | 
			
		||||
	0x37,0x95,0x10,0x56,0x23,0xF6,0x15,0xED,0xBA,0x04,0x5E,0xDE,
 | 
			
		||||
	0x39,0x4F,0xFD,0xB7,0x43,0x1F,0xB5,0xA4,0x65,0x6F,0xCD,0x80,
 | 
			
		||||
	0x11,0xE4,0x70,0x95,0x5B,0x50,0xCD,0x49,
 | 
			
		||||
	};
 | 
			
		||||
static unsigned char dsa1024_q[]={
 | 
			
		||||
	0xF7,0x07,0x31,0xED,0xFA,0x6C,0x06,0x03,0xD5,0x85,0x8A,0x1C,
 | 
			
		||||
	0xAC,0x9C,0x65,0xE7,0x50,0x66,0x65,0x6F,
 | 
			
		||||
	};
 | 
			
		||||
static unsigned char dsa1024_g[]={
 | 
			
		||||
	0x4D,0xDF,0x4C,0x03,0xA6,0x91,0x8A,0xF5,0x19,0x6F,0x50,0x46,
 | 
			
		||||
	0x25,0x99,0xE5,0x68,0x6F,0x30,0xE3,0x69,0xE1,0xE5,0xB3,0x5D,
 | 
			
		||||
	0x98,0xBB,0x28,0x86,0x48,0xFC,0xDE,0x99,0x04,0x3F,0x5F,0x88,
 | 
			
		||||
	0x0C,0x9C,0x73,0x24,0x0D,0x20,0x5D,0xB9,0x2A,0x9A,0x3F,0x18,
 | 
			
		||||
	0x96,0x27,0xE4,0x62,0x87,0xC1,0x7B,0x74,0x62,0x53,0xFC,0x61,
 | 
			
		||||
	0x27,0xA8,0x7A,0x91,0x09,0x9D,0xB6,0xF1,0x4D,0x9C,0x54,0x0F,
 | 
			
		||||
	0x58,0x06,0xEE,0x49,0x74,0x07,0xCE,0x55,0x7E,0x23,0xCE,0x16,
 | 
			
		||||
	0xF6,0xCA,0xDC,0x5A,0x61,0x01,0x7E,0xC9,0x71,0xB5,0x4D,0xF6,
 | 
			
		||||
	0xDC,0x34,0x29,0x87,0x68,0xF6,0x5E,0x20,0x93,0xB3,0xDB,0xF5,
 | 
			
		||||
	0xE4,0x09,0x6C,0x41,0x17,0x95,0x92,0xEB,0x01,0xB5,0x73,0xA5,
 | 
			
		||||
	0x6A,0x7E,0xD8,0x32,0xED,0x0E,0x02,0xB8,
 | 
			
		||||
	};
 | 
			
		||||
static unsigned char dsa1024_priv[] = {
 | 
			
		||||
    0x7d, 0x21, 0xda, 0xbb, 0x62, 0x15, 0x47, 0x36, 0x07, 0x67, 0x12, 0xe8,
 | 
			
		||||
    0x8c, 0xaa, 0x1c, 0xcd, 0x38, 0x12, 0x61, 0x18,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa1024_pub[] = {
 | 
			
		||||
    0x3c, 0x4e, 0x9c, 0x2a, 0x7f, 0x16, 0xc1, 0x25, 0xeb, 0xac, 0x78, 0x63,
 | 
			
		||||
    0x90, 0x14, 0x8c, 0x8b, 0xf4, 0x68, 0x43, 0x3c, 0x2d, 0xee, 0x65, 0x50,
 | 
			
		||||
    0x7d, 0x9c, 0x8f, 0x8c, 0x8a, 0x51, 0xd6, 0x11, 0x2b, 0x99, 0xaf, 0x1e,
 | 
			
		||||
    0x90, 0x97, 0xb5, 0xd3, 0xa6, 0x20, 0x25, 0xd6, 0xfe, 0x43, 0x02, 0xd5,
 | 
			
		||||
    0x91, 0x7d, 0xa7, 0x8c, 0xdb, 0xc9, 0x85, 0xa3, 0x36, 0x48, 0xf7, 0x68,
 | 
			
		||||
    0xaa, 0x60, 0xb1, 0xf7, 0x05, 0x68, 0x3a, 0xa3, 0x3f, 0xd3, 0x19, 0x82,
 | 
			
		||||
    0xd8, 0x82, 0x7a, 0x77, 0xfb, 0xef, 0xf4, 0x15, 0x0a, 0xeb, 0x06, 0x04,
 | 
			
		||||
    0x7f, 0x53, 0x07, 0x0c, 0xbc, 0xcb, 0x2d, 0x83, 0xdb, 0x3e, 0xd1, 0x28,
 | 
			
		||||
    0xa5, 0xa1, 0x31, 0xe0, 0x67, 0xfa, 0x50, 0xde, 0x9b, 0x07, 0x83, 0x7e,
 | 
			
		||||
    0x2c, 0x0b, 0xc3, 0x13, 0x50, 0x61, 0xe5, 0xad, 0xbd, 0x36, 0xb8, 0x97,
 | 
			
		||||
    0x4e, 0x40, 0x7d, 0xe8, 0x83, 0x0d, 0xbc, 0x4b
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa1024_p[] = {
 | 
			
		||||
    0xA7, 0x3F, 0x6E, 0x85, 0xBF, 0x41, 0x6A, 0x29, 0x7D, 0xF0, 0x9F, 0x47,
 | 
			
		||||
    0x19, 0x30, 0x90, 0x9A, 0x09, 0x1D, 0xDA, 0x6A, 0x33, 0x1E, 0xC5, 0x3D,
 | 
			
		||||
    0x86, 0x96, 0xB3, 0x15, 0xE0, 0x53, 0x2E, 0x8F, 0xE0, 0x59, 0x82, 0x73,
 | 
			
		||||
    0x90, 0x3E, 0x75, 0x31, 0x99, 0x47, 0x7A, 0x52, 0xFB, 0x85, 0xE4, 0xD9,
 | 
			
		||||
    0xA6, 0x7B, 0x38, 0x9B, 0x68, 0x8A, 0x84, 0x9B, 0x87, 0xC6, 0x1E, 0xB5,
 | 
			
		||||
    0x7E, 0x86, 0x4B, 0x53, 0x5B, 0x59, 0xCF, 0x71, 0x65, 0x19, 0x88, 0x6E,
 | 
			
		||||
    0xCE, 0x66, 0xAE, 0x6B, 0x88, 0x36, 0xFB, 0xEC, 0x28, 0xDC, 0xC2, 0xD7,
 | 
			
		||||
    0xA5, 0xBB, 0xE5, 0x2C, 0x39, 0x26, 0x4B, 0xDA, 0x9A, 0x70, 0x18, 0x95,
 | 
			
		||||
    0x37, 0x95, 0x10, 0x56, 0x23, 0xF6, 0x15, 0xED, 0xBA, 0x04, 0x5E, 0xDE,
 | 
			
		||||
    0x39, 0x4F, 0xFD, 0xB7, 0x43, 0x1F, 0xB5, 0xA4, 0x65, 0x6F, 0xCD, 0x80,
 | 
			
		||||
    0x11, 0xE4, 0x70, 0x95, 0x5B, 0x50, 0xCD, 0x49,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa1024_q[] = {
 | 
			
		||||
    0xF7, 0x07, 0x31, 0xED, 0xFA, 0x6C, 0x06, 0x03, 0xD5, 0x85, 0x8A, 0x1C,
 | 
			
		||||
    0xAC, 0x9C, 0x65, 0xE7, 0x50, 0x66, 0x65, 0x6F,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa1024_g[] = {
 | 
			
		||||
    0x4D, 0xDF, 0x4C, 0x03, 0xA6, 0x91, 0x8A, 0xF5, 0x19, 0x6F, 0x50, 0x46,
 | 
			
		||||
    0x25, 0x99, 0xE5, 0x68, 0x6F, 0x30, 0xE3, 0x69, 0xE1, 0xE5, 0xB3, 0x5D,
 | 
			
		||||
    0x98, 0xBB, 0x28, 0x86, 0x48, 0xFC, 0xDE, 0x99, 0x04, 0x3F, 0x5F, 0x88,
 | 
			
		||||
    0x0C, 0x9C, 0x73, 0x24, 0x0D, 0x20, 0x5D, 0xB9, 0x2A, 0x9A, 0x3F, 0x18,
 | 
			
		||||
    0x96, 0x27, 0xE4, 0x62, 0x87, 0xC1, 0x7B, 0x74, 0x62, 0x53, 0xFC, 0x61,
 | 
			
		||||
    0x27, 0xA8, 0x7A, 0x91, 0x09, 0x9D, 0xB6, 0xF1, 0x4D, 0x9C, 0x54, 0x0F,
 | 
			
		||||
    0x58, 0x06, 0xEE, 0x49, 0x74, 0x07, 0xCE, 0x55, 0x7E, 0x23, 0xCE, 0x16,
 | 
			
		||||
    0xF6, 0xCA, 0xDC, 0x5A, 0x61, 0x01, 0x7E, 0xC9, 0x71, 0xB5, 0x4D, 0xF6,
 | 
			
		||||
    0xDC, 0x34, 0x29, 0x87, 0x68, 0xF6, 0x5E, 0x20, 0x93, 0xB3, 0xDB, 0xF5,
 | 
			
		||||
    0xE4, 0x09, 0x6C, 0x41, 0x17, 0x95, 0x92, 0xEB, 0x01, 0xB5, 0x73, 0xA5,
 | 
			
		||||
    0x6A, 0x7E, 0xD8, 0x32, 0xED, 0x0E, 0x02, 0xB8,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
DSA *get_dsa1024()
 | 
			
		||||
	{
 | 
			
		||||
	DSA *dsa;
 | 
			
		||||
{
 | 
			
		||||
    DSA *dsa;
 | 
			
		||||
 | 
			
		||||
	if ((dsa=DSA_new()) == NULL) return(NULL);
 | 
			
		||||
	dsa->priv_key=BN_bin2bn(dsa1024_priv,sizeof(dsa1024_priv),NULL);
 | 
			
		||||
	dsa->pub_key=BN_bin2bn(dsa1024_pub,sizeof(dsa1024_pub),NULL);
 | 
			
		||||
	dsa->p=BN_bin2bn(dsa1024_p,sizeof(dsa1024_p),NULL);
 | 
			
		||||
	dsa->q=BN_bin2bn(dsa1024_q,sizeof(dsa1024_q),NULL);
 | 
			
		||||
	dsa->g=BN_bin2bn(dsa1024_g,sizeof(dsa1024_g),NULL);
 | 
			
		||||
	if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL) ||
 | 
			
		||||
				(dsa->q == NULL) || (dsa->g == NULL))
 | 
			
		||||
		return(NULL);
 | 
			
		||||
	return(dsa);
 | 
			
		||||
	}
 | 
			
		||||
    if ((dsa = DSA_new()) == NULL)
 | 
			
		||||
        return (NULL);
 | 
			
		||||
    dsa->priv_key = BN_bin2bn(dsa1024_priv, sizeof(dsa1024_priv), NULL);
 | 
			
		||||
    dsa->pub_key = BN_bin2bn(dsa1024_pub, sizeof(dsa1024_pub), NULL);
 | 
			
		||||
    dsa->p = BN_bin2bn(dsa1024_p, sizeof(dsa1024_p), NULL);
 | 
			
		||||
    dsa->q = BN_bin2bn(dsa1024_q, sizeof(dsa1024_q), NULL);
 | 
			
		||||
    dsa->g = BN_bin2bn(dsa1024_g, sizeof(dsa1024_g), NULL);
 | 
			
		||||
    if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL)
 | 
			
		||||
        || (dsa->q == NULL) || (dsa->g == NULL))
 | 
			
		||||
        return (NULL);
 | 
			
		||||
    return (dsa);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa2048_priv[] = {
 | 
			
		||||
    0x32, 0x67, 0x92, 0xf6, 0xc4, 0xe2, 0xe2, 0xe8, 0xa0, 0x8b, 0x6b, 0x45,
 | 
			
		||||
    0x0c, 0x8a, 0x76, 0xb0, 0xee, 0xcf, 0x91, 0xa7,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa2048_pub[] = {
 | 
			
		||||
    0x17, 0x8f, 0xa8, 0x11, 0x84, 0x92, 0xec, 0x83, 0x47, 0xc7, 0x6a, 0xb0,
 | 
			
		||||
    0x92, 0xaf, 0x5a, 0x20, 0x37, 0xa3, 0x64, 0x79, 0xd2, 0xd0, 0x3d, 0xcd,
 | 
			
		||||
    0xe0, 0x61, 0x88, 0x88, 0x21, 0xcc, 0x74, 0x5d, 0xce, 0x4c, 0x51, 0x47,
 | 
			
		||||
    0xf0, 0xc5, 0x5c, 0x4c, 0x82, 0x7a, 0xaf, 0x72, 0xad, 0xb9, 0xe0, 0x53,
 | 
			
		||||
    0xf2, 0x78, 0xb7, 0xf0, 0xb5, 0x48, 0x7f, 0x8a, 0x3a, 0x18, 0xd1, 0x9f,
 | 
			
		||||
    0x8b, 0x7d, 0xa5, 0x47, 0xb7, 0x95, 0xab, 0x98, 0xf8, 0x7b, 0x74, 0x50,
 | 
			
		||||
    0x56, 0x8e, 0x57, 0xf0, 0xee, 0xf5, 0xb7, 0xba, 0xab, 0x85, 0x86, 0xf9,
 | 
			
		||||
    0x2b, 0xef, 0x41, 0x56, 0xa0, 0xa4, 0x9f, 0xb7, 0x38, 0x00, 0x46, 0x0a,
 | 
			
		||||
    0xa6, 0xf1, 0xfc, 0x1f, 0xd8, 0x4e, 0x85, 0x44, 0x92, 0x43, 0x21, 0x5d,
 | 
			
		||||
    0x6e, 0xcc, 0xc2, 0xcb, 0x26, 0x31, 0x0d, 0x21, 0xc4, 0xbd, 0x8d, 0x24,
 | 
			
		||||
    0xbc, 0xd9, 0x18, 0x19, 0xd7, 0xdc, 0xf1, 0xe7, 0x93, 0x50, 0x48, 0x03,
 | 
			
		||||
    0x2c, 0xae, 0x2e, 0xe7, 0x49, 0x88, 0x5f, 0x93, 0x57, 0x27, 0x99, 0x36,
 | 
			
		||||
    0xb4, 0x20, 0xab, 0xfc, 0xa7, 0x2b, 0xf2, 0xd9, 0x98, 0xd7, 0xd4, 0x34,
 | 
			
		||||
    0x9d, 0x96, 0x50, 0x58, 0x9a, 0xea, 0x54, 0xf3, 0xee, 0xf5, 0x63, 0x14,
 | 
			
		||||
    0xee, 0x85, 0x83, 0x74, 0x76, 0xe1, 0x52, 0x95, 0xc3, 0xf7, 0xeb, 0x04,
 | 
			
		||||
    0x04, 0x7b, 0xa7, 0x28, 0x1b, 0xcc, 0xea, 0x4a, 0x4e, 0x84, 0xda, 0xd8,
 | 
			
		||||
    0x9c, 0x79, 0xd8, 0x9b, 0x66, 0x89, 0x2f, 0xcf, 0xac, 0xd7, 0x79, 0xf9,
 | 
			
		||||
    0xa9, 0xd8, 0x45, 0x13, 0x78, 0xb9, 0x00, 0x14, 0xc9, 0x7e, 0x22, 0x51,
 | 
			
		||||
    0x86, 0x67, 0xb0, 0x9f, 0x26, 0x11, 0x23, 0xc8, 0x38, 0xd7, 0x70, 0x1d,
 | 
			
		||||
    0x15, 0x8e, 0x4d, 0x4f, 0x95, 0x97, 0x40, 0xa1, 0xc2, 0x7e, 0x01, 0x18,
 | 
			
		||||
    0x72, 0xf4, 0x10, 0xe6, 0x8d, 0x52, 0x16, 0x7f, 0xf2, 0xc9, 0xf8, 0x33,
 | 
			
		||||
    0x8b, 0x33, 0xb7, 0xce,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa2048_p[] = {
 | 
			
		||||
    0xA0, 0x25, 0xFA, 0xAD, 0xF4, 0x8E, 0xB9, 0xE5, 0x99, 0xF3, 0x5D, 0x6F,
 | 
			
		||||
    0x4F, 0x83, 0x34, 0xE2, 0x7E, 0xCF, 0x6F, 0xBF, 0x30, 0xAF, 0x6F, 0x81,
 | 
			
		||||
    0xEB, 0xF8, 0xC4, 0x13, 0xD9, 0xA0, 0x5D, 0x8B, 0x5C, 0x8E, 0xDC, 0xC2,
 | 
			
		||||
    0x1D, 0x0B, 0x41, 0x32, 0xB0, 0x1F, 0xFE, 0xEF, 0x0C, 0xC2, 0xA2, 0x7E,
 | 
			
		||||
    0x68, 0x5C, 0x28, 0x21, 0xE9, 0xF5, 0xB1, 0x58, 0x12, 0x63, 0x4C, 0x19,
 | 
			
		||||
    0x4E, 0xFF, 0x02, 0x4B, 0x92, 0xED, 0xD2, 0x07, 0x11, 0x4D, 0x8C, 0x58,
 | 
			
		||||
    0x16, 0x5C, 0x55, 0x8E, 0xAD, 0xA3, 0x67, 0x7D, 0xB9, 0x86, 0x6E, 0x0B,
 | 
			
		||||
    0xE6, 0x54, 0x6F, 0x40, 0xAE, 0x0E, 0x67, 0x4C, 0xF9, 0x12, 0x5B, 0x3C,
 | 
			
		||||
    0x08, 0x7A, 0xF7, 0xFC, 0x67, 0x86, 0x69, 0xE7, 0x0A, 0x94, 0x40, 0xBF,
 | 
			
		||||
    0x8B, 0x76, 0xFE, 0x26, 0xD1, 0xF2, 0xA1, 0x1A, 0x84, 0xA1, 0x43, 0x56,
 | 
			
		||||
    0x28, 0xBC, 0x9A, 0x5F, 0xD7, 0x3B, 0x69, 0x89, 0x8A, 0x36, 0x2C, 0x51,
 | 
			
		||||
    0xDF, 0x12, 0x77, 0x2F, 0x57, 0x7B, 0xA0, 0xAA, 0xDD, 0x7F, 0xA1, 0x62,
 | 
			
		||||
    0x3B, 0x40, 0x7B, 0x68, 0x1A, 0x8F, 0x0D, 0x38, 0xBB, 0x21, 0x5D, 0x18,
 | 
			
		||||
    0xFC, 0x0F, 0x46, 0xF7, 0xA3, 0xB0, 0x1D, 0x23, 0xC3, 0xD2, 0xC7, 0x72,
 | 
			
		||||
    0x51, 0x18, 0xDF, 0x46, 0x95, 0x79, 0xD9, 0xBD, 0xB5, 0x19, 0x02, 0x2C,
 | 
			
		||||
    0x87, 0xDC, 0xE7, 0x57, 0x82, 0x7E, 0xF1, 0x8B, 0x06, 0x3D, 0x00, 0xA5,
 | 
			
		||||
    0x7B, 0x6B, 0x26, 0x27, 0x91, 0x0F, 0x6A, 0x77, 0xE4, 0xD5, 0x04, 0xE4,
 | 
			
		||||
    0x12, 0x2C, 0x42, 0xFF, 0xD2, 0x88, 0xBB, 0xD3, 0x92, 0xA0, 0xF9, 0xC8,
 | 
			
		||||
    0x51, 0x64, 0x14, 0x5C, 0xD8, 0xF9, 0x6C, 0x47, 0x82, 0xB4, 0x1C, 0x7F,
 | 
			
		||||
    0x09, 0xB8, 0xF0, 0x25, 0x83, 0x1D, 0x3F, 0x3F, 0x05, 0xB3, 0x21, 0x0A,
 | 
			
		||||
    0x5D, 0xA7, 0xD8, 0x54, 0xC3, 0x65, 0x7D, 0xC3, 0xB0, 0x1D, 0xBF, 0xAE,
 | 
			
		||||
    0xF8, 0x68, 0xCF, 0x9B,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa2048_q[] = {
 | 
			
		||||
    0x97, 0xE7, 0x33, 0x4D, 0xD3, 0x94, 0x3E, 0x0B, 0xDB, 0x62, 0x74, 0xC6,
 | 
			
		||||
    0xA1, 0x08, 0xDD, 0x19, 0xA3, 0x75, 0x17, 0x1B,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa2048_g[] = {
 | 
			
		||||
    0x2C, 0x78, 0x16, 0x59, 0x34, 0x63, 0xF4, 0xF3, 0x92, 0xFC, 0xB5, 0xA5,
 | 
			
		||||
    0x4F, 0x13, 0xDE, 0x2F, 0x1C, 0xA4, 0x3C, 0xAE, 0xAD, 0x38, 0x3F, 0x7E,
 | 
			
		||||
    0x90, 0xBF, 0x96, 0xA6, 0xAE, 0x25, 0x90, 0x72, 0xF5, 0x8E, 0x80, 0x0C,
 | 
			
		||||
    0x39, 0x1C, 0xD9, 0xEC, 0xBA, 0x90, 0x5B, 0x3A, 0xE8, 0x58, 0x6C, 0x9E,
 | 
			
		||||
    0x30, 0x42, 0x37, 0x02, 0x31, 0x82, 0xBC, 0x6A, 0xDF, 0x6A, 0x09, 0x29,
 | 
			
		||||
    0xE3, 0xC0, 0x46, 0xD1, 0xCB, 0x85, 0xEC, 0x0C, 0x30, 0x5E, 0xEA, 0xC8,
 | 
			
		||||
    0x39, 0x8E, 0x22, 0x9F, 0x22, 0x10, 0xD2, 0x34, 0x61, 0x68, 0x37, 0x3D,
 | 
			
		||||
    0x2E, 0x4A, 0x5B, 0x9A, 0xF5, 0xC1, 0x48, 0xC6, 0xF6, 0xDC, 0x63, 0x1A,
 | 
			
		||||
    0xD3, 0x96, 0x64, 0xBA, 0x34, 0xC9, 0xD1, 0xA0, 0xD1, 0xAE, 0x6C, 0x2F,
 | 
			
		||||
    0x48, 0x17, 0x93, 0x14, 0x43, 0xED, 0xF0, 0x21, 0x30, 0x19, 0xC3, 0x1B,
 | 
			
		||||
    0x5F, 0xDE, 0xA3, 0xF0, 0x70, 0x78, 0x18, 0xE1, 0xA8, 0xE4, 0xEE, 0x2E,
 | 
			
		||||
    0x00, 0xA5, 0xE4, 0xB3, 0x17, 0xC8, 0x0C, 0x7D, 0x6E, 0x42, 0xDC, 0xB7,
 | 
			
		||||
    0x46, 0x00, 0x36, 0x4D, 0xD4, 0x46, 0xAA, 0x3D, 0x3C, 0x46, 0x89, 0x40,
 | 
			
		||||
    0xBF, 0x1D, 0x84, 0x77, 0x0A, 0x75, 0xF3, 0x87, 0x1D, 0x08, 0x4C, 0xA6,
 | 
			
		||||
    0xD1, 0xA9, 0x1C, 0x1E, 0x12, 0x1E, 0xE1, 0xC7, 0x30, 0x28, 0x76, 0xA5,
 | 
			
		||||
    0x7F, 0x6C, 0x85, 0x96, 0x2B, 0x6F, 0xDB, 0x80, 0x66, 0x26, 0xAE, 0xF5,
 | 
			
		||||
    0x93, 0xC7, 0x8E, 0xAE, 0x9A, 0xED, 0xE4, 0xCA, 0x04, 0xEA, 0x3B, 0x72,
 | 
			
		||||
    0xEF, 0xDC, 0x87, 0xED, 0x0D, 0xA5, 0x4C, 0x4A, 0xDD, 0x71, 0x22, 0x64,
 | 
			
		||||
    0x59, 0x69, 0x4E, 0x8E, 0xBF, 0x43, 0xDC, 0xAB, 0x8E, 0x66, 0xBB, 0x01,
 | 
			
		||||
    0xB6, 0xF4, 0xE7, 0xFD, 0xD2, 0xAD, 0x9F, 0x36, 0xC1, 0xA0, 0x29, 0x99,
 | 
			
		||||
    0xD1, 0x96, 0x70, 0x59, 0x06, 0x78, 0x35, 0xBD, 0x65, 0x55, 0x52, 0x9E,
 | 
			
		||||
    0xF8, 0xB2, 0xE5, 0x38,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char dsa2048_priv[]={
 | 
			
		||||
	0x32,0x67,0x92,0xf6,0xc4,0xe2,0xe2,0xe8,0xa0,0x8b,0x6b,0x45,
 | 
			
		||||
	0x0c,0x8a,0x76,0xb0,0xee,0xcf,0x91,0xa7,
 | 
			
		||||
	};
 | 
			
		||||
static unsigned char dsa2048_pub[]={
 | 
			
		||||
	0x17,0x8f,0xa8,0x11,0x84,0x92,0xec,0x83,0x47,0xc7,0x6a,0xb0,
 | 
			
		||||
	0x92,0xaf,0x5a,0x20,0x37,0xa3,0x64,0x79,0xd2,0xd0,0x3d,0xcd,
 | 
			
		||||
	0xe0,0x61,0x88,0x88,0x21,0xcc,0x74,0x5d,0xce,0x4c,0x51,0x47,
 | 
			
		||||
	0xf0,0xc5,0x5c,0x4c,0x82,0x7a,0xaf,0x72,0xad,0xb9,0xe0,0x53,
 | 
			
		||||
	0xf2,0x78,0xb7,0xf0,0xb5,0x48,0x7f,0x8a,0x3a,0x18,0xd1,0x9f,
 | 
			
		||||
	0x8b,0x7d,0xa5,0x47,0xb7,0x95,0xab,0x98,0xf8,0x7b,0x74,0x50,
 | 
			
		||||
	0x56,0x8e,0x57,0xf0,0xee,0xf5,0xb7,0xba,0xab,0x85,0x86,0xf9,
 | 
			
		||||
	0x2b,0xef,0x41,0x56,0xa0,0xa4,0x9f,0xb7,0x38,0x00,0x46,0x0a,
 | 
			
		||||
	0xa6,0xf1,0xfc,0x1f,0xd8,0x4e,0x85,0x44,0x92,0x43,0x21,0x5d,
 | 
			
		||||
	0x6e,0xcc,0xc2,0xcb,0x26,0x31,0x0d,0x21,0xc4,0xbd,0x8d,0x24,
 | 
			
		||||
	0xbc,0xd9,0x18,0x19,0xd7,0xdc,0xf1,0xe7,0x93,0x50,0x48,0x03,
 | 
			
		||||
	0x2c,0xae,0x2e,0xe7,0x49,0x88,0x5f,0x93,0x57,0x27,0x99,0x36,
 | 
			
		||||
	0xb4,0x20,0xab,0xfc,0xa7,0x2b,0xf2,0xd9,0x98,0xd7,0xd4,0x34,
 | 
			
		||||
	0x9d,0x96,0x50,0x58,0x9a,0xea,0x54,0xf3,0xee,0xf5,0x63,0x14,
 | 
			
		||||
	0xee,0x85,0x83,0x74,0x76,0xe1,0x52,0x95,0xc3,0xf7,0xeb,0x04,
 | 
			
		||||
	0x04,0x7b,0xa7,0x28,0x1b,0xcc,0xea,0x4a,0x4e,0x84,0xda,0xd8,
 | 
			
		||||
	0x9c,0x79,0xd8,0x9b,0x66,0x89,0x2f,0xcf,0xac,0xd7,0x79,0xf9,
 | 
			
		||||
	0xa9,0xd8,0x45,0x13,0x78,0xb9,0x00,0x14,0xc9,0x7e,0x22,0x51,
 | 
			
		||||
	0x86,0x67,0xb0,0x9f,0x26,0x11,0x23,0xc8,0x38,0xd7,0x70,0x1d,
 | 
			
		||||
	0x15,0x8e,0x4d,0x4f,0x95,0x97,0x40,0xa1,0xc2,0x7e,0x01,0x18,
 | 
			
		||||
	0x72,0xf4,0x10,0xe6,0x8d,0x52,0x16,0x7f,0xf2,0xc9,0xf8,0x33,
 | 
			
		||||
	0x8b,0x33,0xb7,0xce,
 | 
			
		||||
	};
 | 
			
		||||
static unsigned char dsa2048_p[]={
 | 
			
		||||
	0xA0,0x25,0xFA,0xAD,0xF4,0x8E,0xB9,0xE5,0x99,0xF3,0x5D,0x6F,
 | 
			
		||||
	0x4F,0x83,0x34,0xE2,0x7E,0xCF,0x6F,0xBF,0x30,0xAF,0x6F,0x81,
 | 
			
		||||
	0xEB,0xF8,0xC4,0x13,0xD9,0xA0,0x5D,0x8B,0x5C,0x8E,0xDC,0xC2,
 | 
			
		||||
	0x1D,0x0B,0x41,0x32,0xB0,0x1F,0xFE,0xEF,0x0C,0xC2,0xA2,0x7E,
 | 
			
		||||
	0x68,0x5C,0x28,0x21,0xE9,0xF5,0xB1,0x58,0x12,0x63,0x4C,0x19,
 | 
			
		||||
	0x4E,0xFF,0x02,0x4B,0x92,0xED,0xD2,0x07,0x11,0x4D,0x8C,0x58,
 | 
			
		||||
	0x16,0x5C,0x55,0x8E,0xAD,0xA3,0x67,0x7D,0xB9,0x86,0x6E,0x0B,
 | 
			
		||||
	0xE6,0x54,0x6F,0x40,0xAE,0x0E,0x67,0x4C,0xF9,0x12,0x5B,0x3C,
 | 
			
		||||
	0x08,0x7A,0xF7,0xFC,0x67,0x86,0x69,0xE7,0x0A,0x94,0x40,0xBF,
 | 
			
		||||
	0x8B,0x76,0xFE,0x26,0xD1,0xF2,0xA1,0x1A,0x84,0xA1,0x43,0x56,
 | 
			
		||||
	0x28,0xBC,0x9A,0x5F,0xD7,0x3B,0x69,0x89,0x8A,0x36,0x2C,0x51,
 | 
			
		||||
	0xDF,0x12,0x77,0x2F,0x57,0x7B,0xA0,0xAA,0xDD,0x7F,0xA1,0x62,
 | 
			
		||||
	0x3B,0x40,0x7B,0x68,0x1A,0x8F,0x0D,0x38,0xBB,0x21,0x5D,0x18,
 | 
			
		||||
	0xFC,0x0F,0x46,0xF7,0xA3,0xB0,0x1D,0x23,0xC3,0xD2,0xC7,0x72,
 | 
			
		||||
	0x51,0x18,0xDF,0x46,0x95,0x79,0xD9,0xBD,0xB5,0x19,0x02,0x2C,
 | 
			
		||||
	0x87,0xDC,0xE7,0x57,0x82,0x7E,0xF1,0x8B,0x06,0x3D,0x00,0xA5,
 | 
			
		||||
	0x7B,0x6B,0x26,0x27,0x91,0x0F,0x6A,0x77,0xE4,0xD5,0x04,0xE4,
 | 
			
		||||
	0x12,0x2C,0x42,0xFF,0xD2,0x88,0xBB,0xD3,0x92,0xA0,0xF9,0xC8,
 | 
			
		||||
	0x51,0x64,0x14,0x5C,0xD8,0xF9,0x6C,0x47,0x82,0xB4,0x1C,0x7F,
 | 
			
		||||
	0x09,0xB8,0xF0,0x25,0x83,0x1D,0x3F,0x3F,0x05,0xB3,0x21,0x0A,
 | 
			
		||||
	0x5D,0xA7,0xD8,0x54,0xC3,0x65,0x7D,0xC3,0xB0,0x1D,0xBF,0xAE,
 | 
			
		||||
	0xF8,0x68,0xCF,0x9B,
 | 
			
		||||
	};
 | 
			
		||||
static unsigned char dsa2048_q[]={
 | 
			
		||||
	0x97,0xE7,0x33,0x4D,0xD3,0x94,0x3E,0x0B,0xDB,0x62,0x74,0xC6,
 | 
			
		||||
	0xA1,0x08,0xDD,0x19,0xA3,0x75,0x17,0x1B,
 | 
			
		||||
	};
 | 
			
		||||
static unsigned char dsa2048_g[]={
 | 
			
		||||
	0x2C,0x78,0x16,0x59,0x34,0x63,0xF4,0xF3,0x92,0xFC,0xB5,0xA5,
 | 
			
		||||
	0x4F,0x13,0xDE,0x2F,0x1C,0xA4,0x3C,0xAE,0xAD,0x38,0x3F,0x7E,
 | 
			
		||||
	0x90,0xBF,0x96,0xA6,0xAE,0x25,0x90,0x72,0xF5,0x8E,0x80,0x0C,
 | 
			
		||||
	0x39,0x1C,0xD9,0xEC,0xBA,0x90,0x5B,0x3A,0xE8,0x58,0x6C,0x9E,
 | 
			
		||||
	0x30,0x42,0x37,0x02,0x31,0x82,0xBC,0x6A,0xDF,0x6A,0x09,0x29,
 | 
			
		||||
	0xE3,0xC0,0x46,0xD1,0xCB,0x85,0xEC,0x0C,0x30,0x5E,0xEA,0xC8,
 | 
			
		||||
	0x39,0x8E,0x22,0x9F,0x22,0x10,0xD2,0x34,0x61,0x68,0x37,0x3D,
 | 
			
		||||
	0x2E,0x4A,0x5B,0x9A,0xF5,0xC1,0x48,0xC6,0xF6,0xDC,0x63,0x1A,
 | 
			
		||||
	0xD3,0x96,0x64,0xBA,0x34,0xC9,0xD1,0xA0,0xD1,0xAE,0x6C,0x2F,
 | 
			
		||||
	0x48,0x17,0x93,0x14,0x43,0xED,0xF0,0x21,0x30,0x19,0xC3,0x1B,
 | 
			
		||||
	0x5F,0xDE,0xA3,0xF0,0x70,0x78,0x18,0xE1,0xA8,0xE4,0xEE,0x2E,
 | 
			
		||||
	0x00,0xA5,0xE4,0xB3,0x17,0xC8,0x0C,0x7D,0x6E,0x42,0xDC,0xB7,
 | 
			
		||||
	0x46,0x00,0x36,0x4D,0xD4,0x46,0xAA,0x3D,0x3C,0x46,0x89,0x40,
 | 
			
		||||
	0xBF,0x1D,0x84,0x77,0x0A,0x75,0xF3,0x87,0x1D,0x08,0x4C,0xA6,
 | 
			
		||||
	0xD1,0xA9,0x1C,0x1E,0x12,0x1E,0xE1,0xC7,0x30,0x28,0x76,0xA5,
 | 
			
		||||
	0x7F,0x6C,0x85,0x96,0x2B,0x6F,0xDB,0x80,0x66,0x26,0xAE,0xF5,
 | 
			
		||||
	0x93,0xC7,0x8E,0xAE,0x9A,0xED,0xE4,0xCA,0x04,0xEA,0x3B,0x72,
 | 
			
		||||
	0xEF,0xDC,0x87,0xED,0x0D,0xA5,0x4C,0x4A,0xDD,0x71,0x22,0x64,
 | 
			
		||||
	0x59,0x69,0x4E,0x8E,0xBF,0x43,0xDC,0xAB,0x8E,0x66,0xBB,0x01,
 | 
			
		||||
	0xB6,0xF4,0xE7,0xFD,0xD2,0xAD,0x9F,0x36,0xC1,0xA0,0x29,0x99,
 | 
			
		||||
	0xD1,0x96,0x70,0x59,0x06,0x78,0x35,0xBD,0x65,0x55,0x52,0x9E,
 | 
			
		||||
	0xF8,0xB2,0xE5,0x38,
 | 
			
		||||
	};
 | 
			
		||||
 
 | 
			
		||||
DSA *get_dsa2048()
 | 
			
		||||
	{
 | 
			
		||||
	DSA *dsa;
 | 
			
		||||
 
 | 
			
		||||
	if ((dsa=DSA_new()) == NULL) return(NULL);
 | 
			
		||||
	dsa->priv_key=BN_bin2bn(dsa2048_priv,sizeof(dsa2048_priv),NULL);
 | 
			
		||||
	dsa->pub_key=BN_bin2bn(dsa2048_pub,sizeof(dsa2048_pub),NULL);
 | 
			
		||||
	dsa->p=BN_bin2bn(dsa2048_p,sizeof(dsa2048_p),NULL);
 | 
			
		||||
	dsa->q=BN_bin2bn(dsa2048_q,sizeof(dsa2048_q),NULL);
 | 
			
		||||
	dsa->g=BN_bin2bn(dsa2048_g,sizeof(dsa2048_g),NULL);
 | 
			
		||||
	if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL) ||
 | 
			
		||||
				(dsa->q == NULL) || (dsa->g == NULL))
 | 
			
		||||
		return(NULL);
 | 
			
		||||
	return(dsa);
 | 
			
		||||
	}
 | 
			
		||||
{
 | 
			
		||||
    DSA *dsa;
 | 
			
		||||
 | 
			
		||||
static const char rnd_seed[] = "string to make the random number generator think it has entropy";
 | 
			
		||||
    if ((dsa = DSA_new()) == NULL)
 | 
			
		||||
        return (NULL);
 | 
			
		||||
    dsa->priv_key = BN_bin2bn(dsa2048_priv, sizeof(dsa2048_priv), NULL);
 | 
			
		||||
    dsa->pub_key = BN_bin2bn(dsa2048_pub, sizeof(dsa2048_pub), NULL);
 | 
			
		||||
    dsa->p = BN_bin2bn(dsa2048_p, sizeof(dsa2048_p), NULL);
 | 
			
		||||
    dsa->q = BN_bin2bn(dsa2048_q, sizeof(dsa2048_q), NULL);
 | 
			
		||||
    dsa->g = BN_bin2bn(dsa2048_g, sizeof(dsa2048_g), NULL);
 | 
			
		||||
    if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL)
 | 
			
		||||
        || (dsa->q == NULL) || (dsa->g == NULL))
 | 
			
		||||
        return (NULL);
 | 
			
		||||
    return (dsa);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const char rnd_seed[] =
 | 
			
		||||
    "string to make the random number generator think it has entropy";
 | 
			
		||||
static int rnd_fake = 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2416
									
								
								apps/testrsa.h
									
									
									
									
									
								
							
							
						
						
									
										2416
									
								
								apps/testrsa.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
/* apps/timeouts.h */
 | 
			
		||||
/* 
 | 
			
		||||
/*
 | 
			
		||||
 * DTLS implementation written by Nagendra Modadugu
 | 
			
		||||
 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.  
 | 
			
		||||
 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1999-2005 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -58,10 +58,10 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef INCLUDED_TIMEOUTS_H
 | 
			
		||||
#define INCLUDED_TIMEOUTS_H
 | 
			
		||||
# define INCLUDED_TIMEOUTS_H
 | 
			
		||||
 | 
			
		||||
/* numbers in us */
 | 
			
		||||
#define DGRAM_RCV_TIMEOUT         250000
 | 
			
		||||
#define DGRAM_SND_TIMEOUT         250000
 | 
			
		||||
# define DGRAM_RCV_TIMEOUT         250000
 | 
			
		||||
# define DGRAM_SND_TIMEOUT         250000
 | 
			
		||||
 | 
			
		||||
#endif /* ! INCLUDED_TIMEOUTS_H */
 | 
			
		||||
#endif                          /* ! INCLUDED_TIMEOUTS_H */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										529
									
								
								apps/verify.c
									
									
									
									
									
								
							
							
						
						
									
										529
									
								
								apps/verify.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -67,297 +67,314 @@
 | 
			
		||||
#include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	verify_main
 | 
			
		||||
#define PROG    verify_main
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx);
 | 
			
		||||
static int cb(int ok, X509_STORE_CTX *ctx);
 | 
			
		||||
static int check(X509_STORE *ctx, char *file,
 | 
			
		||||
		STACK_OF(X509) *uchain, STACK_OF(X509) *tchain,
 | 
			
		||||
		STACK_OF(X509_CRL) *crls, ENGINE *e);
 | 
			
		||||
static int v_verbose=0, vflags = 0;
 | 
			
		||||
                 STACK_OF(X509) *uchain, STACK_OF(X509) *tchain,
 | 
			
		||||
                 STACK_OF(X509_CRL) *crls, ENGINE *e, int show_chain);
 | 
			
		||||
static int v_verbose = 0, vflags = 0;
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	ENGINE *e = NULL;
 | 
			
		||||
	int i,ret=1, badarg = 0;
 | 
			
		||||
	char *CApath=NULL,*CAfile=NULL;
 | 
			
		||||
	char *untfile = NULL, *trustfile = NULL, *crlfile = NULL;
 | 
			
		||||
	STACK_OF(X509) *untrusted = NULL, *trusted = NULL;
 | 
			
		||||
	STACK_OF(X509_CRL) *crls = NULL;
 | 
			
		||||
	X509_STORE *cert_ctx=NULL;
 | 
			
		||||
	X509_LOOKUP *lookup=NULL;
 | 
			
		||||
	X509_VERIFY_PARAM *vpm = NULL;
 | 
			
		||||
{
 | 
			
		||||
    ENGINE *e = NULL;
 | 
			
		||||
    int i, ret = 1, badarg = 0;
 | 
			
		||||
    char *CApath = NULL, *CAfile = NULL;
 | 
			
		||||
    char *untfile = NULL, *trustfile = NULL, *crlfile = NULL;
 | 
			
		||||
    STACK_OF(X509) *untrusted = NULL, *trusted = NULL;
 | 
			
		||||
    STACK_OF(X509_CRL) *crls = NULL;
 | 
			
		||||
    X509_STORE *cert_ctx = NULL;
 | 
			
		||||
    X509_LOOKUP *lookup = NULL;
 | 
			
		||||
    X509_VERIFY_PARAM *vpm = NULL;
 | 
			
		||||
    int crl_download = 0, show_chain = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
    char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	cert_ctx=X509_STORE_new();
 | 
			
		||||
	if (cert_ctx == NULL) goto end;
 | 
			
		||||
	X509_STORE_set_verify_cb(cert_ctx,cb);
 | 
			
		||||
    cert_ctx = X509_STORE_new();
 | 
			
		||||
    if (cert_ctx == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
    X509_STORE_set_verify_cb(cert_ctx, cb);
 | 
			
		||||
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
    ERR_load_crypto_strings();
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		if (argc >= 1)
 | 
			
		||||
			{
 | 
			
		||||
			if (strcmp(*argv,"-CApath") == 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (argc-- < 1) goto end;
 | 
			
		||||
				CApath= *(++argv);
 | 
			
		||||
				}
 | 
			
		||||
			else if (strcmp(*argv,"-CAfile") == 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (argc-- < 1) goto end;
 | 
			
		||||
				CAfile= *(++argv);
 | 
			
		||||
				}
 | 
			
		||||
			else if (args_verify(&argv, &argc, &badarg, bio_err,
 | 
			
		||||
									&vpm))
 | 
			
		||||
				{
 | 
			
		||||
				if (badarg)
 | 
			
		||||
					goto end;
 | 
			
		||||
				continue;
 | 
			
		||||
				}
 | 
			
		||||
			else if (strcmp(*argv,"-untrusted") == 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (argc-- < 1) goto end;
 | 
			
		||||
				untfile= *(++argv);
 | 
			
		||||
				}
 | 
			
		||||
			else if (strcmp(*argv,"-trusted") == 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (argc-- < 1) goto end;
 | 
			
		||||
				trustfile= *(++argv);
 | 
			
		||||
				}
 | 
			
		||||
			else if (strcmp(*argv,"-CRLfile") == 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (argc-- < 1) goto end;
 | 
			
		||||
				crlfile= *(++argv);
 | 
			
		||||
				}
 | 
			
		||||
    argc--;
 | 
			
		||||
    argv++;
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (argc >= 1) {
 | 
			
		||||
            if (strcmp(*argv, "-CApath") == 0) {
 | 
			
		||||
                if (argc-- < 1)
 | 
			
		||||
                    goto end;
 | 
			
		||||
                CApath = *(++argv);
 | 
			
		||||
            } else if (strcmp(*argv, "-CAfile") == 0) {
 | 
			
		||||
                if (argc-- < 1)
 | 
			
		||||
                    goto end;
 | 
			
		||||
                CAfile = *(++argv);
 | 
			
		||||
            } else if (args_verify(&argv, &argc, &badarg, bio_err, &vpm)) {
 | 
			
		||||
                if (badarg)
 | 
			
		||||
                    goto end;
 | 
			
		||||
                continue;
 | 
			
		||||
            } else if (strcmp(*argv, "-untrusted") == 0) {
 | 
			
		||||
                if (argc-- < 1)
 | 
			
		||||
                    goto end;
 | 
			
		||||
                untfile = *(++argv);
 | 
			
		||||
            } else if (strcmp(*argv, "-trusted") == 0) {
 | 
			
		||||
                if (argc-- < 1)
 | 
			
		||||
                    goto end;
 | 
			
		||||
                trustfile = *(++argv);
 | 
			
		||||
            } else if (strcmp(*argv, "-CRLfile") == 0) {
 | 
			
		||||
                if (argc-- < 1)
 | 
			
		||||
                    goto end;
 | 
			
		||||
                crlfile = *(++argv);
 | 
			
		||||
            } else if (strcmp(*argv, "-crl_download") == 0)
 | 
			
		||||
                crl_download = 1;
 | 
			
		||||
            else if (strcmp(*argv, "-show_chain") == 0)
 | 
			
		||||
                show_chain = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
			else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
				{
 | 
			
		||||
				if (--argc < 1) goto end;
 | 
			
		||||
				engine= *(++argv);
 | 
			
		||||
				}
 | 
			
		||||
            else if (strcmp(*argv, "-engine") == 0) {
 | 
			
		||||
                if (--argc < 1)
 | 
			
		||||
                    goto end;
 | 
			
		||||
                engine = *(++argv);
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
			else if (strcmp(*argv,"-help") == 0)
 | 
			
		||||
				goto end;
 | 
			
		||||
			else if (strcmp(*argv,"-verbose") == 0)
 | 
			
		||||
				v_verbose=1;
 | 
			
		||||
			else if (argv[0][0] == '-')
 | 
			
		||||
				goto end;
 | 
			
		||||
			else
 | 
			
		||||
				break;
 | 
			
		||||
			argc--;
 | 
			
		||||
			argv++;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
            else if (strcmp(*argv, "-help") == 0)
 | 
			
		||||
                goto end;
 | 
			
		||||
            else if (strcmp(*argv, "-verbose") == 0)
 | 
			
		||||
                v_verbose = 1;
 | 
			
		||||
            else if (argv[0][0] == '-')
 | 
			
		||||
                goto end;
 | 
			
		||||
            else
 | 
			
		||||
                break;
 | 
			
		||||
            argc--;
 | 
			
		||||
            argv++;
 | 
			
		||||
        } else
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
    e = setup_engine(bio_err, engine, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (vpm)
 | 
			
		||||
		X509_STORE_set1_param(cert_ctx, vpm);
 | 
			
		||||
    if (vpm)
 | 
			
		||||
        X509_STORE_set1_param(cert_ctx, vpm);
 | 
			
		||||
 | 
			
		||||
	lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_file());
 | 
			
		||||
	if (lookup == NULL) abort();
 | 
			
		||||
	if (CAfile) {
 | 
			
		||||
		i=X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM);
 | 
			
		||||
		if(!i) {
 | 
			
		||||
			BIO_printf(bio_err, "Error loading file %s\n", CAfile);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	} else X509_LOOKUP_load_file(lookup,NULL,X509_FILETYPE_DEFAULT);
 | 
			
		||||
		
 | 
			
		||||
	lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_hash_dir());
 | 
			
		||||
	if (lookup == NULL) abort();
 | 
			
		||||
	if (CApath) {
 | 
			
		||||
		i=X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM);
 | 
			
		||||
		if(!i) {
 | 
			
		||||
			BIO_printf(bio_err, "Error loading directory %s\n", CApath);
 | 
			
		||||
			ERR_print_errors(bio_err);
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	} else X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
 | 
			
		||||
    lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_file());
 | 
			
		||||
    if (lookup == NULL)
 | 
			
		||||
        abort();
 | 
			
		||||
    if (CAfile) {
 | 
			
		||||
        i = X509_LOOKUP_load_file(lookup, CAfile, X509_FILETYPE_PEM);
 | 
			
		||||
        if (!i) {
 | 
			
		||||
            BIO_printf(bio_err, "Error loading file %s\n", CAfile);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else
 | 
			
		||||
        X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT);
 | 
			
		||||
 | 
			
		||||
	ERR_clear_error();
 | 
			
		||||
    lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_hash_dir());
 | 
			
		||||
    if (lookup == NULL)
 | 
			
		||||
        abort();
 | 
			
		||||
    if (CApath) {
 | 
			
		||||
        i = X509_LOOKUP_add_dir(lookup, CApath, X509_FILETYPE_PEM);
 | 
			
		||||
        if (!i) {
 | 
			
		||||
            BIO_printf(bio_err, "Error loading directory %s\n", CApath);
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    } else
 | 
			
		||||
        X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT);
 | 
			
		||||
 | 
			
		||||
	if(untfile)
 | 
			
		||||
		{
 | 
			
		||||
		untrusted = load_certs(bio_err, untfile, FORMAT_PEM,
 | 
			
		||||
					NULL, e, "untrusted certificates");
 | 
			
		||||
		if(!untrusted)
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
    ERR_clear_error();
 | 
			
		||||
 | 
			
		||||
	if(trustfile)
 | 
			
		||||
		{
 | 
			
		||||
		trusted = load_certs(bio_err, trustfile, FORMAT_PEM,
 | 
			
		||||
					NULL, e, "trusted certificates");
 | 
			
		||||
		if(!trusted)
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (untfile) {
 | 
			
		||||
        untrusted = load_certs(bio_err, untfile, FORMAT_PEM,
 | 
			
		||||
                               NULL, e, "untrusted certificates");
 | 
			
		||||
        if (!untrusted)
 | 
			
		||||
            goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if(crlfile)
 | 
			
		||||
		{
 | 
			
		||||
		crls = load_crls(bio_err, crlfile, FORMAT_PEM,
 | 
			
		||||
					NULL, e, "other CRLs");
 | 
			
		||||
		if(!crls)
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
    if (trustfile) {
 | 
			
		||||
        trusted = load_certs(bio_err, trustfile, FORMAT_PEM,
 | 
			
		||||
                             NULL, e, "trusted certificates");
 | 
			
		||||
        if (!trusted)
 | 
			
		||||
            goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (argc < 1) check(cert_ctx, NULL, untrusted, trusted, crls, e);
 | 
			
		||||
	else
 | 
			
		||||
		for (i=0; i<argc; i++)
 | 
			
		||||
			check(cert_ctx,argv[i], untrusted, trusted, crls, e);
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (ret == 1) {
 | 
			
		||||
		BIO_printf(bio_err,"usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check]");
 | 
			
		||||
    if (crlfile) {
 | 
			
		||||
        crls = load_crls(bio_err, crlfile, FORMAT_PEM, NULL, e, "other CRLs");
 | 
			
		||||
        if (!crls)
 | 
			
		||||
            goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (crl_download)
 | 
			
		||||
        store_setup_crl_download(cert_ctx);
 | 
			
		||||
 | 
			
		||||
    ret = 0;
 | 
			
		||||
    if (argc < 1) {
 | 
			
		||||
        if (1 !=
 | 
			
		||||
            check(cert_ctx, NULL, untrusted, trusted, crls, e, show_chain))
 | 
			
		||||
            ret = -1;
 | 
			
		||||
    } else {
 | 
			
		||||
        for (i = 0; i < argc; i++)
 | 
			
		||||
            if (1 !=
 | 
			
		||||
                check(cert_ctx, argv[i], untrusted, trusted, crls, e,
 | 
			
		||||
                      show_chain))
 | 
			
		||||
                ret = -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 end:
 | 
			
		||||
    if (ret == 1) {
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "usage: verify [-verbose] [-CApath path] [-CAfile file] [-trusted_first] [-purpose purpose] [-crl_check]");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		BIO_printf(bio_err," [-engine e]");
 | 
			
		||||
        BIO_printf(bio_err, " [-engine e]");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," cert1 cert2 ...\n");
 | 
			
		||||
        BIO_printf(bio_err, " cert1 cert2 ...\n");
 | 
			
		||||
 | 
			
		||||
		BIO_printf(bio_err,"recognized usages:\n");
 | 
			
		||||
		for(i = 0; i < X509_PURPOSE_get_count(); i++)
 | 
			
		||||
			{
 | 
			
		||||
			X509_PURPOSE *ptmp;
 | 
			
		||||
			ptmp = X509_PURPOSE_get0(i);
 | 
			
		||||
			BIO_printf(bio_err, "\t%-10s\t%s\n",
 | 
			
		||||
					X509_PURPOSE_get0_sname(ptmp),
 | 
			
		||||
					X509_PURPOSE_get0_name(ptmp));
 | 
			
		||||
			}
 | 
			
		||||
        BIO_printf(bio_err, "recognized usages:\n");
 | 
			
		||||
        for (i = 0; i < X509_PURPOSE_get_count(); i++) {
 | 
			
		||||
            X509_PURPOSE *ptmp;
 | 
			
		||||
            ptmp = X509_PURPOSE_get0(i);
 | 
			
		||||
            BIO_printf(bio_err, "\t%-10s\t%s\n",
 | 
			
		||||
                       X509_PURPOSE_get0_sname(ptmp),
 | 
			
		||||
                       X509_PURPOSE_get0_name(ptmp));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		BIO_printf(bio_err,"recognized verify names:\n");
 | 
			
		||||
		for(i = 0; i < X509_VERIFY_PARAM_get_count(); i++)
 | 
			
		||||
			{
 | 
			
		||||
			const X509_VERIFY_PARAM *vptmp;
 | 
			
		||||
			vptmp = X509_VERIFY_PARAM_get0(i);
 | 
			
		||||
			BIO_printf(bio_err, "\t%-10s\n",
 | 
			
		||||
					X509_VERIFY_PARAM_get0_name(vptmp));
 | 
			
		||||
			}
 | 
			
		||||
        BIO_printf(bio_err, "recognized verify names:\n");
 | 
			
		||||
        for (i = 0; i < X509_VERIFY_PARAM_get_count(); i++) {
 | 
			
		||||
            const X509_VERIFY_PARAM *vptmp;
 | 
			
		||||
            vptmp = X509_VERIFY_PARAM_get0(i);
 | 
			
		||||
            BIO_printf(bio_err, "\t%-10s\n",
 | 
			
		||||
                       X509_VERIFY_PARAM_get0_name(vptmp));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	if (vpm) X509_VERIFY_PARAM_free(vpm);
 | 
			
		||||
	if (cert_ctx != NULL) X509_STORE_free(cert_ctx);
 | 
			
		||||
	sk_X509_pop_free(untrusted, X509_free);
 | 
			
		||||
	sk_X509_pop_free(trusted, X509_free);
 | 
			
		||||
	sk_X509_CRL_pop_free(crls, X509_CRL_free);
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    if (vpm)
 | 
			
		||||
        X509_VERIFY_PARAM_free(vpm);
 | 
			
		||||
    if (cert_ctx != NULL)
 | 
			
		||||
        X509_STORE_free(cert_ctx);
 | 
			
		||||
    sk_X509_pop_free(untrusted, X509_free);
 | 
			
		||||
    sk_X509_pop_free(trusted, X509_free);
 | 
			
		||||
    sk_X509_CRL_pop_free(crls, X509_CRL_free);
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret < 0 ? 2 : ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int check(X509_STORE *ctx, char *file,
 | 
			
		||||
		STACK_OF(X509) *uchain, STACK_OF(X509) *tchain,
 | 
			
		||||
		STACK_OF(X509_CRL) *crls, ENGINE *e)
 | 
			
		||||
	{
 | 
			
		||||
	X509 *x=NULL;
 | 
			
		||||
	int i=0,ret=0;
 | 
			
		||||
	X509_STORE_CTX *csc;
 | 
			
		||||
                 STACK_OF(X509) *uchain, STACK_OF(X509) *tchain,
 | 
			
		||||
                 STACK_OF(X509_CRL) *crls, ENGINE *e, int show_chain)
 | 
			
		||||
{
 | 
			
		||||
    X509 *x = NULL;
 | 
			
		||||
    int i = 0, ret = 0;
 | 
			
		||||
    X509_STORE_CTX *csc;
 | 
			
		||||
    STACK_OF(X509) *chain = NULL;
 | 
			
		||||
 | 
			
		||||
	x = load_cert(bio_err, file, FORMAT_PEM, NULL, e, "certificate file");
 | 
			
		||||
	if (x == NULL)
 | 
			
		||||
		goto end;
 | 
			
		||||
	fprintf(stdout,"%s: ",(file == NULL)?"stdin":file);
 | 
			
		||||
    x = load_cert(bio_err, file, FORMAT_PEM, NULL, e, "certificate file");
 | 
			
		||||
    if (x == NULL)
 | 
			
		||||
        goto end;
 | 
			
		||||
    fprintf(stdout, "%s: ", (file == NULL) ? "stdin" : file);
 | 
			
		||||
 | 
			
		||||
	csc = X509_STORE_CTX_new();
 | 
			
		||||
	if (csc == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	X509_STORE_set_flags(ctx, vflags);
 | 
			
		||||
	if(!X509_STORE_CTX_init(csc,ctx,x,uchain))
 | 
			
		||||
		{
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
	if(tchain) X509_STORE_CTX_trusted_stack(csc, tchain);
 | 
			
		||||
	if (crls)
 | 
			
		||||
		X509_STORE_CTX_set0_crls(csc, crls);
 | 
			
		||||
	i=X509_verify_cert(csc);
 | 
			
		||||
	X509_STORE_CTX_free(csc);
 | 
			
		||||
    csc = X509_STORE_CTX_new();
 | 
			
		||||
    if (csc == NULL) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    X509_STORE_set_flags(ctx, vflags);
 | 
			
		||||
    if (!X509_STORE_CTX_init(csc, ctx, x, uchain)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
    if (tchain)
 | 
			
		||||
        X509_STORE_CTX_trusted_stack(csc, tchain);
 | 
			
		||||
    if (crls)
 | 
			
		||||
        X509_STORE_CTX_set0_crls(csc, crls);
 | 
			
		||||
    i = X509_verify_cert(csc);
 | 
			
		||||
    if (i > 0 && show_chain)
 | 
			
		||||
        chain = X509_STORE_CTX_get1_chain(csc);
 | 
			
		||||
    X509_STORE_CTX_free(csc);
 | 
			
		||||
 | 
			
		||||
	ret=0;
 | 
			
		||||
end:
 | 
			
		||||
	if (i > 0)
 | 
			
		||||
		{
 | 
			
		||||
		fprintf(stdout,"OK\n");
 | 
			
		||||
		ret=1;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		ERR_print_errors(bio_err);
 | 
			
		||||
	if (x != NULL) X509_free(x);
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
    if (i > 0) {
 | 
			
		||||
        fprintf(stdout, "OK\n");
 | 
			
		||||
        ret = 1;
 | 
			
		||||
    } else
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    if (chain) {
 | 
			
		||||
        printf("Chain:\n");
 | 
			
		||||
        for (i = 0; i < sk_X509_num(chain); i++) {
 | 
			
		||||
            X509 *cert = sk_X509_value(chain, i);
 | 
			
		||||
            printf("depth=%d: ", i);
 | 
			
		||||
            X509_NAME_print_ex_fp(stdout,
 | 
			
		||||
                                  X509_get_subject_name(cert),
 | 
			
		||||
                                  0, XN_FLAG_ONELINE);
 | 
			
		||||
            printf("\n");
 | 
			
		||||
        }
 | 
			
		||||
        sk_X509_pop_free(chain, X509_free);
 | 
			
		||||
    }
 | 
			
		||||
    if (x != NULL)
 | 
			
		||||
        X509_free(x);
 | 
			
		||||
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
    return (ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
	{
 | 
			
		||||
	int cert_error = X509_STORE_CTX_get_error(ctx);
 | 
			
		||||
	X509 *current_cert = X509_STORE_CTX_get_current_cert(ctx);
 | 
			
		||||
static int cb(int ok, X509_STORE_CTX *ctx)
 | 
			
		||||
{
 | 
			
		||||
    int cert_error = X509_STORE_CTX_get_error(ctx);
 | 
			
		||||
    X509 *current_cert = X509_STORE_CTX_get_current_cert(ctx);
 | 
			
		||||
 | 
			
		||||
	if (!ok)
 | 
			
		||||
		{
 | 
			
		||||
		if (current_cert)
 | 
			
		||||
			{
 | 
			
		||||
			X509_NAME_print_ex_fp(stdout,
 | 
			
		||||
				X509_get_subject_name(current_cert),
 | 
			
		||||
				0, XN_FLAG_ONELINE);
 | 
			
		||||
			printf("\n");
 | 
			
		||||
			}
 | 
			
		||||
		printf("%serror %d at %d depth lookup:%s\n",
 | 
			
		||||
			X509_STORE_CTX_get0_parent_ctx(ctx) ? "[CRL path]" : "",
 | 
			
		||||
			cert_error,
 | 
			
		||||
			X509_STORE_CTX_get_error_depth(ctx),
 | 
			
		||||
			X509_verify_cert_error_string(cert_error));
 | 
			
		||||
		switch(cert_error)
 | 
			
		||||
			{
 | 
			
		||||
			case X509_V_ERR_NO_EXPLICIT_POLICY:
 | 
			
		||||
				policies_print(NULL, ctx);
 | 
			
		||||
			case X509_V_ERR_CERT_HAS_EXPIRED:
 | 
			
		||||
    if (!ok) {
 | 
			
		||||
        if (current_cert) {
 | 
			
		||||
            X509_NAME_print_ex_fp(stdout,
 | 
			
		||||
                                  X509_get_subject_name(current_cert),
 | 
			
		||||
                                  0, XN_FLAG_ONELINE);
 | 
			
		||||
            printf("\n");
 | 
			
		||||
        }
 | 
			
		||||
        printf("%serror %d at %d depth lookup:%s\n",
 | 
			
		||||
               X509_STORE_CTX_get0_parent_ctx(ctx) ? "[CRL path]" : "",
 | 
			
		||||
               cert_error,
 | 
			
		||||
               X509_STORE_CTX_get_error_depth(ctx),
 | 
			
		||||
               X509_verify_cert_error_string(cert_error));
 | 
			
		||||
        switch (cert_error) {
 | 
			
		||||
        case X509_V_ERR_NO_EXPLICIT_POLICY:
 | 
			
		||||
            policies_print(NULL, ctx);
 | 
			
		||||
        case X509_V_ERR_CERT_HAS_EXPIRED:
 | 
			
		||||
 | 
			
		||||
			/* since we are just checking the certificates, it is
 | 
			
		||||
			 * ok if they are self signed. But we should still warn
 | 
			
		||||
			 * the user.
 | 
			
		||||
			 */
 | 
			
		||||
            /*
 | 
			
		||||
             * since we are just checking the certificates, it is ok if they
 | 
			
		||||
             * are self signed. But we should still warn the user.
 | 
			
		||||
             */
 | 
			
		||||
 | 
			
		||||
			case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
 | 
			
		||||
			/* Continue after extension errors too */
 | 
			
		||||
			case X509_V_ERR_INVALID_CA:
 | 
			
		||||
			case X509_V_ERR_INVALID_NON_CA:
 | 
			
		||||
			case X509_V_ERR_PATH_LENGTH_EXCEEDED:
 | 
			
		||||
			case X509_V_ERR_INVALID_PURPOSE:
 | 
			
		||||
			case X509_V_ERR_CRL_HAS_EXPIRED:
 | 
			
		||||
			case X509_V_ERR_CRL_NOT_YET_VALID:
 | 
			
		||||
			case X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION:
 | 
			
		||||
			ok = 1;
 | 
			
		||||
        case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
 | 
			
		||||
            /* Continue after extension errors too */
 | 
			
		||||
        case X509_V_ERR_INVALID_CA:
 | 
			
		||||
        case X509_V_ERR_INVALID_NON_CA:
 | 
			
		||||
        case X509_V_ERR_PATH_LENGTH_EXCEEDED:
 | 
			
		||||
        case X509_V_ERR_INVALID_PURPOSE:
 | 
			
		||||
        case X509_V_ERR_CRL_HAS_EXPIRED:
 | 
			
		||||
        case X509_V_ERR_CRL_NOT_YET_VALID:
 | 
			
		||||
        case X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION:
 | 
			
		||||
            ok = 1;
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		return ok;
 | 
			
		||||
        return ok;
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	if (cert_error == X509_V_OK && ok == 2)
 | 
			
		||||
		policies_print(NULL, ctx);
 | 
			
		||||
	if (!v_verbose)
 | 
			
		||||
		ERR_clear_error();
 | 
			
		||||
	return(ok);
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    if (cert_error == X509_V_OK && ok == 2)
 | 
			
		||||
        policies_print(NULL, ctx);
 | 
			
		||||
    if (!v_verbose)
 | 
			
		||||
        ERR_clear_error();
 | 
			
		||||
    return (ok);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										139
									
								
								apps/version.c
									
									
									
									
									
								
							
							
						
						
									
										139
									
								
								apps/version.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -63,7 +63,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -133,85 +133,82 @@
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG	version_main
 | 
			
		||||
#define PROG    version_main
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
int MAIN(int argc, char **argv)
 | 
			
		||||
	{
 | 
			
		||||
	int i,ret=0;
 | 
			
		||||
	int cflags=0,version=0,date=0,options=0,platform=0,dir=0;
 | 
			
		||||
{
 | 
			
		||||
    int i, ret = 0;
 | 
			
		||||
    int cflags = 0, version = 0, date = 0, options = 0, platform = 0, dir = 0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
    if (bio_err == NULL)
 | 
			
		||||
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (argc == 1) version=1;
 | 
			
		||||
	for (i=1; i<argc; i++)
 | 
			
		||||
		{
 | 
			
		||||
		if (strcmp(argv[i],"-v") == 0)
 | 
			
		||||
			version=1;	
 | 
			
		||||
		else if (strcmp(argv[i],"-b") == 0)
 | 
			
		||||
			date=1;
 | 
			
		||||
		else if (strcmp(argv[i],"-f") == 0)
 | 
			
		||||
			cflags=1;
 | 
			
		||||
		else if (strcmp(argv[i],"-o") == 0)
 | 
			
		||||
			options=1;
 | 
			
		||||
		else if (strcmp(argv[i],"-p") == 0)
 | 
			
		||||
			platform=1;
 | 
			
		||||
		else if (strcmp(argv[i],"-d") == 0)
 | 
			
		||||
			dir=1;
 | 
			
		||||
		else if (strcmp(argv[i],"-a") == 0)
 | 
			
		||||
			date=version=cflags=options=platform=dir=1;
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err,"usage:version -[avbofpd]\n");
 | 
			
		||||
			ret=1;
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    if (argc == 1)
 | 
			
		||||
        version = 1;
 | 
			
		||||
    for (i = 1; i < argc; i++) {
 | 
			
		||||
        if (strcmp(argv[i], "-v") == 0)
 | 
			
		||||
            version = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-b") == 0)
 | 
			
		||||
            date = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-f") == 0)
 | 
			
		||||
            cflags = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-o") == 0)
 | 
			
		||||
            options = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-p") == 0)
 | 
			
		||||
            platform = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-d") == 0)
 | 
			
		||||
            dir = 1;
 | 
			
		||||
        else if (strcmp(argv[i], "-a") == 0)
 | 
			
		||||
            date = version = cflags = options = platform = dir = 1;
 | 
			
		||||
        else {
 | 
			
		||||
            BIO_printf(bio_err, "usage:version -[avbofpd]\n");
 | 
			
		||||
            ret = 1;
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (version)
 | 
			
		||||
		{
 | 
			
		||||
		if (SSLeay() == SSLEAY_VERSION_NUMBER)
 | 
			
		||||
			{
 | 
			
		||||
			printf("%s\n",SSLeay_version(SSLEAY_VERSION));
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			printf("%s (Library: %s)\n",
 | 
			
		||||
				OPENSSL_VERSION_TEXT,
 | 
			
		||||
				SSLeay_version(SSLEAY_VERSION));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (date)    printf("%s\n",SSLeay_version(SSLEAY_BUILT_ON));
 | 
			
		||||
	if (platform) printf("%s\n",SSLeay_version(SSLEAY_PLATFORM));
 | 
			
		||||
	if (options) 
 | 
			
		||||
		{
 | 
			
		||||
		printf("options:  ");
 | 
			
		||||
		printf("%s ",BN_options());
 | 
			
		||||
    if (version) {
 | 
			
		||||
        if (SSLeay() == SSLEAY_VERSION_NUMBER) {
 | 
			
		||||
            printf("%s\n", SSLeay_version(SSLEAY_VERSION));
 | 
			
		||||
        } else {
 | 
			
		||||
            printf("%s (Library: %s)\n",
 | 
			
		||||
                   OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (date)
 | 
			
		||||
        printf("%s\n", SSLeay_version(SSLEAY_BUILT_ON));
 | 
			
		||||
    if (platform)
 | 
			
		||||
        printf("%s\n", SSLeay_version(SSLEAY_PLATFORM));
 | 
			
		||||
    if (options) {
 | 
			
		||||
        printf("options:  ");
 | 
			
		||||
        printf("%s ", BN_options());
 | 
			
		||||
#ifndef OPENSSL_NO_MD2
 | 
			
		||||
		printf("%s ",MD2_options());
 | 
			
		||||
        printf("%s ", MD2_options());
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC4
 | 
			
		||||
		printf("%s ",RC4_options());
 | 
			
		||||
        printf("%s ", RC4_options());
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
		printf("%s ",DES_options());
 | 
			
		||||
        printf("%s ", DES_options());
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		printf("%s ",idea_options());
 | 
			
		||||
        printf("%s ", idea_options());
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
		printf("%s ",BF_options());
 | 
			
		||||
        printf("%s ", BF_options());
 | 
			
		||||
#endif
 | 
			
		||||
		printf("\n");
 | 
			
		||||
		}
 | 
			
		||||
	if (cflags)  printf("%s\n",SSLeay_version(SSLEAY_CFLAGS));
 | 
			
		||||
	if (dir)  printf("%s\n",SSLeay_version(SSLEAY_DIR));
 | 
			
		||||
end:
 | 
			
		||||
	apps_shutdown();
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
	}
 | 
			
		||||
        printf("\n");
 | 
			
		||||
    }
 | 
			
		||||
    if (cflags)
 | 
			
		||||
        printf("%s\n", SSLeay_version(SSLEAY_CFLAGS));
 | 
			
		||||
    if (dir)
 | 
			
		||||
        printf("%s\n", SSLeay_version(SSLEAY_DIR));
 | 
			
		||||
 end:
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										168
									
								
								apps/vms_decc_init.c
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										168
									
								
								apps/vms_decc_init.c
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							@@ -5,7 +5,7 @@
 | 
			
		||||
 | 
			
		||||
#ifdef USE_DECC_INIT
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
/*-
 | 
			
		||||
 * 2010-04-26 SMS.
 | 
			
		||||
 *
 | 
			
		||||
 *----------------------------------------------------------------------
 | 
			
		||||
@@ -18,10 +18,9 @@
 | 
			
		||||
 *----------------------------------------------------------------------
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <unixlib.h>
 | 
			
		||||
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <stdlib.h>
 | 
			
		||||
# include <unixlib.h>
 | 
			
		||||
 | 
			
		||||
/* Global storage. */
 | 
			
		||||
 | 
			
		||||
@@ -29,41 +28,38 @@
 | 
			
		||||
 | 
			
		||||
int decc_init_done = -1;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Structure to hold a DECC$* feature name and its desired value. */
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
typedef struct {
 | 
			
		||||
    char *name;
 | 
			
		||||
    int value;
 | 
			
		||||
} decc_feat_t;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Array of DECC$* feature names and their desired values.
 | 
			
		||||
 * Note: DECC$ARGV_PARSE_STYLE is the urgent one.
 | 
			
		||||
/*
 | 
			
		||||
 * Array of DECC$* feature names and their desired values. Note:
 | 
			
		||||
 * DECC$ARGV_PARSE_STYLE is the urgent one.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
decc_feat_t decc_feat_array[] =
 | 
			
		||||
{
 | 
			
		||||
 /* Preserve command-line case with SET PROCESS/PARSE_STYLE=EXTENDED */
 | 
			
		||||
 { "DECC$ARGV_PARSE_STYLE", 1 },
 | 
			
		||||
decc_feat_t decc_feat_array[] = {
 | 
			
		||||
    /* Preserve command-line case with SET PROCESS/PARSE_STYLE=EXTENDED */
 | 
			
		||||
    {"DECC$ARGV_PARSE_STYLE", 1},
 | 
			
		||||
 | 
			
		||||
 /* Preserve case for file names on ODS5 disks. */
 | 
			
		||||
 { "DECC$EFS_CASE_PRESERVE", 1 },
 | 
			
		||||
    /* Preserve case for file names on ODS5 disks. */
 | 
			
		||||
    {"DECC$EFS_CASE_PRESERVE", 1},
 | 
			
		||||
 | 
			
		||||
 /* Enable multiple dots (and most characters) in ODS5 file names,
 | 
			
		||||
  * while preserving VMS-ness of ";version".
 | 
			
		||||
  */
 | 
			
		||||
 { "DECC$EFS_CHARSET", 1 },
 | 
			
		||||
    /*
 | 
			
		||||
     * Enable multiple dots (and most characters) in ODS5 file names, while
 | 
			
		||||
     * preserving VMS-ness of ";version".
 | 
			
		||||
     */
 | 
			
		||||
    {"DECC$EFS_CHARSET", 1},
 | 
			
		||||
 | 
			
		||||
 /* List terminator. */
 | 
			
		||||
 { (char *)NULL, 0 }
 | 
			
		||||
    /* List terminator. */
 | 
			
		||||
    {(char *)NULL, 0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* LIB$INITIALIZE initialization function. */
 | 
			
		||||
 | 
			
		||||
static void decc_init( void)
 | 
			
		||||
static void decc_init(void)
 | 
			
		||||
{
 | 
			
		||||
    char *openssl_debug_decc_init;
 | 
			
		||||
    int verbose = 0;
 | 
			
		||||
@@ -75,12 +71,10 @@ static void decc_init( void)
 | 
			
		||||
    int sts;
 | 
			
		||||
 | 
			
		||||
    /* Get debug option. */
 | 
			
		||||
    openssl_debug_decc_init = getenv( "OPENSSL_DEBUG_DECC_INIT");
 | 
			
		||||
    if (openssl_debug_decc_init != NULL)
 | 
			
		||||
    {
 | 
			
		||||
        verbose = strtol( openssl_debug_decc_init, NULL, 10);
 | 
			
		||||
        if (verbose <= 0)
 | 
			
		||||
        {
 | 
			
		||||
    openssl_debug_decc_init = getenv("OPENSSL_DEBUG_DECC_INIT");
 | 
			
		||||
    if (openssl_debug_decc_init != NULL) {
 | 
			
		||||
        verbose = strtol(openssl_debug_decc_init, NULL, 10);
 | 
			
		||||
        if (verbose <= 0) {
 | 
			
		||||
            verbose = 1;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -90,99 +84,89 @@ static void decc_init( void)
 | 
			
		||||
 | 
			
		||||
    /* Loop through all items in the decc_feat_array[]. */
 | 
			
		||||
 | 
			
		||||
    for (i = 0; decc_feat_array[ i].name != NULL; i++)
 | 
			
		||||
    {
 | 
			
		||||
    for (i = 0; decc_feat_array[i].name != NULL; i++) {
 | 
			
		||||
        /* Get the feature index. */
 | 
			
		||||
        feat_index = decc$feature_get_index( decc_feat_array[ i].name);
 | 
			
		||||
        if (feat_index >= 0)
 | 
			
		||||
        {
 | 
			
		||||
        feat_index = decc$feature_get_index(decc_feat_array[i].name);
 | 
			
		||||
        if (feat_index >= 0) {
 | 
			
		||||
            /* Valid item.  Collect its properties. */
 | 
			
		||||
            feat_value = decc$feature_get_value( feat_index, 1);
 | 
			
		||||
            feat_value_min = decc$feature_get_value( feat_index, 2);
 | 
			
		||||
            feat_value_max = decc$feature_get_value( feat_index, 3);
 | 
			
		||||
            feat_value = decc$feature_get_value(feat_index, 1);
 | 
			
		||||
            feat_value_min = decc$feature_get_value(feat_index, 2);
 | 
			
		||||
            feat_value_max = decc$feature_get_value(feat_index, 3);
 | 
			
		||||
 | 
			
		||||
            /* Check the validity of our desired value. */
 | 
			
		||||
            if ((decc_feat_array[ i].value >= feat_value_min) &&
 | 
			
		||||
             (decc_feat_array[ i].value <= feat_value_max))
 | 
			
		||||
            {
 | 
			
		||||
            if ((decc_feat_array[i].value >= feat_value_min) &&
 | 
			
		||||
                (decc_feat_array[i].value <= feat_value_max)) {
 | 
			
		||||
                /* Valid value.  Set it if necessary. */
 | 
			
		||||
                if (feat_value != decc_feat_array[ i].value)
 | 
			
		||||
                {
 | 
			
		||||
                    sts = decc$feature_set_value( feat_index,
 | 
			
		||||
                     1,
 | 
			
		||||
                     decc_feat_array[ i].value);
 | 
			
		||||
                if (feat_value != decc_feat_array[i].value) {
 | 
			
		||||
                    sts = decc$feature_set_value(feat_index,
 | 
			
		||||
                                                 1, decc_feat_array[i].value);
 | 
			
		||||
 | 
			
		||||
                     if (verbose > 1)
 | 
			
		||||
                     {
 | 
			
		||||
                         fprintf( stderr, " %s = %d, sts = %d.\n",
 | 
			
		||||
                          decc_feat_array[ i].name,
 | 
			
		||||
                          decc_feat_array[ i].value,
 | 
			
		||||
                          sts);
 | 
			
		||||
                     }
 | 
			
		||||
                    if (verbose > 1) {
 | 
			
		||||
                        fprintf(stderr, " %s = %d, sts = %d.\n",
 | 
			
		||||
                                decc_feat_array[i].name,
 | 
			
		||||
                                decc_feat_array[i].value, sts);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
            } else {
 | 
			
		||||
                /* Invalid DECC feature value. */
 | 
			
		||||
                fprintf( stderr,
 | 
			
		||||
                 " INVALID DECC$FEATURE VALUE, %d: %d <= %s <= %d.\n",
 | 
			
		||||
                 feat_value,
 | 
			
		||||
                 feat_value_min, decc_feat_array[ i].name, feat_value_max);
 | 
			
		||||
                fprintf(stderr,
 | 
			
		||||
                        " INVALID DECC$FEATURE VALUE, %d: %d <= %s <= %d.\n",
 | 
			
		||||
                        feat_value,
 | 
			
		||||
                        feat_value_min, decc_feat_array[i].name,
 | 
			
		||||
                        feat_value_max);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
        } else {
 | 
			
		||||
            /* Invalid DECC feature name. */
 | 
			
		||||
            fprintf( stderr,
 | 
			
		||||
             " UNKNOWN DECC$FEATURE: %s.\n", decc_feat_array[ i].name);
 | 
			
		||||
            fprintf(stderr,
 | 
			
		||||
                    " UNKNOWN DECC$FEATURE: %s.\n", decc_feat_array[i].name);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (verbose > 0)
 | 
			
		||||
    {
 | 
			
		||||
        fprintf( stderr, " DECC_INIT complete.\n");
 | 
			
		||||
    if (verbose > 0) {
 | 
			
		||||
        fprintf(stderr, " DECC_INIT complete.\n");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Get "decc_init()" into a valid, loaded LIB$INITIALIZE PSECT. */
 | 
			
		||||
 | 
			
		||||
#pragma nostandard
 | 
			
		||||
# pragma nostandard
 | 
			
		||||
 | 
			
		||||
/* Establish the LIB$INITIALIZE PSECTs, with proper alignment and
 | 
			
		||||
 * other attributes.  Note that "nopic" is significant only on VAX.
 | 
			
		||||
/*
 | 
			
		||||
 * Establish the LIB$INITIALIZE PSECTs, with proper alignment and other
 | 
			
		||||
 * attributes.  Note that "nopic" is significant only on VAX.
 | 
			
		||||
 */
 | 
			
		||||
#pragma extern_model save
 | 
			
		||||
# pragma extern_model save
 | 
			
		||||
 | 
			
		||||
#if __INITIAL_POINTER_SIZE == 64
 | 
			
		||||
# define PSECT_ALIGN 3
 | 
			
		||||
#else
 | 
			
		||||
# define PSECT_ALIGN 2
 | 
			
		||||
#endif
 | 
			
		||||
# if __INITIAL_POINTER_SIZE == 64
 | 
			
		||||
#  define PSECT_ALIGN 3
 | 
			
		||||
# else
 | 
			
		||||
#  define PSECT_ALIGN 2
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
#pragma extern_model strict_refdef "LIB$INITIALIZ" PSECT_ALIGN, nopic, nowrt
 | 
			
		||||
const int spare[ 8] = { 0 };
 | 
			
		||||
# pragma extern_model strict_refdef "LIB$INITIALIZ" PSECT_ALIGN, nopic, nowrt
 | 
			
		||||
const int spare[8] = { 0 };
 | 
			
		||||
 | 
			
		||||
#pragma extern_model strict_refdef "LIB$INITIALIZE" PSECT_ALIGN, nopic, nowrt
 | 
			
		||||
void (*const x_decc_init)() = decc_init;
 | 
			
		||||
# pragma extern_model strict_refdef "LIB$INITIALIZE" PSECT_ALIGN, nopic, nowrt
 | 
			
		||||
void (*const x_decc_init) () = decc_init;
 | 
			
		||||
 | 
			
		||||
#pragma extern_model restore
 | 
			
		||||
# pragma extern_model restore
 | 
			
		||||
 | 
			
		||||
/* Fake reference to ensure loading the LIB$INITIALIZE PSECT. */
 | 
			
		||||
 | 
			
		||||
#pragma extern_model save
 | 
			
		||||
# pragma extern_model save
 | 
			
		||||
 | 
			
		||||
int LIB$INITIALIZE( void);
 | 
			
		||||
int LIB$INITIALIZE(void);
 | 
			
		||||
 | 
			
		||||
#pragma extern_model strict_refdef
 | 
			
		||||
int dmy_lib$initialize = (int) LIB$INITIALIZE;
 | 
			
		||||
# pragma extern_model strict_refdef
 | 
			
		||||
int dmy_lib$initialize = (int)LIB$INITIALIZE;
 | 
			
		||||
 | 
			
		||||
#pragma extern_model restore
 | 
			
		||||
# pragma extern_model restore
 | 
			
		||||
 | 
			
		||||
#pragma standard
 | 
			
		||||
# pragma standard
 | 
			
		||||
 | 
			
		||||
#else /* def USE_DECC_INIT */
 | 
			
		||||
#else                           /* def USE_DECC_INIT */
 | 
			
		||||
 | 
			
		||||
/* Dummy code to avoid a %CC-W-EMPTYFILE complaint. */
 | 
			
		||||
int decc_init_dummy( void);
 | 
			
		||||
int decc_init_dummy(void);
 | 
			
		||||
 | 
			
		||||
#endif /* def USE_DECC_INIT */
 | 
			
		||||
#endif                          /* def USE_DECC_INIT */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										136
									
								
								apps/winrand.c
									
									
									
									
									
								
							
							
						
						
									
										136
									
								
								apps/winrand.c
									
									
									
									
									
								
							@@ -7,7 +7,7 @@
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
@@ -53,7 +53,8 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Usage: winrand [filename]
 | 
			
		||||
/*-
 | 
			
		||||
 * Usage: winrand [filename]
 | 
			
		||||
 *
 | 
			
		||||
 * Collects entropy from mouse movements and other events and writes
 | 
			
		||||
 * random data to filename or .rnd
 | 
			
		||||
@@ -67,82 +68,79 @@ LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 | 
			
		||||
const char *filename;
 | 
			
		||||
 | 
			
		||||
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
 | 
			
		||||
        PSTR cmdline, int iCmdShow)
 | 
			
		||||
	{
 | 
			
		||||
	static char appname[] = "OpenSSL";
 | 
			
		||||
	HWND hwnd;
 | 
			
		||||
	MSG msg;
 | 
			
		||||
	WNDCLASSEX wndclass;
 | 
			
		||||
        char buffer[200];
 | 
			
		||||
                   PSTR cmdline, int iCmdShow)
 | 
			
		||||
{
 | 
			
		||||
    static char appname[] = "OpenSSL";
 | 
			
		||||
    HWND hwnd;
 | 
			
		||||
    MSG msg;
 | 
			
		||||
    WNDCLASSEX wndclass;
 | 
			
		||||
    char buffer[200];
 | 
			
		||||
 | 
			
		||||
        if (cmdline[0] == '\0')
 | 
			
		||||
                filename = RAND_file_name(buffer, sizeof buffer);
 | 
			
		||||
        else
 | 
			
		||||
                filename = cmdline;
 | 
			
		||||
    if (cmdline[0] == '\0')
 | 
			
		||||
        filename = RAND_file_name(buffer, sizeof buffer);
 | 
			
		||||
    else
 | 
			
		||||
        filename = cmdline;
 | 
			
		||||
 | 
			
		||||
        RAND_load_file(filename, -1);
 | 
			
		||||
    RAND_load_file(filename, -1);
 | 
			
		||||
 | 
			
		||||
	wndclass.cbSize = sizeof(wndclass);
 | 
			
		||||
	wndclass.style = CS_HREDRAW | CS_VREDRAW;
 | 
			
		||||
	wndclass.lpfnWndProc = WndProc;
 | 
			
		||||
	wndclass.cbClsExtra = 0;
 | 
			
		||||
	wndclass.cbWndExtra = 0;
 | 
			
		||||
	wndclass.hInstance = hInstance;
 | 
			
		||||
	wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
 | 
			
		||||
	wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
 | 
			
		||||
	wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
 | 
			
		||||
	wndclass.lpszMenuName = NULL;
 | 
			
		||||
        wndclass.lpszClassName = appname;
 | 
			
		||||
	wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
 | 
			
		||||
	RegisterClassEx(&wndclass);
 | 
			
		||||
    wndclass.cbSize = sizeof(wndclass);
 | 
			
		||||
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
 | 
			
		||||
    wndclass.lpfnWndProc = WndProc;
 | 
			
		||||
    wndclass.cbClsExtra = 0;
 | 
			
		||||
    wndclass.cbWndExtra = 0;
 | 
			
		||||
    wndclass.hInstance = hInstance;
 | 
			
		||||
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
 | 
			
		||||
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
 | 
			
		||||
    wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
 | 
			
		||||
    wndclass.lpszMenuName = NULL;
 | 
			
		||||
    wndclass.lpszClassName = appname;
 | 
			
		||||
    wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
 | 
			
		||||
    RegisterClassEx(&wndclass);
 | 
			
		||||
 | 
			
		||||
        hwnd = CreateWindow(appname, OPENSSL_VERSION_TEXT,
 | 
			
		||||
		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
 | 
			
		||||
		CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
 | 
			
		||||
    hwnd = CreateWindow(appname, OPENSSL_VERSION_TEXT,
 | 
			
		||||
                        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
 | 
			
		||||
                        CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance,
 | 
			
		||||
                        NULL);
 | 
			
		||||
 | 
			
		||||
	ShowWindow(hwnd, iCmdShow);
 | 
			
		||||
	UpdateWindow(hwnd);
 | 
			
		||||
    ShowWindow(hwnd, iCmdShow);
 | 
			
		||||
    UpdateWindow(hwnd);
 | 
			
		||||
 | 
			
		||||
    while (GetMessage(&msg, NULL, 0, 0)) {
 | 
			
		||||
        TranslateMessage(&msg);
 | 
			
		||||
        DispatchMessage(&msg);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	while (GetMessage(&msg, NULL, 0, 0))
 | 
			
		||||
		{
 | 
			
		||||
		TranslateMessage(&msg);
 | 
			
		||||
		DispatchMessage(&msg);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	return msg.wParam;
 | 
			
		||||
	}
 | 
			
		||||
    return msg.wParam;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
 | 
			
		||||
	{
 | 
			
		||||
        HDC hdc;
 | 
			
		||||
	PAINTSTRUCT ps;
 | 
			
		||||
        RECT rect;
 | 
			
		||||
        static int seeded = 0;
 | 
			
		||||
{
 | 
			
		||||
    HDC hdc;
 | 
			
		||||
    PAINTSTRUCT ps;
 | 
			
		||||
    RECT rect;
 | 
			
		||||
    static int seeded = 0;
 | 
			
		||||
 | 
			
		||||
	switch (iMsg)
 | 
			
		||||
		{
 | 
			
		||||
	case WM_PAINT:
 | 
			
		||||
		hdc = BeginPaint(hwnd, &ps);
 | 
			
		||||
		GetClientRect(hwnd, &rect);
 | 
			
		||||
                DrawText(hdc, "Seeding the PRNG. Please move the mouse!", -1,
 | 
			
		||||
			&rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
 | 
			
		||||
		EndPaint(hwnd, &ps);
 | 
			
		||||
		return 0;
 | 
			
		||||
		
 | 
			
		||||
        case WM_DESTROY:
 | 
			
		||||
                PostQuitMessage(0);
 | 
			
		||||
                return 0;
 | 
			
		||||
                }
 | 
			
		||||
    switch (iMsg) {
 | 
			
		||||
    case WM_PAINT:
 | 
			
		||||
        hdc = BeginPaint(hwnd, &ps);
 | 
			
		||||
        GetClientRect(hwnd, &rect);
 | 
			
		||||
        DrawText(hdc, "Seeding the PRNG. Please move the mouse!", -1,
 | 
			
		||||
                 &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
 | 
			
		||||
        EndPaint(hwnd, &ps);
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
        if (RAND_event(iMsg, wParam, lParam) == 1 && seeded == 0)
 | 
			
		||||
                {
 | 
			
		||||
                seeded = 1;
 | 
			
		||||
                if (RAND_write_file(filename) <= 0)
 | 
			
		||||
                        MessageBox(hwnd, "Couldn't write random file!",
 | 
			
		||||
				"OpenSSL", MB_OK | MB_ICONERROR);
 | 
			
		||||
                PostQuitMessage(0);
 | 
			
		||||
                }
 | 
			
		||||
    case WM_DESTROY:
 | 
			
		||||
        PostQuitMessage(0);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	return DefWindowProc(hwnd, iMsg, wParam, lParam);
 | 
			
		||||
	}
 | 
			
		||||
    if (RAND_event(iMsg, wParam, lParam) == 1 && seeded == 0) {
 | 
			
		||||
        seeded = 1;
 | 
			
		||||
        if (RAND_write_file(filename) <= 0)
 | 
			
		||||
            MessageBox(hwnd, "Couldn't write random file!",
 | 
			
		||||
                       "OpenSSL", MB_OK | MB_ICONERROR);
 | 
			
		||||
        PostQuitMessage(0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return DefWindowProc(hwnd, iMsg, wParam, lParam);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2194
									
								
								apps/x509.c
									
									
									
									
									
								
							
							
						
						
									
										2194
									
								
								apps/x509.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										49
									
								
								bugs/alpha.c
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								bugs/alpha.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,18 +49,20 @@
 | 
			
		||||
 * 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.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* while not exactly a bug (ASN1 C leaves this undefined) it is
 | 
			
		||||
 * something to watch out for.  This was fine on linux/NT/Solaris but not
 | 
			
		||||
 * Alpha */
 | 
			
		||||
/*
 | 
			
		||||
 * while not exactly a bug (ASN1 C leaves this undefined) it is something to
 | 
			
		||||
 * watch out for.  This was fine on linux/NT/Solaris but not Alpha
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* it is basically an example of
 | 
			
		||||
/*-
 | 
			
		||||
 * it is basically an example of
 | 
			
		||||
 * func(*(a++),*(a++))
 | 
			
		||||
 * which parameter is evaluated first?  It is not defined in ASN1 C.
 | 
			
		||||
 */
 | 
			
		||||
@@ -69,23 +71,22 @@
 | 
			
		||||
 | 
			
		||||
#define TYPE    unsigned int
 | 
			
		||||
 | 
			
		||||
void func(a,b)
 | 
			
		||||
void func(a, b)
 | 
			
		||||
TYPE *a;
 | 
			
		||||
TYPE b;
 | 
			
		||||
        {
 | 
			
		||||
        printf("%ld -1 == %ld\n",a[0],b);
 | 
			
		||||
        }
 | 
			
		||||
{
 | 
			
		||||
    printf("%ld -1 == %ld\n", a[0], b);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main()
 | 
			
		||||
        {
 | 
			
		||||
        TYPE data[5]={1L,2L,3L,4L,5L};
 | 
			
		||||
        TYPE *p;
 | 
			
		||||
        int i;
 | 
			
		||||
{
 | 
			
		||||
    TYPE data[5] = { 1L, 2L, 3L, 4L, 5L };
 | 
			
		||||
    TYPE *p;
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
        p=data;
 | 
			
		||||
    p = data;
 | 
			
		||||
 | 
			
		||||
        for (i=0; i<4; i++)
 | 
			
		||||
                {
 | 
			
		||||
                func(p,*(p++));
 | 
			
		||||
                }
 | 
			
		||||
        }
 | 
			
		||||
    for (i = 0; i < 4; i++) {
 | 
			
		||||
        func(p, *(p++));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,45 +0,0 @@
 | 
			
		||||
/* NOCW */
 | 
			
		||||
/* dggccbug.c */
 | 
			
		||||
/* bug found by Eric Young (eay@cryptsoft.com) - May 1995 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
/* There is a bug in
 | 
			
		||||
 * gcc version 2.5.8 (88open OCS/BCS, DG-2.5.8.3, Oct 14 1994)
 | 
			
		||||
 * as shipped with DGUX 5.4R3.10 that can be bypassed by defining
 | 
			
		||||
 * DG_GCC_BUG in my code.
 | 
			
		||||
 * The bug manifests itself by the vaule of a pointer that is
 | 
			
		||||
 * used only by reference, not having it's value change when it is used
 | 
			
		||||
 * to check for exiting the loop.  Probably caused by there being 2
 | 
			
		||||
 * copies of the valiable, one in a register and one being an address
 | 
			
		||||
 * that is passed. */
 | 
			
		||||
 | 
			
		||||
/* compare the out put from
 | 
			
		||||
 * gcc dggccbug.c; ./a.out
 | 
			
		||||
 * and
 | 
			
		||||
 * gcc -O dggccbug.c; ./a.out
 | 
			
		||||
 * compile with -DFIXBUG to remove the bug when optimising.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void inc(a)
 | 
			
		||||
int *a;
 | 
			
		||||
	{
 | 
			
		||||
	(*a)++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
main()
 | 
			
		||||
	{
 | 
			
		||||
	int p=0;
 | 
			
		||||
#ifdef FIXBUG
 | 
			
		||||
	int dummy;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	while (p<3)
 | 
			
		||||
		{
 | 
			
		||||
		fprintf(stderr,"%08X\n",p);
 | 
			
		||||
		inc(&p);
 | 
			
		||||
#ifdef FIXBUG
 | 
			
		||||
		dummy+=p;
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -4,54 +4,57 @@
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
/* This compiler bug it present on IRIX 5.3, 5.1 and 4.0.5 (these are
 | 
			
		||||
 * the only versions of IRIX I have access to.
 | 
			
		||||
 * defining FIXBUG removes the bug.
 | 
			
		||||
 * (bug is still present in IRIX 6.3 according to
 | 
			
		||||
 * Gage <agage@forgetmenot.Mines.EDU>
 | 
			
		||||
/*
 | 
			
		||||
 * This compiler bug it present on IRIX 5.3, 5.1 and 4.0.5 (these are the
 | 
			
		||||
 * only versions of IRIX I have access to. defining FIXBUG removes the bug.
 | 
			
		||||
 * (bug is still present in IRIX 6.3 according to Gage
 | 
			
		||||
 * <agage@forgetmenot.Mines.EDU>
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
/* Compare the output from
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * Compare the output from
 | 
			
		||||
 * cc sgiccbug.c; ./a.out
 | 
			
		||||
 * and
 | 
			
		||||
 * cc -O sgiccbug.c; ./a.out
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static unsigned long a[4]={0x01234567,0x89ABCDEF,0xFEDCBA98,0x76543210};
 | 
			
		||||
static unsigned long b[4]={0x89ABCDEF,0xFEDCBA98,0x76543210,0x01234567};
 | 
			
		||||
static unsigned long c[4]={0x77777778,0x8ACF1357,0x88888888,0x7530ECA9};
 | 
			
		||||
static unsigned long a[4] =
 | 
			
		||||
    { 0x01234567, 0x89ABCDEF, 0xFEDCBA98, 0x76543210 };
 | 
			
		||||
static unsigned long b[4] =
 | 
			
		||||
    { 0x89ABCDEF, 0xFEDCBA98, 0x76543210, 0x01234567 };
 | 
			
		||||
static unsigned long c[4] =
 | 
			
		||||
    { 0x77777778, 0x8ACF1357, 0x88888888, 0x7530ECA9 };
 | 
			
		||||
 | 
			
		||||
main()
 | 
			
		||||
	{
 | 
			
		||||
	unsigned long r[4];
 | 
			
		||||
	sub(r,a,b);
 | 
			
		||||
	fprintf(stderr,"input a= %08X %08X %08X %08X\n",a[3],a[2],a[1],a[0]);
 | 
			
		||||
	fprintf(stderr,"input b= %08X %08X %08X %08X\n",b[3],b[2],b[1],b[0]);
 | 
			
		||||
	fprintf(stderr,"output = %08X %08X %08X %08X\n",r[3],r[2],r[1],r[0]);
 | 
			
		||||
	fprintf(stderr,"correct= %08X %08X %08X %08X\n",c[3],c[2],c[1],c[0]);
 | 
			
		||||
	}
 | 
			
		||||
{
 | 
			
		||||
    unsigned long r[4];
 | 
			
		||||
    sub(r, a, b);
 | 
			
		||||
    fprintf(stderr, "input a= %08X %08X %08X %08X\n", a[3], a[2], a[1], a[0]);
 | 
			
		||||
    fprintf(stderr, "input b= %08X %08X %08X %08X\n", b[3], b[2], b[1], b[0]);
 | 
			
		||||
    fprintf(stderr, "output = %08X %08X %08X %08X\n", r[3], r[2], r[1], r[0]);
 | 
			
		||||
    fprintf(stderr, "correct= %08X %08X %08X %08X\n", c[3], c[2], c[1], c[0]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int sub(r,a,b)
 | 
			
		||||
unsigned long *r,*a,*b;
 | 
			
		||||
	{
 | 
			
		||||
	register unsigned long t1,t2,*ap,*bp,*rp;
 | 
			
		||||
	int i,carry;
 | 
			
		||||
int sub(r, a, b)
 | 
			
		||||
unsigned long *r, *a, *b;
 | 
			
		||||
{
 | 
			
		||||
    register unsigned long t1, t2, *ap, *bp, *rp;
 | 
			
		||||
    int i, carry;
 | 
			
		||||
#ifdef FIXBUG
 | 
			
		||||
	unsigned long dummy;
 | 
			
		||||
    unsigned long dummy;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	ap=a;
 | 
			
		||||
	bp=b;
 | 
			
		||||
	rp=r;
 | 
			
		||||
	carry=0;
 | 
			
		||||
	for (i=0; i<4; i++)
 | 
			
		||||
		{
 | 
			
		||||
		t1= *(ap++);
 | 
			
		||||
		t2= *(bp++);
 | 
			
		||||
		t1=(t1-t2);
 | 
			
		||||
    ap = a;
 | 
			
		||||
    bp = b;
 | 
			
		||||
    rp = r;
 | 
			
		||||
    carry = 0;
 | 
			
		||||
    for (i = 0; i < 4; i++) {
 | 
			
		||||
        t1 = *(ap++);
 | 
			
		||||
        t2 = *(bp++);
 | 
			
		||||
        t1 = (t1 - t2);
 | 
			
		||||
#ifdef FIXBUG
 | 
			
		||||
		dummy=t1;
 | 
			
		||||
        dummy = t1;
 | 
			
		||||
#endif
 | 
			
		||||
		*(rp++)=t1&0xffffffff;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
        *(rp++) = t1 & 0xffffffff;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -17,10 +17,10 @@ is returned as 1.
 | 
			
		||||
=====
 | 
			
		||||
I have not tested the following but it is reported by holtzman@mit.edu.
 | 
			
		||||
 | 
			
		||||
SSLref clients wait to recieve a server-verify before they send a
 | 
			
		||||
SSLref clients wait to receive a server-verify before they send a
 | 
			
		||||
client-finished.  Besides this not being evident from the examples in
 | 
			
		||||
2.2.1, it makes more sense to always send all packets you can before
 | 
			
		||||
reading.  SSLeay was waiting in the server to recieve a client-finish
 | 
			
		||||
reading.  SSLeay was waiting in the server to receive a client-finish
 | 
			
		||||
before sending the server-verify :-).  I have changed SSLeay to send a
 | 
			
		||||
server-verify before trying to read the client-finished.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										119
									
								
								bugs/stream.c
									
									
									
									
									
								
							
							
						
						
									
										119
									
								
								bugs/stream.c
									
									
									
									
									
								
							@@ -5,21 +5,21 @@
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
@@ -34,10 +34,10 @@
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
@@ -59,73 +59,74 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <openssl/rc4.h>
 | 
			
		||||
#ifdef OPENSSL_NO_DES
 | 
			
		||||
#include <des.h>
 | 
			
		||||
# include <des.h>
 | 
			
		||||
#else
 | 
			
		||||
#include <openssl/des.h>
 | 
			
		||||
# include <openssl/des.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* show how stream ciphers are not very good.  The mac has no affect
 | 
			
		||||
 * on RC4 while it does for cfb DES
 | 
			
		||||
/*
 | 
			
		||||
 * show how stream ciphers are not very good.  The mac has no affect on RC4
 | 
			
		||||
 * while it does for cfb DES
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
main()
 | 
			
		||||
	{
 | 
			
		||||
	fprintf(stderr,"rc4\n");
 | 
			
		||||
	rc4();
 | 
			
		||||
	fprintf(stderr,"cfb des\n");
 | 
			
		||||
	des();
 | 
			
		||||
	}
 | 
			
		||||
{
 | 
			
		||||
    fprintf(stderr, "rc4\n");
 | 
			
		||||
    rc4();
 | 
			
		||||
    fprintf(stderr, "cfb des\n");
 | 
			
		||||
    des();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int des()
 | 
			
		||||
	{
 | 
			
		||||
	des_key_schedule ks;
 | 
			
		||||
	des_cblock iv,key;
 | 
			
		||||
	int num;
 | 
			
		||||
	static char *keystr="01234567";
 | 
			
		||||
	static char *in1="0123456789ABCEDFdata 12345";
 | 
			
		||||
	static char *in2="9876543210abcdefdata 12345";
 | 
			
		||||
	unsigned char out[100];
 | 
			
		||||
	int i;
 | 
			
		||||
{
 | 
			
		||||
    des_key_schedule ks;
 | 
			
		||||
    des_cblock iv, key;
 | 
			
		||||
    int num;
 | 
			
		||||
    static char *keystr = "01234567";
 | 
			
		||||
    static char *in1 = "0123456789ABCEDFdata 12345";
 | 
			
		||||
    static char *in2 = "9876543210abcdefdata 12345";
 | 
			
		||||
    unsigned char out[100];
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
	des_set_key((des_cblock *)keystr,ks);
 | 
			
		||||
    des_set_key((des_cblock *)keystr, ks);
 | 
			
		||||
 | 
			
		||||
	num=0;
 | 
			
		||||
	memset(iv,0,8);
 | 
			
		||||
	des_cfb64_encrypt(in1,out,26,ks,(des_cblock *)iv,&num,1);
 | 
			
		||||
	for (i=0; i<26; i++)
 | 
			
		||||
		fprintf(stderr,"%02X ",out[i]);
 | 
			
		||||
	fprintf(stderr,"\n");
 | 
			
		||||
    num = 0;
 | 
			
		||||
    memset(iv, 0, 8);
 | 
			
		||||
    des_cfb64_encrypt(in1, out, 26, ks, (des_cblock *)iv, &num, 1);
 | 
			
		||||
    for (i = 0; i < 26; i++)
 | 
			
		||||
        fprintf(stderr, "%02X ", out[i]);
 | 
			
		||||
    fprintf(stderr, "\n");
 | 
			
		||||
 | 
			
		||||
	num=0;
 | 
			
		||||
	memset(iv,0,8);
 | 
			
		||||
	des_cfb64_encrypt(in2,out,26,ks,(des_cblock *)iv,&num,1);
 | 
			
		||||
	for (i=0; i<26; i++)
 | 
			
		||||
		fprintf(stderr,"%02X ",out[i]);
 | 
			
		||||
	fprintf(stderr,"\n");
 | 
			
		||||
	}
 | 
			
		||||
    num = 0;
 | 
			
		||||
    memset(iv, 0, 8);
 | 
			
		||||
    des_cfb64_encrypt(in2, out, 26, ks, (des_cblock *)iv, &num, 1);
 | 
			
		||||
    for (i = 0; i < 26; i++)
 | 
			
		||||
        fprintf(stderr, "%02X ", out[i]);
 | 
			
		||||
    fprintf(stderr, "\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int rc4()
 | 
			
		||||
	{
 | 
			
		||||
	static char *keystr="0123456789abcdef";
 | 
			
		||||
	RC4_KEY key;
 | 
			
		||||
	unsigned char in[100],out[100];
 | 
			
		||||
	int i;
 | 
			
		||||
{
 | 
			
		||||
    static char *keystr = "0123456789abcdef";
 | 
			
		||||
    RC4_KEY key;
 | 
			
		||||
    unsigned char in[100], out[100];
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
	RC4_set_key(&key,16,keystr);
 | 
			
		||||
	in[0]='\0';
 | 
			
		||||
	strcpy(in,"0123456789ABCEDFdata 12345");
 | 
			
		||||
	RC4(key,26,in,out);
 | 
			
		||||
    RC4_set_key(&key, 16, keystr);
 | 
			
		||||
    in[0] = '\0';
 | 
			
		||||
    strcpy(in, "0123456789ABCEDFdata 12345");
 | 
			
		||||
    RC4(key, 26, in, out);
 | 
			
		||||
 | 
			
		||||
	for (i=0; i<26; i++)
 | 
			
		||||
		fprintf(stderr,"%02X ",out[i]);
 | 
			
		||||
	fprintf(stderr,"\n");
 | 
			
		||||
    for (i = 0; i < 26; i++)
 | 
			
		||||
        fprintf(stderr, "%02X ", out[i]);
 | 
			
		||||
    fprintf(stderr, "\n");
 | 
			
		||||
 | 
			
		||||
	RC4_set_key(&key,16,keystr);
 | 
			
		||||
	in[0]='\0';
 | 
			
		||||
	strcpy(in,"9876543210abcdefdata 12345");
 | 
			
		||||
	RC4(key,26,in,out);
 | 
			
		||||
    RC4_set_key(&key, 16, keystr);
 | 
			
		||||
    in[0] = '\0';
 | 
			
		||||
    strcpy(in, "9876543210abcdefdata 12345");
 | 
			
		||||
    RC4(key, 26, in, out);
 | 
			
		||||
 | 
			
		||||
	for (i=0; i<26; i++)
 | 
			
		||||
		fprintf(stderr,"%02X ",out[i]);
 | 
			
		||||
	fprintf(stderr,"\n");
 | 
			
		||||
	}
 | 
			
		||||
    for (i = 0; i < 26; i++)
 | 
			
		||||
        fprintf(stderr, "%02X ", out[i]);
 | 
			
		||||
    fprintf(stderr, "\n");
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
/* This is a cc optimiser bug for ultrix 4.3, mips CPU.
 | 
			
		||||
/*-
 | 
			
		||||
 * This is a cc optimiser bug for ultrix 4.3, mips CPU.
 | 
			
		||||
 * What happens is that the compiler, due to the (a)&7,
 | 
			
		||||
 * does
 | 
			
		||||
 * i=a&7;
 | 
			
		||||
@@ -12,34 +13,32 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
main()
 | 
			
		||||
	{
 | 
			
		||||
	f(5);
 | 
			
		||||
	f(0);
 | 
			
		||||
	}
 | 
			
		||||
{
 | 
			
		||||
    f(5);
 | 
			
		||||
    f(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int f(a)
 | 
			
		||||
int a;
 | 
			
		||||
	{
 | 
			
		||||
	switch(a&7)
 | 
			
		||||
		{
 | 
			
		||||
	case 7:
 | 
			
		||||
		printf("7\n");
 | 
			
		||||
	case 6:
 | 
			
		||||
		printf("6\n");
 | 
			
		||||
	case 5:
 | 
			
		||||
		printf("5\n");
 | 
			
		||||
	case 4:
 | 
			
		||||
		printf("4\n");
 | 
			
		||||
	case 3:
 | 
			
		||||
		printf("3\n");
 | 
			
		||||
	case 2:
 | 
			
		||||
		printf("2\n");
 | 
			
		||||
	case 1:
 | 
			
		||||
		printf("1\n");
 | 
			
		||||
{
 | 
			
		||||
    switch (a & 7) {
 | 
			
		||||
    case 7:
 | 
			
		||||
        printf("7\n");
 | 
			
		||||
    case 6:
 | 
			
		||||
        printf("6\n");
 | 
			
		||||
    case 5:
 | 
			
		||||
        printf("5\n");
 | 
			
		||||
    case 4:
 | 
			
		||||
        printf("4\n");
 | 
			
		||||
    case 3:
 | 
			
		||||
        printf("3\n");
 | 
			
		||||
    case 2:
 | 
			
		||||
        printf("2\n");
 | 
			
		||||
    case 1:
 | 
			
		||||
        printf("1\n");
 | 
			
		||||
#ifdef FIX_BUG
 | 
			
		||||
	case 0:
 | 
			
		||||
		;
 | 
			
		||||
    case 0:
 | 
			
		||||
        ;
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	}	
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										106
									
								
								config
									
									
									
									
									
								
							
							
						
						
									
										106
									
								
								config
									
									
									
									
									
								
							@@ -102,10 +102,6 @@ fi
 | 
			
		||||
# Now we simply scan though... In most cases, the SYSTEM info is enough
 | 
			
		||||
#
 | 
			
		||||
case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
			
		||||
    MPE/iX:*)
 | 
			
		||||
	MACHINE=`echo "$MACHINE" | sed -e 's/-/_/g'`
 | 
			
		||||
	echo "parisc-hp-MPE/iX"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
    A/UX:*)
 | 
			
		||||
	echo "m68k-apple-aux3"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
@@ -122,18 +118,6 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
			
		||||
	echo "${MACHINE}-ibm-aix3"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    BeOS:*:BePC)
 | 
			
		||||
    if [ -e /boot/develop/headers/be/bone ]; then
 | 
			
		||||
		echo "beos-x86-bone"; exit 0
 | 
			
		||||
	else
 | 
			
		||||
		echo "beos-x86-r5"; exit 0
 | 
			
		||||
	fi
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    dgux:*)
 | 
			
		||||
	echo "${MACHINE}-dg-dgux"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    HI-UX:*)
 | 
			
		||||
	echo "${MACHINE}-hi-hiux"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
@@ -320,10 +304,6 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
			
		||||
	echo "${MACHINE}-unknown-ultrix"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    SINIX*|ReliantUNIX*)
 | 
			
		||||
	echo "${MACHINE}-siemens-sysv4"; exit 0
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    POSIX-BC*)
 | 
			
		||||
	echo "${MACHINE}-siemens-sysv4"; exit 0   # Here, $MACHINE == "BS2000"
 | 
			
		||||
	;;
 | 
			
		||||
@@ -340,10 +320,6 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
			
		||||
	echo "${MACHINE}-v11-${SYSTEM}"; exit 0;
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    NEWS-OS:4.*)
 | 
			
		||||
	echo "mips-sony-newsos4"; exit 0;
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    MINGW*)
 | 
			
		||||
	echo "${MACHINE}-whatever-mingw"; exit 0;
 | 
			
		||||
	;;
 | 
			
		||||
@@ -359,18 +335,6 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
			
		||||
	exit 0
 | 
			
		||||
	;;
 | 
			
		||||
 | 
			
		||||
    *"CRAY T3E")
 | 
			
		||||
       echo "t3e-cray-unicosmk"; exit 0;
 | 
			
		||||
       ;;
 | 
			
		||||
 | 
			
		||||
    *CRAY*)
 | 
			
		||||
       echo "j90-cray-unicos"; exit 0;
 | 
			
		||||
       ;;
 | 
			
		||||
 | 
			
		||||
    NONSTOP_KERNEL*)
 | 
			
		||||
       echo "nsr-tandem-nsk"; exit 0;
 | 
			
		||||
       ;;
 | 
			
		||||
 | 
			
		||||
    vxworks*)
 | 
			
		||||
       echo "${MACHINE}-whatever-vxworks"; exit 0;
 | 
			
		||||
       ;;
 | 
			
		||||
@@ -382,7 +346,7 @@ esac
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# Do the Apollo stuff first. Here, we just simply assume
 | 
			
		||||
# that the existance of the /usr/apollo directory is proof
 | 
			
		||||
# that the existence of the /usr/apollo directory is proof
 | 
			
		||||
# enough
 | 
			
		||||
if [ -d /usr/apollo ]; then
 | 
			
		||||
    echo "whatever-apollo-whatever"
 | 
			
		||||
@@ -538,7 +502,7 @@ case "$GUESSOS" in
 | 
			
		||||
  ppc-apple-rhapsody) OUT="rhapsody-ppc-cc" ;;
 | 
			
		||||
  ppc-apple-darwin*)
 | 
			
		||||
	ISA64=`(sysctl -n hw.optional.64bitops) 2>/dev/null`
 | 
			
		||||
	if [ "$ISA64" = "1" ]; then
 | 
			
		||||
	if [ "$ISA64" = "1" -a -z "$KERNEL_BITS" ]; then
 | 
			
		||||
	    echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
			
		||||
	    echo "         invoke './Configure darwin64-ppc-cc' *manually*."
 | 
			
		||||
	    if [ "$TEST" = "false" -a -t 1 ]; then
 | 
			
		||||
@@ -546,10 +510,14 @@ case "$GUESSOS" in
 | 
			
		||||
	      (trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
	    fi
 | 
			
		||||
	fi
 | 
			
		||||
	OUT="darwin-ppc-cc" ;;
 | 
			
		||||
	if [ "$ISA64" = "1" -a "$KERNEL_BITS" = "64" ]; then
 | 
			
		||||
	    OUT="darwin64-ppc-cc"
 | 
			
		||||
	else
 | 
			
		||||
	    OUT="darwin-ppc-cc"
 | 
			
		||||
	fi ;;
 | 
			
		||||
  i?86-apple-darwin*)
 | 
			
		||||
	ISA64=`(sysctl -n hw.optional.x86_64) 2>/dev/null`
 | 
			
		||||
	if [ "$ISA64" = "1" ]; then
 | 
			
		||||
	if [ "$ISA64" = "1" -a -z "$KERNEL_BITS" ]; then
 | 
			
		||||
	    echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
			
		||||
	    echo "         invoke './Configure darwin64-x86_64-cc' *manually*."
 | 
			
		||||
	    if [ "$TEST" = "false" -a -t 1 ]; then
 | 
			
		||||
@@ -557,7 +525,19 @@ case "$GUESSOS" in
 | 
			
		||||
	      (trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
	    fi
 | 
			
		||||
	fi
 | 
			
		||||
	OUT="darwin-i386-cc" ;;
 | 
			
		||||
	if [ "$ISA64" = "1" -a "$KERNEL_BITS" = "64" ]; then
 | 
			
		||||
	    OUT="darwin64-x86_64-cc"
 | 
			
		||||
	else
 | 
			
		||||
	    OUT="darwin-i386-cc"
 | 
			
		||||
	fi ;;
 | 
			
		||||
  armv6+7-*-iphoneos)
 | 
			
		||||
	options="$options -arch%20armv6 -arch%20armv7"
 | 
			
		||||
	OUT="iphoneos-cross" ;;
 | 
			
		||||
  *-*-iphoneos)
 | 
			
		||||
	options="$options -arch%20${MACHINE}"
 | 
			
		||||
	OUT="iphoneos-cross" ;;
 | 
			
		||||
  arm64-*-iphoneos|*-*-ios64)
 | 
			
		||||
	OUT="ios64-cross" ;;
 | 
			
		||||
  alpha-*-linux2)
 | 
			
		||||
        ISA=`awk '/cpu model/{print$4;exit(0);}' /proc/cpuinfo`
 | 
			
		||||
	case ${ISA:-generic} in
 | 
			
		||||
@@ -573,15 +553,33 @@ case "$GUESSOS" in
 | 
			
		||||
	fi
 | 
			
		||||
	;;
 | 
			
		||||
  ppc64-*-linux2)
 | 
			
		||||
	if [ -z "$KERNEL_BITS" ]; then
 | 
			
		||||
	    echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
			
		||||
	    echo "         invoke './Configure linux-ppc64' *manually*."
 | 
			
		||||
	    if [ "$TEST" = "false" -a -t 1 ]; then
 | 
			
		||||
		echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
		(trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
	    fi
 | 
			
		||||
	fi
 | 
			
		||||
	if [ "$KERNEL_BITS" = "64" ]; then
 | 
			
		||||
	    OUT="linux-ppc64"
 | 
			
		||||
	else
 | 
			
		||||
	    OUT="linux-ppc"
 | 
			
		||||
	    (echo "__LP64__" | gcc -E -x c - 2>/dev/null | grep "^__LP64__" 2>&1 > /dev/null) || options="$options -m32"
 | 
			
		||||
	fi
 | 
			
		||||
	;;
 | 
			
		||||
  ppc64le-*-linux2) OUT="linux-ppc64le" ;;
 | 
			
		||||
  ppc-*-linux2) OUT="linux-ppc" ;;
 | 
			
		||||
  mips64*-*-linux2)
 | 
			
		||||
	echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
			
		||||
	echo "         invoke './Configure linux-ppc64' *manually*."
 | 
			
		||||
	echo "         invoke './Configure linux64-mips64' *manually*."
 | 
			
		||||
	if [ "$TEST" = "false" -a -t 1 ]; then
 | 
			
		||||
	    echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
	    (trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
	fi
 | 
			
		||||
	OUT="linux-ppc"
 | 
			
		||||
	OUT="linux-mips64"
 | 
			
		||||
	;;
 | 
			
		||||
  ppc-*-linux2) OUT="linux-ppc" ;;
 | 
			
		||||
  mips*-*-linux2) OUT="linux-mips32" ;;
 | 
			
		||||
  ppc60x-*-vxworks*) OUT="vxworks-ppc60x" ;;
 | 
			
		||||
  ppcgen-*-vxworks*) OUT="vxworks-ppcgen" ;;
 | 
			
		||||
  pentium-*-vxworks*) OUT="vxworks-pentium" ;;
 | 
			
		||||
@@ -630,6 +628,7 @@ case "$GUESSOS" in
 | 
			
		||||
  armv[1-3]*-*-linux2) OUT="linux-generic32" ;;
 | 
			
		||||
  armv[7-9]*-*-linux2) OUT="linux-armv4"; options="$options -march=armv7-a" ;;
 | 
			
		||||
  arm*-*-linux2) OUT="linux-armv4" ;;
 | 
			
		||||
  aarch64-*-linux2) OUT="linux-aarch64" ;;
 | 
			
		||||
  sh*b-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN" ;;
 | 
			
		||||
  sh*-*-linux2)  OUT="linux-generic32"; options="$options -DL_ENDIAN" ;;
 | 
			
		||||
  m68k*-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN" ;;
 | 
			
		||||
@@ -664,7 +663,7 @@ case "$GUESSOS" in
 | 
			
		||||
  sun4[uv]*-*-solaris2)
 | 
			
		||||
	OUT="solaris-sparcv9-$CC"
 | 
			
		||||
	ISA64=`(isalist) 2>/dev/null | grep sparcv9`
 | 
			
		||||
	if [ "$ISA64" != "" ]; then
 | 
			
		||||
	if [ "$ISA64" != "" -a "$KERNEL_BITS" = "" ]; then
 | 
			
		||||
	    if [ "$CC" = "cc" -a $CCVER -ge 50 ]; then
 | 
			
		||||
		echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
			
		||||
		echo "         invoke './Configure solaris64-sparcv9-cc' *manually*."
 | 
			
		||||
@@ -694,13 +693,16 @@ case "$GUESSOS" in
 | 
			
		||||
		fi
 | 
			
		||||
	    fi
 | 
			
		||||
	fi
 | 
			
		||||
	if [ "$ISA64" != "" -a "$KERNEL_BITS" = "64" ]; then
 | 
			
		||||
	    OUT="solaris64-sparcv9-$CC"
 | 
			
		||||
	fi
 | 
			
		||||
	;;
 | 
			
		||||
  sun4m-*-solaris2)	OUT="solaris-sparcv8-$CC" ;;
 | 
			
		||||
  sun4d-*-solaris2)	OUT="solaris-sparcv8-$CC" ;;
 | 
			
		||||
  sun4*-*-solaris2)	OUT="solaris-sparcv7-$CC" ;;
 | 
			
		||||
  *86*-*-solaris2)
 | 
			
		||||
	ISA64=`(isalist) 2>/dev/null | grep amd64`
 | 
			
		||||
	if [ "$ISA64" != "" ]; then
 | 
			
		||||
	if [ "$ISA64" != "" -a ${KERNEL_BITS:-64} -eq 64 ]; then
 | 
			
		||||
	    OUT="solaris64-x86_64-$CC"
 | 
			
		||||
	else
 | 
			
		||||
	    OUT="solaris-x86-$CC"
 | 
			
		||||
@@ -722,7 +724,7 @@ case "$GUESSOS" in
 | 
			
		||||
			    libc=/usr/lib/libc.so
 | 
			
		||||
			else					# OpenBSD
 | 
			
		||||
			    # ld searches for highest libc.so.* and so do we
 | 
			
		||||
			    libc=`(ls /usr/lib/libc.so.* | tail -1) 2>/dev/null`
 | 
			
		||||
			    libc=`(ls /usr/lib/libc.so.* /lib/libc.so.* | tail -1) 2>/dev/null`
 | 
			
		||||
			fi
 | 
			
		||||
			case "`(file -L $libc) 2>/dev/null`" in
 | 
			
		||||
			*ELF*)	OUT="BSD-x86-elf" ;;
 | 
			
		||||
@@ -746,8 +748,6 @@ case "$GUESSOS" in
 | 
			
		||||
	EXE=".pm"
 | 
			
		||||
	OUT="vos-$CC" ;;
 | 
			
		||||
  BS2000-siemens-sysv4) OUT="BS2000-OSD" ;;
 | 
			
		||||
  RM*-siemens-sysv4) OUT="ReliantUNIX" ;;
 | 
			
		||||
  *-siemens-sysv4) OUT="SINIX" ;;
 | 
			
		||||
  *-hpux1*)
 | 
			
		||||
	if [ $CC = "gcc" -a $GCC_BITS = "64" ]; then
 | 
			
		||||
	    OUT="hpux64-parisc2-gcc"
 | 
			
		||||
@@ -813,14 +813,8 @@ case "$GUESSOS" in
 | 
			
		||||
	fi
 | 
			
		||||
	;;
 | 
			
		||||
  # these are all covered by the catchall below
 | 
			
		||||
  # *-dgux) OUT="dgux" ;;
 | 
			
		||||
  mips-sony-newsos4) OUT="newsos4-gcc" ;;
 | 
			
		||||
  *-*-cygwin_pre1.3) OUT="Cygwin-pre1.3" ;;
 | 
			
		||||
  *-*-cygwin) OUT="Cygwin" ;;
 | 
			
		||||
  t3e-cray-unicosmk) OUT="cray-t3e" ;;
 | 
			
		||||
  j90-cray-unicos) OUT="cray-j90" ;;
 | 
			
		||||
  nsr-tandem-nsk) OUT="tandem-c89" ;;
 | 
			
		||||
  beos-*) OUT="$GUESSOS" ;;
 | 
			
		||||
  x86pc-*-qnx6) OUT="QNX6-i386" ;;
 | 
			
		||||
  *-*-qnx6) OUT="QNX6" ;;
 | 
			
		||||
  x86-*-android|i?86-*-android) OUT="android-x86" ;;
 | 
			
		||||
@@ -828,7 +822,7 @@ case "$GUESSOS" in
 | 
			
		||||
  *) OUT=`echo $GUESSOS | awk -F- '{print $3}'`;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
# NB: This atalla support has been superceded by the ENGINE support
 | 
			
		||||
# NB: This atalla support has been superseded by the ENGINE support
 | 
			
		||||
# That contains its own header and definitions anyway. Support can
 | 
			
		||||
# be enabled or disabled on any supported platform without external
 | 
			
		||||
# headers, eg. by adding the "hw-atalla" switch to ./config or
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user