Compare commits
	
		
			2749 Commits
		
	
	
		
			OpenSSL-en
			...
			OpenSSL_0_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					2e80b1fb49 | ||
| 
						 | 
					82d63d3028 | ||
| 
						 | 
					8e6a84e730 | ||
| 
						 | 
					95475b1c7a | ||
| 
						 | 
					86f941c936 | ||
| 
						 | 
					387fd00c47 | ||
| 
						 | 
					00b9c1be7d | ||
| 
						 | 
					051bb5c457 | ||
| 
						 | 
					931a031916 | ||
| 
						 | 
					be21fe59aa | ||
| 
						 | 
					ef3565aed2 | ||
| 
						 | 
					01fc051e8a | ||
| 
						 | 
					ae43f344af | ||
| 
						 | 
					0902c559fb | ||
| 
						 | 
					58b6a165a5 | ||
| 
						 | 
					641c55342b | ||
| 
						 | 
					e390f5d684 | ||
| 
						 | 
					078a97791d | ||
| 
						 | 
					4d6b383680 | ||
| 
						 | 
					489885cf84 | ||
| 
						 | 
					850be8f18d | ||
| 
						 | 
					a22d40dde2 | ||
| 
						 | 
					ee121033dc | ||
| 
						 | 
					4090b56b4d | ||
| 
						 | 
					33ad6eca7a | ||
| 
						 | 
					dd10343e75 | ||
| 
						 | 
					ad55502092 | ||
| 
						 | 
					31edde3edc | ||
| 
						 | 
					381a693c39 | ||
| 
						 | 
					86cb571e28 | ||
| 
						 | 
					319a2c5f65 | ||
| 
						 | 
					9d0e895120 | ||
| 
						 | 
					44ee32ed30 | ||
| 
						 | 
					5922128732 | ||
| 
						 | 
					cb37947a71 | ||
| 
						 | 
					4668056fc9 | ||
| 
						 | 
					de23af982a | ||
| 
						 | 
					3a5a176ea0 | ||
| 
						 | 
					a1d37a96df | ||
| 
						 | 
					6bff79629e | ||
| 
						 | 
					db452cdba0 | ||
| 
						 | 
					d435752b0a | ||
| 
						 | 
					c8b14ca177 | ||
| 
						 | 
					8ba5c63de9 | ||
| 
						 | 
					3a0ede0ffd | ||
| 
						 | 
					9cde81c2dd | ||
| 
						 | 
					62bd487421 | ||
| 
						 | 
					4ef740a632 | ||
| 
						 | 
					7f36acd8fe | ||
| 
						 | 
					a32fc687de | ||
| 
						 | 
					09d7c42a7c | ||
| 
						 | 
					c0017a5a65 | ||
| 
						 | 
					3fbbd1e1d7 | ||
| 
						 | 
					344e86645d | ||
| 
						 | 
					075521725d | ||
| 
						 | 
					faa9c5cbdc | ||
| 
						 | 
					5fdf06666c | ||
| 
						 | 
					d2c786db37 | ||
| 
						 | 
					f28e8bd300 | ||
| 
						 | 
					3e786f4b0d | ||
| 
						 | 
					de02ec2767 | ||
| 
						 | 
					4b66e713de | ||
| 
						 | 
					90dd4d34bb | ||
| 
						 | 
					112341031b | ||
| 
						 | 
					7cf803230b | ||
| 
						 | 
					2d6452cdf9 | ||
| 
						 | 
					cc056d6395 | ||
| 
						 | 
					79b42e7654 | ||
| 
						 | 
					f0c5db92f7 | ||
| 
						 | 
					394178c94c | ||
| 
						 | 
					d420ac2c7d | ||
| 
						 | 
					61590d8945 | ||
| 
						 | 
					b79aa47a0c | ||
| 
						 | 
					ec2a595627 | ||
| 
						 | 
					8f5c833f3c | ||
| 
						 | 
					e88c577738 | ||
| 
						 | 
					ffe966b0fa | ||
| 
						 | 
					a2b0de98af | ||
| 
						 | 
					bb3de147b3 | ||
| 
						 | 
					4775944f81 | ||
| 
						 | 
					95ec1a717b | ||
| 
						 | 
					2abd5b7aa0 | ||
| 
						 | 
					380e145daf | ||
| 
						 | 
					a9f2330f43 | ||
| 
						 | 
					ce38bb1a8c | ||
| 
						 | 
					919f8bcd21 | ||
| 
						 | 
					325829a9bc | ||
| 
						 | 
					2bfd2c74d2 | ||
| 
						 | 
					82b2f57e30 | ||
| 
						 | 
					2ae1ea3788 | ||
| 
						 | 
					34066d741a | ||
| 
						 | 
					b74cc0776b | ||
| 
						 | 
					e7e5fe4705 | ||
| 
						 | 
					998ae048e7 | ||
| 
						 | 
					e65c2b9872 | ||
| 
						 | 
					b0ea8b160c | ||
| 
						 | 
					2fe9ab8e20 | ||
| 
						 | 
					bb569f97b9 | ||
| 
						 | 
					1145e03870 | ||
| 
						 | 
					31670c94bc | ||
| 
						 | 
					6781efb92f | ||
| 
						 | 
					0bf1c1d80d | ||
| 
						 | 
					67e5d33dd7 | ||
| 
						 | 
					6ed474ca66 | ||
| 
						 | 
					46cb8d3689 | ||
| 
						 | 
					23fc5ac646 | ||
| 
						 | 
					5734bebe05 | ||
| 
						 | 
					657a919598 | ||
| 
						 | 
					da17495b65 | ||
| 
						 | 
					6859bb1a22 | ||
| 
						 | 
					b64614adfe | ||
| 
						 | 
					3822740ce3 | ||
| 
						 | 
					0d78bc3356 | ||
| 
						 | 
					d87b79bf31 | ||
| 
						 | 
					6a6a08cbea | ||
| 
						 | 
					70ef9c5a3d | ||
| 
						 | 
					753cbc2857 | ||
| 
						 | 
					b727907ae8 | ||
| 
						 | 
					444c3a8492 | ||
| 
						 | 
					0b352c58db | ||
| 
						 | 
					9d68b289a0 | ||
| 
						 | 
					03ddbdd9b9 | ||
| 
						 | 
					eb5f555ffb | ||
| 
						 | 
					5ebdb39084 | ||
| 
						 | 
					d45a098472 | ||
| 
						 | 
					6d5ffb591b | ||
| 
						 | 
					7ce9e425bc | ||
| 
						 | 
					4d8743f490 | ||
| 
						 | 
					4c8b4f9d03 | ||
| 
						 | 
					04dc4edb44 | ||
| 
						 | 
					81ba5f6713 | ||
| 
						 | 
					6defae04f3 | ||
| 
						 | 
					e1064adfd3 | ||
| 
						 | 
					d7559f16cd | ||
| 
						 | 
					d161f5a9b2 | ||
| 
						 | 
					9e989810ba | ||
| 
						 | 
					28474e26f4 | ||
| 
						 | 
					ec2179cf81 | ||
| 
						 | 
					a8287a90ea | ||
| 
						 | 
					85421c7148 | ||
| 
						 | 
					ad5f0ed509 | ||
| 
						 | 
					0a4c8baf5e | ||
| 
						 | 
					77cc150b61 | ||
| 
						 | 
					95de3d204f | ||
| 
						 | 
					890b2abf19 | ||
| 
						 | 
					31182ad39b | ||
| 
						 | 
					6b051c4ebc | ||
| 
						 | 
					f35232e6f3 | ||
| 
						 | 
					fda5e38551 | ||
| 
						 | 
					a601df36f3 | ||
| 
						 | 
					ac9c6e10a4 | ||
| 
						 | 
					1a01733047 | ||
| 
						 | 
					d2cd46127c | ||
| 
						 | 
					9dde17e8b4 | ||
| 
						 | 
					37af03d311 | ||
| 
						 | 
					f7a397cc8d | ||
| 
						 | 
					cd2e8a6f2d | ||
| 
						 | 
					2d4b834926 | ||
| 
						 | 
					c22e6753ef | ||
| 
						 | 
					d18b993c43 | ||
| 
						 | 
					e6e81c5894 | ||
| 
						 | 
					f75abcefed | ||
| 
						 | 
					18f62d4b82 | ||
| 
						 | 
					5c0c22803e | ||
| 
						 | 
					0ef85c7f45 | ||
| 
						 | 
					078dd1a0f9 | ||
| 
						 | 
					2b96c95197 | ||
| 
						 | 
					c5f1c7b4d8 | ||
| 
						 | 
					d870740cd7 | ||
| 
						 | 
					d8ec0dcf45 | ||
| 
						 | 
					c465e7941e | ||
| 
						 | 
					933398f110 | ||
| 
						 | 
					cfd06a6223 | ||
| 
						 | 
					a9fd78f9da | ||
| 
						 | 
					5f747c7f4b | ||
| 
						 | 
					c4db1a8b5c | ||
| 
						 | 
					f7939fcd9a | ||
| 
						 | 
					d531c9014d | ||
| 
						 | 
					aca95e0b2f | ||
| 
						 | 
					bc3c578208 | ||
| 
						 | 
					06e4024d98 | ||
| 
						 | 
					8087d8f7ea | ||
| 
						 | 
					31166ec8f3 | ||
| 
						 | 
					2754597013 | ||
| 
						 | 
					2ce90b9b74 | ||
| 
						 | 
					db5b10fab5 | ||
| 
						 | 
					4e952ae4fc | ||
| 
						 | 
					db59141467 | ||
| 
						 | 
					8a66d17899 | ||
| 
						 | 
					2eeaa0261e | ||
| 
						 | 
					8dc344ccbf | ||
| 
						 | 
					6bcd3f903a | ||
| 
						 | 
					40f935f5b4 | ||
| 
						 | 
					0991f07034 | ||
| 
						 | 
					2aaec9cced | ||
| 
						 | 
					9d473aa2e4 | ||
| 
						 | 
					6145b0b183 | ||
| 
						 | 
					2a85f77146 | ||
| 
						 | 
					66b82f5aad | ||
| 
						 | 
					12bdceac8a | ||
| 
						 | 
					aea293e3bc | ||
| 
						 | 
					8ad7e3ad2a | ||
| 
						 | 
					fa5846e58b | ||
| 
						 | 
					0b6956b474 | ||
| 
						 | 
					0bb6187e71 | ||
| 
						 | 
					c5a5546389 | ||
| 
						 | 
					79e4022a33 | ||
| 
						 | 
					77fe058c10 | ||
| 
						 | 
					8d9086dfa2 | ||
| 
						 | 
					0602abf5bd | ||
| 
						 | 
					caf044cb3e | ||
| 
						 | 
					80986c9ced | ||
| 
						 | 
					a08ced78c8 | ||
| 
						 | 
					ede7c28eb7 | ||
| 
						 | 
					83eb412da8 | ||
| 
						 | 
					4d1c443123 | ||
| 
						 | 
					f44e184ec6 | ||
| 
						 | 
					377dcdba44 | ||
| 
						 | 
					8242354952 | ||
| 
						 | 
					c40b9bdefb | ||
| 
						 | 
					6895cca89d | ||
| 
						 | 
					c9d3957986 | ||
| 
						 | 
					f82ab534c6 | ||
| 
						 | 
					05e962ddf8 | ||
| 
						 | 
					f6e8c19ed1 | ||
| 
						 | 
					cf89b40584 | ||
| 
						 | 
					d680c13060 | ||
| 
						 | 
					c076599c18 | ||
| 
						 | 
					a510e9e4fc | ||
| 
						 | 
					4d8148fa98 | ||
| 
						 | 
					1a9e663b20 | ||
| 
						 | 
					aed29ce5ea | ||
| 
						 | 
					0dd675509c | ||
| 
						 | 
					9ad82c123a | ||
| 
						 | 
					144aa3c56e | ||
| 
						 | 
					eeff6bb6b3 | ||
| 
						 | 
					202892dfd6 | ||
| 
						 | 
					d90e74c50c | ||
| 
						 | 
					2990244980 | ||
| 
						 | 
					0c6fa13fee | ||
| 
						 | 
					68f0bcfbc3 | ||
| 
						 | 
					662ede2370 | ||
| 
						 | 
					d0edf6e593 | ||
| 
						 | 
					c93f908f7f | ||
| 
						 | 
					16d2a7caef | ||
| 
						 | 
					c798868d96 | ||
| 
						 | 
					057a04398d | ||
| 
						 | 
					b7b5cd6132 | ||
| 
						 | 
					71583fb0d7 | ||
| 
						 | 
					7f3ba9428f | ||
| 
						 | 
					058f86e9e0 | ||
| 
						 | 
					3c02e24bb3 | ||
| 
						 | 
					4509102cb9 | ||
| 
						 | 
					1be02dd842 | ||
| 
						 | 
					87c99c59bd | ||
| 
						 | 
					3d7c4a5a6d | ||
| 
						 | 
					732d1bf43a | ||
| 
						 | 
					11171f3c74 | ||
| 
						 | 
					88fd7424f6 | ||
| 
						 | 
					ba9f80c5d5 | ||
| 
						 | 
					30a452ab32 | ||
| 
						 | 
					e59659dc41 | ||
| 
						 | 
					9c90f27dac | ||
| 
						 | 
					ec4e600da6 | ||
| 
						 | 
					253e893c2b | ||
| 
						 | 
					4097dce455 | ||
| 
						 | 
					0ad2c4f85b | ||
| 
						 | 
					0e6c20da46 | ||
| 
						 | 
					f6b659cba4 | ||
| 
						 | 
					c9b552534e | ||
| 
						 | 
					f0ad5fc2ab | ||
| 
						 | 
					6bd27f8644 | ||
| 
						 | 
					dfe399e7d9 | ||
| 
						 | 
					7068c8b1a6 | ||
| 
						 | 
					5f444c8fcd | ||
| 
						 | 
					82384690e2 | ||
| 
						 | 
					e6fa67fa93 | ||
| 
						 | 
					62afa8bd58 | ||
| 
						 | 
					9ea72d3705 | ||
| 
						 | 
					a907751350 | ||
| 
						 | 
					2689b8f326 | ||
| 
						 | 
					560dfd2a02 | ||
| 
						 | 
					bd69ac5c93 | ||
| 
						 | 
					14f3d7c5cc | ||
| 
						 | 
					33ed371ec9 | ||
| 
						 | 
					510dc1ecd0 | ||
| 
						 | 
					3b07c32fe7 | ||
| 
						 | 
					563c05e2dc | ||
| 
						 | 
					9cc513a000 | ||
| 
						 | 
					cac32e5acd | ||
| 
						 | 
					643ecd2ed6 | ||
| 
						 | 
					0e9edc98d4 | ||
| 
						 | 
					27bd937cc0 | ||
| 
						 | 
					f56c451143 | ||
| 
						 | 
					05a1f76093 | ||
| 
						 | 
					4ed9388e5d | ||
| 
						 | 
					94a1183fab | ||
| 
						 | 
					88401ed449 | ||
| 
						 | 
					30e4269241 | ||
| 
						 | 
					59315df637 | ||
| 
						 | 
					3aa8d3a7f1 | ||
| 
						 | 
					3659df7d15 | ||
| 
						 | 
					16f1fdbc8b | ||
| 
						 | 
					98c1a4900c | ||
| 
						 | 
					5b6e7c8c65 | ||
| 
						 | 
					2541f58309 | ||
| 
						 | 
					6b063f32d9 | ||
| 
						 | 
					693f2e3625 | ||
| 
						 | 
					afab06d3f5 | ||
| 
						 | 
					8fb97c9acd | ||
| 
						 | 
					7312a38d9e | ||
| 
						 | 
					475e8d3d1d | ||
| 
						 | 
					c5f070d5d5 | ||
| 
						 | 
					1b9e855744 | ||
| 
						 | 
					f3b2ea53e2 | ||
| 
						 | 
					ed71769948 | ||
| 
						 | 
					e1c0a9c416 | ||
| 
						 | 
					0b8c5413a4 | ||
| 
						 | 
					c473d53898 | ||
| 
						 | 
					e8f8249319 | ||
| 
						 | 
					e2ced802b4 | ||
| 
						 | 
					9163658aa8 | ||
| 
						 | 
					d3a15e132d | ||
| 
						 | 
					47954f114c | ||
| 
						 | 
					3ef747c8b6 | ||
| 
						 | 
					75622f1ece | ||
| 
						 | 
					a052dd6532 | ||
| 
						 | 
					f96d1af449 | ||
| 
						 | 
					968766cad8 | ||
| 
						 | 
					652ae06bad | ||
| 
						 | 
					5cc2658cff | ||
| 
						 | 
					ddc38679ce | ||
| 
						 | 
					2f4335ec2b | ||
| 
						 | 
					02e0559477 | ||
| 
						 | 
					ada0e717fa | ||
| 
						 | 
					2c789c82be | ||
| 
						 | 
					d143dce03c | ||
| 
						 | 
					f9d183c209 | ||
| 
						 | 
					2ab0740785 | ||
| 
						 | 
					182cd19dea | ||
| 
						 | 
					61f00386ab | ||
| 
						 | 
					82f676c633 | ||
| 
						 | 
					5f24adda77 | ||
| 
						 | 
					2ae0352b0f | ||
| 
						 | 
					94805c84d1 | ||
| 
						 | 
					900f062d1f | ||
| 
						 | 
					6f2f534b58 | ||
| 
						 | 
					ba64c2cc8f | ||
| 
						 | 
					da6c44fc97 | ||
| 
						 | 
					29e62e487f | ||
| 
						 | 
					da0d33560f | ||
| 
						 | 
					ec28f9c12c | ||
| 
						 | 
					9d19fbc4fc | ||
| 
						 | 
					4e6480faf8 | ||
| 
						 | 
					aa5ae4841e | ||
| 
						 | 
					eb3d68c454 | ||
| 
						 | 
					c89f31def0 | ||
| 
						 | 
					ed5fae580e | ||
| 
						 | 
					d55141ed7a | ||
| 
						 | 
					a99ce1a574 | ||
| 
						 | 
					c687a3d5d5 | ||
| 
						 | 
					dfc3151925 | ||
| 
						 | 
					0fbffe7a71 | ||
| 
						 | 
					00dc2d7551 | ||
| 
						 | 
					037f6e73f1 | ||
| 
						 | 
					cf82439de8 | ||
| 
						 | 
					37fcd48f86 | ||
| 
						 | 
					27346c53b1 | ||
| 
						 | 
					e2491c45ab | ||
| 
						 | 
					cf9a88cad7 | ||
| 
						 | 
					398cd7276f | ||
| 
						 | 
					4f1cd8324c | ||
| 
						 | 
					873ddf7c0c | ||
| 
						 | 
					ed7f1d0bc6 | ||
| 
						 | 
					4aae637f6c | ||
| 
						 | 
					f6b9cd7f82 | ||
| 
						 | 
					8fbb2af392 | ||
| 
						 | 
					c5aba56c5b | ||
| 
						 | 
					705d0f5c8d | ||
| 
						 | 
					fd4ef69913 | ||
| 
						 | 
					844df66895 | ||
| 
						 | 
					834ac33a37 | ||
| 
						 | 
					4e9023f4d2 | ||
| 
						 | 
					d3a28e8b8d | ||
| 
						 | 
					0bd71d3b7e | ||
| 
						 | 
					d97322f0e6 | ||
| 
						 | 
					b52d512dfa | ||
| 
						 | 
					a3a2ff4cd9 | ||
| 
						 | 
					0d5b4f594d | ||
| 
						 | 
					5a1fd87ec1 | ||
| 
						 | 
					8c2786fff7 | ||
| 
						 | 
					8645c415cf | ||
| 
						 | 
					66ce343361 | ||
| 
						 | 
					700d86ea18 | ||
| 
						 | 
					1b9f21fdc8 | ||
| 
						 | 
					54bbde3c3f | ||
| 
						 | 
					f3031b106d | ||
| 
						 | 
					c14b337570 | ||
| 
						 | 
					e666c4599f | ||
| 
						 | 
					98cec7fc7b | ||
| 
						 | 
					fadd2246a0 | ||
| 
						 | 
					c78b4f1d3d | ||
| 
						 | 
					6e260c4093 | ||
| 
						 | 
					33862b90bb | ||
| 
						 | 
					36bad5cdfd | ||
| 
						 | 
					54f6451670 | ||
| 
						 | 
					f19d064087 | ||
| 
						 | 
					490967195a | ||
| 
						 | 
					25a1259911 | ||
| 
						 | 
					606c8048a0 | ||
| 
						 | 
					e66d863cd0 | ||
| 
						 | 
					f63f51dc22 | ||
| 
						 | 
					a069460015 | ||
| 
						 | 
					4eebab0d22 | ||
| 
						 | 
					55b12f8641 | ||
| 
						 | 
					40e5b9abeb | ||
| 
						 | 
					bc63a2ee0e | ||
| 
						 | 
					dcfb57c736 | ||
| 
						 | 
					2ee67f1dad | ||
| 
						 | 
					4af3184662 | ||
| 
						 | 
					e31047744a | ||
| 
						 | 
					f6eba601b0 | ||
| 
						 | 
					f796dc5c06 | ||
| 
						 | 
					476f09712c | ||
| 
						 | 
					50078051bd | ||
| 
						 | 
					db01746978 | ||
| 
						 | 
					fe0444b17e | ||
| 
						 | 
					63b815583b | ||
| 
						 | 
					16c9148220 | ||
| 
						 | 
					ca82ac1fee | ||
| 
						 | 
					9d92486cfb | ||
| 
						 | 
					aff0542844 | ||
| 
						 | 
					bb41fdb5ec | ||
| 
						 | 
					beab098d53 | ||
| 
						 | 
					3410aa1aa8 | ||
| 
						 | 
					f50b911a3f | ||
| 
						 | 
					02b95b7499 | ||
| 
						 | 
					2a948bd306 | ||
| 
						 | 
					c4d471552f | ||
| 
						 | 
					d4e35514ba | ||
| 
						 | 
					01fc834bc9 | ||
| 
						 | 
					f7f8d82aaa | ||
| 
						 | 
					3fd6b9f6d4 | ||
| 
						 | 
					4f17dfcd75 | ||
| 
						 | 
					a598524ad6 | ||
| 
						 | 
					83b4f49c0a | ||
| 
						 | 
					828ce10ce7 | ||
| 
						 | 
					8939adbad9 | ||
| 
						 | 
					60790aff6f | ||
| 
						 | 
					ff160dba54 | ||
| 
						 | 
					e19d0ef068 | ||
| 
						 | 
					f5f7dffdd1 | ||
| 
						 | 
					fb5b7317a7 | ||
| 
						 | 
					edd55d08f5 | ||
| 
						 | 
					457f692eab | ||
| 
						 | 
					83743ad039 | ||
| 
						 | 
					163f5b236c | ||
| 
						 | 
					e077b5452f | ||
| 
						 | 
					513c01a591 | ||
| 
						 | 
					d9a2a89a17 | ||
| 
						 | 
					31939f1544 | ||
| 
						 | 
					11ce33a71d | ||
| 
						 | 
					9acef3bbd7 | ||
| 
						 | 
					164bc7dae8 | ||
| 
						 | 
					f59c941950 | ||
| 
						 | 
					0239876511 | ||
| 
						 | 
					93c929e411 | ||
| 
						 | 
					c2dac35a02 | ||
| 
						 | 
					a9cfd20da7 | ||
| 
						 | 
					727ef76ebd | ||
| 
						 | 
					22e6c2524e | ||
| 
						 | 
					bca52f7d4e | ||
| 
						 | 
					48c36fdb2a | ||
| 
						 | 
					6d8cbdcb53 | ||
| 
						 | 
					9b2042fac3 | ||
| 
						 | 
					54a7ea6f36 | ||
| 
						 | 
					816d785721 | ||
| 
						 | 
					742b139f54 | ||
| 
						 | 
					0e2f5ec2d2 | ||
| 
						 | 
					3b30121bd9 | ||
| 
						 | 
					9ee789e6c3 | ||
| 
						 | 
					8c5e375c8e | ||
| 
						 | 
					b9d2d20086 | ||
| 
						 | 
					b9d7ca9748 | ||
| 
						 | 
					5b194dfbd5 | ||
| 
						 | 
					7f6af7d9db | ||
| 
						 | 
					42b2b6a2d5 | ||
| 
						 | 
					d1465bac90 | ||
| 
						 | 
					3bbb0212f3 | ||
| 
						 | 
					a5db6fa576 | ||
| 
						 | 
					9236b5b013 | ||
| 
						 | 
					535fba4907 | ||
| 
						 | 
					7e4140f73f | ||
| 
						 | 
					1ae0a83bdd | ||
| 
						 | 
					7ae46c6761 | ||
| 
						 | 
					d584fd6b66 | ||
| 
						 | 
					54dbdd9837 | ||
| 
						 | 
					9d6c32d6d1 | ||
| 
						 | 
					26851b6b42 | ||
| 
						 | 
					ea5240a5ed | ||
| 
						 | 
					ce8a202831 | ||
| 
						 | 
					eec7968f18 | ||
| 
						 | 
					0ece1d304d | ||
| 
						 | 
					1cc087fe4f | ||
| 
						 | 
					7f0f9f1934 | ||
| 
						 | 
					040c687ce4 | ||
| 
						 | 
					8f09a154e3 | ||
| 
						 | 
					cd1226bc6a | ||
| 
						 | 
					7a04fdd87f | ||
| 
						 | 
					4e7566579e | ||
| 
						 | 
					fba1cfa06d | ||
| 
						 | 
					138f970e6e | ||
| 
						 | 
					110c6f72ec | ||
| 
						 | 
					27f7d430ce | ||
| 
						 | 
					5964e95c0a | ||
| 
						 | 
					1a0c1f9052 | ||
| 
						 | 
					f78ae9c0f2 | ||
| 
						 | 
					e072e16e92 | ||
| 
						 | 
					1774e22d6f | ||
| 
						 | 
					7a79b5601a | ||
| 
						 | 
					26abc8f01a | ||
| 
						 | 
					74b0c41e47 | ||
| 
						 | 
					5924c21608 | ||
| 
						 | 
					bbfbd4b270 | ||
| 
						 | 
					c93fbfaebc | ||
| 
						 | 
					88ec5a637f | ||
| 
						 | 
					0b1c00abeb | ||
| 
						 | 
					75fcbb43a7 | ||
| 
						 | 
					e4e049e489 | ||
| 
						 | 
					225e35bd36 | ||
| 
						 | 
					9f81f23742 | ||
| 
						 | 
					0ae4ad9e9f | ||
| 
						 | 
					721688c2f8 | ||
| 
						 | 
					a109220107 | ||
| 
						 | 
					4a4a04622e | ||
| 
						 | 
					d6fd88fffd | ||
| 
						 | 
					e96133e4cf | ||
| 
						 | 
					f65a75786b | ||
| 
						 | 
					a157379adc | ||
| 
						 | 
					1ed3815650 | ||
| 
						 | 
					0b55368306 | ||
| 
						 | 
					27310553b1 | ||
| 
						 | 
					43eb3b0130 | ||
| 
						 | 
					78490b9cc2 | ||
| 
						 | 
					0a861ab7f3 | ||
| 
						 | 
					7b36590b17 | ||
| 
						 | 
					a8b728445c | ||
| 
						 | 
					af0f0f3e8f | ||
| 
						 | 
					86ccb91ddb | ||
| 
						 | 
					8d570498a2 | ||
| 
						 | 
					4c771796d5 | ||
| 
						 | 
					8e4552ed30 | ||
| 
						 | 
					d6df2b281f | ||
| 
						 | 
					bc4a5ed341 | ||
| 
						 | 
					6fcf735497 | ||
| 
						 | 
					b5f96e8818 | ||
| 
						 | 
					3ae70939ba | ||
| 
						 | 
					d5157a6244 | ||
| 
						 | 
					c433d72593 | ||
| 
						 | 
					68b42986cb | ||
| 
						 | 
					57544ee224 | ||
| 
						 | 
					83b23ed967 | ||
| 
						 | 
					4342c5c1a0 | ||
| 
						 | 
					16b1b03543 | ||
| 
						 | 
					e6526fbf4d | ||
| 
						 | 
					d07e7c32c2 | ||
| 
						 | 
					8152d88799 | ||
| 
						 | 
					8f35294c1b | ||
| 
						 | 
					4ce4884a5b | ||
| 
						 | 
					db598fbce2 | ||
| 
						 | 
					8382ec5d37 | ||
| 
						 | 
					0998cfaadd | ||
| 
						 | 
					2bdcfbd7a3 | ||
| 
						 | 
					c4448f60d6 | ||
| 
						 | 
					63b6fe2bf6 | ||
| 
						 | 
					f85b68cd49 | ||
| 
						 | 
					46b695d850 | ||
| 
						 | 
					5679bcce07 | ||
| 
						 | 
					6076f21f5e | ||
| 
						 | 
					24692fc5d7 | ||
| 
						 | 
					4390d66179 | ||
| 
						 | 
					be34231656 | ||
| 
						 | 
					d678cc07ed | ||
| 
						 | 
					54e73364f1 | ||
| 
						 | 
					6dd6da6005 | ||
| 
						 | 
					c6b220d933 | ||
| 
						 | 
					03eeb07152 | ||
| 
						 | 
					1a15c89988 | ||
| 
						 | 
					d1c5c168b5 | ||
| 
						 | 
					d0a4bd00b6 | ||
| 
						 | 
					423b1a840c | ||
| 
						 | 
					931756b833 | ||
| 
						 | 
					a47789e849 | ||
| 
						 | 
					39e76bc454 | ||
| 
						 | 
					e5b0508a14 | ||
| 
						 | 
					961b565690 | ||
| 
						 | 
					c4d00669a0 | ||
| 
						 | 
					142cdf5ec9 | ||
| 
						 | 
					d6cab100fa | ||
| 
						 | 
					81bd0446a9 | ||
| 
						 | 
					520b76ffd9 | ||
| 
						 | 
					1e2b14e9ca | ||
| 
						 | 
					4fe70c7812 | ||
| 
						 | 
					1c2d141238 | ||
| 
						 | 
					32e75dd3f0 | ||
| 
						 | 
					21eb91c79e | ||
| 
						 | 
					abfc6a3a9b | ||
| 
						 | 
					5cc5ec1bba | ||
| 
						 | 
					f80153e20b | ||
| 
						 | 
					33b34a9d8f | ||
| 
						 | 
					9b94f215b1 | ||
| 
						 | 
					8b5bcef798 | ||
| 
						 | 
					ea17e1f00f | ||
| 
						 | 
					543105ac17 | ||
| 
						 | 
					3789284807 | ||
| 
						 | 
					be9bec9bc7 | ||
| 
						 | 
					9c35452842 | ||
| 
						 | 
					69104cdf34 | ||
| 
						 | 
					dfefdb41f7 | ||
| 
						 | 
					cd6ab56da0 | ||
| 
						 | 
					c988c9b839 | ||
| 
						 | 
					bff8e1dddb | ||
| 
						 | 
					641e6ef2cb | ||
| 
						 | 
					9e9e8cb6a8 | ||
| 
						 | 
					f118514501 | ||
| 
						 | 
					39c4b7092c | ||
| 
						 | 
					c7e7fc3ee4 | ||
| 
						 | 
					786b0075d5 | ||
| 
						 | 
					fb10590910 | ||
| 
						 | 
					abf21308d2 | ||
| 
						 | 
					8c84b677e2 | ||
| 
						 | 
					d5ef144222 | ||
| 
						 | 
					741dae576f | ||
| 
						 | 
					59ade20500 | ||
| 
						 | 
					c11b9af75e | ||
| 
						 | 
					08a54f6e6a | ||
| 
						 | 
					8305477157 | ||
| 
						 | 
					e8cc7de4f4 | ||
| 
						 | 
					3b6aa36c77 | ||
| 
						 | 
					03829b2b47 | ||
| 
						 | 
					87c9c659de | ||
| 
						 | 
					751ff1d376 | ||
| 
						 | 
					d3ae5b1c8a | ||
| 
						 | 
					0f3879455b | ||
| 
						 | 
					0c7d61ee0e | ||
| 
						 | 
					78951e7711 | ||
| 
						 | 
					9ba4cc007b | ||
| 
						 | 
					7b5a6c7a62 | ||
| 
						 | 
					44deca977d | ||
| 
						 | 
					536b73e78e | ||
| 
						 | 
					940767b03f | ||
| 
						 | 
					d4a47a5778 | ||
| 
						 | 
					b24668626e | ||
| 
						 | 
					ea3675b5b6 | ||
| 
						 | 
					c554155b58 | ||
| 
						 | 
					a1d12daed2 | ||
| 
						 | 
					6f528cac5a | ||
| 
						 | 
					10a66ad389 | ||
| 
						 | 
					9d80973ea1 | ||
| 
						 | 
					e986704d24 | ||
| 
						 | 
					ce06265a37 | ||
| 
						 | 
					e4fb312330 | ||
| 
						 | 
					439909a068 | ||
| 
						 | 
					1296e72d1d | ||
| 
						 | 
					d177e6180d | ||
| 
						 | 
					f077cf68af | ||
| 
						 | 
					48f1fa7482 | ||
| 
						 | 
					a69cc10af1 | ||
| 
						 | 
					aa9d896b0d | ||
| 
						 | 
					2dd060d94e | ||
| 
						 | 
					42a559163d | ||
| 
						 | 
					546490c00e | ||
| 
						 | 
					3285eb336c | ||
| 
						 | 
					409a5de586 | ||
| 
						 | 
					02da5bcd83 | ||
| 
						 | 
					84b1e84af1 | ||
| 
						 | 
					5250725ba5 | ||
| 
						 | 
					9ed1fa4813 | ||
| 
						 | 
					500df82a96 | ||
| 
						 | 
					84d5ad6181 | ||
| 
						 | 
					96c15b8aad | ||
| 
						 | 
					4fc2bf07b5 | ||
| 
						 | 
					e8e0e3716a | ||
| 
						 | 
					bc441b739b | ||
| 
						 | 
					2007fe63f8 | ||
| 
						 | 
					ee435c0d9c | ||
| 
						 | 
					e6539fe22d | ||
| 
						 | 
					ba5df66a8b | ||
| 
						 | 
					12d4e7b8c8 | ||
| 
						 | 
					3f691235da | ||
| 
						 | 
					bba2cb3ada | ||
| 
						 | 
					86a925b27e | ||
| 
						 | 
					52c4c51f02 | ||
| 
						 | 
					954d8e4f79 | ||
| 
						 | 
					767712fa62 | ||
| 
						 | 
					b575dff21a | ||
| 
						 | 
					90e8a3102b | ||
| 
						 | 
					b35ca7b257 | ||
| 
						 | 
					879650b866 | ||
| 
						 | 
					176f31ddec | ||
| 
						 | 
					fe14ee96db | ||
| 
						 | 
					0102bb94cb | ||
| 
						 | 
					57376542a0 | ||
| 
						 | 
					57bc7769b7 | ||
| 
						 | 
					b8dc9693a7 | ||
| 
						 | 
					0461b8c90b | ||
| 
						 | 
					6ac26a5ce5 | ||
| 
						 | 
					155bd1137e | ||
| 
						 | 
					f0dc08e656 | ||
| 
						 | 
					e9ec63961b | ||
| 
						 | 
					0185803cc2 | ||
| 
						 | 
					bd8e228d60 | ||
| 
						 | 
					5c9a9c9c33 | ||
| 
						 | 
					bad99f6a9d | ||
| 
						 | 
					63ff3e83fc | ||
| 
						 | 
					5600a9cba1 | ||
| 
						 | 
					607ae30be8 | ||
| 
						 | 
					b4f43344d5 | ||
| 
						 | 
					c8c5cec1f9 | ||
| 
						 | 
					37d9503a67 | ||
| 
						 | 
					66ecdf3bfb | ||
| 
						 | 
					a1033894d7 | ||
| 
						 | 
					7841edc9c1 | ||
| 
						 | 
					132eaa59da | ||
| 
						 | 
					5562cfaca4 | ||
| 
						 | 
					0480574310 | ||
| 
						 | 
					c8252b71b5 | ||
| 
						 | 
					94949a50aa | ||
| 
						 | 
					0214893e6a | ||
| 
						 | 
					5be4a42e99 | ||
| 
						 | 
					f2aa055ec6 | ||
| 
						 | 
					62e3163b1b | ||
| 
						 | 
					8214e74f76 | ||
| 
						 | 
					542a1b1a2e | ||
| 
						 | 
					5672e3a321 | ||
| 
						 | 
					fbbfd86b67 | ||
| 
						 | 
					d8cbc93585 | ||
| 
						 | 
					dab0aaa612 | ||
| 
						 | 
					6fcf1dbc50 | ||
| 
						 | 
					352df99302 | ||
| 
						 | 
					5b0b0e98ce | ||
| 
						 | 
					a3063b37ef | ||
| 
						 | 
					d5234c7b3a | ||
| 
						 | 
					cf13eaf1a1 | ||
| 
						 | 
					77e270d10e | ||
| 
						 | 
					c893bffae7 | ||
| 
						 | 
					988e8458ad | ||
| 
						 | 
					cc811b1d7e | ||
| 
						 | 
					758f942b88 | ||
| 
						 | 
					a81d9af7f7 | ||
| 
						 | 
					26e9724458 | ||
| 
						 | 
					4879ec7bf3 | ||
| 
						 | 
					b653327d47 | ||
| 
						 | 
					4cadedef57 | ||
| 
						 | 
					27068df7e0 | ||
| 
						 | 
					b12753dffc | ||
| 
						 | 
					79221bc265 | ||
| 
						 | 
					1dc94d4dcc | ||
| 
						 | 
					5a2485ce12 | ||
| 
						 | 
					ffa49dc3d9 | ||
| 
						 | 
					142398d3a7 | ||
| 
						 | 
					b7bbac72c4 | ||
| 
						 | 
					c1269c81fd | ||
| 
						 | 
					6c0118ee8e | ||
| 
						 | 
					765ca5ea06 | ||
| 
						 | 
					794a386af3 | ||
| 
						 | 
					97333eaff7 | ||
| 
						 | 
					e270cf9c5e | ||
| 
						 | 
					b088a2d3f9 | ||
| 
						 | 
					7e38616d1f | ||
| 
						 | 
					b9447ec1bc | ||
| 
						 | 
					85d686e723 | ||
| 
						 | 
					2d3de726c5 | ||
| 
						 | 
					4989f0599f | ||
| 
						 | 
					73bec6d4b7 | ||
| 
						 | 
					e4b52ac353 | ||
| 
						 | 
					abd22c9c46 | ||
| 
						 | 
					ba729265a8 | ||
| 
						 | 
					e4b95737f0 | ||
| 
						 | 
					9ec1d35f29 | ||
| 
						 | 
					cf56663fb7 | ||
| 
						 | 
					c13eba970c | ||
| 
						 | 
					ea513641d0 | ||
| 
						 | 
					4309b740ce | ||
| 
						 | 
					8537943e8b | ||
| 
						 | 
					a8f5b2ed50 | ||
| 
						 | 
					33075f229e | ||
| 
						 | 
					28f573a28d | ||
| 
						 | 
					e2c9c91b5b | ||
| 
						 | 
					d42d2d1ab6 | ||
| 
						 | 
					65b254e8c0 | ||
| 
						 | 
					82871eaa17 | ||
| 
						 | 
					24893ca999 | ||
| 
						 | 
					c0d4f622eb | ||
| 
						 | 
					27a9bf17c7 | ||
| 
						 | 
					37c660ff9b | ||
| 
						 | 
					a004b06237 | ||
| 
						 | 
					98eab43915 | ||
| 
						 | 
					772ec4135c | ||
| 
						 | 
					ef03883edd | ||
| 
						 | 
					0e9035ac98 | ||
| 
						 | 
					636631cdd5 | ||
| 
						 | 
					4e5d3a7f98 | ||
| 
						 | 
					02ff8c1b66 | ||
| 
						 | 
					379e568950 | ||
| 
						 | 
					c09a297892 | ||
| 
						 | 
					0b0be7a381 | ||
| 
						 | 
					2619676256 | ||
| 
						 | 
					33cc07f79a | ||
| 
						 | 
					83df7b20c4 | ||
| 
						 | 
					c029841e36 | ||
| 
						 | 
					90c60eee9d | ||
| 
						 | 
					bfa3555081 | ||
| 
						 | 
					8e1e238219 | ||
| 
						 | 
					5d780babe3 | ||
| 
						 | 
					88c1fec923 | ||
| 
						 | 
					5cd48abf9f | ||
| 
						 | 
					981469c80d | ||
| 
						 | 
					db5006df04 | ||
| 
						 | 
					b5a4fd98a5 | ||
| 
						 | 
					3d6a84c42a | ||
| 
						 | 
					bd573ee31a | ||
| 
						 | 
					5fe11c7533 | ||
| 
						 | 
					20dc821092 | ||
| 
						 | 
					a1d57849b3 | ||
| 
						 | 
					0b13e9f055 | ||
| 
						 | 
					6d85cd36e2 | ||
| 
						 | 
					96f7065f63 | ||
| 
						 | 
					f3c22ef10d | ||
| 
						 | 
					a85bef1899 | ||
| 
						 | 
					bb3e67f315 | ||
| 
						 | 
					10ac28e26d | ||
| 
						 | 
					c0a93e31ab | ||
| 
						 | 
					8f94b2010f | ||
| 
						 | 
					2e60ea7634 | ||
| 
						 | 
					d48e6a47bd | ||
| 
						 | 
					4e78074b39 | ||
| 
						 | 
					40b676aa4f | ||
| 
						 | 
					b637670f03 | ||
| 
						 | 
					bd1217a176 | ||
| 
						 | 
					7e4e392b07 | ||
| 
						 | 
					da45180de4 | ||
| 
						 | 
					82516e3baf | ||
| 
						 | 
					c1862f9136 | ||
| 
						 | 
					30e3c99d9f | ||
| 
						 | 
					9048c7245b | ||
| 
						 | 
					02bf9a151a | ||
| 
						 | 
					0f618d0576 | ||
| 
						 | 
					d3b5cb5343 | ||
| 
						 | 
					624feae8af | ||
| 
						 | 
					246f2b016b | ||
| 
						 | 
					97e6bf6b22 | ||
| 
						 | 
					04da4558dd | ||
| 
						 | 
					118204f9a7 | ||
| 
						 | 
					60d16c258a | ||
| 
						 | 
					0c3426da86 | ||
| 
						 | 
					9b3f03d5a2 | ||
| 
						 | 
					9abff96b2f | ||
| 
						 | 
					c56dbabcfd | ||
| 
						 | 
					30167ace51 | ||
| 
						 | 
					722d17cbac | ||
| 
						 | 
					b01db3b279 | ||
| 
						 | 
					59b846c515 | ||
| 
						 | 
					2af5880cfd | ||
| 
						 | 
					42bf2a5cdc | ||
| 
						 | 
					80bcbaa02f | ||
| 
						 | 
					ff3fa159d0 | ||
| 
						 | 
					7c4e24af38 | ||
| 
						 | 
					726c223143 | ||
| 
						 | 
					c440333535 | ||
| 
						 | 
					5322333b7b | ||
| 
						 | 
					59ae8c9419 | ||
| 
						 | 
					e98823d847 | ||
| 
						 | 
					0bdd2da5d2 | ||
| 
						 | 
					d87a127837 | ||
| 
						 | 
					2f09524501 | ||
| 
						 | 
					06492aef01 | ||
| 
						 | 
					0062e618f0 | ||
| 
						 | 
					c00cee00fd | ||
| 
						 | 
					8228f302dd | ||
| 
						 | 
					018c56fdca | ||
| 
						 | 
					282382cc14 | ||
| 
						 | 
					d745af4b0c | ||
| 
						 | 
					44ea41cfff | ||
| 
						 | 
					acad5755a2 | ||
| 
						 | 
					0a3aece096 | ||
| 
						 | 
					bc35d57932 | ||
| 
						 | 
					28b958f732 | ||
| 
						 | 
					dd1a3c26ba | ||
| 
						 | 
					4e59cd3bb6 | ||
| 
						 | 
					5f988984e4 | ||
| 
						 | 
					0748cdc7f1 | ||
| 
						 | 
					a74333f905 | ||
| 
						 | 
					365e14622a | ||
| 
						 | 
					8ec16ce711 | ||
| 
						 | 
					b2c71c489d | ||
| 
						 | 
					0e4aa0d2d2 | ||
| 
						 | 
					08cb96bba2 | ||
| 
						 | 
					2ce906cee7 | ||
| 
						 | 
					23b1ff0970 | ||
| 
						 | 
					c2777386fc | ||
| 
						 | 
					cdc5b4a41e | ||
| 
						 | 
					52e5e5c2ba | ||
| 
						 | 
					7a48984dd5 | ||
| 
						 | 
					c653b56937 | ||
| 
						 | 
					96f2552c8a | ||
| 
						 | 
					04aff67de4 | ||
| 
						 | 
					e5658b9331 | ||
| 
						 | 
					ac2336adb0 | ||
| 
						 | 
					1a6356b2ca | ||
| 
						 | 
					b05645902a | ||
| 
						 | 
					5da8738fea | ||
| 
						 | 
					54d4f8c320 | ||
| 
						 | 
					f9f6c92c52 | ||
| 
						 | 
					98753dd088 | ||
| 
						 | 
					c76153f31d | ||
| 
						 | 
					881cb8b108 | ||
| 
						 | 
					8cbb91c857 | ||
| 
						 | 
					66bca12856 | ||
| 
						 | 
					aaae0aa48b | ||
| 
						 | 
					256c5769b4 | ||
| 
						 | 
					0535d3b25f | ||
| 
						 | 
					b36ea7636b | ||
| 
						 | 
					62be003150 | ||
| 
						 | 
					1f7238a434 | ||
| 
						 | 
					364c7cd621 | ||
| 
						 | 
					9d5390a049 | ||
| 
						 | 
					bda2fa364d | ||
| 
						 | 
					2944c9c665 | ||
| 
						 | 
					129bd04329 | ||
| 
						 | 
					caa7b2ad4f | ||
| 
						 | 
					c14b4d6b38 | ||
| 
						 | 
					a6816db813 | ||
| 
						 | 
					1d76d78858 | ||
| 
						 | 
					0382c95e4d | ||
| 
						 | 
					fb70607064 | ||
| 
						 | 
					fda20f08d0 | ||
| 
						 | 
					959ba907df | ||
| 
						 | 
					afd41c9fc7 | ||
| 
						 | 
					dfc3b51e78 | ||
| 
						 | 
					2964ba8c6a | ||
| 
						 | 
					7f2e024e78 | ||
| 
						 | 
					c0cc5c3059 | ||
| 
						 | 
					193e764c0b | ||
| 
						 | 
					6b20c70b52 | ||
| 
						 | 
					e68cb95d84 | ||
| 
						 | 
					448666239c | ||
| 
						 | 
					69c5d47bd4 | ||
| 
						 | 
					c0ac323360 | ||
| 
						 | 
					daf5fafced | ||
| 
						 | 
					a0cd3ca62b | ||
| 
						 | 
					fa47b4d8b8 | ||
| 
						 | 
					4a9476dd8d | ||
| 
						 | 
					661ef5eead | ||
| 
						 | 
					8d2511688d | ||
| 
						 | 
					d38ef273cc | ||
| 
						 | 
					969511d2cb | ||
| 
						 | 
					989f48d8c1 | ||
| 
						 | 
					85ca752e33 | ||
| 
						 | 
					f8ea5cb579 | ||
| 
						 | 
					17244d193b | ||
| 
						 | 
					360e506710 | ||
| 
						 | 
					09ad2458b8 | ||
| 
						 | 
					df77232bdc | ||
| 
						 | 
					2ae5bd9bb6 | ||
| 
						 | 
					ad200a864e | ||
| 
						 | 
					9d1b5614f9 | ||
| 
						 | 
					416b19c6fc | ||
| 
						 | 
					5b7249f302 | ||
| 
						 | 
					8ce7348625 | ||
| 
						 | 
					699543e4a2 | ||
| 
						 | 
					4309c4ad46 | ||
| 
						 | 
					3f1cbad2e7 | ||
| 
						 | 
					4ebb5293fc | ||
| 
						 | 
					2814c62915 | ||
| 
						 | 
					876e96fdbf | ||
| 
						 | 
					e78a012305 | ||
| 
						 | 
					f68843e3d7 | ||
| 
						 | 
					19a97a1df0 | ||
| 
						 | 
					72997517b0 | ||
| 
						 | 
					2a9fca82d2 | ||
| 
						 | 
					55b1516770 | ||
| 
						 | 
					3cc9a89dda | ||
| 
						 | 
					4d1e5535b2 | ||
| 
						 | 
					46a0d4fbcb | ||
| 
						 | 
					04945fda66 | ||
| 
						 | 
					1954767b45 | ||
| 
						 | 
					97e2e71ef9 | ||
| 
						 | 
					0bc81d5135 | ||
| 
						 | 
					c8a647846c | ||
| 
						 | 
					90ce14cd84 | ||
| 
						 | 
					28e276f139 | ||
| 
						 | 
					f22e1e4dd2 | ||
| 
						 | 
					e0d769caa2 | ||
| 
						 | 
					4a37c48789 | ||
| 
						 | 
					ad492c3601 | ||
| 
						 | 
					6983b4615c | ||
| 
						 | 
					0c055b201e | ||
| 
						 | 
					339e4dd3ef | ||
| 
						 | 
					d57084f235 | ||
| 
						 | 
					7eed0fc041 | ||
| 
						 | 
					7a1c6aa2a3 | ||
| 
						 | 
					4a2e36b19e | ||
| 
						 | 
					1c2018f37f | ||
| 
						 | 
					948dcdb81b | ||
| 
						 | 
					08101d72ce | ||
| 
						 | 
					04572965ea | ||
| 
						 | 
					1832f5e751 | ||
| 
						 | 
					75c4028585 | ||
| 
						 | 
					85f258d1c2 | ||
| 
						 | 
					d3f56a69fb | ||
| 
						 | 
					bfbc667397 | ||
| 
						 | 
					49be7042dc | ||
| 
						 | 
					44fcd3ef3e | ||
| 
						 | 
					cb284033f5 | ||
| 
						 | 
					21cde7a41c | ||
| 
						 | 
					ef9d3a10c3 | ||
| 
						 | 
					8598289936 | ||
| 
						 | 
					20c9a50710 | ||
| 
						 | 
					35dde7480f | ||
| 
						 | 
					5e42f9ab46 | ||
| 
						 | 
					7acf00a633 | ||
| 
						 | 
					69339d254b | ||
| 
						 | 
					ec517d25e8 | ||
| 
						 | 
					5b9aa0e474 | ||
| 
						 | 
					475cc45a61 | ||
| 
						 | 
					21fa937c9f | ||
| 
						 | 
					bae500aa21 | ||
| 
						 | 
					5534b7f133 | ||
| 
						 | 
					163d6401c5 | ||
| 
						 | 
					fc24169eaf | ||
| 
						 | 
					ce9b1b0573 | ||
| 
						 | 
					0a2407a851 | ||
| 
						 | 
					0c78046356 | ||
| 
						 | 
					4b8e01a22f | ||
| 
						 | 
					76a03d568e | ||
| 
						 | 
					a882c80e6f | ||
| 
						 | 
					7c03f26393 | ||
| 
						 | 
					5de00c254d | ||
| 
						 | 
					9ff9e406ea | ||
| 
						 | 
					d7b612e737 | ||
| 
						 | 
					b5beb13abb | ||
| 
						 | 
					d95b69b32c | ||
| 
						 | 
					ceb12d3074 | ||
| 
						 | 
					1dbfa26b5a | ||
| 
						 | 
					59c0dd56ab | ||
| 
						 | 
					342a584c2b | ||
| 
						 | 
					dcf19c173c | ||
| 
						 | 
					718d8a931d | ||
| 
						 | 
					e235000169 | ||
| 
						 | 
					39db27cb83 | ||
| 
						 | 
					821951b851 | ||
| 
						 | 
					cc81432b5b | ||
| 
						 | 
					35ba1f17dc | ||
| 
						 | 
					ea8e0cc7c2 | ||
| 
						 | 
					c71414b3a9 | ||
| 
						 | 
					542e010aa5 | ||
| 
						 | 
					cb661c56b0 | ||
| 
						 | 
					84ce9aa177 | ||
| 
						 | 
					e904bd0ddc | ||
| 
						 | 
					4c94c028a7 | ||
| 
						 | 
					e9883d285d | ||
| 
						 | 
					88a908e50d | ||
| 
						 | 
					8d6ad9e39d | ||
| 
						 | 
					d7de7bcf3e | ||
| 
						 | 
					aa18245f7e | ||
| 
						 | 
					316bfb77b5 | ||
| 
						 | 
					cbdda5cc87 | ||
| 
						 | 
					4e356d9876 | ||
| 
						 | 
					9b58214e4a | ||
| 
						 | 
					ff3ab1699b | ||
| 
						 | 
					3c801fa460 | ||
| 
						 | 
					8eeefabf32 | ||
| 
						 | 
					1c9202004b | ||
| 
						 | 
					1004c99c29 | ||
| 
						 | 
					214b8b998a | ||
| 
						 | 
					2ef9e7efe6 | ||
| 
						 | 
					c9ecb1edd8 | ||
| 
						 | 
					449598e723 | ||
| 
						 | 
					8baf5fdca0 | ||
| 
						 | 
					5201cb5acb | ||
| 
						 | 
					aafafa314d | ||
| 
						 | 
					ab79ac44d5 | ||
| 
						 | 
					49e42a1f60 | ||
| 
						 | 
					e286dfe6ed | ||
| 
						 | 
					9cd16b1dea | ||
| 
						 | 
					17e3b273e6 | ||
| 
						 | 
					12cd28258d | ||
| 
						 | 
					c93c8d1123 | ||
| 
						 | 
					9564997222 | ||
| 
						 | 
					f968059c67 | ||
| 
						 | 
					d5bf2e06b3 | ||
| 
						 | 
					0b900a5e93 | ||
| 
						 | 
					09867a47a4 | ||
| 
						 | 
					bbd6c8bd16 | ||
| 
						 | 
					00f76ad0df | ||
| 
						 | 
					9d5c42b61b | ||
| 
						 | 
					4b70367430 | ||
| 
						 | 
					8e7a8b68d2 | ||
| 
						 | 
					ce9cbfc815 | ||
| 
						 | 
					4d625031a5 | ||
| 
						 | 
					26a60b2eb0 | ||
| 
						 | 
					07d09fdb66 | ||
| 
						 | 
					a92a9f02fb | ||
| 
						 | 
					b65d3741b3 | ||
| 
						 | 
					fcf8f4d453 | ||
| 
						 | 
					13617646da | ||
| 
						 | 
					4553ed276b | ||
| 
						 | 
					7a3565009e | ||
| 
						 | 
					62966f3829 | ||
| 
						 | 
					c445142505 | ||
| 
						 | 
					9f3864fde3 | ||
| 
						 | 
					db186beee4 | ||
| 
						 | 
					1f1a32541f | ||
| 
						 | 
					f70ddce761 | ||
| 
						 | 
					0465313e70 | ||
| 
						 | 
					e29246cb17 | ||
| 
						 | 
					8d2563f136 | ||
| 
						 | 
					146e6776f5 | ||
| 
						 | 
					21996c6d8e | ||
| 
						 | 
					fcc5349156 | ||
| 
						 | 
					a45051fbfc | ||
| 
						 | 
					1a07628209 | ||
| 
						 | 
					814af7e175 | ||
| 
						 | 
					ec9f67f610 | ||
| 
						 | 
					bf683ec609 | ||
| 
						 | 
					30c08f2e3d | ||
| 
						 | 
					e851895f04 | ||
| 
						 | 
					9f100cf344 | ||
| 
						 | 
					a5a01e9051 | ||
| 
						 | 
					6be4688bdc | ||
| 
						 | 
					a2049ba394 | ||
| 
						 | 
					717c5cdcc7 | ||
| 
						 | 
					a8239afc86 | ||
| 
						 | 
					bb38cd49e4 | ||
| 
						 | 
					0654bba39f | ||
| 
						 | 
					4d77d5b316 | ||
| 
						 | 
					1cbdbcd587 | ||
| 
						 | 
					7e201e9f73 | ||
| 
						 | 
					2f98abbcb6 | ||
| 
						 | 
					270fa8aeda | ||
| 
						 | 
					9fc866c5eb | ||
| 
						 | 
					4329db3726 | ||
| 
						 | 
					6f7ac8e1b0 | ||
| 
						 | 
					b0e88fb11b | ||
| 
						 | 
					04c71cd725 | ||
| 
						 | 
					a1457874c6 | ||
| 
						 | 
					d64b16ab25 | ||
| 
						 | 
					18be6c4116 | ||
| 
						 | 
					f30b793779 | ||
| 
						 | 
					dad1535f7a | ||
| 
						 | 
					f60e6604b8 | ||
| 
						 | 
					94ea9c84c5 | ||
| 
						 | 
					0d3f2ccb62 | ||
| 
						 | 
					5c72869563 | ||
| 
						 | 
					14676ffcd6 | ||
| 
						 | 
					e5a08ce44d | ||
| 
						 | 
					712419b73a | ||
| 
						 | 
					b9b6e14b4a | ||
| 
						 | 
					7627efc92f | ||
| 
						 | 
					442d42300b | ||
| 
						 | 
					cd7f458e28 | ||
| 
						 | 
					75e1c74724 | ||
| 
						 | 
					ea01493df0 | ||
| 
						 | 
					5db2b5e573 | ||
| 
						 | 
					323edf1908 | ||
| 
						 | 
					005ef84c5d | ||
| 
						 | 
					f92570f00a | ||
| 
						 | 
					9314e366c8 | ||
| 
						 | 
					ba9cf37d59 | ||
| 
						 | 
					b22c7a1cfb | ||
| 
						 | 
					99efc0f50f | ||
| 
						 | 
					d979d09ccc | ||
| 
						 | 
					2581aacd52 | ||
| 
						 | 
					c17810b087 | ||
| 
						 | 
					e0b2073fd4 | ||
| 
						 | 
					123e5dfc3a | ||
| 
						 | 
					533a0c4ce7 | ||
| 
						 | 
					0edad88a31 | ||
| 
						 | 
					4ccfe5f49b | ||
| 
						 | 
					e189872486 | ||
| 
						 | 
					fdaea9ed2e | ||
| 
						 | 
					5daec7ea0e | ||
| 
						 | 
					e9224c7177 | ||
| 
						 | 
					e90e719739 | ||
| 
						 | 
					7ba666fa0e | ||
| 
						 | 
					86a62cf15c | ||
| 
						 | 
					b11405723d | ||
| 
						 | 
					4c3a2b4f8a | ||
| 
						 | 
					93f3decc4f | ||
| 
						 | 
					bbf8198feb | ||
| 
						 | 
					1c799131ae | ||
| 
						 | 
					b1d4b48d39 | ||
| 
						 | 
					bed4559052 | ||
| 
						 | 
					3dda0dd2a2 | ||
| 
						 | 
					7f87c1c0fc | ||
| 
						 | 
					fa63a98ad8 | ||
| 
						 | 
					1fc73fef48 | ||
| 
						 | 
					aaf7b47abe | ||
| 
						 | 
					af0b30e77c | ||
| 
						 | 
					90543bd07a | ||
| 
						 | 
					9494e3cc40 | ||
| 
						 | 
					a272f7eb08 | ||
| 
						 | 
					43ecece595 | ||
| 
						 | 
					b3dd9f3bb5 | ||
| 
						 | 
					4ba8cabf62 | ||
| 
						 | 
					bb9104f0ee | ||
| 
						 | 
					f68bb3c51f | ||
| 
						 | 
					6d4ac67ac1 | ||
| 
						 | 
					ae0b7667a9 | ||
| 
						 | 
					b84d5b72f1 | ||
| 
						 | 
					8cbccedf7c | ||
| 
						 | 
					fabf7d3a67 | ||
| 
						 | 
					1c24347062 | ||
| 
						 | 
					54307ce955 | ||
| 
						 | 
					9ef888130d | ||
| 
						 | 
					2589b74fd8 | ||
| 
						 | 
					4387f47832 | ||
| 
						 | 
					d9090acdfb | ||
| 
						 | 
					38d6e4bb50 | ||
| 
						 | 
					ced621e3c2 | ||
| 
						 | 
					72951df799 | ||
| 
						 | 
					85940ea8ea | ||
| 
						 | 
					a9b41af71c | ||
| 
						 | 
					439ae4d398 | ||
| 
						 | 
					a0ed612fef | ||
| 
						 | 
					4fbe40c54f | ||
| 
						 | 
					afdec73ca5 | ||
| 
						 | 
					578ca7e4cd | ||
| 
						 | 
					7e8c30b589 | ||
| 
						 | 
					2b32b28191 | ||
| 
						 | 
					532215f2db | ||
| 
						 | 
					2e70cb6506 | ||
| 
						 | 
					1794904a4a | ||
| 
						 | 
					5319be4438 | ||
| 
						 | 
					fd28279a62 | ||
| 
						 | 
					f7a3e73ef6 | ||
| 
						 | 
					6b27ae1d94 | ||
| 
						 | 
					ff3345cb72 | ||
| 
						 | 
					a6ee8fe26a | ||
| 
						 | 
					716b2079dc | ||
| 
						 | 
					e7b6228fd3 | ||
| 
						 | 
					e758ce69a3 | ||
| 
						 | 
					2053c43de2 | ||
| 
						 | 
					38b085902f | ||
| 
						 | 
					27498a3330 | ||
| 
						 | 
					1c3e4a3660 | ||
| 
						 | 
					49cd4b7316 | ||
| 
						 | 
					4707991520 | ||
| 
						 | 
					a067cba35b | ||
| 
						 | 
					7a1f92fdc3 | ||
| 
						 | 
					2905015c6e | ||
| 
						 | 
					610abd4c52 | ||
| 
						 | 
					e7a285694e | ||
| 
						 | 
					6ab285bf4c | ||
| 
						 | 
					ddc6ea162f | ||
| 
						 | 
					1d3159bcca | ||
| 
						 | 
					f60ceb54eb | ||
| 
						 | 
					b8804bf15d | ||
| 
						 | 
					0f995b2f40 | ||
| 
						 | 
					d03ad453a5 | ||
| 
						 | 
					848f735ae4 | ||
| 
						 | 
					3f71579dfc | ||
| 
						 | 
					a678430602 | ||
| 
						 | 
					f217439ee2 | ||
| 
						 | 
					e9b553dac1 | ||
| 
						 | 
					9d8f3cfb7f | ||
| 
						 | 
					d5c79928ef | ||
| 
						 | 
					db3758923b | ||
| 
						 | 
					37529750e2 | ||
| 
						 | 
					5e4a75e79f | ||
| 
						 | 
					c9ea7400b4 | ||
| 
						 | 
					43d601641f | ||
| 
						 | 
					9fa15b6ff8 | ||
| 
						 | 
					55f78baf32 | ||
| 
						 | 
					9c44ebc1e2 | ||
| 
						 | 
					6c359479d7 | ||
| 
						 | 
					75e3026a14 | ||
| 
						 | 
					4579924b7e | ||
| 
						 | 
					2047bda6fb | ||
| 
						 | 
					406c6f6962 | ||
| 
						 | 
					0a3af9a403 | ||
| 
						 | 
					3a08cf3bfb | ||
| 
						 | 
					df29cc8f77 | ||
| 
						 | 
					ec7164133d | ||
| 
						 | 
					8826087a97 | ||
| 
						 | 
					8aa09a245c | ||
| 
						 | 
					ba8ad07490 | ||
| 
						 | 
					17582ccf21 | ||
| 
						 | 
					a5fd84de41 | ||
| 
						 | 
					31be2daa06 | ||
| 
						 | 
					dc199cfaa2 | ||
| 
						 | 
					de868e0b94 | ||
| 
						 | 
					b81ef84227 | ||
| 
						 | 
					15994b034a | ||
| 
						 | 
					922fa76e26 | ||
| 
						 | 
					19aa370573 | ||
| 
						 | 
					d020e701bb | ||
| 
						 | 
					91203a9482 | ||
| 
						 | 
					364ff369d1 | ||
| 
						 | 
					134fea9d0f | ||
| 
						 | 
					8a09b3866a | ||
| 
						 | 
					137445140b | ||
| 
						 | 
					6a8afe2201 | ||
| 
						 | 
					a153c46d7f | ||
| 
						 | 
					1e3a9b650f | ||
| 
						 | 
					8faad520ae | ||
| 
						 | 
					229dc0ee31 | ||
| 
						 | 
					fcc764639d | ||
| 
						 | 
					8f89ae928b | ||
| 
						 | 
					821385ad00 | ||
| 
						 | 
					782ded56e5 | ||
| 
						 | 
					25ff76d565 | ||
| 
						 | 
					8e458d52b5 | ||
| 
						 | 
					1f475c1f6f | ||
| 
						 | 
					bc9867e672 | ||
| 
						 | 
					9801fb61d0 | ||
| 
						 | 
					20199ca809 | ||
| 
						 | 
					711f1a3c26 | ||
| 
						 | 
					412fd4708d | ||
| 
						 | 
					a1d85309ee | ||
| 
						 | 
					273c624442 | ||
| 
						 | 
					450cee5c3a | ||
| 
						 | 
					a2dbcf3644 | ||
| 
						 | 
					4663355496 | ||
| 
						 | 
					8b591c2f8e | ||
| 
						 | 
					9dc610495c | ||
| 
						 | 
					8f4a23e3b7 | ||
| 
						 | 
					055076cd4f | ||
| 
						 | 
					c83d8e2ba6 | ||
| 
						 | 
					527497a722 | ||
| 
						 | 
					32d21c1ef6 | ||
| 
						 | 
					6afc70be84 | ||
| 
						 | 
					f503c2c9e6 | ||
| 
						 | 
					629b58b7fb | ||
| 
						 | 
					7656893d51 | ||
| 
						 | 
					7fa2a81d34 | ||
| 
						 | 
					ff38d68237 | ||
| 
						 | 
					7f66ab4783 | ||
| 
						 | 
					95189389b0 | ||
| 
						 | 
					aff3e60754 | ||
| 
						 | 
					8196d87371 | ||
| 
						 | 
					b4b82ab465 | ||
| 
						 | 
					61b1ad197a | ||
| 
						 | 
					89618e7a0d | ||
| 
						 | 
					293bb4b1b8 | ||
| 
						 | 
					b87e2576b5 | ||
| 
						 | 
					29ca164513 | ||
| 
						 | 
					97d58eadbf | ||
| 
						 | 
					0bf23d9b20 | ||
| 
						 | 
					813f256783 | ||
| 
						 | 
					8cdeec9f54 | ||
| 
						 | 
					bfa96bc20e | ||
| 
						 | 
					082cd4e564 | ||
| 
						 | 
					6f17f16fd5 | ||
| 
						 | 
					2115a89212 | ||
| 
						 | 
					84034f7aec | ||
| 
						 | 
					acce40c585 | ||
| 
						 | 
					af3ec1e24e | ||
| 
						 | 
					6dc78bf7e8 | ||
| 
						 | 
					f275683ae8 | ||
| 
						 | 
					ce4f169ff9 | ||
| 
						 | 
					c566205319 | ||
| 
						 | 
					da91e37d37 | ||
| 
						 | 
					2758c44398 | ||
| 
						 | 
					eaf6c61c9f | ||
| 
						 | 
					4e056a2894 | ||
| 
						 | 
					4c53d11d7f | ||
| 
						 | 
					f60b017da8 | ||
| 
						 | 
					1d647444e3 | ||
| 
						 | 
					08634f1156 | ||
| 
						 | 
					c1eeb6078f | ||
| 
						 | 
					a50d6a801f | ||
| 
						 | 
					953db08416 | ||
| 
						 | 
					0439a5a8a7 | ||
| 
						 | 
					0a5942093e | ||
| 
						 | 
					d78254aa28 | ||
| 
						 | 
					af67804bef | ||
| 
						 | 
					8ffe66b4ce | ||
| 
						 | 
					d62ec8362a | ||
| 
						 | 
					35a6db8640 | ||
| 
						 | 
					56dc24d483 | ||
| 
						 | 
					84d828ab70 | ||
| 
						 | 
					259b33d5a3 | ||
| 
						 | 
					cfae3d94e9 | ||
| 
						 | 
					6393c09cda | ||
| 
						 | 
					9421f1ab9c | ||
| 
						 | 
					b9c23cca01 | ||
| 
						 | 
					5bf0d0ea1e | ||
| 
						 | 
					c863201780 | ||
| 
						 | 
					cb21d001c9 | ||
| 
						 | 
					769f74b818 | ||
| 
						 | 
					c7faede37b | ||
| 
						 | 
					64051a3a71 | ||
| 
						 | 
					d4e573f305 | ||
| 
						 | 
					8260eded07 | ||
| 
						 | 
					e20afbb340 | ||
| 
						 | 
					2b2ab52354 | ||
| 
						 | 
					402b4a784d | ||
| 
						 | 
					651e7ddf7e | ||
| 
						 | 
					40bace2da6 | ||
| 
						 | 
					8d6e60486f | ||
| 
						 | 
					1f30946481 | ||
| 
						 | 
					e89c82f549 | ||
| 
						 | 
					b1697f189b | ||
| 
						 | 
					812d100d06 | ||
| 
						 | 
					17a202add7 | ||
| 
						 | 
					b759742352 | ||
| 
						 | 
					3bd16a8902 | ||
| 
						 | 
					555d75252a | ||
| 
						 | 
					eaad02a747 | ||
| 
						 | 
					475e4d23bd | ||
| 
						 | 
					bf4ae6dcfa | ||
| 
						 | 
					97101fafd5 | ||
| 
						 | 
					17d4f07658 | ||
| 
						 | 
					403f1bdc70 | ||
| 
						 | 
					5ec797f263 | ||
| 
						 | 
					d574d83993 | ||
| 
						 | 
					83411793b6 | ||
| 
						 | 
					5b1aea7afe | ||
| 
						 | 
					65caee44ff | ||
| 
						 | 
					327e113775 | ||
| 
						 | 
					58f3009aba | ||
| 
						 | 
					738554331b | ||
| 
						 | 
					b193f29a9b | ||
| 
						 | 
					3f083ef0eb | ||
| 
						 | 
					17ed6c06a7 | ||
| 
						 | 
					c112323dd5 | ||
| 
						 | 
					0709385d3c | ||
| 
						 | 
					7ab58bf012 | ||
| 
						 | 
					54a656ef08 | ||
| 
						 | 
					8f797f14b8 | ||
| 
						 | 
					cd10ba9c39 | ||
| 
						 | 
					c0d64de660 | ||
| 
						 | 
					96a3369c4a | ||
| 
						 | 
					c1ce8cf3b8 | ||
| 
						 | 
					e8ad570e3f | ||
| 
						 | 
					ad1ddf413c | ||
| 
						 | 
					2d780dfd81 | ||
| 
						 | 
					b6fee5c2fb | ||
| 
						 | 
					e2c2152be9 | ||
| 
						 | 
					10fa047622 | ||
| 
						 | 
					919b2a9673 | ||
| 
						 | 
					024a20905d | ||
| 
						 | 
					04f0a6ba39 | ||
| 
						 | 
					eb43641dd3 | ||
| 
						 | 
					69ba8a00ad | ||
| 
						 | 
					f6a0c4f853 | ||
| 
						 | 
					040ade9bee | ||
| 
						 | 
					d479dc1d02 | ||
| 
						 | 
					7fb8d254fe | ||
| 
						 | 
					c99935e32c | ||
| 
						 | 
					2232e262bf | ||
| 
						 | 
					137e7e3aa1 | ||
| 
						 | 
					ba36b61d3d | ||
| 
						 | 
					ccb13ded84 | ||
| 
						 | 
					46ce790727 | ||
| 
						 | 
					9ea1b87862 | ||
| 
						 | 
					9831d941ca | ||
| 
						 | 
					707ceb29e0 | ||
| 
						 | 
					688cf84d1f | ||
| 
						 | 
					3d470fc7b7 | ||
| 
						 | 
					69ce48c307 | ||
| 
						 | 
					edb7b28a00 | ||
| 
						 | 
					06b7c8d5ba | ||
| 
						 | 
					c4efde7403 | ||
| 
						 | 
					a1edc87664 | ||
| 
						 | 
					6722b62b36 | ||
| 
						 | 
					7d80b27949 | ||
| 
						 | 
					9cbc3356e7 | ||
| 
						 | 
					d742bd882e | ||
| 
						 | 
					97a06ad9ef | ||
| 
						 | 
					756b9a0046 | ||
| 
						 | 
					9161c2ff51 | ||
| 
						 | 
					96c930dd2f | ||
| 
						 | 
					21f8cf65e6 | ||
| 
						 | 
					8bcc049399 | ||
| 
						 | 
					95900b8592 | ||
| 
						 | 
					c81a15099a | ||
| 
						 | 
					20a50cb517 | ||
| 
						 | 
					a8c125550c | ||
| 
						 | 
					3782350c14 | ||
| 
						 | 
					a71a482250 | ||
| 
						 | 
					d6257073aa | ||
| 
						 | 
					8b6ee018c2 | ||
| 
						 | 
					ddff68bee7 | ||
| 
						 | 
					ddab3c9327 | ||
| 
						 | 
					491659c436 | ||
| 
						 | 
					6a9a7ff259 | ||
| 
						 | 
					8d6fc30bc7 | ||
| 
						 | 
					56824b9658 | ||
| 
						 | 
					f7cd5462c9 | ||
| 
						 | 
					892e9625d3 | ||
| 
						 | 
					e2916b2540 | ||
| 
						 | 
					d268511c84 | ||
| 
						 | 
					1810d2088e | ||
| 
						 | 
					d618f703ec | ||
| 
						 | 
					190467767e | ||
| 
						 | 
					896e4fef30 | ||
| 
						 | 
					8d699c8c93 | ||
| 
						 | 
					38c7271a39 | ||
| 
						 | 
					e2a93e38d6 | ||
| 
						 | 
					5e3247d8bc | ||
| 
						 | 
					41c2fb962c | ||
| 
						 | 
					b53e44e572 | ||
| 
						 | 
					e5f4d8279d | ||
| 
						 | 
					455bacd4d3 | ||
| 
						 | 
					86e8b56ac4 | ||
| 
						 | 
					e85cbdad7a | ||
| 
						 | 
					bff1567623 | ||
| 
						 | 
					db199abd9e | ||
| 
						 | 
					b6d0defb98 | ||
| 
						 | 
					c752563e43 | ||
| 
						 | 
					ad22b914d6 | ||
| 
						 | 
					f216fae545 | ||
| 
						 | 
					242823c9bc | ||
| 
						 | 
					0eae6cd5f2 | ||
| 
						 | 
					40efa67248 | ||
| 
						 | 
					0bf707e346 | ||
| 
						 | 
					769fedc3ad | ||
| 
						 | 
					9c3db400dc | ||
| 
						 | 
					96a2c35d91 | ||
| 
						 | 
					d9ec9d990f | ||
| 
						 | 
					f9fde13590 | ||
| 
						 | 
					74174b9d05 | ||
| 
						 | 
					b5148cf1f7 | ||
| 
						 | 
					90a617e050 | ||
| 
						 | 
					259cdf2af9 | ||
| 
						 | 
					6c950e0dc9 | ||
| 
						 | 
					62dd6f161a | ||
| 
						 | 
					6aba658cd8 | ||
| 
						 | 
					89eda1fc01 | ||
| 
						 | 
					accb0c6edb | ||
| 
						 | 
					bbec79a0c1 | ||
| 
						 | 
					e0db2eed8d | ||
| 
						 | 
					6f7ba4be1f | ||
| 
						 | 
					2ccb522c5b | ||
| 
						 | 
					00a357ab20 | ||
| 
						 | 
					8ee4845b65 | ||
| 
						 | 
					19b8d06a79 | ||
| 
						 | 
					5c6bf03117 | ||
| 
						 | 
					f72ed6153b | ||
| 
						 | 
					0bf76767b0 | ||
| 
						 | 
					d652a0957f | ||
| 
						 | 
					fbcd27907b | ||
| 
						 | 
					a551bea52e | ||
| 
						 | 
					6cb686208e | ||
| 
						 | 
					732c9fe179 | ||
| 
						 | 
					bd1fb77245 | ||
| 
						 | 
					d610d27f30 | ||
| 
						 | 
					4f99ab58f7 | ||
| 
						 | 
					339abc9bd9 | ||
| 
						 | 
					4407fbc2d4 | ||
| 
						 | 
					96b35c9e26 | ||
| 
						 | 
					27f08d6d48 | ||
| 
						 | 
					907a8f1e6e | ||
| 
						 | 
					e1c191fe44 | ||
| 
						 | 
					a9e0953900 | ||
| 
						 | 
					9597027693 | ||
| 
						 | 
					5aa3429c5d | ||
| 
						 | 
					ffd418f217 | ||
| 
						 | 
					78f41a4e89 | ||
| 
						 | 
					76dcae8020 | ||
| 
						 | 
					0711be1696 | ||
| 
						 | 
					190ef122b2 | ||
| 
						 | 
					7521ab3d0b | ||
| 
						 | 
					0587ec2645 | ||
| 
						 | 
					b76d66fbf6 | ||
| 
						 | 
					06f851f721 | ||
| 
						 | 
					f6661d391c | ||
| 
						 | 
					284b216b3a | ||
| 
						 | 
					dc74e7d5d7 | ||
| 
						 | 
					3d76ceddff | ||
| 
						 | 
					05dbe6ee1f | ||
| 
						 | 
					871d0f5126 | ||
| 
						 | 
					5be1264b7e | ||
| 
						 | 
					b963f807be | ||
| 
						 | 
					314c667050 | ||
| 
						 | 
					005bbb52ff | ||
| 
						 | 
					28c8a911bd | ||
| 
						 | 
					a690102da2 | ||
| 
						 | 
					437d1ed49f | ||
| 
						 | 
					12fd8be2c4 | ||
| 
						 | 
					8258f7b361 | ||
| 
						 | 
					e15ea3d9e1 | ||
| 
						 | 
					09db11783d | ||
| 
						 | 
					677532629d | ||
| 
						 | 
					f6733ae577 | ||
| 
						 | 
					57d8ff79b2 | ||
| 
						 | 
					2d2ca3aab1 | ||
| 
						 | 
					cfc7620572 | ||
| 
						 | 
					4b14ed760d | ||
| 
						 | 
					79a6260a11 | ||
| 
						 | 
					a0bf8f2008 | ||
| 
						 | 
					408bf2f0c4 | ||
| 
						 | 
					874fee478c | ||
| 
						 | 
					90d9a69bb1 | ||
| 
						 | 
					9a01bc0732 | ||
| 
						 | 
					4006c56036 | ||
| 
						 | 
					dbcc560717 | ||
| 
						 | 
					1729588435 | ||
| 
						 | 
					6f7c2cb31e | ||
| 
						 | 
					a4629f4136 | ||
| 
						 | 
					449d39f41c | ||
| 
						 | 
					56b5f687e4 | ||
| 
						 | 
					caa4f47f61 | ||
| 
						 | 
					36757b4438 | ||
| 
						 | 
					75871dda4b | ||
| 
						 | 
					506fec1a95 | ||
| 
						 | 
					aae329c447 | ||
| 
						 | 
					02acf1409e | ||
| 
						 | 
					6ac3309c74 | ||
| 
						 | 
					1b15cfa11d | ||
| 
						 | 
					76dfca879f | ||
| 
						 | 
					7cdc7bacea | ||
| 
						 | 
					fbd78b5c08 | ||
| 
						 | 
					fbcd0da597 | ||
| 
						 | 
					665dc3924d | ||
| 
						 | 
					4bdacff25b | ||
| 
						 | 
					ecd45314b8 | ||
| 
						 | 
					3e06fb754e | ||
| 
						 | 
					84236041c1 | ||
| 
						 | 
					b2e20a31ea | ||
| 
						 | 
					38e19a4220 | ||
| 
						 | 
					f28164fefd | ||
| 
						 | 
					8d44d96ec3 | ||
| 
						 | 
					2eaabb718b | ||
| 
						 | 
					5572f482e7 | ||
| 
						 | 
					707e098687 | ||
| 
						 | 
					729f0a277e | ||
| 
						 | 
					88de74ad83 | ||
| 
						 | 
					c55d759168 | ||
| 
						 | 
					97b8718f15 | ||
| 
						 | 
					b7910992d8 | ||
| 
						 | 
					cf3b8b52f1 | ||
| 
						 | 
					388a6f937f | ||
| 
						 | 
					42b06fbaca | ||
| 
						 | 
					a61050ad96 | ||
| 
						 | 
					2245cd87d4 | ||
| 
						 | 
					c199837c54 | ||
| 
						 | 
					83699c4784 | ||
| 
						 | 
					30afcc072a | ||
| 
						 | 
					baaeac3036 | ||
| 
						 | 
					832f9304fd | ||
| 
						 | 
					fa4bde98d2 | ||
| 
						 | 
					d19370b617 | ||
| 
						 | 
					ca80756c70 | ||
| 
						 | 
					8376acbf7f | ||
| 
						 | 
					ef0baf60aa | ||
| 
						 | 
					12a2ff9625 | ||
| 
						 | 
					7ba3a4c3d2 | ||
| 
						 | 
					29e48c18b7 | ||
| 
						 | 
					292a217b51 | ||
| 
						 | 
					982dfb7d10 | ||
| 
						 | 
					104117c5e7 | ||
| 
						 | 
					7ab3c662e3 | ||
| 
						 | 
					8c4b69d3ab | ||
| 
						 | 
					4fd5e85a18 | ||
| 
						 | 
					0e2cc42cfb | ||
| 
						 | 
					e9a9211e75 | ||
| 
						 | 
					1e5c205ccb | ||
| 
						 | 
					4c82171a8e | ||
| 
						 | 
					88c80b3e75 | ||
| 
						 | 
					d438845ac8 | ||
| 
						 | 
					b1d495b2c4 | ||
| 
						 | 
					27bad5ad3d | ||
| 
						 | 
					6b7a46b721 | ||
| 
						 | 
					6a89a25c27 | ||
| 
						 | 
					001ab3abad | ||
| 
						 | 
					ff90d659e6 | ||
| 
						 | 
					ec8ad2bb96 | ||
| 
						 | 
					8f841c70c4 | ||
| 
						 | 
					5fbb02fcb1 | ||
| 
						 | 
					4e1b50e219 | ||
| 
						 | 
					052c0f276e | ||
| 
						 | 
					d7b2342a6a | ||
| 
						 | 
					7e9db7cefc | ||
| 
						 | 
					d30e4c5b0b | ||
| 
						 | 
					9de6bb8abc | ||
| 
						 | 
					72e04bd13f | ||
| 
						 | 
					4ec0448122 | ||
| 
						 | 
					842d8e209b | ||
| 
						 | 
					292fcd5c7b | ||
| 
						 | 
					74e3931f84 | ||
| 
						 | 
					12dadc555f | ||
| 
						 | 
					1e7e392419 | ||
| 
						 | 
					b75b2225e5 | ||
| 
						 | 
					12f27bd414 | ||
| 
						 | 
					e11b82c337 | ||
| 
						 | 
					69deec58fb | ||
| 
						 | 
					1e976bdc46 | ||
| 
						 | 
					9946fceb9d | ||
| 
						 | 
					6fed88113b | ||
| 
						 | 
					04ad43af9e | ||
| 
						 | 
					97ebe047d0 | ||
| 
						 | 
					fc6a6a1030 | ||
| 
						 | 
					3d840c827f | ||
| 
						 | 
					a2a1a04e53 | ||
| 
						 | 
					f86abc2e80 | ||
| 
						 | 
					227aec9a0f | ||
| 
						 | 
					7104c376ae | ||
| 
						 | 
					b0165ce439 | ||
| 
						 | 
					0638ced5cc | ||
| 
						 | 
					3c8756f024 | ||
| 
						 | 
					e984b2af64 | ||
| 
						 | 
					70e96dcf59 | ||
| 
						 | 
					2c696b2ddc | ||
| 
						 | 
					1801bc0658 | ||
| 
						 | 
					ebbad107bf | ||
| 
						 | 
					9a48b07ee4 | ||
| 
						 | 
					230fd6b7b6 | ||
| 
						 | 
					20b33a015f | ||
| 
						 | 
					293d5082c7 | ||
| 
						 | 
					fc0ab2eac2 | ||
| 
						 | 
					64cb996206 | ||
| 
						 | 
					929f116733 | ||
| 
						 | 
					ba5ba5490d | ||
| 
						 | 
					413f2b2247 | ||
| 
						 | 
					b8565a9af9 | ||
| 
						 | 
					fbf4c7b4f1 | ||
| 
						 | 
					99542d8763 | ||
| 
						 | 
					94960c8421 | ||
| 
						 | 
					b3c1d18d03 | ||
| 
						 | 
					6859cf7459 | ||
| 
						 | 
					6c8aec60ca | ||
| 
						 | 
					2018681b33 | ||
| 
						 | 
					c0ca52952e | ||
| 
						 | 
					e204516178 | ||
| 
						 | 
					39d727d0c3 | ||
| 
						 | 
					153aecf91a | ||
| 
						 | 
					6319853811 | ||
| 
						 | 
					cd98ab6491 | ||
| 
						 | 
					6b3a385f85 | ||
| 
						 | 
					b3823ac64b | ||
| 
						 | 
					27a80b7906 | ||
| 
						 | 
					5d9470ff8e | ||
| 
						 | 
					4e33db9a3f | ||
| 
						 | 
					e78f137899 | ||
| 
						 | 
					ca9a114f7a | ||
| 
						 | 
					40e66398db | ||
| 
						 | 
					ce1dc2e9b2 | ||
| 
						 | 
					b4b62004a6 | ||
| 
						 | 
					6e32d0a74b | ||
| 
						 | 
					f7eb95852c | ||
| 
						 | 
					a4f53a1c73 | ||
| 
						 | 
					a90ae02454 | ||
| 
						 | 
					4c8f79a33e | ||
| 
						 | 
					7cc6ec7af7 | ||
| 
						 | 
					c2bbf275b2 | ||
| 
						 | 
					9226e2187c | ||
| 
						 | 
					12a296edfc | ||
| 
						 | 
					48921e00fc | ||
| 
						 | 
					e696a05791 | ||
| 
						 | 
					f804930150 | ||
| 
						 | 
					3403caf3da | ||
| 
						 | 
					4a13e4b36c | ||
| 
						 | 
					b7fb041f31 | ||
| 
						 | 
					ba11121731 | ||
| 
						 | 
					ed5e37c309 | ||
| 
						 | 
					65b1d31df5 | ||
| 
						 | 
					a98beb3a2d | ||
| 
						 | 
					b499ed06d2 | ||
| 
						 | 
					f627c159b1 | ||
| 
						 | 
					6ff7c95843 | ||
| 
						 | 
					535cedf136 | ||
| 
						 | 
					3a00964dd3 | ||
| 
						 | 
					41cc7096b8 | ||
| 
						 | 
					c237de058f | ||
| 
						 | 
					e2aeb8174b | ||
| 
						 | 
					34f1f2a81c | ||
| 
						 | 
					c96f0fd2d1 | ||
| 
						 | 
					8aefe253a7 | ||
| 
						 | 
					7e31164ae0 | ||
| 
						 | 
					ad55f581f9 | ||
| 
						 | 
					d4a8f90cab | ||
| 
						 | 
					41ab00bedf | ||
| 
						 | 
					a69d50b02d | ||
| 
						 | 
					fc85ac20c7 | ||
| 
						 | 
					e88479243c | ||
| 
						 | 
					c787525ac8 | ||
| 
						 | 
					ed7443661c | ||
| 
						 | 
					9a2601033d | ||
| 
						 | 
					3d2aa62cb6 | ||
| 
						 | 
					9925249ba5 | ||
| 
						 | 
					fbb311a7d2 | ||
| 
						 | 
					d7041ea5de | ||
| 
						 | 
					f309c1ae50 | ||
| 
						 | 
					82a20fb0f0 | ||
| 
						 | 
					68a9ee13e8 | ||
| 
						 | 
					a64f08f3dd | ||
| 
						 | 
					428112ef10 | ||
| 
						 | 
					64376cd8ff | ||
| 
						 | 
					384897f46b | ||
| 
						 | 
					cc8aa08b02 | ||
| 
						 | 
					08e60fc0ff | ||
| 
						 | 
					1c4e4e4f56 | ||
| 
						 | 
					3f6db7f518 | ||
| 
						 | 
					ea050a6eb3 | ||
| 
						 | 
					bde63f803a | ||
| 
						 | 
					8435a755fd | ||
| 
						 | 
					52c29b7b99 | ||
| 
						 | 
					e73308638a | ||
| 
						 | 
					1ac3419ef6 | ||
| 
						 | 
					c6bf63da7c | ||
| 
						 | 
					0fd05a2f0f | ||
| 
						 | 
					1e9858a28b | ||
| 
						 | 
					1fd0338b49 | ||
| 
						 | 
					8f4a09e531 | ||
| 
						 | 
					b2be73e4e8 | ||
| 
						 | 
					3b2f77d88e | ||
| 
						 | 
					52ccf9e1c1 | ||
| 
						 | 
					37f5fcf85c | ||
| 
						 | 
					5e947727a9 | ||
| 
						 | 
					f742e497dd | ||
| 
						 | 
					d7bd58cf36 | ||
| 
						 | 
					dcc426fcfe | ||
| 
						 | 
					7eb18f1237 | ||
| 
						 | 
					b84e473d63 | ||
| 
						 | 
					265e892fed | ||
| 
						 | 
					4aecd67d04 | ||
| 
						 | 
					623e9e66c0 | ||
| 
						 | 
					74a25e9cd9 | ||
| 
						 | 
					90f5a2b6fe | ||
| 
						 | 
					bf625abe29 | ||
| 
						 | 
					d020139db7 | ||
| 
						 | 
					b44069730b | ||
| 
						 | 
					749d055eba | ||
| 
						 | 
					49a0f77867 | ||
| 
						 | 
					f84acec8ea | ||
| 
						 | 
					2af52de7b5 | ||
| 
						 | 
					d3b282e01f | ||
| 
						 | 
					85d9e2f2f0 | ||
| 
						 | 
					629d860cbc | ||
| 
						 | 
					056cc163f5 | ||
| 
						 | 
					04ed3994e2 | ||
| 
						 | 
					6100502726 | ||
| 
						 | 
					e09efcf71a | ||
| 
						 | 
					763b4dcc66 | ||
| 
						 | 
					a1f09ea8f8 | ||
| 
						 | 
					83348e0b80 | ||
| 
						 | 
					bce625987d | ||
| 
						 | 
					f13ddd5d0a | ||
| 
						 | 
					18a31aa861 | ||
| 
						 | 
					b2a4e959c9 | ||
| 
						 | 
					f17ef241d1 | ||
| 
						 | 
					aa1e56b0b9 | ||
| 
						 | 
					7ef524ea1c | ||
| 
						 | 
					0c7141a343 | ||
| 
						 | 
					5488bb6197 | ||
| 
						 | 
					8e28c67155 | ||
| 
						 | 
					3c1a6f441b | ||
| 
						 | 
					97d640e1f0 | ||
| 
						 | 
					36969082bb | ||
| 
						 | 
					ddf7602425 | ||
| 
						 | 
					4fde69b066 | ||
| 
						 | 
					fd9a4dbe94 | ||
| 
						 | 
					f0db0ed35d | ||
| 
						 | 
					6d24cbf452 | ||
| 
						 | 
					5454829ae6 | ||
| 
						 | 
					da0bca6466 | ||
| 
						 | 
					4705bd9b37 | ||
| 
						 | 
					5bd90983bc | ||
| 
						 | 
					329f981582 | ||
| 
						 | 
					cece7adcee | ||
| 
						 | 
					74cc4903ef | ||
| 
						 | 
					41fdcfa71e | ||
| 
						 | 
					60cc56b1a9 | ||
| 
						 | 
					f912e9293f | ||
| 
						 | 
					56939728b7 | ||
| 
						 | 
					ea26226046 | ||
| 
						 | 
					17f6279317 | ||
| 
						 | 
					d3c32ffbcc | ||
| 
						 | 
					e172d60ddb | ||
| 
						 | 
					1d2a3fe246 | ||
| 
						 | 
					f8fe7fa491 | ||
| 
						 | 
					00c8546d21 | ||
| 
						 | 
					fbe792f0ac | ||
| 
						 | 
					14a7cfb32a | ||
| 
						 | 
					7a8645d171 | ||
| 
						 | 
					31e441a805 | ||
| 
						 | 
					5bf738737d | ||
| 
						 | 
					c4a28caa32 | ||
| 
						 | 
					415e03aa6f | ||
| 
						 | 
					c3eb0c1e7f | ||
| 
						 | 
					ac120e20e3 | ||
| 
						 | 
					d18f681310 | ||
| 
						 | 
					ea5214328b | ||
| 
						 | 
					3f90e45079 | ||
| 
						 | 
					9dcc441a5f | ||
| 
						 | 
					0833a40d13 | ||
| 
						 | 
					ab1a01e9b2 | ||
| 
						 | 
					db4f691f9f | ||
| 
						 | 
					d28735a05b | ||
| 
						 | 
					183847747a | ||
| 
						 | 
					bac6012308 | ||
| 
						 | 
					f1e1d6d6af | ||
| 
						 | 
					aaa384ca1a | ||
| 
						 | 
					f908226898 | ||
| 
						 | 
					b012127a99 | ||
| 
						 | 
					909abce800 | ||
| 
						 | 
					33d4e690cc | ||
| 
						 | 
					848c849584 | ||
| 
						 | 
					102c8f47bf | ||
| 
						 | 
					d3bcbba45c | ||
| 
						 | 
					0903e56196 | ||
| 
						 | 
					95ecacf8a2 | ||
| 
						 | 
					be8a280e0b | ||
| 
						 | 
					6fb60a84dd | ||
| 
						 | 
					5af7d1a3b8 | ||
| 
						 | 
					35b73a1f20 | ||
| 
						 | 
					9e4f9b36fc | ||
| 
						 | 
					84d7e365a0 | ||
| 
						 | 
					64c3da230f | ||
| 
						 | 
					7793f30e09 | ||
| 
						 | 
					714df32e33 | ||
| 
						 | 
					1dc920c8de | ||
| 
						 | 
					16dc1cfb5c | ||
| 
						 | 
					819ff32dc4 | ||
| 
						 | 
					5574e0ed41 | ||
| 
						 | 
					265a9e2c5d | ||
| 
						 | 
					b0b3b11dbf | ||
| 
						 | 
					042e57d562 | ||
| 
						 | 
					c578208d63 | ||
| 
						 | 
					ba8fb52183 | ||
| 
						 | 
					038461a61b | ||
| 
						 | 
					f6f9961819 | ||
| 
						 | 
					716c94492a | ||
| 
						 | 
					e74e9c48de | ||
| 
						 | 
					a4f335ba3e | ||
| 
						 | 
					179add2b07 | ||
| 
						 | 
					456bc309d8 | ||
| 
						 | 
					90832c891e | ||
| 
						 | 
					dc2ab9f4fa | ||
| 
						 | 
					a7535a2727 | ||
| 
						 | 
					162d858a90 | ||
| 
						 | 
					44c09667ff | ||
| 
						 | 
					da9b972466 | ||
| 
						 | 
					13ac37d01a | ||
| 
						 | 
					c2decc56b0 | ||
| 
						 | 
					bd45950f4a | ||
| 
						 | 
					1649d5fee1 | ||
| 
						 | 
					f70cf11819 | ||
| 
						 | 
					f8279b8ea3 | ||
| 
						 | 
					5575f781ad | ||
| 
						 | 
					76b8f839c2 | ||
| 
						 | 
					0472883cc2 | ||
| 
						 | 
					8d37f07e09 | ||
| 
						 | 
					87e8feca95 | ||
| 
						 | 
					450c73d98b | ||
| 
						 | 
					e70a39830c | ||
| 
						 | 
					2ead4a5df6 | ||
| 
						 | 
					ba25198517 | ||
| 
						 | 
					6297bcd74c | ||
| 
						 | 
					dd7ab82e75 | ||
| 
						 | 
					addafc08a5 | ||
| 
						 | 
					c046fffa16 | ||
| 
						 | 
					3aecef7697 | ||
| 
						 | 
					b218af2b27 | ||
| 
						 | 
					e970fa0022 | ||
| 
						 | 
					458bb156bf | ||
| 
						 | 
					bca9dc2a51 | ||
| 
						 | 
					3720ea24f0 | ||
| 
						 | 
					77c46bbf29 | ||
| 
						 | 
					72a37c03be | ||
| 
						 | 
					02750ff56f | ||
| 
						 | 
					93d1969c78 | ||
| 
						 | 
					0bee0e6294 | ||
| 
						 | 
					6178bb8fe9 | ||
| 
						 | 
					12593e6f45 | ||
| 
						 | 
					819a040f44 | ||
| 
						 | 
					5b195b5a0e | ||
| 
						 | 
					546405bece | ||
| 
						 | 
					4289131ae6 | ||
| 
						 | 
					b721e1e239 | ||
| 
						 | 
					f013c7f2a6 | ||
| 
						 | 
					6cf2012a4d | ||
| 
						 | 
					e459ebaed1 | ||
| 
						 | 
					1cc67fa80c | ||
| 
						 | 
					eefa6e4e2b | ||
| 
						 | 
					6d9116f83d | ||
| 
						 | 
					e9e3ce40c5 | ||
| 
						 | 
					56d84db1d4 | ||
| 
						 | 
					8be4e173e8 | ||
| 
						 | 
					648765ba2f | ||
| 
						 | 
					16758de0a2 | ||
| 
						 | 
					c6ccf055ba | ||
| 
						 | 
					f19b6474fe | ||
| 
						 | 
					1649d85d10 | ||
| 
						 | 
					2f6f2970c4 | ||
| 
						 | 
					f227a1af7d | ||
| 
						 | 
					cd72dcd925 | ||
| 
						 | 
					7a5ed919ad | ||
| 
						 | 
					799d7a34cf | ||
| 
						 | 
					20adcfa058 | ||
| 
						 | 
					4408572079 | ||
| 
						 | 
					31b5b999c7 | ||
| 
						 | 
					f8bcfb5d5a | ||
| 
						 | 
					02b7ec88bb | ||
| 
						 | 
					0af9a89cef | ||
| 
						 | 
					44e9c2617a | ||
| 
						 | 
					b61739874e | ||
| 
						 | 
					db802c60e3 | ||
| 
						 | 
					73957bd323 | ||
| 
						 | 
					503f3b1a21 | ||
| 
						 | 
					81f1338613 | ||
| 
						 | 
					402bcde847 | ||
| 
						 | 
					90baf2a92d | ||
| 
						 | 
					ec9ea6a3c8 | ||
| 
						 | 
					7e6617611f | ||
| 
						 | 
					13793a0ddf | ||
| 
						 | 
					b334853d72 | ||
| 
						 | 
					ca6dde5d3d | ||
| 
						 | 
					4b5d50e26b | ||
| 
						 | 
					8e6cbcd7c0 | ||
| 
						 | 
					6d454e6ab2 | ||
| 
						 | 
					9335a5f7c0 | ||
| 
						 | 
					4f0e09aa67 | ||
| 
						 | 
					32bf74e30e | ||
| 
						 | 
					e921bbf9f6 | ||
| 
						 | 
					6643f275e2 | ||
| 
						 | 
					205a4a9571 | ||
| 
						 | 
					cd4c36adb8 | ||
| 
						 | 
					44279d4638 | ||
| 
						 | 
					311e209931 | ||
| 
						 | 
					9f1c3d7392 | ||
| 
						 | 
					fe5eb6707f | ||
| 
						 | 
					362be34a2f | ||
| 
						 | 
					f5db08e57a | ||
| 
						 | 
					ec7f13d375 | ||
| 
						 | 
					8cfdb960f0 | ||
| 
						 | 
					ec27c2ac97 | ||
| 
						 | 
					ebccb429de | ||
| 
						 | 
					b97c854e15 | ||
| 
						 | 
					7dbed652fc | ||
| 
						 | 
					bdbbf930aa | ||
| 
						 | 
					6789b41d86 | ||
| 
						 | 
					5254b53e97 | ||
| 
						 | 
					8adc3e5db7 | ||
| 
						 | 
					0487cb234c | ||
| 
						 | 
					80e1495b99 | ||
| 
						 | 
					041843e47e | ||
| 
						 | 
					4810644f65 | ||
| 
						 | 
					c2aa4f2081 | ||
| 
						 | 
					d24d873e17 | ||
| 
						 | 
					b23f50e67e | ||
| 
						 | 
					7fe03ed3a3 | ||
| 
						 | 
					7728770623 | ||
| 
						 | 
					9466fa6750 | ||
| 
						 | 
					279c36564f | ||
| 
						 | 
					cead7f36da | ||
| 
						 | 
					50d1c3fd85 | ||
| 
						 | 
					cbecb3ac37 | ||
| 
						 | 
					5dbd3efce7 | ||
| 
						 | 
					ed712101ea | ||
| 
						 | 
					876811e2af | ||
| 
						 | 
					015eb65963 | ||
| 
						 | 
					b57c98df7b | ||
| 
						 | 
					c4da6dd38a | ||
| 
						 | 
					afafa3e15c | ||
| 
						 | 
					2edcb4ac71 | ||
| 
						 | 
					150f2d8d24 | ||
| 
						 | 
					0c4d9b2fbc | ||
| 
						 | 
					a6545f0566 | ||
| 
						 | 
					5012158adf | ||
| 
						 | 
					5fc041cca0 | ||
| 
						 | 
					5c9396e37c | ||
| 
						 | 
					089cd046af | ||
| 
						 | 
					7b63c0fa8c | ||
| 
						 | 
					7e8852c549 | ||
| 
						 | 
					063a8905bf | ||
| 
						 | 
					4064a85205 | ||
| 
						 | 
					3a9fef60a1 | ||
| 
						 | 
					cd7562091d | ||
| 
						 | 
					d1d0be3cd2 | ||
| 
						 | 
					be9419edf4 | ||
| 
						 | 
					2c8ad4f1af | ||
| 
						 | 
					a729d47d41 | ||
| 
						 | 
					121dea3f85 | ||
| 
						 | 
					6abf827f25 | ||
| 
						 | 
					ea4f109c99 | ||
| 
						 | 
					5af9fcaf35 | ||
| 
						 | 
					7650934f21 | ||
| 
						 | 
					5736d40dad | ||
| 
						 | 
					0dfd83b9f4 | ||
| 
						 | 
					40c5cae24a | ||
| 
						 | 
					8e10dea8ec | ||
| 
						 | 
					cce9396dc9 | ||
| 
						 | 
					a69e8ea1a1 | ||
| 
						 | 
					47f3eafb8d | ||
| 
						 | 
					1f656724f6 | ||
| 
						 | 
					53fc93dda6 | ||
| 
						 | 
					ca55c617e5 | ||
| 
						 | 
					17085b022c | ||
| 
						 | 
					9063e375e8 | ||
| 
						 | 
					4367eb8706 | ||
| 
						 | 
					97c9760f61 | ||
| 
						 | 
					0a8a99785b | ||
| 
						 | 
					df60710ea8 | ||
| 
						 | 
					a9d96b98cb | ||
| 
						 | 
					5d2edd2659 | ||
| 
						 | 
					ae689b6b27 | ||
| 
						 | 
					a558ae9496 | ||
| 
						 | 
					60d160da2d | ||
| 
						 | 
					d58a949aae | ||
| 
						 | 
					05086644c4 | ||
| 
						 | 
					00e608c89d | ||
| 
						 | 
					fb96d9d90d | ||
| 
						 | 
					b4dfd76a4c | ||
| 
						 | 
					e1a32c1807 | ||
| 
						 | 
					ea9a52d124 | ||
| 
						 | 
					5585f4eca4 | ||
| 
						 | 
					75cc5e05ad | ||
| 
						 | 
					e8b4d05f61 | ||
| 
						 | 
					84ae14d754 | ||
| 
						 | 
					0df748e7e2 | ||
| 
						 | 
					1fbcfbe693 | ||
| 
						 | 
					a9e897adc3 | ||
| 
						 | 
					34ab17b669 | ||
| 
						 | 
					fc0f3ad254 | ||
| 
						 | 
					a1fbe27123 | ||
| 
						 | 
					4942ef6f0e | ||
| 
						 | 
					1c45b1fef3 | ||
| 
						 | 
					9ae08a9c04 | ||
| 
						 | 
					e003386793 | ||
| 
						 | 
					76f8a1f51d | ||
| 
						 | 
					a533b89c9f | ||
| 
						 | 
					9d358821e5 | ||
| 
						 | 
					a2ffad81c8 | ||
| 
						 | 
					a6c6874a1a | ||
| 
						 | 
					a947f2d2b6 | ||
| 
						 | 
					081cdf3f63 | ||
| 
						 | 
					94e19e7111 | ||
| 
						 | 
					dbf5b18a99 | ||
| 
						 | 
					04677ce024 | ||
| 
						 | 
					0b3f7afaed | ||
| 
						 | 
					407adb5b17 | ||
| 
						 | 
					da0616cd13 | ||
| 
						 | 
					d6e8f6ae2b | ||
| 
						 | 
					af629a19d7 | ||
| 
						 | 
					1c02ca537a | ||
| 
						 | 
					9a3eaa1117 | ||
| 
						 | 
					3f2f3d4264 | ||
| 
						 | 
					c4c2c61e8c | ||
| 
						 | 
					7a68e6aad1 | ||
| 
						 | 
					5f3d6f70f6 | ||
| 
						 | 
					f27fa54388 | ||
| 
						 | 
					ece0bdf1fd | ||
| 
						 | 
					97e4b1883e | ||
| 
						 | 
					a2b38b3022 | ||
| 
						 | 
					48acb9e08a | ||
| 
						 | 
					d51092f42b | ||
| 
						 | 
					e5706ccbde | ||
| 
						 | 
					bdb6171334 | ||
| 
						 | 
					9a82ef5255 | ||
| 
						 | 
					4a1dcb2d03 | ||
| 
						 | 
					1d4547a43d | ||
| 
						 | 
					ef92312b41 | ||
| 
						 | 
					65ee74fbc7 | ||
| 
						 | 
					4673461789 | ||
| 
						 | 
					c21506ba02 | ||
| 
						 | 
					2f8275c52d | ||
| 
						 | 
					39ebb51bba | ||
| 
						 | 
					d7227da9a8 | ||
| 
						 | 
					00f1628eac | ||
| 
						 | 
					c69d103956 | ||
| 
						 | 
					ab805194a6 | ||
| 
						 | 
					4fac53a757 | ||
| 
						 | 
					d56f92ee78 | ||
| 
						 | 
					d5492d9b47 | ||
| 
						 | 
					11198b78a2 | ||
| 
						 | 
					451dc18f10 | ||
| 
						 | 
					573a568dd0 | ||
| 
						 | 
					127dca46a0 | ||
| 
						 | 
					ff3dd00370 | ||
| 
						 | 
					e888074bb4 | ||
| 
						 | 
					2028c2800a | ||
| 
						 | 
					1ef5026ef9 | ||
| 
						 | 
					fd8766b67e | ||
| 
						 | 
					40889b9cd3 | ||
| 
						 | 
					7d210e5194 | ||
| 
						 | 
					99889b46c9 | ||
| 
						 | 
					2e674fc611 | ||
| 
						 | 
					82869b3c8d | ||
| 
						 | 
					5cfd3419c6 | ||
| 
						 | 
					e8233e699b | ||
| 
						 | 
					9efd4fb891 | ||
| 
						 | 
					b2e85f9d93 | ||
| 
						 | 
					04cc76660a | ||
| 
						 | 
					e1f7ea25d2 | ||
| 
						 | 
					f10581829d | ||
| 
						 | 
					8586df1efb | ||
| 
						 | 
					78af3b274f | ||
| 
						 | 
					b8e0e12399 | ||
| 
						 | 
					254ef80db1 | ||
| 
						 | 
					f9de8446a0 | ||
| 
						 | 
					facd9a2024 | ||
| 
						 | 
					d15711efc6 | ||
| 
						 | 
					25ace3ed25 | ||
| 
						 | 
					461f00dd53 | ||
| 
						 | 
					012c86ab74 | ||
| 
						 | 
					458c29175e | ||
| 
						 | 
					8a5dbb0a2e | ||
| 
						 | 
					22f03eaedf | ||
| 
						 | 
					532203cdb0 | ||
| 
						 | 
					d467c74954 | ||
| 
						 | 
					870d3d5595 | ||
| 
						 | 
					c6c0e4cb32 | ||
| 
						 | 
					8f6f347848 | ||
| 
						 | 
					c4c745ccb8 | ||
| 
						 | 
					0f7b63c834 | ||
| 
						 | 
					3b66e34e74 | ||
| 
						 | 
					345731731a | ||
| 
						 | 
					2250f475fc | ||
| 
						 | 
					b2c04539a1 | ||
| 
						 | 
					d13363af60 | ||
| 
						 | 
					ed703912b2 | ||
| 
						 | 
					b6fc2386f0 | ||
| 
						 | 
					2cddcd1dbb | ||
| 
						 | 
					9f353dd662 | ||
| 
						 | 
					231360a3b7 | ||
| 
						 | 
					b49053cae2 | ||
| 
						 | 
					65ac3faff6 | ||
| 
						 | 
					778252741e | ||
| 
						 | 
					c8062c3a5e | ||
| 
						 | 
					05c08fc708 | ||
| 
						 | 
					96e40d97cc | ||
| 
						 | 
					0990a0851a | ||
| 
						 | 
					4b3743c85a | ||
| 
						 | 
					bb0db9c491 | ||
| 
						 | 
					5795665a7d | ||
| 
						 | 
					88f1be140c | ||
| 
						 | 
					966a753997 | ||
| 
						 | 
					fc16b228fd | ||
| 
						 | 
					0f829bd111 | ||
| 
						 | 
					a5b2ccaaad | ||
| 
						 | 
					5dd352c916 | ||
| 
						 | 
					a5200a1b8f | ||
| 
						 | 
					3c204aaf50 | ||
| 
						 | 
					6631a7e7f1 | ||
| 
						 | 
					010da5c015 | ||
| 
						 | 
					3ae184d31f | ||
| 
						 | 
					3e975124f3 | ||
| 
						 | 
					74c467f9f2 | ||
| 
						 | 
					1b97c938e9 | ||
| 
						 | 
					fbb56e5b1d | ||
| 
						 | 
					b3e2acac4e | ||
| 
						 | 
					78055aa6a5 | ||
| 
						 | 
					403fa0dc53 | ||
| 
						 | 
					e6bd5e8a6d | ||
| 
						 | 
					f918c330a9 | ||
| 
						 | 
					94f1b50c0f | ||
| 
						 | 
					7f52f77efe | ||
| 
						 | 
					bd54d55c1d | ||
| 
						 | 
					90b480f2af | ||
| 
						 | 
					09c70c3261 | ||
| 
						 | 
					578c33c010 | ||
| 
						 | 
					1ed0c6621b | ||
| 
						 | 
					d6a821b9d7 | ||
| 
						 | 
					5f8453587e | ||
| 
						 | 
					7d8b5c530f | ||
| 
						 | 
					d6e2d12c74 | ||
| 
						 | 
					2033da0b23 | ||
| 
						 | 
					305a1afcf7 | ||
| 
						 | 
					c4ac954c59 | ||
| 
						 | 
					9cdf87f194 | ||
| 
						 | 
					2640aec227 | ||
| 
						 | 
					a81e9d3dc4 | ||
| 
						 | 
					a1037ce3bc | ||
| 
						 | 
					6b7e0a9987 | ||
| 
						 | 
					249737e53d | ||
| 
						 | 
					8b57fb1208 | ||
| 
						 | 
					2962243d19 | ||
| 
						 | 
					c70573dee1 | ||
| 
						 | 
					6c98ed520d | ||
| 
						 | 
					dbdc5d14d3 | ||
| 
						 | 
					6cbe638294 | ||
| 
						 | 
					37ceea7333 | ||
| 
						 | 
					07c08ed42c | ||
| 
						 | 
					17b226a672 | ||
| 
						 | 
					374b227226 | ||
| 
						 | 
					8c4a5016ce | ||
| 
						 | 
					f33ca23e2f | ||
| 
						 | 
					6d79659dd7 | ||
| 
						 | 
					1056275825 | ||
| 
						 | 
					9634acedaf | ||
| 
						 | 
					c56fb0f1a3 | ||
| 
						 | 
					08241a5814 | ||
| 
						 | 
					3a4b0bed49 | ||
| 
						 | 
					84f4e33ea3 | ||
| 
						 | 
					3d27b1fa85 | ||
| 
						 | 
					b093ef7445 | ||
| 
						 | 
					6298bf9073 | ||
| 
						 | 
					9a26adf598 | ||
| 
						 | 
					405ac901c9 | ||
| 
						 | 
					721ccb6cf5 | ||
| 
						 | 
					64ad04eb2d | ||
| 
						 | 
					ba05727773 | ||
| 
						 | 
					349b293353 | ||
| 
						 | 
					fd91256316 | ||
| 
						 | 
					f9332da521 | ||
| 
						 | 
					a9a025d08c | ||
| 
						 | 
					156516ce44 | ||
| 
						 | 
					157e44a799 | ||
| 
						 | 
					b605e3ada3 | ||
| 
						 | 
					02cbedc387 | ||
| 
						 | 
					e5d814d040 | ||
| 
						 | 
					b09f4fb271 | ||
| 
						 | 
					1f4eada3b4 | ||
| 
						 | 
					b935754cb0 | ||
| 
						 | 
					7d2ff3f081 | ||
| 
						 | 
					396bc53593 | ||
| 
						 | 
					25a87e82d4 | ||
| 
						 | 
					e400753ed8 | ||
| 
						 | 
					0984fcf118 | ||
| 
						 | 
					18cc99ac17 | ||
| 
						 | 
					1522c23470 | ||
| 
						 | 
					2341e303da | ||
| 
						 | 
					dca142029c | ||
| 
						 | 
					7711de24f9 | ||
| 
						 | 
					7448f5e5ed | ||
| 
						 | 
					eee6c81af8 | ||
| 
						 | 
					b89670ef0e | ||
| 
						 | 
					45caf9c50c | ||
| 
						 | 
					0fccb00b5b | ||
| 
						 | 
					ace2ca484b | ||
| 
						 | 
					72da660ddb | ||
| 
						 | 
					7dc584ed91 | ||
| 
						 | 
					855f0b4f2f | ||
| 
						 | 
					46ffee4792 | ||
| 
						 | 
					c0a953650b | ||
| 
						 | 
					2bf30d6b47 | ||
| 
						 | 
					685e7d7225 | ||
| 
						 | 
					0424fe1a8f | ||
| 
						 | 
					544a2aea4b | ||
| 
						 | 
					38dbcb2248 | ||
| 
						 | 
					bb3a69f801 | ||
| 
						 | 
					60e5f36d27 | ||
| 
						 | 
					55db40d3e0 | ||
| 
						 | 
					f1fbf15116 | ||
| 
						 | 
					2469361c0f | ||
| 
						 | 
					9bdbdda261 | ||
| 
						 | 
					6fa865a325 | ||
| 
						 | 
					ad2057500a | ||
| 
						 | 
					e9ba69631b | ||
| 
						 | 
					d0e3726ca4 | ||
| 
						 | 
					75a46764e5 | ||
| 
						 | 
					d80a8d1919 | ||
| 
						 | 
					d0ff2a237b | ||
| 
						 | 
					6e5dd63c77 | ||
| 
						 | 
					4eceda658b | ||
| 
						 | 
					1c511bdb7c | ||
| 
						 | 
					dc014d43af | ||
| 
						 | 
					f9bd76e4f7 | ||
| 
						 | 
					2f9cf160e4 | ||
| 
						 | 
					336c35dc9e | ||
| 
						 | 
					e74e0dedcd | ||
| 
						 | 
					dcf6eb2a9e | ||
| 
						 | 
					72b5215645 | ||
| 
						 | 
					7d2980f09e | ||
| 
						 | 
					06bed64317 | ||
| 
						 | 
					f1fe6fa6e4 | ||
| 
						 | 
					c559759265 | ||
| 
						 | 
					ecb7a9c73a | ||
| 
						 | 
					b4000e8ad8 | ||
| 
						 | 
					21d5ed98d5 | ||
| 
						 | 
					aebe0396e9 | ||
| 
						 | 
					4e9a77cf26 | ||
| 
						 | 
					e9a182fa30 | ||
| 
						 | 
					14ef32631c | ||
| 
						 | 
					b6db386ffd | ||
| 
						 | 
					2c975b501d | ||
| 
						 | 
					500f07c8de | ||
| 
						 | 
					279fe3b1c5 | ||
| 
						 | 
					98a9092af1 | ||
| 
						 | 
					ae936dae90 | ||
| 
						 | 
					87108f5af9 | ||
| 
						 | 
					67166dc05c | ||
| 
						 | 
					aa9fed8cc2 | ||
| 
						 | 
					f257d984b7 | ||
| 
						 | 
					b889d6a8e8 | ||
| 
						 | 
					442eb8a4c3 | ||
| 
						 | 
					46805f696d | ||
| 
						 | 
					47234cd3d2 | ||
| 
						 | 
					29f6a99432 | ||
| 
						 | 
					2c8d0dccfc | ||
| 
						 | 
					a4f576a378 | ||
| 
						 | 
					1f13793b1a | ||
| 
						 | 
					3def5a010e | ||
| 
						 | 
					08130eb158 | ||
| 
						 | 
					294bd1e2f3 | ||
| 
						 | 
					253ef2187c | ||
| 
						 | 
					b27dfeacc9 | ||
| 
						 | 
					fb0f53b2e0 | ||
| 
						 | 
					c0455cbb18 | ||
| 
						 | 
					baa521bef5 | ||
| 
						 | 
					17e2c77a77 | ||
| 
						 | 
					7bcf65a125 | ||
| 
						 | 
					b52f3818f4 | ||
| 
						 | 
					306009bb6a | ||
| 
						 | 
					cc12975514 | ||
| 
						 | 
					9738f395c6 | ||
| 
						 | 
					d4294c8984 | ||
| 
						 | 
					dfc5336975 | ||
| 
						 | 
					8df61b5011 | ||
| 
						 | 
					f1e6643751 | ||
| 
						 | 
					4cea95a547 | ||
| 
						 | 
					6991bf196c | ||
| 
						 | 
					b23b3272dc | ||
| 
						 | 
					822a4c1bdb | ||
| 
						 | 
					1696aa1891 | ||
| 
						 | 
					52407725c9 | ||
| 
						 | 
					a5868b3fe2 | ||
| 
						 | 
					81da3c3319 | ||
| 
						 | 
					4edfacb983 | ||
| 
						 | 
					c6efe6f59e | ||
| 
						 | 
					7729bc2634 | ||
| 
						 | 
					69a305d434 | ||
| 
						 | 
					35c2b3a9ac | ||
| 
						 | 
					ab5b1cf86b | ||
| 
						 | 
					af9675e75a | ||
| 
						 | 
					c33387749b | ||
| 
						 | 
					c9ca65b469 | ||
| 
						 | 
					8b2f9cdfad | ||
| 
						 | 
					8e078f45e0 | ||
| 
						 | 
					01682a8b3c | ||
| 
						 | 
					8b07f23c30 | ||
| 
						 | 
					45932ad508 | ||
| 
						 | 
					ce94682ce1 | ||
| 
						 | 
					2d7ab7e9ea | ||
| 
						 | 
					f84ffd0130 | ||
| 
						 | 
					6176df94ed | ||
| 
						 | 
					a8f8788248 | ||
| 
						 | 
					300e3d7c73 | ||
| 
						 | 
					d5d007abe3 | ||
| 
						 | 
					365c6e4661 | ||
| 
						 | 
					151457ab16 | ||
| 
						 | 
					1dc03ef706 | ||
| 
						 | 
					dde3e83129 | ||
| 
						 | 
					8f182fdc69 | ||
| 
						 | 
					1064acafc4 | ||
| 
						 | 
					d4a67e3186 | ||
| 
						 | 
					ff8e412ceb | ||
| 
						 | 
					e9cbcb1d98 | ||
| 
						 | 
					18e10315e5 | ||
| 
						 | 
					ea7fc0311c | ||
| 
						 | 
					e9caaa4ad9 | ||
| 
						 | 
					30911232c1 | ||
| 
						 | 
					a6198b9ed1 | ||
| 
						 | 
					2940a1298e | ||
| 
						 | 
					a7be294ed7 | ||
| 
						 | 
					617f461c9d | ||
| 
						 | 
					f916052eab | ||
| 
						 | 
					2fb3f002d0 | ||
| 
						 | 
					1dcb6c994f | ||
| 
						 | 
					a9ab63c01c | ||
| 
						 | 
					82b0bf0b87 | ||
| 
						 | 
					f89db4020f | ||
| 
						 | 
					393c09659e | ||
| 
						 | 
					3a7cef3e76 | ||
| 
						 | 
					592c0e0273 | ||
| 
						 | 
					08b977b5a5 | ||
| 
						 | 
					2d96549cd0 | ||
| 
						 | 
					b48892d403 | ||
| 
						 | 
					85fb12d554 | ||
| 
						 | 
					b975183c41 | ||
| 
						 | 
					7b907f0bb5 | ||
| 
						 | 
					083100e2ab | ||
| 
						 | 
					9dfcad117c | ||
| 
						 | 
					241d2ba1da | ||
| 
						 | 
					e4fb49775b | ||
| 
						 | 
					7018feed88 | ||
| 
						 | 
					381a146dc6 | ||
| 
						 | 
					9be529f12d | ||
| 
						 | 
					b4a262832a | ||
| 
						 | 
					f5e5277908 | ||
| 
						 | 
					c991c6e710 | ||
| 
						 | 
					6d498d478e | ||
| 
						 | 
					e1f4319279 | ||
| 
						 | 
					d0561b5c2d | ||
| 
						 | 
					4f4b192402 | ||
| 
						 | 
					2826fcc851 | ||
| 
						 | 
					0ae1661ba2 | ||
| 
						 | 
					4e9ef338fc | ||
| 
						 | 
					d16e1131b4 | ||
| 
						 | 
					37562f753a | ||
| 
						 | 
					a18894d159 | ||
| 
						 | 
					248252682c | ||
| 
						 | 
					dfee50ecd9 | ||
| 
						 | 
					cc3586028e | ||
| 
						 | 
					10189984f9 | ||
| 
						 | 
					f60df86c89 | ||
| 
						 | 
					d8425465a3 | ||
| 
						 | 
					bc7a3a9e99 | ||
| 
						 | 
					1fc02dcf6a | ||
| 
						 | 
					d3cbf7d86a | ||
| 
						 | 
					313bf45e42 | ||
| 
						 | 
					83d092f785 | ||
| 
						 | 
					ce34d0ac09 | ||
| 
						 | 
					4825092bbe | ||
| 
						 | 
					4e9dd6b0f5 | ||
| 
						 | 
					bbd79bdf03 | ||
| 
						 | 
					b6ccbffe2b | ||
| 
						 | 
					a096e9b719 | ||
| 
						 | 
					ddab25a90d | ||
| 
						 | 
					1aecc34e9e | ||
| 
						 | 
					ffbe98b763 | ||
| 
						 | 
					75b9c0044c | ||
| 
						 | 
					d7a9bb0a2a | ||
| 
						 | 
					0d81c69b8e | ||
| 
						 | 
					600b77a93f | ||
| 
						 | 
					401cd0af0f | ||
| 
						 | 
					39335c356b | ||
| 
						 | 
					c7b41e67f0 | ||
| 
						 | 
					a3c62bb737 | ||
| 
						 | 
					003144a8e8 | ||
| 
						 | 
					af1cb47e65 | ||
| 
						 | 
					e8e7fbdb16 | ||
| 
						 | 
					2f6263a696 | ||
| 
						 | 
					d5c21afd4b | ||
| 
						 | 
					35748f40d6 | ||
| 
						 | 
					1afa967909 | ||
| 
						 | 
					ed62478192 | ||
| 
						 | 
					9e7733a743 | ||
| 
						 | 
					85b7b80434 | ||
| 
						 | 
					fe0f662310 | ||
| 
						 | 
					fc0bdd1aa8 | ||
| 
						 | 
					90453438ff | ||
| 
						 | 
					e9dad4048f | ||
| 
						 | 
					2e63f3b733 | ||
| 
						 | 
					125cc35b59 | ||
| 
						 | 
					ddba94214f | ||
| 
						 | 
					e9f970891d | ||
| 
						 | 
					a89cf50c59 | ||
| 
						 | 
					7e58aa7d71 | ||
| 
						 | 
					f90c544039 | ||
| 
						 | 
					be3d90de02 | ||
| 
						 | 
					82652aaf17 | ||
| 
						 | 
					afcf54a5c9 | ||
| 
						 | 
					17d6bb8158 | ||
| 
						 | 
					3671e38af4 | ||
| 
						 | 
					11c26ecf81 | ||
| 
						 | 
					99d5b23023 | ||
| 
						 | 
					611ba3f4a1 | ||
| 
						 | 
					4fc3946111 | ||
| 
						 | 
					af28dd6c75 | ||
| 
						 | 
					e79ec456be | ||
| 
						 | 
					3e268d2717 | ||
| 
						 | 
					59a941e4a4 | ||
| 
						 | 
					a7cd5f3f38 | ||
| 
						 | 
					c46acbacde | ||
| 
						 | 
					304d90425f | ||
| 
						 | 
					0bdbc5a86e | ||
| 
						 | 
					bfaa8a89e1 | ||
| 
						 | 
					abecef77cf | ||
| 
						 | 
					de941e289e | ||
| 
						 | 
					b74dfe6e8e | ||
| 
						 | 
					1d28453529 | ||
| 
						 | 
					d80f6e0f8c | ||
| 
						 | 
					690ecff795 | ||
| 
						 | 
					234c73767d | ||
| 
						 | 
					13962f0b15 | ||
| 
						 | 
					2fc1f3dd48 | ||
| 
						 | 
					497810cae7 | ||
| 
						 | 
					f2cbb15468 | ||
| 
						 | 
					e38e8b29f8 | ||
| 
						 | 
					cbc9d9713d | ||
| 
						 | 
					c03ceadfbd | ||
| 
						 | 
					98fa4fe8c5 | ||
| 
						 | 
					e50baf58ab | ||
| 
						 | 
					0b4c91c0fc | ||
| 
						 | 
					b9b43196e1 | ||
| 
						 | 
					1750ec5c52 | ||
| 
						 | 
					bf6a9e66d6 | ||
| 
						 | 
					c77bd28775 | ||
| 
						 | 
					0c372b94f7 | ||
| 
						 | 
					1619add90c | ||
| 
						 | 
					a1a4e8b6bb | ||
| 
						 | 
					26e1237380 | ||
| 
						 | 
					25f350a058 | ||
| 
						 | 
					4882171df5 | ||
| 
						 | 
					121cb9ee38 | ||
| 
						 | 
					931627e6a0 | ||
| 
						 | 
					bc173b9fb0 | ||
| 
						 | 
					274a2c9970 | ||
| 
						 | 
					006fcc22a8 | ||
| 
						 | 
					4fd9c70f06 | ||
| 
						 | 
					709c51c424 | ||
| 
						 | 
					9bc448546e | ||
| 
						 | 
					91aeab0de3 | ||
| 
						 | 
					0dc092334b | ||
| 
						 | 
					c913cf446f | ||
| 
						 | 
					36c194638e | ||
| 
						 | 
					45fb737950 | ||
| 
						 | 
					a01273bae3 | ||
| 
						 | 
					a88f39457b | ||
| 
						 | 
					2bbaab4a24 | ||
| 
						 | 
					2c17323e15 | ||
| 
						 | 
					870694b3da | ||
| 
						 | 
					1a8f4b57a9 | ||
| 
						 | 
					87a4b4d1f4 | ||
| 
						 | 
					022b31a8c8 | ||
| 
						 | 
					8ecf5104b3 | ||
| 
						 | 
					2b3aeffbbd | ||
| 
						 | 
					dd6b494eb3 | ||
| 
						 | 
					2c2f9e2cc3 | ||
| 
						 | 
					2d9b1b3ffa | ||
| 
						 | 
					f070480275 | ||
| 
						 | 
					49f1597de2 | ||
| 
						 | 
					c9bea5bad3 | ||
| 
						 | 
					b44e425f39 | ||
| 
						 | 
					296324ea03 | ||
| 
						 | 
					93683c3cf8 | ||
| 
						 | 
					fa41e86a28 | ||
| 
						 | 
					9e77b7075a | ||
| 
						 | 
					a08ee55e2d | ||
| 
						 | 
					5c7f9a627f | ||
| 
						 | 
					3bac6d9479 | ||
| 
						 | 
					bc3e3472c1 | ||
| 
						 | 
					5c5143de48 | ||
| 
						 | 
					c8cd7d9e0f | ||
| 
						 | 
					66bd86e2c2 | ||
| 
						 | 
					e0a6cdcf30 | ||
| 
						 | 
					487fe20490 | ||
| 
						 | 
					a0ecb9b8fc | ||
| 
						 | 
					80d9b1ccd7 | ||
| 
						 | 
					4bf4bc784f | ||
| 
						 | 
					69c48301e0 | ||
| 
						 | 
					2be9b88135 | ||
| 
						 | 
					9437fef8cc | ||
| 
						 | 
					16b0384bd2 | ||
| 
						 | 
					98fa4fce09 | ||
| 
						 | 
					1ec1d17e16 | ||
| 
						 | 
					87ebdd8a71 | ||
| 
						 | 
					1e11df0dc3 | ||
| 
						 | 
					7d68189d8a | ||
| 
						 | 
					421d474332 | ||
| 
						 | 
					26414ee013 | ||
| 
						 | 
					58060fa11b | ||
| 
						 | 
					5c62f68e14 | ||
| 
						 | 
					cea698f19c | ||
| 
						 | 
					0d22b5dace | ||
| 
						 | 
					48781ef7f7 | ||
| 
						 | 
					023ec151df | ||
| 
						 | 
					59dbdb51dc | ||
| 
						 | 
					92d1bc09cb | ||
| 
						 | 
					6d1a837df7 | ||
| 
						 | 
					21f422ca5e | ||
| 
						 | 
					d62bfb39cd | ||
| 
						 | 
					291ae60b52 | ||
| 
						 | 
					ce4b274aa1 | ||
| 
						 | 
					3b79d2789d | ||
| 
						 | 
					334f1842fc | ||
| 
						 | 
					b12540520d | ||
| 
						 | 
					bb9dcc99cf | ||
| 
						 | 
					0d7b9b8b7e | ||
| 
						 | 
					3d59821134 | ||
| 
						 | 
					31188ee1a8 | ||
| 
						 | 
					cae111287b | ||
| 
						 | 
					e36e473859 | ||
| 
						 | 
					4a3e6bce79 | ||
| 
						 | 
					a3829cb720 | ||
| 
						 | 
					d7fb66aa82 | ||
| 
						 | 
					344b3b5ce1 | ||
| 
						 | 
					3f7cf29124 | ||
| 
						 | 
					63dc69fef6 | ||
| 
						 | 
					e84be9b495 | ||
| 
						 | 
					cfe1c195c4 | ||
| 
						 | 
					3a3ca3f515 | ||
| 
						 | 
					032c49b8b3 | ||
| 
						 | 
					3208ff58ca | ||
| 
						 | 
					6707d22a40 | ||
| 
						 | 
					3647bee263 | ||
| 
						 | 
					0cd8572b2d | ||
| 
						 | 
					7c2831ac90 | ||
| 
						 | 
					e2aebccba1 | ||
| 
						 | 
					de603b75fc | ||
| 
						 | 
					3e563bcea7 | ||
| 
						 | 
					1244be2eda | ||
| 
						 | 
					92f91ff48b | ||
| 
						 | 
					9f0a373b51 | ||
| 
						 | 
					b3dfaaa143 | ||
| 
						 | 
					b0701709c1 | ||
| 
						 | 
					5b7848a345 | ||
| 
						 | 
					34aa216a65 | ||
| 
						 | 
					915c6a21ba | ||
| 
						 | 
					a76a29f233 | ||
| 
						 | 
					4e06ab75e8 | ||
| 
						 | 
					58706d595b | ||
| 
						 | 
					236be53269 | ||
| 
						 | 
					1fc1bd382b | ||
| 
						 | 
					26147fb954 | ||
| 
						 | 
					a60033f106 | ||
| 
						 | 
					3613e6fc57 | ||
| 
						 | 
					f8e21776f9 | ||
| 
						 | 
					006723cf76 | ||
| 
						 | 
					bd53a054b1 | ||
| 
						 | 
					aa89bcd279 | ||
| 
						 | 
					f19759a182 | ||
| 
						 | 
					d009bcbfb6 | ||
| 
						 | 
					211b8685d3 | ||
| 
						 | 
					4b71f63ac0 | ||
| 
						 | 
					3adb8c3854 | ||
| 
						 | 
					02e666d59f | ||
| 
						 | 
					5b2d6ff07e | ||
| 
						 | 
					877b2fbd3c | ||
| 
						 | 
					afeab58a3c | ||
| 
						 | 
					744c49a81b | ||
| 
						 | 
					9c75b2d931 | ||
| 
						 | 
					54d11e6057 | ||
| 
						 | 
					9c5b91fd0b | ||
| 
						 | 
					290d3eab76 | ||
| 
						 | 
					46dae77c23 | ||
| 
						 | 
					3d7ba69a05 | ||
| 
						 | 
					a6cd870784 | ||
| 
						 | 
					58133d22a8 | ||
| 
						 | 
					330e5c5460 | ||
| 
						 | 
					97879bcd57 | ||
| 
						 | 
					ab519c8262 | ||
| 
						 | 
					ab1dee1efc | ||
| 
						 | 
					e072aa535d | ||
| 
						 | 
					48f9859d2a | ||
| 
						 | 
					48b5083ca0 | ||
| 
						 | 
					cd64618674 | ||
| 
						 | 
					65f29a78b2 | ||
| 
						 | 
					5d7e960adf | ||
| 
						 | 
					c363b5a62f | ||
| 
						 | 
					60ed0f94ed | ||
| 
						 | 
					f38f8d94a9 | ||
| 
						 | 
					679eb352e0 | ||
| 
						 | 
					80bbb6578e | ||
| 
						 | 
					19cc0f0ab4 | ||
| 
						 | 
					14e14ea68c | ||
| 
						 | 
					834d37ed86 | ||
| 
						 | 
					adcc235ef6 | ||
| 
						 | 
					86a0d0234d | ||
| 
						 | 
					4598be561a | ||
| 
						 | 
					af5db47e99 | ||
| 
						 | 
					fb67f40f04 | ||
| 
						 | 
					48033c3242 | ||
| 
						 | 
					aa1f5b3581 | ||
| 
						 | 
					d9d3a69595 | ||
| 
						 | 
					f9adfa6d4e | ||
| 
						 | 
					85b1fce1ef | ||
| 
						 | 
					da566db150 | ||
| 
						 | 
					be37dc73f6 | ||
| 
						 | 
					976b2c9c2f | ||
| 
						 | 
					b74d2cda28 | ||
| 
						 | 
					cc5dd9f14e | ||
| 
						 | 
					fbfcdc4cef | 
@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					openssl.pc
 | 
				
			||||||
Makefile.ssl
 | 
					Makefile.ssl
 | 
				
			||||||
MINFO
 | 
					MINFO
 | 
				
			||||||
makefile.one
 | 
					makefile.one
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										197
									
								
								FAQ
									
									
									
									
									
								
							
							
						
						
									
										197
									
								
								FAQ
									
									
									
									
									
								
							@@ -9,6 +9,7 @@ OpenSSL  -  Frequently Asked Questions
 | 
				
			|||||||
* Where can I get a compiled version of OpenSSL?
 | 
					* Where can I get a compiled version of OpenSSL?
 | 
				
			||||||
* Why aren't tools like 'autoconf' and 'libtool' used?
 | 
					* Why aren't tools like 'autoconf' and 'libtool' used?
 | 
				
			||||||
* What is an 'engine' version?
 | 
					* What is an 'engine' version?
 | 
				
			||||||
 | 
					* How do I check the authenticity of the OpenSSL distribution?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[LEGAL] Legal questions
 | 
					[LEGAL] Legal questions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -29,15 +30,22 @@ OpenSSL  -  Frequently Asked Questions
 | 
				
			|||||||
* Why can't I use OpenSSL certificates with SSL client authentication?
 | 
					* Why can't I use OpenSSL certificates with SSL client authentication?
 | 
				
			||||||
* Why does my browser give a warning about a mismatched hostname?
 | 
					* Why does my browser give a warning about a mismatched hostname?
 | 
				
			||||||
* How do I install a CA certificate into a browser?
 | 
					* How do I install a CA certificate into a browser?
 | 
				
			||||||
 | 
					* Why is OpenSSL x509 DN output not conformant to RFC2253?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[BUILD] Questions about building and testing OpenSSL
 | 
					[BUILD] Questions about building and testing OpenSSL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Why does the linker complain about undefined symbols?
 | 
					* Why does the linker complain about undefined symbols?
 | 
				
			||||||
* Why does the OpenSSL test fail with "bc: command not found"?
 | 
					* Why does the OpenSSL test fail with "bc: command not found"?
 | 
				
			||||||
* Why does the OpenSSL test fail with "bc: 1 no implemented"?
 | 
					* Why does the OpenSSL test fail with "bc: 1 no implemented"?
 | 
				
			||||||
 | 
					* Why does the OpenSSL test fail with "bc: stack empty"?
 | 
				
			||||||
* Why does the OpenSSL compilation fail on Alpha Tru64 Unix?
 | 
					* Why does the OpenSSL compilation fail on Alpha Tru64 Unix?
 | 
				
			||||||
* Why does the OpenSSL compilation fail with "ar: command not found"?
 | 
					* Why does the OpenSSL compilation fail with "ar: command not found"?
 | 
				
			||||||
* Why does the OpenSSL compilation fail on Win32 with VC++?
 | 
					* Why does the OpenSSL compilation fail on Win32 with VC++?
 | 
				
			||||||
 | 
					* What is special about OpenSSL on Redhat?
 | 
				
			||||||
 | 
					* Why does the OpenSSL compilation fail on MacOS X?
 | 
				
			||||||
 | 
					* Why does the OpenSSL test suite fail on MacOS X?
 | 
				
			||||||
 | 
					* Why does the OpenSSL test suite fail in BN_sqr test [on a 64-bit platform]?
 | 
				
			||||||
 | 
					* Why does OpenBSD-i386 build fail on des-586.s with "Unimplemented segment type"?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[PROG] Questions about programming with OpenSSL
 | 
					[PROG] Questions about programming with OpenSSL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -51,6 +59,7 @@ OpenSSL  -  Frequently Asked Questions
 | 
				
			|||||||
* Why can't the OpenSSH configure script detect OpenSSL?
 | 
					* Why can't the OpenSSH configure script detect OpenSSL?
 | 
				
			||||||
* Can I use OpenSSL's SSL library with non-blocking I/O?
 | 
					* Can I use OpenSSL's SSL library with non-blocking I/O?
 | 
				
			||||||
* Why doesn't my server application receive a client certificate?
 | 
					* Why doesn't my server application receive a client certificate?
 | 
				
			||||||
 | 
					* Why does compilation fail due to an undefined symbol NID_uniqueIdentifier?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
===============================================================================
 | 
					===============================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -59,7 +68,7 @@ OpenSSL  -  Frequently Asked Questions
 | 
				
			|||||||
* Which is the current version of OpenSSL?
 | 
					* Which is the current version of OpenSSL?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The current version is available from <URL: http://www.openssl.org>.
 | 
					The current version is available from <URL: http://www.openssl.org>.
 | 
				
			||||||
OpenSSL 0.9.6c was released on December 21st, 2001.
 | 
					OpenSSL 0.9.7d was released on March 17, 2004.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
In addition to the current stable release, you can also access daily
 | 
					In addition to the current stable release, you can also access daily
 | 
				
			||||||
snapshots of the OpenSSL development version at <URL:
 | 
					snapshots of the OpenSSL development version at <URL:
 | 
				
			||||||
@@ -107,11 +116,14 @@ OpenSSL.  Information on the OpenSSL mailing lists is available from
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
* Where can I get a compiled version of OpenSSL?
 | 
					* Where can I get a compiled version of OpenSSL?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can finder pointers to binary distributions in
 | 
				
			||||||
 | 
					http://www.openssl.org/related/binaries.html .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Some applications that use OpenSSL are distributed in binary form.
 | 
					Some applications that use OpenSSL are distributed in binary form.
 | 
				
			||||||
When using such an application, you don't need to install OpenSSL
 | 
					When using such an application, you don't need to install OpenSSL
 | 
				
			||||||
yourself; the application will include the required parts (e.g. DLLs).
 | 
					yourself; the application will include the required parts (e.g. DLLs).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you want to install OpenSSL on a Windows system and you don't have
 | 
					If you want to build OpenSSL on a Windows system and you don't have
 | 
				
			||||||
a C compiler, read the "Mingw32" section of INSTALL.W32 for information
 | 
					a C compiler, read the "Mingw32" section of INSTALL.W32 for information
 | 
				
			||||||
on how to obtain and install the free GNU C compiler.
 | 
					on how to obtain and install the free GNU C compiler.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -130,6 +142,19 @@ hardware. This was realized in a special release '0.9.6-engine'. With
 | 
				
			|||||||
version 0.9.7 (not yet released) the changes were merged into the main
 | 
					version 0.9.7 (not yet released) the changes were merged into the main
 | 
				
			||||||
development line, so that the special release is no longer necessary.
 | 
					development line, so that the special release is no longer necessary.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* How do I check the authenticity of the OpenSSL distribution?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					We provide MD5 digests and ASC signatures of each tarball.
 | 
				
			||||||
 | 
					Use MD5 to check that a tarball from a mirror site is identical:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   md5sum TARBALL | awk '{print $1;}' | cmp - TARBALL.md5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can check authenticity using pgp or gpg. You need the OpenSSL team
 | 
				
			||||||
 | 
					member public key used to sign it (download it from a key server). Then
 | 
				
			||||||
 | 
					just do:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   pgp TARBALL.asc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[LEGAL] =======================================================================
 | 
					[LEGAL] =======================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Do I need patent licenses to use OpenSSL?
 | 
					* Do I need patent licenses to use OpenSSL?
 | 
				
			||||||
@@ -167,18 +192,30 @@ for permission to use their software with OpenSSL.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Cryptographic software needs a source of unpredictable data to work
 | 
					Cryptographic software needs a source of unpredictable data to work
 | 
				
			||||||
correctly.  Many open source operating systems provide a "randomness
 | 
					correctly.  Many open source operating systems provide a "randomness
 | 
				
			||||||
device" that serves this purpose.  On other systems, applications have
 | 
					device" (/dev/urandom or /dev/random) that serves this purpose.
 | 
				
			||||||
to call the RAND_add() or RAND_seed() function with appropriate data
 | 
					All OpenSSL versions try to use /dev/urandom by default; starting with
 | 
				
			||||||
before generating keys or performing public key encryption.
 | 
					version 0.9.7, OpenSSL also tries /dev/random if /dev/urandom is not
 | 
				
			||||||
(These functions initialize the pseudo-random number generator, PRNG.)
 | 
					available.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Some broken applications do not do this.  As of version 0.9.5, the
 | 
					On other systems, applications have to call the RAND_add() or
 | 
				
			||||||
OpenSSL functions that need randomness report an error if the random
 | 
					RAND_seed() function with appropriate data before generating keys or
 | 
				
			||||||
number generator has not been seeded with at least 128 bits of
 | 
					performing public key encryption. (These functions initialize the
 | 
				
			||||||
randomness.  If this error occurs, please contact the author of the
 | 
					pseudo-random number generator, PRNG.)  Some broken applications do
 | 
				
			||||||
application you are using.  It is likely that it never worked
 | 
					not do this.  As of version 0.9.5, the OpenSSL functions that need
 | 
				
			||||||
correctly.  OpenSSL 0.9.5 and later make the error visible by refusing
 | 
					randomness report an error if the random number generator has not been
 | 
				
			||||||
to perform potentially insecure encryption.
 | 
					seeded with at least 128 bits of randomness.  If this error occurs and
 | 
				
			||||||
 | 
					is not discussed in the documentation of the application you are
 | 
				
			||||||
 | 
					using, please contact the author of that application; it is likely
 | 
				
			||||||
 | 
					that it never worked correctly.  OpenSSL 0.9.5 and later make the
 | 
				
			||||||
 | 
					error visible by refusing to perform potentially insecure encryption.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you are using Solaris 8, you can add /dev/urandom and /dev/random
 | 
				
			||||||
 | 
					devices by installing patch 112438 (Sparc) or 112439 (x86), which are
 | 
				
			||||||
 | 
					available via the Patchfinder at <URL: http://sunsolve.sun.com>
 | 
				
			||||||
 | 
					(Solaris 9 includes these devices by default). For /dev/random support
 | 
				
			||||||
 | 
					for earlier Solaris versions, see Sun's statement at
 | 
				
			||||||
 | 
					<URL: http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsrdb/27606&zone_32=SUNWski>
 | 
				
			||||||
 | 
					(the SUNWski package is available in patch 105710).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
On systems without /dev/urandom and /dev/random, it is a good idea to
 | 
					On systems without /dev/urandom and /dev/random, it is a good idea to
 | 
				
			||||||
use the Entropy Gathering Demon (EGD); see the RAND_egd() manpage for
 | 
					use the Entropy Gathering Demon (EGD); see the RAND_egd() manpage for
 | 
				
			||||||
@@ -211,13 +248,6 @@ OpenSSL command line tools. Applications using the OpenSSL library
 | 
				
			|||||||
provide their own configuration options to specify the entropy source,
 | 
					provide their own configuration options to specify the entropy source,
 | 
				
			||||||
please check out the documentation coming the with application.
 | 
					please check out the documentation coming the with application.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
For Solaris 2.6, Tim Nibbe <tnibbe@sprint.net> and others have suggested
 | 
					 | 
				
			||||||
installing the SUNski package from Sun patch 105710-01 (Sparc) which
 | 
					 | 
				
			||||||
adds a /dev/random device and make sure it gets used, usually through
 | 
					 | 
				
			||||||
$RANDFILE.  There are probably similar patches for the other Solaris
 | 
					 | 
				
			||||||
versions.  However, be warned that /dev/random is usually a blocking
 | 
					 | 
				
			||||||
device, which may have some effects on OpenSSL.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Why do I get an "unable to write 'random state'" error message?
 | 
					* Why do I get an "unable to write 'random state'" error message?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -343,6 +373,13 @@ DO NOT DO THIS! This command will give away your CAs private key and
 | 
				
			|||||||
reduces its security to zero: allowing anyone to forge certificates in
 | 
					reduces its security to zero: allowing anyone to forge certificates in
 | 
				
			||||||
whatever name they choose.
 | 
					whatever name they choose.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Why is OpenSSL x509 DN output not conformant to RFC2253?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The ways to print out the oneline format of the DN (Distinguished Name) have
 | 
				
			||||||
 | 
					been extended in version 0.9.7 of OpenSSL. Using the new X509_NAME_print_ex()
 | 
				
			||||||
 | 
					interface, the "-nameopt" option could be introduded. See the manual
 | 
				
			||||||
 | 
					page of the "openssl x509" commandline tool for details. The old behaviour
 | 
				
			||||||
 | 
					has however been left as default for the sake of compatibility.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[BUILD] =======================================================================
 | 
					[BUILD] =======================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -387,6 +424,17 @@ and compile/install it.  GNU bc (see http://www.gnu.org/software/software.html
 | 
				
			|||||||
for download instructions) can be safely used, for example.
 | 
					for download instructions) can be safely used, for example.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Why does the OpenSSL test fail with "bc: stack empty"?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					On some DG/ux versions, bc seems to have a too small stack for calculations
 | 
				
			||||||
 | 
					that the OpenSSL bntest throws at it.  This gets triggered when you run the
 | 
				
			||||||
 | 
					test suite (using "make test").  The message returned is "bc: stack empty".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The best way to deal with this is to find another implementation of bc
 | 
				
			||||||
 | 
					and compile/install it.  GNU bc (see http://www.gnu.org/software/software.html
 | 
				
			||||||
 | 
					for download instructions) can be safely used, for example.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Why does the OpenSSL compilation fail on Alpha Tru64 Unix?
 | 
					* Why does the OpenSSL compilation fail on Alpha Tru64 Unix?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
On some Alpha installations running Tru64 Unix and Compaq C, the compilation
 | 
					On some Alpha installations running Tru64 Unix and Compaq C, the compilation
 | 
				
			||||||
@@ -445,12 +493,104 @@ and then redo the compilation.  What you should really do is make sure
 | 
				
			|||||||
Sometimes, you may get reports from VC++ command line (cl) that it
 | 
					Sometimes, you may get reports from VC++ command line (cl) that it
 | 
				
			||||||
can't find standard include files like stdio.h and other weirdnesses.
 | 
					can't find standard include files like stdio.h and other weirdnesses.
 | 
				
			||||||
One possible cause is that the environment isn't correctly set up.
 | 
					One possible cause is that the environment isn't correctly set up.
 | 
				
			||||||
To solve that problem, one should run VCVARS32.BAT which is found in
 | 
					To solve that problem for VC++ versions up to 6, one should run
 | 
				
			||||||
the 'bin' subdirectory of the VC++ installation directory (somewhere
 | 
					VCVARS32.BAT which is found in the 'bin' subdirectory of the VC++
 | 
				
			||||||
under 'Program Files').  This needs to be done prior to running NMAKE,
 | 
					installation directory (somewhere under 'Program Files').  For VC++
 | 
				
			||||||
and the changes are only valid for the current DOS session.
 | 
					version 7 (and up?), which is also called VS.NET, the file is called
 | 
				
			||||||
 | 
					VSVARS32.BAT instead.
 | 
				
			||||||
 | 
					This needs to be done prior to running NMAKE, and the changes are only
 | 
				
			||||||
 | 
					valid for the current DOS session.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* What is special about OpenSSL on Redhat?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Red Hat Linux (release 7.0 and later) include a preinstalled limited
 | 
				
			||||||
 | 
					version of OpenSSL. For patent reasons, support for IDEA, RC5 and MDC2
 | 
				
			||||||
 | 
					is disabled in this version. The same may apply to other Linux distributions.
 | 
				
			||||||
 | 
					Users may therefore wish to install more or all of the features left out.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To do this you MUST ensure that you do not overwrite the openssl that is in
 | 
				
			||||||
 | 
					/usr/bin on your Red Hat machine. Several packages depend on this file,
 | 
				
			||||||
 | 
					including sendmail and ssh. /usr/local/bin is a good alternative choice. The
 | 
				
			||||||
 | 
					libraries that come with Red Hat 7.0 onwards have different names and so are
 | 
				
			||||||
 | 
					not affected. (eg For Red Hat 7.2 they are /lib/libssl.so.0.9.6b and
 | 
				
			||||||
 | 
					/lib/libcrypto.so.0.9.6b with symlinks /lib/libssl.so.2 and
 | 
				
			||||||
 | 
					/lib/libcrypto.so.2 respectively).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Please note that we have been advised by Red Hat attempting to recompile the
 | 
				
			||||||
 | 
					openssl rpm with all the cryptography enabled will not work. All other
 | 
				
			||||||
 | 
					packages depend on the original Red Hat supplied openssl package. It is also
 | 
				
			||||||
 | 
					worth noting that due to the way Red Hat supplies its packages, updates to
 | 
				
			||||||
 | 
					openssl on each distribution never change the package version, only the
 | 
				
			||||||
 | 
					build number. For example, on Red Hat 7.1, the latest openssl package has
 | 
				
			||||||
 | 
					version number 0.9.6 and build number 9 even though it contains all the
 | 
				
			||||||
 | 
					relevant updates in packages up to and including 0.9.6b.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A possible way around this is to persuade Red Hat to produce a non-US
 | 
				
			||||||
 | 
					version of Red Hat Linux.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FYI: Patent numbers and expiry dates of US patents:
 | 
				
			||||||
 | 
					MDC-2: 4,908,861 13/03/2007
 | 
				
			||||||
 | 
					IDEA:  5,214,703 25/05/2010
 | 
				
			||||||
 | 
					RC5:   5,724,428 03/03/2015
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Why does the OpenSSL compilation fail on MacOS X?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If the failure happens when trying to build the "openssl" binary, with
 | 
				
			||||||
 | 
					a large number of undefined symbols, it's very probable that you have
 | 
				
			||||||
 | 
					OpenSSL 0.9.6b delivered with the operating system (you can find out by
 | 
				
			||||||
 | 
					running '/usr/bin/openssl version') and that you were trying to build
 | 
				
			||||||
 | 
					OpenSSL 0.9.7 or newer.  The problem is that the loader ('ld') in
 | 
				
			||||||
 | 
					MacOS X has a misfeature that's quite difficult to go around.
 | 
				
			||||||
 | 
					Look in the file PROBLEMS for a more detailed explanation and for possible
 | 
				
			||||||
 | 
					solutions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Why does the OpenSSL test suite fail on MacOS X?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If the failure happens when running 'make test' and the RC4 test fails,
 | 
				
			||||||
 | 
					it's very probable that you have OpenSSL 0.9.6b delivered with the
 | 
				
			||||||
 | 
					operating system (you can find out by running '/usr/bin/openssl version')
 | 
				
			||||||
 | 
					and that you were trying to build OpenSSL 0.9.6d.  The problem is that
 | 
				
			||||||
 | 
					the loader ('ld') in MacOS X has a misfeature that's quite difficult to
 | 
				
			||||||
 | 
					go around and has linked the programs "openssl" and the test programs
 | 
				
			||||||
 | 
					with /usr/lib/libcrypto.dylib and /usr/lib/libssl.dylib instead of the
 | 
				
			||||||
 | 
					libraries you just built.
 | 
				
			||||||
 | 
					Look in the file PROBLEMS for a more detailed explanation and for possible
 | 
				
			||||||
 | 
					solutions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Why does the OpenSSL test suite fail in BN_sqr test [on a 64-bit platform]?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Failure in BN_sqr test is most likely caused by a failure to configure the
 | 
				
			||||||
 | 
					toolkit for current platform or lack of support for the platform in question.
 | 
				
			||||||
 | 
					Run './config -t' and './apps/openssl version -p'. Do these platform
 | 
				
			||||||
 | 
					identifiers match? If they don't, then you most likely failed to run
 | 
				
			||||||
 | 
					./config and you're hereby advised to do so before filing a bug report.
 | 
				
			||||||
 | 
					If ./config itself fails to run, then it's most likely problem with your
 | 
				
			||||||
 | 
					local environment and you should turn to your system administrator (or
 | 
				
			||||||
 | 
					similar). If identifiers match (and/or no alternative identifier is
 | 
				
			||||||
 | 
					suggested by ./config script), then the platform is unsupported. There might
 | 
				
			||||||
 | 
					or might not be a workaround. Most notably on SPARC64 platforms with GNU
 | 
				
			||||||
 | 
					C compiler you should be able to produce a working build by running
 | 
				
			||||||
 | 
					'./config -m32'. I understand that -m32 might not be what you want/need,
 | 
				
			||||||
 | 
					but the build should be operational. For further details turn to
 | 
				
			||||||
 | 
					<openssl-dev@openssl.org>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Why does OpenBSD-i386 build fail on des-586.s with "Unimplemented segment type"?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					As of 0.9.7 assembler routines were overhauled for position independence
 | 
				
			||||||
 | 
					of the machine code, which is essential for shared library support. For
 | 
				
			||||||
 | 
					some reason OpenBSD is equipped with an out-of-date GNU assembler which
 | 
				
			||||||
 | 
					finds the new code offensive. To work around the problem, configure with
 | 
				
			||||||
 | 
					no-asm (and sacrifice a great deal of performance) or patch your assembler
 | 
				
			||||||
 | 
					according to <URL: http://www.openssl.org/~appro/gas-1.92.3.OpenBSD.patch>.
 | 
				
			||||||
 | 
					For your convenience a pre-compiled replacement binary is provided at
 | 
				
			||||||
 | 
					<URL: http://www.openssl.org/~appro/gas-1.92.3.static.aout.bin>.
 | 
				
			||||||
 | 
					Reportedly elder *BSD a.out platforms also suffer from this problem and
 | 
				
			||||||
 | 
					remedy should be same. Provided binary is statically linked and should be
 | 
				
			||||||
 | 
					working across wider range of *BSD branches, not just OpenBSD.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[PROG] ========================================================================
 | 
					[PROG] ========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Is OpenSSL thread-safe?
 | 
					* Is OpenSSL thread-safe?
 | 
				
			||||||
@@ -595,6 +735,7 @@ The general answer is to check the config.log file generated when running
 | 
				
			|||||||
the OpenSSH configure script. It should contain the detailed information
 | 
					the OpenSSH configure script. It should contain the detailed information
 | 
				
			||||||
on why the OpenSSL library was not detected or considered incompatible.
 | 
					on why the OpenSSL library was not detected or considered incompatible.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Can I use OpenSSL's SSL library with non-blocking I/O?
 | 
					* Can I use OpenSSL's SSL library with non-blocking I/O?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Yes; make sure to read the SSL_get_error(3) manual page!
 | 
					Yes; make sure to read the SSL_get_error(3) manual page!
 | 
				
			||||||
@@ -616,5 +757,13 @@ if explicitly asked by the server. Use the SSL_VERIFY_PEER flag of the
 | 
				
			|||||||
SSL_CTX_set_verify() function to enable the use of client certificates.
 | 
					SSL_CTX_set_verify() function to enable the use of client certificates.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Why does compilation fail due to an undefined symbol NID_uniqueIdentifier?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For OpenSSL 0.9.7 the OID table was extended and corrected. In earlier
 | 
				
			||||||
 | 
					versions, uniqueIdentifier was incorrectly used for X.509 certificates.
 | 
				
			||||||
 | 
					The correct name according to RFC2256 (LDAP) is x500UniqueIdentifier.
 | 
				
			||||||
 | 
					Change your code to use the new name when compiling against OpenSSL 0.9.7.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
===============================================================================
 | 
					===============================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										71
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						
									
										71
									
								
								INSTALL
									
									
									
									
									
								
							@@ -2,8 +2,10 @@
 | 
				
			|||||||
 INSTALLATION ON THE UNIX PLATFORM
 | 
					 INSTALLATION ON THE UNIX PLATFORM
 | 
				
			||||||
 ---------------------------------
 | 
					 ---------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 [Installation on Windows, OpenVMS and MacOS (before MacOS X) is described
 | 
					 [Installation on DOS (with djgpp), Windows, OpenVMS and MacOS (before MacOS X)
 | 
				
			||||||
  in INSTALL.W32, INSTALL.VMS and INSTALL.MacOS.]
 | 
					  is described in INSTALL.DJGPP, INSTALL.W32, INSTALL.VMS and INSTALL.MacOS.
 | 
				
			||||||
 | 
					  This document describes installation on operating systems in the Unix
 | 
				
			||||||
 | 
					  family.]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 To install OpenSSL, you will need:
 | 
					 To install OpenSSL, you will need:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -53,14 +55,20 @@
 | 
				
			|||||||
                This will usually require additional system-dependent options!
 | 
					                This will usually require additional system-dependent options!
 | 
				
			||||||
                See "Note on multi-threading" below.
 | 
					                See "Note on multi-threading" below.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  no-zlib       Don't try to build with support for zlib compression and
 | 
				
			||||||
 | 
					                decompression.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  zlib          Build with support for zlib compression/decompression.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  zlib-dynamic  Like "zlib", but has OpenSSL load the zlib library dynamically
 | 
				
			||||||
 | 
					                when needed.  This is only supported on systems where loading
 | 
				
			||||||
 | 
					                of shared libraries is supported.  This is the default choice.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  no-shared     Don't try to create shared libraries.
 | 
					  no-shared     Don't try to create shared libraries.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  shared        In addition to the usual static libraries, create shared
 | 
					  shared        In addition to the usual static libraries, create shared
 | 
				
			||||||
                libraries on platforms where it's supported.  See "Note on
 | 
					                libraries on platforms where it's supported.  See "Note on
 | 
				
			||||||
                shared libraries" below.  THIS IS NOT RECOMMENDED!  Since
 | 
					                shared libraries" below.
 | 
				
			||||||
                this is a development branch, the positions of the ENGINE
 | 
					 | 
				
			||||||
                symbols in the transfer vector are constantly moving, so
 | 
					 | 
				
			||||||
                binary backward compatibility can't be guaranteed in any way.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  no-asm        Do not use assembler code.
 | 
					  no-asm        Do not use assembler code.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -131,8 +139,11 @@
 | 
				
			|||||||
     the failure that aren't problems in OpenSSL itself (like missing
 | 
					     the failure that aren't problems in OpenSSL itself (like missing
 | 
				
			||||||
     standard headers).  If it is a problem with OpenSSL itself, please
 | 
					     standard headers).  If it is a problem with OpenSSL itself, please
 | 
				
			||||||
     report the problem to <openssl-bugs@openssl.org> (note that your
 | 
					     report the problem to <openssl-bugs@openssl.org> (note that your
 | 
				
			||||||
     message will be forwarded to a public mailing list).  Include the
 | 
					     message will be recorded in the request tracker publicly readable
 | 
				
			||||||
     output of "make report" in your message.
 | 
					     via http://www.openssl.org/support/rt2.html and will be forwarded to a
 | 
				
			||||||
 | 
					     public mailing list). Include the output of "make report" in your message.
 | 
				
			||||||
 | 
					     Please check out the request tracker. Maybe the bug was already
 | 
				
			||||||
 | 
					     reported or has already been fixed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     [If you encounter assembler error messages, try the "no-asm"
 | 
					     [If you encounter assembler error messages, try the "no-asm"
 | 
				
			||||||
     configuration option as an immediate fix.]
 | 
					     configuration option as an immediate fix.]
 | 
				
			||||||
@@ -147,10 +158,11 @@
 | 
				
			|||||||
     If a test fails, look at the output.  There may be reasons for
 | 
					     If a test fails, look at the output.  There may be reasons for
 | 
				
			||||||
     the failure that isn't a problem in OpenSSL itself (like a missing
 | 
					     the failure that isn't a problem in OpenSSL itself (like a missing
 | 
				
			||||||
     or malfunctioning bc).  If it is a problem with OpenSSL itself,
 | 
					     or malfunctioning bc).  If it is a problem with OpenSSL itself,
 | 
				
			||||||
     try removing any compiler optimization flags from the CFLAGS line
 | 
					     try removing any compiler optimization flags from the CFLAG line
 | 
				
			||||||
     in Makefile.ssl and run "make clean; make". Please send a bug
 | 
					     in Makefile.ssl and run "make clean; make". Please send a bug
 | 
				
			||||||
     report to <openssl-bugs@openssl.org>, including the output of
 | 
					     report to <openssl-bugs@openssl.org>, including the output of
 | 
				
			||||||
     "make report".
 | 
					     "make report" in order to be added to the request tracker at
 | 
				
			||||||
 | 
					     http://www.openssl.org/support/rt2.html.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  4. If everything tests ok, install OpenSSL with
 | 
					  4. If everything tests ok, install OpenSSL with
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -272,6 +284,11 @@
 | 
				
			|||||||
 Note on shared libraries
 | 
					 Note on shared libraries
 | 
				
			||||||
 ------------------------
 | 
					 ------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Shared library is currently an experimental feature.  The only reason to
 | 
				
			||||||
 | 
					 have them would be to conserve memory on systems where several program
 | 
				
			||||||
 | 
					 are using OpenSSL.  Binary backward compatibility can't be guaranteed
 | 
				
			||||||
 | 
					 before OpenSSL version 1.0.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 For some systems, the OpenSSL Configure script knows what is needed to
 | 
					 For some systems, the OpenSSL Configure script knows what is needed to
 | 
				
			||||||
 build shared libraries for libcrypto and libssl.  On these systems,
 | 
					 build shared libraries for libcrypto and libssl.  On these systems,
 | 
				
			||||||
 the shared libraries are currently not created by default, but giving
 | 
					 the shared libraries are currently not created by default, but giving
 | 
				
			||||||
@@ -279,3 +296,37 @@
 | 
				
			|||||||
 targets for shared library creation, like linux-shared.  Those targets
 | 
					 targets for shared library creation, like linux-shared.  Those targets
 | 
				
			||||||
 can currently be used on their own just as well, but this is expected
 | 
					 can currently be used on their own just as well, but this is expected
 | 
				
			||||||
 to change in future versions of OpenSSL.
 | 
					 to change in future versions of OpenSSL.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Note on random number generation
 | 
				
			||||||
 | 
					 --------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Availability of cryptographically secure random numbers is required for
 | 
				
			||||||
 | 
					 secret key generation. OpenSSL provides several options to seed the
 | 
				
			||||||
 | 
					 internal PRNG. If not properly seeded, the internal PRNG will refuse
 | 
				
			||||||
 | 
					 to deliver random bytes and a "PRNG not seeded error" will occur.
 | 
				
			||||||
 | 
					 On systems without /dev/urandom (or similar) device, it may be necessary
 | 
				
			||||||
 | 
					 to install additional support software to obtain random seed.
 | 
				
			||||||
 | 
					 Please check out the manual pages for RAND_add(), RAND_bytes(), RAND_egd(),
 | 
				
			||||||
 | 
					 and the FAQ for more information.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Note on support for multiple builds
 | 
				
			||||||
 | 
					 -----------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 OpenSSL is usually built in it's source tree.  Unfortunately, this doesn't
 | 
				
			||||||
 | 
					 support building for multiple platforms from the same source tree very well.
 | 
				
			||||||
 | 
					 It is however possible to build in a separate tree through the use of lots
 | 
				
			||||||
 | 
					 of symbolic links, which should be prepared like this:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mkdir -p objtree/"`uname -s`-`uname -r`-`uname -m`"
 | 
				
			||||||
 | 
						cd objtree/"`uname -s`-`uname -r`-`uname -m`"
 | 
				
			||||||
 | 
						(cd $OPENSSL_SOURCE; find . -type f) | while read F; do
 | 
				
			||||||
 | 
							mkdir -p `dirname $F`
 | 
				
			||||||
 | 
							rm -f $F; ln -s $OPENSSL_SOURCE/$F $F
 | 
				
			||||||
 | 
							echo $F '->' $OPENSSL_SOURCE/$F
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
						make -f Makefile.org clean
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 OPENSSL_SOURCE is an environment variable that contains the absolute (this
 | 
				
			||||||
 | 
					 is important!) path to the OpenSSL source tree.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Also, operations like 'make update' should still be made in the source tree.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										34
									
								
								INSTALL.DJGPP
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								INSTALL.DJGPP
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 INSTALLATION ON THE DOS PLATFORM WITH DJGPP
 | 
				
			||||||
 | 
					 -------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Openssl has been ported to DOS, but only with long filename support. If
 | 
				
			||||||
 | 
					 you wish to compile on native DOS with 8+3 filenames, you will have to
 | 
				
			||||||
 | 
					 tweak the installation yourself, including renaming files with illegal
 | 
				
			||||||
 | 
					 or duplicate names.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 You should have a full DJGPP environment installed, including the
 | 
				
			||||||
 | 
					 latest versions of DJGPP, GCC, BINUTILS, BASH, etc. This package
 | 
				
			||||||
 | 
					 requires that PERL and BC also be installed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 All of these can be obtained from the usual DJGPP mirror sites, such
 | 
				
			||||||
 | 
					 as "ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp". You also need to
 | 
				
			||||||
 | 
					 have the WATT-32 networking package installed before you try to compile
 | 
				
			||||||
 | 
					 openssl. This can be obtained from "http://www.bgnett.no/~giva/".
 | 
				
			||||||
 | 
					 The Makefile assumes that the WATT-32 code is in the directory
 | 
				
			||||||
 | 
					 specified by the environment variable WATT_ROOT. If you have watt-32
 | 
				
			||||||
 | 
					 in directory "watt32" under your main DJGPP directory, specify
 | 
				
			||||||
 | 
					 WATT_ROOT="/dev/env/DJDIR/watt32".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 To compile openssl, start your BASH shell. Then configure for DOS by
 | 
				
			||||||
 | 
					 running "./Configure" with appropriate arguments. The basic syntax for
 | 
				
			||||||
 | 
					 DOS is:
 | 
				
			||||||
 | 
					 ./Configure no-threads --prefix=/dev/env/DJDIR DJGPP
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 You may run out of DPMI selectors when running in a DOS box under
 | 
				
			||||||
 | 
					 Windows. If so, just close the BASH shell, go back to Windows, and
 | 
				
			||||||
 | 
					 restart BASH. Then run "make" again.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Building openssl under DJGPP has been tested with DJGPP 2.03,
 | 
				
			||||||
 | 
					 GCC 2.952, GCC 2.953, perl 5.005_02 and perl 5.006_01.
 | 
				
			||||||
@@ -32,17 +32,17 @@ Installation procedure:
 | 
				
			|||||||
        to 42, change appropriately.
 | 
					        to 42, change appropriately.
 | 
				
			||||||
(**)	If you use SUNtar, then it might have already unbinhexed the files
 | 
					(**)	If you use SUNtar, then it might have already unbinhexed the files
 | 
				
			||||||
	in question.
 | 
						in question.
 | 
				
			||||||
(***)	The project file was saved with CW Pro 5.3. If you have earlier
 | 
					(***)	The project file was saved with CW Pro 5.3. If you have an earlier
 | 
				
			||||||
	version and it refuses to open it, then download
 | 
						version and it refuses to open it, then download
 | 
				
			||||||
	http://www.openssl.org/~appro/OpenSSL.mcp.xml and import it
 | 
						http://www.openssl.org/~appro/OpenSSL.mcp.xml and import it
 | 
				
			||||||
	overwriting the original OpenSSL.mcp.
 | 
						overwriting the original OpenSSL.mcp.
 | 
				
			||||||
(****)	Other targets are work in progress. If you feel like giving 'em a
 | 
					(****)	Other targets are works in progress. If you feel like giving 'em a
 | 
				
			||||||
	shot, then you should know that OpenSSL* and Lib* targets are
 | 
						shot, then you should know that OpenSSL* and Lib* targets are
 | 
				
			||||||
	supposed to be built with the GUSI, MacOS library which mimics
 | 
						supposed to be built with the GUSI, MacOS library which mimics
 | 
				
			||||||
	BSD sockets and some other POSIX APIs. The GUSI distribution is
 | 
						BSD sockets and some other POSIX APIs. The GUSI distribution is
 | 
				
			||||||
	expected to be found in the same directory as openssl source tree,
 | 
						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,
 | 
						i.e., in the parent directory to the one where this very file,
 | 
				
			||||||
	namely INSTALL.MacOS. For more information about GUSI, see
 | 
						namely INSTALL.MacOS, resides. For more information about GUSI, see
 | 
				
			||||||
	http://www.iis.ee.ethz.ch/~neeri/macintosh/gusi-qa.html
 | 
						http://www.iis.ee.ethz.ch/~neeri/macintosh/gusi-qa.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Finally some essential comments from our generous contributor:-)
 | 
					Finally some essential comments from our generous contributor:-)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										31
									
								
								INSTALL.OS2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								INSTALL.OS2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					 
 | 
				
			||||||
 | 
					 Installation on OS/2
 | 
				
			||||||
 | 
					 --------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 You need to have the following tools installed:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * EMX GCC
 | 
				
			||||||
 | 
					  * PERL
 | 
				
			||||||
 | 
					  * GNU make
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 To build the makefile, run
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 > os2\os2-emx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 This will configure OpenSSL and create OS2-EMX.mak which you then use to 
 | 
				
			||||||
 | 
					 build the OpenSSL libraries & programs by running
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 > make -f os2-emx.mak
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 If that finishes successfully you will find the libraries and programs in the
 | 
				
			||||||
 | 
					 "out" directory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Alternatively, you can make a dynamic build that puts the library code into
 | 
				
			||||||
 | 
					 crypto.dll and ssl.dll by running
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 > make -f os2-emx-dll.mak
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 This will build the above mentioned dlls and a matching pair of import
 | 
				
			||||||
 | 
					 libraries in the "out_dll" directory along with the set of test programs
 | 
				
			||||||
 | 
					 and the openssl application.
 | 
				
			||||||
							
								
								
									
										12
									
								
								INSTALL.VMS
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								INSTALL.VMS
									
									
									
									
									
								
							@@ -33,11 +33,11 @@ Checking the distribution:
 | 
				
			|||||||
==========================
 | 
					==========================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
There have been reports of places where the distribution didn't quite get
 | 
					There have been reports of places where the distribution didn't quite get
 | 
				
			||||||
through, for example if you've copied the tree from a NFS-mounted unix
 | 
					through, for example if you've copied the tree from a NFS-mounted Unix
 | 
				
			||||||
mount point.
 | 
					mount point.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The easiest way to check if everything got through as it should is to check
 | 
					The easiest way to check if everything got through as it should is to check
 | 
				
			||||||
for oen of the following files:
 | 
					for one of the following files:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	[.CRYPTO]OPENSSLCONF.H_IN
 | 
						[.CRYPTO]OPENSSLCONF.H_IN
 | 
				
			||||||
	[.CRYPTO]OPENSSLCONF_H.IN
 | 
						[.CRYPTO]OPENSSLCONF_H.IN
 | 
				
			||||||
@@ -69,7 +69,7 @@ for a command procedure name xxx-LIB.COM (in the library directories)
 | 
				
			|||||||
or MAKExxx.COM (in the program directories) and read the comments at
 | 
					or MAKExxx.COM (in the program directories) and read the comments at
 | 
				
			||||||
the top to understand how to use them.  However, if you want to
 | 
					the top to understand how to use them.  However, if you want to
 | 
				
			||||||
compile all you can get, the simplest is to use MAKEVMS.COM in the top
 | 
					compile all you can get, the simplest is to use MAKEVMS.COM in the top
 | 
				
			||||||
directory.  The syntax is trhe following:
 | 
					directory.  The syntax is the following:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @MAKEVMS <option> <rsaref-p> <debug-p> [<compiler>]
 | 
					  @MAKEVMS <option> <rsaref-p> <debug-p> [<compiler>]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -79,7 +79,7 @@ directory.  The syntax is trhe following:
 | 
				
			|||||||
      CONFIG    Just build the "[.CRYPTO]OPENSSLCONF.H" file.
 | 
					      CONFIG    Just build the "[.CRYPTO]OPENSSLCONF.H" file.
 | 
				
			||||||
      BUILDINF  Just build the "[.INCLUDE]BUILDINF.H" file.
 | 
					      BUILDINF  Just build the "[.INCLUDE]BUILDINF.H" file.
 | 
				
			||||||
      SOFTLINKS Just copies some files, to simulate Unix soft links.
 | 
					      SOFTLINKS Just copies some files, to simulate Unix soft links.
 | 
				
			||||||
      BUILDALL  Same as ALL, except CONFIG, BUILDINF and SOFTILNKS aren't done.
 | 
					      BUILDALL  Same as ALL, except CONFIG, BUILDINF and SOFTLINKS aren't done.
 | 
				
			||||||
      RSAREF    Just build the "[.xxx.EXE.RSAREF]LIBRSAGLUE.OLB" library.
 | 
					      RSAREF    Just build the "[.xxx.EXE.RSAREF]LIBRSAGLUE.OLB" library.
 | 
				
			||||||
      CRYPTO    Just build the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library.
 | 
					      CRYPTO    Just build the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library.
 | 
				
			||||||
      SSL       Just build the "[.xxx.EXE.SSL]LIBSSL.OLB" library.
 | 
					      SSL       Just build the "[.xxx.EXE.SSL]LIBSSL.OLB" library.
 | 
				
			||||||
@@ -92,7 +92,7 @@ directory.  The syntax is trhe following:
 | 
				
			|||||||
      RSAREF    compile using the RSAREF Library
 | 
					      RSAREF    compile using the RSAREF Library
 | 
				
			||||||
      NORSAREF  compile without using RSAREF
 | 
					      NORSAREF  compile without using RSAREF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Note 0: The RASREF library IS NO LONGER NEEDED.  The RSA patent
 | 
					Note 0: The RSAREF library IS NO LONGER NEEDED.  The RSA patent
 | 
				
			||||||
        expires September 20, 2000, and RSA Security chose to make
 | 
					        expires September 20, 2000, and RSA Security chose to make
 | 
				
			||||||
        the algorithm public domain two weeks before that.
 | 
					        the algorithm public domain two weeks before that.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -264,7 +264,7 @@ following before you start compiling:
 | 
				
			|||||||
The USER_CCDISABLEWARNINGS is there because otherwise, DEC C will complain
 | 
					The USER_CCDISABLEWARNINGS is there because otherwise, DEC C will complain
 | 
				
			||||||
that those macros have been changed.
 | 
					that those macros have been changed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Note: Currently, this is only usefull for library compilation.  The
 | 
					Note: Currently, this is only useful for library compilation.  The
 | 
				
			||||||
      programs will still be linked with the current version of the
 | 
					      programs will still be linked with the current version of the
 | 
				
			||||||
      C library shareable image, and will thus complain if they are
 | 
					      C library shareable image, and will thus complain if they are
 | 
				
			||||||
      faced with an older version of the same C library shareable image.
 | 
					      faced with an older version of the same C library shareable image.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										182
									
								
								INSTALL.W32
									
									
									
									
									
								
							
							
						
						
									
										182
									
								
								INSTALL.W32
									
									
									
									
									
								
							@@ -2,16 +2,28 @@
 | 
				
			|||||||
 INSTALLATION ON THE WIN32 PLATFORM
 | 
					 INSTALLATION ON THE WIN32 PLATFORM
 | 
				
			||||||
 ----------------------------------
 | 
					 ----------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 Heres a few comments about building OpenSSL in Windows environments. Most of
 | 
					 [Instructions for building for Windows CE can be found in INSTALL.WCE]
 | 
				
			||||||
 this is tested on Win32 but it may also work in Win 3.1 with some
 | 
					
 | 
				
			||||||
 | 
					 Heres a few comments about building OpenSSL in Windows environments.  Most
 | 
				
			||||||
 | 
					 of this is tested on Win32 but it may also work in Win 3.1 with some
 | 
				
			||||||
 modification.
 | 
					 modification.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 You need Perl for Win32 (available from http://www.activestate.com/ActivePerl)
 | 
					 You need Perl for Win32.  Unless you will build on Cygwin, you will need
 | 
				
			||||||
 | 
					 ActiveState Perl, available from http://www.activestate.com/ActivePerl.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 and one of the following C compilers:
 | 
					 and one of the following C compilers:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  * Visual C++
 | 
					  * Visual C++
 | 
				
			||||||
  * Borland C
 | 
					  * Borland C
 | 
				
			||||||
  * GNU C (Mingw32 or Cygwin32)
 | 
					  * GNU C (Cygwin or MinGW)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 If you are compiling from a tarball or a CVS snapshot then the Win32 files
 | 
				
			||||||
 | 
					 may well be not up to date. This may mean that some "tweaking" is required to
 | 
				
			||||||
 | 
					 get it all to work. See the trouble shooting section later on for if (when?)
 | 
				
			||||||
 | 
					 it goes wrong.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Visual C++
 | 
				
			||||||
 | 
					 ----------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 If you want to compile in the assembly language routines with Visual C++ then
 | 
					 If you want to compile in the assembly language routines with Visual C++ then
 | 
				
			||||||
 you will need an assembler. This is worth doing because it will result in
 | 
					 you will need an assembler. This is worth doing because it will result in
 | 
				
			||||||
@@ -21,26 +33,19 @@
 | 
				
			|||||||
  * Microsoft MASM (aka "ml")
 | 
					  * Microsoft MASM (aka "ml")
 | 
				
			||||||
  * Free Netwide Assembler NASM.
 | 
					  * Free Netwide Assembler NASM.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 MASM was at one point distributed with VC++. It is now distributed with some
 | 
					 MASM is distributed with most versions of VC++. For the versions where it is
 | 
				
			||||||
 Microsoft DDKs, for example the Windows NT 4.0 DDK and the Windows 98 DDK. If
 | 
					 not included in VC++, it is also distributed with some Microsoft DDKs, for
 | 
				
			||||||
 you do not have either of these DDKs then you can just download the binaries
 | 
					 example the Windows NT 4.0 DDK and the Windows 98 DDK. If you do not have
 | 
				
			||||||
 for the Windows 98 DDK and extract and rename the two files XXXXXml.exe and
 | 
					 either of these DDKs then you can just download the binaries for the Windows
 | 
				
			||||||
 XXXXXml.err, to ml.exe and ml.err and install somewhere on your PATH. Both
 | 
					 98 DDK and extract and rename the two files XXXXXml.exe and XXXXXml.err, to
 | 
				
			||||||
 DDKs can be downloaded from the Microsoft developers site www.msdn.com.
 | 
					 ml.exe and ml.err and install somewhere on your PATH. Both DDKs can be
 | 
				
			||||||
 | 
					 downloaded from the Microsoft developers site www.msdn.com.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 NASM is freely available. Version 0.98 was used during testing: other versions
 | 
					 NASM is freely available. Version 0.98 was used during testing: other versions
 | 
				
			||||||
 may also work. It is available from many places, see for example:
 | 
					 may also work. It is available from many places, see for example:
 | 
				
			||||||
 http://www.kernel.org/pub/software/devel/nasm/binaries/win32/
 | 
					 http://www.kernel.org/pub/software/devel/nasm/binaries/win32/
 | 
				
			||||||
 The NASM binary nasmw.exe needs to be installed anywhere on your PATH.
 | 
					 The NASM binary nasmw.exe needs to be installed anywhere on your PATH.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 If you are compiling from a tarball or a CVS snapshot then the Win32 files
 | 
					 | 
				
			||||||
 may well be not up to date. This may mean that some "tweaking" is required to
 | 
					 | 
				
			||||||
 get it all to work. See the trouble shooting section later on for if (when?)
 | 
					 | 
				
			||||||
 it goes wrong.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 Visual C++
 | 
					 | 
				
			||||||
 ----------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 Firstly you should run Configure:
 | 
					 Firstly you should run Configure:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 > perl Configure VC-WIN32
 | 
					 > perl Configure VC-WIN32
 | 
				
			||||||
@@ -78,8 +83,9 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 There are various changes you can make to the Win32 compile environment. By
 | 
					 There are various changes you can make to the Win32 compile environment. By
 | 
				
			||||||
 default the library is not compiled with debugging symbols. If you add 'debug'
 | 
					 default the library is not compiled with debugging symbols. If you add 'debug'
 | 
				
			||||||
 to the mk1mk.pl lines in the do_* batch file then debugging symbols will be
 | 
					 to the mk1mf.pl lines in the do_* batch file then debugging symbols will be
 | 
				
			||||||
 compiled in.
 | 
					 compiled in. Note that mk1mf.pl expects the platform to be the last argument
 | 
				
			||||||
 | 
					 on the command line, so 'debug' must appear before that, as all other options.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 The default Win32 environment is to leave out any Windows NT specific
 | 
					 The default Win32 environment is to leave out any Windows NT specific
 | 
				
			||||||
 features.
 | 
					 features.
 | 
				
			||||||
@@ -91,6 +97,18 @@
 | 
				
			|||||||
 You can also build a static version of the library using the Makefile
 | 
					 You can also build a static version of the library using the Makefile
 | 
				
			||||||
 ms\nt.mak
 | 
					 ms\nt.mak
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Borland C++ builder 5
 | 
				
			||||||
 | 
					 ---------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 * Configure for building with Borland Builder:
 | 
				
			||||||
 | 
					   > perl Configure BC-32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 * Create the appropriate makefile
 | 
				
			||||||
 | 
					   > ms\do_nasm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 * Build
 | 
				
			||||||
 | 
					   > make -f ms\bcb.mak
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 Borland C++ builder 3 and 4
 | 
					 Borland C++ builder 3 and 4
 | 
				
			||||||
 ---------------------------
 | 
					 ---------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -101,18 +119,72 @@
 | 
				
			|||||||
 * Run make:
 | 
					 * Run make:
 | 
				
			||||||
   > make -f bcb.mak
 | 
					   > make -f bcb.mak
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 GNU C (Mingw32)
 | 
					 GNU C (Cygwin)
 | 
				
			||||||
 ---------------
 | 
					 --------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 To build OpenSSL, you need the Mingw32 package and GNU make.
 | 
					 Cygwin provides a bash shell and GNU tools environment running
 | 
				
			||||||
 | 
					 on NT 4.0, Windows 9x, Windows ME, Windows 2000, and Windows XP.
 | 
				
			||||||
 | 
					 Consequently, a make of OpenSSL with Cygwin is closer to a GNU
 | 
				
			||||||
 | 
					 bash environment such as Linux than to other the other Win32
 | 
				
			||||||
 | 
					 makes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Cygwin implements a Posix/Unix runtime system (cygwin1.dll).
 | 
				
			||||||
 | 
					 It is also possible to create Win32 binaries that only use the
 | 
				
			||||||
 | 
					 Microsoft C runtime system (msvcrt.dll or crtdll.dll) using
 | 
				
			||||||
 | 
					 MinGW. MinGW can be used in the Cygwin development environment
 | 
				
			||||||
 | 
					 or in a standalone setup as described in the following section.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 To build OpenSSL using Cygwin:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 * Install Cygwin (see http://cygwin.com/)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 * Install Perl and ensure it is in the path. Both Cygwin perl
 | 
				
			||||||
 | 
					   (5.6.1-2 or newer) and ActivePerl work.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 * Run the Cygwin bash shell
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 * $ tar zxvf openssl-x.x.x.tar.gz
 | 
				
			||||||
 | 
					   $ cd openssl-x.x.x
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   To build the Cygwin version of OpenSSL:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   $ ./config
 | 
				
			||||||
 | 
					   [...]
 | 
				
			||||||
 | 
					   $ make
 | 
				
			||||||
 | 
					   [...]
 | 
				
			||||||
 | 
					   $ make test
 | 
				
			||||||
 | 
					   $ make install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   This will create a default install in /usr/local/ssl.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   To build the MinGW version (native Windows) in Cygwin:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   $ ./Configure mingw
 | 
				
			||||||
 | 
					   [...]
 | 
				
			||||||
 | 
					   $ make
 | 
				
			||||||
 | 
					   [...]
 | 
				
			||||||
 | 
					   $ make test
 | 
				
			||||||
 | 
					   $ make install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Cygwin Notes:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 "make test" and normal file operations may fail in directories
 | 
				
			||||||
 | 
					 mounted as text (i.e. mount -t c:\somewhere /home) due to Cygwin
 | 
				
			||||||
 | 
					 stripping of carriage returns. To avoid this ensure that a binary
 | 
				
			||||||
 | 
					 mount is used, e.g. mount -b c:\somewhere /home.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 "bc" is not provided in older Cygwin distribution.  This causes a
 | 
				
			||||||
 | 
					 non-fatal error in "make test" but is otherwise harmless.  If
 | 
				
			||||||
 | 
					 desired and needed, GNU bc can be built with Cygwin without change.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 GNU C (MinGW)
 | 
				
			||||||
 | 
					 -------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 * Compiler installation:
 | 
					 * Compiler installation:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   Mingw32 is available from <ftp://ftp.xraylith.wisc.edu/pub/khan/
 | 
					   MinGW is available from http://www.mingw.org. Run the installer and
 | 
				
			||||||
   gnu-win32/mingw32/gcc-2.95.2/gcc-2.95.2-msvcrt.exe>. GNU make is at
 | 
					   set the MinGW bin directory to the PATH in "System Properties" or
 | 
				
			||||||
   <ftp://agnes.dida.physik.uni-essen.de/home/janjaap/mingw32/binaries/
 | 
					   autoexec.bat.
 | 
				
			||||||
   make-3.76.1.zip>. Install both of them in C:\egcs-1.1.2 and run
 | 
					 | 
				
			||||||
   C:\egcs-1.1.2\mingw32.bat to set the PATH.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 * Compile OpenSSL:
 | 
					 * Compile OpenSSL:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -134,57 +206,13 @@
 | 
				
			|||||||
   > cd out
 | 
					   > cd out
 | 
				
			||||||
   > ..\ms\test
 | 
					   > ..\ms\test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 GNU C (CygWin32)
 | 
					 | 
				
			||||||
 ---------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 CygWin32 provides a bash shell and GNU tools environment running on
 | 
					 | 
				
			||||||
 NT 4.0, Windows 9x and Windows 2000. Consequently, a make of OpenSSL
 | 
					 | 
				
			||||||
 with CygWin is closer to a GNU bash environment such as Linux rather
 | 
					 | 
				
			||||||
 than other W32 makes that are based on a single makefile approach.
 | 
					 | 
				
			||||||
 CygWin32 implements Posix/Unix calls through cygwin1.dll, and is
 | 
					 | 
				
			||||||
 contrasted to Mingw32 which links dynamically to msvcrt.dll or
 | 
					 | 
				
			||||||
 crtdll.dll.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 To build OpenSSL using CygWin32:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 * Install CygWin32 (see http://sourceware.cygnus.com/cygwin)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 * Install Perl and ensure it is in the path
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 * Run the CygWin bash shell
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 * $ tar zxvf openssl-x.x.x.tar.gz
 | 
					 | 
				
			||||||
   $ cd openssl-x.x.x
 | 
					 | 
				
			||||||
   $ ./Configure no-threads CygWin32
 | 
					 | 
				
			||||||
   [...]
 | 
					 | 
				
			||||||
   $ make
 | 
					 | 
				
			||||||
   [...]
 | 
					 | 
				
			||||||
   $ make test
 | 
					 | 
				
			||||||
   $ make install
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 This will create a default install in /usr/local/ssl.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 CygWin32 Notes:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 "make test" and normal file operations may fail in directories
 | 
					 | 
				
			||||||
 mounted as text (i.e. mount -t c:\somewhere /home) due to CygWin
 | 
					 | 
				
			||||||
 stripping of carriage returns. To avoid this ensure that a binary
 | 
					 | 
				
			||||||
 mount is used, e.g. mount -b c:\somewhere /home.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 As of version 1.1.1 CygWin32 is relatively unstable in its handling
 | 
					 | 
				
			||||||
 of cr/lf issues. These make procedures succeeded with versions 1.1 and
 | 
					 | 
				
			||||||
 the snapshot 20000524 (Slow!).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 "bc" is not provided in the CygWin32 distribution.  This causes a
 | 
					 | 
				
			||||||
 non-fatal error in "make test" but is otherwise harmless.  If
 | 
					 | 
				
			||||||
 desired, GNU bc can be built with CygWin32 without change.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 Installation
 | 
					 Installation
 | 
				
			||||||
 ------------
 | 
					 ------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 There's currently no real installation procedure for Win32.  There are,
 | 
					 If you used the Cygwin procedure above, you have already installed and
 | 
				
			||||||
 however, some suggestions:
 | 
					 can skip this section.  For all other procedures, there's currently no real
 | 
				
			||||||
 | 
					 installation procedure for Win32.  There are, however, some suggestions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - do nothing.  The include files are found in the inc32/ subdirectory,
 | 
					    - do nothing.  The include files are found in the inc32/ subdirectory,
 | 
				
			||||||
      all binaries are found in out32dll/ or out32/ depending if you built
 | 
					      all binaries are found in out32dll/ or out32/ depending if you built
 | 
				
			||||||
@@ -197,7 +225,7 @@
 | 
				
			|||||||
	$ md c:\openssl\lib
 | 
						$ md c:\openssl\lib
 | 
				
			||||||
	$ md c:\openssl\include
 | 
						$ md c:\openssl\include
 | 
				
			||||||
	$ md c:\openssl\include\openssl
 | 
						$ md c:\openssl\include\openssl
 | 
				
			||||||
	$ copy /b inc32\*               c:\openssl\include\openssl
 | 
						$ copy /b inc32\openssl\*       c:\openssl\include\openssl
 | 
				
			||||||
	$ copy /b out32dll\ssleay32.lib c:\openssl\lib
 | 
						$ copy /b out32dll\ssleay32.lib c:\openssl\lib
 | 
				
			||||||
	$ copy /b out32dll\libeay32.lib c:\openssl\lib
 | 
						$ copy /b out32dll\libeay32.lib c:\openssl\lib
 | 
				
			||||||
	$ copy /b out32dll\ssleay32.dll c:\openssl\bin
 | 
						$ copy /b out32dll\ssleay32.dll c:\openssl\bin
 | 
				
			||||||
@@ -256,5 +284,5 @@
 | 
				
			|||||||
 malloc(), free() and realloc() as the application.  However there are many
 | 
					 malloc(), free() and realloc() as the application.  However there are many
 | 
				
			||||||
 standard library functions used by OpenSSL that call malloc() internally
 | 
					 standard library functions used by OpenSSL that call malloc() internally
 | 
				
			||||||
 (e.g. fopen()), and OpenSSL cannot change these; so in general you cannot
 | 
					 (e.g. fopen()), and OpenSSL cannot change these; so in general you cannot
 | 
				
			||||||
 rely on CYRPTO_malloc_init() solving your problem, and you should
 | 
					 rely on CRYPTO_malloc_init() solving your problem, and you should
 | 
				
			||||||
 consistently use the multithreaded library.
 | 
					 consistently use the multithreaded library.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										71
									
								
								INSTALL.WCE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								INSTALL.WCE
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
				
			|||||||
 | 
					 
 | 
				
			||||||
 | 
					 INSTALLATION FOR THE WINDOWS CE PLATFORM
 | 
				
			||||||
 | 
					 ----------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Building OpenSSL for Windows CE requires the following external tools:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Microsoft eMbedded Visual C++ 3.0
 | 
				
			||||||
 | 
					  * wcecompat compatibility library (www.essemer.com.au)
 | 
				
			||||||
 | 
					  * Optionally ceutils for running automated tests (www.essemer.com.au)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 You also need Perl for Win32.  You will need ActiveState Perl, available
 | 
				
			||||||
 | 
					 from http://www.activestate.com/ActivePerl.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Windows CE support in OpenSSL relies on wcecompat.  All Windows CE specific
 | 
				
			||||||
 | 
					 issues should be directed to www.essemer.com.au.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 The C Runtime Library implementation for Windows CE that is included with
 | 
				
			||||||
 | 
					 Microsoft eMbedded Visual C++ 3.0 is incomplete and in some places
 | 
				
			||||||
 | 
					 incorrect.  wcecompat plugs the holes and tries to bring the Windows CE
 | 
				
			||||||
 | 
					 CRT to a level that is more compatible with ANSI C.  wcecompat goes further
 | 
				
			||||||
 | 
					 and provides low-level IO and stream IO support for stdin/stdout/stderr
 | 
				
			||||||
 | 
					 (which Windows CE does not provide).  This IO functionality is not needed
 | 
				
			||||||
 | 
					 by the OpenSSL library itself but is used for the tests and openssl.exe.
 | 
				
			||||||
 | 
					 More information is available at www.essemer.com.au.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Building
 | 
				
			||||||
 | 
					 --------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Setup the eMbedded Visual C++ environment.  There are batch files for doing
 | 
				
			||||||
 | 
					 this installed with eVC++.  For an ARM processor, for example, execute:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 > "C:\Program Files\Microsoft eMbedded Tools\EVC\WCE300\BIN\WCEARM.BAT"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Next indicate where wcecompat is located:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 > set WCECOMPAT=C:\wcecompat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Next you should run Configure:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 > perl Configure VC-CE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Next you need to build the Makefiles:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 > ms\do_ms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 If you get errors about things not having numbers assigned then check the
 | 
				
			||||||
 | 
					 troubleshooting section in INSTALL.W32: you probably won't be able to compile
 | 
				
			||||||
 | 
					 it as it stands.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Then from the VC++ environment at a prompt do:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 - to build static libraries:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   > nmake -f ms\ce.mak
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 - or to build DLLs:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   > nmake -f ms\cedll.mak
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 If all is well it should compile and you will have some static libraries and
 | 
				
			||||||
 | 
					 executables in out32, or some DLLs and executables in out32dll.  If you want
 | 
				
			||||||
 | 
					 to try the tests then make sure the ceutils are in the path and do:
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 > cd out32
 | 
				
			||||||
 | 
					 > ..\ms\testce
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 This will copy each of the test programs to the Windows CE device and execute
 | 
				
			||||||
 | 
					 them, displaying the output of the tests on this computer.  The output should
 | 
				
			||||||
 | 
					 look similar to the output produced by running the tests for a regular Windows
 | 
				
			||||||
 | 
					 build.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							@@ -12,7 +12,7 @@
 | 
				
			|||||||
  ---------------
 | 
					  ---------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ====================================================================
 | 
					/* ====================================================================
 | 
				
			||||||
 * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
 | 
					 * Copyright (c) 1998-2004 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Redistribution and use in source and binary forms, with or without
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 * modification, are permitted provided that the following conditions
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2750,4 +2750,4 @@ void SkipWhiteSpace(char **ioSrcCharPtr,const Boolean inStopAtEOL)
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -167,4 +167,4 @@ void ThrowErrorMessageException(void)
 | 
				
			|||||||
	ThrowDescriptiveException(gErrorMessage);
 | 
						ThrowDescriptiveException(gErrorMessage);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -167,7 +167,7 @@ void main(void)
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		tempString[bytesRead] = '\0';
 | 
							tempString[bytesRead] = '\0';
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		printf(tempString);
 | 
							printf("%s", tempString);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	printf("\n\n\n");
 | 
						printf("\n\n\n");
 | 
				
			||||||
@@ -201,7 +201,7 @@ EXITPOINT:
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		printf("An error occurred:\n");
 | 
							printf("An error occurred:\n");
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		printf(GetErrorMessage());
 | 
							printf("%s",GetErrorMessage());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1287,7 +1287,7 @@ EXITPOINT:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
//	Send some bytes
 | 
					//	Send some bytes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int MacSocket_send(const int inSocketNum,void *inBuff,int inBuffLength)
 | 
					int MacSocket_send(const int inSocketNum,const void *inBuff,int inBuffLength)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
OSErr			errCode = noErr;
 | 
					OSErr			errCode = noErr;
 | 
				
			||||||
int				bytesSent = 0;
 | 
					int				bytesSent = 0;
 | 
				
			||||||
@@ -1604,4 +1604,4 @@ EPInfo* epi = (EPInfo*) context;
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -62,7 +62,7 @@ int MacSocket_recv(const int inSocketNum,void *outBuff,int outBuffLength,const B
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
//	Call this to send data on a socket
 | 
					//	Call this to send data on a socket
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int MacSocket_send(const int inSocketNum,void *inBuff,int inBuffLength);
 | 
					int MacSocket_send(const int inSocketNum,const void *inBuff,int inBuffLength);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//	If zero bytes were read in a call to MacSocket_recv(), it may be that the remote end has done a half-close
 | 
					//	If zero bytes were read in a call to MacSocket_recv(), it may be that the remote end has done a half-close
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										437
									
								
								Makefile.org
									
									
									
									
									
								
							
							
						
						
									
										437
									
								
								Makefile.org
									
									
									
									
									
								
							@@ -15,6 +15,11 @@ OPTIONS=
 | 
				
			|||||||
CONFIGURE_ARGS=
 | 
					CONFIGURE_ARGS=
 | 
				
			||||||
SHLIB_TARGET=
 | 
					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
 | 
					# INSTALL_PREFIX is for package builders so that they can configure
 | 
				
			||||||
# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
 | 
					# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
 | 
				
			||||||
# Normally it is left empty.
 | 
					# Normally it is left empty.
 | 
				
			||||||
@@ -24,7 +29,6 @@ INSTALLTOP=/usr/local/ssl
 | 
				
			|||||||
# Do not edit this manually. Use Configure --openssldir=DIR do change this!
 | 
					# Do not edit this manually. Use Configure --openssldir=DIR do change this!
 | 
				
			||||||
OPENSSLDIR=/usr/local/ssl
 | 
					OPENSSLDIR=/usr/local/ssl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# RSAref  - Define if we are to link with RSAref.
 | 
					 | 
				
			||||||
# NO_IDEA - Define to build without the IDEA algorithm
 | 
					# NO_IDEA - Define to build without the IDEA algorithm
 | 
				
			||||||
# NO_RC4  - Define to build without the RC4 algorithm
 | 
					# NO_RC4  - Define to build without the RC4 algorithm
 | 
				
			||||||
# NO_RC2  - Define to build without the RC2 algorithm
 | 
					# NO_RC2  - Define to build without the RC2 algorithm
 | 
				
			||||||
@@ -60,11 +64,21 @@ DEPFLAG=
 | 
				
			|||||||
PEX_LIBS= 
 | 
					PEX_LIBS= 
 | 
				
			||||||
EX_LIBS= 
 | 
					EX_LIBS= 
 | 
				
			||||||
EXE_EXT= 
 | 
					EXE_EXT= 
 | 
				
			||||||
AR=ar r
 | 
					ARFLAGS=
 | 
				
			||||||
 | 
					AR=ar $(ARFLAGS) r
 | 
				
			||||||
RANLIB= ranlib
 | 
					RANLIB= ranlib
 | 
				
			||||||
PERL= perl
 | 
					PERL= perl
 | 
				
			||||||
TAR= tar
 | 
					TAR= tar
 | 
				
			||||||
TARFLAGS= --no-recursion
 | 
					TARFLAGS= --no-recursion
 | 
				
			||||||
 | 
					MAKEDEPPROG=makedepend
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# We let the C compiler driver to take care of .s files. This is done in
 | 
				
			||||||
 | 
					# order to be excused from maintaining a separate set of architecture
 | 
				
			||||||
 | 
					# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
 | 
				
			||||||
 | 
					# gcc, then the driver will automatically translate it to -xarch=v8plus
 | 
				
			||||||
 | 
					# and pass it down to assembler.
 | 
				
			||||||
 | 
					AS=$(CC) -c
 | 
				
			||||||
 | 
					ASFLAG=$(CFLAG)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Set BN_ASM to bn_asm.o if you want to use the C version
 | 
					# Set BN_ASM to bn_asm.o if you want to use the C version
 | 
				
			||||||
BN_ASM= bn_asm.o
 | 
					BN_ASM= bn_asm.o
 | 
				
			||||||
@@ -151,20 +165,28 @@ RMD160_ASM_OBJ= asm/rm86-out.o
 | 
				
			|||||||
#RMD160_ASM_OBJ= asm/rm86-out.o       # a.out, FreeBSD
 | 
					#RMD160_ASM_OBJ= asm/rm86-out.o       # a.out, FreeBSD
 | 
				
			||||||
#RMD160_ASM_OBJ= asm/rm86bsdi.o       # bsdi
 | 
					#RMD160_ASM_OBJ= asm/rm86bsdi.o       # bsdi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# KRB5 stuff
 | 
				
			||||||
 | 
					KRB5_INCLUDES=
 | 
				
			||||||
 | 
					LIBKRB5=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# When we're prepared to use shared libraries in the programs we link here
 | 
					# When we're prepared to use shared libraries in the programs we link here
 | 
				
			||||||
# we might set SHLIB_MARK to '$(SHARED_LIBS)'.
 | 
					# we might set SHLIB_MARK to '$(SHARED_LIBS)'.
 | 
				
			||||||
SHLIB_MARK=
 | 
					SHLIB_MARK=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DIRS=   crypto ssl rsaref $(SHLIB_MARK) apps test tools
 | 
					DIRS=   crypto ssl $(SHLIB_MARK) apps test tools
 | 
				
			||||||
SHLIBDIRS= crypto ssl
 | 
					SHLIBDIRS= crypto ssl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# dirs in crypto to build
 | 
					# dirs in crypto to build
 | 
				
			||||||
SDIRS=  \
 | 
					SDIRS=  \
 | 
				
			||||||
	md2 md4 md5 sha mdc2 hmac ripemd \
 | 
						md2 md4 md5 sha mdc2 hmac ripemd \
 | 
				
			||||||
	des rc2 rc4 rc5 idea bf cast \
 | 
						des rc2 rc4 rc5 idea bf cast \
 | 
				
			||||||
	bn rsa dsa dh dso engine \
 | 
						bn ec rsa dsa dh dso engine aes \
 | 
				
			||||||
	buffer bio stack lhash rand err objects \
 | 
						buffer bio stack lhash rand err objects \
 | 
				
			||||||
	evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp
 | 
						evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# tests to perform.  "alltests" is a special word indicating that all tests
 | 
				
			||||||
 | 
					# should be performed.
 | 
				
			||||||
 | 
					TESTS = alltests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MAKEFILE= Makefile.ssl
 | 
					MAKEFILE= Makefile.ssl
 | 
				
			||||||
MAKE=     make -f Makefile.ssl
 | 
					MAKE=     make -f Makefile.ssl
 | 
				
			||||||
@@ -172,6 +194,7 @@ MAKE=     make -f Makefile.ssl
 | 
				
			|||||||
MANDIR=$(OPENSSLDIR)/man
 | 
					MANDIR=$(OPENSSLDIR)/man
 | 
				
			||||||
MAN1=1
 | 
					MAN1=1
 | 
				
			||||||
MAN3=3
 | 
					MAN3=3
 | 
				
			||||||
 | 
					MANSUFFIX=
 | 
				
			||||||
SHELL=/bin/sh
 | 
					SHELL=/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TOP=    .
 | 
					TOP=    .
 | 
				
			||||||
@@ -183,35 +206,31 @@ SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
 | 
				
			|||||||
SHARED_SSL=libssl$(SHLIB_EXT)
 | 
					SHARED_SSL=libssl$(SHLIB_EXT)
 | 
				
			||||||
SHARED_LIBS=
 | 
					SHARED_LIBS=
 | 
				
			||||||
SHARED_LIBS_LINK_EXTS=
 | 
					SHARED_LIBS_LINK_EXTS=
 | 
				
			||||||
 | 
					SHARED_LDFLAGS=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GENERAL=        Makefile
 | 
					GENERAL=        Makefile
 | 
				
			||||||
BASENAME=       openssl
 | 
					BASENAME=       openssl
 | 
				
			||||||
NAME=           $(BASENAME)-$(VERSION)
 | 
					NAME=           $(BASENAME)-$(VERSION)
 | 
				
			||||||
TARFILE=        $(NAME).tar
 | 
					TARFILE=        $(NAME).tar
 | 
				
			||||||
WTARFILE=       $(NAME)-win.tar
 | 
					WTARFILE=       $(NAME)-win.tar
 | 
				
			||||||
EXHEADER=       e_os.h e_os2.h
 | 
					EXHEADER=       e_os2.h
 | 
				
			||||||
HEADER=         e_os.h
 | 
					HEADER=         e_os.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# When we're prepared to use shared libraries in the programs we link here
 | 
					# When we're prepared to use shared libraries in the programs we link here
 | 
				
			||||||
# we might remove 'clean-shared' from the targets to perform at this stage
 | 
					# we might remove 'clean-shared' from the targets to perform at this stage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
all: clean-shared Makefile.ssl sub_all
 | 
					all: Makefile.ssl sub_all openssl.pc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub_all:
 | 
					sub_all:
 | 
				
			||||||
	@for i in $(DIRS); \
 | 
						@for i in $(DIRS); \
 | 
				
			||||||
	do \
 | 
						do \
 | 
				
			||||||
	if [ -d "$$i" ]; then \
 | 
						if [ -d "$$i" ]; then \
 | 
				
			||||||
		(cd $$i && echo "making all in $$i..." && \
 | 
							(cd $$i && echo "making all in $$i..." && \
 | 
				
			||||||
		$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' EXE_EXT='${EXE_EXT}' all ) || exit 1; \
 | 
							$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' AS='${AS}' ASFLAG='${ASFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' all ) || exit 1; \
 | 
				
			||||||
	else \
 | 
						else \
 | 
				
			||||||
		$(MAKE) $$i; \
 | 
							$(MAKE) $$i; \
 | 
				
			||||||
	fi; \
 | 
						fi; \
 | 
				
			||||||
	done; \
 | 
						done;
 | 
				
			||||||
	if echo "$(DIRS)" | \
 | 
					 | 
				
			||||||
	    egrep '(^| )(crypto|ssl)( |$$)' > /dev/null 2>&1 && \
 | 
					 | 
				
			||||||
	   [ -n "$(SHARED_LIBS)" ]; then \
 | 
					 | 
				
			||||||
		$(MAKE) $(SHARED_LIBS); \
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
libcrypto$(SHLIB_EXT): libcrypto.a
 | 
					libcrypto$(SHLIB_EXT): libcrypto.a
 | 
				
			||||||
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
						@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
				
			||||||
@@ -219,6 +238,7 @@ libcrypto$(SHLIB_EXT): libcrypto.a
 | 
				
			|||||||
	else \
 | 
						else \
 | 
				
			||||||
		echo "There's no support for shared libraries on this platform" >&2; \
 | 
							echo "There's no support for shared libraries on this platform" >&2; \
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a
 | 
					libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a
 | 
				
			||||||
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
						@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
				
			||||||
		$(MAKE) SHLIBDIRS=ssl SHLIBDEPS='-lcrypto' build-shared; \
 | 
							$(MAKE) SHLIBDIRS=ssl SHLIBDEPS='-lcrypto' build-shared; \
 | 
				
			||||||
@@ -235,19 +255,23 @@ clean-shared:
 | 
				
			|||||||
			done; \
 | 
								done; \
 | 
				
			||||||
		fi; \
 | 
							fi; \
 | 
				
			||||||
		( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
 | 
							( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
 | 
				
			||||||
 | 
							if [ "$(PLATFORM)" = "Cygwin" ]; then \
 | 
				
			||||||
 | 
								( set -x; rm -f cyg$$i-$(SHLIB_VERSION_NUMBER)$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
 | 
				
			||||||
 | 
							fi; \
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
link-shared:
 | 
					link-shared:
 | 
				
			||||||
	@for i in $(SHLIBDIRS); do \
 | 
						@if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
 | 
				
			||||||
		prev=lib$$i$(SHLIB_EXT); \
 | 
							tmp="$(SHARED_LIBS_LINK_EXTS)"; \
 | 
				
			||||||
		if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
 | 
							for i in $(SHLIBDIRS); do \
 | 
				
			||||||
			tmp="$(SHARED_LIBS_LINK_EXTS)"; \
 | 
								prev=lib$$i$(SHLIB_EXT); \
 | 
				
			||||||
			for j in $${tmp:-x}; do \
 | 
								for j in $${tmp:-x}; do \
 | 
				
			||||||
				( set -x; ln -f -s $$prev lib$$i$$j ); \
 | 
									( set -x; \
 | 
				
			||||||
 | 
									rm -f lib$$i$$j; ln -s $$prev lib$$i$$j ); \
 | 
				
			||||||
				prev=lib$$i$$j; \
 | 
									prev=lib$$i$$j; \
 | 
				
			||||||
			done; \
 | 
								done; \
 | 
				
			||||||
		fi; \
 | 
							done; \
 | 
				
			||||||
	done
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
build-shared: clean-shared do_$(SHLIB_TARGET) link-shared
 | 
					build-shared: clean-shared do_$(SHLIB_TARGET) link-shared
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -255,19 +279,46 @@ do_bsd-gcc-shared: do_gnu-shared
 | 
				
			|||||||
do_linux-shared: do_gnu-shared
 | 
					do_linux-shared: do_gnu-shared
 | 
				
			||||||
do_gnu-shared:
 | 
					do_gnu-shared:
 | 
				
			||||||
	libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
						libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
				
			||||||
	( set -x; ${CC}  -shared -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
						if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
				
			||||||
 | 
							libs="$(LIBKRB5) $$libs"; \
 | 
				
			||||||
 | 
						fi; \
 | 
				
			||||||
 | 
						( set -x; ${CC} ${SHARED_LDFLAGS} \
 | 
				
			||||||
 | 
							-shared -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
				
			||||||
		-Wl,-soname=lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
							-Wl,-soname=lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
				
			||||||
 | 
							-Wl,-Bsymbolic \
 | 
				
			||||||
		-Wl,--whole-archive lib$$i.a \
 | 
							-Wl,--whole-archive lib$$i.a \
 | 
				
			||||||
		-Wl,--no-whole-archive $$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
							-Wl,--no-whole-archive $$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
				
			||||||
	libs="$$libs -l$$i"; \
 | 
						libs="-l$$i $$libs"; \
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DETECT_GNU_LD=${CC} -v 2>&1 | grep '^gcc' >/dev/null 2>&1 && \
 | 
					DETECT_GNU_LD=(${CC} -Wl,-V /dev/null 2>&1 | grep '^GNU ld' )>/dev/null
 | 
				
			||||||
	collect2=`gcc -print-prog-name=collect2 2>&1` && \
 | 
					
 | 
				
			||||||
	[ -n "$$collect2" ] && \
 | 
					# For Darwin AKA Mac OS/X (dyld)
 | 
				
			||||||
	my_ld=`$$collect2 --help 2>&1 | grep Usage: | sed 's/^Usage: *\([^ ][^ ]*\).*/\1/'` && \
 | 
					do_darwin-shared: 
 | 
				
			||||||
	[ -n "$$my_ld" ] && \
 | 
						libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
				
			||||||
	$$my_ld -v 2>&1 | grep 'GNU ld' >/dev/null 2>&1
 | 
						if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
				
			||||||
 | 
							libs="$(LIBKRB5) $$libs"; \
 | 
				
			||||||
 | 
						fi; \
 | 
				
			||||||
 | 
						( set -x; ${CC} --verbose -dynamiclib -o lib$$i${SHLIB_EXT} \
 | 
				
			||||||
 | 
							lib$$i.a $$libs -all_load -current_version ${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
				
			||||||
 | 
							-compatibility_version ${SHLIB_MAJOR}.`echo ${SHLIB_MINOR} | cut -d. -f1` \
 | 
				
			||||||
 | 
							-install_name ${INSTALLTOP}/lib/lib$$i${SHLIB_EXT} ) || exit 1; \
 | 
				
			||||||
 | 
						libs="-l`basename $$i${SHLIB_EXT} .dylib` $$libs"; \
 | 
				
			||||||
 | 
						echo "" ; \
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					do_cygwin-shared:
 | 
				
			||||||
 | 
						libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
				
			||||||
 | 
						if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
				
			||||||
 | 
							libs="$(LIBKRB5) $$libs"; \
 | 
				
			||||||
 | 
						fi; \
 | 
				
			||||||
 | 
						( set -x; ${CC}  -shared -o cyg$$i-$(SHLIB_VERSION_NUMBER).dll \
 | 
				
			||||||
 | 
							-Wl,-Bsymbolic \
 | 
				
			||||||
 | 
							-Wl,--whole-archive lib$$i.a \
 | 
				
			||||||
 | 
							-Wl,--out-implib,lib$$i.dll.a \
 | 
				
			||||||
 | 
							-Wl,--no-whole-archive $$libs ) || exit 1; \
 | 
				
			||||||
 | 
						libs="-l$$i $$libs"; \
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# This assumes that GNU utilities are *not* used
 | 
					# This assumes that GNU utilities are *not* used
 | 
				
			||||||
do_alpha-osf1-shared:
 | 
					do_alpha-osf1-shared:
 | 
				
			||||||
@@ -275,10 +326,14 @@ do_alpha-osf1-shared:
 | 
				
			|||||||
		$(MAKE) do_gnu-shared; \
 | 
							$(MAKE) do_gnu-shared; \
 | 
				
			||||||
	else \
 | 
						else \
 | 
				
			||||||
		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
							libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
				
			||||||
		( set -x; ${CC}  -shared -o lib$$i.so \
 | 
							if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
				
			||||||
 | 
								libs="$(LIBKRB5) $$libs"; \
 | 
				
			||||||
 | 
							fi; \
 | 
				
			||||||
 | 
							( set -x; ${CC} ${SHARED_LDFLAGS} \
 | 
				
			||||||
 | 
								-shared -o lib$$i.so \
 | 
				
			||||||
			-set_version "${SHLIB_VERSION_HISTORY}${SHLIB_VERSION_NUMBER}" \
 | 
								-set_version "${SHLIB_VERSION_HISTORY}${SHLIB_VERSION_NUMBER}" \
 | 
				
			||||||
			-all lib$$i.a -none $$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
								-all lib$$i.a -none $$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
				
			||||||
		libs="$$libs -l$$i"; \
 | 
							libs="-l$$i $$libs"; \
 | 
				
			||||||
		done; \
 | 
							done; \
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -290,10 +345,14 @@ do_tru64-shared:
 | 
				
			|||||||
		$(MAKE) do_gnu-shared; \
 | 
							$(MAKE) do_gnu-shared; \
 | 
				
			||||||
	else \
 | 
						else \
 | 
				
			||||||
		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
							libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
				
			||||||
		( set -x; ${CC}  -shared -msym -o lib$$i.so \
 | 
							if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
				
			||||||
 | 
								libs="$(LIBKRB5) $$libs"; \
 | 
				
			||||||
 | 
							fi; \
 | 
				
			||||||
 | 
							( set -x; ${CC} ${SHARED_LDFLAGS} \
 | 
				
			||||||
 | 
								-shared -msym -o lib$$i.so \
 | 
				
			||||||
			-set_version "${SHLIB_VERSION_HISTORY}${SHLIB_VERSION_NUMBER}" \
 | 
								-set_version "${SHLIB_VERSION_HISTORY}${SHLIB_VERSION_NUMBER}" \
 | 
				
			||||||
			-all lib$$i.a -none $$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
								-all lib$$i.a -none $$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
				
			||||||
		libs="$$libs -l$$i"; \
 | 
							libs="-l$$i $$libs"; \
 | 
				
			||||||
		done; \
 | 
							done; \
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -305,11 +364,15 @@ do_tru64-shared-rpath:
 | 
				
			|||||||
		$(MAKE) do_gnu-shared; \
 | 
							$(MAKE) do_gnu-shared; \
 | 
				
			||||||
	else \
 | 
						else \
 | 
				
			||||||
		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
							libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
				
			||||||
		( set -x; ${CC}  -shared -msym -o lib$$i.so \
 | 
							if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
				
			||||||
 | 
								libs="$(LIBKRB5) $$libs"; \
 | 
				
			||||||
 | 
							fi; \
 | 
				
			||||||
 | 
							( set -x; ${CC} ${SHARED_LDFLAGS} \
 | 
				
			||||||
 | 
								-shared -msym -o lib$$i.so \
 | 
				
			||||||
			-rpath  ${INSTALLTOP}/lib \
 | 
								-rpath  ${INSTALLTOP}/lib \
 | 
				
			||||||
			-set_version "${SHLIB_VERSION_HISTORY}${SHLIB_VERSION_NUMBER}" \
 | 
								-set_version "${SHLIB_VERSION_HISTORY}${SHLIB_VERSION_NUMBER}" \
 | 
				
			||||||
			-all lib$$i.a -none $$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
								-all lib$$i.a -none $$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
				
			||||||
		libs="$$libs -l$$i"; \
 | 
							libs="-l$$i $$libs"; \
 | 
				
			||||||
		done; \
 | 
							done; \
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -320,11 +383,41 @@ do_solaris-shared:
 | 
				
			|||||||
		$(MAKE) do_gnu-shared; \
 | 
							$(MAKE) do_gnu-shared; \
 | 
				
			||||||
	else \
 | 
						else \
 | 
				
			||||||
		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
							libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
				
			||||||
 | 
							if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
				
			||||||
 | 
								libs="$(LIBKRB5) $$libs"; \
 | 
				
			||||||
 | 
							fi; \
 | 
				
			||||||
		( PATH=/usr/ccs/bin:$$PATH ; export PATH; \
 | 
							( PATH=/usr/ccs/bin:$$PATH ; export PATH; \
 | 
				
			||||||
		  set -x; ${CC}  -G -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
							  MINUSZ='-z '; \
 | 
				
			||||||
 | 
							  (${CC} -v 2>&1 | grep gcc) > /dev/null && MINUSZ='-Wl,-z,'; \
 | 
				
			||||||
 | 
							  set -x; ${CC} ${SHARED_LDFLAGS} -G -dy -z text \
 | 
				
			||||||
 | 
								-o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
				
			||||||
			-h lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
								-h lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
				
			||||||
			-z allextract lib$$i.a $$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
								$${MINUSZ}allextract lib$$i.a $${MINUSZ}defaultextract \
 | 
				
			||||||
		libs="$$libs -l$$i"; \
 | 
								$$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
				
			||||||
 | 
							libs="-l$$i $$libs"; \
 | 
				
			||||||
 | 
							done; \
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# OpenServer 5 native compilers used
 | 
				
			||||||
 | 
					do_svr3-shared:
 | 
				
			||||||
 | 
						if ${DETECT_GNU_LD}; then \
 | 
				
			||||||
 | 
							$(MAKE) do_gnu-shared; \
 | 
				
			||||||
 | 
						else \
 | 
				
			||||||
 | 
							libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
				
			||||||
 | 
							if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
				
			||||||
 | 
								libs="$(LIBKRB5) $$libs"; \
 | 
				
			||||||
 | 
							fi; \
 | 
				
			||||||
 | 
							( PATH=/usr/ccs/bin:$$PATH ; export PATH; \
 | 
				
			||||||
 | 
							  find . -name "*.o" -print > allobjs ; \
 | 
				
			||||||
 | 
							  OBJS= ; export OBJS ; \
 | 
				
			||||||
 | 
							  for obj in `ar t lib$$i.a` ; do \
 | 
				
			||||||
 | 
							    OBJS="$${OBJS} `grep /$$obj allobjs`" ; \
 | 
				
			||||||
 | 
							  done ; \
 | 
				
			||||||
 | 
							  set -x; ${CC} ${SHARED_LDFLAGS} \
 | 
				
			||||||
 | 
								-G -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
				
			||||||
 | 
								-h lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
				
			||||||
 | 
								$${OBJS} $$libs ${EX_LIBS} ) || exit 1; \
 | 
				
			||||||
 | 
							libs="-l$$i $$libs"; \
 | 
				
			||||||
		done; \
 | 
							done; \
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -334,16 +427,23 @@ do_svr5-shared:
 | 
				
			|||||||
		$(MAKE) do_gnu-shared; \
 | 
							$(MAKE) do_gnu-shared; \
 | 
				
			||||||
	else \
 | 
						else \
 | 
				
			||||||
		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
							libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
				
			||||||
 | 
							if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
				
			||||||
 | 
								libs="$(LIBKRB5) $$libs"; \
 | 
				
			||||||
 | 
							fi; \
 | 
				
			||||||
		( PATH=/usr/ccs/bin:$$PATH ; export PATH; \
 | 
							( PATH=/usr/ccs/bin:$$PATH ; export PATH; \
 | 
				
			||||||
 | 
							  SHARE_FLAG='-G'; \
 | 
				
			||||||
 | 
							  (${CC} -v 2>&1 | grep gcc) > /dev/null && SHARE_FLAG='-shared'; \
 | 
				
			||||||
		  find . -name "*.o" -print > allobjs ; \
 | 
							  find . -name "*.o" -print > allobjs ; \
 | 
				
			||||||
		  OBJS= ; export OBJS ; \
 | 
							  OBJS= ; export OBJS ; \
 | 
				
			||||||
		  for obj in `ar t lib$$i.a` ; do \
 | 
							  for obj in `ar t lib$$i.a` ; do \
 | 
				
			||||||
		    OBJS="$${OBJS} `grep $$obj allobjs`" ; \
 | 
							    OBJS="$${OBJS} `grep /$$obj allobjs`" ; \
 | 
				
			||||||
		  done ; \
 | 
							  done ; \
 | 
				
			||||||
		  set -x; ${CC}  -G -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
							  set -x; LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH \
 | 
				
			||||||
 | 
								${CC} ${SHARED_LDFLAGS} \
 | 
				
			||||||
 | 
								$${SHARE_FLAG} -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
				
			||||||
			-h lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
								-h lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
				
			||||||
			$${OBJS} $$libs ${EX_LIBS} ) || exit 1; \
 | 
								$${OBJS} $$libs ${EX_LIBS} ) || exit 1; \
 | 
				
			||||||
		libs="$$libs -l$$i"; \
 | 
							libs="-l$$i $$libs"; \
 | 
				
			||||||
		done; \
 | 
							done; \
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -353,30 +453,64 @@ do_irix-shared:
 | 
				
			|||||||
		$(MAKE) do_gnu-shared; \
 | 
							$(MAKE) do_gnu-shared; \
 | 
				
			||||||
	else \
 | 
						else \
 | 
				
			||||||
		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
							libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
				
			||||||
		( set -x; ${CC} -shared -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
							if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
				
			||||||
 | 
								libs="$(LIBKRB5) $$libs"; \
 | 
				
			||||||
 | 
							fi; \
 | 
				
			||||||
 | 
							( WHOLELIB="-all lib$$i.a -notall"; \
 | 
				
			||||||
 | 
							  (${CC} -v 2>&1 | grep gcc) > /dev/null && WHOLELIB="-Wl,-all,lib$$i.a,-notall"; \
 | 
				
			||||||
 | 
							  set -x; ${CC} ${SHARED_LDFLAGS} \
 | 
				
			||||||
 | 
								-shared -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
				
			||||||
			-Wl,-soname,lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
								-Wl,-soname,lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
				
			||||||
			-all lib$$i.a $$libs ${EX_LIBS} -lc) || exit 1; \
 | 
								$${WHOLELIB} $$libs ${EX_LIBS} -lc) || exit 1; \
 | 
				
			||||||
		libs="$$libs -l$$i"; \
 | 
							libs="-l$$i $$libs"; \
 | 
				
			||||||
		done; \
 | 
							done; \
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# This assumes that GNU utilities are *not* used
 | 
					# This assumes that GNU utilities are *not* used
 | 
				
			||||||
 | 
					# HP-UX includes the full pathname of libs we depend on, so we would get
 | 
				
			||||||
 | 
					# ./libcrypto (with ./ as path information) compiled into libssl, hence
 | 
				
			||||||
 | 
					# we omit the SHLIBDEPS. Applications must be linked with -lssl -lcrypto
 | 
				
			||||||
 | 
					# anyway.
 | 
				
			||||||
 | 
					# The object modules are loaded from lib$i.a using the undocumented -Fl
 | 
				
			||||||
 | 
					# option.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# WARNING: Until DSO is fixed to support a search path, we support SHLIB_PATH
 | 
				
			||||||
 | 
					#          by temporarily specifying "+s"!
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
do_hpux-shared:
 | 
					do_hpux-shared:
 | 
				
			||||||
	libs='${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
						for i in ${SHLIBDIRS}; do \
 | 
				
			||||||
	( set -x; /usr/ccs/bin/ld +vnocompatwarnings \
 | 
						if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
				
			||||||
		-b -z -o lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
							libs="$(LIBKRB5) $$libs"; \
 | 
				
			||||||
 | 
						fi; \
 | 
				
			||||||
 | 
						( set -x; /usr/ccs/bin/ld ${SHARED_LDFLAGS} \
 | 
				
			||||||
 | 
					 		+vnocompatwarnings \
 | 
				
			||||||
 | 
							-b -z +s \
 | 
				
			||||||
 | 
							-o lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
				
			||||||
		+h lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
							+h lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
				
			||||||
		-Fl lib$$i.a $$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
							-Fl lib$$i.a -ldld -lc ) || exit 1; \
 | 
				
			||||||
	libs="$$libs -L. -l$$i"; \
 | 
						chmod a=rx lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR}; \
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# This assumes that GNU utilities are *not* used
 | 
					# This assumes that GNU utilities are *not* used
 | 
				
			||||||
 | 
					# HP-UX includes the full pathname of libs we depend on, so we would get
 | 
				
			||||||
 | 
					# ./libcrypto (with ./ as path information) compiled into libssl, hence
 | 
				
			||||||
 | 
					# we omit the SHLIBDEPS. Applications must be linked with -lssl -lcrypto
 | 
				
			||||||
 | 
					# anyway.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# HP-UX in 64bit mode has "+s" enabled by default; it will search for
 | 
				
			||||||
 | 
					# shared libraries along LD_LIBRARY_PATH _and_ SHLIB_PATH.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
do_hpux64-shared:
 | 
					do_hpux64-shared:
 | 
				
			||||||
	libs='${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
						for i in ${SHLIBDIRS}; do \
 | 
				
			||||||
	( set -x; /usr/ccs/bin/ld -b -z -o lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
						if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
				
			||||||
 | 
							libs="$(LIBKRB5) $$libs"; \
 | 
				
			||||||
 | 
						fi; \
 | 
				
			||||||
 | 
						( set -x; /usr/ccs/bin/ld ${SHARED_LDFLAGS} \
 | 
				
			||||||
 | 
					 		-b -z \
 | 
				
			||||||
 | 
							-o lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
				
			||||||
		+h lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
							+h lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
				
			||||||
		+forceload lib$$i.a $$libs ${EX_LIBS} -lc ) || exit 1; \
 | 
							+forceload lib$$i.a -ldl -lc ) || exit 1; \
 | 
				
			||||||
	libs="$$libs -L. -l$$i"; \
 | 
						chmod a=rx lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR}; \
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# The following method is said to work on all platforms.  Tests will
 | 
					# The following method is said to work on all platforms.  Tests will
 | 
				
			||||||
@@ -409,29 +543,63 @@ do_hpux64-shared:
 | 
				
			|||||||
#  HP/UX-64bit: /usr/ccs/bin/ld
 | 
					#  HP/UX-64bit: /usr/ccs/bin/ld
 | 
				
			||||||
#  AIX:		$(CC)
 | 
					#  AIX:		$(CC)
 | 
				
			||||||
ALLSYMSFLAG=-bnogc
 | 
					ALLSYMSFLAG=-bnogc
 | 
				
			||||||
SHAREDFLAGS=-G -bE:lib$$i.exp -bM:SRE
 | 
					SHAREDFLAGS=${SHARED_LDFLAGS} -G -bE:lib$$i.exp -bM:SRE
 | 
				
			||||||
SHAREDCMD=$(CC)
 | 
					SHAREDCMD=$(CC)
 | 
				
			||||||
do_aix-shared:
 | 
					do_aix-shared:
 | 
				
			||||||
	libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
						libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
				
			||||||
 | 
						if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
				
			||||||
 | 
							libs="$(LIBKRB5) $$libs"; \
 | 
				
			||||||
 | 
						fi; \
 | 
				
			||||||
	( set -x; \
 | 
						( set -x; \
 | 
				
			||||||
	  ld -r -o $$i.o $(ALLSYMSFLAG) lib$$i.a && \
 | 
						  ld -r -o lib$$i.o $(ALLSYMSFLAG) lib$$i.a && \
 | 
				
			||||||
	  ( nm -Pg lib$$i.o | grep ' [BD] ' | cut -f1 -d' ' > lib$$i.exp; \
 | 
						  ( nm -Pg lib$$i.o | grep ' [BD] ' | cut -f1 -d' ' > lib$$i.exp; \
 | 
				
			||||||
	    $(SHAREDCMD) $(SHAREDFLAG) -o lib$$i.so lib$$i.o \
 | 
						    $(SHAREDCMD) $(SHAREDFLAGS) \
 | 
				
			||||||
 | 
							-o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} lib$$i.o \
 | 
				
			||||||
		$$libs ${EX_LIBS} ) ) \
 | 
							$$libs ${EX_LIBS} ) ) \
 | 
				
			||||||
	|| exit 1; \
 | 
						|| exit 1; \
 | 
				
			||||||
	libs="$$libs -l$$i"; \
 | 
						libs="-l$$i $$libs"; \
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					do_reliantunix-shared:
 | 
				
			||||||
 | 
						libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
 | 
				
			||||||
 | 
						if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
 | 
				
			||||||
 | 
							libs="$(LIBKRB5) $$libs"; \
 | 
				
			||||||
 | 
						fi; \
 | 
				
			||||||
 | 
						tmpdir=/tmp/openssl.$$$$ ; rm -rf $$tmpdir ; \
 | 
				
			||||||
 | 
						( set -x; \
 | 
				
			||||||
 | 
						  ( Opwd=`pwd` ; mkdir $$tmpdir || exit 1; \
 | 
				
			||||||
 | 
						    cd $$tmpdir || exit 1 ; ar x $$Opwd/lib$$i.a ; \
 | 
				
			||||||
 | 
						    ${CC} -G -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} *.o \
 | 
				
			||||||
 | 
						  ) || exit 1; \
 | 
				
			||||||
 | 
						  cp $$tmpdir/lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} . ; \
 | 
				
			||||||
 | 
						) || exit 1; \
 | 
				
			||||||
 | 
						rm -rf $$tmpdir ; \
 | 
				
			||||||
 | 
						libs="-l$$i $$libs"; \
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					openssl.pc: Makefile.ssl
 | 
				
			||||||
 | 
						@ ( echo 'prefix=$(INSTALLTOP)'; \
 | 
				
			||||||
 | 
						    echo 'exec_prefix=$${prefix}'; \
 | 
				
			||||||
 | 
						    echo 'libdir=$${exec_prefix}/lib'; \
 | 
				
			||||||
 | 
						    echo 'includedir=$${prefix}/include'; \
 | 
				
			||||||
 | 
						    echo ''; \
 | 
				
			||||||
 | 
						    echo 'Name: OpenSSL'; \
 | 
				
			||||||
 | 
						    echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
 | 
				
			||||||
 | 
						    echo 'Version: '$(VERSION); \
 | 
				
			||||||
 | 
						    echo 'Requires: '; \
 | 
				
			||||||
 | 
						    echo 'Libs: -L$${libdir} -lssl -lcrypto $(LIBKRB5) $(EX_LIBS)'; \
 | 
				
			||||||
 | 
						    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Makefile.ssl: Makefile.org
 | 
					Makefile.ssl: Makefile.org
 | 
				
			||||||
	@echo "Makefile.ssl is older than Makefile.org."
 | 
						@echo "Makefile.ssl is older than Makefile.org."
 | 
				
			||||||
	@echo "Reconfigure the source tree (via './config' or 'perl Configure'), please."
 | 
						@echo "Reconfigure the source tree (via './config' or 'perl Configure'), please."
 | 
				
			||||||
	@false
 | 
						@false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libclean:
 | 
					libclean:
 | 
				
			||||||
	rm -f *.a */lib */*/lib
 | 
						rm -f *.map *.so *.so.* engines/*.so *.a */lib */*/lib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
clean:
 | 
					clean:	libclean
 | 
				
			||||||
	rm -f shlib/*.o *.o core a.out fluff *.map rehash.time testlog make.log cctest cctest.c
 | 
						rm -f shlib/*.o *.o core a.out fluff rehash.time testlog make.log cctest cctest.c
 | 
				
			||||||
	@for i in $(DIRS) ;\
 | 
						@for i in $(DIRS) ;\
 | 
				
			||||||
	do \
 | 
						do \
 | 
				
			||||||
	if [ -d "$$i" ]; then \
 | 
						if [ -d "$$i" ]; then \
 | 
				
			||||||
@@ -440,7 +608,8 @@ clean:
 | 
				
			|||||||
		rm -f $(LIBS); \
 | 
							rm -f $(LIBS); \
 | 
				
			||||||
	fi; \
 | 
						fi; \
 | 
				
			||||||
	done;
 | 
						done;
 | 
				
			||||||
	rm -f *.a *.o speed.* *.map *.so .pure core
 | 
						rm -f openssl.pc
 | 
				
			||||||
 | 
						rm -f speed.* .pure
 | 
				
			||||||
	rm -f $(TARFILE)
 | 
						rm -f $(TARFILE)
 | 
				
			||||||
	@for i in $(ONEDIRS) ;\
 | 
						@for i in $(ONEDIRS) ;\
 | 
				
			||||||
	do \
 | 
						do \
 | 
				
			||||||
@@ -468,10 +637,14 @@ links:
 | 
				
			|||||||
	@for i in $(DIRS); do \
 | 
						@for i in $(DIRS); do \
 | 
				
			||||||
	if [ -d "$$i" ]; then \
 | 
						if [ -d "$$i" ]; then \
 | 
				
			||||||
		(cd $$i && echo "making links in $$i..." && \
 | 
							(cd $$i && echo "making links in $$i..." && \
 | 
				
			||||||
		$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PERL='${PERL}' links ) || exit 1; \
 | 
							$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PERL='${PERL}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' links ) || exit 1; \
 | 
				
			||||||
	fi; \
 | 
						fi; \
 | 
				
			||||||
	done;
 | 
						done;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gentests:
 | 
				
			||||||
 | 
						@(cd test && echo "generating dummy tests (if needed)..." && \
 | 
				
			||||||
 | 
						$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' TESTS='${TESTS}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on generate );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dclean:
 | 
					dclean:
 | 
				
			||||||
	rm -f *.bak
 | 
						rm -f *.bak
 | 
				
			||||||
	@for i in $(DIRS) ;\
 | 
						@for i in $(DIRS) ;\
 | 
				
			||||||
@@ -484,15 +657,29 @@ dclean:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
rehash: rehash.time
 | 
					rehash: rehash.time
 | 
				
			||||||
rehash.time: certs
 | 
					rehash.time: certs
 | 
				
			||||||
	@(OPENSSL="`pwd`/apps/openssl"; export OPENSSL; $(PERL) tools/c_rehash certs)
 | 
						@(OPENSSL="`pwd`/apps/openssl"; OPENSSL_DEBUG_MEMORY=on; \
 | 
				
			||||||
 | 
							export OPENSSL OPENSSL_DEBUG_MEMORY; \
 | 
				
			||||||
 | 
							LD_LIBRARY_PATH="`pwd`:$$LD_LIBRARY_PATH"; \
 | 
				
			||||||
 | 
							DYLD_LIBRARY_PATH="`pwd`:$$DYLD_LIBRARY_PATH"; \
 | 
				
			||||||
 | 
							SHLIB_PATH="`pwd`:$$SHLIB_PATH"; \
 | 
				
			||||||
 | 
							LIBPATH="`pwd`:$$LIBPATH"; \
 | 
				
			||||||
 | 
							if [ "$(PLATFORM)" = "Cygwin" ]; then PATH="`pwd`:$$PATH"; fi; \
 | 
				
			||||||
 | 
							export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH LIBPATH PATH; \
 | 
				
			||||||
 | 
							$(PERL) tools/c_rehash certs)
 | 
				
			||||||
	touch rehash.time
 | 
						touch rehash.time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test:   tests
 | 
					test:   tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tests: rehash
 | 
					tests: rehash
 | 
				
			||||||
	@(cd test && echo "testing..." && \
 | 
						@(cd test && echo "testing..." && \
 | 
				
			||||||
	$(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SDIRS='${SDIRS}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PERL='${PERL}' EXE_EXT='${EXE_EXT}' tests );
 | 
						$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' TESTS='${TESTS}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on tests );
 | 
				
			||||||
	@apps/openssl version -a
 | 
						@LD_LIBRARY_PATH="`pwd`:$$LD_LIBRARY_PATH"; \
 | 
				
			||||||
 | 
						DYLD_LIBRARY_PATH="`pwd`:$$DYLD_LIBRARY_PATH"; \
 | 
				
			||||||
 | 
						SHLIB_PATH="`pwd`:$$SHLIB_PATH"; \
 | 
				
			||||||
 | 
						LIBPATH="`pwd`:$$LIBPATH"; \
 | 
				
			||||||
 | 
						if [ "$(PLATFORM)" = "Cygwin" ]; then PATH="`pwd`:$$PATH"; fi; \
 | 
				
			||||||
 | 
						export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH LIBPATH PATH; \
 | 
				
			||||||
 | 
						apps/openssl version -a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
report:
 | 
					report:
 | 
				
			||||||
	@$(PERL) util/selftest.pl
 | 
						@$(PERL) util/selftest.pl
 | 
				
			||||||
@@ -502,7 +689,7 @@ depend:
 | 
				
			|||||||
	do \
 | 
						do \
 | 
				
			||||||
	if [ -d "$$i" ]; then \
 | 
						if [ -d "$$i" ]; then \
 | 
				
			||||||
		(cd $$i && echo "making dependencies $$i..." && \
 | 
							(cd $$i && echo "making dependencies $$i..." && \
 | 
				
			||||||
		$(MAKE) SDIRS='${SDIRS}' DEPFLAG='${DEPFLAG}' depend ) || exit 1; \
 | 
							$(MAKE) SDIRS='${SDIRS}' CFLAG='${CFLAG}' DEPFLAG='${DEPFLAG}' MAKEDEPPROG='${MAKEDEPPROG}' KRB5_INCLUDES='${KRB5_INCLUDES}' PERL='${PERL}' depend ) || exit 1; \
 | 
				
			||||||
	fi; \
 | 
						fi; \
 | 
				
			||||||
	done;
 | 
						done;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -526,6 +713,7 @@ tags:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
errors:
 | 
					errors:
 | 
				
			||||||
	$(PERL) util/mkerr.pl -recurse -write
 | 
						$(PERL) util/mkerr.pl -recurse -write
 | 
				
			||||||
 | 
						(cd crypto/engine; $(MAKE) PERL=$(PERL) errors)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
stacks:
 | 
					stacks:
 | 
				
			||||||
	$(PERL) util/mkstack.pl -write
 | 
						$(PERL) util/mkstack.pl -write
 | 
				
			||||||
@@ -536,9 +724,9 @@ util/libeay.num::
 | 
				
			|||||||
util/ssleay.num::
 | 
					util/ssleay.num::
 | 
				
			||||||
	$(PERL) util/mkdef.pl ssl update
 | 
						$(PERL) util/mkdef.pl ssl update
 | 
				
			||||||
 | 
					
 | 
				
			||||||
crypto/objects/obj_dat.h: crypto/objects/obj_mac.h crypto/objects/obj_dat.pl
 | 
					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
 | 
						$(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.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
 | 
						$(PERL) crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num crypto/objects/obj_mac.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TABLE: Configure
 | 
					TABLE: Configure
 | 
				
			||||||
@@ -547,20 +735,37 @@ TABLE: Configure
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
update: depend errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h TABLE
 | 
					update: depend errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h TABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build distribution tar-file. As the list of files returned by "find" is
 | 
				
			||||||
 | 
					# pretty long, on several platforms a "too many arguments" error or similar
 | 
				
			||||||
 | 
					# would occur. Therefore the list of files is temporarily stored into a file
 | 
				
			||||||
 | 
					# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal
 | 
				
			||||||
 | 
					# tar does not support the --files-from option.
 | 
				
			||||||
tar:
 | 
					tar:
 | 
				
			||||||
	@$(TAR) $(TARFLAGS) -cvf - \
 | 
						find . -type d -print | xargs chmod 755
 | 
				
			||||||
		`find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE | sort` |\
 | 
						find . -type f -print | xargs chmod a+r
 | 
				
			||||||
 | 
						find . -type f -perm -0100 -print | xargs chmod a+x
 | 
				
			||||||
 | 
						find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE | sort > ../$(TARFILE).list; \
 | 
				
			||||||
 | 
						$(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list -cvf - | \
 | 
				
			||||||
	tardy --user_number=0  --user_name=openssl \
 | 
						tardy --user_number=0  --user_name=openssl \
 | 
				
			||||||
	      --group_number=0 --group_name=openssl \
 | 
						      --group_number=0 --group_name=openssl \
 | 
				
			||||||
	      --prefix=openssl-$(VERSION) - |\
 | 
						      --prefix=openssl-$(VERSION) - |\
 | 
				
			||||||
	gzip --best >../$(TARFILE).gz; \
 | 
						gzip --best >../$(TARFILE).gz; \
 | 
				
			||||||
 | 
						rm -f ../$(TARFILE).list; \
 | 
				
			||||||
	ls -l ../$(TARFILE).gz
 | 
						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:   
 | 
					dist:   
 | 
				
			||||||
	$(PERL) Configure dist
 | 
						$(PERL) Configure dist
 | 
				
			||||||
	@$(MAKE) dist_pem_h
 | 
						@$(MAKE) dist_pem_h
 | 
				
			||||||
	@$(MAKE) SDIRS='${SDIRS}' clean
 | 
						@$(MAKE) SDIRS='${SDIRS}' clean
 | 
				
			||||||
	@$(MAKE) tar
 | 
						@$(MAKE) TAR='${TAR}' TARFLAGS='${TARFLAGS}' tar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dist_pem_h:
 | 
					dist_pem_h:
 | 
				
			||||||
	(cd crypto/pem; $(MAKE) CC='${CC}' SDIRS='${SDIRS}' CFLAG='${CFLAG}' pem.h; $(MAKE) clean)
 | 
						(cd crypto/pem; $(MAKE) CC='${CC}' SDIRS='${SDIRS}' CFLAG='${CFLAG}' pem.h; $(MAKE) clean)
 | 
				
			||||||
@@ -568,6 +773,7 @@ dist_pem_h:
 | 
				
			|||||||
install: all install_docs
 | 
					install: all install_docs
 | 
				
			||||||
	@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
 | 
						@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
 | 
				
			||||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/lib \
 | 
							$(INSTALL_PREFIX)$(INSTALLTOP)/lib \
 | 
				
			||||||
 | 
							$(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig \
 | 
				
			||||||
		$(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
 | 
							$(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
 | 
				
			||||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
 | 
							$(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
 | 
				
			||||||
		$(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
 | 
							$(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
 | 
				
			||||||
@@ -589,25 +795,46 @@ install: all install_docs
 | 
				
			|||||||
	do \
 | 
						do \
 | 
				
			||||||
		if [ -f "$$i" ]; then \
 | 
							if [ -f "$$i" ]; then \
 | 
				
			||||||
		(       echo installing $$i; \
 | 
							(       echo installing $$i; \
 | 
				
			||||||
			cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
 | 
								cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
 | 
				
			||||||
			$(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \
 | 
								$(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
 | 
				
			||||||
			chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i ); \
 | 
								chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
 | 
				
			||||||
		fi \
 | 
								mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i ); \
 | 
				
			||||||
	done
 | 
							fi; \
 | 
				
			||||||
 | 
						done;
 | 
				
			||||||
	@if [ -n "$(SHARED_LIBS)" ]; then \
 | 
						@if [ -n "$(SHARED_LIBS)" ]; then \
 | 
				
			||||||
		tmp="$(SHARED_LIBS)"; \
 | 
							tmp="$(SHARED_LIBS)"; \
 | 
				
			||||||
		for i in $${tmp:-x}; \
 | 
							for i in $${tmp:-x}; \
 | 
				
			||||||
		do \
 | 
							do \
 | 
				
			||||||
			if [ -f "$$i" ]; then \
 | 
								if [ -f "$$i" -o -f "$$i.a" ]; then \
 | 
				
			||||||
			(       echo installing $$i; \
 | 
								(       echo installing $$i; \
 | 
				
			||||||
				cp -f $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
 | 
									if [ "$(PLATFORM)" != "Cygwin" ]; then \
 | 
				
			||||||
				chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i ); \
 | 
										cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
 | 
				
			||||||
			fi \
 | 
										chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
 | 
				
			||||||
 | 
										mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \
 | 
				
			||||||
 | 
									else \
 | 
				
			||||||
 | 
										c=`echo $$i | sed 's/^lib\(.*\)\.dll/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \
 | 
				
			||||||
 | 
										cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
 | 
				
			||||||
 | 
										chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
 | 
				
			||||||
 | 
										mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \
 | 
				
			||||||
 | 
										cp $$i.a $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a.new; \
 | 
				
			||||||
 | 
										chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a.new; \
 | 
				
			||||||
 | 
										mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a.new $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a; \
 | 
				
			||||||
 | 
									fi ); \
 | 
				
			||||||
 | 
								fi; \
 | 
				
			||||||
		done; \
 | 
							done; \
 | 
				
			||||||
		(	here="`pwd`"; \
 | 
							(	here="`pwd`"; \
 | 
				
			||||||
			cd $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
 | 
								cd $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
 | 
				
			||||||
			make -f $$here/Makefile link-shared ); \
 | 
								set $(MAKE); \
 | 
				
			||||||
 | 
								$$1 -f $$here/Makefile link-shared ); \
 | 
				
			||||||
 | 
							if [ "$(INSTALLTOP)" != "/usr" ]; then \
 | 
				
			||||||
 | 
								echo 'OpenSSL shared libraries have been installed in:'; \
 | 
				
			||||||
 | 
								echo '  $(INSTALLTOP)'; \
 | 
				
			||||||
 | 
								echo ''; \
 | 
				
			||||||
 | 
								sed -e '1,/^$$/d' doc/openssl-shared.txt; \
 | 
				
			||||||
 | 
							fi; \
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
						cp openssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig
 | 
				
			||||||
 | 
						chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig/openssl.pc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
install_docs:
 | 
					install_docs:
 | 
				
			||||||
	@$(PERL) $(TOP)/util/mkdir-p.pl \
 | 
						@$(PERL) $(TOP)/util/mkdir-p.pl \
 | 
				
			||||||
@@ -615,23 +842,45 @@ install_docs:
 | 
				
			|||||||
		$(INSTALL_PREFIX)$(MANDIR)/man3 \
 | 
							$(INSTALL_PREFIX)$(MANDIR)/man3 \
 | 
				
			||||||
		$(INSTALL_PREFIX)$(MANDIR)/man5 \
 | 
							$(INSTALL_PREFIX)$(MANDIR)/man5 \
 | 
				
			||||||
		$(INSTALL_PREFIX)$(MANDIR)/man7
 | 
							$(INSTALL_PREFIX)$(MANDIR)/man7
 | 
				
			||||||
	@for i in doc/apps/*.pod; do \
 | 
						@pod2man="`cd util; ./pod2mantest $(PERL)`"; \
 | 
				
			||||||
 | 
						here="`pwd`"; \
 | 
				
			||||||
 | 
						filecase=; \
 | 
				
			||||||
 | 
						if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" ]; then \
 | 
				
			||||||
 | 
							filecase=-i; \
 | 
				
			||||||
 | 
						fi; \
 | 
				
			||||||
 | 
						for i in doc/apps/*.pod; do \
 | 
				
			||||||
		fn=`basename $$i .pod`; \
 | 
							fn=`basename $$i .pod`; \
 | 
				
			||||||
		if [ "$$fn" = "config" ]; then sec=5; else sec=1; fi; \
 | 
							if [ "$$fn" = "config" ]; then sec=5; else sec=1; fi; \
 | 
				
			||||||
		echo "installing man$$sec/`basename $$i .pod`.$$sec"; \
 | 
							echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
 | 
				
			||||||
		(cd `dirname $$i`; \
 | 
							(cd `$(PERL) util/dirname.pl $$i`; \
 | 
				
			||||||
		$(PERL) ../../util/pod2man.pl --section=$$sec --center=OpenSSL \
 | 
							sh -c "$$pod2man \
 | 
				
			||||||
			 --release=$(VERSION) `basename $$i`) \
 | 
								--section=$$sec --center=OpenSSL \
 | 
				
			||||||
			>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/`basename $$i .pod`.$$sec; \
 | 
								--release=$(VERSION) `basename $$i`") \
 | 
				
			||||||
	done
 | 
								>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
 | 
				
			||||||
	@for i in doc/crypto/*.pod doc/ssl/*.pod; do \
 | 
							$(PERL) util/extract-names.pl < $$i | \
 | 
				
			||||||
 | 
								grep -v $$filecase "^$$fn\$$" | \
 | 
				
			||||||
 | 
								grep -v "[	]" | \
 | 
				
			||||||
 | 
								(cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \
 | 
				
			||||||
 | 
								 while read n; do \
 | 
				
			||||||
 | 
									$$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \
 | 
				
			||||||
 | 
								 done); \
 | 
				
			||||||
 | 
						done; \
 | 
				
			||||||
 | 
						for i in doc/crypto/*.pod doc/ssl/*.pod; do \
 | 
				
			||||||
		fn=`basename $$i .pod`; \
 | 
							fn=`basename $$i .pod`; \
 | 
				
			||||||
		if [ "$$fn" = "des_modes" ]; then sec=7; else sec=3; fi; \
 | 
							if [ "$$fn" = "des_modes" ]; then sec=7; else sec=3; fi; \
 | 
				
			||||||
		echo "installing man$$sec/`basename $$i .pod`.$$sec"; \
 | 
							echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
 | 
				
			||||||
		(cd `dirname $$i`; \
 | 
							(cd `$(PERL) util/dirname.pl $$i`; \
 | 
				
			||||||
		$(PERL) ../../util/pod2man.pl --section=$$sec --center=OpenSSL \
 | 
							sh -c "$$pod2man \
 | 
				
			||||||
			--release=$(VERSION) `basename $$i`) \
 | 
								--section=$$sec --center=OpenSSL \
 | 
				
			||||||
			>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/`basename $$i .pod`.$$sec; \
 | 
								--release=$(VERSION) `basename $$i`") \
 | 
				
			||||||
 | 
								>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
 | 
				
			||||||
 | 
							$(PERL) util/extract-names.pl < $$i | \
 | 
				
			||||||
 | 
								grep -v $$filecase "^$$fn\$$" | \
 | 
				
			||||||
 | 
								grep -v "[	]" | \
 | 
				
			||||||
 | 
								(cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \
 | 
				
			||||||
 | 
								 while read n; do \
 | 
				
			||||||
 | 
									$$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \
 | 
				
			||||||
 | 
								 done); \
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
 | 
					# DO NOT DELETE THIS LINE -- make depend depends on it.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										137
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										137
									
								
								NEWS
									
									
									
									
									
								
							@@ -5,7 +5,138 @@
 | 
				
			|||||||
  This file gives a brief overview of the major changes between each OpenSSL
 | 
					  This file gives a brief overview of the major changes between each OpenSSL
 | 
				
			||||||
  release. For more details please read the CHANGES file.
 | 
					  release. For more details please read the CHANGES file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c:
 | 
					  Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      o Security: Fix Kerberos ciphersuite SSL/TLS handshaking bug
 | 
				
			||||||
 | 
					      o Security: Fix null-pointer assignment in do_change_cipher_spec()
 | 
				
			||||||
 | 
					      o Allow multiple active certificates with same subject in CA index
 | 
				
			||||||
 | 
					      o Multiple X590 verification fixes
 | 
				
			||||||
 | 
					      o Speed up HMAC and other operations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      o Security: fix various ASN1 parsing bugs.
 | 
				
			||||||
 | 
					      o New -ignore_err option to OCSP utility.
 | 
				
			||||||
 | 
					      o Various interop and bug fixes in S/MIME code.
 | 
				
			||||||
 | 
					      o SSL/TLS protocol fix for unrequested client certificates.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      o Security: counter the Klima-Pokorny-Rosa extension of
 | 
				
			||||||
 | 
					        Bleichbacher's attack 
 | 
				
			||||||
 | 
					      o Security: make RSA blinding default.
 | 
				
			||||||
 | 
					      o Configuration: Irix fixes, AIX fixes, better mingw support.
 | 
				
			||||||
 | 
					      o Support for new platforms: linux-ia64-ecc.
 | 
				
			||||||
 | 
					      o Build: shared library support fixes.
 | 
				
			||||||
 | 
					      o ASN.1: treat domainComponent correctly.
 | 
				
			||||||
 | 
					      o Documentation: fixes and additions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      o Security: Important security related bugfixes.
 | 
				
			||||||
 | 
					      o Enhanced compatibility with MIT Kerberos.
 | 
				
			||||||
 | 
					      o Can be built without the ENGINE framework.
 | 
				
			||||||
 | 
					      o IA32 assembler enhancements.
 | 
				
			||||||
 | 
					      o Support for new platforms: FreeBSD/IA64 and FreeBSD/Sparc64.
 | 
				
			||||||
 | 
					      o Configuration: the no-err option now works properly.
 | 
				
			||||||
 | 
					      o SSL/TLS: now handles manual certificate chain building.
 | 
				
			||||||
 | 
					      o SSL/TLS: certain session ID malfunctions corrected.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      o New library section OCSP.
 | 
				
			||||||
 | 
					      o Complete rewrite of ASN1 code.
 | 
				
			||||||
 | 
					      o CRL checking in verify code and openssl utility.
 | 
				
			||||||
 | 
					      o Extension copying in 'ca' utility.
 | 
				
			||||||
 | 
					      o Flexible display options in 'ca' utility.
 | 
				
			||||||
 | 
					      o Provisional support for international characters with UTF8.
 | 
				
			||||||
 | 
					      o Support for external crypto devices ('engine') is no longer
 | 
				
			||||||
 | 
					        a separate distribution.
 | 
				
			||||||
 | 
					      o New elliptic curve library section.
 | 
				
			||||||
 | 
					      o New AES (Rijndael) library section.
 | 
				
			||||||
 | 
					      o Support for new platforms: Windows CE, Tandem OSS, A/UX, AIX 64-bit,
 | 
				
			||||||
 | 
					        Linux x86_64, Linux 64-bit on Sparc v9
 | 
				
			||||||
 | 
					      o Extended support for some platforms: VxWorks
 | 
				
			||||||
 | 
					      o Enhanced support for shared libraries.
 | 
				
			||||||
 | 
					      o Now only builds PIC code when shared library support is requested.
 | 
				
			||||||
 | 
					      o Support for pkg-config.
 | 
				
			||||||
 | 
					      o Lots of new manuals.
 | 
				
			||||||
 | 
					      o Makes symbolic links to or copies of manuals to cover all described
 | 
				
			||||||
 | 
					        functions.
 | 
				
			||||||
 | 
					      o Change DES API to clean up the namespace (some applications link also
 | 
				
			||||||
 | 
					        against libdes providing similar functions having the same name).
 | 
				
			||||||
 | 
					        Provide macros for backward compatibility (will be removed in the
 | 
				
			||||||
 | 
					        future).
 | 
				
			||||||
 | 
					      o Unify handling of cryptographic algorithms (software and engine)
 | 
				
			||||||
 | 
					        to be available via EVP routines for asymmetric and symmetric ciphers.
 | 
				
			||||||
 | 
					      o NCONF: new configuration handling routines.
 | 
				
			||||||
 | 
					      o Change API to use more 'const' modifiers to improve error checking
 | 
				
			||||||
 | 
					        and help optimizers.
 | 
				
			||||||
 | 
					      o Finally remove references to RSAref.
 | 
				
			||||||
 | 
					      o Reworked parts of the BIGNUM code.
 | 
				
			||||||
 | 
					      o Support for new engines: Broadcom ubsec, Accelerated Encryption
 | 
				
			||||||
 | 
					        Processing, IBM 4758.
 | 
				
			||||||
 | 
					      o A few new engines added in the demos area.
 | 
				
			||||||
 | 
					      o Extended and corrected OID (object identifier) table.
 | 
				
			||||||
 | 
					      o PRNG: query at more locations for a random device, automatic query for
 | 
				
			||||||
 | 
					        EGD style random sources at several locations.
 | 
				
			||||||
 | 
					      o SSL/TLS: allow optional cipher choice according to server's preference.
 | 
				
			||||||
 | 
					      o SSL/TLS: allow server to explicitly set new session ids.
 | 
				
			||||||
 | 
					      o SSL/TLS: support Kerberos cipher suites (RFC2712).
 | 
				
			||||||
 | 
						Only supports MIT Kerberos for now.
 | 
				
			||||||
 | 
					      o SSL/TLS: allow more precise control of renegotiations and sessions.
 | 
				
			||||||
 | 
					      o SSL/TLS: add callback to retrieve SSL/TLS messages.
 | 
				
			||||||
 | 
					      o SSL/TLS: support AES cipher suites (RFC3268).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      o Security: fix various ASN1 parsing bugs.
 | 
				
			||||||
 | 
					      o SSL/TLS protocol fix for unrequested client certificates.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      o Security: counter the Klima-Pokorny-Rosa extension of
 | 
				
			||||||
 | 
					        Bleichbacher's attack 
 | 
				
			||||||
 | 
					      o Security: make RSA blinding default.
 | 
				
			||||||
 | 
					      o Build: shared library support fixes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      o Important security related bugfixes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      o New configuration targets for Tandem OSS and A/UX.
 | 
				
			||||||
 | 
					      o New OIDs for Microsoft attributes.
 | 
				
			||||||
 | 
					      o Better handling of SSL session caching.
 | 
				
			||||||
 | 
					      o Better comparison of distinguished names.
 | 
				
			||||||
 | 
					      o Better handling of shared libraries in a mixed GNU/non-GNU environment.
 | 
				
			||||||
 | 
					      o Support assembler code with Borland C.
 | 
				
			||||||
 | 
					      o Fixes for length problems.
 | 
				
			||||||
 | 
					      o Fixes for uninitialised variables.
 | 
				
			||||||
 | 
					      o Fixes for memory leaks, some unusual crashes and some race conditions.
 | 
				
			||||||
 | 
					      o Fixes for smaller building problems.
 | 
				
			||||||
 | 
					      o Updates of manuals, FAQ and other instructive documents.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      o Important building fixes on Unix.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      o Various important bugfixes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      o Important security related bugfixes.
 | 
				
			||||||
 | 
					      o Various SSL/TLS library bugfixes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      o Various SSL/TLS library bugfixes.
 | 
				
			||||||
 | 
					      o Fix DH parameter generation for 'non-standard' generators.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      o Various SSL/TLS library bugfixes.
 | 
					      o Various SSL/TLS library bugfixes.
 | 
				
			||||||
      o BIGNUM library fixes.
 | 
					      o BIGNUM library fixes.
 | 
				
			||||||
@@ -18,7 +149,7 @@
 | 
				
			|||||||
        Broadcom and Cryptographic Appliance's keyserver
 | 
					        Broadcom and Cryptographic Appliance's keyserver
 | 
				
			||||||
        [in 0.9.6c-engine release].
 | 
					        [in 0.9.6c-engine release].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b:
 | 
					  Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      o Security fix: PRNG improvements.
 | 
					      o Security fix: PRNG improvements.
 | 
				
			||||||
      o Security fix: RSA OAEP check.
 | 
					      o Security fix: RSA OAEP check.
 | 
				
			||||||
@@ -51,7 +182,7 @@
 | 
				
			|||||||
      o Bug fixes for Win32, HP/UX and Irix.
 | 
					      o Bug fixes for Win32, HP/UX and Irix.
 | 
				
			||||||
      o Bug fixes in BIGNUM, SSL, PKCS#7, PKCS#12, X.509, CONF and
 | 
					      o Bug fixes in BIGNUM, SSL, PKCS#7, PKCS#12, X.509, CONF and
 | 
				
			||||||
        memory checking routines.
 | 
					        memory checking routines.
 | 
				
			||||||
      o Bug fixes for RSA operations in threaded enviroments.
 | 
					      o Bug fixes for RSA operations in threaded environments.
 | 
				
			||||||
      o Bug fixes in misc. openssl applications.
 | 
					      o Bug fixes in misc. openssl applications.
 | 
				
			||||||
      o Remove a few potential memory leaks.
 | 
					      o Remove a few potential memory leaks.
 | 
				
			||||||
      o Add tighter checks of BIGNUM routines.
 | 
					      o Add tighter checks of BIGNUM routines.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										131
									
								
								PROBLEMS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								PROBLEMS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,131 @@
 | 
				
			|||||||
 | 
					* System libcrypto.dylib and libssl.dylib are used by system ld on MacOS X.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    NOTE: The problem described here only applies when OpenSSL isn't built
 | 
				
			||||||
 | 
					    with shared library support (i.e. without the "shared" configuration
 | 
				
			||||||
 | 
					    option).  If you build with shared library support, you will have no
 | 
				
			||||||
 | 
					    problems as long as you set up DYLD_LIBRARY_PATH properly at all times.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This is really a misfeature in ld, which seems to look for .dylib libraries
 | 
				
			||||||
 | 
					along the whole library path before it bothers looking for .a libraries.  This
 | 
				
			||||||
 | 
					means that -L switches won't matter unless OpenSSL is built with shared
 | 
				
			||||||
 | 
					library support.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The workaround may be to change the following lines in apps/Makefile.ssl and
 | 
				
			||||||
 | 
					test/Makefile.ssl:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  LIBCRYPTO=-L.. -lcrypto
 | 
				
			||||||
 | 
					  LIBSSL=-L.. -lssl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					to:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  LIBCRYPTO=../libcrypto.a
 | 
				
			||||||
 | 
					  LIBSSL=../libssl.a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It's possible that something similar is needed for shared library support
 | 
				
			||||||
 | 
					as well.  That hasn't been well tested yet.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Another solution that many seem to recommend is to move the libraries
 | 
				
			||||||
 | 
					/usr/lib/libcrypto.0.9.dylib, /usr/lib/libssl.0.9.dylib to a different
 | 
				
			||||||
 | 
					directory, build and install OpenSSL and anything that depends on your
 | 
				
			||||||
 | 
					build, then move libcrypto.0.9.dylib and libssl.0.9.dylib back to their
 | 
				
			||||||
 | 
					original places.  Note that the version numbers on those two libraries
 | 
				
			||||||
 | 
					may differ on your machine.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					As long as Apple doesn't fix the problem with ld, this problem building
 | 
				
			||||||
 | 
					OpenSSL will remain as is.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Parallell make leads to errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					While running tests, running a parallell make is a bad idea.  Many test
 | 
				
			||||||
 | 
					scripts use the same name for output and input files, which means different
 | 
				
			||||||
 | 
					will interfere with each other and lead to test failure.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The solution is simple for now: don't run parallell make when testing.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Bugs in gcc 3.0 triggered
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					According to a problem report, there are bugs in gcc 3.0 that are
 | 
				
			||||||
 | 
					triggered by some of the code in OpenSSL, more specifically in
 | 
				
			||||||
 | 
					PEM_get_EVP_CIPHER_INFO().  The triggering code is the following:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						header+=11;
 | 
				
			||||||
 | 
						if (*header != '4') return(0); header++;
 | 
				
			||||||
 | 
						if (*header != ',') return(0); header++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					What happens is that gcc might optimize a little too agressively, and
 | 
				
			||||||
 | 
					you end up with an extra incrementation when *header != '4'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					We recommend that you upgrade gcc to as high a 3.x version as you can.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* solaris64-sparcv9-cc SHA-1 performance with WorkShop 6 compiler.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					As subject suggests SHA-1 might perform poorly (4 times slower)
 | 
				
			||||||
 | 
					if compiled with WorkShop 6 compiler and -xarch=v9. The cause for
 | 
				
			||||||
 | 
					this seems to be the fact that compiler emits multiplication to
 | 
				
			||||||
 | 
					perform shift operations:-( To work the problem around configure
 | 
				
			||||||
 | 
					with './Configure solaris64-sparcv9-cc -DMD32_REG_T=int'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Problems with hp-parisc2-cc target when used with "no-asm" flag
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					When using the hp-parisc2-cc target, wrong bignum code is generated.
 | 
				
			||||||
 | 
					This is due to the SIXTY_FOUR_BIT build being compiled with the +O3
 | 
				
			||||||
 | 
					aggressive optimization.
 | 
				
			||||||
 | 
					The problem manifests itself by the BN_kronecker test hanging in an
 | 
				
			||||||
 | 
					endless loop. Reason: the BN_kronecker test calls BN_generate_prime()
 | 
				
			||||||
 | 
					which itself hangs. The reason could be tracked down to the bn_mul_comba8()
 | 
				
			||||||
 | 
					function in bn_asm.c. At some occasions the higher 32bit value of r[7]
 | 
				
			||||||
 | 
					is off by 1 (meaning: calculated=shouldbe+1). Further analysis failed,
 | 
				
			||||||
 | 
					as no debugger support possible at +O3 and additional fprintf()'s
 | 
				
			||||||
 | 
					introduced fixed the bug, therefore it is most likely a bug in the
 | 
				
			||||||
 | 
					optimizer.
 | 
				
			||||||
 | 
					The bug was found in the BN_kronecker test but may also lead to
 | 
				
			||||||
 | 
					failures in other parts of the code.
 | 
				
			||||||
 | 
					(See Ticket #426.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Workaround: modify the target to +O2 when building with no-asm.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Poor support for AIX shared builds.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					do_aix-shared rule is not flexible enough to parameterize through a
 | 
				
			||||||
 | 
					config-line. './Configure aix43-cc shared' is working, but not
 | 
				
			||||||
 | 
					'./Configure aix64-gcc shared'. In latter case make fails to create shared
 | 
				
			||||||
 | 
					libraries. It's possible to build 64-bit shared libraries by running
 | 
				
			||||||
 | 
					'env OBJECT_MODE=64 make', but we need more elegant solution. Preferably one
 | 
				
			||||||
 | 
					supporting even gcc shared builds. See RT#463 for background information.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Problems building shared libraries on SCO OpenServer Release 5.0.6
 | 
				
			||||||
 | 
					  with gcc 2.95.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The symptoms appear when running the test suite, more specifically
 | 
				
			||||||
 | 
					test/ectest, with the following result:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OSSL_LIBPATH="`cd ..; pwd`"; LD_LIBRARY_PATH="$OSSL_LIBPATH:$LD_LIBRARY_PATH"; DYLD_LIBRARY_PATH="$OSSL_LIBPATH:$DYLD_LIBRARY_PATH"; SHLIB_PATH="$OSSL_LIBPATH:$SHLIB_PATH"; LIBPATH="$OSSL_LIBPATH:$LIBPATH"; if [ "debug-sco5-gcc" = "Cygwin" ]; then PATH="${LIBPATH}:$PATH"; fi; export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH LIBPATH PATH; ./ectest
 | 
				
			||||||
 | 
					ectest.c:186: ABORT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The cause of the problem seems to be that isxdigit(), called from
 | 
				
			||||||
 | 
					BN_hex2bn(), returns 0 on a perfectly legitimate hex digit.  Further
 | 
				
			||||||
 | 
					investigation shows that any of the isxxx() macros return 0 on any
 | 
				
			||||||
 | 
					input.  A direct look in the information array that the isxxx() use,
 | 
				
			||||||
 | 
					called __ctype, shows that it contains all zeroes...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Taking a look at the newly created libcrypto.so with nm, one can see
 | 
				
			||||||
 | 
					that the variable __ctype is defined in libcrypto's .bss (which
 | 
				
			||||||
 | 
					explains why it is filled with zeroes):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$ nm -Pg libcrypto.so | grep __ctype
 | 
				
			||||||
 | 
					__ctype B 0011659c
 | 
				
			||||||
 | 
					__ctype2 U         
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Curiously, __ctype2 is undefined, in spite of being declared in
 | 
				
			||||||
 | 
					/usr/include/ctype.h in exactly the same way as __ctype.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Any information helping to solve this issue would be deeply
 | 
				
			||||||
 | 
					appreciated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: building non-shared doesn't come with this problem.
 | 
				
			||||||
							
								
								
									
										21
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								README
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 OpenSSL 0.9.6c [engine] 21 dec 2001
 | 
					 OpenSSL 0.9.7d 17 Mar 2004
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 Copyright (c) 1998-2001 The OpenSSL Project
 | 
					 Copyright (c) 1998-2004 The OpenSSL Project
 | 
				
			||||||
 Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
 | 
					 Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
 | 
				
			||||||
 All rights reserved.
 | 
					 All rights reserved.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -122,6 +122,13 @@
 | 
				
			|||||||
 lists the functions; you will probably have to look at the code to work out
 | 
					 lists the functions; you will probably have to look at the code to work out
 | 
				
			||||||
 how to use them. Look at the example programs.
 | 
					 how to use them. Look at the example programs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 PROBLEMS
 | 
				
			||||||
 | 
					 --------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 For some platforms, there are some known problems that may affect the user
 | 
				
			||||||
 | 
					 or application author.  We try to collect those in doc/PROBLEMS, with current
 | 
				
			||||||
 | 
					 thoughts on how they should be solved in a future of OpenSSL.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 SUPPORT 
 | 
					 SUPPORT 
 | 
				
			||||||
 -------
 | 
					 -------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -146,11 +153,13 @@
 | 
				
			|||||||
    - Problem Description (steps that will reproduce the problem, if known)
 | 
					    - Problem Description (steps that will reproduce the problem, if known)
 | 
				
			||||||
    - Stack Traceback (if the application dumps core)
 | 
					    - Stack Traceback (if the application dumps core)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 Report the bug to the OpenSSL project at:
 | 
					 Report the bug to the OpenSSL project via the Request Tracker
 | 
				
			||||||
 | 
					 (http://www.openssl.org/support/rt2.html) by mail to:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    openssl-bugs@openssl.org
 | 
					    openssl-bugs@openssl.org
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 Note that mail to openssl-bugs@openssl.org is forwarded to a public
 | 
					 Note that mail to openssl-bugs@openssl.org is recorded in the publicly
 | 
				
			||||||
 | 
					 readable request tracker database and is forwarded to a public
 | 
				
			||||||
 mailing list. Confidential mail may be sent to openssl-security@openssl.org
 | 
					 mailing list. Confidential mail may be sent to openssl-security@openssl.org
 | 
				
			||||||
 (PGP key available from the key servers).
 | 
					 (PGP key available from the key servers).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -164,7 +173,9 @@
 | 
				
			|||||||
 textual explanation of what your patch does.
 | 
					 textual explanation of what your patch does.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 Note: For legal reasons, contributions from the US can be accepted only
 | 
					 Note: For legal reasons, contributions from the US can be accepted only
 | 
				
			||||||
 if a copy of the patch is sent to crypt@bxa.doc.gov
 | 
					 if a TSA notification and a copy of the patch is sent to crypt@bis.doc.gov;
 | 
				
			||||||
 | 
					 see http://www.bis.doc.gov/Encryption/PubAvailEncSourceCodeNofify.html [sic]
 | 
				
			||||||
 | 
					 and http://w3.access.gpo.gov/bis/ear/pdf/740.pdf (EAR Section 740.13(e)).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 The preferred format for changes is "diff -u" output. You might
 | 
					 The preferred format for changes is "diff -u" output. You might
 | 
				
			||||||
 generate it like this:
 | 
					 generate it like this:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										187
									
								
								README.ASN1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										187
									
								
								README.ASN1
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,187 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					OpenSSL ASN1 Revision
 | 
				
			||||||
 | 
					=====================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This document describes some of the issues relating to the new ASN1 code.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Previous OpenSSL ASN1 problems
 | 
				
			||||||
 | 
					=============================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OK why did the OpenSSL ASN1 code need revising in the first place? Well
 | 
				
			||||||
 | 
					there are lots of reasons some of which are included below...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. The code is difficult to read and write. For every single ASN1 structure
 | 
				
			||||||
 | 
					(e.g. SEQUENCE) four functions need to be written for new, free, encode and
 | 
				
			||||||
 | 
					decode operations. This is a very painful and error prone operation. Very few
 | 
				
			||||||
 | 
					people have ever written any OpenSSL ASN1 and those that have usually wish
 | 
				
			||||||
 | 
					they hadn't.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2. Partly because of 1. the code is bloated and takes up a disproportionate
 | 
				
			||||||
 | 
					amount of space. The SEQUENCE encoder is particularly bad: it essentially
 | 
				
			||||||
 | 
					contains two copies of the same operation, one to compute the SEQUENCE length
 | 
				
			||||||
 | 
					and the other to encode it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3. The code is memory based: that is it expects to be able to read the whole
 | 
				
			||||||
 | 
					structure from memory. This is fine for small structures but if you have a
 | 
				
			||||||
 | 
					(say) 1Gb PKCS#7 signedData structure it isn't such a good idea...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					4. The code for the ASN1 IMPLICIT tag is evil. It is handled by temporarily
 | 
				
			||||||
 | 
					changing the tag to the expected one, attempting to read it, then changing it
 | 
				
			||||||
 | 
					back again. This means that decode buffers have to be writable even though they
 | 
				
			||||||
 | 
					are ultimately unchanged. This gets in the way of constification.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					5. The handling of EXPLICIT isn't much better. It adds a chunk of code into 
 | 
				
			||||||
 | 
					the decoder and encoder for every EXPLICIT tag.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					6. APPLICATION and PRIVATE tags aren't even supported at all.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					7. Even IMPLICIT isn't complete: there is no support for implicitly tagged
 | 
				
			||||||
 | 
					types that are not OPTIONAL.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					8. Much of the code assumes that a tag will fit in a single octet. This is
 | 
				
			||||||
 | 
					only true if the tag is 30 or less (mercifully tags over 30 are rare).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					9. The ASN1 CHOICE type has to be largely handled manually, there aren't any
 | 
				
			||||||
 | 
					macros that properly support it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					10. Encoders have no concept of OPTIONAL and have no error checking. If the
 | 
				
			||||||
 | 
					passed structure contains a NULL in a mandatory field it will not be encoded,
 | 
				
			||||||
 | 
					resulting in an invalid structure.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					11. It is tricky to add ASN1 encoders and decoders to external applications.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Template model
 | 
				
			||||||
 | 
					==============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					One of the major problems with revision is the sheer volume of the ASN1 code.
 | 
				
			||||||
 | 
					Attempts to change (for example) the IMPLICIT behaviour would result in a
 | 
				
			||||||
 | 
					modification of *every* single decode function. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					I decided to adopt a template based approach. I'm using the term 'template'
 | 
				
			||||||
 | 
					in a manner similar to SNACC templates: it has nothing to do with C++
 | 
				
			||||||
 | 
					templates.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A template is a description of an ASN1 module as several constant C structures.
 | 
				
			||||||
 | 
					It describes in a machine readable way exactly how the ASN1 structure should
 | 
				
			||||||
 | 
					behave. If this template contains enough detail then it is possible to write
 | 
				
			||||||
 | 
					versions of new, free, encode, decode (and possibly others operations) that
 | 
				
			||||||
 | 
					operate on templates.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Instead of having to write code to handle each operation only a single
 | 
				
			||||||
 | 
					template needs to be written. If new operations are needed (such as a 'print'
 | 
				
			||||||
 | 
					operation) only a single new template based function needs to be written 
 | 
				
			||||||
 | 
					which will then automatically handle all existing templates.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Plans for revision
 | 
				
			||||||
 | 
					==================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The revision will consist of the following steps. Other than the first two
 | 
				
			||||||
 | 
					these can be handled in any order.
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					o Design and write template new, free, encode and decode operations, initially
 | 
				
			||||||
 | 
					memory based. *DONE*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					o Convert existing ASN1 code to template form. *IN PROGRESS*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					o Convert an existing ASN1 compiler (probably SNACC) to output templates
 | 
				
			||||||
 | 
					in OpenSSL form.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					o Add support for BIO based ASN1 encoders and decoders to handle large
 | 
				
			||||||
 | 
					structures, initially blocking I/O.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					o Add support for non blocking I/O: this is quite a bit harder than blocking
 | 
				
			||||||
 | 
					I/O.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					o Add new ASN1 structures, such as OCSP, CRMF, S/MIME v3 (CMS), attribute
 | 
				
			||||||
 | 
					certificates etc etc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Description of major changes
 | 
				
			||||||
 | 
					============================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The BOOLEAN type now takes three values. 0xff is TRUE, 0 is FALSE and -1 is
 | 
				
			||||||
 | 
					absent. The meaning of absent depends on the context. If for example the
 | 
				
			||||||
 | 
					boolean type is DEFAULT FALSE (as in the case of the critical flag for
 | 
				
			||||||
 | 
					certificate extensions) then -1 is FALSE, if DEFAULT TRUE then -1 is TRUE.
 | 
				
			||||||
 | 
					Usually the value will only ever be read via an API which will hide this from
 | 
				
			||||||
 | 
					an application.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					There is an evil bug in the old ASN1 code that mishandles OPTIONAL with
 | 
				
			||||||
 | 
					SEQUENCE OF or SET OF. These are both implemented as a STACK structure. The
 | 
				
			||||||
 | 
					old code would omit the structure if the STACK was NULL (which is fine) or if
 | 
				
			||||||
 | 
					it had zero elements (which is NOT OK). This causes problems because an empty
 | 
				
			||||||
 | 
					SEQUENCE OF or SET OF will result in an empty STACK when it is decoded but when
 | 
				
			||||||
 | 
					it is encoded it will be omitted resulting in different encodings. The new code
 | 
				
			||||||
 | 
					only omits the encoding if the STACK is NULL, if it contains zero elements it
 | 
				
			||||||
 | 
					is encoded and empty. There is an additional problem though: because an empty
 | 
				
			||||||
 | 
					STACK was omitted, sometimes the corresponding *_new() function would
 | 
				
			||||||
 | 
					initialize the STACK to empty so an application could immediately use it, if
 | 
				
			||||||
 | 
					this is done with the new code (i.e. a NULL) it wont work. Therefore a new
 | 
				
			||||||
 | 
					STACK should be allocated first. One instance of this is the X509_CRL list of
 | 
				
			||||||
 | 
					revoked certificates: a helper function X509_CRL_add0_revoked() has been added
 | 
				
			||||||
 | 
					for this purpose.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The X509_ATTRIBUTE structure used to have an element called 'set' which took
 | 
				
			||||||
 | 
					the value 1 if the attribute value was a SET OF or 0 if it was a single. Due
 | 
				
			||||||
 | 
					to the behaviour of CHOICE in the new code this has been changed to a field
 | 
				
			||||||
 | 
					called 'single' which is 0 for a SET OF and 1 for single. The old field has
 | 
				
			||||||
 | 
					been deleted to deliberately break source compatibility. Since this structure
 | 
				
			||||||
 | 
					is normally accessed via higher level functions this shouldn't break too much.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The X509_REQ_INFO certificate request info structure no longer has a field
 | 
				
			||||||
 | 
					called 'req_kludge'. This used to be set to 1 if the attributes field was
 | 
				
			||||||
 | 
					(incorrectly) omitted. You can check to see if the field is omitted now by
 | 
				
			||||||
 | 
					checking if the attributes field is NULL. Similarly if you need to omit
 | 
				
			||||||
 | 
					the field then free attributes and set it to NULL.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The top level 'detached' field in the PKCS7 structure is no longer set when
 | 
				
			||||||
 | 
					a PKCS#7 structure is read in. PKCS7_is_detached() should be called instead.
 | 
				
			||||||
 | 
					The behaviour of PKCS7_get_detached() is unaffected.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The values of 'type' in the GENERAL_NAME structure have changed. This is
 | 
				
			||||||
 | 
					because the old code use the ASN1 initial octet as the selector. The new
 | 
				
			||||||
 | 
					code uses the index in the ASN1_CHOICE template.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The DIST_POINT_NAME structure has changed to be a true CHOICE type.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct DIST_POINT_NAME_st {
 | 
				
			||||||
 | 
					int type;
 | 
				
			||||||
 | 
					union {
 | 
				
			||||||
 | 
						STACK_OF(GENERAL_NAME) *fullname;
 | 
				
			||||||
 | 
						STACK_OF(X509_NAME_ENTRY) *relativename;
 | 
				
			||||||
 | 
					} name;
 | 
				
			||||||
 | 
					} DIST_POINT_NAME;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This means that name.fullname or name.relativename should be set
 | 
				
			||||||
 | 
					and type reflects the option. That is if name.fullname is set then
 | 
				
			||||||
 | 
					type is 0 and if name.relativename is set type is 1.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					With the old code using the i2d functions would typically involve:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unsigned char *buf, *p;
 | 
				
			||||||
 | 
					int len;
 | 
				
			||||||
 | 
					/* Find length of encoding */
 | 
				
			||||||
 | 
					len = i2d_SOMETHING(x, NULL);
 | 
				
			||||||
 | 
					/* Allocate buffer */
 | 
				
			||||||
 | 
					buf = OPENSSL_malloc(len);
 | 
				
			||||||
 | 
					if(buf == NULL) {
 | 
				
			||||||
 | 
						/* Malloc error */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* Use temp variable because &p gets updated to point to end of
 | 
				
			||||||
 | 
					 * encoding.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					p = buf;
 | 
				
			||||||
 | 
					i2d_SOMETHING(x, &p);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Using the new i2d you can also do:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unsigned char *buf = NULL;
 | 
				
			||||||
 | 
					int len;
 | 
				
			||||||
 | 
					len = i2d_SOMETHING(x, &buf);
 | 
				
			||||||
 | 
					if(len < 0) {
 | 
				
			||||||
 | 
						/* Malloc error */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					and it will automatically allocate and populate a buffer with the
 | 
				
			||||||
 | 
					encoding. After this call 'buf' will point to the start of the
 | 
				
			||||||
 | 
					encoding which is len bytes long.
 | 
				
			||||||
							
								
								
									
										302
									
								
								README.ENGINE
									
									
									
									
									
								
							
							
						
						
									
										302
									
								
								README.ENGINE
									
									
									
									
									
								
							@@ -1,63 +1,289 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
  ENGINE
 | 
					  ENGINE
 | 
				
			||||||
  ======
 | 
					  ======
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  With OpenSSL 0.9.6, a new component has been added to support external 
 | 
					  With OpenSSL 0.9.6, a new component was added to support alternative
 | 
				
			||||||
  crypto devices, for example accelerator cards.  The component is called
 | 
					  cryptography implementations, most commonly for interfacing with external
 | 
				
			||||||
  ENGINE, and has still a pretty experimental status and almost no
 | 
					  crypto devices (eg. accelerator cards). This component is called ENGINE,
 | 
				
			||||||
  documentation.  It's designed to be fairly easily extensible by the
 | 
					  and its presence in OpenSSL 0.9.6 (and subsequent bug-fix releases)
 | 
				
			||||||
  calling programs.
 | 
					  caused a little confusion as 0.9.6** releases were rolled in two
 | 
				
			||||||
 | 
					  versions, a "standard" and an "engine" version. In development for 0.9.7,
 | 
				
			||||||
 | 
					  the ENGINE code has been merged into the main branch and will be present
 | 
				
			||||||
 | 
					  in the standard releases from 0.9.7 forwards.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  There's currently built-in support for the following crypto devices:
 | 
					  There are currently built-in ENGINE implementations for the following
 | 
				
			||||||
 | 
					  crypto devices:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      o CryptoSwift
 | 
					      o CryptoSwift
 | 
				
			||||||
      o Compaq Atalla
 | 
					      o Compaq Atalla
 | 
				
			||||||
      o nCipher CHIL
 | 
					      o nCipher CHIL
 | 
				
			||||||
 | 
					      o Nuron
 | 
				
			||||||
 | 
					      o Broadcom uBSec
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  A number of things are still needed and are being worked on:
 | 
					  In addition, dynamic binding to external ENGINE implementations is now
 | 
				
			||||||
 | 
					  provided by a special ENGINE called "dynamic". See the "DYNAMIC ENGINE"
 | 
				
			||||||
 | 
					  section below for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      o An openssl utility command to handle or at least check available
 | 
					  At this stage, a number of things are still needed and are being worked on:
 | 
				
			||||||
        engines.
 | 
					
 | 
				
			||||||
      o A better way of handling the methods that are handled by the
 | 
					      1 Integration of EVP support.
 | 
				
			||||||
        engines.
 | 
					      2 Configuration support.
 | 
				
			||||||
      o Documentation!
 | 
					      3 Documentation!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1 With respect to EVP, this relates to support for ciphers and digests in
 | 
				
			||||||
 | 
					  the ENGINE model so that alternative implementations of existing
 | 
				
			||||||
 | 
					  algorithms/modes (or previously unimplemented ones) can be provided by
 | 
				
			||||||
 | 
					  ENGINE implementations.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2 Configuration support currently exists in the ENGINE API itself, in the
 | 
				
			||||||
 | 
					  form of "control commands". These allow an application to expose to the
 | 
				
			||||||
 | 
					  user/admin the set of commands and parameter types a given ENGINE
 | 
				
			||||||
 | 
					  implementation supports, and for an application to directly feed string
 | 
				
			||||||
 | 
					  based input to those ENGINEs, in the form of name-value pairs. This is an
 | 
				
			||||||
 | 
					  extensible way for ENGINEs to define their own "configuration" mechanisms
 | 
				
			||||||
 | 
					  that are specific to a given ENGINE (eg. for a particular hardware
 | 
				
			||||||
 | 
					  device) but that should be consistent across *all* OpenSSL-based
 | 
				
			||||||
 | 
					  applications when they use that ENGINE. Work is in progress (or at least
 | 
				
			||||||
 | 
					  in planning) for supporting these control commands from the CONF (or
 | 
				
			||||||
 | 
					  NCONF) code so that applications using OpenSSL's existing configuration
 | 
				
			||||||
 | 
					  file format can have ENGINE settings specified in much the same way.
 | 
				
			||||||
 | 
					  Presently however, applications must use the ENGINE API itself to provide
 | 
				
			||||||
 | 
					  such functionality. To see first hand the types of commands available
 | 
				
			||||||
 | 
					  with the various compiled-in ENGINEs (see further down for dynamic
 | 
				
			||||||
 | 
					  ENGINEs), use the "engine" openssl utility with full verbosity, ie;
 | 
				
			||||||
 | 
					       openssl engine -vvvv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3 Documentation? Volunteers welcome! The source code is reasonably well
 | 
				
			||||||
 | 
					  self-documenting, but some summaries and usage instructions are needed -
 | 
				
			||||||
 | 
					  moreover, they are needed in the same POD format the existing OpenSSL
 | 
				
			||||||
 | 
					  documentation is provided in. Any complete or incomplete contributions
 | 
				
			||||||
 | 
					  would help make this happen.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  STABILITY & BUG-REPORTS
 | 
				
			||||||
 | 
					  =======================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  What already exists is fairly stable as far as it has been tested, but
 | 
					  What already exists is fairly stable as far as it has been tested, but
 | 
				
			||||||
  the test base has been a bit small most of the time.
 | 
					  the test base has been a bit small most of the time. For the most part,
 | 
				
			||||||
 | 
					  the vendors of the devices these ENGINEs support have contributed to the
 | 
				
			||||||
 | 
					  development and/or testing of the implementations, and *usually* (with no
 | 
				
			||||||
 | 
					  guarantees) have experience in using the ENGINE support to drive their
 | 
				
			||||||
 | 
					  devices from common OpenSSL-based applications. Bugs and/or inexplicable
 | 
				
			||||||
 | 
					  behaviour in using a specific ENGINE implementation should be sent to the
 | 
				
			||||||
 | 
					  author of that implementation (if it is mentioned in the corresponding C
 | 
				
			||||||
 | 
					  file), and in the case of implementations for commercial hardware
 | 
				
			||||||
 | 
					  devices, also through whatever vendor support channels are available.  If
 | 
				
			||||||
 | 
					  none of this is possible, or the problem seems to be something about the
 | 
				
			||||||
 | 
					  ENGINE API itself (ie. not necessarily specific to a particular ENGINE
 | 
				
			||||||
 | 
					  implementation) then you should mail complete details to the relevant
 | 
				
			||||||
 | 
					  OpenSSL mailing list. For a definition of "complete details", refer to
 | 
				
			||||||
 | 
					  the OpenSSL "README" file. As for which list to send it to;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Because of this experimental status and what's lacking, the ENGINE
 | 
					     openssl-users: if you are *using* the ENGINE abstraction, either in an
 | 
				
			||||||
  component is not yet part of the default OpenSSL distribution.  However,
 | 
					          pre-compiled application or in your own application code.
 | 
				
			||||||
  we have made a separate kit for those who want to try this out, to be
 | 
					 | 
				
			||||||
  found in the same places as the default OpenSSL distribution, but with
 | 
					 | 
				
			||||||
  "-engine-" being part of the kit file name.  For example, version 0.9.6
 | 
					 | 
				
			||||||
  is distributed in the following two files:
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      openssl-0.9.6.tar.gz
 | 
					     openssl-dev: if you are discussing problems with OpenSSL source code.
 | 
				
			||||||
      openssl-engine-0.9.6.tar.gz
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  NOTES
 | 
					  USAGE
 | 
				
			||||||
  =====
 | 
					  =====
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  openssl-engine-0.9.6.tar.gz does not depend on openssl-0.9.6.tar, you do
 | 
					  The default "openssl" ENGINE is always chosen when performing crypto
 | 
				
			||||||
  not need to download both.
 | 
					  operations unless you specify otherwise. You must actively tell the
 | 
				
			||||||
 | 
					  openssl utility commands to use anything else through a new command line
 | 
				
			||||||
 | 
					  switch called "-engine". Also, if you want to use the ENGINE support in
 | 
				
			||||||
 | 
					  your own code to do something similar, you must likewise explicitly
 | 
				
			||||||
 | 
					  select the ENGINE implementation you want.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  openssl-engine-0.9.6.tar.gz is usable even if you don't have an external
 | 
					  Depending on the type of hardware, system, and configuration, "settings"
 | 
				
			||||||
  crypto device.  The internal OpenSSL functions are contained in the
 | 
					  may need to be applied to an ENGINE for it to function as expected/hoped.
 | 
				
			||||||
  engine "openssl", and will be used by default.
 | 
					  The recommended way of doing this is for the application to support
 | 
				
			||||||
 | 
					  ENGINE "control commands" so that each ENGINE implementation can provide
 | 
				
			||||||
 | 
					  whatever configuration primitives it might require and the application
 | 
				
			||||||
 | 
					  can allow the user/admin (and thus the hardware vendor's support desk
 | 
				
			||||||
 | 
					  also) to provide any such input directly to the ENGINE implementation.
 | 
				
			||||||
 | 
					  This way, applications do not need to know anything specific to any
 | 
				
			||||||
 | 
					  device, they only need to provide the means to carry such user/admin
 | 
				
			||||||
 | 
					  input through to the ENGINE in question. Ie. this connects *you* (and
 | 
				
			||||||
 | 
					  your helpdesk) to the specific ENGINE implementation (and device), and
 | 
				
			||||||
 | 
					  allows application authors to not get buried in hassle supporting
 | 
				
			||||||
 | 
					  arbitrary devices they know (and care) nothing about.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  No external crypto device is chosen unless you say so.  You have actively
 | 
					  A new "openssl" utility, "openssl engine", has been added in that allows
 | 
				
			||||||
  tell the openssl utility commands to use it through a new command line
 | 
					  for testing and examination of ENGINE implementations. Basic usage
 | 
				
			||||||
  switch called "-engine".  And if you want to use the ENGINE library to
 | 
					  instructions are available by specifying the "-?" command line switch.
 | 
				
			||||||
  do something similar, you must also explicitly choose an external crypto
 | 
					 | 
				
			||||||
  device, or the built-in crypto routines will be used, just as in the
 | 
					 | 
				
			||||||
  default OpenSSL distribution.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  DYNAMIC ENGINES
 | 
				
			||||||
 | 
					  ===============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The new "dynamic" ENGINE provides a low-overhead way to support ENGINE
 | 
				
			||||||
 | 
					  implementations that aren't pre-compiled and linked into OpenSSL-based
 | 
				
			||||||
 | 
					  applications. This could be because existing compiled-in implementations
 | 
				
			||||||
 | 
					  have known problems and you wish to use a newer version with an existing
 | 
				
			||||||
 | 
					  application. It could equally be because the application (or OpenSSL
 | 
				
			||||||
 | 
					  library) you are using simply doesn't have support for the ENGINE you
 | 
				
			||||||
 | 
					  wish to use, and the ENGINE provider (eg. hardware vendor) is providing
 | 
				
			||||||
 | 
					  you with a self-contained implementation in the form of a shared-library.
 | 
				
			||||||
 | 
					  The other use-case for "dynamic" is with applications that wish to
 | 
				
			||||||
 | 
					  maintain the smallest foot-print possible and so do not link in various
 | 
				
			||||||
 | 
					  ENGINE implementations from OpenSSL, but instead leaves you to provide
 | 
				
			||||||
 | 
					  them, if you want them, in the form of "dynamic"-loadable
 | 
				
			||||||
 | 
					  shared-libraries. It should be possible for hardware vendors to provide
 | 
				
			||||||
 | 
					  their own shared-libraries to support arbitrary hardware to work with
 | 
				
			||||||
 | 
					  applications based on OpenSSL 0.9.7 or later. If you're using an
 | 
				
			||||||
 | 
					  application based on 0.9.7 (or later) and the support you desire is only
 | 
				
			||||||
 | 
					  announced for versions later than the one you need, ask the vendor to
 | 
				
			||||||
 | 
					  backport their ENGINE to the version you need.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  How does "dynamic" work?
 | 
				
			||||||
 | 
					  ------------------------
 | 
				
			||||||
 | 
					    The dynamic ENGINE has a special flag in its implementation such that
 | 
				
			||||||
 | 
					    every time application code asks for the 'dynamic' ENGINE, it in fact
 | 
				
			||||||
 | 
					    gets its own copy of it. As such, multi-threaded code (or code that
 | 
				
			||||||
 | 
					    multiplexes multiple uses of 'dynamic' in a single application in any
 | 
				
			||||||
 | 
					    way at all) does not get confused by 'dynamic' being used to do many
 | 
				
			||||||
 | 
					    independent things. Other ENGINEs typically don't do this so there is
 | 
				
			||||||
 | 
					    only ever 1 ENGINE structure of its type (and reference counts are used
 | 
				
			||||||
 | 
					    to keep order). The dynamic ENGINE itself provides absolutely no
 | 
				
			||||||
 | 
					    cryptographic functionality, and any attempt to "initialise" the ENGINE
 | 
				
			||||||
 | 
					    automatically fails. All it does provide are a few "control commands"
 | 
				
			||||||
 | 
					    that can be used to control how it will load an external ENGINE
 | 
				
			||||||
 | 
					    implementation from a shared-library. To see these control commands,
 | 
				
			||||||
 | 
					    use the command-line;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       openssl engine -vvvv dynamic
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    The "SO_PATH" control command should be used to identify the
 | 
				
			||||||
 | 
					    shared-library that contains the ENGINE implementation, and "NO_VCHECK"
 | 
				
			||||||
 | 
					    might possibly be useful if there is a minor version conflict and you
 | 
				
			||||||
 | 
					    (or a vendor helpdesk) is convinced you can safely ignore it.
 | 
				
			||||||
 | 
					    "ID" is probably only needed if a shared-library implements
 | 
				
			||||||
 | 
					    multiple ENGINEs, but if you know the engine id you expect to be using,
 | 
				
			||||||
 | 
					    it doesn't hurt to specify it (and this provides a sanity check if
 | 
				
			||||||
 | 
					    nothing else). "LIST_ADD" is only required if you actually wish the
 | 
				
			||||||
 | 
					    loaded ENGINE to be discoverable by application code later on using the
 | 
				
			||||||
 | 
					    ENGINE's "id". For most applications, this isn't necessary - but some
 | 
				
			||||||
 | 
					    application authors may have nifty reasons for using it. The "LOAD"
 | 
				
			||||||
 | 
					    command is the only one that takes no parameters and is the command
 | 
				
			||||||
 | 
					    that uses the settings from any previous commands to actually *load*
 | 
				
			||||||
 | 
					    the shared-library ENGINE implementation. If this command succeeds, the
 | 
				
			||||||
 | 
					    (copy of the) 'dynamic' ENGINE will magically morph into the ENGINE
 | 
				
			||||||
 | 
					    that has been loaded from the shared-library. As such, any control
 | 
				
			||||||
 | 
					    commands supported by the loaded ENGINE could then be executed as per
 | 
				
			||||||
 | 
					    normal. Eg. if ENGINE "foo" is implemented in the shared-library
 | 
				
			||||||
 | 
					    "libfoo.so" and it supports some special control command "CMD_FOO", the
 | 
				
			||||||
 | 
					    following code would load and use it (NB: obviously this code has no
 | 
				
			||||||
 | 
					    error checking);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       ENGINE *e = ENGINE_by_id("dynamic");
 | 
				
			||||||
 | 
					       ENGINE_ctrl_cmd_string(e, "SO_PATH", "/lib/libfoo.so", 0);
 | 
				
			||||||
 | 
					       ENGINE_ctrl_cmd_string(e, "ID", "foo", 0);
 | 
				
			||||||
 | 
					       ENGINE_ctrl_cmd_string(e, "LOAD", NULL, 0);
 | 
				
			||||||
 | 
					       ENGINE_ctrl_cmd_string(e, "CMD_FOO", "some input data", 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    For testing, the "openssl engine" utility can be useful for this sort
 | 
				
			||||||
 | 
					    of thing. For example the above code excerpt would achieve much the
 | 
				
			||||||
 | 
					    same result as;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       openssl engine dynamic \
 | 
				
			||||||
 | 
					                 -pre SO_PATH:/lib/libfoo.so \
 | 
				
			||||||
 | 
					                 -pre ID:foo \
 | 
				
			||||||
 | 
					                 -pre LOAD \
 | 
				
			||||||
 | 
					                 -pre "CMD_FOO:some input data"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Or to simply see the list of commands supported by the "foo" ENGINE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       openssl engine -vvvv dynamic \
 | 
				
			||||||
 | 
					                 -pre SO_PATH:/lib/libfoo.so \
 | 
				
			||||||
 | 
					                 -pre ID:foo \
 | 
				
			||||||
 | 
					                 -pre LOAD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Applications that support the ENGINE API and more specifically, the
 | 
				
			||||||
 | 
					    "control commands" mechanism, will provide some way for you to pass
 | 
				
			||||||
 | 
					    such commands through to ENGINEs. As such, you would select "dynamic"
 | 
				
			||||||
 | 
					    as the ENGINE to use, and the parameters/commands you pass would
 | 
				
			||||||
 | 
					    control the *actual* ENGINE used. Each command is actually a name-value
 | 
				
			||||||
 | 
					    pair and the value can sometimes be omitted (eg. the "LOAD" command).
 | 
				
			||||||
 | 
					    Whilst the syntax demonstrated in "openssl engine" uses a colon to
 | 
				
			||||||
 | 
					    separate the command name from the value, applications may provide
 | 
				
			||||||
 | 
					    their own syntax for making that separation (eg. a win32 registry
 | 
				
			||||||
 | 
					    key-value pair may be used by some applications). The reason for the
 | 
				
			||||||
 | 
					    "-pre" syntax in the "openssl engine" utility is that some commands
 | 
				
			||||||
 | 
					    might be issued to an ENGINE *after* it has been initialised for use.
 | 
				
			||||||
 | 
					    Eg. if an ENGINE implementation requires a smart-card to be inserted
 | 
				
			||||||
 | 
					    during initialisation (or a PIN to be typed, or whatever), there may be
 | 
				
			||||||
 | 
					    a control command you can issue afterwards to "forget" the smart-card
 | 
				
			||||||
 | 
					    so that additional initialisation is no longer possible. In
 | 
				
			||||||
 | 
					    applications such as web-servers, where potentially volatile code may
 | 
				
			||||||
 | 
					    run on the same host system, this may provide some arguable security
 | 
				
			||||||
 | 
					    value. In such a case, the command would be passed to the ENGINE after
 | 
				
			||||||
 | 
					    it has been initialised for use, and so the "-post" switch would be
 | 
				
			||||||
 | 
					    used instead. Applications may provide a different syntax for
 | 
				
			||||||
 | 
					    supporting this distinction, and some may simply not provide it at all
 | 
				
			||||||
 | 
					    ("-pre" is almost always what you're after, in reality).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  How do I build a "dynamic" ENGINE?
 | 
				
			||||||
 | 
					  ----------------------------------
 | 
				
			||||||
 | 
					    This question is trickier - currently OpenSSL bundles various ENGINE
 | 
				
			||||||
 | 
					    implementations that are statically built in, and any application that
 | 
				
			||||||
 | 
					    calls the "ENGINE_load_builtin_engines()" function will automatically
 | 
				
			||||||
 | 
					    have all such ENGINEs available (and occupying memory). Applications
 | 
				
			||||||
 | 
					    that don't call that function have no ENGINEs available like that and
 | 
				
			||||||
 | 
					    would have to use "dynamic" to load any such ENGINE - but on the other
 | 
				
			||||||
 | 
					    hand such applications would only have the memory footprint of any
 | 
				
			||||||
 | 
					    ENGINEs explicitly loaded using user/admin provided control commands.
 | 
				
			||||||
 | 
					    The main advantage of not statically linking ENGINEs and only using
 | 
				
			||||||
 | 
					    "dynamic" for hardware support is that any installation using no
 | 
				
			||||||
 | 
					    "external" ENGINE suffers no unnecessary memory footprint from unused
 | 
				
			||||||
 | 
					    ENGINEs. Likewise, installations that do require an ENGINE incur the
 | 
				
			||||||
 | 
					    overheads from only *that* ENGINE once it has been loaded.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Sounds good? Maybe, but currently building an ENGINE implementation as
 | 
				
			||||||
 | 
					    a shared-library that can be loaded by "dynamic" isn't automated in
 | 
				
			||||||
 | 
					    OpenSSL's build process. It can be done manually quite easily however.
 | 
				
			||||||
 | 
					    Such a shared-library can either be built with any OpenSSL code it
 | 
				
			||||||
 | 
					    needs statically linked in, or it can link dynamically against OpenSSL
 | 
				
			||||||
 | 
					    if OpenSSL itself is built as a shared library. The instructions are
 | 
				
			||||||
 | 
					    the same in each case, but in the former (statically linked any
 | 
				
			||||||
 | 
					    dependencies on OpenSSL) you must ensure OpenSSL is built with
 | 
				
			||||||
 | 
					    position-independent code ("PIC"). The default OpenSSL compilation may
 | 
				
			||||||
 | 
					    already specify the relevant flags to do this, but you should consult
 | 
				
			||||||
 | 
					    with your compiler documentation if you are in any doubt.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    This example will show building the "atalla" ENGINE in the
 | 
				
			||||||
 | 
					    crypto/engine/ directory as a shared-library for use via the "dynamic"
 | 
				
			||||||
 | 
					    ENGINE.
 | 
				
			||||||
 | 
					    1) "cd" to the crypto/engine/ directory of a pre-compiled OpenSSL
 | 
				
			||||||
 | 
					       source tree.
 | 
				
			||||||
 | 
					    2) Recompile at least one source file so you can see all the compiler
 | 
				
			||||||
 | 
					       flags (and syntax) being used to build normally. Eg;
 | 
				
			||||||
 | 
					           touch hw_atalla.c ; make
 | 
				
			||||||
 | 
					       will rebuild "hw_atalla.o" using all such flags.
 | 
				
			||||||
 | 
					    3) Manually enter the same compilation line to compile the
 | 
				
			||||||
 | 
					       "hw_atalla.c" file but with the following two changes;
 | 
				
			||||||
 | 
					         (a) add "-DENGINE_DYNAMIC_SUPPORT" to the command line switches,
 | 
				
			||||||
 | 
						 (b) change the output file from "hw_atalla.o" to something new,
 | 
				
			||||||
 | 
					             eg. "tmp_atalla.o"
 | 
				
			||||||
 | 
					    4) Link "tmp_atalla.o" into a shared-library using the top-level
 | 
				
			||||||
 | 
					       OpenSSL libraries to resolve any dependencies. The syntax for doing
 | 
				
			||||||
 | 
					       this depends heavily on your system/compiler and is a nightmare
 | 
				
			||||||
 | 
					       known well to anyone who has worked with shared-library portability
 | 
				
			||||||
 | 
					       before. 'gcc' on Linux, for example, would use the following syntax;
 | 
				
			||||||
 | 
					          gcc -shared -o dyn_atalla.so tmp_atalla.o -L../.. -lcrypto
 | 
				
			||||||
 | 
					    5) Test your shared library using "openssl engine" as explained in the
 | 
				
			||||||
 | 
					       previous section. Eg. from the top-level directory, you might try;
 | 
				
			||||||
 | 
					          apps/openssl engine -vvvv dynamic \
 | 
				
			||||||
 | 
					              -pre SO_PATH:./crypto/engine/dyn_atalla.so -pre LOAD
 | 
				
			||||||
 | 
					       If the shared-library loads successfully, you will see both "-pre"
 | 
				
			||||||
 | 
					       commands marked as "SUCCESS" and the list of control commands
 | 
				
			||||||
 | 
					       displayed (because of "-vvvv") will be the control commands for the
 | 
				
			||||||
 | 
					       *atalla* ENGINE (ie. *not* the 'dynamic' ENGINE). You can also add
 | 
				
			||||||
 | 
					       the "-t" switch to the utility if you want it to try and initialise
 | 
				
			||||||
 | 
					       the atalla ENGINE for use to test any possible hardware/driver
 | 
				
			||||||
 | 
					       issues.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  PROBLEMS
 | 
					  PROBLEMS
 | 
				
			||||||
  ========
 | 
					  ========
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  It seems like the ENGINE part doesn't work too well with CryptoSwift on
 | 
					  It seems like the ENGINE part doesn't work too well with CryptoSwift on Win32.
 | 
				
			||||||
  Win32.  A quick test done right before the release showed that trying
 | 
					  A quick test done right before the release showed that trying "openssl speed
 | 
				
			||||||
  "openssl speed -engine cswift" generated errors.  If the DSO gets enabled,
 | 
					  -engine cswift" generated errors. If the DSO gets enabled, an attempt is made
 | 
				
			||||||
  an attempt is made to write at memory address 0x00000002.
 | 
					  to write at memory address 0x00000002.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										54
									
								
								STATUS
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								STATUS
									
									
									
									
									
								
							@@ -1,10 +1,26 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  OpenSSL STATUS                           Last modified at
 | 
					  OpenSSL STATUS                           Last modified at
 | 
				
			||||||
  ______________                           $Date: 2001/11/15 08:15:00 $
 | 
					  ______________                           $Date: 2004/03/17 12:01:16 $
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  DEVELOPMENT STATE
 | 
					  DEVELOPMENT STATE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    o  OpenSSL 0.9.7:  Under development...
 | 
					    o  OpenSSL 0.9.8:  Under development...
 | 
				
			||||||
 | 
					    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.6b: Released on July       9th, 2001
 | 
				
			||||||
    o  OpenSSL 0.9.6a: Released on April      5th, 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.6:  Released on September 24th, 2000
 | 
				
			||||||
@@ -16,8 +32,12 @@
 | 
				
			|||||||
    o  OpenSSL 0.9.2b: Released on March     22th, 1999
 | 
					    o  OpenSSL 0.9.2b: Released on March     22th, 1999
 | 
				
			||||||
    o  OpenSSL 0.9.1c: Released on December  23th, 1998
 | 
					    o  OpenSSL 0.9.1c: Released on December  23th, 1998
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [See also http://www.openssl.org/support/rt2.html]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE SHOWSTOPPERS
 | 
					  RELEASE SHOWSTOPPERS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    o 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  AVAILABLE PATCHES
 | 
					  AVAILABLE PATCHES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    o 
 | 
					    o 
 | 
				
			||||||
@@ -39,21 +59,13 @@
 | 
				
			|||||||
	UTIL (a new set of library functions to support some higher level
 | 
						UTIL (a new set of library functions to support some higher level
 | 
				
			||||||
	      functionality that is currently missing).
 | 
						      functionality that is currently missing).
 | 
				
			||||||
	Shared library support for VMS.
 | 
						Shared library support for VMS.
 | 
				
			||||||
	Kerberos 5 authentication
 | 
						Kerberos 5 authentication (Heimdal)
 | 
				
			||||||
	Constification
 | 
						Constification
 | 
				
			||||||
	OCSP
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  NEEDS PATCH
 | 
					  NEEDS PATCH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    o  apps/ca.c: "Sign the certificate?" - "n" creates empty certificate file
 | 
					    o  apps/ca.c: "Sign the certificate?" - "n" creates empty certificate file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    o  OpenSSL_0_9_6-stable:
 | 
					 | 
				
			||||||
       #include <openssl/e_os.h> in exported header files is illegal since
 | 
					 | 
				
			||||||
       e_os.h is suitable only for library-internal use.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    o  Whenever strncpy is used, make sure the resulting string is NULL-terminated
 | 
					 | 
				
			||||||
       or an error is reported
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    o  "OpenSSL STATUS" is never up-to-date.
 | 
					    o  "OpenSSL STATUS" is never up-to-date.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  OPEN ISSUES
 | 
					  OPEN ISSUES
 | 
				
			||||||
@@ -82,24 +94,12 @@
 | 
				
			|||||||
                    which apparently is not flexible enough to generate
 | 
					                    which apparently is not flexible enough to generate
 | 
				
			||||||
                    libcrypto)
 | 
					                    libcrypto)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    o  The perl/ stuff needs a major overhaul. Currently it's
 | 
					 | 
				
			||||||
       totally obsolete. Either we clean it up and enhance it to be up-to-date
 | 
					 | 
				
			||||||
       with the C code or we also could replace it with the really nice
 | 
					 | 
				
			||||||
       Net::SSLeay package we can find under
 | 
					 | 
				
			||||||
       http://www.neuronio.pt/SSLeay.pm.html.  Ralf uses this package for a
 | 
					 | 
				
			||||||
       longer time and it works fine and is a nice Perl module. Best would be
 | 
					 | 
				
			||||||
       to convince the author to work for the OpenSSL project and create a
 | 
					 | 
				
			||||||
       Net::OpenSSL or Crypt::OpenSSL package out of it and maintains it for
 | 
					 | 
				
			||||||
       us.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       Status: Ralf thinks we should both contact the author of Net::SSLeay
 | 
					 | 
				
			||||||
               and look how much effort it is to bring Eric's perl/ stuff up
 | 
					 | 
				
			||||||
               to date.
 | 
					 | 
				
			||||||
               Paul +1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  WISHES
 | 
					  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.
 | 
					    o  SRP in TLS.
 | 
				
			||||||
       [wished by:
 | 
					       [wished by:
 | 
				
			||||||
        Dj <derek@yo.net>, Tom Wu <tom@arcot.com>,
 | 
					        Dj <derek@yo.net>, Tom Wu <tom@arcot.com>,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										353
									
								
								VMS/mkshared.com
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										353
									
								
								VMS/mkshared.com
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,353 @@
 | 
				
			|||||||
 | 
					$! MKSHARED.COM -- script to created shareable images on VMS
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$! No command line parameters.  This should be run at the start of the source
 | 
				
			||||||
 | 
					$! tree (the same directory where one finds INSTALL.VMS).
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$! Input:	[.UTIL]LIBEAY.NUM,[.AXP.EXE.CRYPTO]LIBCRYPTO.OLB
 | 
				
			||||||
 | 
					$!		[.UTIL]SSLEAY.NUM,[.AXP.EXE.SSL]LIBSSL.OLB
 | 
				
			||||||
 | 
					$! Output:	[.AXP.EXE.CRYPTO]LIBCRYPTO.OPT,.MAP,.EXE
 | 
				
			||||||
 | 
					$!		[.AXP.EXE.SSL]LIBSSL.OPT,.MAP,.EXE
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$! So far, tests have only been made on VMS for Alpha.  VAX will come in time.
 | 
				
			||||||
 | 
					$! ===========================================================================
 | 
				
			||||||
 | 
					$
 | 
				
			||||||
 | 
					$! ----- Prepare info for processing: version number and file info
 | 
				
			||||||
 | 
					$ gosub read_version_info
 | 
				
			||||||
 | 
					$ if libver .eqs. ""
 | 
				
			||||||
 | 
					$ then
 | 
				
			||||||
 | 
					$   write sys$error "ERROR: Couldn't find any library version info..."
 | 
				
			||||||
 | 
					$   exit
 | 
				
			||||||
 | 
					$ endif
 | 
				
			||||||
 | 
					$
 | 
				
			||||||
 | 
					$ if f$getsyi("CPU") .ge. 128
 | 
				
			||||||
 | 
					$ then
 | 
				
			||||||
 | 
					$   libid  = "Crypto"
 | 
				
			||||||
 | 
					$   libnum = "[.UTIL]LIBEAY.NUM"
 | 
				
			||||||
 | 
					$   libdir = "[.AXP.EXE.CRYPTO]"
 | 
				
			||||||
 | 
					$   libolb = "''libdir'LIBCRYPTO.OLB"
 | 
				
			||||||
 | 
					$   libopt = "''libdir'LIBCRYPTO.OPT"
 | 
				
			||||||
 | 
					$   libmap = "''libdir'LIBCRYPTO.MAP"
 | 
				
			||||||
 | 
					$   libgoal= "''libdir'LIBCRYPTO.EXE"
 | 
				
			||||||
 | 
					$   libref = ""
 | 
				
			||||||
 | 
					$   gosub create_axp_shr
 | 
				
			||||||
 | 
					$   libid  = "SSL"
 | 
				
			||||||
 | 
					$   libnum = "[.UTIL]SSLEAY.NUM"
 | 
				
			||||||
 | 
					$   libdir = "[.AXP.EXE.SSL]"
 | 
				
			||||||
 | 
					$   libolb = "''libdir'LIBSSL.OLB"
 | 
				
			||||||
 | 
					$   libopt = "''libdir'LIBSSL.OPT"
 | 
				
			||||||
 | 
					$   libmap = "''libdir'LIBSSL.MAP"
 | 
				
			||||||
 | 
					$   libgoal= "''libdir'LIBSSL.EXE"
 | 
				
			||||||
 | 
					$   libref = "[.AXP.EXE.CRYPTO]LIBCRYPTO.EXE"
 | 
				
			||||||
 | 
					$   gosub create_axp_shr
 | 
				
			||||||
 | 
					$ else
 | 
				
			||||||
 | 
					$   libtit = "CRYPTO_TRANSFER_VECTOR"
 | 
				
			||||||
 | 
					$   libid  = "Crypto"
 | 
				
			||||||
 | 
					$   libnum = "[.UTIL]LIBEAY.NUM"
 | 
				
			||||||
 | 
					$   libdir = "[.VAX.EXE.CRYPTO]"
 | 
				
			||||||
 | 
					$   libmar = "''libdir'LIBCRYPTO.MAR"
 | 
				
			||||||
 | 
					$   libolb = "''libdir'LIBCRYPTO.OLB"
 | 
				
			||||||
 | 
					$   libopt = "''libdir'LIBCRYPTO.OPT"
 | 
				
			||||||
 | 
					$   libobj = "''libdir'LIBCRYPTO.OBJ"
 | 
				
			||||||
 | 
					$   libmap = "''libdir'LIBCRYPTO.MAP"
 | 
				
			||||||
 | 
					$   libgoal= "''libdir'LIBCRYPTO.EXE"
 | 
				
			||||||
 | 
					$   libref = ""
 | 
				
			||||||
 | 
					$   libvec = "LIBCRYPTO"
 | 
				
			||||||
 | 
					$   gosub create_vax_shr
 | 
				
			||||||
 | 
					$   libtit = "SSL_TRANSFER_VECTOR"
 | 
				
			||||||
 | 
					$   libid  = "SSL"
 | 
				
			||||||
 | 
					$   libnum = "[.UTIL]SSLEAY.NUM"
 | 
				
			||||||
 | 
					$   libdir = "[.VAX.EXE.SSL]"
 | 
				
			||||||
 | 
					$   libmar = "''libdir'LIBSSL.MAR"
 | 
				
			||||||
 | 
					$   libolb = "''libdir'LIBSSL.OLB"
 | 
				
			||||||
 | 
					$   libopt = "''libdir'LIBSSL.OPT"
 | 
				
			||||||
 | 
					$   libobj = "''libdir'LIBSSL.OBJ"
 | 
				
			||||||
 | 
					$   libmap = "''libdir'LIBSSL.MAP"
 | 
				
			||||||
 | 
					$   libgoal= "''libdir'LIBSSL.EXE"
 | 
				
			||||||
 | 
					$   libref = "[.VAX.EXE.CRYPTO]LIBCRYPTO.EXE"
 | 
				
			||||||
 | 
					$   libvec = "LIBSSL"
 | 
				
			||||||
 | 
					$   gosub create_vax_shr
 | 
				
			||||||
 | 
					$ endif
 | 
				
			||||||
 | 
					$ exit
 | 
				
			||||||
 | 
					$
 | 
				
			||||||
 | 
					$! ----- Soubroutines to actually build the shareable libraries
 | 
				
			||||||
 | 
					$! The way things work, there's a main shareable library creator for each
 | 
				
			||||||
 | 
					$! supported architecture, which is called from the main code above.
 | 
				
			||||||
 | 
					$! The creator will define a number of variables to tell the next levels of
 | 
				
			||||||
 | 
					$! subroutines what routines to use to write to the option files, call the
 | 
				
			||||||
 | 
					$! main processor, read_func_num, and when that is done, it will write version
 | 
				
			||||||
 | 
					$! data at the end of the .opt file, close it, and link the library.
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$! read_func_num reads through a .num file and calls the writer routine for
 | 
				
			||||||
 | 
					$! each line.  It's also responsible for checking that order is properly kept
 | 
				
			||||||
 | 
					$! in the .num file, check that each line applies to VMS and the architecture,
 | 
				
			||||||
 | 
					$! and to fill in "holes" with dummy entries.
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$! The creator routines depend on the following variables:
 | 
				
			||||||
 | 
					$! libnum	The name of the .num file to use as input
 | 
				
			||||||
 | 
					$! libolb	The name of the object library to build from
 | 
				
			||||||
 | 
					$! libid	The identification string of the shareable library
 | 
				
			||||||
 | 
					$! libopt	The name of the .opt file to write
 | 
				
			||||||
 | 
					$! libtit	The title of the assembler transfer vector file (VAX only)
 | 
				
			||||||
 | 
					$! libmar	The name of the assembler transfer vector file (VAX only)
 | 
				
			||||||
 | 
					$! libmap	The name of the map file to write
 | 
				
			||||||
 | 
					$! libgoal	The name of the shareable library to write
 | 
				
			||||||
 | 
					$! libref	The name of a shareable library to link in
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$! read_func_num depends on the following variables from the creator:
 | 
				
			||||||
 | 
					$! libwriter	The name of the writer routine to call for each .num file line
 | 
				
			||||||
 | 
					$! -----
 | 
				
			||||||
 | 
					$
 | 
				
			||||||
 | 
					$! ----- Subroutines for AXP
 | 
				
			||||||
 | 
					$! -----
 | 
				
			||||||
 | 
					$! The creator routine
 | 
				
			||||||
 | 
					$ create_axp_shr:
 | 
				
			||||||
 | 
					$   open/write opt 'libopt'
 | 
				
			||||||
 | 
					$   write opt "identification=""",libid," ",libverstr,""""
 | 
				
			||||||
 | 
					$   write opt libolb,"/lib"
 | 
				
			||||||
 | 
					$   if libref .nes. "" then write opt libref,"/SHARE"
 | 
				
			||||||
 | 
					$   write opt "SYMBOL_VECTOR=(-"
 | 
				
			||||||
 | 
					$   libfirstentry := true
 | 
				
			||||||
 | 
					$   libwrch   := opt
 | 
				
			||||||
 | 
					$   libwriter := write_axp_transfer_entry
 | 
				
			||||||
 | 
					$   textcount = 0
 | 
				
			||||||
 | 
					$   gosub read_func_num
 | 
				
			||||||
 | 
					$   write opt ")"
 | 
				
			||||||
 | 
					$   write opt "GSMATCH=",libvmatch,",",libver
 | 
				
			||||||
 | 
					$   close opt
 | 
				
			||||||
 | 
					$   link/map='libmap'/full/share='libgoal' 'libopt'/option
 | 
				
			||||||
 | 
					$   return
 | 
				
			||||||
 | 
					$
 | 
				
			||||||
 | 
					$! The record writer routine
 | 
				
			||||||
 | 
					$ write_axp_transfer_entry:
 | 
				
			||||||
 | 
					$   if libentry .eqs. ".dummy" then return
 | 
				
			||||||
 | 
					$   if info_kind .eqs. "VARIABLE"
 | 
				
			||||||
 | 
					$   then
 | 
				
			||||||
 | 
					$     pr:=DATA
 | 
				
			||||||
 | 
					$   else
 | 
				
			||||||
 | 
					$     pr:=PROCEDURE
 | 
				
			||||||
 | 
					$   endif
 | 
				
			||||||
 | 
					$   textcount_this = f$length(pr) + f$length(libentry) + 5
 | 
				
			||||||
 | 
					$   if textcount + textcount_this .gt. 1024
 | 
				
			||||||
 | 
					$   then
 | 
				
			||||||
 | 
					$     write opt ")"
 | 
				
			||||||
 | 
					$     write opt "SYMBOL_VECTOR=(-"
 | 
				
			||||||
 | 
					$     textcount = 16
 | 
				
			||||||
 | 
					$     libfirstentry := true
 | 
				
			||||||
 | 
					$   endif
 | 
				
			||||||
 | 
					$   if libfirstentry
 | 
				
			||||||
 | 
					$   then
 | 
				
			||||||
 | 
					$     write 'libwrch' "    ",libentry,"=",pr," -"
 | 
				
			||||||
 | 
					$   else
 | 
				
			||||||
 | 
					$     write 'libwrch' "    ,",libentry,"=",pr," -"
 | 
				
			||||||
 | 
					$   endif
 | 
				
			||||||
 | 
					$   libfirstentry := false
 | 
				
			||||||
 | 
					$   textcount = textcount + textcount_this
 | 
				
			||||||
 | 
					$   return
 | 
				
			||||||
 | 
					$
 | 
				
			||||||
 | 
					$! ----- Subroutines for AXP
 | 
				
			||||||
 | 
					$! -----
 | 
				
			||||||
 | 
					$! The creator routine
 | 
				
			||||||
 | 
					$ create_vax_shr:
 | 
				
			||||||
 | 
					$   open/write mar 'libmar'
 | 
				
			||||||
 | 
					$   type sys$input:/out=mar:
 | 
				
			||||||
 | 
					;
 | 
				
			||||||
 | 
					; Transfer vector for VAX shareable image
 | 
				
			||||||
 | 
					;
 | 
				
			||||||
 | 
					$   write mar "	.TITLE ",libtit
 | 
				
			||||||
 | 
					$   write mar "	.IDENT /",libid,"/"
 | 
				
			||||||
 | 
					$   type sys$input:/out=mar:
 | 
				
			||||||
 | 
					;
 | 
				
			||||||
 | 
					; Define macro to assist in building transfer vector entries.  Each entry
 | 
				
			||||||
 | 
					; should take no more than 8 bytes.
 | 
				
			||||||
 | 
					;
 | 
				
			||||||
 | 
						.MACRO FTRANSFER_ENTRY routine
 | 
				
			||||||
 | 
						.ALIGN QUAD
 | 
				
			||||||
 | 
						.TRANSFER routine
 | 
				
			||||||
 | 
						.MASK	routine
 | 
				
			||||||
 | 
						JMP	routine+2
 | 
				
			||||||
 | 
						.ENDM FTRANSFER_ENTRY
 | 
				
			||||||
 | 
					;
 | 
				
			||||||
 | 
					; Place entries in own program section.
 | 
				
			||||||
 | 
					;
 | 
				
			||||||
 | 
					$   write mar "	.PSECT $$",libvec,",QUAD,PIC,USR,CON,REL,LCL,SHR,EXE,RD,NOWRT"
 | 
				
			||||||
 | 
					$   write mar libvec,"_xfer:"
 | 
				
			||||||
 | 
					$   libwrch   := mar
 | 
				
			||||||
 | 
					$   libwriter := write_vax_ftransfer_entry
 | 
				
			||||||
 | 
					$   gosub read_func_num
 | 
				
			||||||
 | 
					$   type sys$input:/out=mar:
 | 
				
			||||||
 | 
					;
 | 
				
			||||||
 | 
					; Allocate extra storage at end of vector to allow for expansion.
 | 
				
			||||||
 | 
					;
 | 
				
			||||||
 | 
					$   write mar "	.BLKB 32768-<.-",libvec,"_xfer>	; 64 pages total."
 | 
				
			||||||
 | 
					$!   libwriter := write_vax_vtransfer_entry
 | 
				
			||||||
 | 
					$!   gosub read_func_num
 | 
				
			||||||
 | 
					$   write mar "	.END"
 | 
				
			||||||
 | 
					$   close mar
 | 
				
			||||||
 | 
					$   open/write opt 'libopt'
 | 
				
			||||||
 | 
					$   write opt "identification=""",libid," ",libverstr,""""
 | 
				
			||||||
 | 
					$   write opt libobj
 | 
				
			||||||
 | 
					$   write opt libolb,"/lib"
 | 
				
			||||||
 | 
					$   if libref .nes. "" then write opt libref,"/SHARE"
 | 
				
			||||||
 | 
					$   type sys$input:/out=opt:
 | 
				
			||||||
 | 
					!
 | 
				
			||||||
 | 
					! Ensure transfer vector is at beginning of image
 | 
				
			||||||
 | 
					!
 | 
				
			||||||
 | 
					CLUSTER=FIRST
 | 
				
			||||||
 | 
					$   write opt "COLLECT=FIRST,$$",libvec
 | 
				
			||||||
 | 
					$   write opt "GSMATCH=",libvmatch,",",libver
 | 
				
			||||||
 | 
					$   type sys$input:/out=opt:
 | 
				
			||||||
 | 
					!
 | 
				
			||||||
 | 
					! make psects nonshareable so image can be installed.
 | 
				
			||||||
 | 
					!
 | 
				
			||||||
 | 
					PSECT_ATTR=$CHAR_STRING_CONSTANTS,NOWRT
 | 
				
			||||||
 | 
					$   libwrch   := opt
 | 
				
			||||||
 | 
					$   libwriter := write_vax_psect_attr
 | 
				
			||||||
 | 
					$   gosub read_func_num
 | 
				
			||||||
 | 
					$   close opt
 | 
				
			||||||
 | 
					$   macro/obj='libobj' 'libmar'
 | 
				
			||||||
 | 
					$   link/map='libmap'/full/share='libgoal' 'libopt'/option
 | 
				
			||||||
 | 
					$   return
 | 
				
			||||||
 | 
					$
 | 
				
			||||||
 | 
					$! The record writer routine for VAX functions
 | 
				
			||||||
 | 
					$ write_vax_ftransfer_entry:
 | 
				
			||||||
 | 
					$   if info_kind .nes. "FUNCTION" then return
 | 
				
			||||||
 | 
					$   if libentry .eqs ".dummy"
 | 
				
			||||||
 | 
					$   then
 | 
				
			||||||
 | 
					$     write 'libwrch' "	.BLKB 8" ! Dummy is zeroes...
 | 
				
			||||||
 | 
					$   else
 | 
				
			||||||
 | 
					$     write 'libwrch' "	FTRANSFER_ENTRY ",libentry
 | 
				
			||||||
 | 
					$   endif
 | 
				
			||||||
 | 
					$   return
 | 
				
			||||||
 | 
					$! The record writer routine for VAX variables (should never happen!)
 | 
				
			||||||
 | 
					$ write_vax_psect_attr:
 | 
				
			||||||
 | 
					$   if info_kind .nes. "VARIABLE" then return
 | 
				
			||||||
 | 
					$   if libentry .eqs ".dummy" then return
 | 
				
			||||||
 | 
					$   write 'libwrch' "PSECT_ATTR=",libentry,",NOSHR"
 | 
				
			||||||
 | 
					$   return
 | 
				
			||||||
 | 
					$
 | 
				
			||||||
 | 
					$! ----- Common subroutines
 | 
				
			||||||
 | 
					$! -----
 | 
				
			||||||
 | 
					$! The .num file reader.  This one has great responsability.
 | 
				
			||||||
 | 
					$ read_func_num:
 | 
				
			||||||
 | 
					$   open libnum 'libnum'
 | 
				
			||||||
 | 
					$   goto read_nums
 | 
				
			||||||
 | 
					$
 | 
				
			||||||
 | 
					$ read_nums:
 | 
				
			||||||
 | 
					$   libentrynum=0
 | 
				
			||||||
 | 
					$   liblastentry:=false
 | 
				
			||||||
 | 
					$   entrycount=0
 | 
				
			||||||
 | 
					$   loop:
 | 
				
			||||||
 | 
					$     read/end=loop_end/err=loop_end libnum line
 | 
				
			||||||
 | 
					$     entrynum=f$int(f$element(1," ",f$edit(line,"COMPRESS,TRIM")))
 | 
				
			||||||
 | 
					$     entryinfo=f$element(2," ",f$edit(line,"COMPRESS,TRIM"))
 | 
				
			||||||
 | 
					$     curentry=f$element(0," ",f$edit(line,"COMPRESS,TRIM"))
 | 
				
			||||||
 | 
					$     info_exist=f$element(0,":",entryinfo)
 | 
				
			||||||
 | 
					$     info_platforms=","+f$element(1,":",entryinfo)+","
 | 
				
			||||||
 | 
					$     info_kind=f$element(2,":",entryinfo)
 | 
				
			||||||
 | 
					$     info_algorithms=","+f$element(3,":",entryinfo)+","
 | 
				
			||||||
 | 
					$     if info_exist .eqs. "NOEXIST" then goto loop
 | 
				
			||||||
 | 
					$     truesum = 0
 | 
				
			||||||
 | 
					$     falsesum = 0
 | 
				
			||||||
 | 
					$     negatives = 1
 | 
				
			||||||
 | 
					$     plat_i = 0
 | 
				
			||||||
 | 
					$     loop1:
 | 
				
			||||||
 | 
					$       plat_entry = f$element(plat_i,",",info_platforms)
 | 
				
			||||||
 | 
					$       plat_i = plat_i + 1
 | 
				
			||||||
 | 
					$       if plat_entry .eqs. "" then goto loop1
 | 
				
			||||||
 | 
					$       if plat_entry .nes. ","
 | 
				
			||||||
 | 
					$       then
 | 
				
			||||||
 | 
					$         if f$extract(0,1,plat_entry) .nes. "!" then negatives = 0
 | 
				
			||||||
 | 
					$         if f$getsyi("CPU") .lt. 128
 | 
				
			||||||
 | 
					$         then
 | 
				
			||||||
 | 
					$           if plat_entry .eqs. "EXPORT_VAR_AS_FUNCTION" then -
 | 
				
			||||||
 | 
					$             truesum = truesum + 1
 | 
				
			||||||
 | 
					$           if plat_entry .eqs. "!EXPORT_VAR_AS_FUNCTION" then -
 | 
				
			||||||
 | 
					$             falsesum = falsesum + 1
 | 
				
			||||||
 | 
					$         endif
 | 
				
			||||||
 | 
					$         if plat_entry .eqs. "VMS" then truesum = truesum + 1
 | 
				
			||||||
 | 
					$         if plat_entry .eqs. "!VMS" then falsesum = falsesum + 1
 | 
				
			||||||
 | 
					$	  goto loop1
 | 
				
			||||||
 | 
					$       endif
 | 
				
			||||||
 | 
					$     endloop1:
 | 
				
			||||||
 | 
					$!DEBUG!$     if info_platforms - "EXPORT_VAR_AS_FUNCTION" .nes. info_platforms
 | 
				
			||||||
 | 
					$!DEBUG!$     then
 | 
				
			||||||
 | 
					$!DEBUG!$       write sys$output line
 | 
				
			||||||
 | 
					$!DEBUG!$       write sys$output "        truesum = ",truesum,-
 | 
				
			||||||
 | 
					$!DEBUG!		", negatives = ",negatives,", falsesum = ",falsesum
 | 
				
			||||||
 | 
					$!DEBUG!$     endif
 | 
				
			||||||
 | 
					$     if falsesum .ne. 0 then goto loop
 | 
				
			||||||
 | 
					$     if truesum+negatives .eq. 0 then goto loop
 | 
				
			||||||
 | 
					$     alg_i = 0
 | 
				
			||||||
 | 
					$     loop2:
 | 
				
			||||||
 | 
					$       alg_entry = f$element(alg_i,",",info_algorithms)
 | 
				
			||||||
 | 
					$	alg_i = alg_i + 1
 | 
				
			||||||
 | 
					$       if alg_entry .eqs. "" then goto loop2
 | 
				
			||||||
 | 
					$       if alg_entry .nes. ","
 | 
				
			||||||
 | 
					$       then
 | 
				
			||||||
 | 
					$         if alg_entry .eqs. "KRB5" then goto loop ! Special for now
 | 
				
			||||||
 | 
					$         if f$trnlnm("OPENSSL_NO_"+alg_entry) .nes. "" then goto loop
 | 
				
			||||||
 | 
					$	  goto loop2
 | 
				
			||||||
 | 
					$       endif
 | 
				
			||||||
 | 
					$     endloop2:
 | 
				
			||||||
 | 
					$     if info_platforms - "EXPORT_VAR_AS_FUNCTION" .nes. info_platforms
 | 
				
			||||||
 | 
					$     then
 | 
				
			||||||
 | 
					$!DEBUG!$     write sys$output curentry," ; ",entrynum," ; ",entryinfo
 | 
				
			||||||
 | 
					$     endif
 | 
				
			||||||
 | 
					$   redo:
 | 
				
			||||||
 | 
					$     next:=loop
 | 
				
			||||||
 | 
					$     tolibentry=curentry
 | 
				
			||||||
 | 
					$     if libentrynum .ne. entrynum
 | 
				
			||||||
 | 
					$     then
 | 
				
			||||||
 | 
					$       entrycount=entrycount+1
 | 
				
			||||||
 | 
					$       if entrycount .lt. entrynum
 | 
				
			||||||
 | 
					$       then
 | 
				
			||||||
 | 
					$!DEBUG!$         write sys$output "Info: entrycount: ''entrycount', entrynum: ''entrynum' => 0"
 | 
				
			||||||
 | 
					$         tolibentry=".dummy"
 | 
				
			||||||
 | 
					$         next:=redo
 | 
				
			||||||
 | 
					$       endif
 | 
				
			||||||
 | 
					$       if entrycount .gt. entrynum
 | 
				
			||||||
 | 
					$       then
 | 
				
			||||||
 | 
					$         write sys$error "Decreasing library entry numbers!  Can't continue"
 | 
				
			||||||
 | 
					$         write sys$error """",line,""""
 | 
				
			||||||
 | 
					$         close libnum
 | 
				
			||||||
 | 
					$         return
 | 
				
			||||||
 | 
					$       endif
 | 
				
			||||||
 | 
					$       libentry=tolibentry
 | 
				
			||||||
 | 
					$!DEBUG!$       write sys$output entrycount," ",libentry," ",entryinfo
 | 
				
			||||||
 | 
					$       if libentry .nes. "" .and. libwriter .nes. "" then gosub 'libwriter'
 | 
				
			||||||
 | 
					$     else
 | 
				
			||||||
 | 
					$       write sys$error "Info: ""''curentry'"" is an alias for ""''libentry'"".  Overriding..."
 | 
				
			||||||
 | 
					$     endif
 | 
				
			||||||
 | 
					$     libentrynum=entrycount
 | 
				
			||||||
 | 
					$     goto 'next'
 | 
				
			||||||
 | 
					$   loop_end:
 | 
				
			||||||
 | 
					$   close libnum
 | 
				
			||||||
 | 
					$   return
 | 
				
			||||||
 | 
					$
 | 
				
			||||||
 | 
					$! The version number reader
 | 
				
			||||||
 | 
					$ read_version_info:
 | 
				
			||||||
 | 
					$   libver = ""
 | 
				
			||||||
 | 
					$   open/read vf [.CRYPTO]OPENSSLV.H
 | 
				
			||||||
 | 
					$   loop_rvi:
 | 
				
			||||||
 | 
					$     read/err=endloop_rvi/end=endloop_rvi vf rvi_line
 | 
				
			||||||
 | 
					$     if rvi_line - "SHLIB_VERSION_NUMBER """ .eqs. rvi_line then -
 | 
				
			||||||
 | 
						goto loop_rvi
 | 
				
			||||||
 | 
					$     libverstr = f$element(1,"""",rvi_line)
 | 
				
			||||||
 | 
					$     libvmajor = f$element(0,".",libverstr)
 | 
				
			||||||
 | 
					$     libvminor = f$element(1,".",libverstr)
 | 
				
			||||||
 | 
					$     libvedit = f$element(2,".",libverstr)
 | 
				
			||||||
 | 
					$     libvpatch = f$cvui(0,8,f$extract(1,1,libvedit)+"@")-f$cvui(0,8,"@")
 | 
				
			||||||
 | 
					$     libvedit = f$extract(0,1,libvedit)
 | 
				
			||||||
 | 
					$     libver = f$string(f$int(libvmajor)*100)+","+-
 | 
				
			||||||
 | 
						f$string(f$int(libvminor)*100+f$int(libvedit)*10+f$int(libvpatch))
 | 
				
			||||||
 | 
					$     if libvmajor .eqs. "0"
 | 
				
			||||||
 | 
					$     then
 | 
				
			||||||
 | 
					$       libvmatch = "EQUAL"
 | 
				
			||||||
 | 
					$     else
 | 
				
			||||||
 | 
					$       ! Starting with the 1.0 release, backward compatibility should be
 | 
				
			||||||
 | 
					$       ! kept, so switch over to the following
 | 
				
			||||||
 | 
					$       libvmatch = "LEQUAL"
 | 
				
			||||||
 | 
					$     endif
 | 
				
			||||||
 | 
					$   endloop_rvi:
 | 
				
			||||||
 | 
					$   close vf
 | 
				
			||||||
 | 
					$   return
 | 
				
			||||||
							
								
								
									
										1
									
								
								VMS/tcpip_shr_decc.opt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								VMS/tcpip_shr_decc.opt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					sys$share:tcpip$ipc_shr.exe/share
 | 
				
			||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
#      things easier between now and when Eric is convinced to fix it :-)
 | 
					#      things easier between now and when Eric is convinced to fix it :-)
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# CA -newca ... will setup the right stuff
 | 
					# CA -newca ... will setup the right stuff
 | 
				
			||||||
# CA -newreq ... will generate a certificate request 
 | 
					# CA -newreq[-nodes] ... will generate a certificate request 
 | 
				
			||||||
# CA -sign ... will sign the generated request and output 
 | 
					# CA -sign ... will sign the generated request and output 
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# At the end of that grab newreq.pem and newcert.pem (one has the key 
 | 
					# At the end of that grab newreq.pem and newcert.pem (one has the key 
 | 
				
			||||||
@@ -54,7 +54,7 @@ $RET = 0;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
foreach (@ARGV) {
 | 
					foreach (@ARGV) {
 | 
				
			||||||
	if ( /^(-\?|-h|-help)$/ ) {
 | 
						if ( /^(-\?|-h|-help)$/ ) {
 | 
				
			||||||
	    print STDERR "usage: CA -newcert|-newreq|-newca|-sign|-verify\n";
 | 
						    print STDERR "usage: CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify\n";
 | 
				
			||||||
	    exit 0;
 | 
						    exit 0;
 | 
				
			||||||
	} elsif (/^-newcert$/) {
 | 
						} elsif (/^-newcert$/) {
 | 
				
			||||||
	    # create a certificate
 | 
						    # create a certificate
 | 
				
			||||||
@@ -66,6 +66,11 @@ foreach (@ARGV) {
 | 
				
			|||||||
	    system ("$REQ -new -keyout newreq.pem -out newreq.pem $DAYS");
 | 
						    system ("$REQ -new -keyout newreq.pem -out newreq.pem $DAYS");
 | 
				
			||||||
	    $RET=$?;
 | 
						    $RET=$?;
 | 
				
			||||||
	    print "Request (and private key) is in newreq.pem\n";
 | 
						    print "Request (and private key) is in newreq.pem\n";
 | 
				
			||||||
 | 
						} elsif (/^-newreq-nodes$/) {
 | 
				
			||||||
 | 
						    # create a certificate request
 | 
				
			||||||
 | 
						    system ("$REQ -new -nodes -keyout newreq.pem -out newreq.pem $DAYS");
 | 
				
			||||||
 | 
						    $RET=$?;
 | 
				
			||||||
 | 
						    print "Request (and private key) is in newreq.pem\n";
 | 
				
			||||||
	} elsif (/^-newca$/) {
 | 
						} elsif (/^-newca$/) {
 | 
				
			||||||
		# if explicitly asked for or it doesn't exist then setup the
 | 
							# if explicitly asked for or it doesn't exist then setup the
 | 
				
			||||||
		# directory structure that Eric likes to manage things 
 | 
							# directory structure that Eric likes to manage things 
 | 
				
			||||||
@@ -143,7 +148,7 @@ foreach (@ARGV) {
 | 
				
			|||||||
	    }
 | 
						    }
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
	    print STDERR "Unknown arg $_\n";
 | 
						    print STDERR "Unknown arg $_\n";
 | 
				
			||||||
	    print STDERR "usage: CA -newcert|-newreq|-newca|-sign|-verify\n";
 | 
						    print STDERR "usage: CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify\n";
 | 
				
			||||||
	    exit 1;
 | 
						    exit 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1348
									
								
								apps/Makefile.ssl
									
									
									
									
									
								
							
							
						
						
									
										1348
									
								
								apps/Makefile.ssl
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -124,7 +124,7 @@ int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn)
 | 
				
			|||||||
	int consider_randfile = (file == NULL);
 | 
						int consider_randfile = (file == NULL);
 | 
				
			||||||
	char buffer[200];
 | 
						char buffer[200];
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
#ifdef WINDOWS
 | 
					#ifdef OPENSSL_SYS_WINDOWS
 | 
				
			||||||
	BIO_printf(bio_e,"Loading 'screen' into random state -");
 | 
						BIO_printf(bio_e,"Loading 'screen' into random state -");
 | 
				
			||||||
	BIO_flush(bio_e);
 | 
						BIO_flush(bio_e);
 | 
				
			||||||
	RAND_screen();
 | 
						RAND_screen();
 | 
				
			||||||
@@ -142,18 +142,21 @@ int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	if (file == NULL || !RAND_load_file(file, -1))
 | 
						if (file == NULL || !RAND_load_file(file, -1))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		if (RAND_status() == 0 && !dont_warn)
 | 
							if (RAND_status() == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_printf(bio_e,"unable to load 'random state'\n");
 | 
								if (!dont_warn)
 | 
				
			||||||
			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,"unable to load 'random state'\n");
 | 
				
			||||||
				BIO_printf(bio_e,"'random' data can be kept in (the file will be overwritten).\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;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		return 0;
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	seeded = 1;
 | 
						seeded = 1;
 | 
				
			||||||
	return 1;
 | 
						return 1;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1337
									
								
								apps/apps.c
									
									
									
									
									
								
							
							
						
						
									
										1337
									
								
								apps/apps.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										218
									
								
								apps/apps.h
									
									
									
									
									
								
							
							
						
						
									
										218
									
								
								apps/apps.h
									
									
									
									
									
								
							@@ -55,11 +55,64 @@
 | 
				
			|||||||
 * copied and put under another distribution licence
 | 
					 * copied and put under another distribution licence
 | 
				
			||||||
 * [including the GNU Public Licence.]
 | 
					 * [including the GNU Public Licence.]
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    openssl-core@openssl.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This product includes cryptographic software written by Eric Young
 | 
				
			||||||
 | 
					 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
				
			||||||
 | 
					 * Hudson (tjh@cryptsoft.com).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef HEADER_APPS_H
 | 
					#ifndef HEADER_APPS_H
 | 
				
			||||||
#define HEADER_APPS_H
 | 
					#define HEADER_APPS_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "openssl/e_os.h"
 | 
					#include "e_os.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <openssl/buffer.h>
 | 
					#include <openssl/buffer.h>
 | 
				
			||||||
#include <openssl/bio.h>
 | 
					#include <openssl/bio.h>
 | 
				
			||||||
@@ -67,6 +120,11 @@
 | 
				
			|||||||
#include <openssl/x509.h>
 | 
					#include <openssl/x509.h>
 | 
				
			||||||
#include <openssl/lhash.h>
 | 
					#include <openssl/lhash.h>
 | 
				
			||||||
#include <openssl/conf.h>
 | 
					#include <openssl/conf.h>
 | 
				
			||||||
 | 
					#include <openssl/txt_db.h>
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
					#include <openssl/engine.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#include <openssl/ossl_typ.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn);
 | 
					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);
 | 
					int app_RAND_write_file(const char *file, BIO *bio_e);
 | 
				
			||||||
@@ -78,29 +136,33 @@ long app_RAND_load_files(char *file); /* `file' is a list of files to read,
 | 
				
			|||||||
                                       * (see e_os.h).  The string is
 | 
					                                       * (see e_os.h).  The string is
 | 
				
			||||||
                                       * destroyed! */
 | 
					                                       * destroyed! */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef NO_STDIO
 | 
					#ifdef OPENSSL_SYS_WIN32
 | 
				
			||||||
BIO_METHOD *BIO_s_file();
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef WIN32
 | 
					 | 
				
			||||||
#define rename(from,to) WIN32_rename((from),(to))
 | 
					#define rename(from,to) WIN32_rename((from),(to))
 | 
				
			||||||
int WIN32_rename(char *oldname,char *newname);
 | 
					int WIN32_rename(char *oldname,char *newname);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* VMS below version 7.0 doesn't have strcasecmp() */
 | 
				
			||||||
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
 | 
					#define strcasecmp(str1,str2) VMS_strcasecmp((str1),(str2))
 | 
				
			||||||
 | 
					int VMS_strcasecmp(const char *str1, const char *str2);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef MONOLITH
 | 
					#ifndef MONOLITH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MAIN(a,v)	main(a,v)
 | 
					#define MAIN(a,v)	main(a,v)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NON_MAIN
 | 
					#ifndef NON_MAIN
 | 
				
			||||||
 | 
					CONF *config=NULL;
 | 
				
			||||||
BIO *bio_err=NULL;
 | 
					BIO *bio_err=NULL;
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
 | 
					extern CONF *config;
 | 
				
			||||||
extern BIO *bio_err;
 | 
					extern BIO *bio_err;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MAIN(a,v)	PROG(a,v)
 | 
					#define MAIN(a,v)	PROG(a,v)
 | 
				
			||||||
extern LHASH *config;
 | 
					extern CONF *config;
 | 
				
			||||||
extern char *default_config_file;
 | 
					extern char *default_config_file;
 | 
				
			||||||
extern BIO *bio_err;
 | 
					extern BIO *bio_err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -115,20 +177,60 @@ extern BIO *bio_err;
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(MONOLITH) && !defined(OPENSSL_C)
 | 
					#if defined(MONOLITH) && !defined(OPENSSL_C)
 | 
				
			||||||
#  define apps_startup()	do_pipe_sig()
 | 
					#  define apps_startup() \
 | 
				
			||||||
 | 
							do_pipe_sig()
 | 
				
			||||||
 | 
					#  define apps_shutdown()
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#  if defined(MSDOS) || defined(WIN16) || defined(WIN32)
 | 
					#  ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
#    ifdef _O_BINARY
 | 
					#    if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WIN16) || \
 | 
				
			||||||
#      define apps_startup() \
 | 
					     defined(OPENSSL_SYS_WIN32)
 | 
				
			||||||
		_fmode=_O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
					#      ifdef _O_BINARY
 | 
				
			||||||
		SSLeay_add_all_algorithms()
 | 
					#        define apps_startup() \
 | 
				
			||||||
 | 
								do { _fmode=_O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
				
			||||||
 | 
								ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
 | 
				
			||||||
 | 
								ENGINE_load_builtin_engines(); setup_ui_method(); } while(0)
 | 
				
			||||||
 | 
					#      else
 | 
				
			||||||
 | 
					#        define apps_startup() \
 | 
				
			||||||
 | 
								do { _fmode=O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
				
			||||||
 | 
								ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
 | 
				
			||||||
 | 
								ENGINE_load_builtin_engines(); setup_ui_method(); } while(0)
 | 
				
			||||||
 | 
					#      endif
 | 
				
			||||||
#    else
 | 
					#    else
 | 
				
			||||||
#      define apps_startup() \
 | 
					#      define apps_startup() \
 | 
				
			||||||
		_fmode=O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
								do { do_pipe_sig(); OpenSSL_add_all_algorithms(); \
 | 
				
			||||||
		SSLeay_add_all_algorithms()
 | 
								ERR_load_crypto_strings(); ENGINE_load_builtin_engines(); \
 | 
				
			||||||
 | 
								setup_ui_method(); } while(0)
 | 
				
			||||||
#    endif
 | 
					#    endif
 | 
				
			||||||
 | 
					#    define apps_shutdown() \
 | 
				
			||||||
 | 
								do { CONF_modules_unload(1); destroy_ui_method(); \
 | 
				
			||||||
 | 
								EVP_cleanup(); ENGINE_cleanup(); \
 | 
				
			||||||
 | 
								CRYPTO_cleanup_all_ex_data(); ERR_remove_state(0); \
 | 
				
			||||||
 | 
								ERR_free_strings(); } while(0)
 | 
				
			||||||
#  else
 | 
					#  else
 | 
				
			||||||
#    define apps_startup()	do_pipe_sig(); SSLeay_add_all_algorithms();
 | 
					#    if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WIN16) || \
 | 
				
			||||||
 | 
					     defined(OPENSSL_SYS_WIN32)
 | 
				
			||||||
 | 
					#      ifdef _O_BINARY
 | 
				
			||||||
 | 
					#        define apps_startup() \
 | 
				
			||||||
 | 
								do { _fmode=_O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
				
			||||||
 | 
								ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
 | 
				
			||||||
 | 
								setup_ui_method(); } while(0)
 | 
				
			||||||
 | 
					#      else
 | 
				
			||||||
 | 
					#        define apps_startup() \
 | 
				
			||||||
 | 
								do { _fmode=O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
 | 
				
			||||||
 | 
								ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
 | 
				
			||||||
 | 
								setup_ui_method(); } while(0)
 | 
				
			||||||
 | 
					#      endif
 | 
				
			||||||
 | 
					#    else
 | 
				
			||||||
 | 
					#      define apps_startup() \
 | 
				
			||||||
 | 
								do { do_pipe_sig(); OpenSSL_add_all_algorithms(); \
 | 
				
			||||||
 | 
								ERR_load_crypto_strings(); \
 | 
				
			||||||
 | 
								setup_ui_method(); } while(0)
 | 
				
			||||||
 | 
					#    endif
 | 
				
			||||||
 | 
					#    define apps_shutdown() \
 | 
				
			||||||
 | 
								do { CONF_modules_unload(1); destroy_ui_method(); \
 | 
				
			||||||
 | 
								EVP_cleanup(); \
 | 
				
			||||||
 | 
								CRYPTO_cleanup_all_ex_data(); ERR_remove_state(0); \
 | 
				
			||||||
 | 
								ERR_free_strings(); } while(0)
 | 
				
			||||||
#  endif
 | 
					#  endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -138,6 +240,19 @@ typedef struct args_st
 | 
				
			|||||||
	int count;
 | 
						int count;
 | 
				
			||||||
	} ARGS;
 | 
						} ARGS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define PW_MIN_LENGTH 4
 | 
				
			||||||
 | 
					typedef struct pw_cb_data
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						const void *password;
 | 
				
			||||||
 | 
						const char *prompt_info;
 | 
				
			||||||
 | 
						} PW_CB_DATA;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int password_callback(char *buf, int bufsiz, int verify,
 | 
				
			||||||
 | 
						PW_CB_DATA *cb_data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int setup_ui_method(void);
 | 
				
			||||||
 | 
					void destroy_ui_method(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int should_retry(int i);
 | 
					int should_retry(int i);
 | 
				
			||||||
int args_from_file(char *file, int *argc, char **argv[]);
 | 
					int args_from_file(char *file, int *argc, char **argv[]);
 | 
				
			||||||
int str2fmt(char *s);
 | 
					int str2fmt(char *s);
 | 
				
			||||||
@@ -147,13 +262,65 @@ int chopup_args(ARGS *arg,char *buf, int *argc, char **argv[]);
 | 
				
			|||||||
int dump_cert_text(BIO *out, X509 *x);
 | 
					int dump_cert_text(BIO *out, X509 *x);
 | 
				
			||||||
void print_name(BIO *out, char *title, X509_NAME *nm, unsigned long lflags);
 | 
					void print_name(BIO *out, char *title, X509_NAME *nm, unsigned long lflags);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					int set_cert_ex(unsigned long *flags, const char *arg);
 | 
				
			||||||
int set_name_ex(unsigned long *flags, const char *arg);
 | 
					int set_name_ex(unsigned long *flags, const char *arg);
 | 
				
			||||||
 | 
					int set_ext_copy(int *copy_type, const char *arg);
 | 
				
			||||||
 | 
					int copy_extensions(X509 *x, X509_REQ *req, int copy_type);
 | 
				
			||||||
int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2);
 | 
					int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2);
 | 
				
			||||||
int add_oid_section(BIO *err, LHASH *conf);
 | 
					int add_oid_section(BIO *err, CONF *conf);
 | 
				
			||||||
X509 *load_cert(BIO *err, char *file, int format);
 | 
					X509 *load_cert(BIO *err, const char *file, int format,
 | 
				
			||||||
EVP_PKEY *load_key(BIO *err, char *file, int format, char *pass);
 | 
						const char *pass, ENGINE *e, const char *cert_descrip);
 | 
				
			||||||
EVP_PKEY *load_pubkey(BIO *err, char *file, int format);
 | 
					EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
 | 
				
			||||||
STACK_OF(X509) *load_certs(BIO *err, char *file, int format);
 | 
						const char *pass, ENGINE *e, const char *key_descrip);
 | 
				
			||||||
 | 
					EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin,
 | 
				
			||||||
 | 
						const char *pass, ENGINE *e, const char *key_descrip);
 | 
				
			||||||
 | 
					STACK_OF(X509) *load_certs(BIO *err, const char *file, int format,
 | 
				
			||||||
 | 
						const char *pass, ENGINE *e, const char *cert_descrip);
 | 
				
			||||||
 | 
					X509_STORE *setup_verify(BIO *bp, char *CAfile, char *CApath);
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
					ENGINE *setup_engine(BIO *err, const char *engine, int debug);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int load_config(BIO *err, CONF *cnf);
 | 
				
			||||||
 | 
					char *make_config_name(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Functions defined in ca.c and also used in ocsp.c */
 | 
				
			||||||
 | 
					int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
 | 
				
			||||||
 | 
								ASN1_GENERALIZEDTIME **pinvtm, char *str);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DB_type         0
 | 
				
			||||||
 | 
					#define DB_exp_date     1
 | 
				
			||||||
 | 
					#define DB_rev_date     2
 | 
				
			||||||
 | 
					#define DB_serial       3       /* index - unique */
 | 
				
			||||||
 | 
					#define DB_file         4       
 | 
				
			||||||
 | 
					#define DB_name         5       /* index - unique when active and not disabled */
 | 
				
			||||||
 | 
					#define DB_NUMBER       6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DB_TYPE_REV	'R'
 | 
				
			||||||
 | 
					#define DB_TYPE_EXP	'E'
 | 
				
			||||||
 | 
					#define DB_TYPE_VAL	'V'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct db_attr_st
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						int unique_subject;
 | 
				
			||||||
 | 
						} DB_ATTR;
 | 
				
			||||||
 | 
					typedef struct ca_db_st
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						DB_ATTR attributes;
 | 
				
			||||||
 | 
						TXT_DB *db;
 | 
				
			||||||
 | 
						} CA_DB;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BIGNUM *load_serial(char *serialfile, int create, ASN1_INTEGER **retai);
 | 
				
			||||||
 | 
					int save_serial(char *serialfile, char *suffix, BIGNUM *serial, ASN1_INTEGER **retai);
 | 
				
			||||||
 | 
					int rotate_serial(char *serialfile, char *new_suffix, char *old_suffix);
 | 
				
			||||||
 | 
					CA_DB *load_index(char *dbfile, DB_ATTR *dbattr);
 | 
				
			||||||
 | 
					int index_index(CA_DB *db);
 | 
				
			||||||
 | 
					int save_index(char *dbfile, char *suffix, CA_DB *db);
 | 
				
			||||||
 | 
					int rotate_index(char *dbfile, char *new_suffix, char *old_suffix);
 | 
				
			||||||
 | 
					void free_index(CA_DB *db);
 | 
				
			||||||
 | 
					int index_name_cmp(const char **a, const char **b);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					X509_NAME *do_subject(char *str, long chtype);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define FORMAT_UNDEF    0
 | 
					#define FORMAT_UNDEF    0
 | 
				
			||||||
#define FORMAT_ASN1     1
 | 
					#define FORMAT_ASN1     1
 | 
				
			||||||
@@ -162,8 +329,13 @@ STACK_OF(X509) *load_certs(BIO *err, char *file, int format);
 | 
				
			|||||||
#define FORMAT_NETSCAPE 4
 | 
					#define FORMAT_NETSCAPE 4
 | 
				
			||||||
#define FORMAT_PKCS12   5
 | 
					#define FORMAT_PKCS12   5
 | 
				
			||||||
#define FORMAT_SMIME    6
 | 
					#define FORMAT_SMIME    6
 | 
				
			||||||
/* Since this is currently inofficial, let's give it a high number */
 | 
					#define FORMAT_ENGINE   7
 | 
				
			||||||
#define FORMAT_ENGINE   127
 | 
					#define FORMAT_IISSGC	8	/* XXX this stupid macro helps us to avoid
 | 
				
			||||||
 | 
									 * adding yet another param to load_*key() */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define EXT_COPY_NONE	0
 | 
				
			||||||
 | 
					#define EXT_COPY_ADD	1
 | 
				
			||||||
 | 
					#define EXT_COPY_ALL	2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define NETSCAPE_CERT_HDR	"certificate"
 | 
					#define NETSCAPE_CERT_HDR	"certificate"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -103,6 +103,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	prog=argv[0];
 | 
						prog=argv[0];
 | 
				
			||||||
	argc--;
 | 
						argc--;
 | 
				
			||||||
	argv++;
 | 
						argv++;
 | 
				
			||||||
@@ -181,7 +184,7 @@ bad:
 | 
				
			|||||||
		BIO_printf(bio_err,"where options are\n");
 | 
							BIO_printf(bio_err,"where options are\n");
 | 
				
			||||||
		BIO_printf(bio_err," -inform arg   input format - one of DER TXT PEM\n");
 | 
							BIO_printf(bio_err," -inform arg   input format - one of DER TXT PEM\n");
 | 
				
			||||||
		BIO_printf(bio_err," -in arg       input file\n");
 | 
							BIO_printf(bio_err," -in arg       input file\n");
 | 
				
			||||||
		BIO_printf(bio_err," -out arg      output file\n");
 | 
							BIO_printf(bio_err," -out arg      output file (output format is always DER\n");
 | 
				
			||||||
		BIO_printf(bio_err," -noout arg    don't produce any output\n");
 | 
							BIO_printf(bio_err," -noout arg    don't produce any output\n");
 | 
				
			||||||
		BIO_printf(bio_err," -offset arg   offset into file\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," -length arg   length of section in file\n");
 | 
				
			||||||
@@ -192,7 +195,6 @@ bad:
 | 
				
			|||||||
		BIO_printf(bio_err," -strparse offset\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,"               a series of these can be used to 'dig' into multiple\n");
 | 
				
			||||||
		BIO_printf(bio_err,"               ASN1 blob wrappings\n");
 | 
							BIO_printf(bio_err,"               ASN1 blob wrappings\n");
 | 
				
			||||||
		BIO_printf(bio_err," -out filename output DER encoding to file\n");
 | 
					 | 
				
			||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -206,7 +208,7 @@ bad:
 | 
				
			|||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	BIO_set_fp(out,stdout,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
						BIO_set_fp(out,stdout,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
						BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
	out = BIO_push(tmpbio, out);
 | 
						out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -302,7 +304,15 @@ bad:
 | 
				
			|||||||
		num=tmplen;
 | 
							num=tmplen;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (length == 0) length=(unsigned int)num;
 | 
						if (offset >= num)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							BIO_printf(bio_err, "Error: offset too large\n");
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						num -= offset;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ((length == 0) || ((long)length > num)) length=(unsigned int)num;
 | 
				
			||||||
	if(derout) {
 | 
						if(derout) {
 | 
				
			||||||
		if(BIO_write(derout, str + offset, length) != (int)length) {
 | 
							if(BIO_write(derout, str + offset, length) != (int)length) {
 | 
				
			||||||
			BIO_printf(bio_err, "Error writing output\n");
 | 
								BIO_printf(bio_err, "Error writing output\n");
 | 
				
			||||||
@@ -329,6 +339,7 @@ end:
 | 
				
			|||||||
	if (at != NULL) ASN1_TYPE_free(at);
 | 
						if (at != NULL) ASN1_TYPE_free(at);
 | 
				
			||||||
	if (osk != NULL) sk_free(osk);
 | 
						if (osk != NULL) sk_free(osk);
 | 
				
			||||||
	OBJ_cleanup();
 | 
						OBJ_cleanup();
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -59,7 +59,7 @@
 | 
				
			|||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#ifdef NO_STDIO
 | 
					#ifdef OPENSSL_NO_STDIO
 | 
				
			||||||
#define APPS_WIN16
 | 
					#define APPS_WIN16
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#include "apps.h"
 | 
					#include "apps.h"
 | 
				
			||||||
@@ -95,11 +95,11 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	char buf[512];
 | 
						char buf[512];
 | 
				
			||||||
	BIO *STDout=NULL;
 | 
						BIO *STDout=NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(NO_SSL2) && !defined(NO_SSL3)
 | 
					#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
 | 
				
			||||||
	meth=SSLv23_server_method();
 | 
						meth=SSLv23_server_method();
 | 
				
			||||||
#elif !defined(NO_SSL3)
 | 
					#elif !defined(OPENSSL_NO_SSL3)
 | 
				
			||||||
	meth=SSLv3_server_method();
 | 
						meth=SSLv3_server_method();
 | 
				
			||||||
#elif !defined(NO_SSL2)
 | 
					#elif !defined(OPENSSL_NO_SSL2)
 | 
				
			||||||
	meth=SSLv2_server_method();
 | 
						meth=SSLv2_server_method();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -108,7 +108,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	if (bio_err == NULL)
 | 
						if (bio_err == NULL)
 | 
				
			||||||
		bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
							bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
				
			||||||
	STDout=BIO_new_fp(stdout,BIO_NOCLOSE);
 | 
						STDout=BIO_new_fp(stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
						BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
	STDout = BIO_push(tmpbio, STDout);
 | 
						STDout = BIO_push(tmpbio, STDout);
 | 
				
			||||||
@@ -121,15 +121,15 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
		if (strcmp(*argv,"-v") == 0)
 | 
							if (strcmp(*argv,"-v") == 0)
 | 
				
			||||||
			verbose=1;
 | 
								verbose=1;
 | 
				
			||||||
#ifndef NO_SSL2
 | 
					#ifndef OPENSSL_NO_SSL2
 | 
				
			||||||
		else if (strcmp(*argv,"-ssl2") == 0)
 | 
							else if (strcmp(*argv,"-ssl2") == 0)
 | 
				
			||||||
			meth=SSLv2_client_method();
 | 
								meth=SSLv2_client_method();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_SSL3
 | 
					#ifndef OPENSSL_NO_SSL3
 | 
				
			||||||
		else if (strcmp(*argv,"-ssl3") == 0)
 | 
							else if (strcmp(*argv,"-ssl3") == 0)
 | 
				
			||||||
			meth=SSLv3_client_method();
 | 
								meth=SSLv3_client_method();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_TLS1
 | 
					#ifndef OPENSSL_NO_TLS1
 | 
				
			||||||
		else if (strcmp(*argv,"-tls1") == 0)
 | 
							else if (strcmp(*argv,"-tls1") == 0)
 | 
				
			||||||
			meth=TLSv1_client_method();
 | 
								meth=TLSv1_client_method();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -150,7 +150,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	if (badops)
 | 
						if (badops)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		for (pp=ciphers_usage; (*pp != NULL); pp++)
 | 
							for (pp=ciphers_usage; (*pp != NULL); pp++)
 | 
				
			||||||
			BIO_printf(bio_err,*pp);
 | 
								BIO_printf(bio_err,"%s",*pp);
 | 
				
			||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -187,7 +187,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_puts(STDout,SSL_CIPHER_description(
 | 
								BIO_puts(STDout,SSL_CIPHER_description(
 | 
				
			||||||
				sk_SSL_CIPHER_value(sk,i),
 | 
									sk_SSL_CIPHER_value(sk,i),
 | 
				
			||||||
				buf,512));
 | 
									buf,sizeof buf));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -202,6 +202,7 @@ end:
 | 
				
			|||||||
	if (ctx != NULL) SSL_CTX_free(ctx);
 | 
						if (ctx != NULL) SSL_CTX_free(ctx);
 | 
				
			||||||
	if (ssl != NULL) SSL_free(ssl);
 | 
						if (ssl != NULL) SSL_free(ssl);
 | 
				
			||||||
	if (STDout != NULL) BIO_free_all(STDout);
 | 
						if (STDout != NULL) BIO_free_all(STDout);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										32
									
								
								apps/crl.c
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								apps/crl.c
									
									
									
									
									
								
							@@ -81,12 +81,14 @@ static char *crl_usage[]={
 | 
				
			|||||||
" -in arg         - input file - default stdin\n",
 | 
					" -in arg         - input file - default stdin\n",
 | 
				
			||||||
" -out arg        - output file - default stdout\n",
 | 
					" -out arg        - output file - default stdout\n",
 | 
				
			||||||
" -hash           - print hash value\n",
 | 
					" -hash           - print hash value\n",
 | 
				
			||||||
 | 
					" -fingerprint    - print the crl fingerprint\n",
 | 
				
			||||||
" -issuer         - print issuer DN\n",
 | 
					" -issuer         - print issuer DN\n",
 | 
				
			||||||
" -lastupdate     - lastUpdate field\n",
 | 
					" -lastupdate     - lastUpdate field\n",
 | 
				
			||||||
" -nextupdate     - nextUpdate field\n",
 | 
					" -nextupdate     - nextUpdate field\n",
 | 
				
			||||||
" -noout          - no CRL output\n",
 | 
					" -noout          - no CRL output\n",
 | 
				
			||||||
" -CAfile  name   - verify CRL using certificates in file \"name\"\n",
 | 
					" -CAfile  name   - verify CRL using certificates in file \"name\"\n",
 | 
				
			||||||
" -CApath  dir    - verify CRL using certificates in \"dir\"\n",
 | 
					" -CApath  dir    - verify CRL using certificates in \"dir\"\n",
 | 
				
			||||||
 | 
					" -nameopt arg    - various certificate name options\n",
 | 
				
			||||||
NULL
 | 
					NULL
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -97,6 +99,7 @@ int MAIN(int, char **);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int MAIN(int argc, char **argv)
 | 
					int MAIN(int argc, char **argv)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
						unsigned long nmflag = 0;
 | 
				
			||||||
	X509_CRL *x=NULL;
 | 
						X509_CRL *x=NULL;
 | 
				
			||||||
	char *CAfile = NULL, *CApath = NULL;
 | 
						char *CAfile = NULL, *CApath = NULL;
 | 
				
			||||||
	int ret=1,i,num,badops=0;
 | 
						int ret=1,i,num,badops=0;
 | 
				
			||||||
@@ -105,7 +108,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	char *infile=NULL,*outfile=NULL;
 | 
						char *infile=NULL,*outfile=NULL;
 | 
				
			||||||
	int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0;
 | 
						int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0;
 | 
				
			||||||
	int fingerprint = 0;
 | 
						int fingerprint = 0;
 | 
				
			||||||
	char **pp,buf[256];
 | 
						char **pp;
 | 
				
			||||||
	X509_STORE *store = NULL;
 | 
						X509_STORE *store = NULL;
 | 
				
			||||||
	X509_STORE_CTX ctx;
 | 
						X509_STORE_CTX ctx;
 | 
				
			||||||
	X509_LOOKUP *lookup = NULL;
 | 
						X509_LOOKUP *lookup = NULL;
 | 
				
			||||||
@@ -120,11 +123,14 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								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 == NULL)
 | 
				
			||||||
		if ((bio_out=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_out=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_set_fp(bio_out,stdout,BIO_NOCLOSE);
 | 
								BIO_set_fp(bio_out,stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
								BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
			bio_out = BIO_push(tmpbio, bio_out);
 | 
								bio_out = BIO_push(tmpbio, bio_out);
 | 
				
			||||||
@@ -185,6 +191,11 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			text = 1;
 | 
								text = 1;
 | 
				
			||||||
		else if (strcmp(*argv,"-hash") == 0)
 | 
							else if (strcmp(*argv,"-hash") == 0)
 | 
				
			||||||
			hash= ++num;
 | 
								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)
 | 
							else if (strcmp(*argv,"-issuer") == 0)
 | 
				
			||||||
			issuer= ++num;
 | 
								issuer= ++num;
 | 
				
			||||||
		else if (strcmp(*argv,"-lastupdate") == 0)
 | 
							else if (strcmp(*argv,"-lastupdate") == 0)
 | 
				
			||||||
@@ -214,7 +225,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
bad:
 | 
					bad:
 | 
				
			||||||
		for (pp=crl_usage; (*pp != NULL); pp++)
 | 
							for (pp=crl_usage; (*pp != NULL); pp++)
 | 
				
			||||||
			BIO_printf(bio_err,*pp);
 | 
								BIO_printf(bio_err,"%s",*pp);
 | 
				
			||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -235,7 +246,11 @@ bad:
 | 
				
			|||||||
			X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
 | 
								X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
 | 
				
			||||||
		ERR_clear_error();
 | 
							ERR_clear_error();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		X509_STORE_CTX_init(&ctx, store, NULL, NULL);
 | 
							if(!X509_STORE_CTX_init(&ctx, store, NULL, NULL)) {
 | 
				
			||||||
 | 
								BIO_printf(bio_err,
 | 
				
			||||||
 | 
									"Error initialising X509 store\n");
 | 
				
			||||||
 | 
								goto end;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		i = X509_STORE_get_by_subject(&ctx, X509_LU_X509, 
 | 
							i = X509_STORE_get_by_subject(&ctx, X509_LU_X509, 
 | 
				
			||||||
					X509_CRL_get_issuer(x), &xobj);
 | 
										X509_CRL_get_issuer(x), &xobj);
 | 
				
			||||||
@@ -264,9 +279,7 @@ bad:
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
			if (issuer == i)
 | 
								if (issuer == i)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
				X509_NAME_oneline(X509_CRL_get_issuer(x),
 | 
									print_name(bio_out, "issuer=", X509_CRL_get_issuer(x), nmflag);
 | 
				
			||||||
								buf,256);
 | 
					 | 
				
			||||||
				BIO_printf(bio_out,"issuer= %s\n",buf);
 | 
					 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (hash == i)
 | 
								if (hash == i)
 | 
				
			||||||
@@ -324,7 +337,7 @@ bad:
 | 
				
			|||||||
	if (outfile == NULL)
 | 
						if (outfile == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
							BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		out = BIO_push(tmpbio, out);
 | 
							out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -364,7 +377,8 @@ end:
 | 
				
			|||||||
		X509_STORE_CTX_cleanup(&ctx);
 | 
							X509_STORE_CTX_cleanup(&ctx);
 | 
				
			||||||
		X509_STORE_free(store);
 | 
							X509_STORE_free(store);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static X509_CRL *load_crl(char *infile, int format)
 | 
					static X509_CRL *load_crl(char *infile, int format)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -166,7 +166,8 @@ bad:
 | 
				
			|||||||
		BIO_printf(bio_err," -certfile arg  certificates file of chain to a trusted CA\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,"                (can be used more than once)\n");
 | 
				
			||||||
		BIO_printf(bio_err," -nocrl         no crl to load, just certs from '-certfile'\n");
 | 
							BIO_printf(bio_err," -nocrl         no crl to load, just certs from '-certfile'\n");
 | 
				
			||||||
		EXIT(1);
 | 
							ret = 1;
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ERR_load_crypto_strings();
 | 
						ERR_load_crypto_strings();
 | 
				
			||||||
@@ -241,7 +242,7 @@ bad:
 | 
				
			|||||||
	if (outfile == NULL)
 | 
						if (outfile == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
							BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		out = BIO_push(tmpbio, out);
 | 
							out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -278,7 +279,8 @@ end:
 | 
				
			|||||||
	if (p7 != NULL) PKCS7_free(p7);
 | 
						if (p7 != NULL) PKCS7_free(p7);
 | 
				
			||||||
	if (crl != NULL) X509_CRL_free(crl);
 | 
						if (crl != NULL) X509_CRL_free(crl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										139
									
								
								apps/dgst.c
									
									
									
									
									
								
							
							
						
						
									
										139
									
								
								apps/dgst.c
									
									
									
									
									
								
							@@ -66,7 +66,6 @@
 | 
				
			|||||||
#include <openssl/objects.h>
 | 
					#include <openssl/objects.h>
 | 
				
			||||||
#include <openssl/x509.h>
 | 
					#include <openssl/x509.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef BUFSIZE
 | 
					#undef BUFSIZE
 | 
				
			||||||
#define BUFSIZE	1024*8
 | 
					#define BUFSIZE	1024*8
 | 
				
			||||||
@@ -74,8 +73,9 @@
 | 
				
			|||||||
#undef PROG
 | 
					#undef PROG
 | 
				
			||||||
#define PROG	dgst_main
 | 
					#define PROG	dgst_main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
					int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
				
			||||||
		EVP_PKEY *key, unsigned char *sigin, int siglen);
 | 
						  EVP_PKEY *key, unsigned char *sigin, int siglen, const char *title,
 | 
				
			||||||
 | 
						  const char *file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int MAIN(int, char **);
 | 
					int MAIN(int, char **);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -89,17 +89,20 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	BIO *bmd=NULL;
 | 
						BIO *bmd=NULL;
 | 
				
			||||||
	BIO *out = NULL;
 | 
						BIO *out = NULL;
 | 
				
			||||||
	const char *name;
 | 
						const char *name;
 | 
				
			||||||
#define PROG_NAME_SIZE  16
 | 
					#define PROG_NAME_SIZE  39
 | 
				
			||||||
	char pname[PROG_NAME_SIZE];
 | 
						char pname[PROG_NAME_SIZE+1];
 | 
				
			||||||
	int separator=0;
 | 
						int separator=0;
 | 
				
			||||||
	int debug=0;
 | 
						int debug=0;
 | 
				
			||||||
 | 
						int keyform=FORMAT_PEM;
 | 
				
			||||||
	const char *outfile = NULL, *keyfile = NULL;
 | 
						const char *outfile = NULL, *keyfile = NULL;
 | 
				
			||||||
	const char *sigfile = NULL, *randfile = NULL;
 | 
						const char *sigfile = NULL, *randfile = NULL;
 | 
				
			||||||
	int out_bin = -1, want_pub = 0, do_verify = 0;
 | 
						int out_bin = -1, want_pub = 0, do_verify = 0;
 | 
				
			||||||
	EVP_PKEY *sigkey = NULL;
 | 
						EVP_PKEY *sigkey = NULL;
 | 
				
			||||||
	unsigned char *sigbuf = NULL;
 | 
						unsigned char *sigbuf = NULL;
 | 
				
			||||||
	int siglen = 0;
 | 
						int siglen = 0;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	char *engine=NULL;
 | 
						char *engine=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apps_startup();
 | 
						apps_startup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -112,8 +115,11 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* first check the program name */
 | 
						/* first check the program name */
 | 
				
			||||||
	program_name(argv[0],pname,PROG_NAME_SIZE);
 | 
						program_name(argv[0],pname,sizeof pname);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	md=EVP_get_digestbyname(pname);
 | 
						md=EVP_get_digestbyname(pname);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -157,11 +163,18 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			if (--argc < 1) break;
 | 
								if (--argc < 1) break;
 | 
				
			||||||
			sigfile=*(++argv);
 | 
								sigfile=*(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-keyform") == 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								if (--argc < 1) break;
 | 
				
			||||||
 | 
								keyform=str2fmt(*(++argv));
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
							else if (strcmp(*argv,"-engine") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) break;
 | 
								if (--argc < 1) break;
 | 
				
			||||||
			engine= *(++argv);
 | 
								engine= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		else if (strcmp(*argv,"-hex") == 0)
 | 
							else if (strcmp(*argv,"-hex") == 0)
 | 
				
			||||||
			out_bin = 0;
 | 
								out_bin = 0;
 | 
				
			||||||
		else if (strcmp(*argv,"-binary") == 0)
 | 
							else if (strcmp(*argv,"-binary") == 0)
 | 
				
			||||||
@@ -196,9 +209,12 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		BIO_printf(bio_err,"-sign   file    sign digest using private key in file\n");
 | 
							BIO_printf(bio_err,"-sign   file    sign digest using private key in file\n");
 | 
				
			||||||
		BIO_printf(bio_err,"-verify file    verify a signature using public key in file\n");
 | 
							BIO_printf(bio_err,"-verify file    verify a signature using public key in file\n");
 | 
				
			||||||
		BIO_printf(bio_err,"-prverify file  verify a signature using private key in file\n");
 | 
							BIO_printf(bio_err,"-prverify file  verify a signature using private key in file\n");
 | 
				
			||||||
 | 
							BIO_printf(bio_err,"-keyform arg    key file format (PEM or ENGINE)\n");
 | 
				
			||||||
		BIO_printf(bio_err,"-signature file signature to verify\n");
 | 
							BIO_printf(bio_err,"-signature file signature to verify\n");
 | 
				
			||||||
		BIO_printf(bio_err,"-binary         output in binary form\n");
 | 
							BIO_printf(bio_err,"-binary         output in binary form\n");
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		BIO_printf(bio_err,"-engine e       use engine e, possibly a hardware device.\n");
 | 
							BIO_printf(bio_err,"-engine e       use engine e, possibly a hardware device.\n");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		BIO_printf(bio_err,"-%3s to use the %s message digest algorithm (default)\n",
 | 
							BIO_printf(bio_err,"-%3s to use the %s message digest algorithm (default)\n",
 | 
				
			||||||
			LN_md5,LN_md5);
 | 
								LN_md5,LN_md5);
 | 
				
			||||||
@@ -218,23 +234,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
					 | 
				
			||||||
				engine);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	in=BIO_new(BIO_s_file());
 | 
						in=BIO_new(BIO_s_file());
 | 
				
			||||||
	bmd=BIO_new(BIO_f_md());
 | 
						bmd=BIO_new(BIO_f_md());
 | 
				
			||||||
@@ -265,7 +267,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		else    out = BIO_new_file(outfile, "w");
 | 
							else    out = BIO_new_file(outfile, "w");
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
							out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		out = BIO_push(tmpbio, out);
 | 
							out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -280,27 +282,21 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(keyfile) {
 | 
						if(keyfile)
 | 
				
			||||||
		BIO *keybio;
 | 
							{
 | 
				
			||||||
		keybio = BIO_new_file(keyfile, "r");
 | 
							if (want_pub)
 | 
				
			||||||
		if(!keybio) {
 | 
								sigkey = load_pubkey(bio_err, keyfile, keyform, 0, NULL,
 | 
				
			||||||
			BIO_printf(bio_err, "Error opening key file %s\n",
 | 
									e, "key file");
 | 
				
			||||||
								keyfile);
 | 
							else
 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
								sigkey = load_key(bio_err, keyfile, keyform, 0, NULL,
 | 
				
			||||||
 | 
									e, "key file");
 | 
				
			||||||
 | 
							if (!sigkey)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								/* load_[pub]key() has already printed an appropriate
 | 
				
			||||||
 | 
								   message */
 | 
				
			||||||
			goto end;
 | 
								goto end;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		if(want_pub) 
 | 
					 | 
				
			||||||
			sigkey = PEM_read_bio_PUBKEY(keybio, NULL, NULL, NULL);
 | 
					 | 
				
			||||||
		else sigkey = PEM_read_bio_PrivateKey(keybio, NULL, NULL, NULL);
 | 
					 | 
				
			||||||
		BIO_free(keybio);
 | 
					 | 
				
			||||||
		if(!sigkey) {
 | 
					 | 
				
			||||||
			BIO_printf(bio_err, "Error reading key file %s\n",
 | 
					 | 
				
			||||||
								keyfile);
 | 
					 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(sigfile && sigkey) {
 | 
						if(sigfile && sigkey) {
 | 
				
			||||||
		BIO *sigbio;
 | 
							BIO *sigbio;
 | 
				
			||||||
@@ -332,29 +328,44 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	if (argc == 0)
 | 
						if (argc == 0)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
							BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
				
			||||||
		do_fp(out, buf,inp,separator, out_bin, sigkey, sigbuf, siglen);
 | 
							err=do_fp(out, buf,inp,separator, out_bin, sigkey, sigbuf,
 | 
				
			||||||
 | 
								  siglen,"","(stdin)");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		name=OBJ_nid2sn(md->type);
 | 
							name=OBJ_nid2sn(md->type);
 | 
				
			||||||
		for (i=0; i<argc; i++)
 | 
							for (i=0; i<argc; i++)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
 | 
								char *tmp,*tofree=NULL;
 | 
				
			||||||
 | 
								int r;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (BIO_read_filename(in,argv[i]) <= 0)
 | 
								if (BIO_read_filename(in,argv[i]) <= 0)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
				perror(argv[i]);
 | 
									perror(argv[i]);
 | 
				
			||||||
				err++;
 | 
									err++;
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			if(!out_bin) BIO_printf(out, "%s(%s)= ",name,argv[i]);
 | 
								if(!out_bin)
 | 
				
			||||||
			do_fp(out, buf,inp,separator, out_bin, sigkey, 
 | 
									{
 | 
				
			||||||
								sigbuf, siglen);
 | 
									size_t len = strlen(name)+strlen(argv[i])+5;
 | 
				
			||||||
 | 
									tmp=tofree=OPENSSL_malloc(len);
 | 
				
			||||||
 | 
									BIO_snprintf(tmp,len,"%s(%s)= ",name,argv[i]);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
									tmp="";
 | 
				
			||||||
 | 
								r=do_fp(out,buf,inp,separator,out_bin,sigkey,sigbuf,
 | 
				
			||||||
 | 
									siglen,tmp,argv[i]);
 | 
				
			||||||
 | 
								if(r)
 | 
				
			||||||
 | 
								    err=r;
 | 
				
			||||||
 | 
								if(tofree)
 | 
				
			||||||
 | 
									OPENSSL_free(tofree);
 | 
				
			||||||
			(void)BIO_reset(bmd);
 | 
								(void)BIO_reset(bmd);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
end:
 | 
					end:
 | 
				
			||||||
	if (buf != NULL)
 | 
						if (buf != NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		memset(buf,0,BUFSIZE);
 | 
							OPENSSL_cleanse(buf,BUFSIZE);
 | 
				
			||||||
		OPENSSL_free(buf);
 | 
							OPENSSL_free(buf);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	if (in != NULL) BIO_free(in);
 | 
						if (in != NULL) BIO_free(in);
 | 
				
			||||||
@@ -362,11 +373,13 @@ end:
 | 
				
			|||||||
	EVP_PKEY_free(sigkey);
 | 
						EVP_PKEY_free(sigkey);
 | 
				
			||||||
	if(sigbuf) OPENSSL_free(sigbuf);
 | 
						if(sigbuf) OPENSSL_free(sigbuf);
 | 
				
			||||||
	if (bmd != NULL) BIO_free(bmd);
 | 
						if (bmd != NULL) BIO_free(bmd);
 | 
				
			||||||
	EXIT(err);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(err);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
					int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
				
			||||||
			EVP_PKEY *key, unsigned char *sigin, int siglen)
 | 
						  EVP_PKEY *key, unsigned char *sigin, int siglen, const char *title,
 | 
				
			||||||
 | 
						  const char *file)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	int len;
 | 
						int len;
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
@@ -374,21 +387,33 @@ void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
				
			|||||||
	for (;;)
 | 
						for (;;)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		i=BIO_read(bp,(char *)buf,BUFSIZE);
 | 
							i=BIO_read(bp,(char *)buf,BUFSIZE);
 | 
				
			||||||
		if (i <= 0) break;
 | 
							if(i < 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								BIO_printf(bio_err, "Read Error in %s\n",file);
 | 
				
			||||||
 | 
								ERR_print_errors(bio_err);
 | 
				
			||||||
 | 
								return 1;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							if (i == 0) break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	if(sigin)
 | 
						if(sigin)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		EVP_MD_CTX *ctx;
 | 
							EVP_MD_CTX *ctx;
 | 
				
			||||||
		BIO_get_md_ctx(bp, &ctx);
 | 
							BIO_get_md_ctx(bp, &ctx);
 | 
				
			||||||
		i = EVP_VerifyFinal(ctx, sigin, (unsigned int)siglen, key); 
 | 
							i = EVP_VerifyFinal(ctx, sigin, (unsigned int)siglen, key); 
 | 
				
			||||||
		if(i > 0) BIO_printf(out, "Verified OK\n");
 | 
							if(i > 0)
 | 
				
			||||||
		else if(i == 0) BIO_printf(out, "Verification Failure\n");
 | 
								BIO_printf(out, "Verified OK\n");
 | 
				
			||||||
 | 
							else if(i == 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								BIO_printf(out, "Verification Failure\n");
 | 
				
			||||||
 | 
								return 1;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_printf(bio_err, "Error Verifying Data\n");
 | 
								BIO_printf(bio_err, "Error Verifying Data\n");
 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
								ERR_print_errors(bio_err);
 | 
				
			||||||
 | 
								return 1;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		return;
 | 
							return 0;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	if(key)
 | 
						if(key)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -398,7 +423,7 @@ void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_printf(bio_err, "Error Signing Data\n");
 | 
								BIO_printf(bio_err, "Error Signing Data\n");
 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
								ERR_print_errors(bio_err);
 | 
				
			||||||
			return;
 | 
								return 1;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
@@ -407,6 +432,7 @@ void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
				
			|||||||
	if(binout) BIO_write(out, buf, len);
 | 
						if(binout) BIO_write(out, buf, len);
 | 
				
			||||||
	else 
 | 
						else 
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
							BIO_write(out,title,strlen(title));
 | 
				
			||||||
		for (i=0; i<len; i++)
 | 
							for (i=0; i<len; i++)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (sep && (i != 0))
 | 
								if (sep && (i != 0))
 | 
				
			||||||
@@ -415,5 +441,6 @@ void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		BIO_printf(out, "\n");
 | 
							BIO_printf(out, "\n");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										44
									
								
								apps/dh.c
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								apps/dh.c
									
									
									
									
									
								
							@@ -57,7 +57,7 @@
 | 
				
			|||||||
 * [including the GNU Public Licence.]
 | 
					 * [including the GNU Public Licence.]
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_DH
 | 
					#ifndef OPENSSL_NO_DH
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <time.h>
 | 
					#include <time.h>
 | 
				
			||||||
@@ -69,7 +69,6 @@
 | 
				
			|||||||
#include <openssl/dh.h>
 | 
					#include <openssl/dh.h>
 | 
				
			||||||
#include <openssl/x509.h>
 | 
					#include <openssl/x509.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef PROG
 | 
					#undef PROG
 | 
				
			||||||
#define PROG	dh_main
 | 
					#define PROG	dh_main
 | 
				
			||||||
@@ -88,12 +87,17 @@ int MAIN(int, char **);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int MAIN(int argc, char **argv)
 | 
					int MAIN(int argc, char **argv)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	ENGINE *e = NULL;
 | 
						ENGINE *e = NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	DH *dh=NULL;
 | 
						DH *dh=NULL;
 | 
				
			||||||
	int i,badops=0,text=0;
 | 
						int i,badops=0,text=0;
 | 
				
			||||||
	BIO *in=NULL,*out=NULL;
 | 
						BIO *in=NULL,*out=NULL;
 | 
				
			||||||
	int informat,outformat,check=0,noout=0,C=0,ret=1;
 | 
						int informat,outformat,check=0,noout=0,C=0,ret=1;
 | 
				
			||||||
	char *infile,*outfile,*prog,*engine;
 | 
						char *infile,*outfile,*prog;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
						char *engine;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apps_startup();
 | 
						apps_startup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -101,7 +105,12 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	engine=NULL;
 | 
						engine=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	infile=NULL;
 | 
						infile=NULL;
 | 
				
			||||||
	outfile=NULL;
 | 
						outfile=NULL;
 | 
				
			||||||
	informat=FORMAT_PEM;
 | 
						informat=FORMAT_PEM;
 | 
				
			||||||
@@ -132,11 +141,13 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			outfile= *(++argv);
 | 
								outfile= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
							else if (strcmp(*argv,"-engine") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			engine= *(++argv);
 | 
								engine= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		else if (strcmp(*argv,"-check") == 0)
 | 
							else if (strcmp(*argv,"-check") == 0)
 | 
				
			||||||
			check=1;
 | 
								check=1;
 | 
				
			||||||
		else if (strcmp(*argv,"-text") == 0)
 | 
							else if (strcmp(*argv,"-text") == 0)
 | 
				
			||||||
@@ -168,29 +179,17 @@ bad:
 | 
				
			|||||||
		BIO_printf(bio_err," -text         print a text form of 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," -C            Output C code\n");
 | 
				
			||||||
		BIO_printf(bio_err," -noout        no output\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");
 | 
							BIO_printf(bio_err," -engine e     use engine e, possibly a hardware device.\n");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ERR_load_crypto_strings();
 | 
						ERR_load_crypto_strings();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
					 | 
				
			||||||
				engine);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	in=BIO_new(BIO_s_file());
 | 
						in=BIO_new(BIO_s_file());
 | 
				
			||||||
	out=BIO_new(BIO_s_file());
 | 
						out=BIO_new(BIO_s_file());
 | 
				
			||||||
@@ -213,7 +212,7 @@ bad:
 | 
				
			|||||||
	if (outfile == NULL)
 | 
						if (outfile == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
							BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		out = BIO_push(tmpbio, out);
 | 
							out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -346,6 +345,7 @@ end:
 | 
				
			|||||||
	if (in != NULL) BIO_free(in);
 | 
						if (in != NULL) BIO_free(in);
 | 
				
			||||||
	if (out != NULL) BIO_free_all(out);
 | 
						if (out != NULL) BIO_free_all(out);
 | 
				
			||||||
	if (dh != NULL) DH_free(dh);
 | 
						if (dh != NULL) DH_free(dh);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,7 +109,7 @@
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_DH
 | 
					#ifndef OPENSSL_NO_DH
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <time.h>
 | 
					#include <time.h>
 | 
				
			||||||
@@ -121,9 +121,8 @@
 | 
				
			|||||||
#include <openssl/dh.h>
 | 
					#include <openssl/dh.h>
 | 
				
			||||||
#include <openssl/x509.h>
 | 
					#include <openssl/x509.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
#include <openssl/dsa.h>
 | 
					#include <openssl/dsa.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -149,16 +148,21 @@ int MAIN(int, char **);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int MAIN(int argc, char **argv)
 | 
					int MAIN(int argc, char **argv)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	ENGINE *e = NULL;
 | 
						ENGINE *e = NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	DH *dh=NULL;
 | 
						DH *dh=NULL;
 | 
				
			||||||
	int i,badops=0,text=0;
 | 
						int i,badops=0,text=0;
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
	int dsaparam=0;
 | 
						int dsaparam=0;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	BIO *in=NULL,*out=NULL;
 | 
						BIO *in=NULL,*out=NULL;
 | 
				
			||||||
	int informat,outformat,check=0,noout=0,C=0,ret=1;
 | 
						int informat,outformat,check=0,noout=0,C=0,ret=1;
 | 
				
			||||||
	char *infile,*outfile,*prog;
 | 
						char *infile,*outfile,*prog;
 | 
				
			||||||
	char *inrand=NULL,*engine=NULL;
 | 
						char *inrand=NULL;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
						char *engine=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	int num = 0, g = 0;
 | 
						int num = 0, g = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apps_startup();
 | 
						apps_startup();
 | 
				
			||||||
@@ -167,6 +171,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	infile=NULL;
 | 
						infile=NULL;
 | 
				
			||||||
	outfile=NULL;
 | 
						outfile=NULL;
 | 
				
			||||||
	informat=FORMAT_PEM;
 | 
						informat=FORMAT_PEM;
 | 
				
			||||||
@@ -197,16 +204,18 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			outfile= *(++argv);
 | 
								outfile= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
							else if (strcmp(*argv,"-engine") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			engine= *(++argv);
 | 
								engine= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		else if (strcmp(*argv,"-check") == 0)
 | 
							else if (strcmp(*argv,"-check") == 0)
 | 
				
			||||||
			check=1;
 | 
								check=1;
 | 
				
			||||||
		else if (strcmp(*argv,"-text") == 0)
 | 
							else if (strcmp(*argv,"-text") == 0)
 | 
				
			||||||
			text=1;
 | 
								text=1;
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
		else if (strcmp(*argv,"-dsaparam") == 0)
 | 
							else if (strcmp(*argv,"-dsaparam") == 0)
 | 
				
			||||||
			dsaparam=1;
 | 
								dsaparam=1;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -238,7 +247,7 @@ bad:
 | 
				
			|||||||
		BIO_printf(bio_err," -outform arg  output 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," -in arg       input file\n");
 | 
				
			||||||
		BIO_printf(bio_err," -out arg      output file\n");
 | 
							BIO_printf(bio_err," -out arg      output file\n");
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
		BIO_printf(bio_err," -dsaparam     read or generate DSA parameters, convert to DH\n");
 | 
							BIO_printf(bio_err," -dsaparam     read or generate DSA parameters, convert to DH\n");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		BIO_printf(bio_err," -check        check the DH parameters\n");
 | 
							BIO_printf(bio_err," -check        check the DH parameters\n");
 | 
				
			||||||
@@ -247,7 +256,9 @@ bad:
 | 
				
			|||||||
		BIO_printf(bio_err," -2            generate parameters using  2 as the generator value\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," -5            generate parameters using  5 as the generator value\n");
 | 
				
			||||||
		BIO_printf(bio_err," numbits       number of bits in to generate (default 512)\n");
 | 
							BIO_printf(bio_err," 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");
 | 
							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," -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,"               - load the file (or the files in the directory) into\n");
 | 
				
			||||||
		BIO_printf(bio_err,"               the random number generator\n");
 | 
							BIO_printf(bio_err,"               the random number generator\n");
 | 
				
			||||||
@@ -257,28 +268,14 @@ bad:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ERR_load_crypto_strings();
 | 
						ERR_load_crypto_strings();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
					 | 
				
			||||||
				engine);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (g && !num)
 | 
						if (g && !num)
 | 
				
			||||||
		num = DEFBITS;
 | 
							num = DEFBITS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
	if (dsaparam)
 | 
						if (dsaparam)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		if (g)
 | 
							if (g)
 | 
				
			||||||
@@ -305,7 +302,7 @@ bad:
 | 
				
			|||||||
			BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
								BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
 | 
				
			||||||
				app_RAND_load_files(inrand));
 | 
									app_RAND_load_files(inrand));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
		if (dsaparam)
 | 
							if (dsaparam)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			DSA *dsa;
 | 
								DSA *dsa;
 | 
				
			||||||
@@ -366,7 +363,7 @@ bad:
 | 
				
			|||||||
			goto end;
 | 
								goto end;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
		if (dsaparam)
 | 
							if (dsaparam)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			DSA *dsa;
 | 
								DSA *dsa;
 | 
				
			||||||
@@ -419,7 +416,7 @@ bad:
 | 
				
			|||||||
	if (outfile == NULL)
 | 
						if (outfile == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
							BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		out = BIO_push(tmpbio, out);
 | 
							out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -504,7 +501,7 @@ bad:
 | 
				
			|||||||
		printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
 | 
							printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
 | 
				
			||||||
		printf("\t\t{ DH_free(dh); return(NULL); }\n");
 | 
							printf("\t\t{ DH_free(dh); return(NULL); }\n");
 | 
				
			||||||
		if (dh->length)
 | 
							if (dh->length)
 | 
				
			||||||
			printf("\tdh->length = %d;\n", dh->length);
 | 
								printf("\tdh->length = %ld;\n", dh->length);
 | 
				
			||||||
		printf("\treturn(dh);\n\t}\n");
 | 
							printf("\treturn(dh);\n\t}\n");
 | 
				
			||||||
		OPENSSL_free(data);
 | 
							OPENSSL_free(data);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -532,7 +529,8 @@ end:
 | 
				
			|||||||
	if (in != NULL) BIO_free(in);
 | 
						if (in != NULL) BIO_free(in);
 | 
				
			||||||
	if (out != NULL) BIO_free_all(out);
 | 
						if (out != NULL) BIO_free_all(out);
 | 
				
			||||||
	if (dh != NULL) DH_free(dh);
 | 
						if (dh != NULL) DH_free(dh);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* dh_cb is identical to dsa_cb in apps/dsaparam.c */
 | 
					/* dh_cb is identical to dsa_cb in apps/dsaparam.c */
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										53
									
								
								apps/dsa.c
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								apps/dsa.c
									
									
									
									
									
								
							@@ -56,7 +56,7 @@
 | 
				
			|||||||
 * [including the GNU Public Licence.]
 | 
					 * [including the GNU Public Licence.]
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
@@ -68,7 +68,6 @@
 | 
				
			|||||||
#include <openssl/evp.h>
 | 
					#include <openssl/evp.h>
 | 
				
			||||||
#include <openssl/x509.h>
 | 
					#include <openssl/x509.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef PROG
 | 
					#undef PROG
 | 
				
			||||||
#define PROG	dsa_main
 | 
					#define PROG	dsa_main
 | 
				
			||||||
@@ -80,6 +79,9 @@
 | 
				
			|||||||
 * -des		- encrypt output if PEM format with DES in cbc mode
 | 
					 * -des		- encrypt output if PEM format with DES in cbc mode
 | 
				
			||||||
 * -des3	- encrypt output if PEM format
 | 
					 * -des3	- encrypt output if PEM format
 | 
				
			||||||
 * -idea	- encrypt output if PEM format
 | 
					 * -idea	- encrypt output if PEM format
 | 
				
			||||||
 | 
					 * -aes128	- encrypt output if PEM format
 | 
				
			||||||
 | 
					 * -aes192	- encrypt output if PEM format
 | 
				
			||||||
 | 
					 * -aes256	- encrypt output if PEM format
 | 
				
			||||||
 * -text	- print a text version
 | 
					 * -text	- print a text version
 | 
				
			||||||
 * -modulus	- print the DSA public key
 | 
					 * -modulus	- print the DSA public key
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -88,7 +90,9 @@ int MAIN(int, char **);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int MAIN(int argc, char **argv)
 | 
					int MAIN(int argc, char **argv)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	ENGINE *e = NULL;
 | 
						ENGINE *e = NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	int ret=1;
 | 
						int ret=1;
 | 
				
			||||||
	DSA *dsa=NULL;
 | 
						DSA *dsa=NULL;
 | 
				
			||||||
	int i,badops=0;
 | 
						int i,badops=0;
 | 
				
			||||||
@@ -96,7 +100,10 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	BIO *in=NULL,*out=NULL;
 | 
						BIO *in=NULL,*out=NULL;
 | 
				
			||||||
	int informat,outformat,text=0,noout=0;
 | 
						int informat,outformat,text=0,noout=0;
 | 
				
			||||||
	int pubin = 0, pubout = 0;
 | 
						int pubin = 0, pubout = 0;
 | 
				
			||||||
	char *infile,*outfile,*prog,*engine;
 | 
						char *infile,*outfile,*prog;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
						char *engine;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	char *passargin = NULL, *passargout = NULL;
 | 
						char *passargin = NULL, *passargout = NULL;
 | 
				
			||||||
	char *passin = NULL, *passout = NULL;
 | 
						char *passin = NULL, *passout = NULL;
 | 
				
			||||||
	int modulus=0;
 | 
						int modulus=0;
 | 
				
			||||||
@@ -107,7 +114,12 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	engine=NULL;
 | 
						engine=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	infile=NULL;
 | 
						infile=NULL;
 | 
				
			||||||
	outfile=NULL;
 | 
						outfile=NULL;
 | 
				
			||||||
	informat=FORMAT_PEM;
 | 
						informat=FORMAT_PEM;
 | 
				
			||||||
@@ -148,11 +160,13 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			passargout= *(++argv);
 | 
								passargout= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
							else if (strcmp(*argv,"-engine") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			engine= *(++argv);
 | 
								engine= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
							else if (strcmp(*argv,"-noout") == 0)
 | 
				
			||||||
			noout=1;
 | 
								noout=1;
 | 
				
			||||||
		else if (strcmp(*argv,"-text") == 0)
 | 
							else if (strcmp(*argv,"-text") == 0)
 | 
				
			||||||
@@ -184,11 +198,17 @@ bad:
 | 
				
			|||||||
		BIO_printf(bio_err," -passin arg     input file pass phrase source\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," -out arg        output file\n");
 | 
				
			||||||
		BIO_printf(bio_err," -passout arg    output file pass phrase source\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
 | 
				
			||||||
		BIO_printf(bio_err," -des            encrypt PEM output with cbc des\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");
 | 
							BIO_printf(bio_err," -des3           encrypt PEM output with ede cbc des using 168 bit key\n");
 | 
				
			||||||
#ifndef NO_IDEA
 | 
					#ifndef OPENSSL_NO_IDEA
 | 
				
			||||||
		BIO_printf(bio_err," -idea           encrypt PEM output with cbc idea\n");
 | 
							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
 | 
					#endif
 | 
				
			||||||
		BIO_printf(bio_err," -text           print the key in text\n");
 | 
							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," -noout          don't print key out\n");
 | 
				
			||||||
@@ -198,23 +218,9 @@ bad:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ERR_load_crypto_strings();
 | 
						ERR_load_crypto_strings();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
					 | 
				
			||||||
				engine);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
						if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
				
			||||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
							BIO_printf(bio_err, "Error getting passwords\n");
 | 
				
			||||||
@@ -262,7 +268,7 @@ bad:
 | 
				
			|||||||
	if (outfile == NULL)
 | 
						if (outfile == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
							BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		out = BIO_push(tmpbio, out);
 | 
							out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -320,6 +326,7 @@ end:
 | 
				
			|||||||
	if(dsa != NULL) DSA_free(dsa);
 | 
						if(dsa != NULL) DSA_free(dsa);
 | 
				
			||||||
	if(passin) OPENSSL_free(passin);
 | 
						if(passin) OPENSSL_free(passin);
 | 
				
			||||||
	if(passout) OPENSSL_free(passout);
 | 
						if(passout) OPENSSL_free(passout);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,7 +56,7 @@
 | 
				
			|||||||
 * [including the GNU Public Licence.]
 | 
					 * [including the GNU Public Licence.]
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
#include <assert.h>
 | 
					#include <assert.h>
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
@@ -90,6 +90,9 @@ int MAIN(int, char **);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int MAIN(int argc, char **argv)
 | 
					int MAIN(int argc, char **argv)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
						ENGINE *e = NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	DSA *dsa=NULL;
 | 
						DSA *dsa=NULL;
 | 
				
			||||||
	int i,badops=0,text=0;
 | 
						int i,badops=0,text=0;
 | 
				
			||||||
	BIO *in=NULL,*out=NULL;
 | 
						BIO *in=NULL,*out=NULL;
 | 
				
			||||||
@@ -97,6 +100,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	char *infile,*outfile,*prog,*inrand=NULL;
 | 
						char *infile,*outfile,*prog,*inrand=NULL;
 | 
				
			||||||
	int numbits= -1,num,genkey=0;
 | 
						int numbits= -1,num,genkey=0;
 | 
				
			||||||
	int need_rand=0;
 | 
						int need_rand=0;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
						char *engine=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apps_startup();
 | 
						apps_startup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -104,6 +110,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	infile=NULL;
 | 
						infile=NULL;
 | 
				
			||||||
	outfile=NULL;
 | 
						outfile=NULL;
 | 
				
			||||||
	informat=FORMAT_PEM;
 | 
						informat=FORMAT_PEM;
 | 
				
			||||||
@@ -134,6 +143,13 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			outfile= *(++argv);
 | 
								outfile= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
							else if(strcmp(*argv, "-engine") == 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
 | 
								engine = *(++argv);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		else if (strcmp(*argv,"-text") == 0)
 | 
							else if (strcmp(*argv,"-text") == 0)
 | 
				
			||||||
			text=1;
 | 
								text=1;
 | 
				
			||||||
		else if (strcmp(*argv,"-C") == 0)
 | 
							else if (strcmp(*argv,"-C") == 0)
 | 
				
			||||||
@@ -176,10 +192,14 @@ bad:
 | 
				
			|||||||
		BIO_printf(bio_err," -outform arg  output 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," -in arg       input file\n");
 | 
				
			||||||
		BIO_printf(bio_err," -out arg      output file\n");
 | 
							BIO_printf(bio_err," -out arg      output file\n");
 | 
				
			||||||
		BIO_printf(bio_err," -text         print the key in text\n");
 | 
							BIO_printf(bio_err," -text         print as text\n");
 | 
				
			||||||
		BIO_printf(bio_err," -C            Output C code\n");
 | 
							BIO_printf(bio_err," -C            Output C code\n");
 | 
				
			||||||
		BIO_printf(bio_err," -noout        no output\n");
 | 
							BIO_printf(bio_err," -noout        no output\n");
 | 
				
			||||||
 | 
							BIO_printf(bio_err," -genkey       generate a DSA key\n");
 | 
				
			||||||
		BIO_printf(bio_err," -rand         files to use for random number input\n");
 | 
							BIO_printf(bio_err," -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
 | 
				
			||||||
		BIO_printf(bio_err," number        number of bits to use for generating private key\n");
 | 
							BIO_printf(bio_err," number        number of bits to use for generating private key\n");
 | 
				
			||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -207,7 +227,7 @@ bad:
 | 
				
			|||||||
	if (outfile == NULL)
 | 
						if (outfile == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
							BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		out = BIO_push(tmpbio, out);
 | 
							out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -223,6 +243,10 @@ bad:
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (need_rand)
 | 
						if (need_rand)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		app_RAND_load_file(NULL, bio_err, (inrand != NULL));
 | 
							app_RAND_load_file(NULL, bio_err, (inrand != NULL));
 | 
				
			||||||
@@ -357,7 +381,8 @@ end:
 | 
				
			|||||||
	if (in != NULL) BIO_free(in);
 | 
						if (in != NULL) BIO_free(in);
 | 
				
			||||||
	if (out != NULL) BIO_free_all(out);
 | 
						if (out != NULL) BIO_free_all(out);
 | 
				
			||||||
	if (dsa != NULL) DSA_free(dsa);
 | 
						if (dsa != NULL) DSA_free(dsa);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
 | 
					static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										175
									
								
								apps/enc.c
									
									
									
									
									
								
							
							
						
						
									
										175
									
								
								apps/enc.c
									
									
									
									
									
								
							@@ -66,11 +66,8 @@
 | 
				
			|||||||
#include <openssl/objects.h>
 | 
					#include <openssl/objects.h>
 | 
				
			||||||
#include <openssl/x509.h>
 | 
					#include <openssl/x509.h>
 | 
				
			||||||
#include <openssl/rand.h>
 | 
					#include <openssl/rand.h>
 | 
				
			||||||
#ifndef NO_MD5
 | 
					 | 
				
			||||||
#include <openssl/md5.h>
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					#include <ctype.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int set_hex(char *in,unsigned char *out,int size);
 | 
					int set_hex(char *in,unsigned char *out,int size);
 | 
				
			||||||
#undef SIZE
 | 
					#undef SIZE
 | 
				
			||||||
@@ -81,18 +78,39 @@ int set_hex(char *in,unsigned char *out,int size);
 | 
				
			|||||||
#define BSIZE	(8*1024)
 | 
					#define BSIZE	(8*1024)
 | 
				
			||||||
#define	PROG	enc_main
 | 
					#define	PROG	enc_main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void show_ciphers(const OBJ_NAME *name,void *bio_)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						BIO *bio=bio_;
 | 
				
			||||||
 | 
						static int n;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(!islower((unsigned char)*name->name))
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						BIO_printf(bio,"-%-25s",name->name);
 | 
				
			||||||
 | 
						if(++n == 3)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							BIO_printf(bio,"\n");
 | 
				
			||||||
 | 
							n=0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							BIO_printf(bio," ");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int MAIN(int, char **);
 | 
					int MAIN(int, char **);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int MAIN(int argc, char **argv)
 | 
					int MAIN(int argc, char **argv)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	ENGINE *e = NULL;
 | 
						ENGINE *e = NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	static const char magic[]="Salted__";
 | 
						static const char magic[]="Salted__";
 | 
				
			||||||
	char mbuf[8];	/* should be 1 smaller than magic */
 | 
						char mbuf[sizeof magic-1];
 | 
				
			||||||
	char *strbuf=NULL;
 | 
						char *strbuf=NULL;
 | 
				
			||||||
	unsigned char *buff=NULL,*bufsize=NULL;
 | 
						unsigned char *buff=NULL,*bufsize=NULL;
 | 
				
			||||||
	int bsize=BSIZE,verbose=0;
 | 
						int bsize=BSIZE,verbose=0;
 | 
				
			||||||
	int ret=1,inl;
 | 
						int ret=1,inl;
 | 
				
			||||||
	unsigned char key[24],iv[MD5_DIGEST_LENGTH];
 | 
						int nopad = 0;
 | 
				
			||||||
 | 
						unsigned char key[EVP_MAX_KEY_LENGTH],iv[EVP_MAX_IV_LENGTH];
 | 
				
			||||||
	unsigned char salt[PKCS5_SALT_LEN];
 | 
						unsigned char salt[PKCS5_SALT_LEN];
 | 
				
			||||||
	char *str=NULL, *passarg = NULL, *pass = NULL;
 | 
						char *str=NULL, *passarg = NULL, *pass = NULL;
 | 
				
			||||||
	char *hkey=NULL,*hiv=NULL,*hsalt = NULL;
 | 
						char *hkey=NULL,*hiv=NULL,*hsalt = NULL;
 | 
				
			||||||
@@ -101,9 +119,11 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	const EVP_CIPHER *cipher=NULL,*c;
 | 
						const EVP_CIPHER *cipher=NULL,*c;
 | 
				
			||||||
	char *inf=NULL,*outf=NULL;
 | 
						char *inf=NULL,*outf=NULL;
 | 
				
			||||||
	BIO *in=NULL,*out=NULL,*b64=NULL,*benc=NULL,*rbio=NULL,*wbio=NULL;
 | 
						BIO *in=NULL,*out=NULL,*b64=NULL,*benc=NULL,*rbio=NULL,*wbio=NULL;
 | 
				
			||||||
#define PROG_NAME_SIZE  16
 | 
					#define PROG_NAME_SIZE  39
 | 
				
			||||||
	char pname[PROG_NAME_SIZE];
 | 
						char pname[PROG_NAME_SIZE+1];
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	char *engine = NULL;
 | 
						char *engine = NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apps_startup();
 | 
						apps_startup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -111,8 +131,11 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* first check the program name */
 | 
						/* first check the program name */
 | 
				
			||||||
	program_name(argv[0],pname,PROG_NAME_SIZE);
 | 
						program_name(argv[0],pname,sizeof pname);
 | 
				
			||||||
	if (strcmp(pname,"base64") == 0)
 | 
						if (strcmp(pname,"base64") == 0)
 | 
				
			||||||
		base64=1;
 | 
							base64=1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -144,17 +167,21 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			passarg= *(++argv);
 | 
								passarg= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
							else if (strcmp(*argv,"-engine") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			engine= *(++argv);
 | 
								engine= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		else if	(strcmp(*argv,"-d") == 0)
 | 
							else if	(strcmp(*argv,"-d") == 0)
 | 
				
			||||||
			enc=0;
 | 
								enc=0;
 | 
				
			||||||
		else if	(strcmp(*argv,"-p") == 0)
 | 
							else if	(strcmp(*argv,"-p") == 0)
 | 
				
			||||||
			printkey=1;
 | 
								printkey=1;
 | 
				
			||||||
		else if	(strcmp(*argv,"-v") == 0)
 | 
							else if	(strcmp(*argv,"-v") == 0)
 | 
				
			||||||
			verbose=1;
 | 
								verbose=1;
 | 
				
			||||||
 | 
							else if	(strcmp(*argv,"-nopad") == 0)
 | 
				
			||||||
 | 
								nopad=1;
 | 
				
			||||||
		else if	(strcmp(*argv,"-salt") == 0)
 | 
							else if	(strcmp(*argv,"-salt") == 0)
 | 
				
			||||||
			nosalt=0;
 | 
								nosalt=0;
 | 
				
			||||||
		else if	(strcmp(*argv,"-nosalt") == 0)
 | 
							else if	(strcmp(*argv,"-nosalt") == 0)
 | 
				
			||||||
@@ -195,7 +222,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
				goto bad;
 | 
									goto bad;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			buf[0]='\0';
 | 
								buf[0]='\0';
 | 
				
			||||||
			fgets(buf,128,infile);
 | 
								fgets(buf,sizeof buf,infile);
 | 
				
			||||||
			fclose(infile);
 | 
								fclose(infile);
 | 
				
			||||||
			i=strlen(buf);
 | 
								i=strlen(buf);
 | 
				
			||||||
			if ((i > 0) &&
 | 
								if ((i > 0) &&
 | 
				
			||||||
@@ -249,97 +276,25 @@ bad:
 | 
				
			|||||||
			BIO_printf(bio_err,"%-14s key/iv in hex is the next argument\n","-K/-iv");
 | 
								BIO_printf(bio_err,"%-14s key/iv in hex is the next argument\n","-K/-iv");
 | 
				
			||||||
			BIO_printf(bio_err,"%-14s print the iv/key (then exit if -P)\n","-[pP]");
 | 
								BIO_printf(bio_err,"%-14s print the iv/key (then exit if -P)\n","-[pP]");
 | 
				
			||||||
			BIO_printf(bio_err,"%-14s buffer size\n","-bufsize <n>");
 | 
								BIO_printf(bio_err,"%-14s buffer size\n","-bufsize <n>");
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
			BIO_printf(bio_err,"%-14s use engine e, possibly a hardware device.\n","-engine e");
 | 
								BIO_printf(bio_err,"%-14s use engine e, possibly a hardware device.\n","-engine e");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			BIO_printf(bio_err,"Cipher Types\n");
 | 
								BIO_printf(bio_err,"Cipher Types\n");
 | 
				
			||||||
			BIO_printf(bio_err,"des     : 56 bit key DES encryption\n");
 | 
								OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH,
 | 
				
			||||||
			BIO_printf(bio_err,"des_ede :112 bit key ede DES encryption\n");
 | 
										       show_ciphers,
 | 
				
			||||||
			BIO_printf(bio_err,"des_ede3:168 bit key ede DES encryption\n");
 | 
										       bio_err);
 | 
				
			||||||
#ifndef NO_IDEA
 | 
								BIO_printf(bio_err,"\n");
 | 
				
			||||||
			BIO_printf(bio_err,"idea    :128 bit key IDEA encryption\n");
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#ifndef NO_RC4
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"rc2     :128 bit key RC2 encryption\n");
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#ifndef NO_BF
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"bf      :128 bit key Blowfish encryption\n");
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#ifndef NO_RC4
 | 
					 | 
				
			||||||
			BIO_printf(bio_err," -%-5s :128 bit key RC4 encryption\n",
 | 
					 | 
				
			||||||
				LN_rc4);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
 | 
					 | 
				
			||||||
				LN_des_ecb,LN_des_cbc,
 | 
					 | 
				
			||||||
				LN_des_cfb64,LN_des_ofb64);
 | 
					 | 
				
			||||||
			BIO_printf(bio_err," -%-4s (%s)\n",
 | 
					 | 
				
			||||||
				"des", LN_des_cbc);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
 | 
					 | 
				
			||||||
				LN_des_ede,LN_des_ede_cbc,
 | 
					 | 
				
			||||||
				LN_des_ede_cfb64,LN_des_ede_ofb64);
 | 
					 | 
				
			||||||
			BIO_printf(bio_err," -desx -none\n");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
 | 
					 | 
				
			||||||
				LN_des_ede3,LN_des_ede3_cbc,
 | 
					 | 
				
			||||||
				LN_des_ede3_cfb64,LN_des_ede3_ofb64);
 | 
					 | 
				
			||||||
			BIO_printf(bio_err," -%-4s (%s)\n",
 | 
					 | 
				
			||||||
				"des3", LN_des_ede3_cbc);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef NO_IDEA
 | 
					 | 
				
			||||||
			BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
 | 
					 | 
				
			||||||
				LN_idea_ecb, LN_idea_cbc,
 | 
					 | 
				
			||||||
				LN_idea_cfb64, LN_idea_ofb64);
 | 
					 | 
				
			||||||
			BIO_printf(bio_err," -%-4s (%s)\n","idea",LN_idea_cbc);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#ifndef NO_RC2
 | 
					 | 
				
			||||||
			BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
 | 
					 | 
				
			||||||
				LN_rc2_ecb, LN_rc2_cbc,
 | 
					 | 
				
			||||||
				LN_rc2_cfb64, LN_rc2_ofb64);
 | 
					 | 
				
			||||||
			BIO_printf(bio_err," -%-4s (%s)\n","rc2", LN_rc2_cbc);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#ifndef NO_BF
 | 
					 | 
				
			||||||
			BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
 | 
					 | 
				
			||||||
				LN_bf_ecb, LN_bf_cbc,
 | 
					 | 
				
			||||||
				LN_bf_cfb64, LN_bf_ofb64);
 | 
					 | 
				
			||||||
			BIO_printf(bio_err," -%-4s (%s)\n","bf", LN_bf_cbc);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#ifndef NO_CAST
 | 
					 | 
				
			||||||
			BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
 | 
					 | 
				
			||||||
				LN_cast5_ecb, LN_cast5_cbc,
 | 
					 | 
				
			||||||
				LN_cast5_cfb64, LN_cast5_ofb64);
 | 
					 | 
				
			||||||
			BIO_printf(bio_err," -%-4s (%s)\n","cast", LN_cast5_cbc);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#ifndef NO_RC5
 | 
					 | 
				
			||||||
			BIO_printf(bio_err," -%-12s -%-12s -%-12s -%-12s",
 | 
					 | 
				
			||||||
				LN_rc5_ecb, LN_rc5_cbc,
 | 
					 | 
				
			||||||
				LN_rc5_cfb64, LN_rc5_ofb64);
 | 
					 | 
				
			||||||
			BIO_printf(bio_err," -%-4s (%s)\n","rc5", LN_rc5_cbc);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
			goto end;
 | 
								goto end;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		argc--;
 | 
							argc--;
 | 
				
			||||||
		argv++;
 | 
							argv++;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
					 | 
				
			||||||
				engine);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (bufsize != NULL)
 | 
						if (bufsize != NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -418,9 +373,9 @@ bad:
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
			char buf[200];
 | 
								char buf[200];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			sprintf(buf,"enter %s %s password:",
 | 
								BIO_snprintf(buf,sizeof buf,"enter %s %s password:",
 | 
				
			||||||
				OBJ_nid2ln(EVP_CIPHER_nid(cipher)),
 | 
									     OBJ_nid2ln(EVP_CIPHER_nid(cipher)),
 | 
				
			||||||
				(enc)?"encryption":"decryption");
 | 
									     (enc)?"encryption":"decryption");
 | 
				
			||||||
			strbuf[0]='\0';
 | 
								strbuf[0]='\0';
 | 
				
			||||||
			i=EVP_read_pw_string((char *)strbuf,SIZE,buf,enc);
 | 
								i=EVP_read_pw_string((char *)strbuf,SIZE,buf,enc);
 | 
				
			||||||
			if (i == 0)
 | 
								if (i == 0)
 | 
				
			||||||
@@ -445,7 +400,7 @@ bad:
 | 
				
			|||||||
	if (outf == NULL)
 | 
						if (outf == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
							BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		out = BIO_push(tmpbio, out);
 | 
							out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -483,6 +438,9 @@ bad:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (cipher != NULL)
 | 
						if (cipher != NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
							/* Note that str is NULL if a key was passed on the command
 | 
				
			||||||
 | 
							 * line, so we get no salt in that case. Is this a bug?
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
		if (str != NULL)
 | 
							if (str != NULL)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			/* Salt handling: if encrypting generate a salt and
 | 
								/* Salt handling: if encrypting generate a salt and
 | 
				
			||||||
@@ -494,12 +452,12 @@ bad:
 | 
				
			|||||||
			else {
 | 
								else {
 | 
				
			||||||
				if(enc) {
 | 
									if(enc) {
 | 
				
			||||||
					if(hsalt) {
 | 
										if(hsalt) {
 | 
				
			||||||
						if(!set_hex(hsalt,salt,PKCS5_SALT_LEN)) {
 | 
											if(!set_hex(hsalt,salt,sizeof salt)) {
 | 
				
			||||||
							BIO_printf(bio_err,
 | 
												BIO_printf(bio_err,
 | 
				
			||||||
								"invalid hex salt value\n");
 | 
													"invalid hex salt value\n");
 | 
				
			||||||
							goto end;
 | 
												goto end;
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
					} else if (RAND_pseudo_bytes(salt, PKCS5_SALT_LEN) < 0)
 | 
										} else if (RAND_pseudo_bytes(salt, sizeof salt) < 0)
 | 
				
			||||||
						goto end;
 | 
											goto end;
 | 
				
			||||||
					/* If -P option then don't bother writing */
 | 
										/* If -P option then don't bother writing */
 | 
				
			||||||
					if((printkey != 2)
 | 
										if((printkey != 2)
 | 
				
			||||||
@@ -507,14 +465,14 @@ bad:
 | 
				
			|||||||
							 sizeof magic-1) != sizeof magic-1
 | 
												 sizeof magic-1) != sizeof magic-1
 | 
				
			||||||
					       || BIO_write(wbio,
 | 
										       || BIO_write(wbio,
 | 
				
			||||||
							    (char *)salt,
 | 
												    (char *)salt,
 | 
				
			||||||
							    PKCS5_SALT_LEN) != PKCS5_SALT_LEN)) {
 | 
												    sizeof salt) != sizeof salt)) {
 | 
				
			||||||
						BIO_printf(bio_err,"error writing output file\n");
 | 
											BIO_printf(bio_err,"error writing output file\n");
 | 
				
			||||||
						goto end;
 | 
											goto end;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				} else if(BIO_read(rbio,mbuf,sizeof mbuf) != sizeof mbuf
 | 
									} else if(BIO_read(rbio,mbuf,sizeof mbuf) != sizeof mbuf
 | 
				
			||||||
					  || BIO_read(rbio,
 | 
										  || BIO_read(rbio,
 | 
				
			||||||
						      (unsigned char *)salt,
 | 
											      (unsigned char *)salt,
 | 
				
			||||||
				    PKCS5_SALT_LEN) != PKCS5_SALT_LEN) {
 | 
									    sizeof salt) != sizeof salt) {
 | 
				
			||||||
					BIO_printf(bio_err,"error reading input file\n");
 | 
										BIO_printf(bio_err,"error reading input file\n");
 | 
				
			||||||
					goto end;
 | 
										goto end;
 | 
				
			||||||
				} else if(memcmp(mbuf,magic,sizeof magic-1)) {
 | 
									} else if(memcmp(mbuf,magic,sizeof magic-1)) {
 | 
				
			||||||
@@ -533,11 +491,11 @@ bad:
 | 
				
			|||||||
			 * bug picked up by
 | 
								 * bug picked up by
 | 
				
			||||||
			 * Larry J. Hughes Jr. <hughes@indiana.edu> */
 | 
								 * Larry J. Hughes Jr. <hughes@indiana.edu> */
 | 
				
			||||||
			if (str == strbuf)
 | 
								if (str == strbuf)
 | 
				
			||||||
				memset(str,0,SIZE);
 | 
									OPENSSL_cleanse(str,SIZE);
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				memset(str,0,strlen(str));
 | 
									OPENSSL_cleanse(str,strlen(str));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		if ((hiv != NULL) && !set_hex(hiv,iv,8))
 | 
							if ((hiv != NULL) && !set_hex(hiv,iv,sizeof iv))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_printf(bio_err,"invalid hex iv value\n");
 | 
								BIO_printf(bio_err,"invalid hex iv value\n");
 | 
				
			||||||
			goto end;
 | 
								goto end;
 | 
				
			||||||
@@ -550,7 +508,7 @@ bad:
 | 
				
			|||||||
			BIO_printf(bio_err, "iv undefined\n");
 | 
								BIO_printf(bio_err, "iv undefined\n");
 | 
				
			||||||
			goto end;
 | 
								goto end;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		if ((hkey != NULL) && !set_hex(hkey,key,24))
 | 
							if ((hkey != NULL) && !set_hex(hkey,key,sizeof key))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_printf(bio_err,"invalid hex key value\n");
 | 
								BIO_printf(bio_err,"invalid hex key value\n");
 | 
				
			||||||
			goto end;
 | 
								goto end;
 | 
				
			||||||
@@ -559,6 +517,12 @@ bad:
 | 
				
			|||||||
		if ((benc=BIO_new(BIO_f_cipher())) == NULL)
 | 
							if ((benc=BIO_new(BIO_f_cipher())) == NULL)
 | 
				
			||||||
			goto end;
 | 
								goto end;
 | 
				
			||||||
		BIO_set_cipher(benc,cipher,key,iv,enc);
 | 
							BIO_set_cipher(benc,cipher,key,iv,enc);
 | 
				
			||||||
 | 
							if (nopad)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								EVP_CIPHER_CTX *ctx;
 | 
				
			||||||
 | 
								BIO_get_cipher_ctx(benc, &ctx);
 | 
				
			||||||
 | 
								EVP_CIPHER_CTX_set_padding(ctx, 0);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		if (debug)
 | 
							if (debug)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_set_callback(benc,BIO_debug_callback);
 | 
								BIO_set_callback(benc,BIO_debug_callback);
 | 
				
			||||||
@@ -570,7 +534,7 @@ bad:
 | 
				
			|||||||
			if (!nosalt)
 | 
								if (!nosalt)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
				printf("salt=");
 | 
									printf("salt=");
 | 
				
			||||||
				for (i=0; i<PKCS5_SALT_LEN; i++)
 | 
									for (i=0; i<sizeof salt; i++)
 | 
				
			||||||
					printf("%02X",salt[i]);
 | 
										printf("%02X",salt[i]);
 | 
				
			||||||
				printf("\n");
 | 
									printf("\n");
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
@@ -631,7 +595,8 @@ end:
 | 
				
			|||||||
	if (benc != NULL) BIO_free(benc);
 | 
						if (benc != NULL) BIO_free(benc);
 | 
				
			||||||
	if (b64 != NULL) BIO_free(b64);
 | 
						if (b64 != NULL) BIO_free(b64);
 | 
				
			||||||
	if(pass) OPENSSL_free(pass);
 | 
						if(pass) OPENSSL_free(pass);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int set_hex(char *in, unsigned char *out, int size)
 | 
					int set_hex(char *in, unsigned char *out, int size)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										529
									
								
								apps/engine.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										529
									
								
								apps/engine.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,529 @@
 | 
				
			|||||||
 | 
					/* apps/engine.c -*- mode: C; c-file-style: "eay" -*- */
 | 
				
			||||||
 | 
					/* Written by Richard Levitte <richard@levitte.org> for the OpenSSL
 | 
				
			||||||
 | 
					 * project 2000.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 2000 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    licensing@OpenSSL.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This product includes cryptographic software written by Eric Young
 | 
				
			||||||
 | 
					 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
				
			||||||
 | 
					 * Hudson (tjh@cryptsoft.com).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					#ifdef OPENSSL_NO_STDIO
 | 
				
			||||||
 | 
					#define APPS_WIN16
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#include "apps.h"
 | 
				
			||||||
 | 
					#include <openssl/err.h>
 | 
				
			||||||
 | 
					#include <openssl/engine.h>
 | 
				
			||||||
 | 
					#include <openssl/ssl.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#undef PROG
 | 
				
			||||||
 | 
					#define PROG	engine_main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static char *engine_usage[]={
 | 
				
			||||||
 | 
					"usage: engine opts [engine ...]\n",
 | 
				
			||||||
 | 
					" -v[v[v[v]]] - verbose mode, for each engine, list its 'control commands'\n",
 | 
				
			||||||
 | 
					"               -vv will additionally display each command's description\n",
 | 
				
			||||||
 | 
					"               -vvv will also add the input flags for each command\n",
 | 
				
			||||||
 | 
					"               -vvvv will also show internal input flags\n",
 | 
				
			||||||
 | 
					" -c          - for each engine, also list the capabilities\n",
 | 
				
			||||||
 | 
					" -t          - for each engine, check that they are really available\n",
 | 
				
			||||||
 | 
					" -pre <cmd>  - runs command 'cmd' against the ENGINE before any attempts\n",
 | 
				
			||||||
 | 
					"               to load it (if -t is used)\n",
 | 
				
			||||||
 | 
					" -post <cmd> - runs command 'cmd' against the ENGINE after loading it\n",
 | 
				
			||||||
 | 
					"               (only used if -t is also provided)\n",
 | 
				
			||||||
 | 
					" NB: -pre and -post will be applied to all ENGINEs supplied on the command\n",
 | 
				
			||||||
 | 
					" line, or all supported ENGINEs if none are specified.\n",
 | 
				
			||||||
 | 
					" Eg. '-pre \"SO_PATH:/lib/libdriver.so\"' calls command \"SO_PATH\" with\n",
 | 
				
			||||||
 | 
					" argument \"/lib/libdriver.so\".\n",
 | 
				
			||||||
 | 
					NULL
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void identity(void *ptr)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int append_buf(char **buf, const char *s, int *size, int step)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						int l = strlen(s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (*buf == NULL)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							*size = step;
 | 
				
			||||||
 | 
							*buf = OPENSSL_malloc(*size);
 | 
				
			||||||
 | 
							if (*buf == NULL)
 | 
				
			||||||
 | 
								return 0;
 | 
				
			||||||
 | 
							**buf = '\0';
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (**buf != '\0')
 | 
				
			||||||
 | 
							l += 2;		/* ", " */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (strlen(*buf) + strlen(s) >= (unsigned int)*size)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							*size += step;
 | 
				
			||||||
 | 
							*buf = OPENSSL_realloc(*buf, *size);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (*buf == NULL)
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (**buf != '\0')
 | 
				
			||||||
 | 
							BUF_strlcat(*buf, ", ", *size);
 | 
				
			||||||
 | 
						BUF_strlcat(*buf, s, *size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int util_flags(BIO *bio_out, unsigned int flags, const char *indent)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						int started = 0, err = 0;
 | 
				
			||||||
 | 
						/* Indent before displaying input flags */
 | 
				
			||||||
 | 
						BIO_printf(bio_out, "%s%s(input flags): ", indent, indent);
 | 
				
			||||||
 | 
						if(flags == 0)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							BIO_printf(bio_out, "<no flags>\n");
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					        /* If the object is internal, mark it in a way that shows instead of
 | 
				
			||||||
 | 
					         * having it part of all the other flags, even if it really is. */
 | 
				
			||||||
 | 
						if(flags & ENGINE_CMD_FLAG_INTERNAL)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							BIO_printf(bio_out, "[Internal] ");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(flags & ENGINE_CMD_FLAG_NUMERIC)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							if(started)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								BIO_printf(bio_out, "|");
 | 
				
			||||||
 | 
								err = 1;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							BIO_printf(bio_out, "NUMERIC");
 | 
				
			||||||
 | 
							started = 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						/* Now we check that no combinations of the mutually exclusive NUMERIC,
 | 
				
			||||||
 | 
						 * STRING, and NO_INPUT flags have been used. Future flags that can be
 | 
				
			||||||
 | 
						 * OR'd together with these would need to added after these to preserve
 | 
				
			||||||
 | 
						 * the testing logic. */
 | 
				
			||||||
 | 
						if(flags & ENGINE_CMD_FLAG_STRING)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							if(started)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								BIO_printf(bio_out, "|");
 | 
				
			||||||
 | 
								err = 1;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							BIO_printf(bio_out, "STRING");
 | 
				
			||||||
 | 
							started = 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						if(flags & ENGINE_CMD_FLAG_NO_INPUT)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							if(started)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								BIO_printf(bio_out, "|");
 | 
				
			||||||
 | 
								err = 1;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							BIO_printf(bio_out, "NO_INPUT");
 | 
				
			||||||
 | 
							started = 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						/* Check for unknown flags */
 | 
				
			||||||
 | 
						flags = flags & ~ENGINE_CMD_FLAG_NUMERIC &
 | 
				
			||||||
 | 
								~ENGINE_CMD_FLAG_STRING &
 | 
				
			||||||
 | 
								~ENGINE_CMD_FLAG_NO_INPUT &
 | 
				
			||||||
 | 
								~ENGINE_CMD_FLAG_INTERNAL;
 | 
				
			||||||
 | 
						if(flags)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							if(started) BIO_printf(bio_out, "|");
 | 
				
			||||||
 | 
							BIO_printf(bio_out, "<0x%04X>", flags);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						if(err)
 | 
				
			||||||
 | 
							BIO_printf(bio_out, "  <illegal flags!>");
 | 
				
			||||||
 | 
						BIO_printf(bio_out, "\n");
 | 
				
			||||||
 | 
						return 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int util_verbose(ENGINE *e, int verbose, BIO *bio_out, const char *indent)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						static const int line_wrap = 78;
 | 
				
			||||||
 | 
						int num;
 | 
				
			||||||
 | 
						int ret = 0;
 | 
				
			||||||
 | 
						char *name = NULL;
 | 
				
			||||||
 | 
						char *desc = NULL;
 | 
				
			||||||
 | 
						int flags;
 | 
				
			||||||
 | 
						int xpos = 0;
 | 
				
			||||||
 | 
						STACK *cmds = NULL;
 | 
				
			||||||
 | 
						if(!ENGINE_ctrl(e, ENGINE_CTRL_HAS_CTRL_FUNCTION, 0, NULL, NULL) ||
 | 
				
			||||||
 | 
								((num = ENGINE_ctrl(e, ENGINE_CTRL_GET_FIRST_CMD_TYPE,
 | 
				
			||||||
 | 
										0, NULL, NULL)) <= 0))
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
 | 
							BIO_printf(bio_out, "%s<no control commands>\n", indent);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cmds = sk_new_null();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(!cmds)
 | 
				
			||||||
 | 
							goto err;
 | 
				
			||||||
 | 
						do {
 | 
				
			||||||
 | 
							int len;
 | 
				
			||||||
 | 
							/* Get the command input flags */
 | 
				
			||||||
 | 
							if((flags = ENGINE_ctrl(e, ENGINE_CTRL_GET_CMD_FLAGS, num,
 | 
				
			||||||
 | 
										NULL, NULL)) < 0)
 | 
				
			||||||
 | 
								goto err;
 | 
				
			||||||
 | 
					                if (!(flags & ENGINE_CMD_FLAG_INTERNAL) || verbose >= 4)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                        /* Get the command name */
 | 
				
			||||||
 | 
					                        if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_LEN_FROM_CMD, num,
 | 
				
			||||||
 | 
					                                NULL, NULL)) <= 0)
 | 
				
			||||||
 | 
					                                goto err;
 | 
				
			||||||
 | 
					                        if((name = OPENSSL_malloc(len + 1)) == NULL)
 | 
				
			||||||
 | 
					                                goto err;
 | 
				
			||||||
 | 
					                        if(ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_FROM_CMD, num, name,
 | 
				
			||||||
 | 
					                                NULL) <= 0)
 | 
				
			||||||
 | 
					                                goto err;
 | 
				
			||||||
 | 
					                        /* Get the command description */
 | 
				
			||||||
 | 
					                        if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_LEN_FROM_CMD, num,
 | 
				
			||||||
 | 
					                                NULL, NULL)) < 0)
 | 
				
			||||||
 | 
					                                goto err;
 | 
				
			||||||
 | 
					                        if(len > 0)
 | 
				
			||||||
 | 
					                                {
 | 
				
			||||||
 | 
					                                if((desc = OPENSSL_malloc(len + 1)) == NULL)
 | 
				
			||||||
 | 
					                                        goto err;
 | 
				
			||||||
 | 
					                                if(ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_FROM_CMD, num, desc,
 | 
				
			||||||
 | 
					                                        NULL) <= 0)
 | 
				
			||||||
 | 
					                                        goto err;
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                        /* Now decide on the output */
 | 
				
			||||||
 | 
					                        if(xpos == 0)
 | 
				
			||||||
 | 
					                                /* Do an indent */
 | 
				
			||||||
 | 
					                                xpos = BIO_printf(bio_out, indent);
 | 
				
			||||||
 | 
					                        else
 | 
				
			||||||
 | 
					                                /* Otherwise prepend a ", " */
 | 
				
			||||||
 | 
					                                xpos += BIO_printf(bio_out, ", ");
 | 
				
			||||||
 | 
					                        if(verbose == 1)
 | 
				
			||||||
 | 
					                                {
 | 
				
			||||||
 | 
					                                /* We're just listing names, comma-delimited */
 | 
				
			||||||
 | 
					                                if((xpos > (int)strlen(indent)) &&
 | 
				
			||||||
 | 
										(xpos + (int)strlen(name) > line_wrap))
 | 
				
			||||||
 | 
					                                        {
 | 
				
			||||||
 | 
					                                        BIO_printf(bio_out, "\n");
 | 
				
			||||||
 | 
					                                        xpos = BIO_printf(bio_out, indent);
 | 
				
			||||||
 | 
					                                        }
 | 
				
			||||||
 | 
					                                xpos += BIO_printf(bio_out, "%s", name);
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                        else
 | 
				
			||||||
 | 
					                                {
 | 
				
			||||||
 | 
					                                /* We're listing names plus descriptions */
 | 
				
			||||||
 | 
					                                BIO_printf(bio_out, "%s: %s\n", name,
 | 
				
			||||||
 | 
					                                        (desc == NULL) ? "<no description>" : desc);
 | 
				
			||||||
 | 
					                                /* ... and sometimes input flags */
 | 
				
			||||||
 | 
					                                if((verbose >= 3) && !util_flags(bio_out, flags,
 | 
				
			||||||
 | 
					                                        indent))
 | 
				
			||||||
 | 
					                                        goto err;
 | 
				
			||||||
 | 
					                                xpos = 0;
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
							OPENSSL_free(name); name = NULL;
 | 
				
			||||||
 | 
							if(desc) { OPENSSL_free(desc); desc = NULL; }
 | 
				
			||||||
 | 
							/* Move to the next command */
 | 
				
			||||||
 | 
							num = ENGINE_ctrl(e, ENGINE_CTRL_GET_NEXT_CMD_TYPE,
 | 
				
			||||||
 | 
										num, NULL, NULL);
 | 
				
			||||||
 | 
							} while(num > 0);
 | 
				
			||||||
 | 
						if(xpos > 0)
 | 
				
			||||||
 | 
							BIO_printf(bio_out, "\n");
 | 
				
			||||||
 | 
						ret = 1;
 | 
				
			||||||
 | 
					err:
 | 
				
			||||||
 | 
						if(cmds) sk_pop_free(cmds, identity);
 | 
				
			||||||
 | 
						if(name) OPENSSL_free(name);
 | 
				
			||||||
 | 
						if(desc) OPENSSL_free(desc);
 | 
				
			||||||
 | 
						return ret;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void util_do_cmds(ENGINE *e, STACK *cmds, BIO *bio_out, const char *indent)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						int loop, res, num = sk_num(cmds);
 | 
				
			||||||
 | 
						if(num < 0)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							BIO_printf(bio_out, "[Error]: internal stack error\n");
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						for(loop = 0; loop < num; loop++)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							char buf[256];
 | 
				
			||||||
 | 
							const char *cmd, *arg;
 | 
				
			||||||
 | 
							cmd = sk_value(cmds, loop);
 | 
				
			||||||
 | 
							res = 1; /* assume success */
 | 
				
			||||||
 | 
							/* Check if this command has no ":arg" */
 | 
				
			||||||
 | 
							if((arg = strstr(cmd, ":")) == NULL)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								if(!ENGINE_ctrl_cmd_string(e, cmd, NULL, 0))
 | 
				
			||||||
 | 
									res = 0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								if((int)(arg - cmd) > 254)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
									BIO_printf(bio_out,"[Error]: command name too long\n");
 | 
				
			||||||
 | 
									return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								memcpy(buf, cmd, (int)(arg - cmd));
 | 
				
			||||||
 | 
								buf[arg-cmd] = '\0';
 | 
				
			||||||
 | 
								arg++; /* Move past the ":" */
 | 
				
			||||||
 | 
								/* Call the command with the argument */
 | 
				
			||||||
 | 
								if(!ENGINE_ctrl_cmd_string(e, buf, arg, 0))
 | 
				
			||||||
 | 
									res = 0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							if(res)
 | 
				
			||||||
 | 
								BIO_printf(bio_out, "[Success]: %s\n", cmd);
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								BIO_printf(bio_out, "[Failure]: %s\n", cmd);
 | 
				
			||||||
 | 
								ERR_print_errors(bio_out);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int MAIN(int, char **);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int MAIN(int argc, char **argv)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						int ret=1,i;
 | 
				
			||||||
 | 
						char **pp;
 | 
				
			||||||
 | 
						int verbose=0, list_cap=0, test_avail=0;
 | 
				
			||||||
 | 
						ENGINE *e;
 | 
				
			||||||
 | 
						STACK *engines = sk_new_null();
 | 
				
			||||||
 | 
						STACK *pre_cmds = sk_new_null();
 | 
				
			||||||
 | 
						STACK *post_cmds = sk_new_null();
 | 
				
			||||||
 | 
						int badops=1;
 | 
				
			||||||
 | 
						BIO *bio_out=NULL;
 | 
				
			||||||
 | 
						const char *indent = "     ";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						apps_startup();
 | 
				
			||||||
 | 
						SSL_load_error_strings();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (bio_err == NULL)
 | 
				
			||||||
 | 
							bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
						bio_out=BIO_new_fp(stdout,BIO_NOCLOSE);
 | 
				
			||||||
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
 | 
						bio_out = BIO_push(tmpbio, bio_out);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						argc--;
 | 
				
			||||||
 | 
						argv++;
 | 
				
			||||||
 | 
						while (argc >= 1)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							if (strncmp(*argv,"-v",2) == 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								if(strspn(*argv + 1, "v") < strlen(*argv + 1))
 | 
				
			||||||
 | 
									goto skip_arg_loop;
 | 
				
			||||||
 | 
								if((verbose=strlen(*argv + 1)) > 4)
 | 
				
			||||||
 | 
									goto skip_arg_loop;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-c") == 0)
 | 
				
			||||||
 | 
								list_cap=1;
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-t") == 0)
 | 
				
			||||||
 | 
								test_avail=1;
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-pre") == 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								argc--; argv++;
 | 
				
			||||||
 | 
								sk_push(pre_cmds,*argv);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-post") == 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								argc--; argv++;
 | 
				
			||||||
 | 
								sk_push(post_cmds,*argv);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							else if ((strncmp(*argv,"-h",2) == 0) ||
 | 
				
			||||||
 | 
									(strcmp(*argv,"-?") == 0))
 | 
				
			||||||
 | 
								goto skip_arg_loop;
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								sk_push(engines,*argv);
 | 
				
			||||||
 | 
							argc--;
 | 
				
			||||||
 | 
							argv++;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						/* Looks like everything went OK */
 | 
				
			||||||
 | 
						badops = 0;
 | 
				
			||||||
 | 
					skip_arg_loop:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (badops)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							for (pp=engine_usage; (*pp != NULL); pp++)
 | 
				
			||||||
 | 
								BIO_printf(bio_err,"%s",*pp);
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (sk_num(engines) == 0)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							for(e = ENGINE_get_first(); e != NULL; e = ENGINE_get_next(e))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								sk_push(engines,(char *)ENGINE_get_id(e));
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (i=0; i<sk_num(engines); i++)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							const char *id = sk_value(engines,i);
 | 
				
			||||||
 | 
							if ((e = ENGINE_by_id(id)) != NULL)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								const char *name = ENGINE_get_name(e);
 | 
				
			||||||
 | 
								/* Do "id" first, then "name". Easier to auto-parse. */
 | 
				
			||||||
 | 
								BIO_printf(bio_out, "(%s) %s\n", id, name);
 | 
				
			||||||
 | 
								util_do_cmds(e, pre_cmds, bio_out, indent);
 | 
				
			||||||
 | 
								if (strcmp(ENGINE_get_id(e), id) != 0)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
									BIO_printf(bio_out, "Loaded: (%s) %s\n",
 | 
				
			||||||
 | 
										ENGINE_get_id(e), ENGINE_get_name(e));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								if (list_cap)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
									int cap_size = 256;
 | 
				
			||||||
 | 
									char *cap_buf = NULL;
 | 
				
			||||||
 | 
									int k,n;
 | 
				
			||||||
 | 
									const int *nids;
 | 
				
			||||||
 | 
									ENGINE_CIPHERS_PTR fn_c;
 | 
				
			||||||
 | 
									ENGINE_DIGESTS_PTR fn_d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if (ENGINE_get_RSA(e) != NULL
 | 
				
			||||||
 | 
										&& !append_buf(&cap_buf, "RSA",
 | 
				
			||||||
 | 
											&cap_size, 256))
 | 
				
			||||||
 | 
										goto end;
 | 
				
			||||||
 | 
									if (ENGINE_get_DSA(e) != NULL
 | 
				
			||||||
 | 
										&& !append_buf(&cap_buf, "DSA",
 | 
				
			||||||
 | 
											&cap_size, 256))
 | 
				
			||||||
 | 
										goto end;
 | 
				
			||||||
 | 
									if (ENGINE_get_DH(e) != NULL
 | 
				
			||||||
 | 
										&& !append_buf(&cap_buf, "DH",
 | 
				
			||||||
 | 
											&cap_size, 256))
 | 
				
			||||||
 | 
										goto end;
 | 
				
			||||||
 | 
									if (ENGINE_get_RAND(e) != NULL
 | 
				
			||||||
 | 
										&& !append_buf(&cap_buf, "RAND",
 | 
				
			||||||
 | 
											&cap_size, 256))
 | 
				
			||||||
 | 
										goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									fn_c = ENGINE_get_ciphers(e);
 | 
				
			||||||
 | 
									if(!fn_c) goto skip_ciphers;
 | 
				
			||||||
 | 
									n = fn_c(e, NULL, &nids, 0);
 | 
				
			||||||
 | 
									for(k=0 ; k < n ; ++k)
 | 
				
			||||||
 | 
										if(!append_buf(&cap_buf,
 | 
				
			||||||
 | 
											       OBJ_nid2sn(nids[k]),
 | 
				
			||||||
 | 
											       &cap_size, 256))
 | 
				
			||||||
 | 
											goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					skip_ciphers:
 | 
				
			||||||
 | 
									fn_d = ENGINE_get_digests(e);
 | 
				
			||||||
 | 
									if(!fn_d) goto skip_digests;
 | 
				
			||||||
 | 
									n = fn_d(e, NULL, &nids, 0);
 | 
				
			||||||
 | 
									for(k=0 ; k < n ; ++k)
 | 
				
			||||||
 | 
										if(!append_buf(&cap_buf,
 | 
				
			||||||
 | 
											       OBJ_nid2sn(nids[k]),
 | 
				
			||||||
 | 
											       &cap_size, 256))
 | 
				
			||||||
 | 
											goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					skip_digests:
 | 
				
			||||||
 | 
									if (cap_buf && (*cap_buf != '\0'))
 | 
				
			||||||
 | 
										BIO_printf(bio_out, " [%s]\n", cap_buf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									OPENSSL_free(cap_buf);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								if(test_avail)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
									BIO_printf(bio_out, "%s", indent);
 | 
				
			||||||
 | 
									if (ENGINE_init(e))
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
										BIO_printf(bio_out, "[ available ]\n");
 | 
				
			||||||
 | 
										util_do_cmds(e, post_cmds, bio_out, indent);
 | 
				
			||||||
 | 
										ENGINE_finish(e);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
										BIO_printf(bio_out, "[ unavailable ]\n");
 | 
				
			||||||
 | 
										ERR_print_errors_fp(stdout);
 | 
				
			||||||
 | 
										ERR_clear_error();
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								if((verbose > 0) && !util_verbose(e, verbose, bio_out, indent))
 | 
				
			||||||
 | 
									goto end;
 | 
				
			||||||
 | 
								ENGINE_free(e);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								ERR_print_errors(bio_err);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ret=0;
 | 
				
			||||||
 | 
					end:
 | 
				
			||||||
 | 
						ERR_print_errors(bio_err);
 | 
				
			||||||
 | 
						sk_pop_free(engines, identity);
 | 
				
			||||||
 | 
						sk_pop_free(pre_cmds, identity);
 | 
				
			||||||
 | 
						sk_pop_free(post_cmds, identity);
 | 
				
			||||||
 | 
						if (bio_out != NULL) BIO_free_all(bio_out);
 | 
				
			||||||
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# if PEDANTIC
 | 
				
			||||||
 | 
					static void *dummy=&dummy;
 | 
				
			||||||
 | 
					# endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@@ -91,7 +91,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		out=BIO_new(BIO_s_file());
 | 
							out=BIO_new(BIO_s_file());
 | 
				
			||||||
		if ((out != NULL) && BIO_set_fp(out,stdout,BIO_NOCLOSE))
 | 
							if ((out != NULL) && BIO_set_fp(out,stdout,BIO_NOCLOSE))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
								BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
			out = BIO_push(tmpbio, out);
 | 
								out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -121,5 +121,6 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			ret++;
 | 
								ret++;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										39
									
								
								apps/gendh.c
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								apps/gendh.c
									
									
									
									
									
								
							@@ -57,7 +57,7 @@
 | 
				
			|||||||
 * [including the GNU Public Licence.]
 | 
					 * [including the GNU Public Licence.]
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_DH
 | 
					#ifndef OPENSSL_NO_DH
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <sys/types.h>
 | 
					#include <sys/types.h>
 | 
				
			||||||
@@ -70,7 +70,6 @@
 | 
				
			|||||||
#include <openssl/dh.h>
 | 
					#include <openssl/dh.h>
 | 
				
			||||||
#include <openssl/x509.h>
 | 
					#include <openssl/x509.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEFBITS	512
 | 
					#define DEFBITS	512
 | 
				
			||||||
#undef PROG
 | 
					#undef PROG
 | 
				
			||||||
@@ -82,13 +81,17 @@ int MAIN(int, char **);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int MAIN(int argc, char **argv)
 | 
					int MAIN(int argc, char **argv)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	ENGINE *e = NULL;
 | 
						ENGINE *e = NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	DH *dh=NULL;
 | 
						DH *dh=NULL;
 | 
				
			||||||
	int ret=1,num=DEFBITS;
 | 
						int ret=1,num=DEFBITS;
 | 
				
			||||||
	int g=2;
 | 
						int g=2;
 | 
				
			||||||
	char *outfile=NULL;
 | 
						char *outfile=NULL;
 | 
				
			||||||
	char *inrand=NULL;
 | 
						char *inrand=NULL;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	char *engine=NULL;
 | 
						char *engine=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	BIO *out=NULL;
 | 
						BIO *out=NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apps_startup();
 | 
						apps_startup();
 | 
				
			||||||
@@ -97,6 +100,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	argv++;
 | 
						argv++;
 | 
				
			||||||
	argc--;
 | 
						argc--;
 | 
				
			||||||
	for (;;)
 | 
						for (;;)
 | 
				
			||||||
@@ -113,11 +119,13 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			g=3; */
 | 
								g=3; */
 | 
				
			||||||
		else if (strcmp(*argv,"-5") == 0)
 | 
							else if (strcmp(*argv,"-5") == 0)
 | 
				
			||||||
			g=5;
 | 
								g=5;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
							else if (strcmp(*argv,"-engine") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			engine= *(++argv);
 | 
								engine= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
							else if (strcmp(*argv,"-rand") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
@@ -136,30 +144,18 @@ bad:
 | 
				
			|||||||
		BIO_printf(bio_err," -2        - use 2 as the generator value\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," -3        - use 3 as the generator value\n"); */
 | 
				
			||||||
		BIO_printf(bio_err," -5        - use 5 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");
 | 
							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," -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,"           - load the file (or the files in the directory) into\n");
 | 
				
			||||||
		BIO_printf(bio_err,"             the random number generator\n");
 | 
							BIO_printf(bio_err,"             the random number generator\n");
 | 
				
			||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
					 | 
				
			||||||
				engine);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	out=BIO_new(BIO_s_file());
 | 
						out=BIO_new(BIO_s_file());
 | 
				
			||||||
	if (out == NULL)
 | 
						if (out == NULL)
 | 
				
			||||||
@@ -171,7 +167,7 @@ bad:
 | 
				
			|||||||
	if (outfile == NULL)
 | 
						if (outfile == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
							BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		out = BIO_push(tmpbio, out);
 | 
							out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -211,7 +207,8 @@ end:
 | 
				
			|||||||
		ERR_print_errors(bio_err);
 | 
							ERR_print_errors(bio_err);
 | 
				
			||||||
	if (out != NULL) BIO_free_all(out);
 | 
						if (out != NULL) BIO_free_all(out);
 | 
				
			||||||
	if (dh != NULL) DH_free(dh);
 | 
						if (dh != NULL) DH_free(dh);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void MS_CALLBACK dh_cb(int p, int n, void *arg)
 | 
					static void MS_CALLBACK dh_cb(int p, int n, void *arg)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,7 +56,7 @@
 | 
				
			|||||||
 * [including the GNU Public Licence.]
 | 
					 * [including the GNU Public Licence.]
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <sys/types.h>
 | 
					#include <sys/types.h>
 | 
				
			||||||
@@ -68,7 +68,6 @@
 | 
				
			|||||||
#include <openssl/dsa.h>
 | 
					#include <openssl/dsa.h>
 | 
				
			||||||
#include <openssl/x509.h>
 | 
					#include <openssl/x509.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEFBITS	512
 | 
					#define DEFBITS	512
 | 
				
			||||||
#undef PROG
 | 
					#undef PROG
 | 
				
			||||||
@@ -78,15 +77,19 @@ int MAIN(int, char **);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int MAIN(int argc, char **argv)
 | 
					int MAIN(int argc, char **argv)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	ENGINE *e = NULL;
 | 
						ENGINE *e = NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	DSA *dsa=NULL;
 | 
						DSA *dsa=NULL;
 | 
				
			||||||
	int ret=1;
 | 
						int ret=1;
 | 
				
			||||||
	char *outfile=NULL;
 | 
						char *outfile=NULL;
 | 
				
			||||||
	char *inrand=NULL,*dsaparams=NULL;
 | 
						char *inrand=NULL,*dsaparams=NULL;
 | 
				
			||||||
	char *passargout = NULL, *passout = NULL;
 | 
						char *passargout = NULL, *passout = NULL;
 | 
				
			||||||
	BIO *out=NULL,*in=NULL;
 | 
						BIO *out=NULL,*in=NULL;
 | 
				
			||||||
	EVP_CIPHER *enc=NULL;
 | 
						const EVP_CIPHER *enc=NULL;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	char *engine=NULL;
 | 
						char *engine=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apps_startup();
 | 
						apps_startup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -94,6 +97,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	argv++;
 | 
						argv++;
 | 
				
			||||||
	argc--;
 | 
						argc--;
 | 
				
			||||||
	for (;;)
 | 
						for (;;)
 | 
				
			||||||
@@ -109,11 +115,13 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			passargout= *(++argv);
 | 
								passargout= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
							else if (strcmp(*argv,"-engine") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			engine= *(++argv);
 | 
								engine= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
							else if (strcmp(*argv,"-rand") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
@@ -121,15 +129,23 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		else if (strcmp(*argv,"-") == 0)
 | 
							else if (strcmp(*argv,"-") == 0)
 | 
				
			||||||
			goto bad;
 | 
								goto bad;
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
		else if (strcmp(*argv,"-des") == 0)
 | 
							else if (strcmp(*argv,"-des") == 0)
 | 
				
			||||||
			enc=EVP_des_cbc();
 | 
								enc=EVP_des_cbc();
 | 
				
			||||||
		else if (strcmp(*argv,"-des3") == 0)
 | 
							else if (strcmp(*argv,"-des3") == 0)
 | 
				
			||||||
			enc=EVP_des_ede3_cbc();
 | 
								enc=EVP_des_ede3_cbc();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_IDEA
 | 
					#ifndef OPENSSL_NO_IDEA
 | 
				
			||||||
		else if (strcmp(*argv,"-idea") == 0)
 | 
							else if (strcmp(*argv,"-idea") == 0)
 | 
				
			||||||
			enc=EVP_idea_cbc();
 | 
								enc=EVP_idea_cbc();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_AES
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-aes128") == 0)
 | 
				
			||||||
 | 
								enc=EVP_aes_128_cbc();
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-aes192") == 0)
 | 
				
			||||||
 | 
								enc=EVP_aes_192_cbc();
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-aes256") == 0)
 | 
				
			||||||
 | 
								enc=EVP_aes_256_cbc();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		else if (**argv != '-' && dsaparams == NULL)
 | 
							else if (**argv != '-' && dsaparams == NULL)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@@ -146,14 +162,20 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
bad:
 | 
					bad:
 | 
				
			||||||
		BIO_printf(bio_err,"usage: gendsa [args] dsaparam-file\n");
 | 
							BIO_printf(bio_err,"usage: gendsa [args] dsaparam-file\n");
 | 
				
			||||||
		BIO_printf(bio_err," -out file - output the key to 'file'\n");
 | 
							BIO_printf(bio_err," -out file - output the key to 'file'\n");
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
		BIO_printf(bio_err," -des      - encrypt the generated key with DES in cbc mode\n");
 | 
							BIO_printf(bio_err," -des      - encrypt the generated key with DES in cbc mode\n");
 | 
				
			||||||
		BIO_printf(bio_err," -des3     - encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
 | 
							BIO_printf(bio_err," -des3     - encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_IDEA
 | 
					#ifndef OPENSSL_NO_IDEA
 | 
				
			||||||
		BIO_printf(bio_err," -idea     - encrypt the generated key with IDEA in cbc mode\n");
 | 
							BIO_printf(bio_err," -idea     - encrypt the generated key with IDEA in cbc mode\n");
 | 
				
			||||||
#endif
 | 
					#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_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...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
							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,"           - load the file (or the files in the directory) into\n");
 | 
				
			||||||
		BIO_printf(bio_err,"             the random number generator\n");
 | 
							BIO_printf(bio_err,"             the random number generator\n");
 | 
				
			||||||
@@ -162,23 +184,9 @@ bad:
 | 
				
			|||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
					 | 
				
			||||||
				engine);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
 | 
						if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
 | 
				
			||||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
							BIO_printf(bio_err, "Error getting password\n");
 | 
				
			||||||
@@ -207,7 +215,7 @@ bad:
 | 
				
			|||||||
	if (outfile == NULL)
 | 
						if (outfile == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
							BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		out = BIO_push(tmpbio, out);
 | 
							out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -247,6 +255,7 @@ end:
 | 
				
			|||||||
	if (out != NULL) BIO_free_all(out);
 | 
						if (out != NULL) BIO_free_all(out);
 | 
				
			||||||
	if (dsa != NULL) DSA_free(dsa);
 | 
						if (dsa != NULL) DSA_free(dsa);
 | 
				
			||||||
	if(passout) OPENSSL_free(passout);
 | 
						if(passout) OPENSSL_free(passout);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,7 +56,7 @@
 | 
				
			|||||||
 * [including the GNU Public Licence.]
 | 
					 * [including the GNU Public Licence.]
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_RSA
 | 
					#ifndef OPENSSL_NO_RSA
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <sys/types.h>
 | 
					#include <sys/types.h>
 | 
				
			||||||
@@ -69,7 +69,7 @@
 | 
				
			|||||||
#include <openssl/evp.h>
 | 
					#include <openssl/evp.h>
 | 
				
			||||||
#include <openssl/x509.h>
 | 
					#include <openssl/x509.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					#include <openssl/rand.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEFBITS	512
 | 
					#define DEFBITS	512
 | 
				
			||||||
#undef PROG
 | 
					#undef PROG
 | 
				
			||||||
@@ -81,16 +81,20 @@ int MAIN(int, char **);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int MAIN(int argc, char **argv)
 | 
					int MAIN(int argc, char **argv)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	ENGINE *e = NULL;
 | 
						ENGINE *e = NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	int ret=1;
 | 
						int ret=1;
 | 
				
			||||||
	RSA *rsa=NULL;
 | 
						RSA *rsa=NULL;
 | 
				
			||||||
	int i,num=DEFBITS;
 | 
						int i,num=DEFBITS;
 | 
				
			||||||
	long l;
 | 
						long l;
 | 
				
			||||||
	EVP_CIPHER *enc=NULL;
 | 
						const EVP_CIPHER *enc=NULL;
 | 
				
			||||||
	unsigned long f4=RSA_F4;
 | 
						unsigned long f4=RSA_F4;
 | 
				
			||||||
	char *outfile=NULL;
 | 
						char *outfile=NULL;
 | 
				
			||||||
	char *passargout = NULL, *passout = NULL;
 | 
						char *passargout = NULL, *passout = NULL;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	char *engine=NULL;
 | 
						char *engine=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	char *inrand=NULL;
 | 
						char *inrand=NULL;
 | 
				
			||||||
	BIO *out=NULL;
 | 
						BIO *out=NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -99,6 +103,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	if (bio_err == NULL)
 | 
						if (bio_err == NULL)
 | 
				
			||||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto err;
 | 
				
			||||||
	if ((out=BIO_new(BIO_s_file())) == NULL)
 | 
						if ((out=BIO_new(BIO_s_file())) == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_printf(bio_err,"unable to create BIO for output\n");
 | 
							BIO_printf(bio_err,"unable to create BIO for output\n");
 | 
				
			||||||
@@ -119,25 +126,35 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			f4=3;
 | 
								f4=3;
 | 
				
			||||||
		else if (strcmp(*argv,"-F4") == 0 || strcmp(*argv,"-f4") == 0)
 | 
							else if (strcmp(*argv,"-F4") == 0 || strcmp(*argv,"-f4") == 0)
 | 
				
			||||||
			f4=RSA_F4;
 | 
								f4=RSA_F4;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
							else if (strcmp(*argv,"-engine") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			engine= *(++argv);
 | 
								engine= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
							else if (strcmp(*argv,"-rand") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			inrand= *(++argv);
 | 
								inrand= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
		else if (strcmp(*argv,"-des") == 0)
 | 
							else if (strcmp(*argv,"-des") == 0)
 | 
				
			||||||
			enc=EVP_des_cbc();
 | 
								enc=EVP_des_cbc();
 | 
				
			||||||
		else if (strcmp(*argv,"-des3") == 0)
 | 
							else if (strcmp(*argv,"-des3") == 0)
 | 
				
			||||||
			enc=EVP_des_ede3_cbc();
 | 
								enc=EVP_des_ede3_cbc();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_IDEA
 | 
					#ifndef OPENSSL_NO_IDEA
 | 
				
			||||||
		else if (strcmp(*argv,"-idea") == 0)
 | 
							else if (strcmp(*argv,"-idea") == 0)
 | 
				
			||||||
			enc=EVP_idea_cbc();
 | 
								enc=EVP_idea_cbc();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_AES
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-aes128") == 0)
 | 
				
			||||||
 | 
								enc=EVP_aes_128_cbc();
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-aes192") == 0)
 | 
				
			||||||
 | 
								enc=EVP_aes_192_cbc();
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-aes256") == 0)
 | 
				
			||||||
 | 
								enc=EVP_aes_256_cbc();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		else if (strcmp(*argv,"-passout") == 0)
 | 
							else if (strcmp(*argv,"-passout") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@@ -155,14 +172,20 @@ bad:
 | 
				
			|||||||
		BIO_printf(bio_err,"usage: genrsa [args] [numbits]\n");
 | 
							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," -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");
 | 
							BIO_printf(bio_err," -des3           encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
 | 
				
			||||||
#ifndef NO_IDEA
 | 
					#ifndef OPENSSL_NO_IDEA
 | 
				
			||||||
		BIO_printf(bio_err," -idea           encrypt the generated key with IDEA in cbc mode\n");
 | 
							BIO_printf(bio_err," -idea           encrypt the generated key with IDEA in cbc mode\n");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_AES
 | 
				
			||||||
 | 
							BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
 | 
				
			||||||
 | 
							BIO_printf(bio_err,"                 encrypt PEM output with cbc aes\n");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		BIO_printf(bio_err," -out file       output the key to 'file\n");
 | 
							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," -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," -f4             use F4 (0x10001) for the E value\n");
 | 
				
			||||||
		BIO_printf(bio_err," -3              use 3 for the E value\n");
 | 
							BIO_printf(bio_err," -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");
 | 
							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," -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,"                 load the file (or the files in the directory) into\n");
 | 
				
			||||||
		BIO_printf(bio_err,"                 the random number generator\n");
 | 
							BIO_printf(bio_err,"                 the random number generator\n");
 | 
				
			||||||
@@ -176,28 +199,14 @@ bad:
 | 
				
			|||||||
		goto err;
 | 
							goto err;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
					 | 
				
			||||||
				engine);
 | 
					 | 
				
			||||||
			goto err;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			goto err;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (outfile == NULL)
 | 
						if (outfile == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
							BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		out = BIO_push(tmpbio, out);
 | 
							out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -242,8 +251,14 @@ bad:
 | 
				
			|||||||
		l+=rsa->e->d[i];
 | 
							l+=rsa->e->d[i];
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	BIO_printf(bio_err,"e is %ld (0x%lX)\n",l,l);
 | 
						BIO_printf(bio_err,"e is %ld (0x%lX)\n",l,l);
 | 
				
			||||||
	if (!PEM_write_bio_RSAPrivateKey(out,rsa,enc,NULL,0,NULL, passout))
 | 
						{
 | 
				
			||||||
 | 
						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;
 | 
							goto err;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret=0;
 | 
						ret=0;
 | 
				
			||||||
err:
 | 
					err:
 | 
				
			||||||
@@ -252,7 +267,8 @@ err:
 | 
				
			|||||||
	if(passout) OPENSSL_free(passout);
 | 
						if(passout) OPENSSL_free(passout);
 | 
				
			||||||
	if (ret != 0)
 | 
						if (ret != 0)
 | 
				
			||||||
		ERR_print_errors(bio_err);
 | 
							ERR_print_errors(bio_err);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void MS_CALLBACK genrsa_cb(int p, int n, void *arg)
 | 
					static void MS_CALLBACK genrsa_cb(int p, int n, void *arg)
 | 
				
			||||||
@@ -269,7 +285,7 @@ static void MS_CALLBACK genrsa_cb(int p, int n, void *arg)
 | 
				
			|||||||
	p=n;
 | 
						p=n;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#else /* !NO_RSA */
 | 
					#else /* !OPENSSL_NO_RSA */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# if PEDANTIC
 | 
					# if PEDANTIC
 | 
				
			||||||
static void *dummy=&dummy;
 | 
					static void *dummy=&dummy;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,22 +15,10 @@ $!
 | 
				
			|||||||
$!  It was written so it would try to determine what "C" compiler to
 | 
					$!  It was written so it would try to determine what "C" compiler to
 | 
				
			||||||
$!  use or you can specify which "C" compiler to use.
 | 
					$!  use or you can specify which "C" compiler to use.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Specify RSAREF as P1 to compile with the RSAREF library instead of
 | 
					$!  Specify DEBUG or NODEBUG as P1 to compile with or without debugger
 | 
				
			||||||
$!  the regular one.  If you specify NORSAREF it will compile with the
 | 
					 | 
				
			||||||
$!  regular RSAREF routines.  (Note: If you are in the United States
 | 
					 | 
				
			||||||
$!  you MUST compile with RSAREF unless you have a license from RSA).
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!  Note: The RSAREF libraries are NOT INCLUDED and you have to
 | 
					 | 
				
			||||||
$!        download it from "ftp://ftp.rsa.com/rsaref".  You have to
 | 
					 | 
				
			||||||
$!        get the ".tar-Z" file as the ".zip" file dosen't have the
 | 
					 | 
				
			||||||
$!        directory structure stored.  You have to extract the file
 | 
					 | 
				
			||||||
$!        into the [.RSAREF] directory under the root directory as that
 | 
					 | 
				
			||||||
$!        is where the scripts will look for the files.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!  Specify DEBUG or NODEBUG as P2 to compile with or without debugger
 | 
					 | 
				
			||||||
$!  information.
 | 
					$!  information.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Specify which compiler at P3 to try to compile under.
 | 
					$!  Specify which compiler at P2 to try to compile under.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!	   VAXC	 For VAX C.
 | 
					$!	   VAXC	 For VAX C.
 | 
				
			||||||
$!	   DECC	 For DEC C.
 | 
					$!	   DECC	 For DEC C.
 | 
				
			||||||
@@ -39,15 +27,16 @@ $!
 | 
				
			|||||||
$!  If you don't speficy a compiler, it will try to determine which
 | 
					$!  If you don't speficy a compiler, it will try to determine which
 | 
				
			||||||
$!  "C" compiler to use.
 | 
					$!  "C" compiler to use.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  P4, if defined, sets a TCP/IP library to use, through one of the following
 | 
					$!  P3, if defined, sets a TCP/IP library to use, through one of the following
 | 
				
			||||||
$!  keywords:
 | 
					$!  keywords:
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!	UCX		for UCX
 | 
					$!	UCX		for UCX
 | 
				
			||||||
$!	SOCKETSHR	for SOCKETSHR+NETLIB
 | 
					$!	SOCKETSHR	for SOCKETSHR+NETLIB
 | 
				
			||||||
 | 
					$!	TCPIP		for TCPIP (post UCX)
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  P5, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
 | 
					$!  P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  P6, if defined, sets a choice of programs to compile.
 | 
					$!  P5, if defined, sets a choice of programs to compile.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$! Define A TCP/IP Library That We Will Need To Link To.
 | 
					$! Define A TCP/IP Library That We Will Need To Link To.
 | 
				
			||||||
@@ -100,10 +89,6 @@ $! Define The CRYPTO Library.
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$ CRYPTO_LIB := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]LIBCRYPTO.OLB
 | 
					$ CRYPTO_LIB := SYS$DISK:[-.'ARCH'.EXE.CRYPTO]LIBCRYPTO.OLB
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$! Define The RSAREF Library.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$ RSAREF_LIB := SYS$DISK:[-.'ARCH'.EXE.RSAREF]LIBRSAGLUE.OLB
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$! Define The SSL Library.
 | 
					$! Define The SSL Library.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ SSL_LIB := SYS$DISK:[-.'ARCH'.EXE.SSL]LIBSSL.OLB
 | 
					$ SSL_LIB := SYS$DISK:[-.'ARCH'.EXE.SSL]LIBSSL.OLB
 | 
				
			||||||
@@ -157,13 +142,13 @@ $ LIB_FILES = "VERIFY;ASN1PARS;REQ;DGST;DH;DHPARAM;ENC;PASSWD;GENDH;ERRSTR;"+-
 | 
				
			|||||||
	      "RSA;RSAUTL;DSA;DSAPARAM;"+-
 | 
						      "RSA;RSAUTL;DSA;DSAPARAM;"+-
 | 
				
			||||||
	      "X509;GENRSA;GENDSA;S_SERVER;S_CLIENT;SPEED;"+-
 | 
						      "X509;GENRSA;GENDSA;S_SERVER;S_CLIENT;SPEED;"+-
 | 
				
			||||||
	      "S_TIME;APPS;S_CB;S_SOCKET;APP_RAND;VERSION;SESS_ID;"+-
 | 
						      "S_TIME;APPS;S_CB;S_SOCKET;APP_RAND;VERSION;SESS_ID;"+-
 | 
				
			||||||
	      "CIPHERS;NSEQ;PKCS12;PKCS8;SPKAC;SMIME;RAND"
 | 
						      "CIPHERS;NSEQ;PKCS12;PKCS8;SPKAC;SMIME;RAND;ENGINE;OCSP"
 | 
				
			||||||
$ APP_FILES := OPENSSL,'OBJ_DIR'VERIFY.OBJ,ASN1PARS.OBJ,REQ.OBJ,DGST.OBJ,DH.OBJ,DHPARAM.OBJ,ENC.OBJ,PASSWD.OBJ,GENDH.OBJ,ERRSTR.OBJ,-
 | 
					$ APP_FILES := OPENSSL,'OBJ_DIR'VERIFY.OBJ,ASN1PARS.OBJ,REQ.OBJ,DGST.OBJ,DH.OBJ,DHPARAM.OBJ,ENC.OBJ,PASSWD.OBJ,GENDH.OBJ,ERRSTR.OBJ,-
 | 
				
			||||||
	       CA.OBJ,PKCS7.OBJ,CRL2P7.OBJ,CRL.OBJ,-
 | 
						       CA.OBJ,PKCS7.OBJ,CRL2P7.OBJ,CRL.OBJ,-
 | 
				
			||||||
	       RSA.OBJ,RSAUTL.OBJ,DSA.OBJ,DSAPARAM.OBJ,-
 | 
						       RSA.OBJ,RSAUTL.OBJ,DSA.OBJ,DSAPARAM.OBJ,-
 | 
				
			||||||
	       X509.OBJ,GENRSA.OBJ,GENDSA.OBJ,S_SERVER.OBJ,S_CLIENT.OBJ,SPEED.OBJ,-
 | 
						       X509.OBJ,GENRSA.OBJ,GENDSA.OBJ,S_SERVER.OBJ,S_CLIENT.OBJ,SPEED.OBJ,-
 | 
				
			||||||
	       S_TIME.OBJ,APPS.OBJ,S_CB.OBJ,S_SOCKET.OBJ,APP_RAND.OBJ,VERSION.OBJ,SESS_ID.OBJ,-
 | 
						       S_TIME.OBJ,APPS.OBJ,S_CB.OBJ,S_SOCKET.OBJ,APP_RAND.OBJ,VERSION.OBJ,SESS_ID.OBJ,-
 | 
				
			||||||
	       CIPHERS.OBJ,NSEQ.OBJ,PKCS12.OBJ,PKCS8.OBJ,SPKAC.OBJ,SMIME.OBJ,RAND.OBJ
 | 
						       CIPHERS.OBJ,NSEQ.OBJ,PKCS12.OBJ,PKCS8.OBJ,SPKAC.OBJ,SMIME.OBJ,RAND.OBJ,ENGINE.OBJ,OCSP.OBJ
 | 
				
			||||||
$ TCPIP_PROGRAMS = ",,"
 | 
					$ TCPIP_PROGRAMS = ",,"
 | 
				
			||||||
$ IF COMPILER .EQS. "VAXC" THEN -
 | 
					$ IF COMPILER .EQS. "VAXC" THEN -
 | 
				
			||||||
     TCPIP_PROGRAMS = ",OPENSSL,"
 | 
					     TCPIP_PROGRAMS = ",OPENSSL,"
 | 
				
			||||||
@@ -181,7 +166,7 @@ $!     TCPIP_PROGRAMS = ",S_SERVER,S_CLIENT,SESS_ID,CIPHERS,S_TIME,"
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$! Setup exceptional compilations
 | 
					$! Setup exceptional compilations
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ COMPILEWITH_CC2 = ",S_SOCKET,S_SERVER,S_CLIENT,"
 | 
					$ COMPILEWITH_CC2 = ",S_SERVER,S_CLIENT,"
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ PHASE := LIB
 | 
					$ PHASE := LIB
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
@@ -292,73 +277,31 @@ $   WRITE SYS$OUTPUT FILE_NAME," needs a TCP/IP library.  Can't link.  Skipping.
 | 
				
			|||||||
$   GOTO NEXT_FILE
 | 
					$   GOTO NEXT_FILE
 | 
				
			||||||
$ ENDIF
 | 
					$ ENDIF
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$! Link The Program, Check To See If We Need To Link With RSAREF Or Not.
 | 
					$! Link The Program.
 | 
				
			||||||
 | 
					$! Check To See If We Are To Link With A Specific TCP/IP Library.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ IF (RSAREF.EQS."TRUE")
 | 
					$ IF (TCPIP_LIB.NES."")
 | 
				
			||||||
$ THEN
 | 
					$ THEN
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Check To See If We Are To Link With A Specific TCP/IP Library.
 | 
					$! Don't Link With The RSAREF Routines And TCP/IP Library.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$   IF (TCPIP_LIB.NES."")
 | 
					$   LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
 | 
				
			||||||
$   THEN
 | 
						'OBJECT_FILE''EXTRA_OBJ', -
 | 
				
			||||||
$!
 | 
					        'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
 | 
				
			||||||
$!    Link With The RSAREF Library And A Specific TCP/IP Library.
 | 
					        'TCPIP_LIB','OPT_FILE'/OPTION
 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$     LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
 | 
					 | 
				
			||||||
	  'OBJECT_FILE''EXTRA_OBJ', -
 | 
					 | 
				
			||||||
          'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY,'RSAREF_LIB'/LIBRARY, -
 | 
					 | 
				
			||||||
          'TCPIP_LIB','OPT_FILE'/OPTION
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!  Else...
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$   ELSE
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!    Link With The RSAREF Library And NO TCP/IP Library.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$     LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
 | 
					 | 
				
			||||||
	  'OBJECT_FILE''EXTRA_OBJ', -
 | 
					 | 
				
			||||||
          'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY,'RSAREF_LIB'/LIBRARY, -
 | 
					 | 
				
			||||||
          'OPT_FILE'/OPTION
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!  End The TCP/IP Library Check.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$   ENDIF
 | 
					 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$! Else...
 | 
					$! Else...
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ ELSE
 | 
					$ ELSE
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Don't Link With The RSAREF Routines.
 | 
					$! Don't Link With The RSAREF Routines And Link With A TCP/IP Library.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
 | 
					$   LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
 | 
				
			||||||
 | 
						'OBJECT_FILE''EXTRA_OBJ', -
 | 
				
			||||||
 | 
					        'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
 | 
				
			||||||
 | 
					        'OPT_FILE'/OPTION
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Check To See If We Are To Link With A Specific TCP/IP Library.
 | 
					$! End The TCP/IP Library Check.
 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$   IF (TCPIP_LIB.NES."")
 | 
					 | 
				
			||||||
$   THEN
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!    Don't Link With The RSAREF Routines And TCP/IP Library.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$       LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
 | 
					 | 
				
			||||||
	    'OBJECT_FILE''EXTRA_OBJ', -
 | 
					 | 
				
			||||||
            'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
 | 
					 | 
				
			||||||
            'TCPIP_LIB','OPT_FILE'/OPTION
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!  Else...
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$   ELSE
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!    Don't Link With The RSAREF Routines And Link With A TCP/IP Library.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$       LINK/'DEBUGGER'/'TRACEBACK' /EXE='EXE_FILE' -
 | 
					 | 
				
			||||||
	    'OBJECT_FILE''EXTRA_OBJ', -
 | 
					 | 
				
			||||||
            'SSL_LIB'/LIBRARY,'CRYPTO_LIB'/LIBRARY, -
 | 
					 | 
				
			||||||
            'OPT_FILE'/OPTION
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!  End The TCP/IP Library Check.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$   ENDIF
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$! End The RSAREF Link Check.
 | 
					 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ ENDIF
 | 
					$ ENDIF
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
@@ -525,32 +468,6 @@ $! End The Crypto Library Check.
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$ ENDIF
 | 
					$ ENDIF
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$! See If We Need The RSAREF Library.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$ IF (RSAREF.EQS."TRUE")
 | 
					 | 
				
			||||||
$ THEN
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!  Look For The Library LIBRSAGLUE.OLB.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$   IF (F$SEARCH(RSAREF_LIB).EQS."")
 | 
					 | 
				
			||||||
$   THEN
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!    Tell The User We Can't Find The LIBRSAGLUE.OLB Library.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$     WRITE SYS$OUTPUT ""
 | 
					 | 
				
			||||||
$     WRITE SYS$OUTPUT "Can't Find The Library ",RSAREF_LIB,"."
 | 
					 | 
				
			||||||
$     WRITE SYS$OUTPUT "We Can't Link Without It."
 | 
					 | 
				
			||||||
$     WRITE SYS$OUTPUT ""
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!    Since We Can't Link Without It, Exit.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$     EXIT
 | 
					 | 
				
			||||||
$   ENDIF
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$! End The RSAREF Library Check.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$ ENDIF
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$! Look For The Library LIBSSL.OLB.
 | 
					$! Look For The Library LIBSSL.OLB.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ IF (F$SEARCH(SSL_LIB).EQS."")
 | 
					$ IF (F$SEARCH(SSL_LIB).EQS."")
 | 
				
			||||||
@@ -581,86 +498,10 @@ $ CHECK_OPTIONS:
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$! Check To See If P1 Is Blank.
 | 
					$! Check To See If P1 Is Blank.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ IF (P1.EQS."NORSAREF")
 | 
					$ IF (P1.EQS."NODEBUG")
 | 
				
			||||||
$ THEN
 | 
					$ THEN
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!   P1 Is NORSAREF, So Compile With The Regular RSA Libraries.
 | 
					$!   P1 Is NODEBUG, So Compile Without Debugger Information.
 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$    RSAREF = "FALSE"
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$! Else...
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$ ELSE
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!  Check To See If We Are To Use The RSAREF Library.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$   IF (P1.EQS."RSAREF")
 | 
					 | 
				
			||||||
$   THEN
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!    Check To Make Sure We Have The RSAREF Source Code Directory.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$     IF (F$SEARCH("SYS$DISK:[-.RSAREF]SOURCE.DIR").EQS."")
 | 
					 | 
				
			||||||
$     THEN
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!      We Don't Have The RSAREF Souce Code Directory, So Tell The
 | 
					 | 
				
			||||||
$!      User This.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$       WRITE SYS$OUTPUT ""
 | 
					 | 
				
			||||||
$       WRITE SYS$OUTPUT "It appears that you don't have the RSAREF Souce Code."
 | 
					 | 
				
			||||||
$       WRITE SYS$OUTPUT "You need to go to 'ftp://ftp.rsa.com/rsaref'.  You have to"
 | 
					 | 
				
			||||||
$       WRITE SYS$OUTPUT "get the '.tar-Z' file as the '.zip' file dosen't have the"
 | 
					 | 
				
			||||||
$       WRITE SYS$OUTPUT "directory structure stored.  You have to extract the file"
 | 
					 | 
				
			||||||
$       WRITE SYS$OUTPUT "into the [.RSAREF] directory under the root directory"
 | 
					 | 
				
			||||||
$       WRITE SYS$OUTPUT "as that is where the scripts will look for the files."
 | 
					 | 
				
			||||||
$       WRITE SYS$OUTPUT ""
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!      Time To Exit.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$       EXIT
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!    Else...
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$     ELSE
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!      Compile Using The RSAREF Library.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$       RSAREF = "TRUE"
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!    End The RSAREF Soure Directory Check.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$     ENDIF
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!  Else...
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$   ELSE 
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!    They Entered An Invalid Option..
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$     WRITE SYS$OUTPUT ""
 | 
					 | 
				
			||||||
$     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
 | 
					 | 
				
			||||||
$     WRITE SYS$OUTPUT ""
 | 
					 | 
				
			||||||
$     WRITE SYS$OUTPUT "     RSAREF   :  Compile With The RSAREF Library."
 | 
					 | 
				
			||||||
$     WRITE SYS$OUTPUT "     NORSAREF :  Compile With The Regular RSA Library."
 | 
					 | 
				
			||||||
$     WRITE SYS$OUTPUT ""
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!    Time To EXIT.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$     EXIT
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!  End The Valid Arguement Check.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$   ENDIF
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$! End P1 Check.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$ ENDIF
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$! Check To See If P2 Is Blank.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$ IF (P2.EQS."NODEBUG")
 | 
					 | 
				
			||||||
$ THEN
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!   P2 Is NODEBUG, So Compile Without Debugger Information.
 | 
					 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$    DEBUGGER  = "NODEBUG"
 | 
					$    DEBUGGER  = "NODEBUG"
 | 
				
			||||||
$    TRACEBACK = "NOTRACEBACK" 
 | 
					$    TRACEBACK = "NOTRACEBACK" 
 | 
				
			||||||
@@ -675,7 +516,7 @@ $ ELSE
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Check To See If We Are To Compile With Debugger Information.
 | 
					$!  Check To See If We Are To Compile With Debugger Information.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$   IF (P2.EQS."DEBUG")
 | 
					$   IF (P1.EQS."DEBUG")
 | 
				
			||||||
$   THEN
 | 
					$   THEN
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!    Compile With Debugger Information.
 | 
					$!    Compile With Debugger Information.
 | 
				
			||||||
@@ -691,7 +532,7 @@ $!
 | 
				
			|||||||
$!    Tell The User Entered An Invalid Option..
 | 
					$!    Tell The User Entered An Invalid Option..
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$     WRITE SYS$OUTPUT ""
 | 
					$     WRITE SYS$OUTPUT ""
 | 
				
			||||||
$     WRITE SYS$OUTPUT "The Option ",P2," Is Invalid.  The Valid Options Are:"
 | 
					$     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
 | 
				
			||||||
$     WRITE SYS$OUTPUT ""
 | 
					$     WRITE SYS$OUTPUT ""
 | 
				
			||||||
$     WRITE SYS$OUTPUT "    DEBUG    :  Compile With The Debugger Information."
 | 
					$     WRITE SYS$OUTPUT "    DEBUG    :  Compile With The Debugger Information."
 | 
				
			||||||
$     WRITE SYS$OUTPUT "    NODEBUG  :  Compile Without The Debugger Information."
 | 
					$     WRITE SYS$OUTPUT "    NODEBUG  :  Compile Without The Debugger Information."
 | 
				
			||||||
@@ -705,13 +546,13 @@ $!  End The Valid Arguement Check.
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$   ENDIF
 | 
					$   ENDIF
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$! End The P2 Check.
 | 
					$! End The P1 Check.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ ENDIF
 | 
					$ ENDIF
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$! Check To See If P3 Is Blank.
 | 
					$! Check To See If P2 Is Blank.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ IF (P3.EQS."")
 | 
					$ IF (P2.EQS."")
 | 
				
			||||||
$ THEN
 | 
					$ THEN
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  O.K., The User Didn't Specify A Compiler, Let's Try To
 | 
					$!  O.K., The User Didn't Specify A Compiler, Let's Try To
 | 
				
			||||||
@@ -724,7 +565,7 @@ $   THEN
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$!    Looks Like GNUC, Set To Use GNUC.
 | 
					$!    Looks Like GNUC, Set To Use GNUC.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$     P3 = "GNUC"
 | 
					$     P2 = "GNUC"
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Else...
 | 
					$!  Else...
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
@@ -737,7 +578,7 @@ $     THEN
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$!      Looks Like DECC, Set To Use DECC.
 | 
					$!      Looks Like DECC, Set To Use DECC.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$       P3 = "DECC"
 | 
					$       P2 = "DECC"
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!    Else...
 | 
					$!    Else...
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
@@ -745,7 +586,7 @@ $     ELSE
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$!      Looks Like VAXC, Set To Use VAXC.
 | 
					$!      Looks Like VAXC, Set To Use VAXC.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$       P3 = "VAXC"
 | 
					$       P2 = "VAXC"
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!    End The VAXC Compiler Check.
 | 
					$!    End The VAXC Compiler Check.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
@@ -759,9 +600,9 @@ $!  End The Compiler Check.
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$ ENDIF
 | 
					$ ENDIF
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$! Check To See If We Have A Option For P4.
 | 
					$! Check To See If We Have A Option For P3.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ IF (P4.EQS."")
 | 
					$ IF (P3.EQS."")
 | 
				
			||||||
$ THEN
 | 
					$ THEN
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Find out what socket library we have available
 | 
					$!  Find out what socket library we have available
 | 
				
			||||||
@@ -771,7 +612,7 @@ $   THEN
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$!    We have SOCKETSHR, and it is my opinion that it's the best to use.
 | 
					$!    We have SOCKETSHR, and it is my opinion that it's the best to use.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$     P4 = "SOCKETSHR"
 | 
					$     P3 = "SOCKETSHR"
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!    Tell the user
 | 
					$!    Tell the user
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
@@ -791,7 +632,7 @@ $     THEN
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$!	Last resort: a UCX or UCX-compatible library
 | 
					$!	Last resort: a UCX or UCX-compatible library
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$	P4 = "UCX"
 | 
					$	P3 = "UCX"
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!      Tell the user
 | 
					$!      Tell the user
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
@@ -805,31 +646,7 @@ $ ENDIF
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$! Set Up Initial CC Definitions, Possibly With User Ones
 | 
					$! Set Up Initial CC Definitions, Possibly With User Ones
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ CCDEFS = "VMS=1,MONOLITH"
 | 
					$ CCDEFS = "MONOLITH"
 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_ASM") THEN CCDEFS = CCDEFS + ",NO_ASM"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_RSA") THEN CCDEFS = CCDEFS + ",NO_RSA"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_DSA") THEN CCDEFS = CCDEFS + ",NO_DSA"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_DH") THEN CCDEFS = CCDEFS + ",NO_DH"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_MD2") THEN CCDEFS = CCDEFS + ",NO_MD2"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_MD5") THEN CCDEFS = CCDEFS + ",NO_MD5"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_RIPEMD") THEN CCDEFS = CCDEFS + ",NO_RIPEMD"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_SHA") THEN CCDEFS = CCDEFS + ",NO_SHA"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_SHA0") THEN CCDEFS = CCDEFS + ",NO_SHA0"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_SHA1") THEN CCDEFS = CCDEFS + ",NO_SHA1"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_DES")
 | 
					 | 
				
			||||||
$ THEN
 | 
					 | 
				
			||||||
$   CCDEFS = CCDEFS + ",NO_DES,NO_MDC2"
 | 
					 | 
				
			||||||
$ ELSE
 | 
					 | 
				
			||||||
$   IF F$TRNLNM("OPENSSL_NO_MDC2") THEN CCDEFS = CCDEFS + ",NO_MDC2"
 | 
					 | 
				
			||||||
$ ENDIF
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_RC2") THEN CCDEFS = CCDEFS + ",NO_RC2"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_RC4") THEN CCDEFS = CCDEFS + ",NO_RC4"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_RC5") THEN CCDEFS = CCDEFS + ",NO_RC5"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_IDEA") THEN CCDEFS = CCDEFS + ",NO_IDEA"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_BF") THEN CCDEFS = CCDEFS + ",NO_BF"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_CAST") THEN CCDEFS = CCDEFS + ",NO_CAST"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_HMAC") THEN CCDEFS = CCDEFS + ",NO_HMAC"
 | 
					 | 
				
			||||||
$ IF F$TRNLNM("OPENSSL_NO_SSL2") THEN CCDEFS = CCDEFS + ",NO_SSL2"
 | 
					 | 
				
			||||||
$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
 | 
					$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
 | 
				
			||||||
$ CCEXTRAFLAGS = ""
 | 
					$ CCEXTRAFLAGS = ""
 | 
				
			||||||
$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
 | 
					$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
 | 
				
			||||||
@@ -839,12 +656,12 @@ $ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Check To See If The User Entered A Valid Paramter.
 | 
					$!  Check To See If The User Entered A Valid Paramter.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC")
 | 
					$ IF (P2.EQS."VAXC").OR.(P2.EQS."DECC").OR.(P2.EQS."GNUC")
 | 
				
			||||||
$ THEN
 | 
					$ THEN
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Check To See If The User Wanted DECC.
 | 
					$!  Check To See If The User Wanted DECC.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$   IF (P3.EQS."DECC")
 | 
					$   IF (P2.EQS."DECC")
 | 
				
			||||||
$   THEN
 | 
					$   THEN
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!    Looks Like DECC, Set To Use DECC.
 | 
					$!    Looks Like DECC, Set To Use DECC.
 | 
				
			||||||
@@ -861,7 +678,8 @@ $     CC = "CC"
 | 
				
			|||||||
$     IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
 | 
					$     IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
 | 
				
			||||||
	 THEN CC = "CC/DECC"
 | 
						 THEN CC = "CC/DECC"
 | 
				
			||||||
$     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
 | 
					$     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
 | 
				
			||||||
           "/NOLIST/PREFIX=ALL" + CCEXTRAFLAGS
 | 
					           "/NOLIST/PREFIX=ALL" + -
 | 
				
			||||||
 | 
						   "/INCLUDE=(SYS$DISK:[-])" + CCEXTRAFLAGS
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!    Define The Linker Options File Name.
 | 
					$!    Define The Linker Options File Name.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
@@ -873,7 +691,7 @@ $   ENDIF
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Check To See If We Are To Use VAXC.
 | 
					$!  Check To See If We Are To Use VAXC.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$   IF (P3.EQS."VAXC")
 | 
					$   IF (P2.EQS."VAXC")
 | 
				
			||||||
$   THEN
 | 
					$   THEN
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!    Looks Like VAXC, Set To Use VAXC.
 | 
					$!    Looks Like VAXC, Set To Use VAXC.
 | 
				
			||||||
@@ -892,7 +710,8 @@ $	WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
 | 
				
			|||||||
$	EXIT
 | 
					$	EXIT
 | 
				
			||||||
$     ENDIF
 | 
					$     ENDIF
 | 
				
			||||||
$     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
 | 
					$     IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
 | 
				
			||||||
$     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + CCEXTRAFLAGS
 | 
					$     CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
 | 
				
			||||||
 | 
						   "/INCLUDE=(SYS$DISK:[-])" + CCEXTRAFLAGS
 | 
				
			||||||
$     CCDEFS = CCDEFS + ",""VAXC"""
 | 
					$     CCDEFS = CCDEFS + ",""VAXC"""
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!    Define <sys> As SYS$COMMON:[SYSLIB]
 | 
					$!    Define <sys> As SYS$COMMON:[SYSLIB]
 | 
				
			||||||
@@ -909,7 +728,7 @@ $   ENDIF
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Check To See If We Are To Use GNU C.
 | 
					$!  Check To See If We Are To Use GNU C.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$   IF (P3.EQS."GNUC")
 | 
					$   IF (P2.EQS."GNUC")
 | 
				
			||||||
$   THEN
 | 
					$   THEN
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!    Looks Like GNUC, Set To Use GNUC.
 | 
					$!    Looks Like GNUC, Set To Use GNUC.
 | 
				
			||||||
@@ -923,7 +742,8 @@ $!
 | 
				
			|||||||
$!    Use GNU C...
 | 
					$!    Use GNU C...
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$     IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC
 | 
					$     IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC
 | 
				
			||||||
$     CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + CCEXTRAFLAGS
 | 
					$     CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
 | 
				
			||||||
 | 
						   "/INCLUDE=(SYS$DISK:[-])" + CCEXTRAFLAGS
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!    Define The Linker Options File Name.
 | 
					$!    Define The Linker Options File Name.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
@@ -937,31 +757,6 @@ $!  Set up default defines
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$   CCDEFS = """FLAT_INC=1""," + CCDEFS
 | 
					$   CCDEFS = """FLAT_INC=1""," + CCDEFS
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Check To See If We Are To Compile With RSAREF Routines.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$   IF (RSAREF.EQS."TRUE")
 | 
					 | 
				
			||||||
$   THEN
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!    Compile With RSAREF.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$     CCDEFS = CCDEFS + ",""RSAref=1"""
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!    Tell The User This.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$     WRITE SYS$OUTPUT "Compiling With RSAREF Routines."
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!    Else, We Don't Care.  Compile Without The RSAREF Library.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$   ELSE
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!    Tell The User We Are Compile Without The RSAREF Routines.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$     WRITE SYS$OUTPUT "Compiling Without The RSAREF Routines.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!  End The RSAREF Check.
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$   ENDIF
 | 
					 | 
				
			||||||
$!
 | 
					 | 
				
			||||||
$!  Else The User Entered An Invalid Arguement.
 | 
					$!  Else The User Entered An Invalid Arguement.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ ELSE
 | 
					$ ELSE
 | 
				
			||||||
@@ -969,7 +764,7 @@ $!
 | 
				
			|||||||
$!  Tell The User We Don't Know What They Want.
 | 
					$!  Tell The User We Don't Know What They Want.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$   WRITE SYS$OUTPUT ""
 | 
					$   WRITE SYS$OUTPUT ""
 | 
				
			||||||
$   WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
 | 
					$   WRITE SYS$OUTPUT "The Option ",P2," Is Invalid.  The Valid Options Are:"
 | 
				
			||||||
$   WRITE SYS$OUTPUT ""
 | 
					$   WRITE SYS$OUTPUT ""
 | 
				
			||||||
$   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
 | 
					$   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
 | 
				
			||||||
$   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
 | 
					$   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
 | 
				
			||||||
@@ -983,17 +778,18 @@ $ ENDIF
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$! Time to check the contents, and to make sure we get the correct library.
 | 
					$! Time to check the contents, and to make sure we get the correct library.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ IF P4.EQS."SOCKETSHR" .OR. P4.EQS."MULTINET" .OR. P4.EQS."UCX"
 | 
					$ IF P3.EQS."SOCKETSHR" .OR. P3.EQS."MULTINET" .OR. P3.EQS."UCX" -
 | 
				
			||||||
 | 
					     .OR. P3.EQS."TCPIP" .OR. P3.EQS."NONE"
 | 
				
			||||||
$ THEN
 | 
					$ THEN
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Check to see if SOCKETSHR was chosen
 | 
					$!  Check to see if SOCKETSHR was chosen
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$   IF P4.EQS."SOCKETSHR"
 | 
					$   IF P3.EQS."SOCKETSHR"
 | 
				
			||||||
$   THEN
 | 
					$   THEN
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!    Set the library to use SOCKETSHR
 | 
					$!    Set the library to use SOCKETSHR
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$     TCPIP_LIB = "[-.VMS]SOCKETSHR_SHR.OPT/OPT"
 | 
					$     TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT/OPT"
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!    Done with SOCKETSHR
 | 
					$!    Done with SOCKETSHR
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
@@ -1001,12 +797,12 @@ $   ENDIF
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Check to see if MULTINET was chosen
 | 
					$!  Check to see if MULTINET was chosen
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$   IF P4.EQS."MULTINET"
 | 
					$   IF P3.EQS."MULTINET"
 | 
				
			||||||
$   THEN
 | 
					$   THEN
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!    Set the library to use UCX emulation.
 | 
					$!    Set the library to use UCX emulation.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$     P4 = "UCX"
 | 
					$     P3 = "UCX"
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!    Done with MULTINET
 | 
					$!    Done with MULTINET
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
@@ -1014,27 +810,53 @@ $   ENDIF
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Check to see if UCX was chosen
 | 
					$!  Check to see if UCX was chosen
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$   IF P4.EQS."UCX"
 | 
					$   IF P3.EQS."UCX"
 | 
				
			||||||
$   THEN
 | 
					$   THEN
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!    Set the library to use UCX.
 | 
					$!    Set the library to use UCX.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$     TCPIP_LIB = "[-.VMS]UCX_SHR_DECC.OPT/OPT"
 | 
					$     TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT/OPT"
 | 
				
			||||||
$     IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
 | 
					$     IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
 | 
				
			||||||
$     THEN
 | 
					$     THEN
 | 
				
			||||||
$       TCPIP_LIB = "[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT"
 | 
					$       TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT/OPT"
 | 
				
			||||||
$     ELSE
 | 
					$     ELSE
 | 
				
			||||||
$       IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
 | 
					$       IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
 | 
				
			||||||
	  TCPIP_LIB = "[-.VMS]UCX_SHR_VAXC.OPT/OPT"
 | 
						  TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT/OPT"
 | 
				
			||||||
$     ENDIF
 | 
					$     ENDIF
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!    Done with UCX
 | 
					$!    Done with UCX
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$   ENDIF
 | 
					$   ENDIF
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
 | 
					$!  Check to see if TCPIP (post UCX) was chosen
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$   IF P3.EQS."TCPIP"
 | 
				
			||||||
 | 
					$   THEN
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$!    Set the library to use TCPIP.
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$     TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT/OPT"
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$!    Done with TCPIP
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$   ENDIF
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$!  Check to see if NONE was chosen
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$   IF P3.EQS."NONE"
 | 
				
			||||||
 | 
					$   THEN
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$!    Do not use TCPIP.
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$     TCPIP_LIB = ""
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$!    Done with TCPIP
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
 | 
					$   ENDIF
 | 
				
			||||||
 | 
					$!
 | 
				
			||||||
$!  Add TCP/IP type to CC definitions.
 | 
					$!  Add TCP/IP type to CC definitions.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$   CCDEFS = CCDEFS + ",TCPIP_TYPE_''P4'"
 | 
					$   CCDEFS = CCDEFS + ",TCPIP_TYPE_''P3'"
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Print info
 | 
					$!  Print info
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
@@ -1047,10 +869,11 @@ $!
 | 
				
			|||||||
$!  Tell The User We Don't Know What They Want.
 | 
					$!  Tell The User We Don't Know What They Want.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$   WRITE SYS$OUTPUT ""
 | 
					$   WRITE SYS$OUTPUT ""
 | 
				
			||||||
$   WRITE SYS$OUTPUT "The Option ",P4," Is Invalid.  The Valid Options Are:"
 | 
					$   WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
 | 
				
			||||||
$   WRITE SYS$OUTPUT ""
 | 
					$   WRITE SYS$OUTPUT ""
 | 
				
			||||||
$   WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
 | 
					$   WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
 | 
				
			||||||
$   WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
 | 
					$   WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
 | 
				
			||||||
 | 
					$   WRITE SYS$OUTPUT "    TCPIP      :  To link with TCPIP (post UCX) TCP/IP library."
 | 
				
			||||||
$   WRITE SYS$OUTPUT ""
 | 
					$   WRITE SYS$OUTPUT ""
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Time To EXIT.
 | 
					$!  Time To EXIT.
 | 
				
			||||||
@@ -1077,7 +900,7 @@ $ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$! Show user the result
 | 
					$! Show user the result
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ WRITE SYS$OUTPUT "Main Compiling Command: ",CC
 | 
					$ WRITE/SYMBOL SYS$OUTPUT "Main Compiling Command: ",CC
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$! Special Threads For OpenVMS v7.1 Or Later
 | 
					$! Special Threads For OpenVMS v7.1 Or Later
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
@@ -1085,9 +908,9 @@ $! Written By:  Richard Levitte
 | 
				
			|||||||
$!              richard@levitte.org
 | 
					$!              richard@levitte.org
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$! Check To See If We Have A Option For P5.
 | 
					$! Check To See If We Have A Option For P4.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ IF (P5.EQS."")
 | 
					$ IF (P4.EQS."")
 | 
				
			||||||
$ THEN
 | 
					$ THEN
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Get The Version Of VMS We Are Using.
 | 
					$!  Get The Version Of VMS We Are Using.
 | 
				
			||||||
@@ -1109,15 +932,15 @@ $!  End The VMS Version Check.
 | 
				
			|||||||
$!
 | 
					$!
 | 
				
			||||||
$   ENDIF
 | 
					$   ENDIF
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$! End The P5 Check.
 | 
					$! End The P4 Check.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ ENDIF
 | 
					$ ENDIF
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$! Check if the user wanted to compile just a subset of all the programs.
 | 
					$! Check if the user wanted to compile just a subset of all the programs.
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$ IF P6 .NES. ""
 | 
					$ IF P5 .NES. ""
 | 
				
			||||||
$ THEN
 | 
					$ THEN
 | 
				
			||||||
$   PROGRAMS = P6
 | 
					$   PROGRAMS = P5
 | 
				
			||||||
$ ENDIF
 | 
					$ ENDIF
 | 
				
			||||||
$!
 | 
					$!
 | 
				
			||||||
$!  Time To RETURN...
 | 
					$!  Time To RETURN...
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -58,9 +58,9 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					#include "apps.h"
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/err.h>
 | 
					#include <openssl/err.h>
 | 
				
			||||||
#include "apps.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef PROG
 | 
					#undef PROG
 | 
				
			||||||
#define PROG nseq_main
 | 
					#define PROG nseq_main
 | 
				
			||||||
@@ -102,7 +102,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		BIO_printf (bio_err, "-in file  input file\n");
 | 
							BIO_printf (bio_err, "-in file  input file\n");
 | 
				
			||||||
		BIO_printf (bio_err, "-out file output file\n");
 | 
							BIO_printf (bio_err, "-out file output file\n");
 | 
				
			||||||
		BIO_printf (bio_err, "-toseq    output NS Sequence file\n");
 | 
							BIO_printf (bio_err, "-toseq    output NS Sequence file\n");
 | 
				
			||||||
		EXIT(1);
 | 
							OPENSSL_EXIT(1);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (infile) {
 | 
						if (infile) {
 | 
				
			||||||
@@ -121,7 +121,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
							out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		out = BIO_push(tmpbio, out);
 | 
							out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -162,6 +162,6 @@ end:
 | 
				
			|||||||
	BIO_free_all(out);
 | 
						BIO_free_all(out);
 | 
				
			||||||
	NETSCAPE_CERT_SEQUENCE_free(seq);
 | 
						NETSCAPE_CERT_SEQUENCE_free(seq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	EXIT(ret);
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1227
									
								
								apps/ocsp.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1227
									
								
								apps/ocsp.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										227
									
								
								apps/openssl.c
									
									
									
									
									
								
							
							
						
						
									
										227
									
								
								apps/openssl.c
									
									
									
									
									
								
							@@ -55,11 +55,66 @@
 | 
				
			|||||||
 * copied and put under another distribution licence
 | 
					 * copied and put under another distribution licence
 | 
				
			||||||
 * [including the GNU Public Licence.]
 | 
					 * [including the GNU Public Licence.]
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    openssl-core@openssl.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This product includes cryptographic software written by Eric Young
 | 
				
			||||||
 | 
					 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
				
			||||||
 | 
					 * Hudson (tjh@cryptsoft.com).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#define OPENSSL_C /* tells apps.h to use complete apps_startup() */
 | 
					#define OPENSSL_C /* tells apps.h to use complete apps_startup() */
 | 
				
			||||||
 | 
					#include "apps.h"
 | 
				
			||||||
#include <openssl/bio.h>
 | 
					#include <openssl/bio.h>
 | 
				
			||||||
#include <openssl/crypto.h>
 | 
					#include <openssl/crypto.h>
 | 
				
			||||||
#include <openssl/lhash.h>
 | 
					#include <openssl/lhash.h>
 | 
				
			||||||
@@ -67,31 +122,106 @@
 | 
				
			|||||||
#include <openssl/x509.h>
 | 
					#include <openssl/x509.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/ssl.h>
 | 
					#include <openssl/ssl.h>
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
					#include <openssl/engine.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
#define USE_SOCKETS /* needed for the _O_BINARY defs in the MS world */
 | 
					#define USE_SOCKETS /* needed for the _O_BINARY defs in the MS world */
 | 
				
			||||||
#include "apps.h"
 | 
					 | 
				
			||||||
#include "progs.h"
 | 
					#include "progs.h"
 | 
				
			||||||
#include "s_apps.h"
 | 
					#include "s_apps.h"
 | 
				
			||||||
#include <openssl/err.h>
 | 
					#include <openssl/err.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static unsigned long MS_CALLBACK hash(FUNCTION *a);
 | 
					/* The LHASH callbacks ("hash" & "cmp") have been replaced by functions with the
 | 
				
			||||||
static int MS_CALLBACK cmp(FUNCTION *a,FUNCTION *b);
 | 
					 * base prototypes (we cast each variable inside the function to the required
 | 
				
			||||||
 | 
					 * type of "FUNCTION*"). This removes the necessity for macro-generated wrapper
 | 
				
			||||||
 | 
					 * functions. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* static unsigned long MS_CALLBACK hash(FUNCTION *a); */
 | 
				
			||||||
 | 
					static unsigned long MS_CALLBACK hash(const void *a_void);
 | 
				
			||||||
 | 
					/* static int MS_CALLBACK cmp(FUNCTION *a,FUNCTION *b); */
 | 
				
			||||||
 | 
					static int MS_CALLBACK cmp(const void *a_void,const void *b_void);
 | 
				
			||||||
static LHASH *prog_init(void );
 | 
					static LHASH *prog_init(void );
 | 
				
			||||||
static int do_cmd(LHASH *prog,int argc,char *argv[]);
 | 
					static int do_cmd(LHASH *prog,int argc,char *argv[]);
 | 
				
			||||||
LHASH *config=NULL;
 | 
					 | 
				
			||||||
char *default_config_file=NULL;
 | 
					char *default_config_file=NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Make sure there is only one when MONOLITH is defined */
 | 
					/* Make sure there is only one when MONOLITH is defined */
 | 
				
			||||||
#ifdef MONOLITH
 | 
					#ifdef MONOLITH
 | 
				
			||||||
 | 
					CONF *config=NULL;
 | 
				
			||||||
BIO *bio_err=NULL;
 | 
					BIO *bio_err=NULL;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void lock_dbg_cb(int mode, int type, const char *file, int line)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						static int modes[CRYPTO_NUM_LOCKS]; /* = {0, 0, ... } */
 | 
				
			||||||
 | 
						const char *errstr = NULL;
 | 
				
			||||||
 | 
						int rw;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						rw = mode & (CRYPTO_READ|CRYPTO_WRITE);
 | 
				
			||||||
 | 
						if (!((rw == CRYPTO_READ) || (rw == CRYPTO_WRITE)))
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							errstr = "invalid mode";
 | 
				
			||||||
 | 
							goto err;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (type < 0 || type >= CRYPTO_NUM_LOCKS)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							errstr = "type out of bounds";
 | 
				
			||||||
 | 
							goto err;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (mode & CRYPTO_LOCK)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							if (modes[type])
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								errstr = "already locked";
 | 
				
			||||||
 | 
								/* must not happen in a single-threaded program
 | 
				
			||||||
 | 
								 * (would deadlock) */
 | 
				
			||||||
 | 
								goto err;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							modes[type] = rw;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						else if (mode & CRYPTO_UNLOCK)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							if (!modes[type])
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								errstr = "not locked";
 | 
				
			||||||
 | 
								goto err;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (modes[type] != rw)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								errstr = (rw == CRYPTO_READ) ?
 | 
				
			||||||
 | 
									"CRYPTO_r_unlock on write lock" :
 | 
				
			||||||
 | 
									"CRYPTO_w_unlock on read lock";
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							modes[type] = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							errstr = "invalid mode";
 | 
				
			||||||
 | 
							goto err;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 err:
 | 
				
			||||||
 | 
						if (errstr)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							/* we cannot use bio_err here */
 | 
				
			||||||
 | 
							fprintf(stderr, "openssl (lock_dbg_cb): %s (mode=%d, type=%d) at %s:%d\n",
 | 
				
			||||||
 | 
								errstr, mode, type, file, line);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(int Argc, char *Argv[])
 | 
					int main(int Argc, char *Argv[])
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	ARGS arg;
 | 
						ARGS arg;
 | 
				
			||||||
#define PROG_NAME_SIZE	16
 | 
					#define PROG_NAME_SIZE	39
 | 
				
			||||||
	char pname[PROG_NAME_SIZE];
 | 
						char pname[PROG_NAME_SIZE+1];
 | 
				
			||||||
	FUNCTION f,*fp;
 | 
						FUNCTION f,*fp;
 | 
				
			||||||
	MS_STATIC char *prompt,buf[1024],config_name[256];
 | 
						MS_STATIC char *prompt,buf[1024];
 | 
				
			||||||
 | 
						char *to_free=NULL;
 | 
				
			||||||
	int n,i,ret=0;
 | 
						int n,i,ret=0;
 | 
				
			||||||
	int argc;
 | 
						int argc;
 | 
				
			||||||
	char **argv,*p;
 | 
						char **argv,*p;
 | 
				
			||||||
@@ -101,41 +231,56 @@ int main(int Argc, char *Argv[])
 | 
				
			|||||||
	arg.data=NULL;
 | 
						arg.data=NULL;
 | 
				
			||||||
	arg.count=0;
 | 
						arg.count=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (getenv("OPENSSL_DEBUG_MEMORY") != NULL)
 | 
					 | 
				
			||||||
		CRYPTO_malloc_debug_init();
 | 
					 | 
				
			||||||
	CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	apps_startup();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (bio_err == NULL)
 | 
						if (bio_err == NULL)
 | 
				
			||||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ERR_load_crypto_strings();
 | 
						if (getenv("OPENSSL_DEBUG_MEMORY") != NULL) /* if not defined, use compiled-in library defaults */
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							if (!(0 == strcmp(getenv("OPENSSL_DEBUG_MEMORY"), "off")))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								CRYPTO_malloc_debug_init();
 | 
				
			||||||
 | 
								CRYPTO_set_mem_debug_options(V_CRYPTO_MDEBUG_ALL);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								/* OPENSSL_DEBUG_MEMORY=off */
 | 
				
			||||||
 | 
								CRYPTO_set_mem_debug_functions(0, 0, 0, 0, 0);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
 | 
						if (getenv("OPENSSL_DEBUG_LOCKING") != NULL)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							CRYPTO_set_locking_callback(lock_dbg_cb);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						apps_startup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Lets load up our environment a little */
 | 
						/* Lets load up our environment a little */
 | 
				
			||||||
	p=getenv("OPENSSL_CONF");
 | 
						p=getenv("OPENSSL_CONF");
 | 
				
			||||||
	if (p == NULL)
 | 
						if (p == NULL)
 | 
				
			||||||
		p=getenv("SSLEAY_CONF");
 | 
							p=getenv("SSLEAY_CONF");
 | 
				
			||||||
	if (p == NULL)
 | 
						if (p == NULL)
 | 
				
			||||||
		{
 | 
							p=to_free=make_config_name();
 | 
				
			||||||
		strcpy(config_name,X509_get_default_cert_area());
 | 
					 | 
				
			||||||
#ifndef VMS
 | 
					 | 
				
			||||||
		strcat(config_name,"/");
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
		strcat(config_name,OPENSSL_CONF);
 | 
					 | 
				
			||||||
		p=config_name;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	default_config_file=p;
 | 
						default_config_file=p;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config=CONF_load(config,p,&errline);
 | 
						config=NCONF_new(NULL);
 | 
				
			||||||
	if (config == NULL) ERR_clear_error();
 | 
						i=NCONF_load(config,p,&errline);
 | 
				
			||||||
 | 
						if (i == 0)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							NCONF_free(config);
 | 
				
			||||||
 | 
							config = NULL;
 | 
				
			||||||
 | 
							ERR_clear_error();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	prog=prog_init();
 | 
						prog=prog_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* first check the program name */
 | 
						/* first check the program name */
 | 
				
			||||||
	program_name(Argv[0],pname,PROG_NAME_SIZE);
 | 
						program_name(Argv[0],pname,sizeof pname);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	f.name=pname;
 | 
						f.name=pname;
 | 
				
			||||||
	fp=(FUNCTION *)lh_retrieve(prog,&f);
 | 
						fp=(FUNCTION *)lh_retrieve(prog,&f);
 | 
				
			||||||
@@ -163,7 +308,7 @@ int main(int Argc, char *Argv[])
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
		ret=0;
 | 
							ret=0;
 | 
				
			||||||
		p=buf;
 | 
							p=buf;
 | 
				
			||||||
		n=1024;
 | 
							n=sizeof buf;
 | 
				
			||||||
		i=0;
 | 
							i=0;
 | 
				
			||||||
		for (;;)
 | 
							for (;;)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@@ -197,25 +342,25 @@ int main(int Argc, char *Argv[])
 | 
				
			|||||||
	BIO_printf(bio_err,"bad exit\n");
 | 
						BIO_printf(bio_err,"bad exit\n");
 | 
				
			||||||
	ret=1;
 | 
						ret=1;
 | 
				
			||||||
end:
 | 
					end:
 | 
				
			||||||
 | 
						if (to_free)
 | 
				
			||||||
 | 
							OPENSSL_free(to_free);
 | 
				
			||||||
	if (config != NULL)
 | 
						if (config != NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		CONF_free(config);
 | 
							NCONF_free(config);
 | 
				
			||||||
		config=NULL;
 | 
							config=NULL;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	if (prog != NULL) lh_free(prog);
 | 
						if (prog != NULL) lh_free(prog);
 | 
				
			||||||
	if (arg.data != NULL) OPENSSL_free(arg.data);
 | 
						if (arg.data != NULL) OPENSSL_free(arg.data);
 | 
				
			||||||
	ERR_remove_state(0);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	EVP_cleanup();
 | 
						apps_shutdown();
 | 
				
			||||||
	ERR_free_strings();
 | 
					
 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	CRYPTO_mem_leaks(bio_err);
 | 
						CRYPTO_mem_leaks(bio_err);
 | 
				
			||||||
	if (bio_err != NULL)
 | 
						if (bio_err != NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_free(bio_err);
 | 
							BIO_free(bio_err);
 | 
				
			||||||
		bio_err=NULL;
 | 
							bio_err=NULL;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	EXIT(ret);
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define LIST_STANDARD_COMMANDS "list-standard-commands"
 | 
					#define LIST_STANDARD_COMMANDS "list-standard-commands"
 | 
				
			||||||
@@ -238,7 +383,7 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
 | 
				
			|||||||
	else if ((strncmp(argv[0],"no-",3)) == 0)
 | 
						else if ((strncmp(argv[0],"no-",3)) == 0)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
 | 
							BIO *bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		bio_stdout = BIO_push(tmpbio, bio_stdout);
 | 
							bio_stdout = BIO_push(tmpbio, bio_stdout);
 | 
				
			||||||
@@ -275,7 +420,7 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
 | 
				
			|||||||
		else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */
 | 
							else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */
 | 
				
			||||||
			list_type = FUNC_TYPE_CIPHER;
 | 
								list_type = FUNC_TYPE_CIPHER;
 | 
				
			||||||
		bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
 | 
							bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		bio_stdout = BIO_push(tmpbio, bio_stdout);
 | 
							bio_stdout = BIO_push(tmpbio, bio_stdout);
 | 
				
			||||||
@@ -350,19 +495,23 @@ static LHASH *prog_init(void)
 | 
				
			|||||||
	    ;
 | 
						    ;
 | 
				
			||||||
	qsort(functions,i,sizeof *functions,SortFnByName);
 | 
						qsort(functions,i,sizeof *functions,SortFnByName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ((ret=lh_new(hash,cmp)) == NULL) return(NULL);
 | 
						if ((ret=lh_new(hash, cmp)) == NULL)
 | 
				
			||||||
 | 
							return(NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (f=functions; f->name != NULL; f++)
 | 
						for (f=functions; f->name != NULL; f++)
 | 
				
			||||||
		lh_insert(ret,f);
 | 
							lh_insert(ret,f);
 | 
				
			||||||
	return(ret);
 | 
						return(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int MS_CALLBACK cmp(FUNCTION *a, FUNCTION *b)
 | 
					/* static int MS_CALLBACK cmp(FUNCTION *a, FUNCTION *b) */
 | 
				
			||||||
 | 
					static int MS_CALLBACK cmp(const void *a_void, const void *b_void)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	return(strncmp(a->name,b->name,8));
 | 
						return(strncmp(((FUNCTION *)a_void)->name,
 | 
				
			||||||
 | 
								((FUNCTION *)b_void)->name,8));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static unsigned long MS_CALLBACK hash(FUNCTION *a)
 | 
					/* static unsigned long MS_CALLBACK hash(FUNCTION *a) */
 | 
				
			||||||
 | 
					static unsigned long MS_CALLBACK hash(const void *a_void)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	return(lh_strhash(a->name));
 | 
						return(lh_strhash(((FUNCTION *)a_void)->name));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,18 +38,31 @@ dir		= ./demoCA		# Where everything is kept
 | 
				
			|||||||
certs		= $dir/certs		# Where the issued certs are kept
 | 
					certs		= $dir/certs		# Where the issued certs are kept
 | 
				
			||||||
crl_dir		= $dir/crl		# Where the issued crl are kept
 | 
					crl_dir		= $dir/crl		# Where the issued crl are kept
 | 
				
			||||||
database	= $dir/index.txt	# database index file.
 | 
					database	= $dir/index.txt	# database index file.
 | 
				
			||||||
 | 
					#unique_subject	= no			# Set to 'no' to allow creation of
 | 
				
			||||||
 | 
										# several ctificates with same subject.
 | 
				
			||||||
new_certs_dir	= $dir/newcerts		# default place for new certs.
 | 
					new_certs_dir	= $dir/newcerts		# default place for new certs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
certificate	= $dir/cacert.pem 	# The CA certificate
 | 
					certificate	= $dir/cacert.pem 	# The CA certificate
 | 
				
			||||||
serial		= $dir/serial 		# The current serial number
 | 
					serial		= $dir/serial 		# The current serial number
 | 
				
			||||||
 | 
					#crlnumber	= $dir/crlnumber	# the current crl number
 | 
				
			||||||
 | 
										# must be commented out to leave a V1 CRL
 | 
				
			||||||
crl		= $dir/crl.pem 		# The current CRL
 | 
					crl		= $dir/crl.pem 		# The current CRL
 | 
				
			||||||
private_key	= $dir/private/cakey.pem# The private key
 | 
					private_key	= $dir/private/cakey.pem# The private key
 | 
				
			||||||
RANDFILE	= $dir/private/.rand	# private random number file
 | 
					RANDFILE	= $dir/private/.rand	# private random number file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
x509_extensions	= usr_cert		# The extentions to add to the cert
 | 
					x509_extensions	= usr_cert		# The extentions to add to the cert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Comment out the following two lines for the "traditional"
 | 
				
			||||||
 | 
					# (and highly broken) format.
 | 
				
			||||||
 | 
					name_opt 	= ca_default		# Subject Name options
 | 
				
			||||||
 | 
					cert_opt 	= ca_default		# Certificate field options
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Extension copying option: use with caution.
 | 
				
			||||||
 | 
					# copy_extensions = copy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
 | 
					# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
 | 
				
			||||||
# so this is commented out by default to leave a V1 CRL.
 | 
					# so this is commented out by default to leave a V1 CRL.
 | 
				
			||||||
 | 
					# crlnumber must also be commented out to leave a V1 CRL.
 | 
				
			||||||
# crl_extensions	= crl_ext
 | 
					# crl_extensions	= crl_ext
 | 
				
			||||||
 | 
					
 | 
				
			||||||
default_days	= 365			# how long to certify for
 | 
					default_days	= 365			# how long to certify for
 | 
				
			||||||
@@ -132,7 +145,7 @@ commonName			= Common Name (eg, YOUR name)
 | 
				
			|||||||
commonName_max			= 64
 | 
					commonName_max			= 64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
emailAddress			= Email Address
 | 
					emailAddress			= Email Address
 | 
				
			||||||
emailAddress_max		= 40
 | 
					emailAddress_max		= 64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# SET-ex3			= SET extension number 3
 | 
					# SET-ex3			= SET extension number 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -180,6 +193,9 @@ authorityKeyIdentifier=keyid,issuer:always
 | 
				
			|||||||
# This stuff is for subjectAltName and issuerAltname.
 | 
					# This stuff is for subjectAltName and issuerAltname.
 | 
				
			||||||
# Import the email address.
 | 
					# Import the email address.
 | 
				
			||||||
# subjectAltName=email:copy
 | 
					# subjectAltName=email:copy
 | 
				
			||||||
 | 
					# An alternative to produce certificates that aren't
 | 
				
			||||||
 | 
					# deprecated according to PKIX.
 | 
				
			||||||
 | 
					# subjectAltName=email:move
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Copy subject details
 | 
					# Copy subject details
 | 
				
			||||||
# issuerAltName=issuer:copy
 | 
					# issuerAltName=issuer:copy
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +1,10 @@
 | 
				
			|||||||
/* apps/passwd.c */
 | 
					/* apps/passwd.c */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined NO_MD5 || defined CHARSET_EBCDIC
 | 
					#if defined OPENSSL_NO_MD5 || defined CHARSET_EBCDIC
 | 
				
			||||||
# define NO_MD5CRYPT_1
 | 
					# define NO_MD5CRYPT_1
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(NO_DES) || !defined(NO_MD5CRYPT_1)
 | 
					#if !defined(OPENSSL_NO_DES) || !defined(NO_MD5CRYPT_1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <assert.h>
 | 
					#include <assert.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
@@ -15,8 +15,7 @@
 | 
				
			|||||||
#include <openssl/err.h>
 | 
					#include <openssl/err.h>
 | 
				
			||||||
#include <openssl/evp.h>
 | 
					#include <openssl/evp.h>
 | 
				
			||||||
#include <openssl/rand.h>
 | 
					#include <openssl/rand.h>
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
#ifndef NO_DES
 | 
					 | 
				
			||||||
# include <openssl/des.h>
 | 
					# include <openssl/des.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_MD5CRYPT_1
 | 
					#ifndef NO_MD5CRYPT_1
 | 
				
			||||||
@@ -50,6 +49,7 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
 | 
				
			|||||||
 * -salt string  - salt
 | 
					 * -salt string  - salt
 | 
				
			||||||
 * -in file      - read passwords from file
 | 
					 * -in file      - read passwords from file
 | 
				
			||||||
 * -stdin        - read passwords from stdin
 | 
					 * -stdin        - read passwords from stdin
 | 
				
			||||||
 | 
					 * -noverify     - never verify when reading password from terminal
 | 
				
			||||||
 * -quiet        - no warnings
 | 
					 * -quiet        - no warnings
 | 
				
			||||||
 * -table        - format output as table
 | 
					 * -table        - format output as table
 | 
				
			||||||
 * -reverse      - switch table columns
 | 
					 * -reverse      - switch table columns
 | 
				
			||||||
@@ -62,6 +62,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	int ret = 1;
 | 
						int ret = 1;
 | 
				
			||||||
	char *infile = NULL;
 | 
						char *infile = NULL;
 | 
				
			||||||
	int in_stdin = 0;
 | 
						int in_stdin = 0;
 | 
				
			||||||
 | 
						int in_noverify = 0;
 | 
				
			||||||
	char *salt = NULL, *passwd = NULL, **passwds = NULL;
 | 
						char *salt = NULL, *passwd = NULL, **passwds = NULL;
 | 
				
			||||||
	char *salt_malloc = NULL, *passwd_malloc = NULL;
 | 
						char *salt_malloc = NULL, *passwd_malloc = NULL;
 | 
				
			||||||
	size_t passwd_malloc_size = 0;
 | 
						size_t passwd_malloc_size = 0;
 | 
				
			||||||
@@ -77,11 +78,14 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	if (bio_err == NULL)
 | 
						if (bio_err == NULL)
 | 
				
			||||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								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());
 | 
						out = BIO_new(BIO_s_file());
 | 
				
			||||||
	if (out == NULL)
 | 
						if (out == NULL)
 | 
				
			||||||
		goto err;
 | 
							goto err;
 | 
				
			||||||
	BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
						BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
						BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
	out = BIO_push(tmpbio, out);
 | 
						out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -128,6 +132,8 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			else
 | 
								else
 | 
				
			||||||
				badopt = 1;
 | 
									badopt = 1;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
							else if (strcmp(argv[i], "-noverify") == 0)
 | 
				
			||||||
 | 
								in_noverify = 1;
 | 
				
			||||||
		else if (strcmp(argv[i], "-quiet") == 0)
 | 
							else if (strcmp(argv[i], "-quiet") == 0)
 | 
				
			||||||
			quiet = 1;
 | 
								quiet = 1;
 | 
				
			||||||
		else if (strcmp(argv[i], "-table") == 0)
 | 
							else if (strcmp(argv[i], "-table") == 0)
 | 
				
			||||||
@@ -153,7 +159,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		badopt = 1;
 | 
							badopt = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* reject unsupported algorithms */
 | 
						/* reject unsupported algorithms */
 | 
				
			||||||
#ifdef NO_DES
 | 
					#ifdef OPENSSL_NO_DES
 | 
				
			||||||
	if (usecrypt) badopt = 1;
 | 
						if (usecrypt) badopt = 1;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifdef NO_MD5CRYPT_1
 | 
					#ifdef NO_MD5CRYPT_1
 | 
				
			||||||
@@ -164,7 +170,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_printf(bio_err, "Usage: passwd [options] [passwords]\n");
 | 
							BIO_printf(bio_err, "Usage: passwd [options] [passwords]\n");
 | 
				
			||||||
		BIO_printf(bio_err, "where options are\n");
 | 
							BIO_printf(bio_err, "where options are\n");
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
		BIO_printf(bio_err, "-crypt             standard Unix password algorithm (default)\n");
 | 
							BIO_printf(bio_err, "-crypt             standard Unix password algorithm (default)\n");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_MD5CRYPT_1
 | 
					#ifndef NO_MD5CRYPT_1
 | 
				
			||||||
@@ -174,6 +180,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		BIO_printf(bio_err, "-salt string       use provided salt\n");
 | 
							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, "-in file           read passwords from file\n");
 | 
				
			||||||
		BIO_printf(bio_err, "-stdin             read passwords from stdin\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, "-quiet             no warnings\n");
 | 
				
			||||||
		BIO_printf(bio_err, "-table             format output as table\n");
 | 
							BIO_printf(bio_err, "-table             format output as table\n");
 | 
				
			||||||
		BIO_printf(bio_err, "-reverse           switch table columns\n");
 | 
							BIO_printf(bio_err, "-reverse           switch table columns\n");
 | 
				
			||||||
@@ -222,7 +229,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		passwds = passwds_static;
 | 
							passwds = passwds_static;
 | 
				
			||||||
		if (in == NULL)
 | 
							if (in == NULL)
 | 
				
			||||||
			if (EVP_read_pw_string(passwd_malloc, passwd_malloc_size, "Password: ", 0) != 0)
 | 
								if (EVP_read_pw_string(passwd_malloc, passwd_malloc_size, "Password: ", !(passed_salt || in_noverify)) != 0)
 | 
				
			||||||
				goto err;
 | 
									goto err;
 | 
				
			||||||
		passwds[0] = passwd_malloc;
 | 
							passwds[0] = passwd_malloc;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -284,7 +291,8 @@ err:
 | 
				
			|||||||
		BIO_free(in);
 | 
							BIO_free(in);
 | 
				
			||||||
	if (out)
 | 
						if (out)
 | 
				
			||||||
		BIO_free_all(out);
 | 
							BIO_free_all(out);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -305,7 +313,7 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt)
 | 
				
			|||||||
	unsigned char buf[MD5_DIGEST_LENGTH];
 | 
						unsigned char buf[MD5_DIGEST_LENGTH];
 | 
				
			||||||
	char *salt_out;
 | 
						char *salt_out;
 | 
				
			||||||
	int n, i;
 | 
						int n, i;
 | 
				
			||||||
	MD5_CTX md;
 | 
						EVP_MD_CTX md,md2;
 | 
				
			||||||
	size_t passwd_len, salt_len;
 | 
						size_t passwd_len, salt_len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	passwd_len = strlen(passwd);
 | 
						passwd_len = strlen(passwd);
 | 
				
			||||||
@@ -320,49 +328,47 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt)
 | 
				
			|||||||
	salt_len = strlen(salt_out);
 | 
						salt_len = strlen(salt_out);
 | 
				
			||||||
	assert(salt_len <= 8);
 | 
						assert(salt_len <= 8);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	MD5_Init(&md);
 | 
						EVP_MD_CTX_init(&md);
 | 
				
			||||||
	MD5_Update(&md, passwd, passwd_len);
 | 
						EVP_DigestInit_ex(&md,EVP_md5(), NULL);
 | 
				
			||||||
	MD5_Update(&md, "$", 1);
 | 
						EVP_DigestUpdate(&md, passwd, passwd_len);
 | 
				
			||||||
	MD5_Update(&md, magic, strlen(magic));
 | 
						EVP_DigestUpdate(&md, "$", 1);
 | 
				
			||||||
	MD5_Update(&md, "$", 1);
 | 
						EVP_DigestUpdate(&md, magic, strlen(magic));
 | 
				
			||||||
	MD5_Update(&md, salt_out, salt_len);
 | 
						EVP_DigestUpdate(&md, "$", 1);
 | 
				
			||||||
 | 
						EVP_DigestUpdate(&md, salt_out, salt_len);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	 {
 | 
						EVP_MD_CTX_init(&md2);
 | 
				
			||||||
		MD5_CTX 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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		MD5_Init(&md2);
 | 
					 | 
				
			||||||
		MD5_Update(&md2, passwd, passwd_len);
 | 
					 | 
				
			||||||
		MD5_Update(&md2, salt_out, salt_len);
 | 
					 | 
				
			||||||
		MD5_Update(&md2, passwd, passwd_len);
 | 
					 | 
				
			||||||
		MD5_Final(buf, &md2);
 | 
					 | 
				
			||||||
	 }
 | 
					 | 
				
			||||||
	for (i = passwd_len; i > sizeof buf; i -= sizeof buf)
 | 
						for (i = passwd_len; i > sizeof buf; i -= sizeof buf)
 | 
				
			||||||
		MD5_Update(&md, buf, sizeof buf);
 | 
							EVP_DigestUpdate(&md, buf, sizeof buf);
 | 
				
			||||||
	MD5_Update(&md, buf, i);
 | 
						EVP_DigestUpdate(&md, buf, i);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	n = passwd_len;
 | 
						n = passwd_len;
 | 
				
			||||||
	while (n)
 | 
						while (n)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		MD5_Update(&md, (n & 1) ? "\0" : passwd, 1);
 | 
							EVP_DigestUpdate(&md, (n & 1) ? "\0" : passwd, 1);
 | 
				
			||||||
		n >>= 1;
 | 
							n >>= 1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	MD5_Final(buf, &md);
 | 
						EVP_DigestFinal_ex(&md, buf, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < 1000; i++)
 | 
						for (i = 0; i < 1000; i++)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		MD5_CTX md2;
 | 
							EVP_DigestInit_ex(&md2,EVP_md5(), NULL);
 | 
				
			||||||
 | 
							EVP_DigestUpdate(&md2, (i & 1) ? (unsigned char *) passwd : buf,
 | 
				
			||||||
		MD5_Init(&md2);
 | 
							                       (i & 1) ? passwd_len : sizeof buf);
 | 
				
			||||||
		MD5_Update(&md2, (i & 1) ? (unsigned char *) passwd : buf,
 | 
					 | 
				
			||||||
		                 (i & 1) ? passwd_len : sizeof buf);
 | 
					 | 
				
			||||||
		if (i % 3)
 | 
							if (i % 3)
 | 
				
			||||||
			MD5_Update(&md2, salt_out, salt_len);
 | 
								EVP_DigestUpdate(&md2, salt_out, salt_len);
 | 
				
			||||||
		if (i % 7)
 | 
							if (i % 7)
 | 
				
			||||||
			MD5_Update(&md2, passwd, passwd_len);
 | 
								EVP_DigestUpdate(&md2, passwd, passwd_len);
 | 
				
			||||||
		MD5_Update(&md2, (i & 1) ? buf : (unsigned char *) passwd,
 | 
							EVP_DigestUpdate(&md2, (i & 1) ? buf : (unsigned char *) passwd,
 | 
				
			||||||
		                 (i & 1) ? sizeof buf : passwd_len);
 | 
							                       (i & 1) ? sizeof buf : passwd_len);
 | 
				
			||||||
		MD5_Final(buf, &md2);
 | 
							EVP_DigestFinal_ex(&md2, buf, NULL);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						EVP_MD_CTX_cleanup(&md2);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	 {
 | 
						 {
 | 
				
			||||||
		/* transform buf into output string */
 | 
							/* transform buf into output string */
 | 
				
			||||||
@@ -400,6 +406,7 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt)
 | 
				
			|||||||
		*output = 0;
 | 
							*output = 0;
 | 
				
			||||||
		assert(strlen(out_buf) < sizeof(out_buf));
 | 
							assert(strlen(out_buf) < sizeof(out_buf));
 | 
				
			||||||
	 }
 | 
						 }
 | 
				
			||||||
 | 
						EVP_MD_CTX_cleanup(&md);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return out_buf;
 | 
						return out_buf;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -418,7 +425,7 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
 | 
				
			|||||||
	/* first make sure we have a salt */
 | 
						/* first make sure we have a salt */
 | 
				
			||||||
	if (!passed_salt)
 | 
						if (!passed_salt)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
		if (usecrypt)
 | 
							if (usecrypt)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (*salt_malloc_p == NULL)
 | 
								if (*salt_malloc_p == NULL)
 | 
				
			||||||
@@ -437,7 +444,7 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
 | 
				
			|||||||
			                                    * back to ASCII */
 | 
								                                    * back to ASCII */
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
#endif /* !NO_DES */
 | 
					#endif /* !OPENSSL_NO_DES */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_MD5CRYPT_1
 | 
					#ifndef NO_MD5CRYPT_1
 | 
				
			||||||
		if (use1 || useapr1)
 | 
							if (use1 || useapr1)
 | 
				
			||||||
@@ -472,9 +479,9 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
 | 
				
			|||||||
	assert(strlen(passwd) <= pw_maxlen);
 | 
						assert(strlen(passwd) <= pw_maxlen);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	/* now compute password hash */
 | 
						/* now compute password hash */
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
	if (usecrypt)
 | 
						if (usecrypt)
 | 
				
			||||||
		hash = des_crypt(passwd, *salt_p);
 | 
							hash = DES_crypt(passwd, *salt_p);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_MD5CRYPT_1
 | 
					#ifndef NO_MD5CRYPT_1
 | 
				
			||||||
	if (use1 || useapr1)
 | 
						if (use1 || useapr1)
 | 
				
			||||||
@@ -498,6 +505,6 @@ err:
 | 
				
			|||||||
int MAIN(int argc, char **argv)
 | 
					int MAIN(int argc, char **argv)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	fputs("Program not available.\n", stderr)
 | 
						fputs("Program not available.\n", stderr)
 | 
				
			||||||
	EXIT(1);
 | 
						OPENSSL_EXIT(1);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										135
									
								
								apps/pkcs12.c
									
									
									
									
									
								
							
							
						
						
									
										135
									
								
								apps/pkcs12.c
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
				
			|||||||
/* pkcs12.c */
 | 
					/* pkcs12.c */
 | 
				
			||||||
#if !defined(NO_DES) && !defined(NO_SHA1)
 | 
					#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
 | 
					/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
 | 
				
			||||||
 * project 1999.
 | 
					 * project 1999.
 | 
				
			||||||
@@ -66,11 +66,10 @@
 | 
				
			|||||||
#include <openssl/err.h>
 | 
					#include <openssl/err.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/pkcs12.h>
 | 
					#include <openssl/pkcs12.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PROG pkcs12_main
 | 
					#define PROG pkcs12_main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EVP_CIPHER *enc;
 | 
					const EVP_CIPHER *enc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define NOKEYS		0x1
 | 
					#define NOKEYS		0x1
 | 
				
			||||||
@@ -96,9 +95,10 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
    ENGINE *e = NULL;
 | 
					    ENGINE *e = NULL;
 | 
				
			||||||
    char *infile=NULL, *outfile=NULL, *keyname = NULL;	
 | 
					    char *infile=NULL, *outfile=NULL, *keyname = NULL;	
 | 
				
			||||||
    char *certfile=NULL;
 | 
					    char *certfile=NULL;
 | 
				
			||||||
    BIO *in=NULL, *out = NULL, *inkey = NULL, *certsin = NULL;
 | 
					    BIO *in=NULL, *out = NULL;
 | 
				
			||||||
    char **args;
 | 
					    char **args;
 | 
				
			||||||
    char *name = NULL;
 | 
					    char *name = NULL;
 | 
				
			||||||
 | 
					    char *csp_name = NULL;
 | 
				
			||||||
    PKCS12 *p12 = NULL;
 | 
					    PKCS12 *p12 = NULL;
 | 
				
			||||||
    char pass[50], macpass[50];
 | 
					    char pass[50], macpass[50];
 | 
				
			||||||
    int export_cert = 0;
 | 
					    int export_cert = 0;
 | 
				
			||||||
@@ -120,13 +120,18 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
    char *passin = NULL, *passout = NULL;
 | 
					    char *passin = NULL, *passout = NULL;
 | 
				
			||||||
    char *inrand = NULL;
 | 
					    char *inrand = NULL;
 | 
				
			||||||
    char *CApath = NULL, *CAfile = NULL;
 | 
					    char *CApath = NULL, *CAfile = NULL;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
    char *engine=NULL;
 | 
					    char *engine=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    apps_startup();
 | 
					    apps_startup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    enc = EVP_des_ede3_cbc();
 | 
					    enc = EVP_des_ede3_cbc();
 | 
				
			||||||
    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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    args = argv + 1;
 | 
					    args = argv + 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -147,10 +152,15 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
    			cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
 | 
					    			cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
 | 
				
			||||||
		else if (!strcmp (*args, "-export")) export_cert = 1;
 | 
							else if (!strcmp (*args, "-export")) export_cert = 1;
 | 
				
			||||||
		else if (!strcmp (*args, "-des")) enc=EVP_des_cbc();
 | 
							else if (!strcmp (*args, "-des")) enc=EVP_des_cbc();
 | 
				
			||||||
#ifndef NO_IDEA
 | 
					#ifndef OPENSSL_NO_IDEA
 | 
				
			||||||
		else if (!strcmp (*args, "-idea")) enc=EVP_idea_cbc();
 | 
							else if (!strcmp (*args, "-idea")) enc=EVP_idea_cbc();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		else if (!strcmp (*args, "-des3")) enc = EVP_des_ede3_cbc();
 | 
							else if (!strcmp (*args, "-des3")) enc = EVP_des_ede3_cbc();
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_AES
 | 
				
			||||||
 | 
							else if (!strcmp(*args,"-aes128")) enc=EVP_aes_128_cbc();
 | 
				
			||||||
 | 
							else if (!strcmp(*args,"-aes192")) enc=EVP_aes_192_cbc();
 | 
				
			||||||
 | 
							else if (!strcmp(*args,"-aes256")) enc=EVP_aes_256_cbc();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		else if (!strcmp (*args, "-noiter")) iter = 1;
 | 
							else if (!strcmp (*args, "-noiter")) iter = 1;
 | 
				
			||||||
		else if (!strcmp (*args, "-maciter"))
 | 
							else if (!strcmp (*args, "-maciter"))
 | 
				
			||||||
					 maciter = PKCS12_DEFAULT_ITER;
 | 
										 maciter = PKCS12_DEFAULT_ITER;
 | 
				
			||||||
@@ -197,6 +207,11 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			args++;	
 | 
								args++;	
 | 
				
			||||||
			name = *args;
 | 
								name = *args;
 | 
				
			||||||
		    } else badarg = 1;
 | 
							    } else badarg = 1;
 | 
				
			||||||
 | 
							} else if (!strcmp (*args, "-CSP")) {
 | 
				
			||||||
 | 
							    if (args[1]) {
 | 
				
			||||||
 | 
								args++;	
 | 
				
			||||||
 | 
								csp_name = *args;
 | 
				
			||||||
 | 
							    } else badarg = 1;
 | 
				
			||||||
		} else if (!strcmp (*args, "-caname")) {
 | 
							} else if (!strcmp (*args, "-caname")) {
 | 
				
			||||||
		    if (args[1]) {
 | 
							    if (args[1]) {
 | 
				
			||||||
			args++;	
 | 
								args++;	
 | 
				
			||||||
@@ -239,11 +254,13 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			args++;	
 | 
								args++;	
 | 
				
			||||||
			CAfile = *args;
 | 
								CAfile = *args;
 | 
				
			||||||
		    } else badarg = 1;
 | 
							    } else badarg = 1;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		} else if (!strcmp(*args,"-engine")) {
 | 
							} else if (!strcmp(*args,"-engine")) {
 | 
				
			||||||
		    if (args[1]) {
 | 
							    if (args[1]) {
 | 
				
			||||||
			args++;	
 | 
								args++;	
 | 
				
			||||||
			engine = *args;
 | 
								engine = *args;
 | 
				
			||||||
		    } else badarg = 1;
 | 
							    } else badarg = 1;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		} else badarg = 1;
 | 
							} else badarg = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	} else badarg = 1;
 | 
						} else badarg = 1;
 | 
				
			||||||
@@ -272,8 +289,12 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	BIO_printf (bio_err, "-info         give info about PKCS#12 structure.\n");
 | 
						BIO_printf (bio_err, "-info         give info about PKCS#12 structure.\n");
 | 
				
			||||||
	BIO_printf (bio_err, "-des          encrypt private keys with DES\n");
 | 
						BIO_printf (bio_err, "-des          encrypt private keys with DES\n");
 | 
				
			||||||
	BIO_printf (bio_err, "-des3         encrypt private keys with triple DES (default)\n");
 | 
						BIO_printf (bio_err, "-des3         encrypt private keys with triple DES (default)\n");
 | 
				
			||||||
#ifndef NO_IDEA
 | 
					#ifndef OPENSSL_NO_IDEA
 | 
				
			||||||
	BIO_printf (bio_err, "-idea         encrypt private keys with idea\n");
 | 
						BIO_printf (bio_err, "-idea         encrypt private keys with 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
 | 
					#endif
 | 
				
			||||||
	BIO_printf (bio_err, "-nodes        don't encrypt private keys\n");
 | 
						BIO_printf (bio_err, "-nodes        don't encrypt private keys\n");
 | 
				
			||||||
	BIO_printf (bio_err, "-noiter       don't use encryption iteration\n");
 | 
						BIO_printf (bio_err, "-noiter       don't use encryption iteration\n");
 | 
				
			||||||
@@ -287,26 +308,18 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	BIO_printf (bio_err, "-password p   set import/export password source\n");
 | 
						BIO_printf (bio_err, "-password p   set import/export password source\n");
 | 
				
			||||||
	BIO_printf (bio_err, "-passin p     input file pass phrase source\n");
 | 
						BIO_printf (bio_err, "-passin p     input file pass phrase source\n");
 | 
				
			||||||
	BIO_printf (bio_err, "-passout p    output file pass phrase source\n");
 | 
						BIO_printf (bio_err, "-passout p    output file pass phrase source\n");
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	BIO_printf (bio_err, "-engine e     use engine e, possibly a hardware device.\n");
 | 
						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,  "-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,  "              load the file (or the files in the directory) into\n");
 | 
				
			||||||
	BIO_printf(bio_err,  "              the random number generator\n");
 | 
						BIO_printf(bio_err,  "              the random number generator\n");
 | 
				
			||||||
    	goto end;
 | 
					    	goto end;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (engine != NULL) {
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	if((e = ENGINE_by_id(engine)) == NULL) {
 | 
					    e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
	    BIO_printf(bio_err,"invalid engine \"%s\"\n", engine);
 | 
					#endif
 | 
				
			||||||
	    goto end;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if(!ENGINE_set_default(e, ENGINE_METHOD_ALL)) {
 | 
					 | 
				
			||||||
	    BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
	    goto end;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
	/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
	ENGINE_free(e);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(passarg) {
 | 
					    if(passarg) {
 | 
				
			||||||
	if(export_cert) passargout = passarg;
 | 
						if(export_cert) passargout = passarg;
 | 
				
			||||||
@@ -352,6 +365,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	    goto end;
 | 
						    goto end;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
   if (certfile) {
 | 
					   if (certfile) {
 | 
				
			||||||
    	if(!(certsin = BIO_new_file(certfile, "r"))) {
 | 
					    	if(!(certsin = BIO_new_file(certfile, "r"))) {
 | 
				
			||||||
	    BIO_printf(bio_err, "Can't open certificate file %s\n", certfile);
 | 
						    BIO_printf(bio_err, "Can't open certificate file %s\n", certfile);
 | 
				
			||||||
@@ -367,6 +381,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	    goto end;
 | 
						    goto end;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
     }
 | 
					     }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CRYPTO_MDEBUG
 | 
					#ifdef CRYPTO_MDEBUG
 | 
				
			||||||
    CRYPTO_pop_info();
 | 
					    CRYPTO_pop_info();
 | 
				
			||||||
@@ -375,7 +390,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (!outfile) {
 | 
					    if (!outfile) {
 | 
				
			||||||
	out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
						out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
						    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
	    out = BIO_push(tmpbio, out);
 | 
						    out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -392,7 +407,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
#ifdef CRYPTO_MDEBUG
 | 
					#ifdef CRYPTO_MDEBUG
 | 
				
			||||||
    CRYPTO_push_info("read MAC password");
 | 
					    CRYPTO_push_info("read MAC password");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	if(EVP_read_pw_string (macpass, 50, "Enter MAC Password:", export_cert))
 | 
						if(EVP_read_pw_string (macpass, sizeof macpass, "Enter MAC Password:", export_cert))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
    	    BIO_printf (bio_err, "Can't read Password\n");
 | 
					    	    BIO_printf (bio_err, "Can't read Password\n");
 | 
				
			||||||
    	    goto end;
 | 
					    	    goto end;
 | 
				
			||||||
@@ -420,12 +435,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	CRYPTO_push_info("process -export_cert");
 | 
						CRYPTO_push_info("process -export_cert");
 | 
				
			||||||
	CRYPTO_push_info("reading private key");
 | 
						CRYPTO_push_info("reading private key");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	key = PEM_read_bio_PrivateKey(inkey ? inkey : in, NULL, NULL, passin);
 | 
						key = load_key(bio_err, keyname ? keyname : infile, FORMAT_PEM, 1,
 | 
				
			||||||
	if (!inkey) (void) BIO_reset(in);
 | 
							passin, e, "private key");
 | 
				
			||||||
	else BIO_free(inkey);
 | 
					 | 
				
			||||||
	if (!key) {
 | 
						if (!key) {
 | 
				
			||||||
		BIO_printf (bio_err, "Error loading private key\n");
 | 
					 | 
				
			||||||
		ERR_print_errors(bio_err);
 | 
					 | 
				
			||||||
		goto export_end;
 | 
							goto export_end;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -434,12 +446,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	CRYPTO_push_info("reading certs from input");
 | 
						CRYPTO_push_info("reading certs from input");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	certs = sk_X509_new_null();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* Load in all certs in input file */
 | 
						/* Load in all certs in input file */
 | 
				
			||||||
	if(!cert_load(in, certs)) {
 | 
						if(!(certs = load_certs(bio_err, infile, FORMAT_PEM, NULL, e,
 | 
				
			||||||
		BIO_printf(bio_err, "Error loading certificates from input\n");
 | 
							"certificates"))) {
 | 
				
			||||||
		ERR_print_errors(bio_err);
 | 
					 | 
				
			||||||
		goto export_end;
 | 
							goto export_end;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -469,13 +478,17 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	bags = sk_PKCS12_SAFEBAG_new_null ();
 | 
						bags = sk_PKCS12_SAFEBAG_new_null ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Add any more certificates asked for */
 | 
						/* Add any more certificates asked for */
 | 
				
			||||||
	if (certsin) {
 | 
						if (certfile) {
 | 
				
			||||||
		if(!cert_load(certsin, certs)) {
 | 
							STACK_OF(X509) *morecerts=NULL;
 | 
				
			||||||
			BIO_printf(bio_err, "Error loading certificates from certfile\n");
 | 
							if(!(morecerts = load_certs(bio_err, certfile, FORMAT_PEM,
 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
										    NULL, e,
 | 
				
			||||||
 | 
										    "certificates from certfile"))) {
 | 
				
			||||||
			goto export_end;
 | 
								goto export_end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	    	BIO_free(certsin);
 | 
							while(sk_X509_num(morecerts) > 0) {
 | 
				
			||||||
 | 
								sk_X509_push(certs, sk_X509_shift(morecerts));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							sk_X509_free(morecerts);
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CRYPTO_MDEBUG
 | 
					#ifdef CRYPTO_MDEBUG
 | 
				
			||||||
@@ -503,9 +516,10 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		    /* Exclude verified certificate */
 | 
							    /* Exclude verified certificate */
 | 
				
			||||||
		    for (i = 1; i < sk_X509_num (chain2) ; i++) 
 | 
							    for (i = 1; i < sk_X509_num (chain2) ; i++) 
 | 
				
			||||||
			sk_X509_push(certs, sk_X509_value (chain2, i));
 | 
								sk_X509_push(certs, sk_X509_value (chain2, i));
 | 
				
			||||||
		}
 | 
							    /* Free first certificate */
 | 
				
			||||||
		sk_X509_free(chain2);
 | 
							    X509_free(sk_X509_value(chain2, 0));
 | 
				
			||||||
		if (vret) {
 | 
							    sk_X509_free(chain2);
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
			BIO_printf (bio_err, "Error %s getting chain.\n",
 | 
								BIO_printf (bio_err, "Error %s getting chain.\n",
 | 
				
			||||||
					X509_verify_cert_error_string(vret));
 | 
										X509_verify_cert_error_string(vret));
 | 
				
			||||||
			goto export_end;
 | 
								goto export_end;
 | 
				
			||||||
@@ -521,7 +535,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	for(i = 0; i < sk_X509_num(certs); i++) {
 | 
						for(i = 0; i < sk_X509_num(certs); i++) {
 | 
				
			||||||
		X509 *cert = NULL;
 | 
							X509 *cert = NULL;
 | 
				
			||||||
		cert = sk_X509_value(certs, i);
 | 
							cert = sk_X509_value(certs, i);
 | 
				
			||||||
		bag = M_PKCS12_x5092certbag(cert);
 | 
							bag = PKCS12_x5092certbag(cert);
 | 
				
			||||||
		/* If it matches private key set id */
 | 
							/* If it matches private key set id */
 | 
				
			||||||
		if(cert == ucert) {
 | 
							if(cert == ucert) {
 | 
				
			||||||
			if(name) PKCS12_add_friendlyname(bag, name, -1);
 | 
								if(name) PKCS12_add_friendlyname(bag, name, -1);
 | 
				
			||||||
@@ -532,8 +546,6 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	sk_X509_pop_free(certs, X509_free);
 | 
						sk_X509_pop_free(certs, X509_free);
 | 
				
			||||||
	certs = NULL;
 | 
						certs = NULL;
 | 
				
			||||||
	/* ucert is part of certs so it is already freed */
 | 
					 | 
				
			||||||
	ucert = NULL;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CRYPTO_MDEBUG
 | 
					#ifdef CRYPTO_MDEBUG
 | 
				
			||||||
	CRYPTO_pop_info();
 | 
						CRYPTO_pop_info();
 | 
				
			||||||
@@ -541,11 +553,11 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(!noprompt &&
 | 
						if(!noprompt &&
 | 
				
			||||||
		EVP_read_pw_string(pass, 50, "Enter Export Password:", 1)) {
 | 
							EVP_read_pw_string(pass, sizeof pass, "Enter Export Password:", 1)) {
 | 
				
			||||||
	    BIO_printf (bio_err, "Can't read Password\n");
 | 
						    BIO_printf (bio_err, "Can't read Password\n");
 | 
				
			||||||
	    goto export_end;
 | 
						    goto export_end;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
	if (!twopass) strcpy(macpass, pass);
 | 
						if (!twopass) BUF_strlcpy(macpass, pass, sizeof macpass);
 | 
				
			||||||
	/* Turn certbags into encrypted authsafe */
 | 
						/* Turn certbags into encrypted authsafe */
 | 
				
			||||||
	authsafe = PKCS12_pack_p7encdata(cert_pbe, cpass, -1, NULL, 0,
 | 
						authsafe = PKCS12_pack_p7encdata(cert_pbe, cpass, -1, NULL, 0,
 | 
				
			||||||
								 iter, bags);
 | 
													 iter, bags);
 | 
				
			||||||
@@ -572,6 +584,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	PKCS8_PRIV_KEY_INFO_free(p8);
 | 
						PKCS8_PRIV_KEY_INFO_free(p8);
 | 
				
			||||||
	p8 = NULL;
 | 
						p8 = NULL;
 | 
				
			||||||
        if (name) PKCS12_add_friendlyname (bag, name, -1);
 | 
					        if (name) PKCS12_add_friendlyname (bag, name, -1);
 | 
				
			||||||
 | 
						if(csp_name) PKCS12_add_CSPName_asc(bag, csp_name, -1);
 | 
				
			||||||
	PKCS12_add_localkeyid (bag, keyid, keyidlen);
 | 
						PKCS12_add_localkeyid (bag, keyid, keyidlen);
 | 
				
			||||||
	bags = sk_PKCS12_SAFEBAG_new_null();
 | 
						bags = sk_PKCS12_SAFEBAG_new_null();
 | 
				
			||||||
	sk_PKCS12_SAFEBAG_push (bags, bag);
 | 
						sk_PKCS12_SAFEBAG_push (bags, bag);
 | 
				
			||||||
@@ -592,9 +605,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	CRYPTO_push_info("building pkcs12");
 | 
						CRYPTO_push_info("building pkcs12");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	p12 = PKCS12_init (NID_pkcs7_data);
 | 
						p12 = PKCS12_init(NID_pkcs7_data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	M_PKCS12_pack_authsafes (p12, safes);
 | 
						PKCS12_pack_authsafes(p12, safes);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sk_PKCS7_pop_free(safes, PKCS7_free);
 | 
						sk_PKCS7_pop_free(safes, PKCS7_free);
 | 
				
			||||||
	safes = NULL;
 | 
						safes = NULL;
 | 
				
			||||||
@@ -621,7 +634,6 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	if (certs) sk_X509_pop_free(certs, X509_free);
 | 
						if (certs) sk_X509_pop_free(certs, X509_free);
 | 
				
			||||||
	if (safes) sk_PKCS7_pop_free(safes, PKCS7_free);
 | 
						if (safes) sk_PKCS7_pop_free(safes, PKCS7_free);
 | 
				
			||||||
	if (bags) sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free);
 | 
						if (bags) sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free);
 | 
				
			||||||
	if (ucert) X509_free(ucert);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CRYPTO_MDEBUG
 | 
					#ifdef CRYPTO_MDEBUG
 | 
				
			||||||
	CRYPTO_pop_info();
 | 
						CRYPTO_pop_info();
 | 
				
			||||||
@@ -638,7 +650,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
#ifdef CRYPTO_MDEBUG
 | 
					#ifdef CRYPTO_MDEBUG
 | 
				
			||||||
    CRYPTO_push_info("read import password");
 | 
					    CRYPTO_push_info("read import password");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    if(!noprompt && EVP_read_pw_string(pass, 50, "Enter Import Password:", 0)) {
 | 
					    if(!noprompt && EVP_read_pw_string(pass, sizeof pass, "Enter Import Password:", 0)) {
 | 
				
			||||||
	BIO_printf (bio_err, "Can't read Password\n");
 | 
						BIO_printf (bio_err, "Can't read Password\n");
 | 
				
			||||||
	goto end;
 | 
						goto end;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -646,7 +658,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
    CRYPTO_pop_info();
 | 
					    CRYPTO_pop_info();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!twopass) strcpy(macpass, pass);
 | 
					    if (!twopass) BUF_strlcpy(macpass, pass, sizeof macpass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (options & INFO) BIO_printf (bio_err, "MAC Iteration %ld\n", p12->mac->iter ? ASN1_INTEGER_get (p12->mac->iter) : 1);
 | 
					    if (options & INFO) BIO_printf (bio_err, "MAC Iteration %ld\n", p12->mac->iter ? ASN1_INTEGER_get (p12->mac->iter) : 1);
 | 
				
			||||||
    if(macver) {
 | 
					    if(macver) {
 | 
				
			||||||
@@ -691,7 +703,8 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
    if (canames) sk_free(canames);
 | 
					    if (canames) sk_free(canames);
 | 
				
			||||||
    if(passin) OPENSSL_free(passin);
 | 
					    if(passin) OPENSSL_free(passin);
 | 
				
			||||||
    if(passout) OPENSSL_free(passout);
 | 
					    if(passout) OPENSSL_free(passout);
 | 
				
			||||||
    EXIT(ret);
 | 
					    apps_shutdown();
 | 
				
			||||||
 | 
					    OPENSSL_EXIT(ret);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int dump_certs_keys_p12 (BIO *out, PKCS12 *p12, char *pass,
 | 
					int dump_certs_keys_p12 (BIO *out, PKCS12 *p12, char *pass,
 | 
				
			||||||
@@ -702,20 +715,20 @@ int dump_certs_keys_p12 (BIO *out, PKCS12 *p12, char *pass,
 | 
				
			|||||||
	int i, bagnid;
 | 
						int i, bagnid;
 | 
				
			||||||
	PKCS7 *p7;
 | 
						PKCS7 *p7;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!( asafes = M_PKCS12_unpack_authsafes (p12))) return 0;
 | 
						if (!( asafes = PKCS12_unpack_authsafes(p12))) return 0;
 | 
				
			||||||
	for (i = 0; i < sk_PKCS7_num (asafes); i++) {
 | 
						for (i = 0; i < sk_PKCS7_num (asafes); i++) {
 | 
				
			||||||
		p7 = sk_PKCS7_value (asafes, i);
 | 
							p7 = sk_PKCS7_value (asafes, i);
 | 
				
			||||||
		bagnid = OBJ_obj2nid (p7->type);
 | 
							bagnid = OBJ_obj2nid (p7->type);
 | 
				
			||||||
		if (bagnid == NID_pkcs7_data) {
 | 
							if (bagnid == NID_pkcs7_data) {
 | 
				
			||||||
			bags = M_PKCS12_unpack_p7data (p7);
 | 
								bags = PKCS12_unpack_p7data(p7);
 | 
				
			||||||
			if (options & INFO) BIO_printf (bio_err, "PKCS7 Data\n");
 | 
								if (options & INFO) BIO_printf (bio_err, "PKCS7 Data\n");
 | 
				
			||||||
		} else if (bagnid == NID_pkcs7_encrypted) {
 | 
							} else if (bagnid == NID_pkcs7_encrypted) {
 | 
				
			||||||
			if (options & INFO) {
 | 
								if (options & INFO) {
 | 
				
			||||||
				BIO_printf (bio_err, "PKCS7 Encrypted data: ");
 | 
									BIO_printf(bio_err, "PKCS7 Encrypted data: ");
 | 
				
			||||||
				alg_print (bio_err, 
 | 
									alg_print(bio_err, 
 | 
				
			||||||
					p7->d.encrypted->enc_data->algorithm);
 | 
										p7->d.encrypted->enc_data->algorithm);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			bags = M_PKCS12_unpack_p7encdata (p7, pass, passlen);
 | 
								bags = PKCS12_unpack_p7encdata(p7, pass, passlen);
 | 
				
			||||||
		} else continue;
 | 
							} else continue;
 | 
				
			||||||
		if (!bags) return 0;
 | 
							if (!bags) return 0;
 | 
				
			||||||
	    	if (!dump_certs_pkeys_bags (out, bags, pass, passlen, 
 | 
						    	if (!dump_certs_pkeys_bags (out, bags, pass, passlen, 
 | 
				
			||||||
@@ -770,9 +783,12 @@ int dump_certs_pkeys_bag (BIO *out, PKCS12_SAFEBAG *bag, char *pass,
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		if (options & NOKEYS) return 1;
 | 
							if (options & NOKEYS) return 1;
 | 
				
			||||||
		print_attribs (out, bag->attrib, "Bag Attributes");
 | 
							print_attribs (out, bag->attrib, "Bag Attributes");
 | 
				
			||||||
		if (!(p8 = M_PKCS12_decrypt_skey (bag, pass, passlen)))
 | 
							if (!(p8 = PKCS12_decrypt_skey(bag, pass, passlen)))
 | 
				
			||||||
				return 0;
 | 
									return 0;
 | 
				
			||||||
		if (!(pkey = EVP_PKCS82PKEY (p8))) return 0;
 | 
							if (!(pkey = EVP_PKCS82PKEY (p8))) {
 | 
				
			||||||
 | 
								PKCS8_PRIV_KEY_INFO_free(p8);
 | 
				
			||||||
 | 
								return 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		print_attribs (out, p8->attributes, "Key Attributes");
 | 
							print_attribs (out, p8->attributes, "Key Attributes");
 | 
				
			||||||
		PKCS8_PRIV_KEY_INFO_free(p8);
 | 
							PKCS8_PRIV_KEY_INFO_free(p8);
 | 
				
			||||||
		PEM_write_bio_PrivateKey (out, pkey, enc, NULL, 0, NULL, pempass);
 | 
							PEM_write_bio_PrivateKey (out, pkey, enc, NULL, 0, NULL, pempass);
 | 
				
			||||||
@@ -788,7 +804,7 @@ int dump_certs_pkeys_bag (BIO *out, PKCS12_SAFEBAG *bag, char *pass,
 | 
				
			|||||||
		print_attribs (out, bag->attrib, "Bag Attributes");
 | 
							print_attribs (out, bag->attrib, "Bag Attributes");
 | 
				
			||||||
		if (M_PKCS12_cert_bag_type(bag) != NID_x509Certificate )
 | 
							if (M_PKCS12_cert_bag_type(bag) != NID_x509Certificate )
 | 
				
			||||||
								 return 1;
 | 
													 return 1;
 | 
				
			||||||
		if (!(x509 = M_PKCS12_certbag2x509(bag))) return 0;
 | 
							if (!(x509 = PKCS12_certbag2x509(bag))) return 0;
 | 
				
			||||||
		dump_cert_text (out, x509);
 | 
							dump_cert_text (out, x509);
 | 
				
			||||||
		PEM_write_bio_X509 (out, x509);
 | 
							PEM_write_bio_X509 (out, x509);
 | 
				
			||||||
		X509_free(x509);
 | 
							X509_free(x509);
 | 
				
			||||||
@@ -820,6 +836,9 @@ int get_cert_chain (X509 *cert, X509_STORE *store, STACK_OF(X509) **chain)
 | 
				
			|||||||
	STACK_OF(X509) *chn;
 | 
						STACK_OF(X509) *chn;
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* FIXME: Should really check the return status of X509_STORE_CTX_init
 | 
				
			||||||
 | 
						 * for an error, but how that fits into the return value of this
 | 
				
			||||||
 | 
						 * function is less obvious. */
 | 
				
			||||||
	X509_STORE_CTX_init(&store_ctx, store, cert, NULL);
 | 
						X509_STORE_CTX_init(&store_ctx, store, cert, NULL);
 | 
				
			||||||
	if (X509_verify_cert(&store_ctx) <= 0) {
 | 
						if (X509_verify_cert(&store_ctx) <= 0) {
 | 
				
			||||||
		i = X509_STORE_CTX_get_error (&store_ctx);
 | 
							i = X509_STORE_CTX_get_error (&store_ctx);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										42
									
								
								apps/pkcs7.c
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								apps/pkcs7.c
									
									
									
									
									
								
							@@ -67,7 +67,6 @@
 | 
				
			|||||||
#include <openssl/x509.h>
 | 
					#include <openssl/x509.h>
 | 
				
			||||||
#include <openssl/pkcs7.h>
 | 
					#include <openssl/pkcs7.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef PROG
 | 
					#undef PROG
 | 
				
			||||||
#define PROG	pkcs7_main
 | 
					#define PROG	pkcs7_main
 | 
				
			||||||
@@ -83,15 +82,19 @@ int MAIN(int, char **);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int MAIN(int argc, char **argv)
 | 
					int MAIN(int argc, char **argv)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	ENGINE *e = NULL;
 | 
						ENGINE *e = NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	PKCS7 *p7=NULL;
 | 
						PKCS7 *p7=NULL;
 | 
				
			||||||
	int i,badops=0;
 | 
						int i,badops=0;
 | 
				
			||||||
	BIO *in=NULL,*out=NULL;
 | 
						BIO *in=NULL,*out=NULL;
 | 
				
			||||||
	int informat,outformat;
 | 
						int informat,outformat;
 | 
				
			||||||
	char *infile,*outfile,*prog;
 | 
						char *infile,*outfile,*prog;
 | 
				
			||||||
	int print_certs=0,text=0,noout=0;
 | 
						int print_certs=0,text=0,noout=0;
 | 
				
			||||||
	int ret=0;
 | 
						int ret=1;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	char *engine=NULL;
 | 
						char *engine=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apps_startup();
 | 
						apps_startup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -99,6 +102,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	infile=NULL;
 | 
						infile=NULL;
 | 
				
			||||||
	outfile=NULL;
 | 
						outfile=NULL;
 | 
				
			||||||
	informat=FORMAT_PEM;
 | 
						informat=FORMAT_PEM;
 | 
				
			||||||
@@ -135,11 +141,13 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			text=1;
 | 
								text=1;
 | 
				
			||||||
		else if (strcmp(*argv,"-print_certs") == 0)
 | 
							else if (strcmp(*argv,"-print_certs") == 0)
 | 
				
			||||||
			print_certs=1;
 | 
								print_certs=1;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
							else if (strcmp(*argv,"-engine") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			engine= *(++argv);
 | 
								engine= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
								BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
				
			||||||
@@ -162,29 +170,18 @@ bad:
 | 
				
			|||||||
		BIO_printf(bio_err," -print_certs  print any certs or crl in the input\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," -text         print full details of certificates\n");
 | 
				
			||||||
		BIO_printf(bio_err," -noout        don't output encoded data\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");
 | 
				
			||||||
		EXIT(1);
 | 
					#endif
 | 
				
			||||||
 | 
							ret = 1;
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ERR_load_crypto_strings();
 | 
						ERR_load_crypto_strings();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
					 | 
				
			||||||
				engine);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	in=BIO_new(BIO_s_file());
 | 
						in=BIO_new(BIO_s_file());
 | 
				
			||||||
	out=BIO_new(BIO_s_file());
 | 
						out=BIO_new(BIO_s_file());
 | 
				
			||||||
@@ -225,7 +222,7 @@ bad:
 | 
				
			|||||||
	if (outfile == NULL)
 | 
						if (outfile == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
							BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		out = BIO_push(tmpbio, out);
 | 
							out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -316,5 +313,6 @@ end:
 | 
				
			|||||||
	if (p7 != NULL) PKCS7_free(p7);
 | 
						if (p7 != NULL) PKCS7_free(p7);
 | 
				
			||||||
	if (in != NULL) BIO_free(in);
 | 
						if (in != NULL) BIO_free(in);
 | 
				
			||||||
	if (out != NULL) BIO_free_all(out);
 | 
						if (out != NULL) BIO_free_all(out);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										71
									
								
								apps/pkcs8.c
									
									
									
									
									
								
							
							
						
						
									
										71
									
								
								apps/pkcs8.c
									
									
									
									
									
								
							@@ -62,9 +62,7 @@
 | 
				
			|||||||
#include <openssl/err.h>
 | 
					#include <openssl/err.h>
 | 
				
			||||||
#include <openssl/evp.h>
 | 
					#include <openssl/evp.h>
 | 
				
			||||||
#include <openssl/pkcs12.h>
 | 
					#include <openssl/pkcs12.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "apps.h"
 | 
					 | 
				
			||||||
#define PROG pkcs8_main
 | 
					#define PROG pkcs8_main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int MAIN(int, char **);
 | 
					int MAIN(int, char **);
 | 
				
			||||||
@@ -84,13 +82,18 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	int nocrypt = 0;
 | 
						int nocrypt = 0;
 | 
				
			||||||
	X509_SIG *p8;
 | 
						X509_SIG *p8;
 | 
				
			||||||
	PKCS8_PRIV_KEY_INFO *p8inf;
 | 
						PKCS8_PRIV_KEY_INFO *p8inf;
 | 
				
			||||||
	EVP_PKEY *pkey;
 | 
						EVP_PKEY *pkey=NULL;
 | 
				
			||||||
	char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL;
 | 
						char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL;
 | 
				
			||||||
	int badarg = 0;
 | 
						int badarg = 0;
 | 
				
			||||||
 | 
					#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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	informat=FORMAT_PEM;
 | 
						informat=FORMAT_PEM;
 | 
				
			||||||
	outformat=FORMAT_PEM;
 | 
						outformat=FORMAT_PEM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -144,11 +147,13 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			if (!args[1]) goto bad;
 | 
								if (!args[1]) goto bad;
 | 
				
			||||||
			passargout= *(++args);
 | 
								passargout= *(++args);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		else if (strcmp(*args,"-engine") == 0)
 | 
							else if (strcmp(*args,"-engine") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (!args[1]) goto bad;
 | 
								if (!args[1]) goto bad;
 | 
				
			||||||
			engine= *(++args);
 | 
								engine= *(++args);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		else if (!strcmp (*args, "-in")) {
 | 
							else if (!strcmp (*args, "-in")) {
 | 
				
			||||||
			if (args[1]) {
 | 
								if (args[1]) {
 | 
				
			||||||
				args++;
 | 
									args++;
 | 
				
			||||||
@@ -181,27 +186,15 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		BIO_printf(bio_err, "-nocrypt        use or expect unencrypted private key\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, "-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");
 | 
							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
 | 
				
			||||||
		return (1);
 | 
							return (1);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
					 | 
				
			||||||
				engine);
 | 
					 | 
				
			||||||
			return (1);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			return (1);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
						if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
				
			||||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
							BIO_printf(bio_err, "Error getting passwords\n");
 | 
				
			||||||
@@ -226,30 +219,23 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		out = BIO_new_fp (stdout, BIO_NOCLOSE);
 | 
							out = BIO_new_fp (stdout, BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
								BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
			out = BIO_push(tmpbio, out);
 | 
								out = BIO_push(tmpbio, out);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (topk8) {
 | 
						if (topk8)
 | 
				
			||||||
		if(informat == FORMAT_PEM)
 | 
							{
 | 
				
			||||||
			pkey = PEM_read_bio_PrivateKey(in, NULL, NULL, passin);
 | 
							BIO_free(in); /* Not needed in this section */
 | 
				
			||||||
		else if(informat == FORMAT_ASN1)
 | 
							pkey = load_key(bio_err, infile, informat, 1,
 | 
				
			||||||
			pkey = d2i_PrivateKey_bio(in, NULL);
 | 
								passin, e, "key");
 | 
				
			||||||
		else {
 | 
					 | 
				
			||||||
			BIO_printf(bio_err, "Bad format specified for key\n");
 | 
					 | 
				
			||||||
			return (1);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if (!pkey) {
 | 
							if (!pkey) {
 | 
				
			||||||
			BIO_printf(bio_err, "Error reading key\n", outfile);
 | 
					 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
					 | 
				
			||||||
			return (1);
 | 
								return (1);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		BIO_free(in);
 | 
					 | 
				
			||||||
		if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken))) {
 | 
							if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken))) {
 | 
				
			||||||
			BIO_printf(bio_err, "Error converting key\n", outfile);
 | 
								BIO_printf(bio_err, "Error converting key\n");
 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
								ERR_print_errors(bio_err);
 | 
				
			||||||
			return (1);
 | 
								return (1);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -266,14 +252,14 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			if(passout) p8pass = passout;
 | 
								if(passout) p8pass = passout;
 | 
				
			||||||
			else {
 | 
								else {
 | 
				
			||||||
				p8pass = pass;
 | 
									p8pass = pass;
 | 
				
			||||||
				EVP_read_pw_string(pass, 50, "Enter Encryption Password:", 1);
 | 
									if (EVP_read_pw_string(pass, sizeof pass, "Enter Encryption Password:", 1))
 | 
				
			||||||
 | 
										return (1);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			app_RAND_load_file(NULL, bio_err, 0);
 | 
								app_RAND_load_file(NULL, bio_err, 0);
 | 
				
			||||||
			if (!(p8 = PKCS8_encrypt(pbe_nid, cipher,
 | 
								if (!(p8 = PKCS8_encrypt(pbe_nid, cipher,
 | 
				
			||||||
					p8pass, strlen(p8pass),
 | 
										p8pass, strlen(p8pass),
 | 
				
			||||||
					NULL, 0, iter, p8inf))) {
 | 
										NULL, 0, iter, p8inf))) {
 | 
				
			||||||
				BIO_printf(bio_err, "Error encrypting key\n",
 | 
									BIO_printf(bio_err, "Error encrypting key\n");
 | 
				
			||||||
								 outfile);
 | 
					 | 
				
			||||||
				ERR_print_errors(bio_err);
 | 
									ERR_print_errors(bio_err);
 | 
				
			||||||
				return (1);
 | 
									return (1);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -316,27 +302,27 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (!p8) {
 | 
							if (!p8) {
 | 
				
			||||||
			BIO_printf (bio_err, "Error reading key\n", outfile);
 | 
								BIO_printf (bio_err, "Error reading key\n");
 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
								ERR_print_errors(bio_err);
 | 
				
			||||||
			return (1);
 | 
								return (1);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if(passin) p8pass = passin;
 | 
							if(passin) p8pass = passin;
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			p8pass = pass;
 | 
								p8pass = pass;
 | 
				
			||||||
			EVP_read_pw_string(pass, 50, "Enter Password:", 0);
 | 
								EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		p8inf = M_PKCS8_decrypt(p8, p8pass, strlen(p8pass));
 | 
							p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass));
 | 
				
			||||||
		X509_SIG_free(p8);
 | 
							X509_SIG_free(p8);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!p8inf) {
 | 
						if (!p8inf) {
 | 
				
			||||||
		BIO_printf(bio_err, "Error decrypting key\n", outfile);
 | 
							BIO_printf(bio_err, "Error decrypting key\n");
 | 
				
			||||||
		ERR_print_errors(bio_err);
 | 
							ERR_print_errors(bio_err);
 | 
				
			||||||
		return (1);
 | 
							return (1);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!(pkey = EVP_PKCS82PKEY(p8inf))) {
 | 
						if (!(pkey = EVP_PKCS82PKEY(p8inf))) {
 | 
				
			||||||
		BIO_printf(bio_err, "Error converting key\n", outfile);
 | 
							BIO_printf(bio_err, "Error converting key\n");
 | 
				
			||||||
		ERR_print_errors(bio_err);
 | 
							ERR_print_errors(bio_err);
 | 
				
			||||||
		return (1);
 | 
							return (1);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -372,6 +358,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			return (1);
 | 
								return (1);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						end:
 | 
				
			||||||
	EVP_PKEY_free(pkey);
 | 
						EVP_PKEY_free(pkey);
 | 
				
			||||||
	BIO_free_all(out);
 | 
						BIO_free_all(out);
 | 
				
			||||||
	BIO_free(in);
 | 
						BIO_free(in);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										160
									
								
								apps/progs.h
									
									
									
									
									
								
							
							
						
						
									
										160
									
								
								apps/progs.h
									
									
									
									
									
								
							@@ -35,6 +35,10 @@ extern int pkcs8_main(int argc,char *argv[]);
 | 
				
			|||||||
extern int spkac_main(int argc,char *argv[]);
 | 
					extern int spkac_main(int argc,char *argv[]);
 | 
				
			||||||
extern int smime_main(int argc,char *argv[]);
 | 
					extern int smime_main(int argc,char *argv[]);
 | 
				
			||||||
extern int rand_main(int argc,char *argv[]);
 | 
					extern int rand_main(int argc,char *argv[]);
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
					extern int engine_main(int argc,char *argv[]);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					extern int ocsp_main(int argc,char *argv[]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define FUNC_TYPE_GENERAL	1
 | 
					#define FUNC_TYPE_GENERAL	1
 | 
				
			||||||
#define FUNC_TYPE_MD		2
 | 
					#define FUNC_TYPE_MD		2
 | 
				
			||||||
@@ -51,205 +55,243 @@ FUNCTION functions[] = {
 | 
				
			|||||||
	{FUNC_TYPE_GENERAL,"asn1parse",asn1parse_main},
 | 
						{FUNC_TYPE_GENERAL,"asn1parse",asn1parse_main},
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"req",req_main},
 | 
						{FUNC_TYPE_GENERAL,"req",req_main},
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"dgst",dgst_main},
 | 
						{FUNC_TYPE_GENERAL,"dgst",dgst_main},
 | 
				
			||||||
#ifndef NO_DH
 | 
					#ifndef OPENSSL_NO_DH
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"dh",dh_main},
 | 
						{FUNC_TYPE_GENERAL,"dh",dh_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DH
 | 
					#ifndef OPENSSL_NO_DH
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"dhparam",dhparam_main},
 | 
						{FUNC_TYPE_GENERAL,"dhparam",dhparam_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"enc",enc_main},
 | 
						{FUNC_TYPE_GENERAL,"enc",enc_main},
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"passwd",passwd_main},
 | 
						{FUNC_TYPE_GENERAL,"passwd",passwd_main},
 | 
				
			||||||
#ifndef NO_DH
 | 
					#ifndef OPENSSL_NO_DH
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"gendh",gendh_main},
 | 
						{FUNC_TYPE_GENERAL,"gendh",gendh_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"errstr",errstr_main},
 | 
						{FUNC_TYPE_GENERAL,"errstr",errstr_main},
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"ca",ca_main},
 | 
						{FUNC_TYPE_GENERAL,"ca",ca_main},
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"crl",crl_main},
 | 
						{FUNC_TYPE_GENERAL,"crl",crl_main},
 | 
				
			||||||
#ifndef NO_RSA
 | 
					#ifndef OPENSSL_NO_RSA
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"rsa",rsa_main},
 | 
						{FUNC_TYPE_GENERAL,"rsa",rsa_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RSA
 | 
					#ifndef OPENSSL_NO_RSA
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"rsautl",rsautl_main},
 | 
						{FUNC_TYPE_GENERAL,"rsautl",rsautl_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"dsa",dsa_main},
 | 
						{FUNC_TYPE_GENERAL,"dsa",dsa_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"dsaparam",dsaparam_main},
 | 
						{FUNC_TYPE_GENERAL,"dsaparam",dsaparam_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"x509",x509_main},
 | 
						{FUNC_TYPE_GENERAL,"x509",x509_main},
 | 
				
			||||||
#ifndef NO_RSA
 | 
					#ifndef OPENSSL_NO_RSA
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"genrsa",genrsa_main},
 | 
						{FUNC_TYPE_GENERAL,"genrsa",genrsa_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"gendsa",gendsa_main},
 | 
						{FUNC_TYPE_GENERAL,"gendsa",gendsa_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(NO_SSL3))
 | 
					#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"s_server",s_server_main},
 | 
						{FUNC_TYPE_GENERAL,"s_server",s_server_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(NO_SSL3))
 | 
					#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"s_client",s_client_main},
 | 
						{FUNC_TYPE_GENERAL,"s_client",s_client_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_SPEED
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"speed",speed_main},
 | 
						{FUNC_TYPE_GENERAL,"speed",speed_main},
 | 
				
			||||||
#if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(NO_SSL3))
 | 
					#endif
 | 
				
			||||||
 | 
					#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"s_time",s_time_main},
 | 
						{FUNC_TYPE_GENERAL,"s_time",s_time_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"version",version_main},
 | 
						{FUNC_TYPE_GENERAL,"version",version_main},
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"pkcs7",pkcs7_main},
 | 
						{FUNC_TYPE_GENERAL,"pkcs7",pkcs7_main},
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"crl2pkcs7",crl2pkcs7_main},
 | 
						{FUNC_TYPE_GENERAL,"crl2pkcs7",crl2pkcs7_main},
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"sess_id",sess_id_main},
 | 
						{FUNC_TYPE_GENERAL,"sess_id",sess_id_main},
 | 
				
			||||||
#if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(NO_SSL3))
 | 
					#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"ciphers",ciphers_main},
 | 
						{FUNC_TYPE_GENERAL,"ciphers",ciphers_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"nseq",nseq_main},
 | 
						{FUNC_TYPE_GENERAL,"nseq",nseq_main},
 | 
				
			||||||
#if !defined(NO_DES) && !defined(NO_SHA1)
 | 
					#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1)
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"pkcs12",pkcs12_main},
 | 
						{FUNC_TYPE_GENERAL,"pkcs12",pkcs12_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"pkcs8",pkcs8_main},
 | 
						{FUNC_TYPE_GENERAL,"pkcs8",pkcs8_main},
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"spkac",spkac_main},
 | 
						{FUNC_TYPE_GENERAL,"spkac",spkac_main},
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"smime",smime_main},
 | 
						{FUNC_TYPE_GENERAL,"smime",smime_main},
 | 
				
			||||||
	{FUNC_TYPE_GENERAL,"rand",rand_main},
 | 
						{FUNC_TYPE_GENERAL,"rand",rand_main},
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
						{FUNC_TYPE_GENERAL,"engine",engine_main},
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						{FUNC_TYPE_GENERAL,"ocsp",ocsp_main},
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_MD2
 | 
				
			||||||
	{FUNC_TYPE_MD,"md2",dgst_main},
 | 
						{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_AES
 | 
				
			||||||
 | 
						{FUNC_TYPE_CIPHER,"aes-128-cbc",enc_main},
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_AES
 | 
				
			||||||
 | 
						{FUNC_TYPE_CIPHER,"aes-128-ecb",enc_main},
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_AES
 | 
				
			||||||
 | 
						{FUNC_TYPE_CIPHER,"aes-192-cbc",enc_main},
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_AES
 | 
				
			||||||
 | 
						{FUNC_TYPE_CIPHER,"aes-192-ecb",enc_main},
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_AES
 | 
				
			||||||
 | 
						{FUNC_TYPE_CIPHER,"aes-256-cbc",enc_main},
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_AES
 | 
				
			||||||
 | 
						{FUNC_TYPE_CIPHER,"aes-256-ecb",enc_main},
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"base64",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"base64",enc_main},
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"des",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"des",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"des3",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"des3",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"desx",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"desx",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_IDEA
 | 
					#ifndef OPENSSL_NO_IDEA
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"idea",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"idea",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC4
 | 
					#ifndef OPENSSL_NO_RC4
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"rc4",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"rc4",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC4
 | 
					#ifndef OPENSSL_NO_RC4
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"rc4-40",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"rc4-40",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC2
 | 
					#ifndef OPENSSL_NO_RC2
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"rc2",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"rc2",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_BF
 | 
					#ifndef OPENSSL_NO_BF
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"bf",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"bf",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_CAST
 | 
					#ifndef OPENSSL_NO_CAST
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"cast",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"cast",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC5
 | 
					#ifndef OPENSSL_NO_RC5
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"rc5",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"rc5",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"des-ecb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"des-ecb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"des-ede",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"des-ede",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"des-ede3",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"des-ede3",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"des-cbc",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"des-cbc",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"des-ede-cbc",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"des-ede-cbc",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"des-ede3-cbc",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"des-ede3-cbc",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"des-cfb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"des-cfb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"des-ede-cfb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"des-ede-cfb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"des-ede3-cfb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"des-ede3-cfb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"des-ofb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"des-ofb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"des-ede-ofb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"des-ede-ofb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"des-ede3-ofb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"des-ede3-ofb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_IDEA
 | 
					#ifndef OPENSSL_NO_IDEA
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"idea-cbc",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"idea-cbc",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_IDEA
 | 
					#ifndef OPENSSL_NO_IDEA
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"idea-ecb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"idea-ecb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_IDEA
 | 
					#ifndef OPENSSL_NO_IDEA
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"idea-cfb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"idea-cfb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_IDEA
 | 
					#ifndef OPENSSL_NO_IDEA
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"idea-ofb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"idea-ofb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC2
 | 
					#ifndef OPENSSL_NO_RC2
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"rc2-cbc",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"rc2-cbc",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC2
 | 
					#ifndef OPENSSL_NO_RC2
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"rc2-ecb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"rc2-ecb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC2
 | 
					#ifndef OPENSSL_NO_RC2
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"rc2-cfb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"rc2-cfb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC2
 | 
					#ifndef OPENSSL_NO_RC2
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"rc2-ofb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"rc2-ofb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC2
 | 
					#ifndef OPENSSL_NO_RC2
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"rc2-64-cbc",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"rc2-64-cbc",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC2
 | 
					#ifndef OPENSSL_NO_RC2
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"rc2-40-cbc",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"rc2-40-cbc",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_BF
 | 
					#ifndef OPENSSL_NO_BF
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"bf-cbc",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"bf-cbc",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_BF
 | 
					#ifndef OPENSSL_NO_BF
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"bf-ecb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"bf-ecb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_BF
 | 
					#ifndef OPENSSL_NO_BF
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"bf-cfb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"bf-cfb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_BF
 | 
					#ifndef OPENSSL_NO_BF
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"bf-ofb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"bf-ofb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_CAST
 | 
					#ifndef OPENSSL_NO_CAST
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"cast5-cbc",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"cast5-cbc",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_CAST
 | 
					#ifndef OPENSSL_NO_CAST
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"cast5-ecb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"cast5-ecb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_CAST
 | 
					#ifndef OPENSSL_NO_CAST
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"cast5-cfb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"cast5-cfb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_CAST
 | 
					#ifndef OPENSSL_NO_CAST
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"cast5-ofb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"cast5-ofb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_CAST
 | 
					#ifndef OPENSSL_NO_CAST
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"cast-cbc",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"cast-cbc",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC5
 | 
					#ifndef OPENSSL_NO_RC5
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"rc5-cbc",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"rc5-cbc",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC5
 | 
					#ifndef OPENSSL_NO_RC5
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"rc5-ecb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"rc5-ecb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC5
 | 
					#ifndef OPENSSL_NO_RC5
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"rc5-cfb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"rc5-cfb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC5
 | 
					#ifndef OPENSSL_NO_RC5
 | 
				
			||||||
	{FUNC_TYPE_CIPHER,"rc5-ofb",enc_main},
 | 
						{FUNC_TYPE_CIPHER,"rc5-ofb",enc_main},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	{0,NULL,NULL}
 | 
						{0,NULL,NULL}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,15 +28,15 @@ foreach (@ARGV)
 | 
				
			|||||||
	push(@files,$_);
 | 
						push(@files,$_);
 | 
				
			||||||
	$str="\t{FUNC_TYPE_GENERAL,\"$_\",${_}_main},\n";
 | 
						$str="\t{FUNC_TYPE_GENERAL,\"$_\",${_}_main},\n";
 | 
				
			||||||
	if (($_ =~ /^s_/) || ($_ =~ /^ciphers$/))
 | 
						if (($_ =~ /^s_/) || ($_ =~ /^ciphers$/))
 | 
				
			||||||
		{ print "#if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(NO_SSL3))\n${str}#endif\n"; } 
 | 
							{ print "#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))\n${str}#endif\n"; } 
 | 
				
			||||||
	elsif ( ($_ =~ /^rsa$/) || ($_ =~ /^genrsa$/) || ($_ =~ /^rsautl$/)) 
 | 
						elsif ( ($_ =~ /^rsa$/) || ($_ =~ /^genrsa$/) || ($_ =~ /^rsautl$/)) 
 | 
				
			||||||
		{ print "#ifndef NO_RSA\n${str}#endif\n";  }
 | 
							{ print "#ifndef OPENSSL_NO_RSA\n${str}#endif\n";  }
 | 
				
			||||||
	elsif ( ($_ =~ /^dsa$/) || ($_ =~ /^gendsa$/) || ($_ =~ /^dsaparam$/))
 | 
						elsif ( ($_ =~ /^dsa$/) || ($_ =~ /^gendsa$/) || ($_ =~ /^dsaparam$/))
 | 
				
			||||||
		{ print "#ifndef NO_DSA\n${str}#endif\n"; }
 | 
							{ print "#ifndef OPENSSL_NO_DSA\n${str}#endif\n"; }
 | 
				
			||||||
	elsif ( ($_ =~ /^dh$/) || ($_ =~ /^gendh$/) || ($_ =~ /^dhparam$/))
 | 
						elsif ( ($_ =~ /^dh$/) || ($_ =~ /^gendh$/) || ($_ =~ /^dhparam$/))
 | 
				
			||||||
		{ print "#ifndef NO_DH\n${str}#endif\n"; }
 | 
							{ print "#ifndef OPENSSL_NO_DH\n${str}#endif\n"; }
 | 
				
			||||||
	elsif ( ($_ =~ /^pkcs12$/))
 | 
						elsif ( ($_ =~ /^pkcs12$/))
 | 
				
			||||||
		{ print "#if !defined(NO_DES) && !defined(NO_SHA1)\n${str}#endif\n"; }
 | 
							{ print "#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1)\n${str}#endif\n"; }
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		{ print $str; }
 | 
							{ print $str; }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -44,10 +44,13 @@ foreach (@ARGV)
 | 
				
			|||||||
foreach ("md2","md4","md5","sha","sha1","mdc2","rmd160")
 | 
					foreach ("md2","md4","md5","sha","sha1","mdc2","rmd160")
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	push(@files,$_);
 | 
						push(@files,$_);
 | 
				
			||||||
	printf "\t{FUNC_TYPE_MD,\"%s\",dgst_main},\n",$_;
 | 
						printf "#ifndef OPENSSL_NO_".uc($_)."\n\t{FUNC_TYPE_MD,\"".$_."\",dgst_main},\n#endif\n";
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
foreach (
 | 
					foreach (
 | 
				
			||||||
 | 
						"aes-128-cbc", "aes-128-ecb",
 | 
				
			||||||
 | 
						"aes-192-cbc", "aes-192-ecb",
 | 
				
			||||||
 | 
						"aes-256-cbc", "aes-256-ecb",
 | 
				
			||||||
	"base64",
 | 
						"base64",
 | 
				
			||||||
	"des", "des3", "desx", "idea", "rc4", "rc4-40",
 | 
						"des", "des3", "desx", "idea", "rc4", "rc4-40",
 | 
				
			||||||
	"rc2", "bf", "cast", "rc5",
 | 
						"rc2", "bf", "cast", "rc5",
 | 
				
			||||||
@@ -64,13 +67,14 @@ foreach (
 | 
				
			|||||||
	push(@files,$_);
 | 
						push(@files,$_);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	$t=sprintf("\t{FUNC_TYPE_CIPHER,\"%s\",enc_main},\n",$_);
 | 
						$t=sprintf("\t{FUNC_TYPE_CIPHER,\"%s\",enc_main},\n",$_);
 | 
				
			||||||
	if    ($_ =~ /des/)  { $t="#ifndef NO_DES\n${t}#endif\n"; }
 | 
						if    ($_ =~ /des/)  { $t="#ifndef OPENSSL_NO_DES\n${t}#endif\n"; }
 | 
				
			||||||
	elsif ($_ =~ /idea/) { $t="#ifndef NO_IDEA\n${t}#endif\n"; }
 | 
						elsif ($_ =~ /aes/)  { $t="#ifndef OPENSSL_NO_AES\n${t}#endif\n"; }
 | 
				
			||||||
	elsif ($_ =~ /rc4/)  { $t="#ifndef NO_RC4\n${t}#endif\n"; }
 | 
						elsif ($_ =~ /idea/) { $t="#ifndef OPENSSL_NO_IDEA\n${t}#endif\n"; }
 | 
				
			||||||
	elsif ($_ =~ /rc2/)  { $t="#ifndef NO_RC2\n${t}#endif\n"; }
 | 
						elsif ($_ =~ /rc4/)  { $t="#ifndef OPENSSL_NO_RC4\n${t}#endif\n"; }
 | 
				
			||||||
	elsif ($_ =~ /bf/)   { $t="#ifndef NO_BF\n${t}#endif\n"; }
 | 
						elsif ($_ =~ /rc2/)  { $t="#ifndef OPENSSL_NO_RC2\n${t}#endif\n"; }
 | 
				
			||||||
	elsif ($_ =~ /cast/) { $t="#ifndef NO_CAST\n${t}#endif\n"; }
 | 
						elsif ($_ =~ /bf/)   { $t="#ifndef OPENSSL_NO_BF\n${t}#endif\n"; }
 | 
				
			||||||
	elsif ($_ =~ /rc5/)  { $t="#ifndef NO_RC5\n${t}#endif\n"; }
 | 
						elsif ($_ =~ /cast/) { $t="#ifndef OPENSSL_NO_CAST\n${t}#endif\n"; }
 | 
				
			||||||
 | 
						elsif ($_ =~ /rc5/)  { $t="#ifndef OPENSSL_NO_RC5\n${t}#endif\n"; }
 | 
				
			||||||
	print $t;
 | 
						print $t;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										94
									
								
								apps/rand.c
									
									
									
									
									
								
							
							
						
						
									
										94
									
								
								apps/rand.c
									
									
									
									
									
								
							@@ -1,4 +1,57 @@
 | 
				
			|||||||
/* apps/rand.c */
 | 
					/* apps/rand.c */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    openssl-core@openssl.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This product includes cryptographic software written by Eric Young
 | 
				
			||||||
 | 
					 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
				
			||||||
 | 
					 * Hudson (tjh@cryptsoft.com).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "apps.h"
 | 
					#include "apps.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -9,7 +62,6 @@
 | 
				
			|||||||
#include <openssl/bio.h>
 | 
					#include <openssl/bio.h>
 | 
				
			||||||
#include <openssl/err.h>
 | 
					#include <openssl/err.h>
 | 
				
			||||||
#include <openssl/rand.h>
 | 
					#include <openssl/rand.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef PROG
 | 
					#undef PROG
 | 
				
			||||||
#define PROG rand_main
 | 
					#define PROG rand_main
 | 
				
			||||||
@@ -24,7 +76,9 @@ int MAIN(int, char **);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int MAIN(int argc, char **argv)
 | 
					int MAIN(int argc, char **argv)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	ENGINE *e = NULL;
 | 
						ENGINE *e = NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	int i, r, ret = 1;
 | 
						int i, r, ret = 1;
 | 
				
			||||||
	int badopt;
 | 
						int badopt;
 | 
				
			||||||
	char *outfile = NULL;
 | 
						char *outfile = NULL;
 | 
				
			||||||
@@ -32,7 +86,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	int base64 = 0;
 | 
						int base64 = 0;
 | 
				
			||||||
	BIO *out = NULL;
 | 
						BIO *out = NULL;
 | 
				
			||||||
	int num = -1;
 | 
						int num = -1;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	char *engine=NULL;
 | 
						char *engine=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apps_startup();
 | 
						apps_startup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -40,6 +96,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	badopt = 0;
 | 
						badopt = 0;
 | 
				
			||||||
	i = 0;
 | 
						i = 0;
 | 
				
			||||||
	while (!badopt && argv[++i] != NULL)
 | 
						while (!badopt && argv[++i] != NULL)
 | 
				
			||||||
@@ -51,13 +110,15 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			else
 | 
								else
 | 
				
			||||||
				badopt = 1;
 | 
									badopt = 1;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		if (strcmp(argv[i], "-engine") == 0)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
							else if (strcmp(argv[i], "-engine") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if ((argv[i+1] != NULL) && (engine == NULL))
 | 
								if ((argv[i+1] != NULL) && (engine == NULL))
 | 
				
			||||||
				engine = argv[++i];
 | 
									engine = argv[++i];
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				badopt = 1;
 | 
									badopt = 1;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		else if (strcmp(argv[i], "-rand") == 0)
 | 
							else if (strcmp(argv[i], "-rand") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if ((argv[i+1] != NULL) && (inrand == NULL))
 | 
								if ((argv[i+1] != NULL) && (inrand == NULL))
 | 
				
			||||||
@@ -95,29 +156,17 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		BIO_printf(bio_err, "Usage: rand [options] num\n");
 | 
							BIO_printf(bio_err, "Usage: rand [options] num\n");
 | 
				
			||||||
		BIO_printf(bio_err, "where options are\n");
 | 
							BIO_printf(bio_err, "where options are\n");
 | 
				
			||||||
		BIO_printf(bio_err, "-out file             - write to file\n");
 | 
							BIO_printf(bio_err, "-out file             - write to file\n");
 | 
				
			||||||
		BIO_printf(bio_err," -engine e             - use engine e, possibly a hardware device.\n");
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
							BIO_printf(bio_err, "-engine e             - use engine e, possibly a hardware device.\n");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		BIO_printf(bio_err, "-rand file%cfile%c... - seed PRNG from files\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
							BIO_printf(bio_err, "-rand file%cfile%c... - seed PRNG from files\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
				
			||||||
		BIO_printf(bio_err, "-base64               - encode output\n");
 | 
							BIO_printf(bio_err, "-base64               - encode output\n");
 | 
				
			||||||
		goto err;
 | 
							goto err;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
					 | 
				
			||||||
				engine);
 | 
					 | 
				
			||||||
			goto err;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			goto err;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	app_RAND_load_file(NULL, bio_err, (inrand != NULL));
 | 
						app_RAND_load_file(NULL, bio_err, (inrand != NULL));
 | 
				
			||||||
	if (inrand != NULL)
 | 
						if (inrand != NULL)
 | 
				
			||||||
@@ -132,7 +181,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	else
 | 
						else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
							r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		out = BIO_push(tmpbio, out);
 | 
							out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -173,5 +222,6 @@ err:
 | 
				
			|||||||
	ERR_print_errors(bio_err);
 | 
						ERR_print_errors(bio_err);
 | 
				
			||||||
	if (out)
 | 
						if (out)
 | 
				
			||||||
		BIO_free_all(out);
 | 
							BIO_free_all(out);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										685
									
								
								apps/req.c
									
									
									
									
									
								
							
							
						
						
									
										685
									
								
								apps/req.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										137
									
								
								apps/rsa.c
									
									
									
									
									
								
							
							
						
						
									
										137
									
								
								apps/rsa.c
									
									
									
									
									
								
							@@ -56,7 +56,7 @@
 | 
				
			|||||||
 * [including the GNU Public Licence.]
 | 
					 * [including the GNU Public Licence.]
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_RSA
 | 
					#ifndef OPENSSL_NO_RSA
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
@@ -68,7 +68,6 @@
 | 
				
			|||||||
#include <openssl/evp.h>
 | 
					#include <openssl/evp.h>
 | 
				
			||||||
#include <openssl/x509.h>
 | 
					#include <openssl/x509.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef PROG
 | 
					#undef PROG
 | 
				
			||||||
#define PROG	rsa_main
 | 
					#define PROG	rsa_main
 | 
				
			||||||
@@ -80,6 +79,9 @@
 | 
				
			|||||||
 * -des		- encrypt output if PEM format with DES in cbc mode
 | 
					 * -des		- encrypt output if PEM format with DES in cbc mode
 | 
				
			||||||
 * -des3	- encrypt output if PEM format
 | 
					 * -des3	- encrypt output if PEM format
 | 
				
			||||||
 * -idea	- encrypt output if PEM format
 | 
					 * -idea	- encrypt output if PEM format
 | 
				
			||||||
 | 
					 * -aes128	- encrypt output if PEM format
 | 
				
			||||||
 | 
					 * -aes192	- encrypt output if PEM format
 | 
				
			||||||
 | 
					 * -aes256	- encrypt output if PEM format
 | 
				
			||||||
 * -text	- print a text version
 | 
					 * -text	- print a text version
 | 
				
			||||||
 * -modulus	- print the RSA key modulus
 | 
					 * -modulus	- print the RSA key modulus
 | 
				
			||||||
 * -check	- verify key consistency
 | 
					 * -check	- verify key consistency
 | 
				
			||||||
@@ -96,13 +98,15 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	RSA *rsa=NULL;
 | 
						RSA *rsa=NULL;
 | 
				
			||||||
	int i,badops=0, sgckey=0;
 | 
						int i,badops=0, sgckey=0;
 | 
				
			||||||
	const EVP_CIPHER *enc=NULL;
 | 
						const EVP_CIPHER *enc=NULL;
 | 
				
			||||||
	BIO *in=NULL,*out=NULL;
 | 
						BIO *out=NULL;
 | 
				
			||||||
	int informat,outformat,text=0,check=0,noout=0;
 | 
						int informat,outformat,text=0,check=0,noout=0;
 | 
				
			||||||
	int pubin = 0, pubout = 0;
 | 
						int pubin = 0, pubout = 0;
 | 
				
			||||||
	char *infile,*outfile,*prog;
 | 
						char *infile,*outfile,*prog;
 | 
				
			||||||
	char *passargin = NULL, *passargout = NULL;
 | 
						char *passargin = NULL, *passargout = NULL;
 | 
				
			||||||
	char *passin = NULL, *passout = NULL;
 | 
						char *passin = NULL, *passout = NULL;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	char *engine=NULL;
 | 
						char *engine=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	int modulus=0;
 | 
						int modulus=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apps_startup();
 | 
						apps_startup();
 | 
				
			||||||
@@ -111,6 +115,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	infile=NULL;
 | 
						infile=NULL;
 | 
				
			||||||
	outfile=NULL;
 | 
						outfile=NULL;
 | 
				
			||||||
	informat=FORMAT_PEM;
 | 
						informat=FORMAT_PEM;
 | 
				
			||||||
@@ -151,11 +158,13 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			passargout= *(++argv);
 | 
								passargout= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
							else if (strcmp(*argv,"-engine") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			engine= *(++argv);
 | 
								engine= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		else if (strcmp(*argv,"-sgckey") == 0)
 | 
							else if (strcmp(*argv,"-sgckey") == 0)
 | 
				
			||||||
			sgckey=1;
 | 
								sgckey=1;
 | 
				
			||||||
		else if (strcmp(*argv,"-pubin") == 0)
 | 
							else if (strcmp(*argv,"-pubin") == 0)
 | 
				
			||||||
@@ -194,8 +203,12 @@ bad:
 | 
				
			|||||||
		BIO_printf(bio_err," -passout arg    output file pass phrase source\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," -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");
 | 
							BIO_printf(bio_err," -des3           encrypt PEM output with ede cbc des using 168 bit key\n");
 | 
				
			||||||
#ifndef NO_IDEA
 | 
					#ifndef OPENSSL_NO_IDEA
 | 
				
			||||||
		BIO_printf(bio_err," -idea           encrypt PEM output with cbc idea\n");
 | 
							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
 | 
					#endif
 | 
				
			||||||
		BIO_printf(bio_err," -text           print the key in text\n");
 | 
							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," -noout          don't print key out\n");
 | 
				
			||||||
@@ -203,29 +216,17 @@ bad:
 | 
				
			|||||||
		BIO_printf(bio_err," -check          verify key consistency\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," -pubin          expect a public key in input file\n");
 | 
				
			||||||
		BIO_printf(bio_err," -pubout         output a public key\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");
 | 
							BIO_printf(bio_err," -engine e       use engine e, possibly a hardware device.\n");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ERR_load_crypto_strings();
 | 
						ERR_load_crypto_strings();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
					 | 
				
			||||||
				engine);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
						if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
 | 
				
			||||||
		BIO_printf(bio_err, "Error getting passwords\n");
 | 
							BIO_printf(bio_err, "Error getting passwords\n");
 | 
				
			||||||
@@ -237,69 +238,29 @@ bad:
 | 
				
			|||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	in=BIO_new(BIO_s_file());
 | 
					 | 
				
			||||||
	out=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);
 | 
							EVP_PKEY	*pkey;
 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
		if (BIO_read_filename(in,infile) <= 0)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			perror(infile);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BIO_printf(bio_err,"read RSA key\n");
 | 
							if (pubin)
 | 
				
			||||||
	if	(informat == FORMAT_ASN1) {
 | 
								pkey = load_pubkey(bio_err, infile,
 | 
				
			||||||
		if (pubin) rsa=d2i_RSA_PUBKEY_bio(in,NULL);
 | 
									(informat == FORMAT_NETSCAPE && sgckey ?
 | 
				
			||||||
		else rsa=d2i_RSAPrivateKey_bio(in,NULL);
 | 
										FORMAT_IISSGC : informat), 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 (pkey != NULL)
 | 
				
			||||||
 | 
							rsa = pkey == NULL ? NULL : EVP_PKEY_get1_RSA(pkey);
 | 
				
			||||||
 | 
							EVP_PKEY_free(pkey);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#ifndef NO_RC4
 | 
					 | 
				
			||||||
	else if (informat == FORMAT_NETSCAPE)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
		BUF_MEM *buf=NULL;
 | 
					 | 
				
			||||||
		unsigned char *p;
 | 
					 | 
				
			||||||
		int size=0;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		buf=BUF_MEM_new();
 | 
					 | 
				
			||||||
		for (;;)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			if ((buf == NULL) || (!BUF_MEM_grow(buf,size+1024*10)))
 | 
					 | 
				
			||||||
				goto end;
 | 
					 | 
				
			||||||
			i=BIO_read(in,&(buf->data[size]),1024*10);
 | 
					 | 
				
			||||||
			size+=i;
 | 
					 | 
				
			||||||
			if (i == 0) break;
 | 
					 | 
				
			||||||
			if (i < 0)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
				perror("reading private key");
 | 
					 | 
				
			||||||
				BUF_MEM_free(buf);
 | 
					 | 
				
			||||||
				goto end;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		p=(unsigned char *)buf->data;
 | 
					 | 
				
			||||||
		rsa=d2i_RSA_NET(NULL,&p,(long)size,NULL, sgckey);
 | 
					 | 
				
			||||||
		BUF_MEM_free(buf);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	else if (informat == FORMAT_PEM) {
 | 
					 | 
				
			||||||
		if(pubin) rsa=PEM_read_bio_RSA_PUBKEY(in,NULL,NULL,NULL);
 | 
					 | 
				
			||||||
		else rsa=PEM_read_bio_RSAPrivateKey(in,NULL, NULL,passin);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"bad input format specified for key\n");
 | 
					 | 
				
			||||||
		goto end;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	if (rsa == NULL)
 | 
						if (rsa == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_printf(bio_err,"unable to load key\n");
 | 
					 | 
				
			||||||
		ERR_print_errors(bio_err);
 | 
							ERR_print_errors(bio_err);
 | 
				
			||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -307,7 +268,7 @@ bad:
 | 
				
			|||||||
	if (outfile == NULL)
 | 
						if (outfile == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
							BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		out = BIO_push(tmpbio, out);
 | 
							out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -346,14 +307,14 @@ bad:
 | 
				
			|||||||
			BIO_printf(out,"RSA key ok\n");
 | 
								BIO_printf(out,"RSA key ok\n");
 | 
				
			||||||
		else if (r == 0)
 | 
							else if (r == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			long e;
 | 
								long err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			while ((e = ERR_peek_error()) != 0 &&
 | 
								while ((err = ERR_peek_error()) != 0 &&
 | 
				
			||||||
				ERR_GET_LIB(e) == ERR_LIB_RSA &&
 | 
									ERR_GET_LIB(err) == ERR_LIB_RSA &&
 | 
				
			||||||
				ERR_GET_FUNC(e) == RSA_F_RSA_CHECK_KEY &&
 | 
									ERR_GET_FUNC(err) == RSA_F_RSA_CHECK_KEY &&
 | 
				
			||||||
				ERR_GET_REASON(e) != ERR_R_MALLOC_FAILURE)
 | 
									ERR_GET_REASON(err) != ERR_R_MALLOC_FAILURE)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
				BIO_printf(out, "RSA key error: %s\n", ERR_reason_error_string(e));
 | 
									BIO_printf(out, "RSA key error: %s\n", ERR_reason_error_string(err));
 | 
				
			||||||
				ERR_get_error(); /* remove e from error stack */
 | 
									ERR_get_error(); /* remove e from error stack */
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -375,7 +336,7 @@ bad:
 | 
				
			|||||||
		if(pubout || pubin) i=i2d_RSA_PUBKEY_bio(out,rsa);
 | 
							if(pubout || pubin) i=i2d_RSA_PUBKEY_bio(out,rsa);
 | 
				
			||||||
		else i=i2d_RSAPrivateKey_bio(out,rsa);
 | 
							else i=i2d_RSAPrivateKey_bio(out,rsa);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#ifndef NO_RC4
 | 
					#ifndef OPENSSL_NO_RC4
 | 
				
			||||||
	else if (outformat == FORMAT_NETSCAPE)
 | 
						else if (outformat == FORMAT_NETSCAPE)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		unsigned char *p,*pp;
 | 
							unsigned char *p,*pp;
 | 
				
			||||||
@@ -411,14 +372,14 @@ bad:
 | 
				
			|||||||
	else
 | 
						else
 | 
				
			||||||
		ret=0;
 | 
							ret=0;
 | 
				
			||||||
end:
 | 
					end:
 | 
				
			||||||
	if(in != NULL) BIO_free(in);
 | 
					 | 
				
			||||||
	if(out != NULL) BIO_free_all(out);
 | 
						if(out != NULL) BIO_free_all(out);
 | 
				
			||||||
	if(rsa != NULL) RSA_free(rsa);
 | 
						if(rsa != NULL) RSA_free(rsa);
 | 
				
			||||||
	if(passin) OPENSSL_free(passin);
 | 
						if(passin) OPENSSL_free(passin);
 | 
				
			||||||
	if(passout) OPENSSL_free(passout);
 | 
						if(passout) OPENSSL_free(passout);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#else /* !NO_RSA */
 | 
					#else /* !OPENSSL_NO_RSA */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# if PEDANTIC
 | 
					# if PEDANTIC
 | 
				
			||||||
static void *dummy=&dummy;
 | 
					static void *dummy=&dummy;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,13 +56,12 @@
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_RSA
 | 
					#ifndef OPENSSL_NO_RSA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "apps.h"
 | 
					#include "apps.h"
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <openssl/err.h>
 | 
					#include <openssl/err.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define RSA_SIGN 	1
 | 
					#define RSA_SIGN 	1
 | 
				
			||||||
#define RSA_VERIFY 	2
 | 
					#define RSA_VERIFY 	2
 | 
				
			||||||
@@ -86,6 +85,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	ENGINE *e = NULL;
 | 
						ENGINE *e = NULL;
 | 
				
			||||||
	BIO *in = NULL, *out = NULL;
 | 
						BIO *in = NULL, *out = NULL;
 | 
				
			||||||
	char *infile = NULL, *outfile = NULL;
 | 
						char *infile = NULL, *outfile = NULL;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
						char *engine = NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	char *keyfile = NULL;
 | 
						char *keyfile = NULL;
 | 
				
			||||||
	char rsa_mode = RSA_VERIFY, key_type = KEY_PRIVKEY;
 | 
						char rsa_mode = RSA_VERIFY, key_type = KEY_PRIVKEY;
 | 
				
			||||||
	int keyform = FORMAT_PEM;
 | 
						int keyform = FORMAT_PEM;
 | 
				
			||||||
@@ -95,9 +97,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	EVP_PKEY *pkey = NULL;
 | 
						EVP_PKEY *pkey = NULL;
 | 
				
			||||||
	RSA *rsa = NULL;
 | 
						RSA *rsa = NULL;
 | 
				
			||||||
	unsigned char *rsa_in = NULL, *rsa_out = NULL, pad;
 | 
						unsigned char *rsa_in = NULL, *rsa_out = NULL, pad;
 | 
				
			||||||
 | 
						char *passargin = NULL, *passin = NULL;
 | 
				
			||||||
	int rsa_inlen, rsa_outlen = 0;
 | 
						int rsa_inlen, rsa_outlen = 0;
 | 
				
			||||||
	int keysize;
 | 
						int keysize;
 | 
				
			||||||
	char *engine=NULL;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int ret = 1;
 | 
						int ret = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -105,6 +107,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	argv++;
 | 
						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();
 | 
						ERR_load_crypto_strings();
 | 
				
			||||||
	OpenSSL_add_all_algorithms();
 | 
						OpenSSL_add_all_algorithms();
 | 
				
			||||||
	pad = RSA_PKCS1_PADDING;
 | 
						pad = RSA_PKCS1_PADDING;
 | 
				
			||||||
@@ -120,9 +125,17 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		} else if(!strcmp(*argv, "-inkey")) {
 | 
							} else if(!strcmp(*argv, "-inkey")) {
 | 
				
			||||||
			if (--argc < 1) badarg = 1;
 | 
								if (--argc < 1) badarg = 1;
 | 
				
			||||||
			keyfile = *(++argv);
 | 
								keyfile = *(++argv);
 | 
				
			||||||
 | 
							} else if (!strcmp(*argv,"-passin")) {
 | 
				
			||||||
 | 
								if (--argc < 1) badarg = 1;
 | 
				
			||||||
 | 
								passargin= *(++argv);
 | 
				
			||||||
 | 
							} else if (strcmp(*argv,"-keyform") == 0) {
 | 
				
			||||||
 | 
								if (--argc < 1) badarg = 1;
 | 
				
			||||||
 | 
								keyform=str2fmt(*(++argv));
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		} else if(!strcmp(*argv, "-engine")) {
 | 
							} else if(!strcmp(*argv, "-engine")) {
 | 
				
			||||||
			if (--argc < 1) badarg = 1;
 | 
								if (--argc < 1) badarg = 1;
 | 
				
			||||||
			engine = *(++argv);
 | 
								engine = *(++argv);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		} else if(!strcmp(*argv, "-pubin")) {
 | 
							} else if(!strcmp(*argv, "-pubin")) {
 | 
				
			||||||
			key_type = KEY_PUBKEY;
 | 
								key_type = KEY_PUBKEY;
 | 
				
			||||||
		} else if(!strcmp(*argv, "-certin")) {
 | 
							} else if(!strcmp(*argv, "-certin")) {
 | 
				
			||||||
@@ -157,38 +170,31 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
						if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
							BIO_printf(bio_err, "Error getting password\n");
 | 
				
			||||||
				engine);
 | 
							goto end;
 | 
				
			||||||
			goto end;
 | 
						}
 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* FIXME: seed PRNG only if needed */
 | 
					/* FIXME: seed PRNG only if needed */
 | 
				
			||||||
	app_RAND_load_file(NULL, bio_err, 0);
 | 
						app_RAND_load_file(NULL, bio_err, 0);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	switch(key_type) {
 | 
						switch(key_type) {
 | 
				
			||||||
		case KEY_PRIVKEY:
 | 
							case KEY_PRIVKEY:
 | 
				
			||||||
		pkey = load_key(bio_err, keyfile, keyform, NULL);
 | 
							pkey = load_key(bio_err, keyfile, keyform, 0,
 | 
				
			||||||
 | 
								passin, e, "Private Key");
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		case KEY_PUBKEY:
 | 
							case KEY_PUBKEY:
 | 
				
			||||||
		pkey = load_pubkey(bio_err, keyfile, keyform);
 | 
							pkey = load_pubkey(bio_err, keyfile, keyform, 0,
 | 
				
			||||||
 | 
								NULL, e, "Public Key");
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		case KEY_CERT:
 | 
							case KEY_CERT:
 | 
				
			||||||
		x = load_cert(bio_err, keyfile, keyform);
 | 
							x = load_cert(bio_err, keyfile, keyform,
 | 
				
			||||||
 | 
								NULL, e, "Certificate");
 | 
				
			||||||
		if(x) {
 | 
							if(x) {
 | 
				
			||||||
			pkey = X509_get_pubkey(x);
 | 
								pkey = X509_get_pubkey(x);
 | 
				
			||||||
			X509_free(x);
 | 
								X509_free(x);
 | 
				
			||||||
@@ -197,7 +203,6 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(!pkey) {
 | 
						if(!pkey) {
 | 
				
			||||||
		BIO_printf(bio_err, "Error loading key\n");
 | 
					 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -227,7 +232,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
							out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		    out = BIO_push(tmpbio, out);
 | 
							    out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -293,6 +298,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	BIO_free_all(out);
 | 
						BIO_free_all(out);
 | 
				
			||||||
	if(rsa_in) OPENSSL_free(rsa_in);
 | 
						if(rsa_in) OPENSSL_free(rsa_in);
 | 
				
			||||||
	if(rsa_out) OPENSSL_free(rsa_out);
 | 
						if(rsa_out) OPENSSL_free(rsa_out);
 | 
				
			||||||
 | 
						if(passin) OPENSSL_free(passin);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -302,9 +308,9 @@ static void usage()
 | 
				
			|||||||
	BIO_printf(bio_err, "-in file        input file\n");
 | 
						BIO_printf(bio_err, "-in file        input file\n");
 | 
				
			||||||
	BIO_printf(bio_err, "-out file       output file\n");
 | 
						BIO_printf(bio_err, "-out file       output file\n");
 | 
				
			||||||
	BIO_printf(bio_err, "-inkey file     input key\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, "-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, "-certin         input is a certificate carrying an RSA public key\n");
 | 
				
			||||||
	BIO_printf(bio_err, "-engine e       use engine e, possibly a hardware device.\n");
 | 
					 | 
				
			||||||
	BIO_printf(bio_err, "-ssl            use SSL v2 padding\n");
 | 
						BIO_printf(bio_err, "-ssl            use SSL v2 padding\n");
 | 
				
			||||||
	BIO_printf(bio_err, "-raw            use no 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, "-pkcs           use PKCS#1 v1.5 padding (default)\n");
 | 
				
			||||||
@@ -314,6 +320,11 @@ static void usage()
 | 
				
			|||||||
	BIO_printf(bio_err, "-encrypt        encrypt 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, "-decrypt        decrypt with private key\n");
 | 
				
			||||||
	BIO_printf(bio_err, "-hexdump        hex dump output\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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,9 +55,72 @@
 | 
				
			|||||||
 * copied and put under another distribution licence
 | 
					 * copied and put under another distribution licence
 | 
				
			||||||
 * [including the GNU Public Licence.]
 | 
					 * [including the GNU Public Licence.]
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    openssl-core@openssl.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This product includes cryptographic software written by Eric Young
 | 
				
			||||||
 | 
					 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
				
			||||||
 | 
					 * Hudson (tjh@cryptsoft.com).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <sys/types.h>
 | 
					#include <sys/types.h>
 | 
				
			||||||
#if (defined(VMS) || defined(__VMS)) && !defined(FD_SET)
 | 
					#include <openssl/opensslconf.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
 | 
				
			||||||
 | 
					#include <conio.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef OPENSSL_SYS_MSDOS
 | 
				
			||||||
 | 
					#define _kbhit kbhit
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(OPENSSL_SYS_VMS) && !defined(FD_SET)
 | 
				
			||||||
/* VAX C does not defined fd_set and friends, but it's actually quite simple */
 | 
					/* VAX C does not defined fd_set and friends, but it's actually quite simple */
 | 
				
			||||||
/* These definitions are borrowed from SOCKETSHR.	/Richard Levitte */
 | 
					/* These definitions are borrowed from SOCKETSHR.	/Richard Levitte */
 | 
				
			||||||
#define MAX_NOFILE	32
 | 
					#define MAX_NOFILE	32
 | 
				
			||||||
@@ -87,13 +150,9 @@ typedef fd_mask fd_set;
 | 
				
			|||||||
int do_server(int port, int *ret, int (*cb) (), char *context);
 | 
					int do_server(int port, int *ret, int (*cb) (), char *context);
 | 
				
			||||||
#ifdef HEADER_X509_H
 | 
					#ifdef HEADER_X509_H
 | 
				
			||||||
int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx);
 | 
					int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx);
 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
int MS_CALLBACK verify_callback(int ok, char *ctx);
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifdef HEADER_SSL_H
 | 
					#ifdef HEADER_SSL_H
 | 
				
			||||||
int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file);
 | 
					int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file);
 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
int set_cert_stuff(char *ctx, char *cert_file, char *key_file);
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
int init_client(int *sock, char *server, int port);
 | 
					int init_client(int *sock, char *server, int port);
 | 
				
			||||||
int should_retry(int i);
 | 
					int should_retry(int i);
 | 
				
			||||||
@@ -104,8 +163,6 @@ long MS_CALLBACK bio_dump_cb(BIO *bio, int cmd, const char *argp,
 | 
				
			|||||||
	int argi, long argl, long ret);
 | 
						int argi, long argl, long ret);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef HEADER_SSL_H
 | 
					#ifdef HEADER_SSL_H
 | 
				
			||||||
void MS_CALLBACK apps_ssl_info_callback(SSL *s, int where, int ret);
 | 
					void MS_CALLBACK apps_ssl_info_callback(const SSL *s, int where, int ret);
 | 
				
			||||||
#else
 | 
					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 apps_ssl_info_callback(char *s, int where, int ret);
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										317
									
								
								apps/s_cb.c
									
									
									
									
									
								
							
							
						
						
									
										317
									
								
								apps/s_cb.c
									
									
									
									
									
								
							@@ -55,6 +55,59 @@
 | 
				
			|||||||
 * copied and put under another distribution licence
 | 
					 * copied and put under another distribution licence
 | 
				
			||||||
 * [including the GNU Public Licence.]
 | 
					 * [including the GNU Public Licence.]
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    openssl-core@openssl.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This product includes cryptographic software written by Eric Young
 | 
				
			||||||
 | 
					 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
				
			||||||
 | 
					 * Hudson (tjh@cryptsoft.com).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
@@ -81,7 +134,7 @@ int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
 | 
				
			|||||||
	err=	X509_STORE_CTX_get_error(ctx);
 | 
						err=	X509_STORE_CTX_get_error(ctx);
 | 
				
			||||||
	depth=	X509_STORE_CTX_get_error_depth(ctx);
 | 
						depth=	X509_STORE_CTX_get_error_depth(ctx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	X509_NAME_oneline(X509_get_subject_name(err_cert),buf,256);
 | 
						X509_NAME_oneline(X509_get_subject_name(err_cert),buf,sizeof buf);
 | 
				
			||||||
	BIO_printf(bio_err,"depth=%d %s\n",depth,buf);
 | 
						BIO_printf(bio_err,"depth=%d %s\n",depth,buf);
 | 
				
			||||||
	if (!ok)
 | 
						if (!ok)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -101,7 +154,7 @@ int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
 | 
				
			|||||||
	switch (ctx->error)
 | 
						switch (ctx->error)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
	case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
 | 
						case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
 | 
				
			||||||
		X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert),buf,256);
 | 
							X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert),buf,sizeof buf);
 | 
				
			||||||
		BIO_printf(bio_err,"issuer= %s\n",buf);
 | 
							BIO_printf(bio_err,"issuer= %s\n",buf);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case X509_V_ERR_CERT_NOT_YET_VALID:
 | 
						case X509_V_ERR_CERT_NOT_YET_VALID:
 | 
				
			||||||
@@ -200,7 +253,7 @@ long MS_CALLBACK bio_dump_cb(BIO *bio, int cmd, const char *argp, int argi,
 | 
				
			|||||||
	return(ret);
 | 
						return(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MS_CALLBACK apps_ssl_info_callback(SSL *s, int where, int ret)
 | 
					void MS_CALLBACK apps_ssl_info_callback(const SSL *s, int where, int ret)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	char *str;
 | 
						char *str;
 | 
				
			||||||
	int w;
 | 
						int w;
 | 
				
			||||||
@@ -236,3 +289,261 @@ void MS_CALLBACK apps_ssl_info_callback(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)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						BIO *bio = arg;
 | 
				
			||||||
 | 
						const char *str_write_p, *str_version, *str_content_type = "", *str_details1 = "", *str_details2= "";
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						str_write_p = write_p ? ">>>" : "<<<";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						switch (version)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
						case SSL2_VERSION:
 | 
				
			||||||
 | 
							str_version = "SSL 2.0";
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case SSL3_VERSION:
 | 
				
			||||||
 | 
							str_version = "SSL 3.0 ";
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case TLS1_VERSION:
 | 
				
			||||||
 | 
							str_version = "TLS 1.0 ";
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							str_version = "???";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (version == SSL2_VERSION)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							str_details1 = "???";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (len > 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								switch (((unsigned char*)buf)[0])
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
									case 0:
 | 
				
			||||||
 | 
										str_details1 = ", ERROR:";
 | 
				
			||||||
 | 
										str_details2 = " ???";
 | 
				
			||||||
 | 
										if (len >= 3)
 | 
				
			||||||
 | 
											{
 | 
				
			||||||
 | 
											unsigned err = (((unsigned char*)buf)[1]<<8) + ((unsigned char*)buf)[2];
 | 
				
			||||||
 | 
											
 | 
				
			||||||
 | 
											switch (err)
 | 
				
			||||||
 | 
												{
 | 
				
			||||||
 | 
											case 0x0001:
 | 
				
			||||||
 | 
												str_details2 = " NO-CIPHER-ERROR";
 | 
				
			||||||
 | 
												break;
 | 
				
			||||||
 | 
											case 0x0002:
 | 
				
			||||||
 | 
												str_details2 = " NO-CERTIFICATE-ERROR";
 | 
				
			||||||
 | 
												break;
 | 
				
			||||||
 | 
											case 0x0004:
 | 
				
			||||||
 | 
												str_details2 = " BAD-CERTIFICATE-ERROR";
 | 
				
			||||||
 | 
												break;
 | 
				
			||||||
 | 
											case 0x0006:
 | 
				
			||||||
 | 
												str_details2 = " UNSUPPORTED-CERTIFICATE-TYPE-ERROR";
 | 
				
			||||||
 | 
												break;
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 1:
 | 
				
			||||||
 | 
										str_details1 = ", CLIENT-HELLO";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 2:
 | 
				
			||||||
 | 
										str_details1 = ", CLIENT-MASTER-KEY";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 3:
 | 
				
			||||||
 | 
										str_details1 = ", CLIENT-FINISHED";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 4:
 | 
				
			||||||
 | 
										str_details1 = ", SERVER-HELLO";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 5:
 | 
				
			||||||
 | 
										str_details1 = ", SERVER-VERIFY";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 6:
 | 
				
			||||||
 | 
										str_details1 = ", SERVER-FINISHED";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 7:
 | 
				
			||||||
 | 
										str_details1 = ", REQUEST-CERTIFICATE";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 8:
 | 
				
			||||||
 | 
										str_details1 = ", CLIENT-CERTIFICATE";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (version == SSL3_VERSION || version == TLS1_VERSION)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							switch (content_type)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
							case 20:
 | 
				
			||||||
 | 
								str_content_type = "ChangeCipherSpec";
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case 21:
 | 
				
			||||||
 | 
								str_content_type = "Alert";
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case 22:
 | 
				
			||||||
 | 
								str_content_type = "Handshake";
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (content_type == 21) /* Alert */
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								str_details1 = ", ???";
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								if (len == 2)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
									switch (((unsigned char*)buf)[0])
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
									case 1:
 | 
				
			||||||
 | 
										str_details1 = ", warning";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 2:
 | 
				
			||||||
 | 
										str_details1 = ", fatal";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									str_details2 = " ???";
 | 
				
			||||||
 | 
									switch (((unsigned char*)buf)[1])
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
									case 0:
 | 
				
			||||||
 | 
										str_details2 = " close_notify";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 10:
 | 
				
			||||||
 | 
										str_details2 = " unexpected_message";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 20:
 | 
				
			||||||
 | 
										str_details2 = " bad_record_mac";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 21:
 | 
				
			||||||
 | 
										str_details2 = " decryption_failed";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 22:
 | 
				
			||||||
 | 
										str_details2 = " record_overflow";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 30:
 | 
				
			||||||
 | 
										str_details2 = " decompression_failure";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 40:
 | 
				
			||||||
 | 
										str_details2 = " handshake_failure";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 42:
 | 
				
			||||||
 | 
										str_details2 = " bad_certificate";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 43:
 | 
				
			||||||
 | 
										str_details2 = " unsupported_certificate";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 44:
 | 
				
			||||||
 | 
										str_details2 = " certificate_revoked";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 45:
 | 
				
			||||||
 | 
										str_details2 = " certificate_expired";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 46:
 | 
				
			||||||
 | 
										str_details2 = " certificate_unknown";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 47:
 | 
				
			||||||
 | 
										str_details2 = " illegal_parameter";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 48:
 | 
				
			||||||
 | 
										str_details2 = " unknown_ca";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 49:
 | 
				
			||||||
 | 
										str_details2 = " access_denied";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 50:
 | 
				
			||||||
 | 
										str_details2 = " decode_error";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 51:
 | 
				
			||||||
 | 
										str_details2 = " decrypt_error";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 60:
 | 
				
			||||||
 | 
										str_details2 = " export_restriction";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 70:
 | 
				
			||||||
 | 
										str_details2 = " protocol_version";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 71:
 | 
				
			||||||
 | 
										str_details2 = " insufficient_security";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 80:
 | 
				
			||||||
 | 
										str_details2 = " internal_error";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 90:
 | 
				
			||||||
 | 
										str_details2 = " user_canceled";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 100:
 | 
				
			||||||
 | 
										str_details2 = " no_renegotiation";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (content_type == 22) /* Handshake */
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								str_details1 = "???";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (len > 0)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
									switch (((unsigned char*)buf)[0])
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
									case 0:
 | 
				
			||||||
 | 
										str_details1 = ", HelloRequest";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 1:
 | 
				
			||||||
 | 
										str_details1 = ", ClientHello";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 2:
 | 
				
			||||||
 | 
										str_details1 = ", ServerHello";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 11:
 | 
				
			||||||
 | 
										str_details1 = ", Certificate";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 12:
 | 
				
			||||||
 | 
										str_details1 = ", ServerKeyExchange";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 13:
 | 
				
			||||||
 | 
										str_details1 = ", CertificateRequest";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 14:
 | 
				
			||||||
 | 
										str_details1 = ", ServerHelloDone";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 15:
 | 
				
			||||||
 | 
										str_details1 = ", CertificateVerify";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 16:
 | 
				
			||||||
 | 
										str_details1 = ", ClientKeyExchange";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 20:
 | 
				
			||||||
 | 
										str_details1 = ", Finished";
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						BIO_printf(bio, "%s %s%s [length %04lx]%s%s\n", str_write_p, str_version, str_content_type, (unsigned long)len, str_details1, str_details2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (len > 0)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							size_t num, i;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							BIO_printf(bio, "   ");
 | 
				
			||||||
 | 
							num = len;
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
 | 
							if (num > 16)
 | 
				
			||||||
 | 
								num = 16;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
							for (i = 0; i < num; i++)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								if (i % 16 == 0 && i > 0)
 | 
				
			||||||
 | 
									BIO_printf(bio, "\n   ");
 | 
				
			||||||
 | 
								BIO_printf(bio, " %02x", ((unsigned char*)buf)[i]);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							if (i < len)
 | 
				
			||||||
 | 
								BIO_printf(bio, " ...");
 | 
				
			||||||
 | 
							BIO_printf(bio, "\n");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						BIO_flush(bio);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										242
									
								
								apps/s_client.c
									
									
									
									
									
								
							
							
						
						
									
										242
									
								
								apps/s_client.c
									
									
									
									
									
								
							@@ -55,12 +55,66 @@
 | 
				
			|||||||
 * copied and put under another distribution licence
 | 
					 * copied and put under another distribution licence
 | 
				
			||||||
 * [including the GNU Public Licence.]
 | 
					 * [including the GNU Public Licence.]
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    openssl-core@openssl.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This product includes cryptographic software written by Eric Young
 | 
				
			||||||
 | 
					 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
				
			||||||
 | 
					 * Hudson (tjh@cryptsoft.com).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <assert.h>
 | 
					#include <assert.h>
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#ifdef NO_STDIO
 | 
					#include <openssl/e_os2.h>
 | 
				
			||||||
 | 
					#ifdef OPENSSL_NO_STDIO
 | 
				
			||||||
#define APPS_WIN16
 | 
					#define APPS_WIN16
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -68,7 +122,7 @@
 | 
				
			|||||||
   recursive header file inclusion, resulting in the compiler complaining
 | 
					   recursive header file inclusion, resulting in the compiler complaining
 | 
				
			||||||
   that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which
 | 
					   that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which
 | 
				
			||||||
   is needed to have fileno() declared correctly...  So let's define u_int */
 | 
					   is needed to have fileno() declared correctly...  So let's define u_int */
 | 
				
			||||||
#if defined(VMS) && defined(__DECC) && !defined(__U_INT)
 | 
					#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__U_INT)
 | 
				
			||||||
#define __U_INT
 | 
					#define __U_INT
 | 
				
			||||||
typedef unsigned int u_int;
 | 
					typedef unsigned int u_int;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -80,15 +134,18 @@ typedef unsigned int u_int;
 | 
				
			|||||||
#include <openssl/err.h>
 | 
					#include <openssl/err.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/rand.h>
 | 
					#include <openssl/rand.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
#include "s_apps.h"
 | 
					#include "s_apps.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef WINDOWS
 | 
					#ifdef OPENSSL_SYS_WINCE
 | 
				
			||||||
#include <conio.h>
 | 
					/* Windows CE incorrectly defines fileno as returning void*, so to avoid problems below... */
 | 
				
			||||||
 | 
					#ifdef fileno
 | 
				
			||||||
 | 
					#undef fileno
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#define fileno(a) (int)_fileno(a)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if (defined(VMS) && __VMS_VER < 70000000)
 | 
					#if (defined(OPENSSL_SYS_VMS) && __VMS_VER < 70000000)
 | 
				
			||||||
/* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */
 | 
					/* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */
 | 
				
			||||||
#undef FIONBIO
 | 
					#undef FIONBIO
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -113,6 +170,7 @@ static int c_nbio=0;
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
static int c_Pause=0;
 | 
					static int c_Pause=0;
 | 
				
			||||||
static int c_debug=0;
 | 
					static int c_debug=0;
 | 
				
			||||||
 | 
					static int c_msg=0;
 | 
				
			||||||
static int c_showcerts=0;
 | 
					static int c_showcerts=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void sc_usage(void);
 | 
					static void sc_usage(void);
 | 
				
			||||||
@@ -139,6 +197,7 @@ static void sc_usage(void)
 | 
				
			|||||||
	BIO_printf(bio_err," -pause        - sleep(1) after each read(2) and write(2) system call\n");
 | 
						BIO_printf(bio_err," -pause        - sleep(1) after each read(2) and write(2) system call\n");
 | 
				
			||||||
	BIO_printf(bio_err," -showcerts    - show all certificates in the chain\n");
 | 
						BIO_printf(bio_err," -showcerts    - show all certificates in the chain\n");
 | 
				
			||||||
	BIO_printf(bio_err," -debug        - extra output\n");
 | 
						BIO_printf(bio_err," -debug        - extra output\n");
 | 
				
			||||||
 | 
						BIO_printf(bio_err," -msg          - Show protocol messages\n");
 | 
				
			||||||
	BIO_printf(bio_err," -nbio_test    - more ssl protocol testing\n");
 | 
						BIO_printf(bio_err," -nbio_test    - more ssl protocol testing\n");
 | 
				
			||||||
	BIO_printf(bio_err," -state        - print the 'ssl' states\n");
 | 
						BIO_printf(bio_err," -state        - print the 'ssl' states\n");
 | 
				
			||||||
#ifdef FIONBIO
 | 
					#ifdef FIONBIO
 | 
				
			||||||
@@ -152,10 +211,18 @@ static void sc_usage(void)
 | 
				
			|||||||
	BIO_printf(bio_err," -tls1         - just use TLSv1\n");
 | 
						BIO_printf(bio_err," -tls1         - just use TLSv1\n");
 | 
				
			||||||
	BIO_printf(bio_err," -no_tls1/-no_ssl3/-no_ssl2 - turn off that protocol\n");
 | 
						BIO_printf(bio_err," -no_tls1/-no_ssl3/-no_ssl2 - turn off that protocol\n");
 | 
				
			||||||
	BIO_printf(bio_err," -bugs         - Switch on all SSL implementation bug workarounds\n");
 | 
						BIO_printf(bio_err," -bugs         - Switch on all SSL implementation bug workarounds\n");
 | 
				
			||||||
 | 
						BIO_printf(bio_err," -serverpref   - Use server's cipher preferences (only SSLv2)\n");
 | 
				
			||||||
	BIO_printf(bio_err," -cipher       - preferred cipher to use, use the 'openssl ciphers'\n");
 | 
						BIO_printf(bio_err," -cipher       - preferred cipher to use, use the 'openssl ciphers'\n");
 | 
				
			||||||
	BIO_printf(bio_err,"                 command to see what is available\n");
 | 
						BIO_printf(bio_err,"                 command to see what is available\n");
 | 
				
			||||||
	BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
						BIO_printf(bio_err," -starttls prot - use the STARTTLS command before starting TLS\n");
 | 
				
			||||||
 | 
						BIO_printf(bio_err,"                 for those protocols that support it, where\n");
 | 
				
			||||||
 | 
						BIO_printf(bio_err,"                 'prot' defines which one to assume.  Currently,\n");
 | 
				
			||||||
 | 
						BIO_printf(bio_err,"                 only \"smtp\" and \"pop3\" are supported.\n");
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	BIO_printf(bio_err," -engine id    - Initialise and use the specified engine\n");
 | 
						BIO_printf(bio_err," -engine id    - Initialise and use the specified engine\n");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int MAIN(int, char **);
 | 
					int MAIN(int, char **);
 | 
				
			||||||
@@ -164,8 +231,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
	int off=0;
 | 
						int off=0;
 | 
				
			||||||
	SSL *con=NULL,*con2=NULL;
 | 
						SSL *con=NULL,*con2=NULL;
 | 
				
			||||||
 | 
						X509_STORE *store = NULL;
 | 
				
			||||||
	int s,k,width,state=0;
 | 
						int s,k,width,state=0;
 | 
				
			||||||
	char *cbuf=NULL,*sbuf=NULL;
 | 
						char *cbuf=NULL,*sbuf=NULL,*mbuf=NULL;
 | 
				
			||||||
	int cbuf_len,cbuf_off;
 | 
						int cbuf_len,cbuf_off;
 | 
				
			||||||
	int sbuf_len,sbuf_off;
 | 
						int sbuf_len,sbuf_off;
 | 
				
			||||||
	fd_set readfds,writefds;
 | 
						fd_set readfds,writefds;
 | 
				
			||||||
@@ -179,21 +247,24 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	int write_tty,read_tty,write_ssl,read_ssl,tty_on,ssl_pending;
 | 
						int write_tty,read_tty,write_ssl,read_ssl,tty_on,ssl_pending;
 | 
				
			||||||
	SSL_CTX *ctx=NULL;
 | 
						SSL_CTX *ctx=NULL;
 | 
				
			||||||
	int ret=1,in_init=1,i,nbio_test=0;
 | 
						int ret=1,in_init=1,i,nbio_test=0;
 | 
				
			||||||
	int prexit = 0;
 | 
						int starttls_proto = 0;
 | 
				
			||||||
 | 
						int prexit = 0, vflags = 0;
 | 
				
			||||||
	SSL_METHOD *meth=NULL;
 | 
						SSL_METHOD *meth=NULL;
 | 
				
			||||||
	BIO *sbio;
 | 
						BIO *sbio;
 | 
				
			||||||
	char *inrand=NULL;
 | 
						char *inrand=NULL;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	char *engine_id=NULL;
 | 
						char *engine_id=NULL;
 | 
				
			||||||
	ENGINE *e=NULL;
 | 
						ENGINE *e=NULL;
 | 
				
			||||||
#ifdef WINDOWS
 | 
					#endif
 | 
				
			||||||
 | 
					#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
 | 
				
			||||||
	struct timeval tv;
 | 
						struct timeval tv;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(NO_SSL2) && !defined(NO_SSL3)
 | 
					#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
 | 
				
			||||||
	meth=SSLv23_client_method();
 | 
						meth=SSLv23_client_method();
 | 
				
			||||||
#elif !defined(NO_SSL3)
 | 
					#elif !defined(OPENSSL_NO_SSL3)
 | 
				
			||||||
	meth=SSLv3_client_method();
 | 
						meth=SSLv3_client_method();
 | 
				
			||||||
#elif !defined(NO_SSL2)
 | 
					#elif !defined(OPENSSL_NO_SSL2)
 | 
				
			||||||
	meth=SSLv2_client_method();
 | 
						meth=SSLv2_client_method();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -202,13 +273,18 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	c_quiet=0;
 | 
						c_quiet=0;
 | 
				
			||||||
	c_ign_eof=0;
 | 
						c_ign_eof=0;
 | 
				
			||||||
	c_debug=0;
 | 
						c_debug=0;
 | 
				
			||||||
 | 
						c_msg=0;
 | 
				
			||||||
	c_showcerts=0;
 | 
						c_showcerts=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (bio_err == NULL)
 | 
						if (bio_err == NULL)
 | 
				
			||||||
		bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
							bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (	((cbuf=OPENSSL_malloc(BUFSIZZ)) == NULL) ||
 | 
						if (	((cbuf=OPENSSL_malloc(BUFSIZZ)) == NULL) ||
 | 
				
			||||||
		((sbuf=OPENSSL_malloc(BUFSIZZ)) == NULL))
 | 
							((sbuf=OPENSSL_malloc(BUFSIZZ)) == NULL) ||
 | 
				
			||||||
 | 
							((mbuf=OPENSSL_malloc(BUFSIZZ)) == NULL))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_printf(bio_err,"out of memory\n");
 | 
							BIO_printf(bio_err,"out of memory\n");
 | 
				
			||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
@@ -253,6 +329,10 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			cert_file= *(++argv);
 | 
								cert_file= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
							else if	(strcmp(*argv,"-crl_check") == 0)
 | 
				
			||||||
 | 
								vflags |= X509_V_FLAG_CRL_CHECK;
 | 
				
			||||||
 | 
							else if	(strcmp(*argv,"-crl_check_all") == 0)
 | 
				
			||||||
 | 
								vflags |= X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL;
 | 
				
			||||||
		else if	(strcmp(*argv,"-prexit") == 0)
 | 
							else if	(strcmp(*argv,"-prexit") == 0)
 | 
				
			||||||
			prexit=1;
 | 
								prexit=1;
 | 
				
			||||||
		else if	(strcmp(*argv,"-crlf") == 0)
 | 
							else if	(strcmp(*argv,"-crlf") == 0)
 | 
				
			||||||
@@ -268,21 +348,23 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			c_Pause=1;
 | 
								c_Pause=1;
 | 
				
			||||||
		else if	(strcmp(*argv,"-debug") == 0)
 | 
							else if	(strcmp(*argv,"-debug") == 0)
 | 
				
			||||||
			c_debug=1;
 | 
								c_debug=1;
 | 
				
			||||||
 | 
							else if	(strcmp(*argv,"-msg") == 0)
 | 
				
			||||||
 | 
								c_msg=1;
 | 
				
			||||||
		else if	(strcmp(*argv,"-showcerts") == 0)
 | 
							else if	(strcmp(*argv,"-showcerts") == 0)
 | 
				
			||||||
			c_showcerts=1;
 | 
								c_showcerts=1;
 | 
				
			||||||
		else if	(strcmp(*argv,"-nbio_test") == 0)
 | 
							else if	(strcmp(*argv,"-nbio_test") == 0)
 | 
				
			||||||
			nbio_test=1;
 | 
								nbio_test=1;
 | 
				
			||||||
		else if	(strcmp(*argv,"-state") == 0)
 | 
							else if	(strcmp(*argv,"-state") == 0)
 | 
				
			||||||
			state=1;
 | 
								state=1;
 | 
				
			||||||
#ifndef NO_SSL2
 | 
					#ifndef OPENSSL_NO_SSL2
 | 
				
			||||||
		else if	(strcmp(*argv,"-ssl2") == 0)
 | 
							else if	(strcmp(*argv,"-ssl2") == 0)
 | 
				
			||||||
			meth=SSLv2_client_method();
 | 
								meth=SSLv2_client_method();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_SSL3
 | 
					#ifndef OPENSSL_NO_SSL3
 | 
				
			||||||
		else if	(strcmp(*argv,"-ssl3") == 0)
 | 
							else if	(strcmp(*argv,"-ssl3") == 0)
 | 
				
			||||||
			meth=SSLv3_client_method();
 | 
								meth=SSLv3_client_method();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_TLS1
 | 
					#ifndef OPENSSL_NO_TLS1
 | 
				
			||||||
		else if	(strcmp(*argv,"-tls1") == 0)
 | 
							else if	(strcmp(*argv,"-tls1") == 0)
 | 
				
			||||||
			meth=TLSv1_client_method();
 | 
								meth=TLSv1_client_method();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -313,6 +395,8 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			off|=SSL_OP_NO_SSLv3;
 | 
								off|=SSL_OP_NO_SSLv3;
 | 
				
			||||||
		else if (strcmp(*argv,"-no_ssl2") == 0)
 | 
							else if (strcmp(*argv,"-no_ssl2") == 0)
 | 
				
			||||||
			off|=SSL_OP_NO_SSLv2;
 | 
								off|=SSL_OP_NO_SSLv2;
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-serverpref") == 0)
 | 
				
			||||||
 | 
								off|=SSL_OP_CIPHER_SERVER_PREFERENCE;
 | 
				
			||||||
		else if	(strcmp(*argv,"-cipher") == 0)
 | 
							else if	(strcmp(*argv,"-cipher") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
@@ -322,16 +406,29 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		else if (strcmp(*argv,"-nbio") == 0)
 | 
							else if (strcmp(*argv,"-nbio") == 0)
 | 
				
			||||||
			{ c_nbio=1; }
 | 
								{ c_nbio=1; }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
							else if	(strcmp(*argv,"-starttls") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			inrand= *(++argv);
 | 
								++argv;
 | 
				
			||||||
 | 
								if (strcmp(*argv,"smtp") == 0)
 | 
				
			||||||
 | 
									starttls_proto = 1;
 | 
				
			||||||
 | 
								else if (strcmp(*argv,"pop3") == 0)
 | 
				
			||||||
 | 
									starttls_proto = 2;
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
									goto bad;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		else if	(strcmp(*argv,"-engine") == 0)
 | 
							else if	(strcmp(*argv,"-engine") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			engine_id = *(++argv);
 | 
								engine_id = *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-rand") == 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
 | 
								inrand= *(++argv);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
								BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
				
			||||||
@@ -348,6 +445,13 @@ bad:
 | 
				
			|||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						OpenSSL_add_ssl_algorithms();
 | 
				
			||||||
 | 
						SSL_load_error_strings();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
					        e = setup_engine(bio_err, engine_id, 1);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
 | 
						if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
 | 
				
			||||||
		&& !RAND_status())
 | 
							&& !RAND_status())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -359,7 +463,7 @@ bad:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (bio_c_out == NULL)
 | 
						if (bio_c_out == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		if (c_quiet)
 | 
							if (c_quiet && !c_debug && !c_msg)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			bio_c_out=BIO_new(BIO_s_null());
 | 
								bio_c_out=BIO_new(BIO_s_null());
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -370,32 +474,6 @@ bad:
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	OpenSSL_add_ssl_algorithms();
 | 
					 | 
				
			||||||
	SSL_load_error_strings();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (engine_id != NULL)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
		if((e = ENGINE_by_id(engine_id)) == NULL)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine\n");
 | 
					 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if (c_debug)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			ENGINE_ctrl(e, ENGINE_CTRL_SET_LOGSTREAM,
 | 
					 | 
				
			||||||
				0, bio_err, 0);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine_id);
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ctx=SSL_CTX_new(meth);
 | 
						ctx=SSL_CTX_new(meth);
 | 
				
			||||||
	if (ctx == NULL)
 | 
						if (ctx == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -432,8 +510,16 @@ bad:
 | 
				
			|||||||
		/* goto end; */
 | 
							/* goto end; */
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						store = SSL_CTX_get_cert_store(ctx);
 | 
				
			||||||
 | 
						X509_STORE_set_flags(store, vflags);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	con=SSL_new(ctx);
 | 
						con=SSL_new(ctx);
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_KRB5
 | 
				
			||||||
 | 
						if (con  &&  (con->kssl_ctx = kssl_ctx_new()) != NULL)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                kssl_ctx_setstring(con->kssl_ctx, KSSL_SERVER, host);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					#endif	/* OPENSSL_NO_KRB5  */
 | 
				
			||||||
/*	SSL_set_cipher_list(con,"RC4-MD5"); */
 | 
					/*	SSL_set_cipher_list(con,"RC4-MD5"); */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
re_start:
 | 
					re_start:
 | 
				
			||||||
@@ -475,6 +561,11 @@ re_start:
 | 
				
			|||||||
		BIO_set_callback(sbio,bio_dump_cb);
 | 
							BIO_set_callback(sbio,bio_dump_cb);
 | 
				
			||||||
		BIO_set_callback_arg(sbio,bio_c_out);
 | 
							BIO_set_callback_arg(sbio,bio_c_out);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						if (c_msg)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							SSL_set_msg_callback(con, msg_cb);
 | 
				
			||||||
 | 
							SSL_set_msg_callback_arg(con, bio_c_out);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SSL_set_bio(con,sbio,sbio);
 | 
						SSL_set_bio(con,sbio,sbio);
 | 
				
			||||||
	SSL_set_connect_state(con);
 | 
						SSL_set_connect_state(con);
 | 
				
			||||||
@@ -493,6 +584,20 @@ re_start:
 | 
				
			|||||||
	sbuf_len=0;
 | 
						sbuf_len=0;
 | 
				
			||||||
	sbuf_off=0;
 | 
						sbuf_off=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* This is an ugly hack that does a lot of assumptions */
 | 
				
			||||||
 | 
						if (starttls_proto == 1)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							BIO_read(sbio,mbuf,BUFSIZZ);
 | 
				
			||||||
 | 
							BIO_printf(sbio,"STARTTLS\r\n");
 | 
				
			||||||
 | 
							BIO_read(sbio,sbuf,BUFSIZZ);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						if (starttls_proto == 2)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							BIO_read(sbio,mbuf,BUFSIZZ);
 | 
				
			||||||
 | 
							BIO_printf(sbio,"STLS\r\n");
 | 
				
			||||||
 | 
							BIO_read(sbio,sbuf,BUFSIZZ);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (;;)
 | 
						for (;;)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		FD_ZERO(&readfds);
 | 
							FD_ZERO(&readfds);
 | 
				
			||||||
@@ -512,6 +617,13 @@ re_start:
 | 
				
			|||||||
				print_stuff(bio_c_out,con,full_log);
 | 
									print_stuff(bio_c_out,con,full_log);
 | 
				
			||||||
				if (full_log > 0) full_log--;
 | 
									if (full_log > 0) full_log--;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if (starttls_proto)
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
										BIO_printf(bio_err,"%s",mbuf);
 | 
				
			||||||
 | 
										/* We don't need to know any more */
 | 
				
			||||||
 | 
										starttls_proto = 0;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (reconnect)
 | 
									if (reconnect)
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
					reconnect--;
 | 
										reconnect--;
 | 
				
			||||||
@@ -528,7 +640,7 @@ re_start:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if (!ssl_pending)
 | 
							if (!ssl_pending)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
#ifndef WINDOWS
 | 
					#if !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MSDOS)
 | 
				
			||||||
			if (tty_on)
 | 
								if (tty_on)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
				if (read_tty)  FD_SET(fileno(stdin),&readfds);
 | 
									if (read_tty)  FD_SET(fileno(stdin),&readfds);
 | 
				
			||||||
@@ -555,8 +667,8 @@ re_start:
 | 
				
			|||||||
			 * will choke the compiler: if you do have a cast then
 | 
								 * will choke the compiler: if you do have a cast then
 | 
				
			||||||
			 * you can either go for (int *) or (void *).
 | 
								 * you can either go for (int *) or (void *).
 | 
				
			||||||
			 */
 | 
								 */
 | 
				
			||||||
#ifdef WINDOWS
 | 
					#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
 | 
				
			||||||
			/* Under Windows we make the assumption that we can
 | 
					                        /* Under Windows/DOS we make the assumption that we can
 | 
				
			||||||
			 * always write to the tty: therefore if we need to
 | 
								 * always write to the tty: therefore if we need to
 | 
				
			||||||
			 * write to the tty we just fall through. Otherwise
 | 
								 * write to the tty we just fall through. Otherwise
 | 
				
			||||||
			 * we timeout the select every second and see if there
 | 
								 * we timeout the select every second and see if there
 | 
				
			||||||
@@ -570,7 +682,11 @@ re_start:
 | 
				
			|||||||
					tv.tv_usec = 0;
 | 
										tv.tv_usec = 0;
 | 
				
			||||||
					i=select(width,(void *)&readfds,(void *)&writefds,
 | 
										i=select(width,(void *)&readfds,(void *)&writefds,
 | 
				
			||||||
						 NULL,&tv);
 | 
											 NULL,&tv);
 | 
				
			||||||
 | 
					#if defined(OPENSSL_SYS_WINCE) || defined(OPENSSL_SYS_MSDOS)
 | 
				
			||||||
 | 
										if(!i && (!_kbhit() || !read_tty) ) continue;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
					if(!i && (!((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0))) || !read_tty) ) continue;
 | 
										if(!i && (!((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0))) || !read_tty) ) continue;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
				} else 	i=select(width,(void *)&readfds,(void *)&writefds,
 | 
									} else 	i=select(width,(void *)&readfds,(void *)&writefds,
 | 
				
			||||||
					 NULL,NULL);
 | 
										 NULL,NULL);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -654,8 +770,8 @@ re_start:
 | 
				
			|||||||
				goto shut;
 | 
									goto shut;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
#ifdef WINDOWS
 | 
					#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
 | 
				
			||||||
		/* Assume Windows can always write */
 | 
							/* Assume Windows/DOS can always write */
 | 
				
			||||||
		else if (!ssl_pending && write_tty)
 | 
							else if (!ssl_pending && write_tty)
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
		else if (!ssl_pending && FD_ISSET(fileno(stdout),&writefds))
 | 
							else if (!ssl_pending && FD_ISSET(fileno(stdout),&writefds))
 | 
				
			||||||
@@ -735,8 +851,12 @@ printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240
 | 
				
			|||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef WINDOWS
 | 
					#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
 | 
				
			||||||
 | 
					#if defined(OPENSSL_SYS_WINCE) || defined(OPENSSL_SYS_MSDOS)
 | 
				
			||||||
 | 
							else if (_kbhit())
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
		else if ((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0)))
 | 
							else if ((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0)))
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
		else if (FD_ISSET(fileno(stdin),&readfds))
 | 
							else if (FD_ISSET(fileno(stdin),&readfds))
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -800,14 +920,16 @@ end:
 | 
				
			|||||||
	if (con != NULL) SSL_free(con);
 | 
						if (con != NULL) SSL_free(con);
 | 
				
			||||||
	if (con2 != NULL) SSL_free(con2);
 | 
						if (con2 != NULL) SSL_free(con2);
 | 
				
			||||||
	if (ctx != NULL) SSL_CTX_free(ctx);
 | 
						if (ctx != NULL) SSL_CTX_free(ctx);
 | 
				
			||||||
	if (cbuf != NULL) { memset(cbuf,0,BUFSIZZ); OPENSSL_free(cbuf); }
 | 
						if (cbuf != NULL) { OPENSSL_cleanse(cbuf,BUFSIZZ); OPENSSL_free(cbuf); }
 | 
				
			||||||
	if (sbuf != NULL) { memset(sbuf,0,BUFSIZZ); OPENSSL_free(sbuf); }
 | 
						if (sbuf != NULL) { OPENSSL_cleanse(sbuf,BUFSIZZ); OPENSSL_free(sbuf); }
 | 
				
			||||||
 | 
						if (mbuf != NULL) { OPENSSL_cleanse(mbuf,BUFSIZZ); OPENSSL_free(mbuf); }
 | 
				
			||||||
	if (bio_c_out != NULL)
 | 
						if (bio_c_out != NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_free(bio_c_out);
 | 
							BIO_free(bio_c_out);
 | 
				
			||||||
		bio_c_out=NULL;
 | 
							bio_c_out=NULL;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -836,10 +958,10 @@ static void print_stuff(BIO *bio, SSL *s, int full)
 | 
				
			|||||||
			for (i=0; i<sk_X509_num(sk); i++)
 | 
								for (i=0; i<sk_X509_num(sk); i++)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
				X509_NAME_oneline(X509_get_subject_name(
 | 
									X509_NAME_oneline(X509_get_subject_name(
 | 
				
			||||||
					sk_X509_value(sk,i)),buf,BUFSIZ);
 | 
										sk_X509_value(sk,i)),buf,sizeof buf);
 | 
				
			||||||
				BIO_printf(bio,"%2d s:%s\n",i,buf);
 | 
									BIO_printf(bio,"%2d s:%s\n",i,buf);
 | 
				
			||||||
				X509_NAME_oneline(X509_get_issuer_name(
 | 
									X509_NAME_oneline(X509_get_issuer_name(
 | 
				
			||||||
					sk_X509_value(sk,i)),buf,BUFSIZ);
 | 
										sk_X509_value(sk,i)),buf,sizeof buf);
 | 
				
			||||||
				BIO_printf(bio,"   i:%s\n",buf);
 | 
									BIO_printf(bio,"   i:%s\n",buf);
 | 
				
			||||||
				if (c_showcerts)
 | 
									if (c_showcerts)
 | 
				
			||||||
					PEM_write_bio_X509(bio,sk_X509_value(sk,i));
 | 
										PEM_write_bio_X509(bio,sk_X509_value(sk,i));
 | 
				
			||||||
@@ -854,10 +976,10 @@ static void print_stuff(BIO *bio, SSL *s, int full)
 | 
				
			|||||||
			if (!(c_showcerts && got_a_chain)) /* Redundant if we showed the whole chain */
 | 
								if (!(c_showcerts && got_a_chain)) /* Redundant if we showed the whole chain */
 | 
				
			||||||
				PEM_write_bio_X509(bio,peer);
 | 
									PEM_write_bio_X509(bio,peer);
 | 
				
			||||||
			X509_NAME_oneline(X509_get_subject_name(peer),
 | 
								X509_NAME_oneline(X509_get_subject_name(peer),
 | 
				
			||||||
				buf,BUFSIZ);
 | 
									buf,sizeof buf);
 | 
				
			||||||
			BIO_printf(bio,"subject=%s\n",buf);
 | 
								BIO_printf(bio,"subject=%s\n",buf);
 | 
				
			||||||
			X509_NAME_oneline(X509_get_issuer_name(peer),
 | 
								X509_NAME_oneline(X509_get_issuer_name(peer),
 | 
				
			||||||
				buf,BUFSIZ);
 | 
									buf,sizeof buf);
 | 
				
			||||||
			BIO_printf(bio,"issuer=%s\n",buf);
 | 
								BIO_printf(bio,"issuer=%s\n",buf);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
@@ -879,7 +1001,7 @@ static void print_stuff(BIO *bio, SSL *s, int full)
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_printf(bio,"---\nNo client certificate CA names sent\n");
 | 
								BIO_printf(bio,"---\nNo client certificate CA names sent\n");
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		p=SSL_get_shared_ciphers(s,buf,BUFSIZ);
 | 
							p=SSL_get_shared_ciphers(s,buf,sizeof buf);
 | 
				
			||||||
		if (p != NULL)
 | 
							if (p != NULL)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			/* This works only for SSL 2.  In later protocol
 | 
								/* This works only for SSL 2.  In later protocol
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										334
									
								
								apps/s_server.c
									
									
									
									
									
								
							
							
						
						
									
										334
									
								
								apps/s_server.c
									
									
									
									
									
								
							@@ -55,6 +55,59 @@
 | 
				
			|||||||
 * copied and put under another distribution licence
 | 
					 * copied and put under another distribution licence
 | 
				
			||||||
 * [including the GNU Public Licence.]
 | 
					 * [including the GNU Public Licence.]
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    openssl-core@openssl.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This product includes cryptographic software written by Eric Young
 | 
				
			||||||
 | 
					 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
				
			||||||
 | 
					 * Hudson (tjh@cryptsoft.com).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <assert.h>
 | 
					#include <assert.h>
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
@@ -62,7 +115,8 @@
 | 
				
			|||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <sys/types.h>
 | 
					#include <sys/types.h>
 | 
				
			||||||
#include <sys/stat.h>
 | 
					#include <sys/stat.h>
 | 
				
			||||||
#ifdef NO_STDIO
 | 
					#include <openssl/e_os2.h>
 | 
				
			||||||
 | 
					#ifdef OPENSSL_NO_STDIO
 | 
				
			||||||
#define APPS_WIN16
 | 
					#define APPS_WIN16
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -70,7 +124,7 @@
 | 
				
			|||||||
   recursive header file inclusion, resulting in the compiler complaining
 | 
					   recursive header file inclusion, resulting in the compiler complaining
 | 
				
			||||||
   that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which
 | 
					   that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which
 | 
				
			||||||
   is needed to have fileno() declared correctly...  So let's define u_int */
 | 
					   is needed to have fileno() declared correctly...  So let's define u_int */
 | 
				
			||||||
#if defined(VMS) && defined(__DECC) && !defined(__U_INT)
 | 
					#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__U_INT)
 | 
				
			||||||
#define __U_INT
 | 
					#define __U_INT
 | 
				
			||||||
typedef unsigned int u_int;
 | 
					typedef unsigned int u_int;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -84,19 +138,22 @@ typedef unsigned int u_int;
 | 
				
			|||||||
#include <openssl/x509.h>
 | 
					#include <openssl/x509.h>
 | 
				
			||||||
#include <openssl/ssl.h>
 | 
					#include <openssl/ssl.h>
 | 
				
			||||||
#include <openssl/rand.h>
 | 
					#include <openssl/rand.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
#include "s_apps.h"
 | 
					#include "s_apps.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef WINDOWS
 | 
					#ifdef OPENSSL_SYS_WINCE
 | 
				
			||||||
#include <conio.h>
 | 
					/* Windows CE incorrectly defines fileno as returning void*, so to avoid problems below... */
 | 
				
			||||||
 | 
					#ifdef fileno
 | 
				
			||||||
 | 
					#undef fileno
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#define fileno(a) (int)_fileno(a)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if (defined(VMS) && __VMS_VER < 70000000)
 | 
					#if (defined(OPENSSL_SYS_VMS) && __VMS_VER < 70000000)
 | 
				
			||||||
/* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */
 | 
					/* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */
 | 
				
			||||||
#undef FIONBIO
 | 
					#undef FIONBIO
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_RSA
 | 
					#ifndef OPENSSL_NO_RSA
 | 
				
			||||||
static RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int is_export, int keylength);
 | 
					static RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int is_export, int keylength);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
static int sv_body(char *hostname, int s, unsigned char *context);
 | 
					static int sv_body(char *hostname, int s, unsigned char *context);
 | 
				
			||||||
@@ -105,7 +162,9 @@ static void close_accept_socket(void );
 | 
				
			|||||||
static void sv_usage(void);
 | 
					static void sv_usage(void);
 | 
				
			||||||
static int init_ssl_connection(SSL *s);
 | 
					static int init_ssl_connection(SSL *s);
 | 
				
			||||||
static void print_stats(BIO *bp,SSL_CTX *ctx);
 | 
					static void print_stats(BIO *bp,SSL_CTX *ctx);
 | 
				
			||||||
#ifndef NO_DH
 | 
					static int generate_session_id(const SSL *ssl, unsigned char *id,
 | 
				
			||||||
 | 
									unsigned int *id_len);
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_DH
 | 
				
			||||||
static DH *load_dh_param(char *dhfile);
 | 
					static DH *load_dh_param(char *dhfile);
 | 
				
			||||||
static DH *get_dh512(void);
 | 
					static DH *get_dh512(void);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -121,7 +180,7 @@ static void s_server_init(void);
 | 
				
			|||||||
# endif
 | 
					# endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_DH
 | 
					#ifndef OPENSSL_NO_DH
 | 
				
			||||||
static unsigned char dh512_p[]={
 | 
					static unsigned char dh512_p[]={
 | 
				
			||||||
	0xDA,0x58,0x3C,0x16,0xD9,0x85,0x22,0x89,0xD0,0xE4,0xAF,0x75,
 | 
						0xDA,0x58,0x3C,0x16,0xD9,0x85,0x22,0x89,0xD0,0xE4,0xAF,0x75,
 | 
				
			||||||
	0x6F,0x4C,0xCA,0x92,0xDD,0x4B,0xE5,0x33,0xB8,0x04,0xFB,0x0F,
 | 
						0x6F,0x4C,0xCA,0x92,0xDD,0x4B,0xE5,0x33,0xB8,0x04,0xFB,0x0F,
 | 
				
			||||||
@@ -175,10 +234,14 @@ static int www=0;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static BIO *bio_s_out=NULL;
 | 
					static BIO *bio_s_out=NULL;
 | 
				
			||||||
static int s_debug=0;
 | 
					static int s_debug=0;
 | 
				
			||||||
 | 
					static int s_msg=0;
 | 
				
			||||||
static int s_quiet=0;
 | 
					static int s_quiet=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int hack=0;
 | 
					static int hack=0;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
static char *engine_id=NULL;
 | 
					static char *engine_id=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					static const char *session_id_prefix=NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef MONOLITH
 | 
					#ifdef MONOLITH
 | 
				
			||||||
static void s_server_init(void)
 | 
					static void s_server_init(void)
 | 
				
			||||||
@@ -199,9 +262,12 @@ static void s_server_init(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	bio_s_out=NULL;
 | 
						bio_s_out=NULL;
 | 
				
			||||||
	s_debug=0;
 | 
						s_debug=0;
 | 
				
			||||||
 | 
						s_msg=0;
 | 
				
			||||||
	s_quiet=0;
 | 
						s_quiet=0;
 | 
				
			||||||
	hack=0;
 | 
						hack=0;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	engine_id=NULL;
 | 
						engine_id=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -227,11 +293,13 @@ static void sv_usage(void)
 | 
				
			|||||||
	BIO_printf(bio_err," -nbio_test    - test with the non-blocking test bio\n");
 | 
						BIO_printf(bio_err," -nbio_test    - test with the non-blocking test bio\n");
 | 
				
			||||||
	BIO_printf(bio_err," -crlf         - convert LF from terminal into CRLF\n");
 | 
						BIO_printf(bio_err," -crlf         - convert LF from terminal into CRLF\n");
 | 
				
			||||||
	BIO_printf(bio_err," -debug        - Print more output\n");
 | 
						BIO_printf(bio_err," -debug        - Print more output\n");
 | 
				
			||||||
 | 
						BIO_printf(bio_err," -msg          - Show protocol messages\n");
 | 
				
			||||||
	BIO_printf(bio_err," -state        - Print the SSL states\n");
 | 
						BIO_printf(bio_err," -state        - Print the SSL states\n");
 | 
				
			||||||
	BIO_printf(bio_err," -CApath arg   - PEM format directory of CA's\n");
 | 
						BIO_printf(bio_err," -CApath arg   - PEM format directory of CA's\n");
 | 
				
			||||||
	BIO_printf(bio_err," -CAfile arg   - PEM format file of CA's\n");
 | 
						BIO_printf(bio_err," -CAfile arg   - PEM format file of CA's\n");
 | 
				
			||||||
	BIO_printf(bio_err," -nocert       - Don't use any certificates (Anon-DH)\n");
 | 
						BIO_printf(bio_err," -nocert       - Don't use any certificates (Anon-DH)\n");
 | 
				
			||||||
	BIO_printf(bio_err," -cipher arg   - play with 'openssl ciphers' to see what goes here\n");
 | 
						BIO_printf(bio_err," -cipher arg   - play with 'openssl ciphers' to see what goes here\n");
 | 
				
			||||||
 | 
						BIO_printf(bio_err," -serverpref   - Use server's cipher preferences\n");
 | 
				
			||||||
	BIO_printf(bio_err," -quiet        - No server output\n");
 | 
						BIO_printf(bio_err," -quiet        - No server output\n");
 | 
				
			||||||
	BIO_printf(bio_err," -no_tmp_rsa   - Do not generate a tmp RSA key\n");
 | 
						BIO_printf(bio_err," -no_tmp_rsa   - Do not generate a tmp RSA key\n");
 | 
				
			||||||
	BIO_printf(bio_err," -ssl2         - Just talk SSLv2\n");
 | 
						BIO_printf(bio_err," -ssl2         - Just talk SSLv2\n");
 | 
				
			||||||
@@ -240,14 +308,19 @@ static void sv_usage(void)
 | 
				
			|||||||
	BIO_printf(bio_err," -no_ssl2      - Just disable SSLv2\n");
 | 
						BIO_printf(bio_err," -no_ssl2      - Just disable SSLv2\n");
 | 
				
			||||||
	BIO_printf(bio_err," -no_ssl3      - Just disable SSLv3\n");
 | 
						BIO_printf(bio_err," -no_ssl3      - Just disable SSLv3\n");
 | 
				
			||||||
	BIO_printf(bio_err," -no_tls1      - Just disable TLSv1\n");
 | 
						BIO_printf(bio_err," -no_tls1      - Just disable TLSv1\n");
 | 
				
			||||||
#ifndef NO_DH
 | 
					#ifndef OPENSSL_NO_DH
 | 
				
			||||||
	BIO_printf(bio_err," -no_dhe       - Disable ephemeral DH\n");
 | 
						BIO_printf(bio_err," -no_dhe       - Disable ephemeral DH\n");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	BIO_printf(bio_err," -bugs         - Turn on SSL bug compatibility\n");
 | 
						BIO_printf(bio_err," -bugs         - Turn on SSL bug compatibility\n");
 | 
				
			||||||
	BIO_printf(bio_err," -www          - Respond to a 'GET /' with a status page\n");
 | 
						BIO_printf(bio_err," -www          - Respond to a 'GET /' with a status page\n");
 | 
				
			||||||
	BIO_printf(bio_err," -WWW          - Respond to a 'GET /<path> HTTP/1.0' with file ./<path>\n");
 | 
						BIO_printf(bio_err," -WWW          - Respond to a 'GET /<path> HTTP/1.0' with file ./<path>\n");
 | 
				
			||||||
	BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
						BIO_printf(bio_err," -HTTP         - Respond to a 'GET /<path> HTTP/1.0' with file ./<path>\n");
 | 
				
			||||||
 | 
					        BIO_printf(bio_err,"                 with the assumption it contains a complete HTTP response.\n");
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	BIO_printf(bio_err," -engine id    - Initialise and use the specified engine\n");
 | 
						BIO_printf(bio_err," -engine id    - Initialise and use the specified engine\n");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						BIO_printf(bio_err," -id_prefix arg - Generate SSL/TLS session IDs prefixed by 'arg'\n");
 | 
				
			||||||
 | 
						BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int local_argc=0;
 | 
					static int local_argc=0;
 | 
				
			||||||
@@ -257,10 +330,10 @@ static char **local_argv;
 | 
				
			|||||||
static int ebcdic_new(BIO *bi);
 | 
					static int ebcdic_new(BIO *bi);
 | 
				
			||||||
static int ebcdic_free(BIO *a);
 | 
					static int ebcdic_free(BIO *a);
 | 
				
			||||||
static int ebcdic_read(BIO *b, char *out, int outl);
 | 
					static int ebcdic_read(BIO *b, char *out, int outl);
 | 
				
			||||||
static int ebcdic_write(BIO *b, char *in, int inl);
 | 
					static int ebcdic_write(BIO *b, const char *in, int inl);
 | 
				
			||||||
static long ebcdic_ctrl(BIO *b, int cmd, long num, char *ptr);
 | 
					static long ebcdic_ctrl(BIO *b, int cmd, long num, void *ptr);
 | 
				
			||||||
static int ebcdic_gets(BIO *bp, char *buf, int size);
 | 
					static int ebcdic_gets(BIO *bp, char *buf, int size);
 | 
				
			||||||
static int ebcdic_puts(BIO *bp, char *str);
 | 
					static int ebcdic_puts(BIO *bp, const char *str);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define BIO_TYPE_EBCDIC_FILTER	(18|0x0200)
 | 
					#define BIO_TYPE_EBCDIC_FILTER	(18|0x0200)
 | 
				
			||||||
static BIO_METHOD methods_ebcdic=
 | 
					static BIO_METHOD methods_ebcdic=
 | 
				
			||||||
@@ -325,7 +398,7 @@ static int ebcdic_read(BIO *b, char *out, int outl)
 | 
				
			|||||||
	return(ret);
 | 
						return(ret);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int ebcdic_write(BIO *b, char *in, int inl)
 | 
					static int ebcdic_write(BIO *b, const char *in, int inl)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	EBCDIC_OUTBUFF *wbuf;
 | 
						EBCDIC_OUTBUFF *wbuf;
 | 
				
			||||||
	int ret=0;
 | 
						int ret=0;
 | 
				
			||||||
@@ -358,7 +431,7 @@ static int ebcdic_write(BIO *b, char *in, int inl)
 | 
				
			|||||||
	return(ret);
 | 
						return(ret);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static long ebcdic_ctrl(BIO *b, int cmd, long num, char *ptr)
 | 
					static long ebcdic_ctrl(BIO *b, int cmd, long num, void *ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	long ret;
 | 
						long ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -377,7 +450,7 @@ static long ebcdic_ctrl(BIO *b, int cmd, long num, char *ptr)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static int ebcdic_gets(BIO *bp, char *buf, int size)
 | 
					static int ebcdic_gets(BIO *bp, char *buf, int size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int i, ret;
 | 
						int i, ret=0;
 | 
				
			||||||
	if (bp->next_bio == NULL) return(0);
 | 
						if (bp->next_bio == NULL) return(0);
 | 
				
			||||||
/*	return(BIO_gets(bp->next_bio,buf,size));*/
 | 
					/*	return(BIO_gets(bp->next_bio,buf,size));*/
 | 
				
			||||||
	for (i=0; i<size-1; ++i)
 | 
						for (i=0; i<size-1; ++i)
 | 
				
			||||||
@@ -396,7 +469,7 @@ static int ebcdic_gets(BIO *bp, char *buf, int size)
 | 
				
			|||||||
	return (ret < 0 && i == 0) ? ret : i;
 | 
						return (ret < 0 && i == 0) ? ret : i;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int ebcdic_puts(BIO *bp, char *str)
 | 
					static int ebcdic_puts(BIO *bp, const char *str)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (bp->next_bio == NULL) return(0);
 | 
						if (bp->next_bio == NULL) return(0);
 | 
				
			||||||
	return ebcdic_write(bp, str, strlen(str));
 | 
						return ebcdic_write(bp, str, strlen(str));
 | 
				
			||||||
@@ -407,6 +480,8 @@ int MAIN(int, char **);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int MAIN(int argc, char *argv[])
 | 
					int MAIN(int argc, char *argv[])
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
						X509_STORE *store = NULL;
 | 
				
			||||||
 | 
						int vflags = 0;
 | 
				
			||||||
	short port=PORT;
 | 
						short port=PORT;
 | 
				
			||||||
	char *CApath=NULL,*CAfile=NULL;
 | 
						char *CApath=NULL,*CAfile=NULL;
 | 
				
			||||||
	char *context = NULL;
 | 
						char *context = NULL;
 | 
				
			||||||
@@ -417,18 +492,16 @@ int MAIN(int argc, char *argv[])
 | 
				
			|||||||
	int no_tmp_rsa=0,no_dhe=0,nocert=0;
 | 
						int no_tmp_rsa=0,no_dhe=0,nocert=0;
 | 
				
			||||||
	int state=0;
 | 
						int state=0;
 | 
				
			||||||
	SSL_METHOD *meth=NULL;
 | 
						SSL_METHOD *meth=NULL;
 | 
				
			||||||
	char *inrand=NULL;
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	char *engine_id=NULL;
 | 
					 | 
				
			||||||
	ENGINE *e=NULL;
 | 
						ENGINE *e=NULL;
 | 
				
			||||||
#ifndef NO_DH
 | 
					 | 
				
			||||||
	DH *dh=NULL;
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
						char *inrand=NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(NO_SSL2) && !defined(NO_SSL3)
 | 
					#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
 | 
				
			||||||
	meth=SSLv23_server_method();
 | 
						meth=SSLv23_server_method();
 | 
				
			||||||
#elif !defined(NO_SSL3)
 | 
					#elif !defined(OPENSSL_NO_SSL3)
 | 
				
			||||||
	meth=SSLv3_server_method();
 | 
						meth=SSLv3_server_method();
 | 
				
			||||||
#elif !defined(NO_SSL2)
 | 
					#elif !defined(OPENSSL_NO_SSL2)
 | 
				
			||||||
	meth=SSLv2_server_method();
 | 
						meth=SSLv2_server_method();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -443,6 +516,9 @@ int MAIN(int argc, char *argv[])
 | 
				
			|||||||
	if (bio_err == NULL)
 | 
						if (bio_err == NULL)
 | 
				
			||||||
		bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
							bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	verify_depth=0;
 | 
						verify_depth=0;
 | 
				
			||||||
#ifdef FIONBIO
 | 
					#ifdef FIONBIO
 | 
				
			||||||
	s_nbio=0;
 | 
						s_nbio=0;
 | 
				
			||||||
@@ -515,6 +591,16 @@ int MAIN(int argc, char *argv[])
 | 
				
			|||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			CApath= *(++argv);
 | 
								CApath= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-crl_check") == 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								vflags |= X509_V_FLAG_CRL_CHECK;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-crl_check") == 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								vflags |= X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							else if	(strcmp(*argv,"-serverpref") == 0)
 | 
				
			||||||
 | 
								{ off|=SSL_OP_CIPHER_SERVER_PREFERENCE; }
 | 
				
			||||||
		else if	(strcmp(*argv,"-cipher") == 0)
 | 
							else if	(strcmp(*argv,"-cipher") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
@@ -538,6 +624,8 @@ int MAIN(int argc, char *argv[])
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		else if	(strcmp(*argv,"-debug") == 0)
 | 
							else if	(strcmp(*argv,"-debug") == 0)
 | 
				
			||||||
			{ s_debug=1; }
 | 
								{ s_debug=1; }
 | 
				
			||||||
 | 
							else if	(strcmp(*argv,"-msg") == 0)
 | 
				
			||||||
 | 
								{ s_msg=1; }
 | 
				
			||||||
		else if	(strcmp(*argv,"-hack") == 0)
 | 
							else if	(strcmp(*argv,"-hack") == 0)
 | 
				
			||||||
			{ hack=1; }
 | 
								{ hack=1; }
 | 
				
			||||||
		else if	(strcmp(*argv,"-state") == 0)
 | 
							else if	(strcmp(*argv,"-state") == 0)
 | 
				
			||||||
@@ -556,34 +644,43 @@ int MAIN(int argc, char *argv[])
 | 
				
			|||||||
			{ www=1; }
 | 
								{ www=1; }
 | 
				
			||||||
		else if	(strcmp(*argv,"-WWW") == 0)
 | 
							else if	(strcmp(*argv,"-WWW") == 0)
 | 
				
			||||||
			{ www=2; }
 | 
								{ www=2; }
 | 
				
			||||||
 | 
							else if	(strcmp(*argv,"-HTTP") == 0)
 | 
				
			||||||
 | 
								{ www=3; }
 | 
				
			||||||
		else if	(strcmp(*argv,"-no_ssl2") == 0)
 | 
							else if	(strcmp(*argv,"-no_ssl2") == 0)
 | 
				
			||||||
			{ off|=SSL_OP_NO_SSLv2; }
 | 
								{ off|=SSL_OP_NO_SSLv2; }
 | 
				
			||||||
		else if	(strcmp(*argv,"-no_ssl3") == 0)
 | 
							else if	(strcmp(*argv,"-no_ssl3") == 0)
 | 
				
			||||||
			{ off|=SSL_OP_NO_SSLv3; }
 | 
								{ off|=SSL_OP_NO_SSLv3; }
 | 
				
			||||||
		else if	(strcmp(*argv,"-no_tls1") == 0)
 | 
							else if	(strcmp(*argv,"-no_tls1") == 0)
 | 
				
			||||||
			{ off|=SSL_OP_NO_TLSv1; }
 | 
								{ off|=SSL_OP_NO_TLSv1; }
 | 
				
			||||||
#ifndef NO_SSL2
 | 
					#ifndef OPENSSL_NO_SSL2
 | 
				
			||||||
		else if	(strcmp(*argv,"-ssl2") == 0)
 | 
							else if	(strcmp(*argv,"-ssl2") == 0)
 | 
				
			||||||
			{ meth=SSLv2_server_method(); }
 | 
								{ meth=SSLv2_server_method(); }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_SSL3
 | 
					#ifndef OPENSSL_NO_SSL3
 | 
				
			||||||
		else if	(strcmp(*argv,"-ssl3") == 0)
 | 
							else if	(strcmp(*argv,"-ssl3") == 0)
 | 
				
			||||||
			{ meth=SSLv3_server_method(); }
 | 
								{ meth=SSLv3_server_method(); }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_TLS1
 | 
					#ifndef OPENSSL_NO_TLS1
 | 
				
			||||||
		else if	(strcmp(*argv,"-tls1") == 0)
 | 
							else if	(strcmp(*argv,"-tls1") == 0)
 | 
				
			||||||
			{ meth=TLSv1_server_method(); }
 | 
								{ meth=TLSv1_server_method(); }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
							else if (strcmp(*argv, "-id_prefix") == 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
 | 
								session_id_prefix = *(++argv);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-engine") == 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
 | 
								engine_id= *(++argv);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		else if (strcmp(*argv,"-rand") == 0)
 | 
							else if (strcmp(*argv,"-rand") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			inrand= *(++argv);
 | 
								inrand= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
					 | 
				
			||||||
			engine_id= *(++argv);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
								BIO_printf(bio_err,"unknown option %s\n",*argv);
 | 
				
			||||||
@@ -600,6 +697,13 @@ bad:
 | 
				
			|||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						SSL_load_error_strings();
 | 
				
			||||||
 | 
						OpenSSL_add_ssl_algorithms();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
					        e = setup_engine(bio_err, engine_id, 1);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
 | 
						if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
 | 
				
			||||||
		&& !RAND_status())
 | 
							&& !RAND_status())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -611,7 +715,7 @@ bad:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (bio_s_out == NULL)
 | 
						if (bio_s_out == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		if (s_quiet && !s_debug)
 | 
							if (s_quiet && !s_debug && !s_msg)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			bio_s_out=BIO_new(BIO_s_null());
 | 
								bio_s_out=BIO_new(BIO_s_null());
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -622,7 +726,7 @@ bad:
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(NO_RSA) || !defined(NO_DSA)
 | 
					#if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA)
 | 
				
			||||||
	if (nocert)
 | 
						if (nocert)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -632,44 +736,32 @@ bad:
 | 
				
			|||||||
		s_dkey_file=NULL;
 | 
							s_dkey_file=NULL;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SSL_load_error_strings();
 | 
					 | 
				
			||||||
	OpenSSL_add_ssl_algorithms();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (engine_id != NULL)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
		if((e = ENGINE_by_id(engine_id)) == NULL)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine\n");
 | 
					 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if (s_debug)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			ENGINE_ctrl(e, ENGINE_CTRL_SET_LOGSTREAM,
 | 
					 | 
				
			||||||
				0, bio_err, 0);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine_id);
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ctx=SSL_CTX_new(meth);
 | 
						ctx=SSL_CTX_new(meth);
 | 
				
			||||||
	if (ctx == NULL)
 | 
						if (ctx == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		ERR_print_errors(bio_err);
 | 
							ERR_print_errors(bio_err);
 | 
				
			||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						if (session_id_prefix)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							if(strlen(session_id_prefix) >= 32)
 | 
				
			||||||
 | 
								BIO_printf(bio_err,
 | 
				
			||||||
 | 
					"warning: id_prefix is too long, only one new session will be possible\n");
 | 
				
			||||||
 | 
							else if(strlen(session_id_prefix) >= 16)
 | 
				
			||||||
 | 
								BIO_printf(bio_err,
 | 
				
			||||||
 | 
					"warning: id_prefix is too long if you use SSLv2\n");
 | 
				
			||||||
 | 
							if(!SSL_CTX_set_generate_session_id(ctx, generate_session_id))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								BIO_printf(bio_err,"error setting 'id_prefix'\n");
 | 
				
			||||||
 | 
								ERR_print_errors(bio_err);
 | 
				
			||||||
 | 
								goto end;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							BIO_printf(bio_err,"id_prefix '%s' set.\n", session_id_prefix);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	SSL_CTX_set_quiet_shutdown(ctx,1);
 | 
						SSL_CTX_set_quiet_shutdown(ctx,1);
 | 
				
			||||||
	if (bugs) SSL_CTX_set_options(ctx,SSL_OP_ALL);
 | 
						if (bugs) SSL_CTX_set_options(ctx,SSL_OP_ALL);
 | 
				
			||||||
	if (hack) SSL_CTX_set_options(ctx,SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG);
 | 
						if (hack) SSL_CTX_set_options(ctx,SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG);
 | 
				
			||||||
	SSL_CTX_set_options(ctx,off);
 | 
						SSL_CTX_set_options(ctx,off);
 | 
				
			||||||
	if (hack) SSL_CTX_set_options(ctx,SSL_OP_NON_EXPORT_FIRST);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (state) SSL_CTX_set_info_callback(ctx,apps_ssl_info_callback);
 | 
						if (state) SSL_CTX_set_info_callback(ctx,apps_ssl_info_callback);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -694,11 +786,19 @@ bad:
 | 
				
			|||||||
		ERR_print_errors(bio_err);
 | 
							ERR_print_errors(bio_err);
 | 
				
			||||||
		/* goto end; */
 | 
							/* goto end; */
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						store = SSL_CTX_get_cert_store(ctx);
 | 
				
			||||||
 | 
						X509_STORE_set_flags(store, vflags);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_DH
 | 
					#ifndef OPENSSL_NO_DH
 | 
				
			||||||
	if (!no_dhe)
 | 
						if (!no_dhe)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		dh=load_dh_param(dhfile ? dhfile : s_cert_file);
 | 
							DH *dh=NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (dhfile)
 | 
				
			||||||
 | 
								dh = load_dh_param(dhfile);
 | 
				
			||||||
 | 
							else if (s_cert_file)
 | 
				
			||||||
 | 
								dh = load_dh_param(s_cert_file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (dh != NULL)
 | 
							if (dh != NULL)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_printf(bio_s_out,"Setting temp DH parameters\n");
 | 
								BIO_printf(bio_s_out,"Setting temp DH parameters\n");
 | 
				
			||||||
@@ -723,7 +823,7 @@ bad:
 | 
				
			|||||||
			goto end;
 | 
								goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_RSA
 | 
					#ifndef OPENSSL_NO_RSA
 | 
				
			||||||
#if 1
 | 
					#if 1
 | 
				
			||||||
	if (!no_tmp_rsa)
 | 
						if (!no_tmp_rsa)
 | 
				
			||||||
		SSL_CTX_set_tmp_rsa_callback(ctx,tmp_rsa_cb);
 | 
							SSL_CTX_set_tmp_rsa_callback(ctx,tmp_rsa_cb);
 | 
				
			||||||
@@ -775,7 +875,8 @@ end:
 | 
				
			|||||||
		BIO_free(bio_s_out);
 | 
							BIO_free(bio_s_out);
 | 
				
			||||||
		bio_s_out=NULL;
 | 
							bio_s_out=NULL;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void print_stats(BIO *bio, SSL_CTX *ssl_ctx)
 | 
					static void print_stats(BIO *bio, SSL_CTX *ssl_ctx)
 | 
				
			||||||
@@ -812,7 +913,7 @@ static int sv_body(char *hostname, int s, unsigned char *context)
 | 
				
			|||||||
	unsigned long l;
 | 
						unsigned long l;
 | 
				
			||||||
	SSL *con=NULL;
 | 
						SSL *con=NULL;
 | 
				
			||||||
	BIO *sbio;
 | 
						BIO *sbio;
 | 
				
			||||||
#ifdef WINDOWS
 | 
					#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
 | 
				
			||||||
	struct timeval tv;
 | 
						struct timeval tv;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -835,6 +936,15 @@ static int sv_body(char *hostname, int s, unsigned char *context)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (con == NULL) {
 | 
						if (con == NULL) {
 | 
				
			||||||
		con=SSL_new(ctx);
 | 
							con=SSL_new(ctx);
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_KRB5
 | 
				
			||||||
 | 
							if ((con->kssl_ctx = kssl_ctx_new()) != NULL)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                        kssl_ctx_setstring(con->kssl_ctx, KSSL_SERVICE,
 | 
				
			||||||
 | 
													KRB5SVC);
 | 
				
			||||||
 | 
					                        kssl_ctx_setstring(con->kssl_ctx, KSSL_KEYTAB,
 | 
				
			||||||
 | 
													KRB5KEYTAB);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					#endif	/* OPENSSL_NO_KRB5 */
 | 
				
			||||||
		if(context)
 | 
							if(context)
 | 
				
			||||||
		      SSL_set_session_id_context(con, context,
 | 
							      SSL_set_session_id_context(con, context,
 | 
				
			||||||
						 strlen((char *)context));
 | 
											 strlen((char *)context));
 | 
				
			||||||
@@ -859,6 +969,11 @@ static int sv_body(char *hostname, int s, unsigned char *context)
 | 
				
			|||||||
		BIO_set_callback(SSL_get_rbio(con),bio_dump_cb);
 | 
							BIO_set_callback(SSL_get_rbio(con),bio_dump_cb);
 | 
				
			||||||
		BIO_set_callback_arg(SSL_get_rbio(con),bio_s_out);
 | 
							BIO_set_callback_arg(SSL_get_rbio(con),bio_s_out);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						if (s_msg)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							SSL_set_msg_callback(con, msg_cb);
 | 
				
			||||||
 | 
							SSL_set_msg_callback_arg(con, bio_s_out);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	width=s+1;
 | 
						width=s+1;
 | 
				
			||||||
	for (;;)
 | 
						for (;;)
 | 
				
			||||||
@@ -872,7 +987,7 @@ static int sv_body(char *hostname, int s, unsigned char *context)
 | 
				
			|||||||
		if (!read_from_sslcon)
 | 
							if (!read_from_sslcon)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			FD_ZERO(&readfds);
 | 
								FD_ZERO(&readfds);
 | 
				
			||||||
#ifndef WINDOWS
 | 
					#if !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MSDOS)
 | 
				
			||||||
			FD_SET(fileno(stdin),&readfds);
 | 
								FD_SET(fileno(stdin),&readfds);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
			FD_SET(s,&readfds);
 | 
								FD_SET(s,&readfds);
 | 
				
			||||||
@@ -882,8 +997,8 @@ static int sv_body(char *hostname, int s, unsigned char *context)
 | 
				
			|||||||
			 * the compiler: if you do have a cast then you can either
 | 
								 * the compiler: if you do have a cast then you can either
 | 
				
			||||||
			 * go for (int *) or (void *).
 | 
								 * go for (int *) or (void *).
 | 
				
			||||||
			 */
 | 
								 */
 | 
				
			||||||
#ifdef WINDOWS
 | 
					#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
 | 
				
			||||||
			/* Under Windows we can't select on stdin: only
 | 
					                        /* Under DOS (non-djgpp) and Windows we can't select on stdin: only
 | 
				
			||||||
			 * on sockets. As a workaround we timeout the select every
 | 
								 * on sockets. As a workaround we timeout the select every
 | 
				
			||||||
			 * second and check for any keypress. In a proper Windows
 | 
								 * second and check for any keypress. In a proper Windows
 | 
				
			||||||
			 * application we wouldn't do this because it is inefficient.
 | 
								 * application we wouldn't do this because it is inefficient.
 | 
				
			||||||
@@ -1077,7 +1192,7 @@ err:
 | 
				
			|||||||
	BIO_printf(bio_s_out,"CONNECTION CLOSED\n");
 | 
						BIO_printf(bio_s_out,"CONNECTION CLOSED\n");
 | 
				
			||||||
	if (buf != NULL)
 | 
						if (buf != NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		memset(buf,0,bufsize);
 | 
							OPENSSL_cleanse(buf,bufsize);
 | 
				
			||||||
		OPENSSL_free(buf);
 | 
							OPENSSL_free(buf);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	if (ret >= 0)
 | 
						if (ret >= 0)
 | 
				
			||||||
@@ -1129,14 +1244,14 @@ static int init_ssl_connection(SSL *con)
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_printf(bio_s_out,"Client certificate\n");
 | 
							BIO_printf(bio_s_out,"Client certificate\n");
 | 
				
			||||||
		PEM_write_bio_X509(bio_s_out,peer);
 | 
							PEM_write_bio_X509(bio_s_out,peer);
 | 
				
			||||||
		X509_NAME_oneline(X509_get_subject_name(peer),buf,BUFSIZ);
 | 
							X509_NAME_oneline(X509_get_subject_name(peer),buf,sizeof buf);
 | 
				
			||||||
		BIO_printf(bio_s_out,"subject=%s\n",buf);
 | 
							BIO_printf(bio_s_out,"subject=%s\n",buf);
 | 
				
			||||||
		X509_NAME_oneline(X509_get_issuer_name(peer),buf,BUFSIZ);
 | 
							X509_NAME_oneline(X509_get_issuer_name(peer),buf,sizeof buf);
 | 
				
			||||||
		BIO_printf(bio_s_out,"issuer=%s\n",buf);
 | 
							BIO_printf(bio_s_out,"issuer=%s\n",buf);
 | 
				
			||||||
		X509_free(peer);
 | 
							X509_free(peer);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (SSL_get_shared_ciphers(con,buf,BUFSIZ) != NULL)
 | 
						if (SSL_get_shared_ciphers(con,buf,sizeof buf) != NULL)
 | 
				
			||||||
		BIO_printf(bio_s_out,"Shared ciphers:%s\n",buf);
 | 
							BIO_printf(bio_s_out,"Shared ciphers:%s\n",buf);
 | 
				
			||||||
	str=SSL_CIPHER_get_name(SSL_get_current_cipher(con));
 | 
						str=SSL_CIPHER_get_name(SSL_get_current_cipher(con));
 | 
				
			||||||
	BIO_printf(bio_s_out,"CIPHER is %s\n",(str != NULL)?str:"(NONE)");
 | 
						BIO_printf(bio_s_out,"CIPHER is %s\n",(str != NULL)?str:"(NONE)");
 | 
				
			||||||
@@ -1144,11 +1259,17 @@ static int init_ssl_connection(SSL *con)
 | 
				
			|||||||
	if (SSL_ctrl(con,SSL_CTRL_GET_FLAGS,0,NULL) &
 | 
						if (SSL_ctrl(con,SSL_CTRL_GET_FLAGS,0,NULL) &
 | 
				
			||||||
		TLS1_FLAGS_TLS_PADDING_BUG)
 | 
							TLS1_FLAGS_TLS_PADDING_BUG)
 | 
				
			||||||
		BIO_printf(bio_s_out,"Peer has incorrect TLSv1 block padding\n");
 | 
							BIO_printf(bio_s_out,"Peer has incorrect TLSv1 block padding\n");
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_KRB5
 | 
				
			||||||
 | 
						if (con->kssl_ctx->client_princ != NULL)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							BIO_printf(bio_s_out,"Kerberos peer principal is %s\n",
 | 
				
			||||||
 | 
								con->kssl_ctx->client_princ);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					#endif /* OPENSSL_NO_KRB5 */
 | 
				
			||||||
	return(1);
 | 
						return(1);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_DH
 | 
					#ifndef OPENSSL_NO_DH
 | 
				
			||||||
static DH *load_dh_param(char *dhfile)
 | 
					static DH *load_dh_param(char *dhfile)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	DH *ret=NULL;
 | 
						DH *ret=NULL;
 | 
				
			||||||
@@ -1217,6 +1338,13 @@ static int www_body(char *hostname, int s, unsigned char *context)
 | 
				
			|||||||
	if (!BIO_set_write_buffer_size(io,bufsize)) goto err;
 | 
						if (!BIO_set_write_buffer_size(io,bufsize)) goto err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ((con=SSL_new(ctx)) == NULL) goto err;
 | 
						if ((con=SSL_new(ctx)) == NULL) goto err;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_KRB5
 | 
				
			||||||
 | 
						if ((con->kssl_ctx = kssl_ctx_new()) != NULL)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							kssl_ctx_setstring(con->kssl_ctx, KSSL_SERVICE, KRB5SVC);
 | 
				
			||||||
 | 
							kssl_ctx_setstring(con->kssl_ctx, KSSL_KEYTAB, KRB5KEYTAB);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					#endif	/* OPENSSL_NO_KRB5 */
 | 
				
			||||||
	if(context) SSL_set_session_id_context(con, context,
 | 
						if(context) SSL_set_session_id_context(con, context,
 | 
				
			||||||
					       strlen((char *)context));
 | 
										       strlen((char *)context));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1244,6 +1372,11 @@ static int www_body(char *hostname, int s, unsigned char *context)
 | 
				
			|||||||
		BIO_set_callback(SSL_get_rbio(con),bio_dump_cb);
 | 
							BIO_set_callback(SSL_get_rbio(con),bio_dump_cb);
 | 
				
			||||||
		BIO_set_callback_arg(SSL_get_rbio(con),bio_s_out);
 | 
							BIO_set_callback_arg(SSL_get_rbio(con),bio_s_out);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						if (s_msg)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							SSL_set_msg_callback(con, msg_cb);
 | 
				
			||||||
 | 
							SSL_set_msg_callback_arg(con, bio_s_out);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	blank=0;
 | 
						blank=0;
 | 
				
			||||||
	for (;;)
 | 
						for (;;)
 | 
				
			||||||
@@ -1284,7 +1417,7 @@ static int www_body(char *hostname, int s, unsigned char *context)
 | 
				
			|||||||
			else
 | 
								else
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
				BIO_printf(bio_s_out,"read R BLOCK\n");
 | 
									BIO_printf(bio_s_out,"read R BLOCK\n");
 | 
				
			||||||
#ifndef MSDOS
 | 
					#if !defined(OPENSSL_SYS_MSDOS) && !defined(__DJGPP__)
 | 
				
			||||||
				sleep(1);
 | 
									sleep(1);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
@@ -1378,7 +1511,8 @@ static int www_body(char *hostname, int s, unsigned char *context)
 | 
				
			|||||||
			BIO_puts(io,"</BODY></HTML>\r\n\r\n");
 | 
								BIO_puts(io,"</BODY></HTML>\r\n\r\n");
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		else if ((www == 2) && (strncmp("GET /",buf,5) == 0))
 | 
							else if ((www == 2 || www == 3)
 | 
				
			||||||
 | 
					                         && (strncmp("GET /",buf,5) == 0))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO *file;
 | 
								BIO *file;
 | 
				
			||||||
			char *p,*e;
 | 
								char *p,*e;
 | 
				
			||||||
@@ -1468,13 +1602,16 @@ static int www_body(char *hostname, int s, unsigned char *context)
 | 
				
			|||||||
			if (!s_quiet)
 | 
								if (!s_quiet)
 | 
				
			||||||
				BIO_printf(bio_err,"FILE:%s\n",p);
 | 
									BIO_printf(bio_err,"FILE:%s\n",p);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			i=strlen(p);
 | 
					                        if (www == 2)
 | 
				
			||||||
			if (	((i > 5) && (strcmp(&(p[i-5]),".html") == 0)) ||
 | 
					                                {
 | 
				
			||||||
				((i > 4) && (strcmp(&(p[i-4]),".php") == 0)) ||
 | 
					                                i=strlen(p);
 | 
				
			||||||
				((i > 4) && (strcmp(&(p[i-4]),".htm") == 0)))
 | 
					                                if (	((i > 5) && (strcmp(&(p[i-5]),".html") == 0)) ||
 | 
				
			||||||
				BIO_puts(io,"HTTP/1.0 200 ok\r\nContent-type: text/html\r\n\r\n");
 | 
					                                        ((i > 4) && (strcmp(&(p[i-4]),".php") == 0)) ||
 | 
				
			||||||
			else
 | 
					                                        ((i > 4) && (strcmp(&(p[i-4]),".htm") == 0)))
 | 
				
			||||||
				BIO_puts(io,"HTTP/1.0 200 ok\r\nContent-type: text/plain\r\n\r\n");
 | 
					                                        BIO_puts(io,"HTTP/1.0 200 ok\r\nContent-type: text/html\r\n\r\n");
 | 
				
			||||||
 | 
					                                else
 | 
				
			||||||
 | 
					                                        BIO_puts(io,"HTTP/1.0 200 ok\r\nContent-type: text/plain\r\n\r\n");
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
			/* send the file */
 | 
								/* send the file */
 | 
				
			||||||
			total_bytes=0;
 | 
								total_bytes=0;
 | 
				
			||||||
			for (;;)
 | 
								for (;;)
 | 
				
			||||||
@@ -1552,7 +1689,7 @@ err:
 | 
				
			|||||||
	return(ret);
 | 
						return(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_RSA
 | 
					#ifndef OPENSSL_NO_RSA
 | 
				
			||||||
static RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int is_export, int keylength)
 | 
					static RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int is_export, int keylength)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	static RSA *rsa_tmp=NULL;
 | 
						static RSA *rsa_tmp=NULL;
 | 
				
			||||||
@@ -1574,3 +1711,26 @@ static RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int is_export, int keylength)
 | 
				
			|||||||
	return(rsa_tmp);
 | 
						return(rsa_tmp);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MAX_SESSION_ID_ATTEMPTS 10
 | 
				
			||||||
 | 
					static int generate_session_id(const SSL *ssl, unsigned char *id,
 | 
				
			||||||
 | 
									unsigned int *id_len)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						unsigned int count = 0;
 | 
				
			||||||
 | 
						do	{
 | 
				
			||||||
 | 
							RAND_pseudo_bytes(id, *id_len);
 | 
				
			||||||
 | 
							/* Prefix the session_id with the required prefix. NB: If our
 | 
				
			||||||
 | 
							 * prefix is too long, clip it - but there will be worse effects
 | 
				
			||||||
 | 
							 * anyway, eg. the server could only possibly create 1 session
 | 
				
			||||||
 | 
							 * ID (ie. the prefix!) so all future session negotiations will
 | 
				
			||||||
 | 
							 * fail due to conflicts. */
 | 
				
			||||||
 | 
							memcpy(id, session_id_prefix,
 | 
				
			||||||
 | 
								(strlen(session_id_prefix) < *id_len) ?
 | 
				
			||||||
 | 
								strlen(session_id_prefix) : *id_len);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						while(SSL_has_matching_session_id(ssl, id, *id_len) &&
 | 
				
			||||||
 | 
							(++count < MAX_SESSION_ID_ATTEMPTS));
 | 
				
			||||||
 | 
						if(count >= MAX_SESSION_ID_ATTEMPTS)
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						return 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -62,11 +62,13 @@
 | 
				
			|||||||
#include <errno.h>
 | 
					#include <errno.h>
 | 
				
			||||||
#include <signal.h>
 | 
					#include <signal.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <openssl/e_os2.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* With IPv6, it looks like Digital has mixed up the proper order of
 | 
					/* With IPv6, it looks like Digital has mixed up the proper order of
 | 
				
			||||||
   recursive header file inclusion, resulting in the compiler complaining
 | 
					   recursive header file inclusion, resulting in the compiler complaining
 | 
				
			||||||
   that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which
 | 
					   that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which
 | 
				
			||||||
   is needed to have fileno() declared correctly...  So let's define u_int */
 | 
					   is needed to have fileno() declared correctly...  So let's define u_int */
 | 
				
			||||||
#if defined(VMS) && defined(__DECC) && !defined(__U_INT)
 | 
					#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__U_INT)
 | 
				
			||||||
#define __U_INT
 | 
					#define __U_INT
 | 
				
			||||||
typedef unsigned int u_int;
 | 
					typedef unsigned int u_int;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -80,27 +82,27 @@ typedef unsigned int u_int;
 | 
				
			|||||||
#include <openssl/ssl.h>
 | 
					#include <openssl/ssl.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct hostent *GetHostByName(char *name);
 | 
					static struct hostent *GetHostByName(char *name);
 | 
				
			||||||
#ifdef WINDOWS
 | 
					#ifdef OPENSSL_SYS_WINDOWS
 | 
				
			||||||
static void sock_cleanup(void);
 | 
					static void ssl_sock_cleanup(void);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
static int sock_init(void);
 | 
					static int ssl_sock_init(void);
 | 
				
			||||||
static int init_client_ip(int *sock,unsigned char ip[4], int port);
 | 
					static int init_client_ip(int *sock,unsigned char ip[4], int port);
 | 
				
			||||||
static int init_server(int *sock, int port);
 | 
					static int init_server(int *sock, int port);
 | 
				
			||||||
static int init_server_long(int *sock, int port,char *ip);
 | 
					static int init_server_long(int *sock, int port,char *ip);
 | 
				
			||||||
static int do_accept(int acc_sock, int *sock, char **host);
 | 
					static int do_accept(int acc_sock, int *sock, char **host);
 | 
				
			||||||
static int host_ip(char *str, unsigned char ip[4]);
 | 
					static int host_ip(char *str, unsigned char ip[4]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef WIN16
 | 
					#ifdef OPENSSL_SYS_WIN16
 | 
				
			||||||
#define SOCKET_PROTOCOL	0 /* more microsoft stupidity */
 | 
					#define SOCKET_PROTOCOL	0 /* more microsoft stupidity */
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define SOCKET_PROTOCOL	IPPROTO_TCP
 | 
					#define SOCKET_PROTOCOL	IPPROTO_TCP
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef WINDOWS
 | 
					#ifdef OPENSSL_SYS_WINDOWS
 | 
				
			||||||
static struct WSAData wsa_state;
 | 
					static struct WSAData wsa_state;
 | 
				
			||||||
static int wsa_init_done=0;
 | 
					static int wsa_init_done=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef WIN16
 | 
					#ifdef OPENSSL_SYS_WIN16
 | 
				
			||||||
static HWND topWnd=0;
 | 
					static HWND topWnd=0;
 | 
				
			||||||
static FARPROC lpTopWndProc=NULL;
 | 
					static FARPROC lpTopWndProc=NULL;
 | 
				
			||||||
static FARPROC lpTopHookProc=NULL;
 | 
					static FARPROC lpTopHookProc=NULL;
 | 
				
			||||||
@@ -116,7 +118,7 @@ static LONG FAR PASCAL topHookProc(HWND hwnd, UINT message, WPARAM wParam,
 | 
				
			|||||||
		case WM_DESTROY:
 | 
							case WM_DESTROY:
 | 
				
			||||||
		case WM_CLOSE:
 | 
							case WM_CLOSE:
 | 
				
			||||||
			SetWindowLong(topWnd,GWL_WNDPROC,(LONG)lpTopWndProc);
 | 
								SetWindowLong(topWnd,GWL_WNDPROC,(LONG)lpTopWndProc);
 | 
				
			||||||
			sock_cleanup();
 | 
								ssl_sock_cleanup();
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -129,30 +131,38 @@ static BOOL CALLBACK enumproc(HWND hwnd,LPARAM lParam)
 | 
				
			|||||||
	return(FALSE);
 | 
						return(FALSE);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* WIN32 */
 | 
					#endif /* OPENSSL_SYS_WIN32 */
 | 
				
			||||||
#endif /* WINDOWS */
 | 
					#endif /* OPENSSL_SYS_WINDOWS */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef WINDOWS
 | 
					#ifdef OPENSSL_SYS_WINDOWS
 | 
				
			||||||
static void sock_cleanup(void)
 | 
					static void ssl_sock_cleanup(void)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	if (wsa_init_done)
 | 
						if (wsa_init_done)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		wsa_init_done=0;
 | 
							wsa_init_done=0;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_SYS_WINCE
 | 
				
			||||||
		WSACancelBlockingCall();
 | 
							WSACancelBlockingCall();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		WSACleanup();
 | 
							WSACleanup();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int sock_init(void)
 | 
					static int ssl_sock_init(void)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
#ifdef WINDOWS
 | 
					#ifdef WATT32
 | 
				
			||||||
 | 
						extern int _watt_do_exit;
 | 
				
			||||||
 | 
						_watt_do_exit = 0;
 | 
				
			||||||
 | 
						dbug_init();
 | 
				
			||||||
 | 
						if (sock_init())
 | 
				
			||||||
 | 
							return (0);
 | 
				
			||||||
 | 
					#elif defined(OPENSSL_SYS_WINDOWS)
 | 
				
			||||||
	if (!wsa_init_done)
 | 
						if (!wsa_init_done)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		int err;
 | 
							int err;
 | 
				
			||||||
	  
 | 
						  
 | 
				
			||||||
#ifdef SIGINT
 | 
					#ifdef SIGINT
 | 
				
			||||||
		signal(SIGINT,(void (*)(int))sock_cleanup);
 | 
							signal(SIGINT,(void (*)(int))ssl_sock_cleanup);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		wsa_init_done=1;
 | 
							wsa_init_done=1;
 | 
				
			||||||
		memset(&wsa_state,0,sizeof(wsa_state));
 | 
							memset(&wsa_state,0,sizeof(wsa_state));
 | 
				
			||||||
@@ -163,15 +173,15 @@ static int sock_init(void)
 | 
				
			|||||||
			return(0);
 | 
								return(0);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef WIN16
 | 
					#ifdef OPENSSL_SYS_WIN16
 | 
				
			||||||
		EnumTaskWindows(GetCurrentTask(),enumproc,0L);
 | 
							EnumTaskWindows(GetCurrentTask(),enumproc,0L);
 | 
				
			||||||
		lpTopWndProc=(FARPROC)GetWindowLong(topWnd,GWL_WNDPROC);
 | 
							lpTopWndProc=(FARPROC)GetWindowLong(topWnd,GWL_WNDPROC);
 | 
				
			||||||
		lpTopHookProc=MakeProcInstance((FARPROC)topHookProc,_hInstance);
 | 
							lpTopHookProc=MakeProcInstance((FARPROC)topHookProc,_hInstance);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SetWindowLong(topWnd,GWL_WNDPROC,(LONG)lpTopHookProc);
 | 
							SetWindowLong(topWnd,GWL_WNDPROC,(LONG)lpTopHookProc);
 | 
				
			||||||
#endif /* WIN16 */
 | 
					#endif /* OPENSSL_SYS_WIN16 */
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
#endif /* WINDOWS */
 | 
					#endif /* OPENSSL_SYS_WINDOWS */
 | 
				
			||||||
	return(1);
 | 
						return(1);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -194,7 +204,7 @@ static int init_client_ip(int *sock, unsigned char ip[4], int port)
 | 
				
			|||||||
	struct sockaddr_in them;
 | 
						struct sockaddr_in them;
 | 
				
			||||||
	int s,i;
 | 
						int s,i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!sock_init()) return(0);
 | 
						if (!ssl_sock_init()) return(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memset((char *)&them,0,sizeof(them));
 | 
						memset((char *)&them,0,sizeof(them));
 | 
				
			||||||
	them.sin_family=AF_INET;
 | 
						them.sin_family=AF_INET;
 | 
				
			||||||
@@ -209,7 +219,7 @@ static int init_client_ip(int *sock, unsigned char ip[4], int port)
 | 
				
			|||||||
	s=socket(AF_INET,SOCK_STREAM,SOCKET_PROTOCOL);
 | 
						s=socket(AF_INET,SOCK_STREAM,SOCKET_PROTOCOL);
 | 
				
			||||||
	if (s == INVALID_SOCKET) { perror("socket"); return(0); }
 | 
						if (s == INVALID_SOCKET) { perror("socket"); return(0); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef MPE
 | 
					#ifndef OPENSSL_SYS_MPE
 | 
				
			||||||
	i=0;
 | 
						i=0;
 | 
				
			||||||
	i=setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(char *)&i,sizeof(i));
 | 
						i=setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(char *)&i,sizeof(i));
 | 
				
			||||||
	if (i < 0) { perror("keepalive"); return(0); }
 | 
						if (i < 0) { perror("keepalive"); return(0); }
 | 
				
			||||||
@@ -259,7 +269,7 @@ static int init_server_long(int *sock, int port, char *ip)
 | 
				
			|||||||
	struct sockaddr_in server;
 | 
						struct sockaddr_in server;
 | 
				
			||||||
	int s= -1,i;
 | 
						int s= -1,i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!sock_init()) return(0);
 | 
						if (!ssl_sock_init()) return(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memset((char *)&server,0,sizeof(server));
 | 
						memset((char *)&server,0,sizeof(server));
 | 
				
			||||||
	server.sin_family=AF_INET;
 | 
						server.sin_family=AF_INET;
 | 
				
			||||||
@@ -285,7 +295,7 @@ static int init_server_long(int *sock, int port, char *ip)
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
	if (bind(s,(struct sockaddr *)&server,sizeof(server)) == -1)
 | 
						if (bind(s,(struct sockaddr *)&server,sizeof(server)) == -1)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
#ifndef WINDOWS
 | 
					#ifndef OPENSSL_SYS_WINDOWS
 | 
				
			||||||
		perror("bind");
 | 
							perror("bind");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		goto err;
 | 
							goto err;
 | 
				
			||||||
@@ -316,9 +326,9 @@ static int do_accept(int acc_sock, int *sock, char **host)
 | 
				
			|||||||
	int len;
 | 
						int len;
 | 
				
			||||||
/*	struct linger ling; */
 | 
					/*	struct linger ling; */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!sock_init()) return(0);
 | 
						if (!ssl_sock_init()) return(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef WINDOWS
 | 
					#ifndef OPENSSL_SYS_WINDOWS
 | 
				
			||||||
redoit:
 | 
					redoit:
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -332,7 +342,7 @@ redoit:
 | 
				
			|||||||
	ret=accept(acc_sock,(struct sockaddr *)&from,(void *)&len);
 | 
						ret=accept(acc_sock,(struct sockaddr *)&from,(void *)&len);
 | 
				
			||||||
	if (ret == INVALID_SOCKET)
 | 
						if (ret == INVALID_SOCKET)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
#ifdef WINDOWS
 | 
					#ifdef OPENSSL_SYS_WINDOWS
 | 
				
			||||||
		i=WSAGetLastError();
 | 
							i=WSAGetLastError();
 | 
				
			||||||
		BIO_printf(bio_err,"accept error %d\n",i);
 | 
							BIO_printf(bio_err,"accept error %d\n",i);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
@@ -379,7 +389,7 @@ redoit:
 | 
				
			|||||||
			perror("OPENSSL_malloc");
 | 
								perror("OPENSSL_malloc");
 | 
				
			||||||
			return(0);
 | 
								return(0);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		strcpy(*host,h1->h_name);
 | 
							BUF_strlcpy(*host,h1->h_name,strlen(h1->h_name)+1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		h2=GetHostByName(*host);
 | 
							h2=GetHostByName(*host);
 | 
				
			||||||
		if (h2 == NULL)
 | 
							if (h2 == NULL)
 | 
				
			||||||
@@ -446,7 +456,7 @@ static int host_ip(char *str, unsigned char ip[4])
 | 
				
			|||||||
		{ /* do a gethostbyname */
 | 
							{ /* do a gethostbyname */
 | 
				
			||||||
		struct hostent *he;
 | 
							struct hostent *he;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (!sock_init()) return(0);
 | 
							if (!ssl_sock_init()) return(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		he=GetHostByName(str);
 | 
							he=GetHostByName(str);
 | 
				
			||||||
		if (he == NULL)
 | 
							if (he == NULL)
 | 
				
			||||||
@@ -527,9 +537,12 @@ static struct hostent *GetHostByName(char *name)
 | 
				
			|||||||
		ret=gethostbyname(name);
 | 
							ret=gethostbyname(name);
 | 
				
			||||||
		if (ret == NULL) return(NULL);
 | 
							if (ret == NULL) return(NULL);
 | 
				
			||||||
		/* else add to cache */
 | 
							/* else add to cache */
 | 
				
			||||||
		strncpy(ghbn_cache[lowi].name,name,128);
 | 
							if(strlen(name) < sizeof ghbn_cache[0].name)
 | 
				
			||||||
		memcpy((char *)&(ghbn_cache[lowi].ent),ret,sizeof(struct hostent));
 | 
								{
 | 
				
			||||||
		ghbn_cache[lowi].order=ghbn_miss+ghbn_hits;
 | 
								strcpy(ghbn_cache[lowi].name,name);
 | 
				
			||||||
 | 
								memcpy((char *)&(ghbn_cache[lowi].ent),ret,sizeof(struct hostent));
 | 
				
			||||||
 | 
								ghbn_cache[lowi].order=ghbn_miss+ghbn_hits;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		return(ret);
 | 
							return(ret);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,22 +67,25 @@
 | 
				
			|||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef NO_STDIO
 | 
					#define USE_SOCKETS
 | 
				
			||||||
 | 
					#include "apps.h"
 | 
				
			||||||
 | 
					#ifdef OPENSSL_NO_STDIO
 | 
				
			||||||
#define APPS_WIN16
 | 
					#define APPS_WIN16
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#define USE_SOCKETS
 | 
					 | 
				
			||||||
#include <openssl/x509.h>
 | 
					#include <openssl/x509.h>
 | 
				
			||||||
#include <openssl/ssl.h>
 | 
					#include <openssl/ssl.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include "apps.h"
 | 
					 | 
				
			||||||
#include "s_apps.h"
 | 
					#include "s_apps.h"
 | 
				
			||||||
#include <openssl/err.h>
 | 
					#include <openssl/err.h>
 | 
				
			||||||
#ifdef WIN32_STUFF
 | 
					#ifdef WIN32_STUFF
 | 
				
			||||||
#include "winmain.h"
 | 
					#include "winmain.h"
 | 
				
			||||||
#include "wintext.h"
 | 
					#include "wintext.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#if !defined(OPENSSL_SYS_MSDOS)
 | 
				
			||||||
 | 
					#include OPENSSL_UNISTD
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(MSDOS) && (!defined(VMS) || defined(__DECC))
 | 
					#if !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VXWORKS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC))
 | 
				
			||||||
#define TIMES
 | 
					#define TIMES
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -98,18 +101,14 @@
 | 
				
			|||||||
   The __TMS macro will show if it was.  If it wasn't defined, we should
 | 
					   The __TMS macro will show if it was.  If it wasn't defined, we should
 | 
				
			||||||
   undefine TIMES, since that tells the rest of the program how things
 | 
					   undefine TIMES, since that tells the rest of the program how things
 | 
				
			||||||
   should be handled.				-- Richard Levitte */
 | 
					   should be handled.				-- Richard Levitte */
 | 
				
			||||||
#if defined(VMS) && defined(__DECC) && !defined(__TMS)
 | 
					#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__TMS)
 | 
				
			||||||
#undef TIMES
 | 
					#undef TIMES
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef TIMES
 | 
					#if !defined(TIMES) && !defined(OPENSSL_SYS_VXWORKS)
 | 
				
			||||||
#include <sys/timeb.h>
 | 
					#include <sys/timeb.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef _AIX
 | 
					 | 
				
			||||||
#include <sys/select.h>
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if defined(sun) || defined(__ultrix)
 | 
					#if defined(sun) || defined(__ultrix)
 | 
				
			||||||
#define _POSIX_SOURCE
 | 
					#define _POSIX_SOURCE
 | 
				
			||||||
#include <limits.h>
 | 
					#include <limits.h>
 | 
				
			||||||
@@ -119,11 +118,19 @@
 | 
				
			|||||||
/* The following if from times(3) man page.  It may need to be changed
 | 
					/* The following if from times(3) man page.  It may need to be changed
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
#ifndef HZ
 | 
					#ifndef HZ
 | 
				
			||||||
#ifndef CLK_TCK
 | 
					# ifdef _SC_CLK_TCK
 | 
				
			||||||
#define HZ      100.0
 | 
					#  define HZ ((double)sysconf(_SC_CLK_TCK))
 | 
				
			||||||
#else /* CLK_TCK */
 | 
					# else
 | 
				
			||||||
#define HZ ((double)CLK_TCK)
 | 
					#  ifndef CLK_TCK
 | 
				
			||||||
#endif
 | 
					#   ifndef _BSD_CLK_TCK_ /* FreeBSD hack */
 | 
				
			||||||
 | 
					#    define HZ	100.0
 | 
				
			||||||
 | 
					#   else /* _BSD_CLK_TCK_ */
 | 
				
			||||||
 | 
					#    define HZ ((double)_BSD_CLK_TCK_)
 | 
				
			||||||
 | 
					#   endif
 | 
				
			||||||
 | 
					#  else /* CLK_TCK */
 | 
				
			||||||
 | 
					#   define HZ ((double)CLK_TCK)
 | 
				
			||||||
 | 
					#  endif
 | 
				
			||||||
 | 
					# endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef PROG
 | 
					#undef PROG
 | 
				
			||||||
@@ -139,6 +146,10 @@
 | 
				
			|||||||
#undef BUFSIZZ
 | 
					#undef BUFSIZZ
 | 
				
			||||||
#define BUFSIZZ 1024*10
 | 
					#define BUFSIZZ 1024*10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MYBUFSIZ 1024*8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#undef min
 | 
				
			||||||
 | 
					#undef max
 | 
				
			||||||
#define min(a,b) (((a) < (b)) ? (a) : (b))
 | 
					#define min(a,b) (((a) < (b)) ? (a) : (b))
 | 
				
			||||||
#define max(a,b) (((a) > (b)) ? (a) : (b))
 | 
					#define max(a,b) (((a) > (b)) ? (a) : (b))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -174,7 +185,7 @@ static int perform=0;
 | 
				
			|||||||
#ifdef FIONBIO
 | 
					#ifdef FIONBIO
 | 
				
			||||||
static int t_nbio=0;
 | 
					static int t_nbio=0;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifdef WIN32
 | 
					#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
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -198,7 +209,7 @@ static void s_time_init(void)
 | 
				
			|||||||
#ifdef FIONBIO
 | 
					#ifdef FIONBIO
 | 
				
			||||||
	t_nbio=0;
 | 
						t_nbio=0;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifdef WIN32
 | 
					#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
 | 
					#endif
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -311,14 +322,19 @@ static int parseArgs(int argc, char **argv)
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
		if (--argc < 1) goto bad;
 | 
							if (--argc < 1) goto bad;
 | 
				
			||||||
		s_www_path= *(++argv);
 | 
							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)
 | 
						else if(strcmp(*argv,"-bugs") == 0)
 | 
				
			||||||
	    st_bugs=1;
 | 
						    st_bugs=1;
 | 
				
			||||||
#ifndef NO_SSL2
 | 
					#ifndef OPENSSL_NO_SSL2
 | 
				
			||||||
	else if(strcmp(*argv,"-ssl2") == 0)
 | 
						else if(strcmp(*argv,"-ssl2") == 0)
 | 
				
			||||||
	    s_time_meth=SSLv2_client_method();
 | 
						    s_time_meth=SSLv2_client_method();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_SSL3
 | 
					#ifndef OPENSSL_NO_SSL3
 | 
				
			||||||
	else if(strcmp(*argv,"-ssl3") == 0)
 | 
						else if(strcmp(*argv,"-ssl3") == 0)
 | 
				
			||||||
	    s_time_meth=SSLv3_client_method();
 | 
						    s_time_meth=SSLv3_client_method();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -368,6 +384,22 @@ static double tm_Time_F(int s)
 | 
				
			|||||||
		ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
 | 
							ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
 | 
				
			||||||
		return((ret == 0.0)?1e-6:ret);
 | 
							return((ret == 0.0)?1e-6:ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					#elif defined(OPENSSL_SYS_VXWORKS)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
						static unsigned long tick_start, tick_end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if( s == START )
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							tick_start = tickGet();
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							tick_end = tickGet();
 | 
				
			||||||
 | 
							ret = (double)(tick_end - tick_start) / (double)sysClkRateGet();
 | 
				
			||||||
 | 
							return((ret == 0.0)?1e-6:ret);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
#else /* !times() */
 | 
					#else /* !times() */
 | 
				
			||||||
	static struct timeb tstart,tend;
 | 
						static struct timeb tstart,tend;
 | 
				
			||||||
	long i;
 | 
						long i;
 | 
				
			||||||
@@ -406,11 +438,11 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	if (bio_err == NULL)
 | 
						if (bio_err == NULL)
 | 
				
			||||||
		bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
							bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(NO_SSL2) && !defined(NO_SSL3)
 | 
					#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
 | 
				
			||||||
	s_time_meth=SSLv23_client_method();
 | 
						s_time_meth=SSLv23_client_method();
 | 
				
			||||||
#elif !defined(NO_SSL3)
 | 
					#elif !defined(OPENSSL_NO_SSL3)
 | 
				
			||||||
	s_time_meth=SSLv3_client_method();
 | 
						s_time_meth=SSLv3_client_method();
 | 
				
			||||||
#elif !defined(NO_SSL2)
 | 
					#elif !defined(OPENSSL_NO_SSL2)
 | 
				
			||||||
	s_time_meth=SSLv2_client_method();
 | 
						s_time_meth=SSLv2_client_method();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -443,7 +475,6 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (tm_cipher == NULL ) {
 | 
						if (tm_cipher == NULL ) {
 | 
				
			||||||
		fprintf( stderr, "No CIPHER specified\n" );
 | 
							fprintf( stderr, "No CIPHER specified\n" );
 | 
				
			||||||
/*		EXIT(1); */
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!(perform & 1)) goto next;
 | 
						if (!(perform & 1)) goto next;
 | 
				
			||||||
@@ -456,7 +487,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	tm_Time_F(START);
 | 
						tm_Time_F(START);
 | 
				
			||||||
	for (;;)
 | 
						for (;;)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		if (finishtime < time(NULL)) break;
 | 
							if (finishtime < (long)time(NULL)) break;
 | 
				
			||||||
#ifdef WIN32_STUFF
 | 
					#ifdef WIN32_STUFF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if( flushWinMsgs(0) == -1 )
 | 
							if( flushWinMsgs(0) == -1 )
 | 
				
			||||||
@@ -471,7 +502,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if (s_www_path != NULL)
 | 
							if (s_www_path != NULL)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			sprintf(buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
								BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
				
			||||||
			SSL_write(scon,buf,strlen(buf));
 | 
								SSL_write(scon,buf,strlen(buf));
 | 
				
			||||||
			while ((i=SSL_read(scon,buf,sizeof(buf))) > 0)
 | 
								while ((i=SSL_read(scon,buf,sizeof(buf))) > 0)
 | 
				
			||||||
				bytes_read+=i;
 | 
									bytes_read+=i;
 | 
				
			||||||
@@ -507,9 +538,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	totalTime += tm_Time_F(STOP); /* Add the time for this iteration */
 | 
						totalTime += tm_Time_F(STOP); /* Add the time for this iteration */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	i=(int)(time(NULL)-finishtime+maxTime);
 | 
						i=(int)((long)time(NULL)-finishtime+maxTime);
 | 
				
			||||||
	printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read);
 | 
						printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read);
 | 
				
			||||||
	printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,time(NULL)-finishtime+maxTime,bytes_read/nConn);
 | 
						printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Now loop and time connections using the same session id over and over */
 | 
						/* Now loop and time connections using the same session id over and over */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -526,7 +557,7 @@ next:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (s_www_path != NULL)
 | 
						if (s_www_path != NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		sprintf(buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
							BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
				
			||||||
		SSL_write(scon,buf,strlen(buf));
 | 
							SSL_write(scon,buf,strlen(buf));
 | 
				
			||||||
		while (SSL_read(scon,buf,sizeof(buf)) > 0)
 | 
							while (SSL_read(scon,buf,sizeof(buf)) > 0)
 | 
				
			||||||
			;
 | 
								;
 | 
				
			||||||
@@ -541,7 +572,7 @@ next:
 | 
				
			|||||||
	nConn = 0;
 | 
						nConn = 0;
 | 
				
			||||||
	totalTime = 0.0;
 | 
						totalTime = 0.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	finishtime=time(NULL)+maxTime;
 | 
						finishtime=(long)time(NULL)+maxTime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	printf( "starting\n" );
 | 
						printf( "starting\n" );
 | 
				
			||||||
	bytes_read=0;
 | 
						bytes_read=0;
 | 
				
			||||||
@@ -549,7 +580,7 @@ next:
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
	for (;;)
 | 
						for (;;)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		if (finishtime < time(NULL)) break;
 | 
							if (finishtime < (long)time(NULL)) break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef WIN32_STUFF
 | 
					#ifdef WIN32_STUFF
 | 
				
			||||||
		if( flushWinMsgs(0) == -1 )
 | 
							if( flushWinMsgs(0) == -1 )
 | 
				
			||||||
@@ -564,7 +595,7 @@ next:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if (s_www_path)
 | 
							if (s_www_path)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			sprintf(buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
								BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
 | 
				
			||||||
			SSL_write(scon,buf,strlen(buf));
 | 
								SSL_write(scon,buf,strlen(buf));
 | 
				
			||||||
			while ((i=SSL_read(scon,buf,sizeof(buf))) > 0)
 | 
								while ((i=SSL_read(scon,buf,sizeof(buf))) > 0)
 | 
				
			||||||
				bytes_read+=i;
 | 
									bytes_read+=i;
 | 
				
			||||||
@@ -599,7 +630,7 @@ next:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read);
 | 
						printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read);
 | 
				
			||||||
	printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,time(NULL)-finishtime+maxTime,bytes_read/nConn);
 | 
						printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret=0;
 | 
						ret=0;
 | 
				
			||||||
end:
 | 
					end:
 | 
				
			||||||
@@ -610,7 +641,8 @@ end:
 | 
				
			|||||||
		SSL_CTX_free(tm_ctx);
 | 
							SSL_CTX_free(tm_ctx);
 | 
				
			||||||
		tm_ctx=NULL;
 | 
							tm_ctx=NULL;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/***********************************************************************
 | 
					/***********************************************************************
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -156,7 +156,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
bad:
 | 
					bad:
 | 
				
			||||||
		for (pp=sess_id_usage; (*pp != NULL); pp++)
 | 
							for (pp=sess_id_usage; (*pp != NULL); pp++)
 | 
				
			||||||
			BIO_printf(bio_err,*pp);
 | 
								BIO_printf(bio_err,"%s",*pp);
 | 
				
			||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -208,7 +208,7 @@ bad:
 | 
				
			|||||||
		if (outfile == NULL)
 | 
							if (outfile == NULL)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
								BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
								BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
			out = BIO_push(tmpbio, out);
 | 
								out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -272,7 +272,8 @@ bad:
 | 
				
			|||||||
end:
 | 
					end:
 | 
				
			||||||
	if (out != NULL) BIO_free_all(out);
 | 
						if (out != NULL) BIO_free_all(out);
 | 
				
			||||||
	if (x != NULL) SSL_SESSION_free(x);
 | 
						if (x != NULL) SSL_SESSION_free(x);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static SSL_SESSION *load_sess_id(char *infile, int format)
 | 
					static SSL_SESSION *load_sess_id(char *infile, int format)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										153
									
								
								apps/smime.c
									
									
									
									
									
								
							
							
						
						
									
										153
									
								
								apps/smime.c
									
									
									
									
									
								
							@@ -64,11 +64,9 @@
 | 
				
			|||||||
#include <openssl/crypto.h>
 | 
					#include <openssl/crypto.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/err.h>
 | 
					#include <openssl/err.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef PROG
 | 
					#undef PROG
 | 
				
			||||||
#define PROG smime_main
 | 
					#define PROG smime_main
 | 
				
			||||||
static X509_STORE *setup_verify(char *CAfile, char *CApath);
 | 
					 | 
				
			||||||
static int save_certs(char *signerfile, STACK_OF(X509) *signers);
 | 
					static int save_certs(char *signerfile, STACK_OF(X509) *signers);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define SMIME_OP	0x10
 | 
					#define SMIME_OP	0x10
 | 
				
			||||||
@@ -90,7 +88,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	char *infile = NULL, *outfile = NULL;
 | 
						char *infile = NULL, *outfile = NULL;
 | 
				
			||||||
	char *signerfile = NULL, *recipfile = NULL;
 | 
						char *signerfile = NULL, *recipfile = NULL;
 | 
				
			||||||
	char *certfile = NULL, *keyfile = NULL, *contfile=NULL;
 | 
						char *certfile = NULL, *keyfile = NULL, *contfile=NULL;
 | 
				
			||||||
	EVP_CIPHER *cipher = NULL;
 | 
						const EVP_CIPHER *cipher = NULL;
 | 
				
			||||||
	PKCS7 *p7 = NULL;
 | 
						PKCS7 *p7 = NULL;
 | 
				
			||||||
	X509_STORE *store = NULL;
 | 
						X509_STORE *store = NULL;
 | 
				
			||||||
	X509 *cert = NULL, *recip = NULL, *signer = NULL;
 | 
						X509 *cert = NULL, *recip = NULL, *signer = NULL;
 | 
				
			||||||
@@ -98,37 +96,57 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	STACK_OF(X509) *encerts = NULL, *other = NULL;
 | 
						STACK_OF(X509) *encerts = NULL, *other = NULL;
 | 
				
			||||||
	BIO *in = NULL, *out = NULL, *indata = NULL;
 | 
						BIO *in = NULL, *out = NULL, *indata = NULL;
 | 
				
			||||||
	int badarg = 0;
 | 
						int badarg = 0;
 | 
				
			||||||
	int flags = PKCS7_DETACHED;
 | 
						int flags = PKCS7_DETACHED, store_flags = 0;
 | 
				
			||||||
	char *to = NULL, *from = NULL, *subject = NULL;
 | 
						char *to = NULL, *from = NULL, *subject = NULL;
 | 
				
			||||||
	char *CAfile = NULL, *CApath = NULL;
 | 
						char *CAfile = NULL, *CApath = NULL;
 | 
				
			||||||
	char *passargin = NULL, *passin = NULL;
 | 
						char *passargin = NULL, *passin = NULL;
 | 
				
			||||||
	char *inrand = NULL;
 | 
						char *inrand = NULL;
 | 
				
			||||||
	int need_rand = 0;
 | 
						int need_rand = 0;
 | 
				
			||||||
	int informat = FORMAT_SMIME, outformat = FORMAT_SMIME;
 | 
						int informat = FORMAT_SMIME, outformat = FORMAT_SMIME;
 | 
				
			||||||
 | 
					        int keyform = FORMAT_PEM;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	char *engine=NULL;
 | 
						char *engine=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	args = argv + 1;
 | 
						args = argv + 1;
 | 
				
			||||||
	ret = 1;
 | 
						ret = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						apps_startup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (bio_err == NULL)
 | 
				
			||||||
 | 
							if ((bio_err = BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
 | 
								BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while (!badarg && *args && *args[0] == '-') {
 | 
						while (!badarg && *args && *args[0] == '-') {
 | 
				
			||||||
		if (!strcmp (*args, "-encrypt")) operation = SMIME_ENCRYPT;
 | 
							if (!strcmp (*args, "-encrypt")) operation = SMIME_ENCRYPT;
 | 
				
			||||||
		else if (!strcmp (*args, "-decrypt")) operation = SMIME_DECRYPT;
 | 
							else if (!strcmp (*args, "-decrypt")) operation = SMIME_DECRYPT;
 | 
				
			||||||
		else if (!strcmp (*args, "-sign")) operation = SMIME_SIGN;
 | 
							else if (!strcmp (*args, "-sign")) operation = SMIME_SIGN;
 | 
				
			||||||
		else if (!strcmp (*args, "-verify")) operation = SMIME_VERIFY;
 | 
							else if (!strcmp (*args, "-verify")) operation = SMIME_VERIFY;
 | 
				
			||||||
		else if (!strcmp (*args, "-pk7out")) operation = SMIME_PK7OUT;
 | 
							else if (!strcmp (*args, "-pk7out")) operation = SMIME_PK7OUT;
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
		else if (!strcmp (*args, "-des3")) 
 | 
							else if (!strcmp (*args, "-des3")) 
 | 
				
			||||||
				cipher = EVP_des_ede3_cbc();
 | 
									cipher = EVP_des_ede3_cbc();
 | 
				
			||||||
		else if (!strcmp (*args, "-des")) 
 | 
							else if (!strcmp (*args, "-des")) 
 | 
				
			||||||
				cipher = EVP_des_cbc();
 | 
									cipher = EVP_des_cbc();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC2
 | 
					#ifndef OPENSSL_NO_RC2
 | 
				
			||||||
		else if (!strcmp (*args, "-rc2-40")) 
 | 
							else if (!strcmp (*args, "-rc2-40")) 
 | 
				
			||||||
				cipher = EVP_rc2_40_cbc();
 | 
									cipher = EVP_rc2_40_cbc();
 | 
				
			||||||
		else if (!strcmp (*args, "-rc2-128")) 
 | 
							else if (!strcmp (*args, "-rc2-128")) 
 | 
				
			||||||
				cipher = EVP_rc2_cbc();
 | 
									cipher = EVP_rc2_cbc();
 | 
				
			||||||
		else if (!strcmp (*args, "-rc2-64")) 
 | 
							else if (!strcmp (*args, "-rc2-64")) 
 | 
				
			||||||
				cipher = EVP_rc2_64_cbc();
 | 
									cipher = EVP_rc2_64_cbc();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_AES
 | 
				
			||||||
 | 
							else if (!strcmp(*args,"-aes128"))
 | 
				
			||||||
 | 
									cipher = EVP_aes_128_cbc();
 | 
				
			||||||
 | 
							else if (!strcmp(*args,"-aes192"))
 | 
				
			||||||
 | 
									cipher = EVP_aes_192_cbc();
 | 
				
			||||||
 | 
							else if (!strcmp(*args,"-aes256"))
 | 
				
			||||||
 | 
									cipher = EVP_aes_256_cbc();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		else if (!strcmp (*args, "-text")) 
 | 
							else if (!strcmp (*args, "-text")) 
 | 
				
			||||||
				flags |= PKCS7_TEXT;
 | 
									flags |= PKCS7_TEXT;
 | 
				
			||||||
@@ -150,17 +168,27 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
				flags |= PKCS7_BINARY;
 | 
									flags |= PKCS7_BINARY;
 | 
				
			||||||
		else if (!strcmp (*args, "-nosigs"))
 | 
							else if (!strcmp (*args, "-nosigs"))
 | 
				
			||||||
				flags |= PKCS7_NOSIGS;
 | 
									flags |= PKCS7_NOSIGS;
 | 
				
			||||||
 | 
							else if (!strcmp (*args, "-nooldmime"))
 | 
				
			||||||
 | 
									flags |= PKCS7_NOOLDMIMETYPE;
 | 
				
			||||||
 | 
							else if (!strcmp (*args, "-crlfeol"))
 | 
				
			||||||
 | 
									flags |= PKCS7_CRLFEOL;
 | 
				
			||||||
 | 
							else if (!strcmp (*args, "-crl_check"))
 | 
				
			||||||
 | 
									store_flags |= X509_V_FLAG_CRL_CHECK;
 | 
				
			||||||
 | 
							else if (!strcmp (*args, "-crl_check_all"))
 | 
				
			||||||
 | 
									store_flags |= X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL;
 | 
				
			||||||
		else if (!strcmp(*args,"-rand")) {
 | 
							else if (!strcmp(*args,"-rand")) {
 | 
				
			||||||
			if (args[1]) {
 | 
								if (args[1]) {
 | 
				
			||||||
				args++;
 | 
									args++;
 | 
				
			||||||
				inrand = *args;
 | 
									inrand = *args;
 | 
				
			||||||
			} else badarg = 1;
 | 
								} else badarg = 1;
 | 
				
			||||||
			need_rand = 1;
 | 
								need_rand = 1;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		} else if (!strcmp(*args,"-engine")) {
 | 
							} else if (!strcmp(*args,"-engine")) {
 | 
				
			||||||
			if (args[1]) {
 | 
								if (args[1]) {
 | 
				
			||||||
				args++;
 | 
									args++;
 | 
				
			||||||
				engine = *args;
 | 
									engine = *args;
 | 
				
			||||||
			} else badarg = 1;
 | 
								} else badarg = 1;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		} else if (!strcmp(*args,"-passin")) {
 | 
							} else if (!strcmp(*args,"-passin")) {
 | 
				
			||||||
			if (args[1]) {
 | 
								if (args[1]) {
 | 
				
			||||||
				args++;
 | 
									args++;
 | 
				
			||||||
@@ -196,6 +224,11 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
				args++;
 | 
									args++;
 | 
				
			||||||
				keyfile = *args;
 | 
									keyfile = *args;
 | 
				
			||||||
			} else badarg = 1;
 | 
								} else badarg = 1;
 | 
				
			||||||
 | 
							} else if (!strcmp (*args, "-keyform")) {
 | 
				
			||||||
 | 
								if (args[1]) {
 | 
				
			||||||
 | 
									args++;
 | 
				
			||||||
 | 
									keyform = str2fmt(*args);
 | 
				
			||||||
 | 
								} else badarg = 1;
 | 
				
			||||||
		} else if (!strcmp (*args, "-certfile")) {
 | 
							} else if (!strcmp (*args, "-certfile")) {
 | 
				
			||||||
			if (args[1]) {
 | 
								if (args[1]) {
 | 
				
			||||||
				args++;
 | 
									args++;
 | 
				
			||||||
@@ -267,14 +300,18 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		BIO_printf (bio_err, "-sign          sign message\n");
 | 
							BIO_printf (bio_err, "-sign          sign message\n");
 | 
				
			||||||
		BIO_printf (bio_err, "-verify        verify signed message\n");
 | 
							BIO_printf (bio_err, "-verify        verify signed message\n");
 | 
				
			||||||
		BIO_printf (bio_err, "-pk7out        output PKCS#7 structure\n");
 | 
							BIO_printf (bio_err, "-pk7out        output PKCS#7 structure\n");
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
		BIO_printf (bio_err, "-des3          encrypt with triple DES\n");
 | 
							BIO_printf (bio_err, "-des3          encrypt with triple DES\n");
 | 
				
			||||||
		BIO_printf (bio_err, "-des           encrypt with DES\n");
 | 
							BIO_printf (bio_err, "-des           encrypt with DES\n");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC2
 | 
					#ifndef OPENSSL_NO_RC2
 | 
				
			||||||
		BIO_printf (bio_err, "-rc2-40        encrypt with RC2-40 (default)\n");
 | 
							BIO_printf (bio_err, "-rc2-40        encrypt with RC2-40 (default)\n");
 | 
				
			||||||
		BIO_printf (bio_err, "-rc2-64        encrypt with RC2-64\n");
 | 
							BIO_printf (bio_err, "-rc2-64        encrypt with RC2-64\n");
 | 
				
			||||||
		BIO_printf (bio_err, "-rc2-128       encrypt with RC2-128\n");
 | 
							BIO_printf (bio_err, "-rc2-128       encrypt with RC2-128\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
 | 
					#endif
 | 
				
			||||||
		BIO_printf (bio_err, "-nointern      don't search certificates in message for signer\n");
 | 
							BIO_printf (bio_err, "-nointern      don't search certificates in message for signer\n");
 | 
				
			||||||
		BIO_printf (bio_err, "-nosigs        don't verify message signature\n");
 | 
							BIO_printf (bio_err, "-nosigs        don't verify message signature\n");
 | 
				
			||||||
@@ -289,6 +326,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		BIO_printf (bio_err, "-in file       input file\n");
 | 
							BIO_printf (bio_err, "-in file       input file\n");
 | 
				
			||||||
		BIO_printf (bio_err, "-inform arg    input format SMIME (default), PEM or DER\n");
 | 
							BIO_printf (bio_err, "-inform arg    input format SMIME (default), PEM or DER\n");
 | 
				
			||||||
		BIO_printf (bio_err, "-inkey file    input private key (if not signer or recipient)\n");
 | 
							BIO_printf (bio_err, "-inkey file    input private key (if not signer or recipient)\n");
 | 
				
			||||||
 | 
							BIO_printf (bio_err, "-keyform arg   input private key format (PEM or ENGINE)\n");
 | 
				
			||||||
		BIO_printf (bio_err, "-out file      output file\n");
 | 
							BIO_printf (bio_err, "-out file      output file\n");
 | 
				
			||||||
		BIO_printf (bio_err, "-outform arg   output format SMIME (default), PEM or DER\n");
 | 
							BIO_printf (bio_err, "-outform arg   output format SMIME (default), PEM or DER\n");
 | 
				
			||||||
		BIO_printf (bio_err, "-content file  supply or override content for detached signature\n");
 | 
							BIO_printf (bio_err, "-content file  supply or override content for detached signature\n");
 | 
				
			||||||
@@ -298,7 +336,11 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		BIO_printf (bio_err, "-text          include or delete text MIME headers\n");
 | 
							BIO_printf (bio_err, "-text          include or delete text MIME headers\n");
 | 
				
			||||||
		BIO_printf (bio_err, "-CApath dir    trusted certificates directory\n");
 | 
							BIO_printf (bio_err, "-CApath dir    trusted certificates directory\n");
 | 
				
			||||||
		BIO_printf (bio_err, "-CAfile file   trusted certificates file\n");
 | 
							BIO_printf (bio_err, "-CAfile file   trusted certificates file\n");
 | 
				
			||||||
 | 
							BIO_printf (bio_err, "-crl_check     check revocation status of signer's certificate using CRLs\n");
 | 
				
			||||||
 | 
							BIO_printf (bio_err, "-crl_check_all check revocation status of signer's certificate chain using CRLs\n");
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		BIO_printf (bio_err, "-engine e      use engine e, possibly a hardware device.\n");
 | 
							BIO_printf (bio_err, "-engine e      use engine e, possibly a hardware device.\n");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		BIO_printf (bio_err, "-passin arg    input file pass phrase source\n");
 | 
							BIO_printf (bio_err, "-passin arg    input file pass phrase source\n");
 | 
				
			||||||
		BIO_printf(bio_err,  "-rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
 | 
							BIO_printf(bio_err,  "-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,  "               load the file (or the files in the directory) into\n");
 | 
				
			||||||
@@ -307,23 +349,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
					 | 
				
			||||||
				engine);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
 | 
						if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
 | 
				
			||||||
		BIO_printf(bio_err, "Error getting password\n");
 | 
							BIO_printf(bio_err, "Error getting password\n");
 | 
				
			||||||
@@ -351,7 +379,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if(operation == SMIME_ENCRYPT) {
 | 
						if(operation == SMIME_ENCRYPT) {
 | 
				
			||||||
		if (!cipher) {
 | 
							if (!cipher) {
 | 
				
			||||||
#ifndef NO_RC2			
 | 
					#ifndef OPENSSL_NO_RC2			
 | 
				
			||||||
			cipher = EVP_rc2_40_cbc();
 | 
								cipher = EVP_rc2_40_cbc();
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
			BIO_printf(bio_err, "No cipher selected\n");
 | 
								BIO_printf(bio_err, "No cipher selected\n");
 | 
				
			||||||
@@ -360,8 +388,11 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		encerts = sk_X509_new_null();
 | 
							encerts = sk_X509_new_null();
 | 
				
			||||||
		while (*args) {
 | 
							while (*args) {
 | 
				
			||||||
			if(!(cert = load_cert(bio_err,*args,FORMAT_PEM))) {
 | 
								if(!(cert = load_cert(bio_err,*args,FORMAT_PEM,
 | 
				
			||||||
 | 
									NULL, e, "recipient certificate file"))) {
 | 
				
			||||||
 | 
					#if 0				/* An appropriate message is already printed */
 | 
				
			||||||
				BIO_printf(bio_err, "Can't read recipient certificate file %s\n", *args);
 | 
									BIO_printf(bio_err, "Can't read recipient certificate file %s\n", *args);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
				goto end;
 | 
									goto end;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			sk_X509_push(encerts, cert);
 | 
								sk_X509_push(encerts, cert);
 | 
				
			||||||
@@ -371,23 +402,32 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(signerfile && (operation == SMIME_SIGN)) {
 | 
						if(signerfile && (operation == SMIME_SIGN)) {
 | 
				
			||||||
		if(!(signer = load_cert(bio_err,signerfile,FORMAT_PEM))) {
 | 
							if(!(signer = load_cert(bio_err,signerfile,FORMAT_PEM, NULL,
 | 
				
			||||||
 | 
								e, "signer certificate"))) {
 | 
				
			||||||
 | 
					#if 0			/* An appropri message has already been printed */
 | 
				
			||||||
			BIO_printf(bio_err, "Can't read signer certificate file %s\n", signerfile);
 | 
								BIO_printf(bio_err, "Can't read signer certificate file %s\n", signerfile);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
			goto end;
 | 
								goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(certfile) {
 | 
						if(certfile) {
 | 
				
			||||||
		if(!(other = load_certs(bio_err,certfile,FORMAT_PEM))) {
 | 
							if(!(other = load_certs(bio_err,certfile,FORMAT_PEM, NULL,
 | 
				
			||||||
 | 
								e, "certificate file"))) {
 | 
				
			||||||
 | 
					#if 0			/* An appropriate message has already been printed */
 | 
				
			||||||
			BIO_printf(bio_err, "Can't read certificate file %s\n", certfile);
 | 
								BIO_printf(bio_err, "Can't read certificate file %s\n", certfile);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
								ERR_print_errors(bio_err);
 | 
				
			||||||
			goto end;
 | 
								goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(recipfile && (operation == SMIME_DECRYPT)) {
 | 
						if(recipfile && (operation == SMIME_DECRYPT)) {
 | 
				
			||||||
		if(!(recip = load_cert(bio_err,recipfile,FORMAT_PEM))) {
 | 
							if(!(recip = load_cert(bio_err,recipfile,FORMAT_PEM,NULL,
 | 
				
			||||||
 | 
								e, "recipient certificate file"))) {
 | 
				
			||||||
 | 
					#if 0			/* An appropriate message has alrady been printed */
 | 
				
			||||||
			BIO_printf(bio_err, "Can't read recipient certificate file %s\n", recipfile);
 | 
								BIO_printf(bio_err, "Can't read recipient certificate file %s\n", recipfile);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
								ERR_print_errors(bio_err);
 | 
				
			||||||
			goto end;
 | 
								goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -400,11 +440,11 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	} else keyfile = NULL;
 | 
						} else keyfile = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(keyfile) {
 | 
						if(keyfile) {
 | 
				
			||||||
		if(!(key = load_key(bio_err,keyfile, FORMAT_PEM, passin))) {
 | 
							key = load_key(bio_err, keyfile, keyform, 0, passin, e,
 | 
				
			||||||
			BIO_printf(bio_err, "Can't read recipient certificate file %s\n", keyfile);
 | 
								       "signing key file");
 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
							if (!key) {
 | 
				
			||||||
			goto end;
 | 
								goto end;
 | 
				
			||||||
		}
 | 
					                }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (infile) {
 | 
						if (infile) {
 | 
				
			||||||
@@ -423,7 +463,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
							out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		    out = BIO_push(tmpbio, out);
 | 
							    out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -432,16 +472,21 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(operation == SMIME_VERIFY) {
 | 
						if(operation == SMIME_VERIFY) {
 | 
				
			||||||
		if(!(store = setup_verify(CAfile, CApath))) goto end;
 | 
							if(!(store = setup_verify(bio_err, CAfile, CApath))) goto end;
 | 
				
			||||||
 | 
							X509_STORE_set_flags(store, store_flags);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = 3;
 | 
						ret = 3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(operation == SMIME_ENCRYPT) {
 | 
						if(operation == SMIME_ENCRYPT) {
 | 
				
			||||||
		p7 = PKCS7_encrypt(encerts, in, cipher, flags);
 | 
							p7 = PKCS7_encrypt(encerts, in, cipher, flags);
 | 
				
			||||||
	} else if(operation == SMIME_SIGN) {
 | 
						} else if(operation == SMIME_SIGN) {
 | 
				
			||||||
		p7 = PKCS7_sign(signer, key, other, in, flags);
 | 
							p7 = PKCS7_sign(signer, key, other, in, flags);
 | 
				
			||||||
		BIO_reset(in);
 | 
							if (BIO_reset(in) != 0 && (flags & PKCS7_DETACHED)) {
 | 
				
			||||||
 | 
							  BIO_printf(bio_err, "Can't rewind input file\n");
 | 
				
			||||||
 | 
							  goto end;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		if(informat == FORMAT_SMIME) 
 | 
							if(informat == FORMAT_SMIME) 
 | 
				
			||||||
			p7 = SMIME_read_PKCS7(in, &indata);
 | 
								p7 = SMIME_read_PKCS7(in, &indata);
 | 
				
			||||||
@@ -481,9 +526,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	} else if(operation == SMIME_VERIFY) {
 | 
						} else if(operation == SMIME_VERIFY) {
 | 
				
			||||||
		STACK_OF(X509) *signers;
 | 
							STACK_OF(X509) *signers;
 | 
				
			||||||
		if(PKCS7_verify(p7, other, store, indata, out, flags)) {
 | 
							if(PKCS7_verify(p7, other, store, indata, out, flags)) {
 | 
				
			||||||
			BIO_printf(bio_err, "Verification Successful\n");
 | 
								BIO_printf(bio_err, "Verification successful\n");
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			BIO_printf(bio_err, "Verification Failure\n");
 | 
								BIO_printf(bio_err, "Verification failure\n");
 | 
				
			||||||
			goto end;
 | 
								goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		signers = PKCS7_get0_signers(p7, other, flags);
 | 
							signers = PKCS7_get0_signers(p7, other, flags);
 | 
				
			||||||
@@ -531,36 +576,6 @@ end:
 | 
				
			|||||||
	return (ret);
 | 
						return (ret);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static X509_STORE *setup_verify(char *CAfile, char *CApath)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	X509_STORE *store;
 | 
					 | 
				
			||||||
	X509_LOOKUP *lookup;
 | 
					 | 
				
			||||||
	if(!(store = X509_STORE_new())) goto end;
 | 
					 | 
				
			||||||
	lookup=X509_STORE_add_lookup(store,X509_LOOKUP_file());
 | 
					 | 
				
			||||||
	if (lookup == NULL) goto end;
 | 
					 | 
				
			||||||
	if (CAfile) {
 | 
					 | 
				
			||||||
		if(!X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM)) {
 | 
					 | 
				
			||||||
			BIO_printf(bio_err, "Error loading file %s\n", CAfile);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	} else 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 (CApath) {
 | 
					 | 
				
			||||||
		if(!X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM)) {
 | 
					 | 
				
			||||||
			BIO_printf(bio_err, "Error loading directory %s\n", CApath);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	} else X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ERR_clear_error();
 | 
					 | 
				
			||||||
	return store;
 | 
					 | 
				
			||||||
	end:
 | 
					 | 
				
			||||||
	X509_STORE_free(store);
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int save_certs(char *signerfile, STACK_OF(X509) *signers)
 | 
					static int save_certs(char *signerfile, STACK_OF(X509) *signers)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1156
									
								
								apps/speed.c
									
									
									
									
									
								
							
							
						
						
									
										1156
									
								
								apps/speed.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										64
									
								
								apps/spkac.c
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								apps/spkac.c
									
									
									
									
									
								
							@@ -69,7 +69,6 @@
 | 
				
			|||||||
#include <openssl/lhash.h>
 | 
					#include <openssl/lhash.h>
 | 
				
			||||||
#include <openssl/x509.h>
 | 
					#include <openssl/x509.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef PROG
 | 
					#undef PROG
 | 
				
			||||||
#define PROG	spkac_main
 | 
					#define PROG	spkac_main
 | 
				
			||||||
@@ -84,21 +83,26 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
	ENGINE *e = NULL;
 | 
						ENGINE *e = NULL;
 | 
				
			||||||
	int i,badops=0, ret = 1;
 | 
						int i,badops=0, ret = 1;
 | 
				
			||||||
	BIO *in = NULL,*out = NULL, *key = NULL;
 | 
						BIO *in = NULL,*out = NULL;
 | 
				
			||||||
	int verify=0,noout=0,pubkey=0;
 | 
						int verify=0,noout=0,pubkey=0;
 | 
				
			||||||
	char *infile = NULL,*outfile = NULL,*prog;
 | 
						char *infile = NULL,*outfile = NULL,*prog;
 | 
				
			||||||
	char *passargin = NULL, *passin = NULL;
 | 
						char *passargin = NULL, *passin = NULL;
 | 
				
			||||||
	char *spkac = "SPKAC", *spksect = "default", *spkstr = NULL;
 | 
						char *spkac = "SPKAC", *spksect = "default", *spkstr = NULL;
 | 
				
			||||||
	char *challenge = NULL, *keyfile = NULL;
 | 
						char *challenge = NULL, *keyfile = NULL;
 | 
				
			||||||
	LHASH *conf = NULL;
 | 
						CONF *conf = NULL;
 | 
				
			||||||
	NETSCAPE_SPKI *spki = NULL;
 | 
						NETSCAPE_SPKI *spki = NULL;
 | 
				
			||||||
	EVP_PKEY *pkey = 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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	prog=argv[0];
 | 
						prog=argv[0];
 | 
				
			||||||
	argc--;
 | 
						argc--;
 | 
				
			||||||
	argv++;
 | 
						argv++;
 | 
				
			||||||
@@ -139,11 +143,13 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			spksect= *(++argv);
 | 
								spksect= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
							else if (strcmp(*argv,"-engine") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			engine= *(++argv);
 | 
								engine= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		else if (strcmp(*argv,"-noout") == 0)
 | 
							else if (strcmp(*argv,"-noout") == 0)
 | 
				
			||||||
			noout=1;
 | 
								noout=1;
 | 
				
			||||||
		else if (strcmp(*argv,"-pubkey") == 0)
 | 
							else if (strcmp(*argv,"-pubkey") == 0)
 | 
				
			||||||
@@ -169,7 +175,9 @@ bad:
 | 
				
			|||||||
		BIO_printf(bio_err," -noout         don't print SPKAC\n");
 | 
							BIO_printf(bio_err," -noout         don't print SPKAC\n");
 | 
				
			||||||
		BIO_printf(bio_err," -pubkey        output public key\n");
 | 
							BIO_printf(bio_err," -pubkey        output public key\n");
 | 
				
			||||||
		BIO_printf(bio_err," -verify        verify SPKAC signature\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;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -179,36 +187,15 @@ bad:
 | 
				
			|||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
					 | 
				
			||||||
				engine);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(keyfile) {
 | 
						if(keyfile) {
 | 
				
			||||||
		if(strcmp(keyfile, "-")) key = BIO_new_file(keyfile, "r");
 | 
							pkey = load_key(bio_err,
 | 
				
			||||||
		else key = BIO_new_fp(stdin, BIO_NOCLOSE);
 | 
									strcmp(keyfile, "-") ? keyfile : NULL,
 | 
				
			||||||
		if(!key) {
 | 
									FORMAT_PEM, 1, passin, e, "private key");
 | 
				
			||||||
			BIO_printf(bio_err, "Error opening key file\n");
 | 
					 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		pkey = PEM_read_bio_PrivateKey(key, NULL, NULL, passin);
 | 
					 | 
				
			||||||
		if(!pkey) {
 | 
							if(!pkey) {
 | 
				
			||||||
			BIO_printf(bio_err, "Error reading private key\n");
 | 
					 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
					 | 
				
			||||||
			goto end;
 | 
								goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		spki = NETSCAPE_SPKI_new();
 | 
							spki = NETSCAPE_SPKI_new();
 | 
				
			||||||
@@ -221,7 +208,7 @@ bad:
 | 
				
			|||||||
		if (outfile) out = BIO_new_file(outfile, "w");
 | 
							if (outfile) out = BIO_new_file(outfile, "w");
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
								out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
								    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
			    out = BIO_push(tmpbio, out);
 | 
								    out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -251,15 +238,16 @@ bad:
 | 
				
			|||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	conf = CONF_load_bio(NULL, in, NULL);
 | 
						conf = NCONF_new(NULL);
 | 
				
			||||||
 | 
						i = NCONF_load_bio(conf, in, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(!conf) {
 | 
						if(!i) {
 | 
				
			||||||
		BIO_printf(bio_err, "Error parsing config file\n");
 | 
							BIO_printf(bio_err, "Error parsing config file\n");
 | 
				
			||||||
		ERR_print_errors(bio_err);
 | 
							ERR_print_errors(bio_err);
 | 
				
			||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spkstr = CONF_get_string(conf, spksect, spkac);
 | 
						spkstr = NCONF_get_string(conf, spksect, spkac);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	if(!spkstr) {
 | 
						if(!spkstr) {
 | 
				
			||||||
		BIO_printf(bio_err, "Can't find SPKAC called \"%s\"\n", spkac);
 | 
							BIO_printf(bio_err, "Can't find SPKAC called \"%s\"\n", spkac);
 | 
				
			||||||
@@ -278,7 +266,7 @@ bad:
 | 
				
			|||||||
	if (outfile) out = BIO_new_file(outfile, "w");
 | 
						if (outfile) out = BIO_new_file(outfile, "w");
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
							out = BIO_new_fp(stdout, BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
							    BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
		    out = BIO_push(tmpbio, out);
 | 
							    out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -308,12 +296,12 @@ bad:
 | 
				
			|||||||
	ret = 0;
 | 
						ret = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
end:
 | 
					end:
 | 
				
			||||||
	CONF_free(conf);
 | 
						NCONF_free(conf);
 | 
				
			||||||
	NETSCAPE_SPKI_free(spki);
 | 
						NETSCAPE_SPKI_free(spki);
 | 
				
			||||||
	BIO_free(in);
 | 
						BIO_free(in);
 | 
				
			||||||
	BIO_free_all(out);
 | 
						BIO_free_all(out);
 | 
				
			||||||
	BIO_free(key);
 | 
					 | 
				
			||||||
	EVP_PKEY_free(pkey);
 | 
						EVP_PKEY_free(pkey);
 | 
				
			||||||
	if(passin) OPENSSL_free(passin);
 | 
						if(passin) OPENSSL_free(passin);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,18 @@
 | 
				
			|||||||
DSA *get_dsa512(void );
 | 
					DSA *get_dsa512(void );
 | 
				
			||||||
DSA *get_dsa1024(void );
 | 
					DSA *get_dsa1024(void );
 | 
				
			||||||
DSA *get_dsa2048(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,
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					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[]={
 | 
					static unsigned char dsa512_p[]={
 | 
				
			||||||
	0x9D,0x1B,0x69,0x8E,0x26,0xDB,0xF2,0x2B,0x11,0x70,0x19,0x86,
 | 
						0x9D,0x1B,0x69,0x8E,0x26,0xDB,0xF2,0x2B,0x11,0x70,0x19,0x86,
 | 
				
			||||||
	0xF6,0x19,0xC8,0xF8,0x19,0xF2,0x18,0x53,0x94,0x46,0x06,0xD0,
 | 
						0xF6,0x19,0xC8,0xF8,0x19,0xF2,0x18,0x53,0x94,0x46,0x06,0xD0,
 | 
				
			||||||
@@ -29,14 +41,34 @@ DSA *get_dsa512()
 | 
				
			|||||||
	DSA *dsa;
 | 
						DSA *dsa;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ((dsa=DSA_new()) == NULL) return(NULL);
 | 
						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->p=BN_bin2bn(dsa512_p,sizeof(dsa512_p),NULL);
 | 
				
			||||||
	dsa->q=BN_bin2bn(dsa512_q,sizeof(dsa512_q),NULL);
 | 
						dsa->q=BN_bin2bn(dsa512_q,sizeof(dsa512_q),NULL);
 | 
				
			||||||
	dsa->g=BN_bin2bn(dsa512_g,sizeof(dsa512_g),NULL);
 | 
						dsa->g=BN_bin2bn(dsa512_g,sizeof(dsa512_g),NULL);
 | 
				
			||||||
	if ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))
 | 
						if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL) ||
 | 
				
			||||||
 | 
									(dsa->q == NULL) || (dsa->g == NULL))
 | 
				
			||||||
		return(NULL);
 | 
							return(NULL);
 | 
				
			||||||
	return(dsa);
 | 
						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[]={
 | 
					static unsigned char dsa1024_p[]={
 | 
				
			||||||
	0xA7,0x3F,0x6E,0x85,0xBF,0x41,0x6A,0x29,0x7D,0xF0,0x9F,0x47,
 | 
						0xA7,0x3F,0x6E,0x85,0xBF,0x41,0x6A,0x29,0x7D,0xF0,0x9F,0x47,
 | 
				
			||||||
	0x19,0x30,0x90,0x9A,0x09,0x1D,0xDA,0x6A,0x33,0x1E,0xC5,0x3D,
 | 
						0x19,0x30,0x90,0x9A,0x09,0x1D,0xDA,0x6A,0x33,0x1E,0xC5,0x3D,
 | 
				
			||||||
@@ -73,14 +105,45 @@ DSA *get_dsa1024()
 | 
				
			|||||||
	DSA *dsa;
 | 
						DSA *dsa;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ((dsa=DSA_new()) == NULL) return(NULL);
 | 
						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->p=BN_bin2bn(dsa1024_p,sizeof(dsa1024_p),NULL);
 | 
				
			||||||
	dsa->q=BN_bin2bn(dsa1024_q,sizeof(dsa1024_q),NULL);
 | 
						dsa->q=BN_bin2bn(dsa1024_q,sizeof(dsa1024_q),NULL);
 | 
				
			||||||
	dsa->g=BN_bin2bn(dsa1024_g,sizeof(dsa1024_g),NULL);
 | 
						dsa->g=BN_bin2bn(dsa1024_g,sizeof(dsa1024_g),NULL);
 | 
				
			||||||
	if ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))
 | 
						if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL) ||
 | 
				
			||||||
 | 
									(dsa->q == NULL) || (dsa->g == NULL))
 | 
				
			||||||
		return(NULL);
 | 
							return(NULL);
 | 
				
			||||||
	return(dsa);
 | 
						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[]={
 | 
					static unsigned char dsa2048_p[]={
 | 
				
			||||||
	0xA0,0x25,0xFA,0xAD,0xF4,0x8E,0xB9,0xE5,0x99,0xF3,0x5D,0x6F,
 | 
						0xA0,0x25,0xFA,0xAD,0xF4,0x8E,0xB9,0xE5,0x99,0xF3,0x5D,0x6F,
 | 
				
			||||||
	0x4F,0x83,0x34,0xE2,0x7E,0xCF,0x6F,0xBF,0x30,0xAF,0x6F,0x81,
 | 
						0x4F,0x83,0x34,0xE2,0x7E,0xCF,0x6F,0xBF,0x30,0xAF,0x6F,0x81,
 | 
				
			||||||
@@ -139,10 +202,13 @@ DSA *get_dsa2048()
 | 
				
			|||||||
	DSA *dsa;
 | 
						DSA *dsa;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
	if ((dsa=DSA_new()) == NULL) return(NULL);
 | 
						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->p=BN_bin2bn(dsa2048_p,sizeof(dsa2048_p),NULL);
 | 
				
			||||||
	dsa->q=BN_bin2bn(dsa2048_q,sizeof(dsa2048_q),NULL);
 | 
						dsa->q=BN_bin2bn(dsa2048_q,sizeof(dsa2048_q),NULL);
 | 
				
			||||||
	dsa->g=BN_bin2bn(dsa2048_g,sizeof(dsa2048_g),NULL);
 | 
						dsa->g=BN_bin2bn(dsa2048_g,sizeof(dsa2048_g),NULL);
 | 
				
			||||||
	if ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))
 | 
						if ((dsa->priv_key == NULL) || (dsa->pub_key == NULL) || (dsa->p == NULL) ||
 | 
				
			||||||
 | 
									(dsa->q == NULL) || (dsa->g == NULL))
 | 
				
			||||||
		return(NULL);
 | 
							return(NULL);
 | 
				
			||||||
	return(dsa);
 | 
						return(dsa);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -65,15 +65,14 @@
 | 
				
			|||||||
#include <openssl/x509.h>
 | 
					#include <openssl/x509.h>
 | 
				
			||||||
#include <openssl/x509v3.h>
 | 
					#include <openssl/x509v3.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef PROG
 | 
					#undef PROG
 | 
				
			||||||
#define PROG	verify_main
 | 
					#define PROG	verify_main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx);
 | 
					static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx);
 | 
				
			||||||
static int check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain, STACK_OF(X509) *tchain, int purpose);
 | 
					static int check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain, STACK_OF(X509) *tchain, int purpose, ENGINE *e);
 | 
				
			||||||
static STACK_OF(X509) *load_untrusted(char *file);
 | 
					static STACK_OF(X509) *load_untrusted(char *file);
 | 
				
			||||||
static int v_verbose=0, issuer_checks = 0;
 | 
					static int v_verbose=0, vflags = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int MAIN(int, char **);
 | 
					int MAIN(int, char **);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -87,7 +86,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	STACK_OF(X509) *untrusted = NULL, *trusted = NULL;
 | 
						STACK_OF(X509) *untrusted = NULL, *trusted = NULL;
 | 
				
			||||||
	X509_STORE *cert_ctx=NULL;
 | 
						X509_STORE *cert_ctx=NULL;
 | 
				
			||||||
	X509_LOOKUP *lookup=NULL;
 | 
						X509_LOOKUP *lookup=NULL;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	char *engine=NULL;
 | 
						char *engine=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cert_ctx=X509_STORE_new();
 | 
						cert_ctx=X509_STORE_new();
 | 
				
			||||||
	if (cert_ctx == NULL) goto end;
 | 
						if (cert_ctx == NULL) goto end;
 | 
				
			||||||
@@ -101,6 +102,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
							if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
				
			||||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
								BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	argc--;
 | 
						argc--;
 | 
				
			||||||
	argv++;
 | 
						argv++;
 | 
				
			||||||
	for (;;)
 | 
						for (;;)
 | 
				
			||||||
@@ -140,15 +144,23 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
				if (argc-- < 1) goto end;
 | 
									if (argc-- < 1) goto end;
 | 
				
			||||||
				trustfile= *(++argv);
 | 
									trustfile= *(++argv);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
			else if (strcmp(*argv,"-engine") == 0)
 | 
								else if (strcmp(*argv,"-engine") == 0)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
				if (--argc < 1) goto end;
 | 
									if (--argc < 1) goto end;
 | 
				
			||||||
				engine= *(++argv);
 | 
									engine= *(++argv);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
			else if (strcmp(*argv,"-help") == 0)
 | 
								else if (strcmp(*argv,"-help") == 0)
 | 
				
			||||||
				goto end;
 | 
									goto end;
 | 
				
			||||||
 | 
								else if (strcmp(*argv,"-ignore_critical") == 0)
 | 
				
			||||||
 | 
									vflags |= X509_V_FLAG_IGNORE_CRITICAL;
 | 
				
			||||||
			else if (strcmp(*argv,"-issuer_checks") == 0)
 | 
								else if (strcmp(*argv,"-issuer_checks") == 0)
 | 
				
			||||||
				issuer_checks=1;
 | 
									vflags |= X509_V_FLAG_CB_ISSUER_CHECK;
 | 
				
			||||||
 | 
								else if (strcmp(*argv,"-crl_check") == 0)
 | 
				
			||||||
 | 
									vflags |= X509_V_FLAG_CRL_CHECK;
 | 
				
			||||||
 | 
								else if (strcmp(*argv,"-crl_check_all") == 0)
 | 
				
			||||||
 | 
									vflags |= X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL;
 | 
				
			||||||
			else if (strcmp(*argv,"-verbose") == 0)
 | 
								else if (strcmp(*argv,"-verbose") == 0)
 | 
				
			||||||
				v_verbose=1;
 | 
									v_verbose=1;
 | 
				
			||||||
			else if (argv[0][0] == '-')
 | 
								else if (argv[0][0] == '-')
 | 
				
			||||||
@@ -162,23 +174,9 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
					 | 
				
			||||||
				engine);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_file());
 | 
						lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_file());
 | 
				
			||||||
	if (lookup == NULL) abort();
 | 
						if (lookup == NULL) abort();
 | 
				
			||||||
@@ -220,14 +218,18 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (argc < 1) check(cert_ctx, NULL, untrusted, trusted, purpose);
 | 
						if (argc < 1) check(cert_ctx, NULL, untrusted, trusted, purpose, e);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		for (i=0; i<argc; i++)
 | 
							for (i=0; i<argc; i++)
 | 
				
			||||||
			check(cert_ctx,argv[i], untrusted, trusted, purpose);
 | 
								check(cert_ctx,argv[i], untrusted, trusted, purpose, e);
 | 
				
			||||||
	ret=0;
 | 
						ret=0;
 | 
				
			||||||
end:
 | 
					end:
 | 
				
			||||||
	if (ret == 1) {
 | 
						if (ret == 1) {
 | 
				
			||||||
		BIO_printf(bio_err,"usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-engine e] cert1 cert2 ...\n");
 | 
							BIO_printf(bio_err,"usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check]");
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
 | 
							BIO_printf(bio_err," [-engine e]");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
							BIO_printf(bio_err," cert1 cert2 ...\n");
 | 
				
			||||||
		BIO_printf(bio_err,"recognized usages:\n");
 | 
							BIO_printf(bio_err,"recognized usages:\n");
 | 
				
			||||||
		for(i = 0; i < X509_PURPOSE_get_count(); i++) {
 | 
							for(i = 0; i < X509_PURPOSE_get_count(); i++) {
 | 
				
			||||||
			X509_PURPOSE *ptmp;
 | 
								X509_PURPOSE *ptmp;
 | 
				
			||||||
@@ -239,42 +241,19 @@ end:
 | 
				
			|||||||
	if (cert_ctx != NULL) X509_STORE_free(cert_ctx);
 | 
						if (cert_ctx != NULL) X509_STORE_free(cert_ctx);
 | 
				
			||||||
	sk_X509_pop_free(untrusted, X509_free);
 | 
						sk_X509_pop_free(untrusted, X509_free);
 | 
				
			||||||
	sk_X509_pop_free(trusted, X509_free);
 | 
						sk_X509_pop_free(trusted, X509_free);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain, STACK_OF(X509) *tchain, int purpose)
 | 
					static int check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain, STACK_OF(X509) *tchain, int purpose, ENGINE *e)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	X509 *x=NULL;
 | 
						X509 *x=NULL;
 | 
				
			||||||
	BIO *in=NULL;
 | 
					 | 
				
			||||||
	int i=0,ret=0;
 | 
						int i=0,ret=0;
 | 
				
			||||||
	X509_STORE_CTX *csc;
 | 
						X509_STORE_CTX *csc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	in=BIO_new(BIO_s_file());
 | 
						x = load_cert(bio_err, file, FORMAT_PEM, NULL, e, "certificate file");
 | 
				
			||||||
	if (in == NULL)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
		ERR_print_errors(bio_err);
 | 
					 | 
				
			||||||
		goto end;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (file == NULL)
 | 
					 | 
				
			||||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
		if (BIO_read_filename(in,file) <= 0)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			perror(file);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	x=PEM_read_bio_X509(in,NULL,NULL,NULL);
 | 
					 | 
				
			||||||
	if (x == NULL)
 | 
						if (x == NULL)
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
		fprintf(stdout,"%s: unable to load certificate file\n",
 | 
					 | 
				
			||||||
			(file == NULL)?"stdin":file);
 | 
					 | 
				
			||||||
		ERR_print_errors(bio_err);
 | 
					 | 
				
			||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	fprintf(stdout,"%s: ",(file == NULL)?"stdin":file);
 | 
						fprintf(stdout,"%s: ",(file == NULL)?"stdin":file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	csc = X509_STORE_CTX_new();
 | 
						csc = X509_STORE_CTX_new();
 | 
				
			||||||
@@ -283,11 +262,14 @@ static int check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain, STACK_OF(X
 | 
				
			|||||||
		ERR_print_errors(bio_err);
 | 
							ERR_print_errors(bio_err);
 | 
				
			||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	X509_STORE_CTX_init(csc,ctx,x,uchain);
 | 
						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(tchain) X509_STORE_CTX_trusted_stack(csc, tchain);
 | 
				
			||||||
	if(purpose >= 0) X509_STORE_CTX_set_purpose(csc, purpose);
 | 
						if(purpose >= 0) X509_STORE_CTX_set_purpose(csc, purpose);
 | 
				
			||||||
	if(issuer_checks)
 | 
					 | 
				
			||||||
		X509_STORE_CTX_set_flags(csc, X509_V_FLAG_CB_ISSUER_CHECK);
 | 
					 | 
				
			||||||
	i=X509_verify_cert(csc);
 | 
						i=X509_verify_cert(csc);
 | 
				
			||||||
	X509_STORE_CTX_free(csc);
 | 
						X509_STORE_CTX_free(csc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -301,7 +283,6 @@ end:
 | 
				
			|||||||
	else
 | 
						else
 | 
				
			||||||
		ERR_print_errors(bio_err);
 | 
							ERR_print_errors(bio_err);
 | 
				
			||||||
	if (x != NULL) X509_free(x);
 | 
						if (x != NULL) X509_free(x);
 | 
				
			||||||
	if (in != NULL) BIO_free(in);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return(ret);
 | 
						return(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -359,7 +340,8 @@ static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx)
 | 
				
			|||||||
	if (!ok)
 | 
						if (!ok)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		X509_NAME_oneline(
 | 
							X509_NAME_oneline(
 | 
				
			||||||
				X509_get_subject_name(ctx->current_cert),buf,256);
 | 
									X509_get_subject_name(ctx->current_cert),buf,
 | 
				
			||||||
 | 
									sizeof buf);
 | 
				
			||||||
		printf("%s\n",buf);
 | 
							printf("%s\n",buf);
 | 
				
			||||||
		printf("error %d at %d depth lookup:%s\n",ctx->error,
 | 
							printf("error %d at %d depth lookup:%s\n",ctx->error,
 | 
				
			||||||
			ctx->error_depth,
 | 
								ctx->error_depth,
 | 
				
			||||||
@@ -375,6 +357,9 @@ static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx)
 | 
				
			|||||||
		if (ctx->error == X509_V_ERR_PATH_LENGTH_EXCEEDED) ok=1;
 | 
							if (ctx->error == X509_V_ERR_PATH_LENGTH_EXCEEDED) ok=1;
 | 
				
			||||||
		if (ctx->error == X509_V_ERR_INVALID_PURPOSE) ok=1;
 | 
							if (ctx->error == X509_V_ERR_INVALID_PURPOSE) ok=1;
 | 
				
			||||||
		if (ctx->error == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) ok=1;
 | 
							if (ctx->error == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) ok=1;
 | 
				
			||||||
 | 
							if (ctx->error == X509_V_ERR_CRL_HAS_EXPIRED) ok=1;
 | 
				
			||||||
 | 
							if (ctx->error == X509_V_ERR_CRL_NOT_YET_VALID) ok=1;
 | 
				
			||||||
 | 
							if (ctx->error == X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION) ok=1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	if (!v_verbose)
 | 
						if (!v_verbose)
 | 
				
			||||||
		ERR_clear_error();
 | 
							ERR_clear_error();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,6 +55,59 @@
 | 
				
			|||||||
 * copied and put under another distribution licence
 | 
					 * copied and put under another distribution licence
 | 
				
			||||||
 * [including the GNU Public Licence.]
 | 
					 * [including the GNU Public Licence.]
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    openssl-core@openssl.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This product includes cryptographic software written by Eric Young
 | 
				
			||||||
 | 
					 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
				
			||||||
 | 
					 * Hudson (tjh@cryptsoft.com).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
@@ -62,6 +115,21 @@
 | 
				
			|||||||
#include "apps.h"
 | 
					#include "apps.h"
 | 
				
			||||||
#include <openssl/evp.h>
 | 
					#include <openssl/evp.h>
 | 
				
			||||||
#include <openssl/crypto.h>
 | 
					#include <openssl/crypto.h>
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_MD2
 | 
				
			||||||
 | 
					# include <openssl/md2.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_RC4
 | 
				
			||||||
 | 
					# include <openssl/rc4.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
 | 
					# include <openssl/des.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_IDEA
 | 
				
			||||||
 | 
					# include <openssl/idea.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_BF
 | 
				
			||||||
 | 
					# include <openssl/blowfish.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef PROG
 | 
					#undef PROG
 | 
				
			||||||
#define PROG	version_main
 | 
					#define PROG	version_main
 | 
				
			||||||
@@ -71,7 +139,7 @@ int MAIN(int, char **);
 | 
				
			|||||||
int MAIN(int argc, char **argv)
 | 
					int MAIN(int argc, char **argv)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	int i,ret=0;
 | 
						int i,ret=0;
 | 
				
			||||||
	int cflags=0,version=0,date=0,options=0,platform=0;
 | 
						int cflags=0,version=0,date=0,options=0,platform=0,dir=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apps_startup();
 | 
						apps_startup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -92,8 +160,10 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			options=1;
 | 
								options=1;
 | 
				
			||||||
		else if (strcmp(argv[i],"-p") == 0)
 | 
							else if (strcmp(argv[i],"-p") == 0)
 | 
				
			||||||
			platform=1;
 | 
								platform=1;
 | 
				
			||||||
 | 
							else if (strcmp(argv[i],"-d") == 0)
 | 
				
			||||||
 | 
								dir=1;
 | 
				
			||||||
		else if (strcmp(argv[i],"-a") == 0)
 | 
							else if (strcmp(argv[i],"-a") == 0)
 | 
				
			||||||
			date=version=cflags=options=platform=1;
 | 
								date=version=cflags=options=platform=dir=1;
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_printf(bio_err,"usage:version -[avbofp]\n");
 | 
								BIO_printf(bio_err,"usage:version -[avbofp]\n");
 | 
				
			||||||
@@ -109,24 +179,26 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
		printf("options:  ");
 | 
							printf("options:  ");
 | 
				
			||||||
		printf("%s ",BN_options());
 | 
							printf("%s ",BN_options());
 | 
				
			||||||
#ifndef NO_MD2
 | 
					#ifndef OPENSSL_NO_MD2
 | 
				
			||||||
		printf("%s ",MD2_options());
 | 
							printf("%s ",MD2_options());
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_RC4
 | 
					#ifndef OPENSSL_NO_RC4
 | 
				
			||||||
		printf("%s ",RC4_options());
 | 
							printf("%s ",RC4_options());
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DES
 | 
					#ifndef OPENSSL_NO_DES
 | 
				
			||||||
		printf("%s ",des_options());
 | 
							printf("%s ",DES_options());
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_IDEA
 | 
					#ifndef OPENSSL_NO_IDEA
 | 
				
			||||||
		printf("%s ",idea_options());
 | 
							printf("%s ",idea_options());
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_BF
 | 
					#ifndef OPENSSL_NO_BF
 | 
				
			||||||
		printf("%s ",BF_options());
 | 
							printf("%s ",BF_options());
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		printf("\n");
 | 
							printf("\n");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	if (cflags)  printf("%s\n",SSLeay_version(SSLEAY_CFLAGS));
 | 
						if (cflags)  printf("%s\n",SSLeay_version(SSLEAY_CFLAGS));
 | 
				
			||||||
 | 
						if (dir)  printf("%s\n",SSLeay_version(SSLEAY_DIR));
 | 
				
			||||||
end:
 | 
					end:
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -118,7 +118,6 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
 | 
				
			|||||||
        HDC hdc;
 | 
					        HDC hdc;
 | 
				
			||||||
	PAINTSTRUCT ps;
 | 
						PAINTSTRUCT ps;
 | 
				
			||||||
        RECT rect;
 | 
					        RECT rect;
 | 
				
			||||||
        char buffer[200];
 | 
					 | 
				
			||||||
        static int seeded = 0;
 | 
					        static int seeded = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (iMsg)
 | 
						switch (iMsg)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										277
									
								
								apps/x509.c
									
									
									
									
									
								
							
							
						
						
									
										277
									
								
								apps/x509.c
									
									
									
									
									
								
							@@ -60,7 +60,7 @@
 | 
				
			|||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#ifdef NO_STDIO
 | 
					#ifdef OPENSSL_NO_STDIO
 | 
				
			||||||
#define APPS_WIN16
 | 
					#define APPS_WIN16
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#include "apps.h"
 | 
					#include "apps.h"
 | 
				
			||||||
@@ -73,7 +73,6 @@
 | 
				
			|||||||
#include <openssl/x509v3.h>
 | 
					#include <openssl/x509v3.h>
 | 
				
			||||||
#include <openssl/objects.h>
 | 
					#include <openssl/objects.h>
 | 
				
			||||||
#include <openssl/pem.h>
 | 
					#include <openssl/pem.h>
 | 
				
			||||||
#include <openssl/engine.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef PROG
 | 
					#undef PROG
 | 
				
			||||||
#define PROG x509_main
 | 
					#define PROG x509_main
 | 
				
			||||||
@@ -106,6 +105,7 @@ static char *x509_usage[]={
 | 
				
			|||||||
" -fingerprint    - print the certificate fingerprint\n",
 | 
					" -fingerprint    - print the certificate fingerprint\n",
 | 
				
			||||||
" -alias          - output certificate alias\n",
 | 
					" -alias          - output certificate alias\n",
 | 
				
			||||||
" -noout          - no certificate output\n",
 | 
					" -noout          - no certificate output\n",
 | 
				
			||||||
 | 
					" -ocspid         - print OCSP hash values for the subject name and public key\n",
 | 
				
			||||||
" -trustout       - output a \"trusted\" certificate\n",
 | 
					" -trustout       - output a \"trusted\" certificate\n",
 | 
				
			||||||
" -clrtrust       - clear all trusted purposes\n",
 | 
					" -clrtrust       - clear all trusted purposes\n",
 | 
				
			||||||
" -clrreject      - clear all rejected purposes\n",
 | 
					" -clrreject      - clear all rejected purposes\n",
 | 
				
			||||||
@@ -122,7 +122,8 @@ static char *x509_usage[]={
 | 
				
			|||||||
" -CAkey arg      - set the CA key, must be PEM format\n",
 | 
					" -CAkey arg      - set the CA key, must be PEM format\n",
 | 
				
			||||||
"                   missing, it is assumed to be in the CA file.\n",
 | 
					"                   missing, it is assumed to be in the CA file.\n",
 | 
				
			||||||
" -CAcreateserial - create serial number file if it does not exist\n",
 | 
					" -CAcreateserial - create serial number file if it does not exist\n",
 | 
				
			||||||
" -CAserial       - serial file\n",
 | 
					" -CAserial arg   - serial file\n",
 | 
				
			||||||
 | 
					" -set_serial     - serial number to use\n",
 | 
				
			||||||
" -text           - print the certificate in text form\n",
 | 
					" -text           - print the certificate in text form\n",
 | 
				
			||||||
" -C              - print out C code forms\n",
 | 
					" -C              - print out C code forms\n",
 | 
				
			||||||
" -md2/-md5/-sha1/-mdc2 - digest to use\n",
 | 
					" -md2/-md5/-sha1/-mdc2 - digest to use\n",
 | 
				
			||||||
@@ -130,16 +131,20 @@ static char *x509_usage[]={
 | 
				
			|||||||
" -extensions     - section from config file with X509V3 extensions to add\n",
 | 
					" -extensions     - section from config file with X509V3 extensions to add\n",
 | 
				
			||||||
" -clrext         - delete extensions before signing and input certificate\n",
 | 
					" -clrext         - delete extensions before signing and input certificate\n",
 | 
				
			||||||
" -nameopt arg    - various certificate name options\n",
 | 
					" -nameopt arg    - various certificate name options\n",
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
" -engine e       - use engine e, possibly a hardware device.\n",
 | 
					" -engine e       - use engine e, possibly a hardware device.\n",
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					" -certopt arg    - various certificate text options\n",
 | 
				
			||||||
NULL
 | 
					NULL
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int MS_CALLBACK callb(int ok, X509_STORE_CTX *ctx);
 | 
					static int MS_CALLBACK callb(int ok, X509_STORE_CTX *ctx);
 | 
				
			||||||
static int sign (X509 *x, EVP_PKEY *pkey,int days,int clrext, const EVP_MD *digest,
 | 
					static int sign (X509 *x, EVP_PKEY *pkey,int days,int clrext, const EVP_MD *digest,
 | 
				
			||||||
						LHASH *conf, char *section);
 | 
											CONF *conf, char *section);
 | 
				
			||||||
static int x509_certify (X509_STORE *ctx,char *CAfile,const EVP_MD *digest,
 | 
					static int x509_certify (X509_STORE *ctx,char *CAfile,const EVP_MD *digest,
 | 
				
			||||||
			 X509 *x,X509 *xca,EVP_PKEY *pkey,char *serial,
 | 
								 X509 *x,X509 *xca,EVP_PKEY *pkey,char *serial,
 | 
				
			||||||
			 int create,int days, int clrext, LHASH *conf, char *section);
 | 
								 int create,int days, int clrext, CONF *conf, char *section,
 | 
				
			||||||
 | 
											ASN1_INTEGER *sno);
 | 
				
			||||||
static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt);
 | 
					static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt);
 | 
				
			||||||
static int reqfile=0;
 | 
					static int reqfile=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -153,6 +158,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	X509 *x=NULL,*xca=NULL;
 | 
						X509 *x=NULL,*xca=NULL;
 | 
				
			||||||
	ASN1_OBJECT *objtmp;
 | 
						ASN1_OBJECT *objtmp;
 | 
				
			||||||
	EVP_PKEY *Upkey=NULL,*CApkey=NULL;
 | 
						EVP_PKEY *Upkey=NULL,*CApkey=NULL;
 | 
				
			||||||
 | 
						ASN1_INTEGER *sno = NULL;
 | 
				
			||||||
	int i,num,badops=0;
 | 
						int i,num,badops=0;
 | 
				
			||||||
	BIO *out=NULL;
 | 
						BIO *out=NULL;
 | 
				
			||||||
	BIO *STDout=NULL;
 | 
						BIO *STDout=NULL;
 | 
				
			||||||
@@ -162,6 +168,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	char *CAkeyfile=NULL,*CAserial=NULL;
 | 
						char *CAkeyfile=NULL,*CAserial=NULL;
 | 
				
			||||||
	char *alias=NULL;
 | 
						char *alias=NULL;
 | 
				
			||||||
	int text=0,serial=0,hash=0,subject=0,issuer=0,startdate=0,enddate=0;
 | 
						int text=0,serial=0,hash=0,subject=0,issuer=0,startdate=0,enddate=0;
 | 
				
			||||||
 | 
						int ocspid=0;
 | 
				
			||||||
	int noout=0,sign_flag=0,CA_flag=0,CA_createserial=0,email=0;
 | 
						int noout=0,sign_flag=0,CA_flag=0,CA_createserial=0,email=0;
 | 
				
			||||||
	int trustout=0,clrtrust=0,clrreject=0,aliasout=0,clrext=0;
 | 
						int trustout=0,clrtrust=0,clrreject=0,aliasout=0,clrext=0;
 | 
				
			||||||
	int C=0;
 | 
						int C=0;
 | 
				
			||||||
@@ -173,12 +180,14 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
	int fingerprint=0;
 | 
						int fingerprint=0;
 | 
				
			||||||
	char buf[256];
 | 
						char buf[256];
 | 
				
			||||||
	const EVP_MD *md_alg,*digest=EVP_md5();
 | 
						const EVP_MD *md_alg,*digest=EVP_md5();
 | 
				
			||||||
	LHASH *extconf = NULL;
 | 
						CONF *extconf = NULL;
 | 
				
			||||||
	char *extsect = NULL, *extfile = NULL, *passin = NULL, *passargin = NULL;
 | 
						char *extsect = NULL, *extfile = NULL, *passin = NULL, *passargin = NULL;
 | 
				
			||||||
	int need_rand = 0;
 | 
						int need_rand = 0;
 | 
				
			||||||
	int checkend=0,checkoffset=0;
 | 
						int checkend=0,checkoffset=0;
 | 
				
			||||||
	unsigned long nmflag = 0;
 | 
						unsigned long nmflag = 0, certflag = 0;
 | 
				
			||||||
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
	char *engine=NULL;
 | 
						char *engine=NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	reqfile=0;
 | 
						reqfile=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -186,8 +195,11 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (bio_err == NULL)
 | 
						if (bio_err == NULL)
 | 
				
			||||||
		bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
							bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!load_config(bio_err, NULL))
 | 
				
			||||||
 | 
							goto end;
 | 
				
			||||||
	STDout=BIO_new_fp(stdout,BIO_NOCLOSE);
 | 
						STDout=BIO_new_fp(stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
						BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
	STDout = BIO_push(tmpbio, STDout);
 | 
						STDout = BIO_push(tmpbio, STDout);
 | 
				
			||||||
@@ -237,7 +249,7 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		else if (strcmp(*argv,"-CAkeyform") == 0)
 | 
							else if (strcmp(*argv,"-CAkeyform") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			CAformat=str2fmt(*(++argv));
 | 
								CAkeyformat=str2fmt(*(++argv));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		else if (strcmp(*argv,"-days") == 0)
 | 
							else if (strcmp(*argv,"-days") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@@ -298,6 +310,12 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			CAserial= *(++argv);
 | 
								CAserial= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-set_serial") == 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
 | 
								if (!(sno = s2i_ASN1_INTEGER(NULL, *(++argv))))
 | 
				
			||||||
 | 
									goto bad;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		else if (strcmp(*argv,"-addtrust") == 0)
 | 
							else if (strcmp(*argv,"-addtrust") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
@@ -330,22 +348,23 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			alias= *(++argv);
 | 
								alias= *(++argv);
 | 
				
			||||||
			trustout = 1;
 | 
								trustout = 1;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-certopt") == 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
 | 
								if (!set_cert_ex(&certflag, *(++argv))) goto bad;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		else if (strcmp(*argv,"-nameopt") == 0)
 | 
							else if (strcmp(*argv,"-nameopt") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			if (!set_name_ex(&nmflag, *(++argv))) goto bad;
 | 
								if (!set_name_ex(&nmflag, *(++argv))) goto bad;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		else if (strcmp(*argv,"-setalias") == 0)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
					 | 
				
			||||||
			alias= *(++argv);
 | 
					 | 
				
			||||||
			trustout = 1;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
							else if (strcmp(*argv,"-engine") == 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (--argc < 1) goto bad;
 | 
								if (--argc < 1) goto bad;
 | 
				
			||||||
			engine= *(++argv);
 | 
								engine= *(++argv);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		else if (strcmp(*argv,"-C") == 0)
 | 
							else if (strcmp(*argv,"-C") == 0)
 | 
				
			||||||
			C= ++num;
 | 
								C= ++num;
 | 
				
			||||||
		else if (strcmp(*argv,"-email") == 0)
 | 
							else if (strcmp(*argv,"-email") == 0)
 | 
				
			||||||
@@ -406,6 +425,8 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
			clrext = 1;
 | 
								clrext = 1;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
							else if (strcmp(*argv,"-ocspid") == 0)
 | 
				
			||||||
 | 
								ocspid= ++num;
 | 
				
			||||||
		else if ((md_alg=EVP_get_digestbyname(*argv + 1)))
 | 
							else if ((md_alg=EVP_get_digestbyname(*argv + 1)))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			/* ok */
 | 
								/* ok */
 | 
				
			||||||
@@ -425,27 +446,13 @@ int MAIN(int argc, char **argv)
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
bad:
 | 
					bad:
 | 
				
			||||||
		for (pp=x509_usage; (*pp != NULL); pp++)
 | 
							for (pp=x509_usage; (*pp != NULL); pp++)
 | 
				
			||||||
			BIO_printf(bio_err,*pp);
 | 
								BIO_printf(bio_err,"%s",*pp);
 | 
				
			||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (engine != NULL)
 | 
					#ifndef OPENSSL_NO_ENGINE
 | 
				
			||||||
		{
 | 
					        e = setup_engine(bio_err, engine, 0);
 | 
				
			||||||
		if((e = ENGINE_by_id(engine)) == NULL)
 | 
					#endif
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"invalid engine \"%s\"\n",
 | 
					 | 
				
			||||||
				engine);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"can't use that engine\n");
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
 | 
					 | 
				
			||||||
		/* Free our "structural" reference. */
 | 
					 | 
				
			||||||
		ENGINE_free(e);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (need_rand)
 | 
						if (need_rand)
 | 
				
			||||||
		app_RAND_load_file(NULL, bio_err, 0);
 | 
							app_RAND_load_file(NULL, bio_err, 0);
 | 
				
			||||||
@@ -474,9 +481,10 @@ bad:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (extfile)
 | 
						if (extfile)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		long errorline;
 | 
							long errorline = -1;
 | 
				
			||||||
		X509V3_CTX ctx2;
 | 
							X509V3_CTX ctx2;
 | 
				
			||||||
		if (!(extconf=CONF_load(NULL,extfile,&errorline)))
 | 
							extconf = NCONF_new(NULL);
 | 
				
			||||||
 | 
							if (!NCONF_load(extconf, extfile,&errorline))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			if (errorline <= 0)
 | 
								if (errorline <= 0)
 | 
				
			||||||
				BIO_printf(bio_err,
 | 
									BIO_printf(bio_err,
 | 
				
			||||||
@@ -488,11 +496,18 @@ bad:
 | 
				
			|||||||
							,errorline,extfile);
 | 
												,errorline,extfile);
 | 
				
			||||||
			goto end;
 | 
								goto end;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		if (!extsect && !(extsect = CONF_get_string(extconf, "default",
 | 
							if (!extsect)
 | 
				
			||||||
					 "extensions"))) extsect = "default";
 | 
								{
 | 
				
			||||||
 | 
								extsect = NCONF_get_string(extconf, "default", "extensions");
 | 
				
			||||||
 | 
								if (!extsect)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
									ERR_clear_error();
 | 
				
			||||||
 | 
									extsect = "default";
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		X509V3_set_ctx_test(&ctx2);
 | 
							X509V3_set_ctx_test(&ctx2);
 | 
				
			||||||
		X509V3_set_conf_lhash(&ctx2, extconf);
 | 
							X509V3_set_nconf(&ctx2, extconf);
 | 
				
			||||||
		if (!X509V3_EXT_add_conf(extconf, &ctx2, extsect, NULL))
 | 
							if (!X509V3_EXT_add_nconf(extconf, &ctx2, extsect, NULL))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_printf(bio_err,
 | 
								BIO_printf(bio_err,
 | 
				
			||||||
				"Error Loading extension section %s\n",
 | 
									"Error Loading extension section %s\n",
 | 
				
			||||||
@@ -576,7 +591,12 @@ bad:
 | 
				
			|||||||
		if ((x=X509_new()) == NULL) goto end;
 | 
							if ((x=X509_new()) == NULL) goto end;
 | 
				
			||||||
		ci=x->cert_info;
 | 
							ci=x->cert_info;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (!ASN1_INTEGER_set(X509_get_serialNumber(x),0)) goto end;
 | 
							if (sno)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								if (!X509_set_serialNumber(x, sno))
 | 
				
			||||||
 | 
									goto end;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							else if (!ASN1_INTEGER_set(X509_get_serialNumber(x),0)) goto end;
 | 
				
			||||||
		if (!X509_set_issuer_name(x,req->req_info->subject)) goto end;
 | 
							if (!X509_set_issuer_name(x,req->req_info->subject)) goto end;
 | 
				
			||||||
		if (!X509_set_subject_name(x,req->req_info->subject)) goto end;
 | 
							if (!X509_set_subject_name(x,req->req_info->subject)) goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -588,12 +608,12 @@ bad:
 | 
				
			|||||||
		EVP_PKEY_free(pkey);
 | 
							EVP_PKEY_free(pkey);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		x=load_cert(bio_err,infile,informat);
 | 
							x=load_cert(bio_err,infile,informat,NULL,e,"Certificate");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (x == NULL) goto end;
 | 
						if (x == NULL) goto end;
 | 
				
			||||||
	if (CA_flag)
 | 
						if (CA_flag)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		xca=load_cert(bio_err,CAfile,CAformat);
 | 
							xca=load_cert(bio_err,CAfile,CAformat,NULL,e,"CA Certificate");
 | 
				
			||||||
		if (xca == NULL) goto end;
 | 
							if (xca == NULL) goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -611,7 +631,7 @@ bad:
 | 
				
			|||||||
		if (outfile == NULL)
 | 
							if (outfile == NULL)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
								BIO_set_fp(out,stdout,BIO_NOCLOSE);
 | 
				
			||||||
#ifdef VMS
 | 
					#ifdef OPENSSL_SYS_VMS
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
								BIO *tmpbio = BIO_new(BIO_f_linebuffer());
 | 
				
			||||||
			out = BIO_push(tmpbio, out);
 | 
								out = BIO_push(tmpbio, out);
 | 
				
			||||||
@@ -715,12 +735,12 @@ bad:
 | 
				
			|||||||
					goto end;
 | 
										goto end;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				BIO_printf(STDout,"Modulus=");
 | 
									BIO_printf(STDout,"Modulus=");
 | 
				
			||||||
#ifndef NO_RSA
 | 
					#ifndef OPENSSL_NO_RSA
 | 
				
			||||||
				if (pkey->type == EVP_PKEY_RSA)
 | 
									if (pkey->type == EVP_PKEY_RSA)
 | 
				
			||||||
					BN_print(STDout,pkey->pkey.rsa->n);
 | 
										BN_print(STDout,pkey->pkey.rsa->n);
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
				if (pkey->type == EVP_PKEY_DSA)
 | 
									if (pkey->type == EVP_PKEY_DSA)
 | 
				
			||||||
					BN_print(STDout,pkey->pkey.dsa->pub_key);
 | 
										BN_print(STDout,pkey->pkey.dsa->pub_key);
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
@@ -752,10 +772,11 @@ bad:
 | 
				
			|||||||
				int y,z;
 | 
									int y,z;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				X509_NAME_oneline(X509_get_subject_name(x),
 | 
									X509_NAME_oneline(X509_get_subject_name(x),
 | 
				
			||||||
					buf,256);
 | 
										buf,sizeof buf);
 | 
				
			||||||
				BIO_printf(STDout,"/* subject:%s */\n",buf);
 | 
									BIO_printf(STDout,"/* subject:%s */\n",buf);
 | 
				
			||||||
				m=X509_NAME_oneline(
 | 
									m=X509_NAME_oneline(
 | 
				
			||||||
					X509_get_issuer_name(x),buf,256);
 | 
										X509_get_issuer_name(x),buf,
 | 
				
			||||||
 | 
										sizeof buf);
 | 
				
			||||||
				BIO_printf(STDout,"/* issuer :%s */\n",buf);
 | 
									BIO_printf(STDout,"/* issuer :%s */\n",buf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				z=i2d_X509(x,NULL);
 | 
									z=i2d_X509(x,NULL);
 | 
				
			||||||
@@ -801,7 +822,7 @@ bad:
 | 
				
			|||||||
				}
 | 
									}
 | 
				
			||||||
			else if (text == i)
 | 
								else if (text == i)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
				X509_print(out,x);
 | 
									X509_print_ex(out,x,nmflag, certflag);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			else if (startdate == i)
 | 
								else if (startdate == i)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
@@ -843,10 +864,11 @@ bad:
 | 
				
			|||||||
				if (Upkey == NULL)
 | 
									if (Upkey == NULL)
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
					Upkey=load_key(bio_err,
 | 
										Upkey=load_key(bio_err,
 | 
				
			||||||
						keyfile,keyformat, passin);
 | 
											keyfile, keyformat, 0,
 | 
				
			||||||
 | 
											passin, e, "Private key");
 | 
				
			||||||
					if (Upkey == NULL) goto end;
 | 
										if (Upkey == NULL) goto end;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
		                if (Upkey->type == EVP_PKEY_DSA)
 | 
							                if (Upkey->type == EVP_PKEY_DSA)
 | 
				
			||||||
		                        digest=EVP_dss1();
 | 
							                        digest=EVP_dss1();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -861,10 +883,12 @@ bad:
 | 
				
			|||||||
				if (CAkeyfile != NULL)
 | 
									if (CAkeyfile != NULL)
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
					CApkey=load_key(bio_err,
 | 
										CApkey=load_key(bio_err,
 | 
				
			||||||
						CAkeyfile,CAkeyformat, passin);
 | 
											CAkeyfile, CAkeyformat,
 | 
				
			||||||
 | 
											0, passin, e,
 | 
				
			||||||
 | 
											"CA Private Key");
 | 
				
			||||||
					if (CApkey == NULL) goto end;
 | 
										if (CApkey == NULL) goto end;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
		                if (CApkey->type == EVP_PKEY_DSA)
 | 
							                if (CApkey->type == EVP_PKEY_DSA)
 | 
				
			||||||
		                        digest=EVP_dss1();
 | 
							                        digest=EVP_dss1();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -872,7 +896,7 @@ bad:
 | 
				
			|||||||
				assert(need_rand);
 | 
									assert(need_rand);
 | 
				
			||||||
				if (!x509_certify(ctx,CAfile,digest,x,xca,
 | 
									if (!x509_certify(ctx,CAfile,digest,x,xca,
 | 
				
			||||||
					CApkey, CAserial,CA_createserial,days, clrext,
 | 
										CApkey, CAserial,CA_createserial,days, clrext,
 | 
				
			||||||
					extconf, extsect))
 | 
										extconf, extsect, sno))
 | 
				
			||||||
					goto end;
 | 
										goto end;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			else if (x509req == i)
 | 
								else if (x509req == i)
 | 
				
			||||||
@@ -888,13 +912,14 @@ bad:
 | 
				
			|||||||
				else
 | 
									else
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
					pk=load_key(bio_err,
 | 
										pk=load_key(bio_err,
 | 
				
			||||||
						keyfile,FORMAT_PEM, passin);
 | 
											keyfile, FORMAT_PEM, 0,
 | 
				
			||||||
 | 
											passin, e, "request key");
 | 
				
			||||||
					if (pk == NULL) goto end;
 | 
										if (pk == NULL) goto end;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				BIO_printf(bio_err,"Generating certificate request\n");
 | 
									BIO_printf(bio_err,"Generating certificate request\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_DSA
 | 
					#ifndef OPENSSL_NO_DSA
 | 
				
			||||||
		                if (pk->type == EVP_PKEY_DSA)
 | 
							                if (pk->type == EVP_PKEY_DSA)
 | 
				
			||||||
		                        digest=EVP_dss1();
 | 
							                        digest=EVP_dss1();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -913,6 +938,10 @@ bad:
 | 
				
			|||||||
					}
 | 
										}
 | 
				
			||||||
				noout=1;
 | 
									noout=1;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
								else if (ocspid == i)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
									X509_ocspid_print(out, x);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -975,7 +1004,7 @@ end:
 | 
				
			|||||||
	if (need_rand)
 | 
						if (need_rand)
 | 
				
			||||||
		app_RAND_write_file(NULL, bio_err);
 | 
							app_RAND_write_file(NULL, bio_err);
 | 
				
			||||||
	OBJ_cleanup();
 | 
						OBJ_cleanup();
 | 
				
			||||||
	CONF_free(extconf);
 | 
						NCONF_free(extconf);
 | 
				
			||||||
	BIO_free_all(out);
 | 
						BIO_free_all(out);
 | 
				
			||||||
	BIO_free_all(STDout);
 | 
						BIO_free_all(STDout);
 | 
				
			||||||
	X509_STORE_free(ctx);
 | 
						X509_STORE_free(ctx);
 | 
				
			||||||
@@ -985,48 +1014,39 @@ end:
 | 
				
			|||||||
	EVP_PKEY_free(Upkey);
 | 
						EVP_PKEY_free(Upkey);
 | 
				
			||||||
	EVP_PKEY_free(CApkey);
 | 
						EVP_PKEY_free(CApkey);
 | 
				
			||||||
	X509_REQ_free(rq);
 | 
						X509_REQ_free(rq);
 | 
				
			||||||
 | 
						ASN1_INTEGER_free(sno);
 | 
				
			||||||
	sk_ASN1_OBJECT_pop_free(trust, ASN1_OBJECT_free);
 | 
						sk_ASN1_OBJECT_pop_free(trust, ASN1_OBJECT_free);
 | 
				
			||||||
	sk_ASN1_OBJECT_pop_free(reject, ASN1_OBJECT_free);
 | 
						sk_ASN1_OBJECT_pop_free(reject, ASN1_OBJECT_free);
 | 
				
			||||||
	if (passin) OPENSSL_free(passin);
 | 
						if (passin) OPENSSL_free(passin);
 | 
				
			||||||
	EXIT(ret);
 | 
						apps_shutdown();
 | 
				
			||||||
 | 
						OPENSSL_EXIT(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
 | 
					static ASN1_INTEGER *x509_load_serial(char *CAfile, char *serialfile, int create)
 | 
				
			||||||
	     X509 *x, X509 *xca, EVP_PKEY *pkey, char *serialfile, int create,
 | 
					 | 
				
			||||||
	     int days, int clrext, LHASH *conf, char *section)
 | 
					 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	int ret=0;
 | 
						char *buf = NULL, *p;
 | 
				
			||||||
	BIO *io=NULL;
 | 
						ASN1_INTEGER *bs = NULL;
 | 
				
			||||||
	MS_STATIC char buf2[1024];
 | 
						BIGNUM *serial = NULL;
 | 
				
			||||||
	char *buf=NULL,*p;
 | 
						size_t len;
 | 
				
			||||||
	BIGNUM *serial=NULL;
 | 
					 | 
				
			||||||
	ASN1_INTEGER *bs=NULL,bs2;
 | 
					 | 
				
			||||||
	X509_STORE_CTX xsc;
 | 
					 | 
				
			||||||
	EVP_PKEY *upkey;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	upkey = X509_get_pubkey(xca);
 | 
						len = ((serialfile == NULL)
 | 
				
			||||||
	EVP_PKEY_copy_parameters(upkey,pkey);
 | 
							?(strlen(CAfile)+strlen(POSTFIX)+1)
 | 
				
			||||||
	EVP_PKEY_free(upkey);
 | 
							:(strlen(serialfile)))+1;
 | 
				
			||||||
 | 
						buf=OPENSSL_malloc(len);
 | 
				
			||||||
	X509_STORE_CTX_init(&xsc,ctx,x,NULL);
 | 
					 | 
				
			||||||
	buf=OPENSSL_malloc(EVP_PKEY_size(pkey)*2+
 | 
					 | 
				
			||||||
		((serialfile == NULL)
 | 
					 | 
				
			||||||
			?(strlen(CAfile)+strlen(POSTFIX)+1)
 | 
					 | 
				
			||||||
			:(strlen(serialfile)))+1);
 | 
					 | 
				
			||||||
	if (buf == NULL) { BIO_printf(bio_err,"out of mem\n"); goto end; }
 | 
						if (buf == NULL) { BIO_printf(bio_err,"out of mem\n"); goto end; }
 | 
				
			||||||
	if (serialfile == NULL)
 | 
						if (serialfile == NULL)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		strcpy(buf,CAfile);
 | 
							BUF_strlcpy(buf,CAfile,len);
 | 
				
			||||||
		for (p=buf; *p; p++)
 | 
							for (p=buf; *p; p++)
 | 
				
			||||||
			if (*p == '.')
 | 
								if (*p == '.')
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
				*p='\0';
 | 
									*p='\0';
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
		strcat(buf,POSTFIX);
 | 
							BUF_strlcat(buf,POSTFIX,len);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		strcpy(buf,serialfile);
 | 
							BUF_strlcpy(buf,serialfile,len);
 | 
				
			||||||
	serial=BN_new();
 | 
						serial=BN_new();
 | 
				
			||||||
	bs=ASN1_INTEGER_new();
 | 
						bs=ASN1_INTEGER_new();
 | 
				
			||||||
	if ((serial == NULL) || (bs == NULL))
 | 
						if ((serial == NULL) || (bs == NULL))
 | 
				
			||||||
@@ -1035,62 +1055,43 @@ static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
 | 
				
			|||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	io=BIO_new(BIO_s_file());
 | 
						serial = load_serial(buf, create, NULL);
 | 
				
			||||||
	if (io == NULL)
 | 
						if (serial == NULL) goto end;
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
		ERR_print_errors(bio_err);
 | 
					 | 
				
			||||||
		goto end;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	if (BIO_read_filename(io,buf) <= 0)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
		if (!create)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			perror(buf);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			ASN1_INTEGER_set(bs,1);
 | 
					 | 
				
			||||||
			BN_one(serial);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	else 
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
		if (!a2i_ASN1_INTEGER(io,bs,buf2,1024))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			BIO_printf(bio_err,"unable to load serial number from %s\n",buf);
 | 
					 | 
				
			||||||
			ERR_print_errors(bio_err);
 | 
					 | 
				
			||||||
			goto end;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
			serial=BN_bin2bn(bs->data,bs->length,serial);
 | 
					 | 
				
			||||||
			if (serial == NULL)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
				BIO_printf(bio_err,"error converting bin 2 bn");
 | 
					 | 
				
			||||||
				goto end;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!BN_add_word(serial,1))
 | 
						if (!BN_add_word(serial,1))
 | 
				
			||||||
		{ BIO_printf(bio_err,"add_word failure\n"); goto end; }
 | 
							{ BIO_printf(bio_err,"add_word failure\n"); goto end; }
 | 
				
			||||||
	bs2.data=(unsigned char *)buf2;
 | 
					 | 
				
			||||||
	bs2.length=BN_bn2bin(serial,bs2.data);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (BIO_write_filename(io,buf) <= 0)
 | 
						if (!save_serial(buf, NULL, serial, &bs)) goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 end:
 | 
				
			||||||
 | 
						if (buf) OPENSSL_free(buf);
 | 
				
			||||||
 | 
						BN_free(serial);
 | 
				
			||||||
 | 
						return bs;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
 | 
				
			||||||
 | 
						     X509 *x, X509 *xca, EVP_PKEY *pkey, char *serialfile, int create,
 | 
				
			||||||
 | 
						     int days, int clrext, CONF *conf, char *section, ASN1_INTEGER *sno)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						int ret=0;
 | 
				
			||||||
 | 
						ASN1_INTEGER *bs=NULL;
 | 
				
			||||||
 | 
						X509_STORE_CTX xsc;
 | 
				
			||||||
 | 
						EVP_PKEY *upkey;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						upkey = X509_get_pubkey(xca);
 | 
				
			||||||
 | 
						EVP_PKEY_copy_parameters(upkey,pkey);
 | 
				
			||||||
 | 
						EVP_PKEY_free(upkey);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(!X509_STORE_CTX_init(&xsc,ctx,x,NULL))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		BIO_printf(bio_err,"error attempting to write serial number file\n");
 | 
							BIO_printf(bio_err,"Error initialising X509 store\n");
 | 
				
			||||||
		perror(buf);
 | 
					 | 
				
			||||||
		goto end;
 | 
							goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	i2a_ASN1_INTEGER(io,&bs2);
 | 
						if (sno) bs = sno;
 | 
				
			||||||
	BIO_puts(io,"\n");
 | 
						else if (!(bs = x509_load_serial(CAfile, serialfile, create)))
 | 
				
			||||||
	BIO_free(io);
 | 
							goto end;
 | 
				
			||||||
	io=NULL;
 | 
					
 | 
				
			||||||
	
 | 
					/*	if (!X509_STORE_add_cert(ctx,x)) goto end;*/
 | 
				
			||||||
	if (!X509_STORE_add_cert(ctx,x)) goto end;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* NOTE: this certificate can/should be self signed, unless it was
 | 
						/* NOTE: this certificate can/should be self signed, unless it was
 | 
				
			||||||
	 * a certificate request in which case it is not. */
 | 
						 * a certificate request in which case it is not. */
 | 
				
			||||||
@@ -1124,8 +1125,8 @@ static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
 | 
				
			|||||||
		X509V3_CTX ctx2;
 | 
							X509V3_CTX ctx2;
 | 
				
			||||||
		X509_set_version(x,2); /* version 3 certificate */
 | 
							X509_set_version(x,2); /* version 3 certificate */
 | 
				
			||||||
                X509V3_set_ctx(&ctx2, xca, x, NULL, NULL, 0);
 | 
					                X509V3_set_ctx(&ctx2, xca, x, NULL, NULL, 0);
 | 
				
			||||||
                X509V3_set_conf_lhash(&ctx2, conf);
 | 
					                X509V3_set_nconf(&ctx2, conf);
 | 
				
			||||||
                if (!X509V3_EXT_add_conf(conf, &ctx2, section, x)) goto end;
 | 
					                if (!X509V3_EXT_add_nconf(conf, &ctx2, section, x)) goto end;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!X509_sign(x,pkey,digest)) goto end;
 | 
						if (!X509_sign(x,pkey,digest)) goto end;
 | 
				
			||||||
@@ -1134,10 +1135,7 @@ end:
 | 
				
			|||||||
	X509_STORE_CTX_cleanup(&xsc);
 | 
						X509_STORE_CTX_cleanup(&xsc);
 | 
				
			||||||
	if (!ret)
 | 
						if (!ret)
 | 
				
			||||||
		ERR_print_errors(bio_err);
 | 
							ERR_print_errors(bio_err);
 | 
				
			||||||
	if (buf != NULL) OPENSSL_free(buf);
 | 
						if (!sno) ASN1_INTEGER_free(bs);
 | 
				
			||||||
	if (bs != NULL) ASN1_INTEGER_free(bs);
 | 
					 | 
				
			||||||
	if (io != NULL)	BIO_free(io);
 | 
					 | 
				
			||||||
	if (serial != NULL) BN_free(serial);
 | 
					 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1174,7 +1172,7 @@ static int MS_CALLBACK callb(int ok, X509_STORE_CTX *ctx)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* self sign */
 | 
					/* self sign */
 | 
				
			||||||
static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext, const EVP_MD *digest, 
 | 
					static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext, const EVP_MD *digest, 
 | 
				
			||||||
						LHASH *conf, char *section)
 | 
											CONF *conf, char *section)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	EVP_PKEY *pktmp;
 | 
						EVP_PKEY *pktmp;
 | 
				
			||||||
@@ -1204,8 +1202,8 @@ static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext, const EVP_MD *dig
 | 
				
			|||||||
		X509V3_CTX ctx;
 | 
							X509V3_CTX ctx;
 | 
				
			||||||
		X509_set_version(x,2); /* version 3 certificate */
 | 
							X509_set_version(x,2); /* version 3 certificate */
 | 
				
			||||||
                X509V3_set_ctx(&ctx, x, x, NULL, NULL, 0);
 | 
					                X509V3_set_ctx(&ctx, x, x, NULL, NULL, 0);
 | 
				
			||||||
                X509V3_set_conf_lhash(&ctx, conf);
 | 
					                X509V3_set_nconf(&ctx, conf);
 | 
				
			||||||
                if (!X509V3_EXT_add_conf(conf, &ctx, section, x)) goto err;
 | 
					                if (!X509V3_EXT_add_nconf(conf, &ctx, section, x)) goto err;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	if (!X509_sign(x,pkey,digest)) goto err;
 | 
						if (!X509_sign(x,pkey,digest)) goto err;
 | 
				
			||||||
	return 1;
 | 
						return 1;
 | 
				
			||||||
@@ -1230,6 +1228,3 @@ static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	return 1;
 | 
						return 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,7 @@ RC4-MD5, but a re-connect tries to use DES-CBC-SHA.  So netscape, when
 | 
				
			|||||||
doing a re-connect, always takes the first cipher in the cipher list.
 | 
					doing a re-connect, always takes the first cipher in the cipher list.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If we accept a netscape connection, demand a client cert, have a
 | 
					If we accept a netscape connection, demand a client cert, have a
 | 
				
			||||||
non-self-sighed CA which does not have it's CA in netscape, and the
 | 
					non-self-signed CA which does not have it's CA in netscape, and the
 | 
				
			||||||
browser has a cert, it will crash/hang.  Works for 3.x and 4.xbeta
 | 
					browser has a cert, it will crash/hang.  Works for 3.x and 4.xbeta
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Netscape browsers do not really notice the server sending a
 | 
					Netscape browsers do not really notice the server sending a
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -58,7 +58,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <openssl/rc4.h>
 | 
					#include <openssl/rc4.h>
 | 
				
			||||||
#ifdef NO_DES
 | 
					#ifdef OPENSSL_NO_DES
 | 
				
			||||||
#include <des.h>
 | 
					#include <des.h>
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#include <openssl/des.h>
 | 
					#include <openssl/des.h>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										19
									
								
								certs/RegTP-4R.pem
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								certs/RegTP-4R.pem
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					issuer= CN=4R-CA 1:PN+0.2.262.1.10.7.20=#130131,O=Regulierungsbeh\C3\88orde f\C3\88ur Telekommunikation und Post,C=DE
 | 
				
			||||||
 | 
					notBefore=Jan 21 16:04:53 1999 GMT
 | 
				
			||||||
 | 
					notAfter=Jan 21 16:04:53 2004 GMT
 | 
				
			||||||
 | 
					subject= CN=4R-CA 1:PN+0.2.262.1.10.7.20=#130131,O=Regulierungsbeh\C3\88orde f\C3\88ur Telekommunikation und Post,C=DE
 | 
				
			||||||
 | 
					-----BEGIN CERTIFICATE-----
 | 
				
			||||||
 | 
					MIICZzCCAdOgAwIBAgIEOwVn1DAKBgYrJAMDAQIFADBvMQswCQYDVQQGEwJERTE9
 | 
				
			||||||
 | 
					MDsGA1UEChQ0UmVndWxpZXJ1bmdzYmVoyG9yZGUgZsh1ciBUZWxla29tbXVuaWth
 | 
				
			||||||
 | 
					dGlvbiB1bmQgUG9zdDEhMAwGBwKCBgEKBxQTATEwEQYDVQQDFAo0Ui1DQSAxOlBO
 | 
				
			||||||
 | 
					MCIYDzE5OTkwMTIxMTYwNDUzWhgPMjAwNDAxMjExNjA0NTNaMG8xCzAJBgNVBAYT
 | 
				
			||||||
 | 
					AkRFMT0wOwYDVQQKFDRSZWd1bGllcnVuZ3NiZWjIb3JkZSBmyHVyIFRlbGVrb21t
 | 
				
			||||||
 | 
					dW5pa2F0aW9uIHVuZCBQb3N0MSEwDAYHAoIGAQoHFBMBMTARBgNVBAMUCjRSLUNB
 | 
				
			||||||
 | 
					IDE6UE4wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGAjzHbq2asUlqeWbXTQHso
 | 
				
			||||||
 | 
					aVF6YIPVH3c/B2cbuy9HJ/lnE6x0asOzM2DGDqi47xkdAxPc0LZ0fxO87rkmz7xs
 | 
				
			||||||
 | 
					jJObnVrMXpyUSDSp5Y0wqKJdsFdr6mGFOQZteIti8AJnr8xMkwnWVyuOlEXsFe1h
 | 
				
			||||||
 | 
					5gxwQXrOcPinE6qu1t/3PmECBMAAAAGjEjAQMA4GA1UdDwEB/wQEAwIBBjAKBgYr
 | 
				
			||||||
 | 
					JAMDAQIFAAOBgQA+RdocBmA2VV9E5aKPBcp01tdZAvvW9Tve3docArVKR/4/yvSX
 | 
				
			||||||
 | 
					Z+wvzzk+uu4qBp49HN3nqPYMrzbTmjBFu4ce5fkZ7dHF0W1sSBL0rox5z36Aq2re
 | 
				
			||||||
 | 
					JjfEOEmSnNe0+opuh4FSVOssXblXTE8lEQU0FhhItgDx2ADnWZibaxLG4w==
 | 
				
			||||||
 | 
					-----END CERTIFICATE-----
 | 
				
			||||||
							
								
								
									
										19
									
								
								certs/RegTP-5R.pem
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								certs/RegTP-5R.pem
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					issuer= CN=5R-CA 1:PN+0.2.262.1.10.7.20=#130131,O=Regulierungsbeh\C3\88orde f\C3\88ur Telekommunikation und Post,C=DE
 | 
				
			||||||
 | 
					notBefore=Mar 22 08:55:51 2000 GMT
 | 
				
			||||||
 | 
					notAfter=Mar 22 08:55:51 2005 GMT
 | 
				
			||||||
 | 
					subject= CN=5R-CA 1:PN+0.2.262.1.10.7.20=#130131,O=Regulierungsbeh\C3\88orde f\C3\88ur Telekommunikation und Post,C=DE
 | 
				
			||||||
 | 
					-----BEGIN CERTIFICATE-----
 | 
				
			||||||
 | 
					MIICaDCCAdSgAwIBAgIDDIOqMAoGBiskAwMBAgUAMG8xCzAJBgNVBAYTAkRFMT0w
 | 
				
			||||||
 | 
					OwYDVQQKFDRSZWd1bGllcnVuZ3NiZWjIb3JkZSBmyHVyIFRlbGVrb21tdW5pa2F0
 | 
				
			||||||
 | 
					aW9uIHVuZCBQb3N0MSEwDAYHAoIGAQoHFBMBMTARBgNVBAMUCjVSLUNBIDE6UE4w
 | 
				
			||||||
 | 
					IhgPMjAwMDAzMjIwODU1NTFaGA8yMDA1MDMyMjA4NTU1MVowbzELMAkGA1UEBhMC
 | 
				
			||||||
 | 
					REUxPTA7BgNVBAoUNFJlZ3VsaWVydW5nc2JlaMhvcmRlIGbIdXIgVGVsZWtvbW11
 | 
				
			||||||
 | 
					bmlrYXRpb24gdW5kIFBvc3QxITAMBgcCggYBCgcUEwExMBEGA1UEAxQKNVItQ0Eg
 | 
				
			||||||
 | 
					MTpQTjCBoTANBgkqhkiG9w0BAQEFAAOBjwAwgYsCgYEAih5BUycfBpqKhU8RDsaS
 | 
				
			||||||
 | 
					vV5AtzWeXQRColL9CH3t0DKnhjKAlJ8iccFtJNv+d3bh8bb9sh0maRSo647xP7hs
 | 
				
			||||||
 | 
					HTjKgTE4zM5BYNfXvST79OtcMgAzrnDiGjQIIWv8xbfV1MqxxdtZJygrwzRMb9jG
 | 
				
			||||||
 | 
					CAGoJEymoyzAMNG7tSdBWnUCBQDAAAABoxIwEDAOBgNVHQ8BAf8EBAMCAQYwCgYG
 | 
				
			||||||
 | 
					KyQDAwECBQADgYEAOaK8ihVSBUcL2IdVBxZYYUKwMz5m7H3zqhN8W9w+iafWudH6
 | 
				
			||||||
 | 
					b+aahkbENEwzg3C3v5g8nze7v7ssacQze657LHjP+e7ksUDIgcS4R1pU2eN16bjS
 | 
				
			||||||
 | 
					P/qGPF3rhrIEHoK5nJULkjkZYTtNiOvmQ/+G70TXDi3Os/TwLlWRvu+7YLM=
 | 
				
			||||||
 | 
					-----END CERTIFICATE-----
 | 
				
			||||||
							
								
								
									
										19
									
								
								certs/RegTP-6R.pem
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								certs/RegTP-6R.pem
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					issuer= CN=6R-Ca 1:PN+0.2.262.1.10.7.20=#130131,O=Regulierungsbeh\C3\88orde f\C3\88ur Telekommunikation und Post,C=DE
 | 
				
			||||||
 | 
					notBefore=Feb  1 09:52:17 2001 GMT
 | 
				
			||||||
 | 
					notAfter=Jun  1 09:52:17 2005 GMT
 | 
				
			||||||
 | 
					subject= CN=6R-Ca 1:PN+0.2.262.1.10.7.20=#130131,O=Regulierungsbeh\C3\88orde f\C3\88ur Telekommunikation und Post,C=DE
 | 
				
			||||||
 | 
					-----BEGIN CERTIFICATE-----
 | 
				
			||||||
 | 
					MIICaDCCAdSgAwIBAgIDMtGNMAoGBiskAwMBAgUAMG8xCzAJBgNVBAYTAkRFMT0w
 | 
				
			||||||
 | 
					OwYDVQQKFDRSZWd1bGllcnVuZ3NiZWjIb3JkZSBmyHVyIFRlbGVrb21tdW5pa2F0
 | 
				
			||||||
 | 
					aW9uIHVuZCBQb3N0MSEwDAYHAoIGAQoHFBMBMTARBgNVBAMUCjZSLUNhIDE6UE4w
 | 
				
			||||||
 | 
					IhgPMjAwMTAyMDEwOTUyMTdaGA8yMDA1MDYwMTA5NTIxN1owbzELMAkGA1UEBhMC
 | 
				
			||||||
 | 
					REUxPTA7BgNVBAoUNFJlZ3VsaWVydW5nc2JlaMhvcmRlIGbIdXIgVGVsZWtvbW11
 | 
				
			||||||
 | 
					bmlrYXRpb24gdW5kIFBvc3QxITAMBgcCggYBCgcUEwExMBEGA1UEAxQKNlItQ2Eg
 | 
				
			||||||
 | 
					MTpQTjCBoTANBgkqhkiG9w0BAQEFAAOBjwAwgYsCgYEAg6KrFSTNXKqe+2GKGeW2
 | 
				
			||||||
 | 
					wTmbVeflNkp5H/YxA9K1zmEn5XjKm0S0jH4Wfms6ipPlURVaFwTfnB1s++AnJAWf
 | 
				
			||||||
 | 
					mayaE9BP/pdIY6WtZGgW6aZc32VDMCMKPWyBNyagsJVDmzlakIA5cXBVa7Xqqd3P
 | 
				
			||||||
 | 
					ew8i2feMnQXcqHfDv02CW88CBQDAAAABoxIwEDAOBgNVHQ8BAf8EBAMCAQYwCgYG
 | 
				
			||||||
 | 
					KyQDAwECBQADgYEAOkqkUwdaTCt8wcJLA2zLuOwL5ADHMWLhv6gr5zEF+VckA6qe
 | 
				
			||||||
 | 
					IVLVf8e7fYlRmzQd+5OJcGglCQJLGT+ZplI3Mjnrd4plkoTNKV4iOzBcvJD7K4tn
 | 
				
			||||||
 | 
					XPvs9wCFcC7QU7PLvc1FDsAlr7e4wyefZRDL+wbqNfI7QZTSF1ubLd9AzeQ=
 | 
				
			||||||
 | 
					-----END CERTIFICATE-----
 | 
				
			||||||
							
								
								
									
										18
									
								
								certs/expired/vsign3.pem
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								certs/expired/vsign3.pem
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					subject=/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
				
			||||||
 | 
					notBefore=Jan 29 00:00:00 1996 GMT
 | 
				
			||||||
 | 
					notAfter=Jan  7 23:59:59 2004 GMT
 | 
				
			||||||
 | 
					-----BEGIN CERTIFICATE-----
 | 
				
			||||||
 | 
					MIICPTCCAaYCEQDknv3zOugOz6URPhmkJAIyMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
 | 
				
			||||||
 | 
					BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
 | 
				
			||||||
 | 
					c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
 | 
				
			||||||
 | 
					NjAxMjkwMDAwMDBaFw0wNDAxMDcyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
 | 
				
			||||||
 | 
					VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJp
 | 
				
			||||||
 | 
					bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
 | 
				
			||||||
 | 
					jQAwgYkCgYEAyVxZnvIbigEUtBDfBEDb41evakVAj4QMC9Ez2dkRz+4CWB8l9yqo
 | 
				
			||||||
 | 
					RAWq7AMfeH+ek7maAKojfdashaJjRcdyJ8z0TMZ1cdI5709C8HXfCpDGjiBvmA/4
 | 
				
			||||||
 | 
					rCNfcCk2pMmG57GaIMtTpYXnPb59mv4kRTPcdhXtD6JxZExlLoFoRacCAwEAATAN
 | 
				
			||||||
 | 
					BgkqhkiG9w0BAQIFAAOBgQBhcOwvP579K+ZoVCGwZ3kIDCCWMYoNer62Jt95LCJp
 | 
				
			||||||
 | 
					STbjl3diYaIy13pUITa6Ask05yXaRDWw0lyAXbOU+Pms7qRgdSoflUkjsUp89LNH
 | 
				
			||||||
 | 
					ciFbfperVKxi513srpvSybIk+4Kt6WcVS7qqpvCXoPawl1cAyAw8CaCCBLpB2veZ
 | 
				
			||||||
 | 
					pA==
 | 
				
			||||||
 | 
					-----END CERTIFICATE-----
 | 
				
			||||||
@@ -1,18 +1,17 @@
 | 
				
			|||||||
subject=/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
					subject=/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 | 
				
			||||||
notBefore=Jan 29 00:00:00 1996 GMT
 | 
					notBefore=Jan 29 00:00:00 1996 GMT
 | 
				
			||||||
notAfter=Jan  7 23:59:59 2004 GMT
 | 
					notAfter=Aug  1 23:59:59 2028 GMT
 | 
				
			||||||
-----BEGIN CERTIFICATE-----
 | 
					-----BEGIN CERTIFICATE-----
 | 
				
			||||||
MIICPTCCAaYCEQDknv3zOugOz6URPhmkJAIyMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
 | 
					MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
 | 
				
			||||||
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
 | 
					A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
 | 
				
			||||||
c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
 | 
					cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
 | 
				
			||||||
NjAxMjkwMDAwMDBaFw0wNDAxMDcyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
 | 
					MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
 | 
				
			||||||
VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJp
 | 
					BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
 | 
				
			||||||
bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
 | 
					YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
 | 
				
			||||||
jQAwgYkCgYEAyVxZnvIbigEUtBDfBEDb41evakVAj4QMC9Ez2dkRz+4CWB8l9yqo
 | 
					ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
 | 
				
			||||||
RAWq7AMfeH+ek7maAKojfdashaJjRcdyJ8z0TMZ1cdI5709C8HXfCpDGjiBvmA/4
 | 
					BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
 | 
				
			||||||
rCNfcCk2pMmG57GaIMtTpYXnPb59mv4kRTPcdhXtD6JxZExlLoFoRacCAwEAATAN
 | 
					I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
 | 
				
			||||||
BgkqhkiG9w0BAQIFAAOBgQBhcOwvP579K+ZoVCGwZ3kIDCCWMYoNer62Jt95LCJp
 | 
					CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
 | 
				
			||||||
STbjl3diYaIy13pUITa6Ask05yXaRDWw0lyAXbOU+Pms7qRgdSoflUkjsUp89LNH
 | 
					lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
 | 
				
			||||||
ciFbfperVKxi513srpvSybIk+4Kt6WcVS7qqpvCXoPawl1cAyAw8CaCCBLpB2veZ
 | 
					AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
 | 
				
			||||||
pA==
 | 
					 | 
				
			||||||
-----END CERTIFICATE-----
 | 
					-----END CERTIFICATE-----
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										378
									
								
								config
									
									
									
									
									
								
							
							
						
						
									
										378
									
								
								config
									
									
									
									
									
								
							@@ -20,6 +20,31 @@
 | 
				
			|||||||
# Be as similar to the output of config.guess/config.sub
 | 
					# Be as similar to the output of config.guess/config.sub
 | 
				
			||||||
# as possible.
 | 
					# as possible.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PREFIX=""
 | 
				
			||||||
 | 
					SUFFIX=""
 | 
				
			||||||
 | 
					TEST="false"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# pick up any command line args to config
 | 
				
			||||||
 | 
					for i
 | 
				
			||||||
 | 
					do
 | 
				
			||||||
 | 
					case "$i" in 
 | 
				
			||||||
 | 
					-d*) PREFIX="debug-";;
 | 
				
			||||||
 | 
					-t*) TEST="true";;
 | 
				
			||||||
 | 
					-h*) TEST="true"; cat <<EOF
 | 
				
			||||||
 | 
					Usage: config [options]
 | 
				
			||||||
 | 
					 -d	Add a debug- prefix to machine choice.
 | 
				
			||||||
 | 
					 -t	Test mode, do not run the Configure perl script.
 | 
				
			||||||
 | 
					 -h	This help.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Any other text will be passed to the Configure perl script.
 | 
				
			||||||
 | 
					See INSTALL for instructions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					;;
 | 
				
			||||||
 | 
					*) options=$options" $i" ;;
 | 
				
			||||||
 | 
					esac
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# First get uname entries that we use below
 | 
					# First get uname entries that we use below
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MACHINE=`(uname -m) 2>/dev/null` || MACHINE="unknown"
 | 
					MACHINE=`(uname -m) 2>/dev/null` || MACHINE="unknown"
 | 
				
			||||||
@@ -49,34 +74,27 @@ if [ "x$XREL" != "x" ]; then
 | 
				
			|||||||
		echo "whatever-whatever-sco5"; exit 0
 | 
							echo "whatever-whatever-sco5"; exit 0
 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
	    4.2MP)
 | 
						    4.2MP)
 | 
				
			||||||
		if [ "x$VERSION" = "x2.01" ]; then
 | 
							case "x${VERSION}" in
 | 
				
			||||||
		    echo "${MACHINE}-whatever-unixware201"; exit 0
 | 
							    x2.0*) echo "whatever-whatever-unixware20"; exit 0 ;;
 | 
				
			||||||
		elif [ "x$VERSION" = "x2.02" ]; then
 | 
							    x2.1*) echo "whatever-whatever-unixware21"; exit 0 ;;
 | 
				
			||||||
		    echo "${MACHINE}-whatever-unixware202"; exit 0
 | 
							    x2*)   echo "whatever-whatever-unixware2";  exit 0 ;;
 | 
				
			||||||
		elif [ "x$VERSION" = "x2.03" ]; then
 | 
							esac
 | 
				
			||||||
		    echo "${MACHINE}-whatever-unixware203"; exit 0
 | 
					 | 
				
			||||||
		elif [ "x$VERSION" = "x2.1.1" ]; then
 | 
					 | 
				
			||||||
		    echo "${MACHINE}-whatever-unixware211"; exit 0
 | 
					 | 
				
			||||||
		elif [ "x$VERSION" = "x2.1.2" ]; then
 | 
					 | 
				
			||||||
		    echo "${MACHINE}-whatever-unixware212"; exit 0
 | 
					 | 
				
			||||||
		elif [ "x$VERSION" = "x2.1.3" ]; then
 | 
					 | 
				
			||||||
		    echo "${MACHINE}-whatever-unixware213"; exit 0
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
		    echo "${MACHINE}-whatever-unixware2"; exit 0
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
	    4.2)
 | 
						    4.2)
 | 
				
			||||||
		echo "whatever-whatever-unixware1"; exit 0
 | 
							echo "i386-whatever-unixware1"; exit 0
 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
     OpenUNIX)
 | 
					 | 
				
			||||||
		if [ "`echo x$VERSION | sed -e 's/\..*//'`" = "x8" ]; then
 | 
					 | 
				
			||||||
		    echo "${MACHINE}-unknown-OpenUNIX${VERSION}"; exit 0
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
	    5)
 | 
						    5)
 | 
				
			||||||
		if [ "`echo x$VERSION | sed -e 's/\..*//'`" = "x7" ]; then
 | 
							case "x${VERSION}" in
 | 
				
			||||||
		    echo "${MACHINE}-sco-unixware7"; exit 0
 | 
							    # We hardcode i586 in place of ${MACHINE} for the
 | 
				
			||||||
		fi
 | 
							    # following reason. The catch is that even though Pentium
 | 
				
			||||||
 | 
							    # is minimum requirement for platforms in question,
 | 
				
			||||||
 | 
							    # ${MACHINE} gets always assigned to i386. Now, problem
 | 
				
			||||||
 | 
							    # with i386 is that it makes ./config pass 386 to
 | 
				
			||||||
 | 
							    # ./Configure, which in turn makes make generate
 | 
				
			||||||
 | 
							    # inefficient SHA-1 (for this moment) code.
 | 
				
			||||||
 | 
							    x7*)  echo "i586-sco-unixware7";           exit 0 ;;
 | 
				
			||||||
 | 
							    x8*)  echo "i586-unkn-OpenUNIX${VERSION}"; exit 0 ;;
 | 
				
			||||||
 | 
							esac
 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
	esac
 | 
						esac
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
@@ -115,11 +133,8 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
				
			|||||||
    HP-UX:*)
 | 
					    HP-UX:*)
 | 
				
			||||||
	HPUXVER=`echo ${RELEASE}|sed -e 's/[^.]*.[0B]*//'`
 | 
						HPUXVER=`echo ${RELEASE}|sed -e 's/[^.]*.[0B]*//'`
 | 
				
			||||||
	case "$HPUXVER" in
 | 
						case "$HPUXVER" in
 | 
				
			||||||
	    11.*)
 | 
						    1[0-9].*)	# HPUX 10 and 11 targets are unified
 | 
				
			||||||
		echo "${MACHINE}-hp-hpux11"; exit 0
 | 
							echo "${MACHINE}-hp-hpux1x"; exit 0
 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	    10.*)
 | 
					 | 
				
			||||||
		echo "${MACHINE}-hp-hpux10"; exit 0
 | 
					 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
	    *)
 | 
						    *)
 | 
				
			||||||
		echo "${MACHINE}-hp-hpux"; exit 0
 | 
							echo "${MACHINE}-hp-hpux"; exit 0
 | 
				
			||||||
@@ -147,6 +162,10 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
				
			|||||||
	echo "${MACHINE}-whatever-linux1"; exit 0
 | 
						echo "${MACHINE}-whatever-linux1"; exit 0
 | 
				
			||||||
	;;
 | 
						;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    GNU*)
 | 
				
			||||||
 | 
						echo "hurd-x86"; exit 0;
 | 
				
			||||||
 | 
						;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    LynxOS:*)
 | 
					    LynxOS:*)
 | 
				
			||||||
	echo "${MACHINE}-lynx-lynxos"; exit 0
 | 
						echo "${MACHINE}-lynx-lynxos"; exit 0
 | 
				
			||||||
	;;
 | 
						;;
 | 
				
			||||||
@@ -170,7 +189,7 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
				
			|||||||
	echo "${MACHINE}-whatever-bsdi"; exit 0
 | 
						echo "${MACHINE}-whatever-bsdi"; exit 0
 | 
				
			||||||
	;;
 | 
						;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    FreeBSD:*)
 | 
					    FreeBSD:*:*:*386*)
 | 
				
			||||||
        VERS=`echo ${RELEASE} | sed -e 's/[-(].*//'`
 | 
					        VERS=`echo ${RELEASE} | sed -e 's/[-(].*//'`
 | 
				
			||||||
        MACH=`sysctl -n hw.model`
 | 
					        MACH=`sysctl -n hw.model`
 | 
				
			||||||
        ARCH='whatever'
 | 
					        ARCH='whatever'
 | 
				
			||||||
@@ -179,7 +198,6 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
				
			|||||||
           *486*       ) MACH="i486"     ;;
 | 
					           *486*       ) MACH="i486"     ;;
 | 
				
			||||||
           Pentium\ II*) MACH="i686"     ;;
 | 
					           Pentium\ II*) MACH="i686"     ;;
 | 
				
			||||||
           Pentium*    ) MACH="i586"     ;;
 | 
					           Pentium*    ) MACH="i586"     ;;
 | 
				
			||||||
           Alpha*      ) MACH="alpha"    ;;
 | 
					 | 
				
			||||||
           *           ) MACH="$MACHINE" ;;
 | 
					           *           ) MACH="$MACHINE" ;;
 | 
				
			||||||
        esac
 | 
					        esac
 | 
				
			||||||
        case ${MACH} in
 | 
					        case ${MACH} in
 | 
				
			||||||
@@ -188,6 +206,10 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
				
			|||||||
        echo "${MACH}-${ARCH}-freebsd${VERS}"; exit 0
 | 
					        echo "${MACH}-${ARCH}-freebsd${VERS}"; exit 0
 | 
				
			||||||
        ;;
 | 
					        ;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    FreeBSD:*)
 | 
				
			||||||
 | 
						echo "${MACHINE}-whatever-freebsd"; exit 0
 | 
				
			||||||
 | 
						;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    NetBSD:*:*:*386*)
 | 
					    NetBSD:*:*:*386*)
 | 
				
			||||||
        echo "`(/usr/sbin/sysctl -n hw.model || /sbin/sysctl -n hw.model) | sed 's,.*\(.\)86-class.*,i\186,'`-whatever-netbsd"; exit 0
 | 
					        echo "`(/usr/sbin/sysctl -n hw.model || /sbin/sysctl -n hw.model) | sed 's,.*\(.\)86-class.*,i\186,'`-whatever-netbsd"; exit 0
 | 
				
			||||||
	;;
 | 
						;;
 | 
				
			||||||
@@ -243,7 +265,15 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
				
			|||||||
	;;
 | 
						;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Darwin:*)
 | 
					    Darwin:*)
 | 
				
			||||||
	echo "ppc-apple-darwin"; exit 0
 | 
						case "$MACHINE" in
 | 
				
			||||||
 | 
						    Power*)
 | 
				
			||||||
 | 
							echo "ppc-apple-darwin${VERSION}"
 | 
				
			||||||
 | 
							;;
 | 
				
			||||||
 | 
						    *)
 | 
				
			||||||
 | 
							echo "i386-apple-darwin${VERSION}"
 | 
				
			||||||
 | 
							;;
 | 
				
			||||||
 | 
						esac
 | 
				
			||||||
 | 
						exit 0
 | 
				
			||||||
	;;
 | 
						;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    SunOS:5.*)
 | 
					    SunOS:5.*)
 | 
				
			||||||
@@ -299,9 +329,28 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
 | 
				
			|||||||
	;;
 | 
						;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    CYGWIN*)
 | 
					    CYGWIN*)
 | 
				
			||||||
	echo "${MACHINE}-whatever-cygwin32"; exit 0
 | 
						case "$RELEASE" in
 | 
				
			||||||
 | 
						    [bB]*|1.0|1.[12].*)
 | 
				
			||||||
 | 
							echo "${MACHINE}-whatever-cygwin_pre1.3"
 | 
				
			||||||
 | 
							;;
 | 
				
			||||||
 | 
						    *)
 | 
				
			||||||
 | 
							echo "${MACHINE}-whatever-cygwin"
 | 
				
			||||||
 | 
							;;
 | 
				
			||||||
 | 
						esac
 | 
				
			||||||
 | 
						exit 0
 | 
				
			||||||
	;;
 | 
						;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    *"CRAY T3E")
 | 
				
			||||||
 | 
					       echo "t3e-cray-unicosmk"; exit 0;
 | 
				
			||||||
 | 
					       ;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    *CRAY*)
 | 
				
			||||||
 | 
					       echo "j90-cray-unicos"; exit 0;
 | 
				
			||||||
 | 
					       ;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    NONSTOP_KERNEL*)
 | 
				
			||||||
 | 
					       echo "nsr-tandem-nsk"; exit 0;
 | 
				
			||||||
 | 
					       ;;
 | 
				
			||||||
esac
 | 
					esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
@@ -339,45 +388,46 @@ exit 0
 | 
				
			|||||||
# this is where the translation occurs into SSLeay terms
 | 
					# this is where the translation occurs into SSLeay terms
 | 
				
			||||||
# ---------------------------------------------------------------------------
 | 
					# ---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PREFIX=""
 | 
					 | 
				
			||||||
SUFFIX=""
 | 
					 | 
				
			||||||
TEST="false"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# pick up any command line args to config
 | 
					 | 
				
			||||||
for i
 | 
					 | 
				
			||||||
do
 | 
					 | 
				
			||||||
case "$i" in 
 | 
					 | 
				
			||||||
-d*) PREFIX="debug-";;
 | 
					 | 
				
			||||||
-t*) TEST="true";;
 | 
					 | 
				
			||||||
-h*) TEST="true"; cat <<EOF
 | 
					 | 
				
			||||||
Usage: config [options]
 | 
					 | 
				
			||||||
 -d	Add a debug- prefix to machine choice.
 | 
					 | 
				
			||||||
 -t	Test mode, do not run the Configure perl script.
 | 
					 | 
				
			||||||
 -h	This help.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Any other text will be passed to the Configure perl script.
 | 
					 | 
				
			||||||
See INSTALL for instructions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EOF
 | 
					 | 
				
			||||||
;;
 | 
					 | 
				
			||||||
*) options=$options" $i" ;;
 | 
					 | 
				
			||||||
esac
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# figure out if gcc is available and if so we use it otherwise
 | 
					# figure out if gcc is available and if so we use it otherwise
 | 
				
			||||||
# we fallback to whatever cc does on the system
 | 
					# we fallback to whatever cc does on the system
 | 
				
			||||||
GCCVER=`(gcc --version) 2>/dev/null`
 | 
					GCCVER=`(gcc -dumpversion) 2>/dev/null`
 | 
				
			||||||
if [ "$GCCVER" != "" ]; then
 | 
					if [ "$GCCVER" != "" ]; then
 | 
				
			||||||
  CC=gcc
 | 
					  CC=gcc
 | 
				
			||||||
  # then strip off whatever prefix Cygnus prepends the number with...
 | 
					  # then strip off whatever prefix egcs prepends the number with...
 | 
				
			||||||
  GCCVER=`echo $GCCVER | sed 's/^[a-z]*\-//'`
 | 
					  # Hopefully, this will work for any future prefixes as well.
 | 
				
			||||||
 | 
					  GCCVER=`echo $GCCVER | sed 's/^[a-zA-Z]*\-//'`
 | 
				
			||||||
 | 
					  # Since gcc 3.1 gcc --version behaviour has changed.  gcc -dumpversion
 | 
				
			||||||
 | 
					  # does give us what we want though, so we use that.  We just just the
 | 
				
			||||||
 | 
					  # major and minor version numbers.
 | 
				
			||||||
  # peak single digit before and after first dot, e.g. 2.95.1 gives 29
 | 
					  # peak single digit before and after first dot, e.g. 2.95.1 gives 29
 | 
				
			||||||
  GCCVER=`echo $GCCVER | sed 's/\([0-9]\)\.\([0-9]\).*/\1\2/'`
 | 
					  GCCVER=`echo $GCCVER | sed 's/\([0-9]\)\.\([0-9]\).*/\1\2/'`
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
  CC=cc
 | 
					  CC=cc
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					GCCVER=${GCCVER:-0}
 | 
				
			||||||
 | 
					if [ "$SYSTEM" = "HP-UX" ];then
 | 
				
			||||||
 | 
					  # By default gcc is a ILP32 compiler (with long long == 64).
 | 
				
			||||||
 | 
					  GCC_BITS="32"
 | 
				
			||||||
 | 
					  if [ $GCCVER -ge 30 ]; then
 | 
				
			||||||
 | 
					    # PA64 support only came in with gcc 3.0.x.
 | 
				
			||||||
 | 
					    # We check if the preprocessor symbol __LP64__ is defined...
 | 
				
			||||||
 | 
					    if echo "__LP64__" | gcc -v -E -x c - 2>/dev/null | grep "^__LP64__" 2>&1 > /dev/null; then
 | 
				
			||||||
 | 
					      : # __LP64__ has slipped through, it therefore is not defined
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      GCC_BITS="64"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
if [ "$SYSTEM" = "SunOS" ]; then
 | 
					if [ "$SYSTEM" = "SunOS" ]; then
 | 
				
			||||||
 | 
					  if [ $GCCVER -ge 30 ]; then
 | 
				
			||||||
 | 
					    # 64-bit ABI isn't officially supported in gcc 3.0, but it appears
 | 
				
			||||||
 | 
					    # to be working, at the very least 'make test' passes...
 | 
				
			||||||
 | 
					    if gcc -v -E -x c /dev/null 2>&1 | grep __arch64__ > /dev/null; then
 | 
				
			||||||
 | 
					      GCC_ARCH="-m64"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      GCC_ARCH="-m32"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
  # check for WorkShop C, expected output is "cc: blah-blah C x.x"
 | 
					  # check for WorkShop C, expected output is "cc: blah-blah C x.x"
 | 
				
			||||||
  CCVER=`(cc -V 2>&1) 2>/dev/null | \
 | 
					  CCVER=`(cc -V 2>&1) 2>/dev/null | \
 | 
				
			||||||
  	egrep -e '^cc: .* C [0-9]\.[0-9]' | \
 | 
					  	egrep -e '^cc: .* C [0-9]\.[0-9]' | \
 | 
				
			||||||
@@ -408,7 +458,10 @@ if [ "${SYSTEM}-${MACHINE}" = "Linux-alpha" ]; then
 | 
				
			|||||||
  fi
 | 
					  fi
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GCCVER=${GCCVER:-0}
 | 
					if [ "${SYSTEM}" = "AIX" ]; then	# favor vendor cc over gcc
 | 
				
			||||||
 | 
					    (cc) 2>&1 | grep -iv "not found" > /dev/null && CC=cc
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CCVER=${CCVER:-0}
 | 
					CCVER=${CCVER:-0}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# read the output of the embedded GuessOS 
 | 
					# read the output of the embedded GuessOS 
 | 
				
			||||||
@@ -421,7 +474,7 @@ echo Operating system: $GUESSOS
 | 
				
			|||||||
# more time that I want to waste at the moment
 | 
					# more time that I want to waste at the moment
 | 
				
			||||||
case "$GUESSOS" in
 | 
					case "$GUESSOS" in
 | 
				
			||||||
  mips2-sgi-irix)
 | 
					  mips2-sgi-irix)
 | 
				
			||||||
	CPU=`(hinv -t cpu) 2>/dev/null | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'`
 | 
						CPU=`(hinv -t cpu) 2>/dev/null | head -1 | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'`
 | 
				
			||||||
	CPU=${CPU:-0}
 | 
						CPU=${CPU:-0}
 | 
				
			||||||
	if [ $CPU -ge 4000 ]; then
 | 
						if [ $CPU -ge 4000 ]; then
 | 
				
			||||||
		options="$options -mips2"
 | 
							options="$options -mips2"
 | 
				
			||||||
@@ -429,7 +482,7 @@ case "$GUESSOS" in
 | 
				
			|||||||
	OUT="irix-$CC"
 | 
						OUT="irix-$CC"
 | 
				
			||||||
	;;
 | 
						;;
 | 
				
			||||||
  mips3-sgi-irix)
 | 
					  mips3-sgi-irix)
 | 
				
			||||||
	CPU=`(hinv -t cpu) 2>/dev/null | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'`
 | 
						CPU=`(hinv -t cpu) 2>/dev/null | head -1 | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'`
 | 
				
			||||||
	CPU=${CPU:-0}
 | 
						CPU=${CPU:-0}
 | 
				
			||||||
	if [ $CPU -ge 5000 ]; then
 | 
						if [ $CPU -ge 5000 ]; then
 | 
				
			||||||
		options="$options -mips4"
 | 
							options="$options -mips4"
 | 
				
			||||||
@@ -441,9 +494,11 @@ case "$GUESSOS" in
 | 
				
			|||||||
  mips4-sgi-irix64)
 | 
					  mips4-sgi-irix64)
 | 
				
			||||||
	echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
						echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
				
			||||||
	echo "         invoke './Configure irix64-mips4-$CC' *manually*."
 | 
						echo "         invoke './Configure irix64-mips4-$CC' *manually*."
 | 
				
			||||||
	echo "         Type return if you want to continue, Ctrl-C to abort."
 | 
						if [ "$TEST" = "false" ]; then
 | 
				
			||||||
	read waste < /dev/tty
 | 
						  echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
				
			||||||
        CPU=`(hinv -t cpu) 2>/dev/null | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'`
 | 
						  (stty -icanon min 0 time 50; read waste) < /dev/tty
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					        CPU=`(hinv -t cpu) 2>/dev/null | head -1 | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'`
 | 
				
			||||||
        CPU=${CPU:-0}
 | 
					        CPU=${CPU:-0}
 | 
				
			||||||
        if [ $CPU -ge 5000 ]; then
 | 
					        if [ $CPU -ge 5000 ]; then
 | 
				
			||||||
                options="$options -mips4"
 | 
					                options="$options -mips4"
 | 
				
			||||||
@@ -482,18 +537,24 @@ EOF
 | 
				
			|||||||
	${CC} -o dummy dummy.c && OUT=`./dummy ${MACHINE}`
 | 
						${CC} -o dummy dummy.c && OUT=`./dummy ${MACHINE}`
 | 
				
			||||||
	rm dummy dummy.c
 | 
						rm dummy dummy.c
 | 
				
			||||||
	;;
 | 
						;;
 | 
				
			||||||
 | 
					  ppc64-*-linux2)
 | 
				
			||||||
 | 
						#Use the standard target for PPC architecture until we create a
 | 
				
			||||||
 | 
						#special one for the 64bit architecture.
 | 
				
			||||||
 | 
						OUT="linux-ppc" ;;
 | 
				
			||||||
  ppc-*-linux2) OUT="linux-ppc" ;;
 | 
					  ppc-*-linux2) OUT="linux-ppc" ;;
 | 
				
			||||||
  m68k-*-linux*) OUT="linux-m68k" ;;
 | 
					  m68k-*-linux*) OUT="linux-m68k" ;;
 | 
				
			||||||
  ia64-*-linux?) OUT="linux-ia64" ;;
 | 
					  ia64-*-linux?) OUT="linux-ia64" ;;
 | 
				
			||||||
  ppc-apple-rhapsody) OUT="rhapsody-ppc-cc" ;;
 | 
					  ppc-apple-rhapsody) OUT="rhapsody-ppc-cc" ;;
 | 
				
			||||||
  ppc-apple-darwin) OUT="darwin-ppc-cc" ;;
 | 
					  ppc-apple-darwin*) OUT="darwin-ppc-cc" ;;
 | 
				
			||||||
 | 
					  i386-apple-darwin*) OUT="darwin-i386-cc" ;;
 | 
				
			||||||
  sparc64-*-linux2)
 | 
					  sparc64-*-linux2)
 | 
				
			||||||
	#Before we can uncomment following lines we have to wait at least
 | 
						echo "WARNING! If you *know* that your GNU C supports 64-bit/V9 ABI"
 | 
				
			||||||
	#till 64-bit glibc for SPARC is operational:-(
 | 
						echo "         and wish to build 64-bit library, then you have to"
 | 
				
			||||||
	#echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
						echo "         invoke './Configure linux64-sparcv9' *manually*."
 | 
				
			||||||
	#echo "         invoke './Configure linux64-sparcv9' *manually*."
 | 
						if [ "$TEST" = "false" ]; then
 | 
				
			||||||
	#echo "         Type return if you want to continue, Ctrl-C to abort."
 | 
						  echo "          You have about 5 seconds to press Ctrl-C to abort."
 | 
				
			||||||
	#read waste < /dev/tty
 | 
						  (stty -icanon min 0 time 50; read waste) < /dev/tty
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
	OUT="linux-sparcv9" ;;
 | 
						OUT="linux-sparcv9" ;;
 | 
				
			||||||
  sparc-*-linux2)
 | 
					  sparc-*-linux2)
 | 
				
			||||||
	KARCH=`awk '/^type/{print$3}' /proc/cpuinfo`
 | 
						KARCH=`awk '/^type/{print$3}' /proc/cpuinfo`
 | 
				
			||||||
@@ -503,33 +564,101 @@ EOF
 | 
				
			|||||||
	sun4d)	OUT="linux-sparcv8" ;;
 | 
						sun4d)	OUT="linux-sparcv8" ;;
 | 
				
			||||||
	*)	OUT="linux-sparcv7" ;;
 | 
						*)	OUT="linux-sparcv7" ;;
 | 
				
			||||||
	esac ;;
 | 
						esac ;;
 | 
				
			||||||
 | 
					  parisc-*-linux2)
 | 
				
			||||||
 | 
					        CPUARCH=`awk '/cpu family/{print substr($5,1,3)}' /proc/cpuinfo`
 | 
				
			||||||
 | 
						CPUSCHEDULE=`awk '/^cpu.[ 	]: PA/{print substr($3,3)}' /proc/cpuinfo`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# ??TODO ??  Model transformations
 | 
				
			||||||
 | 
						# 0. CPU Architecture for the 1.1 processor has letter suffixes. We strip that off
 | 
				
			||||||
 | 
						#    assuming no further arch. identification will ever be used by GCC.
 | 
				
			||||||
 | 
						# 1. I'm most concerned about whether is a 7300LC is closer to a 7100 versus a 7100LC.
 | 
				
			||||||
 | 
						# 2. The variant 64-bit processors cause concern should GCC support explicit schedulers
 | 
				
			||||||
 | 
						#    for these chips in the future.
 | 
				
			||||||
 | 
						#         PA7300LC -> 7100LC (1.1)
 | 
				
			||||||
 | 
						#         PA8200   -> 8000   (2.0)
 | 
				
			||||||
 | 
						#         PA8500   -> 8000   (2.0)
 | 
				
			||||||
 | 
						#         PA8600   -> 8000   (2.0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						CPUSCHEDULE=`echo $CPUSCHEDULE|sed -e 's/7300LC/7100LC/' -e 's/8?00/8000/'`
 | 
				
			||||||
 | 
						# Finish Model transformations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						options="$options -mschedule=$CPUSCHEDULE -march=$CPUARCH"
 | 
				
			||||||
 | 
						OUT="linux-parisc" ;;
 | 
				
			||||||
  arm*-*-linux2) OUT="linux-elf-arm" ;;
 | 
					  arm*-*-linux2) OUT="linux-elf-arm" ;;
 | 
				
			||||||
  s390-*-linux2) OUT="linux-s390" ;;
 | 
					  s390-*-linux2) OUT="linux-s390" ;;
 | 
				
			||||||
  *-*-linux2) OUT="linux-elf" ;;
 | 
					  s390x-*-linux?) OUT="linux-s390x" ;;
 | 
				
			||||||
 | 
					  x86_64-*-linux?) OUT="linux-x86_64" ;;
 | 
				
			||||||
 | 
					  *-*-linux2) OUT="linux-elf"
 | 
				
			||||||
 | 
						if [ "$GCCVER" -gt 28 ]; then
 | 
				
			||||||
 | 
					          if grep '^model.*Pentium' /proc/cpuinfo >/dev/null ; then
 | 
				
			||||||
 | 
					            OUT="linux-pentium"
 | 
				
			||||||
 | 
					          fi
 | 
				
			||||||
 | 
					          if grep '^model.*Pentium Pro' /proc/cpuinfo >/dev/null ; then
 | 
				
			||||||
 | 
					            OUT="linux-ppro"
 | 
				
			||||||
 | 
					          fi
 | 
				
			||||||
 | 
					          if grep '^model.*K6' /proc/cpuinfo >/dev/null ; then
 | 
				
			||||||
 | 
					            OUT="linux-k6"
 | 
				
			||||||
 | 
					          fi
 | 
				
			||||||
 | 
					        fi ;;
 | 
				
			||||||
  *-*-linux1) OUT="linux-aout" ;;
 | 
					  *-*-linux1) OUT="linux-aout" ;;
 | 
				
			||||||
  sun4u*-*-solaris2)
 | 
					  sun4u*-*-solaris2)
 | 
				
			||||||
 | 
						OUT="solaris-sparcv9-$CC"
 | 
				
			||||||
	ISA64=`(isalist) 2>/dev/null | grep sparcv9`
 | 
						ISA64=`(isalist) 2>/dev/null | grep sparcv9`
 | 
				
			||||||
	if [ "$ISA64" != "" -a "$CC" = "cc" -a $CCVER -ge 50 ]; then
 | 
						if [ "$ISA64" != "" ]; then
 | 
				
			||||||
 | 
						    if [ "$CC" = "cc" -a $CCVER -ge 50 ]; then
 | 
				
			||||||
		echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
							echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
				
			||||||
		echo "         invoke './Configure solaris64-sparcv9-cc' *manually*."
 | 
							echo "         invoke './Configure solaris64-sparcv9-cc' *manually*."
 | 
				
			||||||
		echo "         Type return if you want to continue, Ctrl-C to abort."
 | 
							if [ "$TEST" = "false" ]; then
 | 
				
			||||||
		read waste < /dev/tty
 | 
							  echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
				
			||||||
 | 
							  (stty -icanon min 0 time 50; read waste) < /dev/tty
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						    elif [ "$CC" = "gcc" -a "$GCC_ARCH" = "-m64" ]; then
 | 
				
			||||||
 | 
							# $GCC_ARCH denotes default ABI chosen by compiler driver
 | 
				
			||||||
 | 
							# (first one found on the $PATH). I assume that user
 | 
				
			||||||
 | 
							# expects certain consistency with the rest of his builds
 | 
				
			||||||
 | 
							# and therefore switch over to 64-bit. <appro>
 | 
				
			||||||
 | 
							OUT="solaris64-sparcv9-gcc"
 | 
				
			||||||
 | 
							echo "WARNING! If you wish to build 32-bit library, then you have to"
 | 
				
			||||||
 | 
							echo "         invoke './Configure solaris-sparcv9-gcc' *manually*."
 | 
				
			||||||
 | 
							if [ "$TEST" = "false" ]; then
 | 
				
			||||||
 | 
							  echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
				
			||||||
 | 
							  (stty -icanon min 0 time 50; read waste) < /dev/tty
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						    elif [ "$GCC_ARCH" = "-m32" ]; then
 | 
				
			||||||
 | 
							echo "NOTICE! If you *know* that your GNU C supports 64-bit/V9 ABI"
 | 
				
			||||||
 | 
							echo "        and wish to build 64-bit library, then you have to"
 | 
				
			||||||
 | 
							echo "        invoke './Configure solaris64-sparcv9-gcc' *manually*."
 | 
				
			||||||
 | 
							if [ "$TEST" = "false" ]; then
 | 
				
			||||||
 | 
							  echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
				
			||||||
 | 
							  (stty -icanon min 0 time 50; read waste) < /dev/tty
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						    fi
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
	OUT="solaris-sparcv9-$CC" ;;
 | 
						;;
 | 
				
			||||||
  sun4m-*-solaris2)	OUT="solaris-sparcv8-$CC" ;;
 | 
					  sun4m-*-solaris2)	OUT="solaris-sparcv8-$CC" ;;
 | 
				
			||||||
  sun4d-*-solaris2)	OUT="solaris-sparcv8-$CC" ;;
 | 
					  sun4d-*-solaris2)	OUT="solaris-sparcv8-$CC" ;;
 | 
				
			||||||
  sun4*-*-solaris2)	OUT="solaris-sparcv7-$CC" ;;
 | 
					  sun4*-*-solaris2)	OUT="solaris-sparcv7-$CC" ;;
 | 
				
			||||||
  *86*-*-solaris2) OUT="solaris-x86-$CC" ;;
 | 
					  *86*-*-solaris2) OUT="solaris-x86-$CC" ;;
 | 
				
			||||||
  *-*-sunos4) OUT="sunos-$CC" ;;
 | 
					  *-*-sunos4) OUT="sunos-$CC" ;;
 | 
				
			||||||
  alpha*-*-freebsd*) OUT="FreeBSD-alpha" ;;
 | 
					  alpha*-*-freebsd*) OUT="FreeBSD-alpha" ;;
 | 
				
			||||||
 | 
					  sparc64-*-freebsd*) OUT="FreeBSD-sparc64" ;;
 | 
				
			||||||
 | 
					  ia64-*-freebsd*) OUT="FreeBSD-ia64" ;;
 | 
				
			||||||
  *-freebsd[3-9]*) OUT="FreeBSD-elf" ;;
 | 
					  *-freebsd[3-9]*) OUT="FreeBSD-elf" ;;
 | 
				
			||||||
  *-freebsd[1-2]*) OUT="FreeBSD" ;;
 | 
					  *-freebsd[1-2]*) OUT="FreeBSD" ;;
 | 
				
			||||||
  *86*-*-netbsd) OUT="NetBSD-x86" ;;
 | 
					  *86*-*-netbsd) OUT="NetBSD-x86" ;;
 | 
				
			||||||
  sun3*-*-netbsd) OUT="NetBSD-m68" ;;
 | 
					  sun3*-*-netbsd) OUT="NetBSD-m68" ;;
 | 
				
			||||||
  *-*-netbsd) OUT="NetBSD-sparc" ;;
 | 
					  *-*-netbsd) OUT="NetBSD-sparc" ;;
 | 
				
			||||||
  *86*-*-openbsd) OUT="OpenBSD-x86" ;;
 | 
					 | 
				
			||||||
  alpha*-*-openbsd) OUT="OpenBSD-alpha" ;;
 | 
					  alpha*-*-openbsd) OUT="OpenBSD-alpha" ;;
 | 
				
			||||||
 | 
					  *86*-*-openbsd) OUT="OpenBSD-i386" ;;
 | 
				
			||||||
 | 
					  m68k*-*-openbsd) OUT="OpenBSD-m68k" ;;
 | 
				
			||||||
 | 
					  m88k*-*-openbsd) OUT="OpenBSD-m88k" ;;
 | 
				
			||||||
 | 
					  mips*-*-openbsd) OUT="OpenBSD-mips" ;;
 | 
				
			||||||
  pmax*-*-openbsd) OUT="OpenBSD-mips" ;;
 | 
					  pmax*-*-openbsd) OUT="OpenBSD-mips" ;;
 | 
				
			||||||
 | 
					  powerpc*-*-openbsd) OUT="OpenBSD-powerpc" ;;
 | 
				
			||||||
 | 
					  sparc64*-*-openbsd) OUT="OpenBSD-sparc64" ;;
 | 
				
			||||||
 | 
					  sparc*-*-openbsd) OUT="OpenBSD-sparc" ;;
 | 
				
			||||||
 | 
					  vax*-*-openbsd) OUT="OpenBSD-vax" ;;
 | 
				
			||||||
 | 
					  hppa*-*-openbsd) OUT="OpenBSD-hppa" ;;
 | 
				
			||||||
  *-*-openbsd) OUT="OpenBSD" ;;
 | 
					  *-*-openbsd) OUT="OpenBSD" ;;
 | 
				
			||||||
  *86*-*-bsdi4) OUT="bsdi-elf-gcc" ;;
 | 
					  *86*-*-bsdi4) OUT="bsdi-elf-gcc" ;;
 | 
				
			||||||
  *-*-osf) OUT="alphaold-cc" ;;
 | 
					  *-*-osf) OUT="alphaold-cc" ;;
 | 
				
			||||||
@@ -553,15 +682,61 @@ EOF
 | 
				
			|||||||
  BS2000-siemens-sysv4) OUT="BS2000-OSD" ;;
 | 
					  BS2000-siemens-sysv4) OUT="BS2000-OSD" ;;
 | 
				
			||||||
  RM*-siemens-sysv4) OUT="ReliantUNIX" ;;
 | 
					  RM*-siemens-sysv4) OUT="ReliantUNIX" ;;
 | 
				
			||||||
  *-siemens-sysv4) OUT="SINIX" ;;
 | 
					  *-siemens-sysv4) OUT="SINIX" ;;
 | 
				
			||||||
  *-hpux1*)	OUT="hpux-parisc-$CC"
 | 
					  *-hpux1*)
 | 
				
			||||||
		options="$options -D_REENTRANT" ;;
 | 
						if [ $CC = "gcc" ];
 | 
				
			||||||
 | 
						then
 | 
				
			||||||
 | 
						  if [ $GCC_BITS = "64" ]; then
 | 
				
			||||||
 | 
						    OUT="hpux64-parisc2-gcc"
 | 
				
			||||||
 | 
						  else
 | 
				
			||||||
 | 
						    OUT="hpux-parisc-gcc"
 | 
				
			||||||
 | 
						  fi
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						  OUT="hpux-parisc-$CC"
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						KERNEL_BITS=`(getconf KERNEL_BITS) 2>/dev/null`
 | 
				
			||||||
 | 
						KERNEL_BITS=${KERNEL_BITS:-32}
 | 
				
			||||||
 | 
						CPU_VERSION=`(getconf CPU_VERSION) 2>/dev/null`
 | 
				
			||||||
 | 
						CPU_VERSION=${CPU_VERSION:-0}
 | 
				
			||||||
 | 
						# See <sys/unistd.h> for further info on CPU_VERSION.
 | 
				
			||||||
 | 
						if   [ $CPU_VERSION -ge 768 ]; then	# IA-64 CPU
 | 
				
			||||||
 | 
						     echo "WARNING! 64-bit ABI is the default configured ABI on HP-UXi."
 | 
				
			||||||
 | 
						     echo "         If you wish to build 32-bit library, the you have to"
 | 
				
			||||||
 | 
						     echo "         invoke './Configure hpux-ia64-cc' *manually*."
 | 
				
			||||||
 | 
						     if [ "$TEST" = "false" ]; then
 | 
				
			||||||
 | 
							echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
				
			||||||
 | 
							(stty -icanon min 0 time 50; read waste) < /dev/tty
 | 
				
			||||||
 | 
						     fi
 | 
				
			||||||
 | 
						     OUT="hpux64-ia64-cc"
 | 
				
			||||||
 | 
						elif [ $CPU_VERSION -ge 532 ]; then	# PA-RISC 2.x CPU
 | 
				
			||||||
 | 
						     if [ "$CC" = "cc" ]; then
 | 
				
			||||||
 | 
							OUT="hpux-parisc2-cc" # can't we have hpux-parisc2-gcc?
 | 
				
			||||||
 | 
						     fi
 | 
				
			||||||
 | 
						     if [ $KERNEL_BITS -eq 64 -a "$CC" = "cc" ]; then
 | 
				
			||||||
 | 
							echo "WARNING! If you wish to build 64-bit library then you have to"
 | 
				
			||||||
 | 
							echo "         invoke './Configure hpux64-parisc2-cc' *manually*."
 | 
				
			||||||
 | 
							if [ "$TEST" = "false" ]; then
 | 
				
			||||||
 | 
							  echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
				
			||||||
 | 
							  (stty -icanon min 0 time 50; read waste) < /dev/tty
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						     fi
 | 
				
			||||||
 | 
						elif [ $CPU_VERSION -ge 528 ]; then	# PA-RISC 1.1+ CPU
 | 
				
			||||||
 | 
						     :
 | 
				
			||||||
 | 
						elif [ $CPU_VERSION -ge 523 ]; then	# PA-RISC 1.0 CPU
 | 
				
			||||||
 | 
						     :
 | 
				
			||||||
 | 
						else					# Motorola(?) CPU
 | 
				
			||||||
 | 
						     OUT="hpux-$CC"
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						options="$options -D_REENTRANT" ;;
 | 
				
			||||||
  *-hpux)	OUT="hpux-parisc-$CC" ;;
 | 
					  *-hpux)	OUT="hpux-parisc-$CC" ;;
 | 
				
			||||||
  # these are all covered by the catchall below
 | 
					  # these are all covered by the catchall below
 | 
				
			||||||
  # *-aix) OUT="aix-$CC" ;;
 | 
					  # *-aix) OUT="aix-$CC" ;;
 | 
				
			||||||
  # *-dgux) OUT="dgux" ;;
 | 
					  # *-dgux) OUT="dgux" ;;
 | 
				
			||||||
  mips-sony-newsos4) OUT="newsos4-gcc" ;;
 | 
					  mips-sony-newsos4) OUT="newsos4-gcc" ;;
 | 
				
			||||||
  *-*-cygwin32) OUT="CygWin32"
 | 
					  *-*-cygwin_pre1.3) OUT="Cygwin-pre1.3" ;;
 | 
				
			||||||
		options="$options no-threads no-asm" ;;
 | 
					  *-*-cygwin) OUT="Cygwin" ;;
 | 
				
			||||||
 | 
					  t3e-cray-unicosmk) OUT="cray-t3e" ;;
 | 
				
			||||||
 | 
					  j90-cray-unicos) OUT="cray-j90" ;;
 | 
				
			||||||
 | 
					  nsr-tandem-nsk) OUT="tandem-c89" ;;
 | 
				
			||||||
  *) OUT=`echo $GUESSOS | awk -F- '{print $3}'`;;
 | 
					  *) OUT=`echo $GUESSOS | awk -F- '{print $3}'`;;
 | 
				
			||||||
esac
 | 
					esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -577,16 +752,6 @@ esac
 | 
				
			|||||||
#  options="$options -DATALLA"
 | 
					#  options="$options -DATALLA"
 | 
				
			||||||
#fi
 | 
					#fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#get some basic shared lib support (behnke@trustcenter.de)
 | 
					 | 
				
			||||||
case "$OUT" in
 | 
					 | 
				
			||||||
   solaris-*-gcc)
 | 
					 | 
				
			||||||
	if  [ "$SHARED" = "true" ] 
 | 
					 | 
				
			||||||
	 then
 | 
					 | 
				
			||||||
	  options="$options -DPIC -fPIC"
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
     ;;
 | 
					 | 
				
			||||||
esac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# gcc < 2.8 does not support -mcpu=ultrasparc
 | 
					# gcc < 2.8 does not support -mcpu=ultrasparc
 | 
				
			||||||
if [ "$OUT" = solaris-sparcv9-gcc -a $GCCVER -lt 28 ]
 | 
					if [ "$OUT" = solaris-sparcv9-gcc -a $GCCVER -lt 28 ]
 | 
				
			||||||
then
 | 
					then
 | 
				
			||||||
@@ -606,7 +771,7 @@ case "$GUESSOS" in
 | 
				
			|||||||
  i386-*) options="$options 386" ;;
 | 
					  i386-*) options="$options 386" ;;
 | 
				
			||||||
esac
 | 
					esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for i in bf cast des dh dsa hmac idea md2 md5 mdc2 rc2 rc4 rc5 ripemd rsa sha
 | 
					for i in bf cast des dh dsa ec hmac idea md2 md5 mdc2 rc2 rc4 rc5 aes ripemd rsa sha
 | 
				
			||||||
do
 | 
					do
 | 
				
			||||||
  if [ ! -d crypto/$i ]
 | 
					  if [ ! -d crypto/$i ]
 | 
				
			||||||
  then
 | 
					  then
 | 
				
			||||||
@@ -614,6 +779,27 @@ do
 | 
				
			|||||||
  fi
 | 
					  fi
 | 
				
			||||||
done
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Discover Kerberos 5 (since it's still a prototype, we don't
 | 
				
			||||||
 | 
					# do any guesses yet, that's why this section is commented away.
 | 
				
			||||||
 | 
					#if [ -d /usr/kerberos ]; then
 | 
				
			||||||
 | 
					#    krb5_dir=/usr/kerberos
 | 
				
			||||||
 | 
					#    if [ \( -f $krb5_dir/lib/libgssapi_krb5.a -o -f $krb5_dir/lib/libgssapi_krb5.so* \)\
 | 
				
			||||||
 | 
					#	-a \( -f $krb5_dir/lib/libkrb5.a -o -f $krb5_dir/lib/libkrb5.so* \)\
 | 
				
			||||||
 | 
					#	-a \( -f $krb5_dir/lib/libcom_err.a -o -f $krb5_dir/lib/libcom_err.so* \)\
 | 
				
			||||||
 | 
					#	-a \( -f $krb5_dir/lib/libk5crypto.a -o -f $krb5_dir/lib/libk5crypto.so* \)\
 | 
				
			||||||
 | 
					#	-a \( -f $krb5_dir/include/krb5.h \) ]; then
 | 
				
			||||||
 | 
					#	options="$options --with-krb5-flavor=MIT"
 | 
				
			||||||
 | 
					#    fi
 | 
				
			||||||
 | 
					#elif [ -d /usr/heimdal ]; then
 | 
				
			||||||
 | 
					#    krb5_dir=/usr/heimdal
 | 
				
			||||||
 | 
					#    if [ \( -f $krb5_dir/lib/libgssapi.a -o -f $krb5_dir/lib/libgssapi.so* \)\
 | 
				
			||||||
 | 
					#	-a \( -f $krb5_dir/lib/libkrb5.a -o -f $krb5_dir/lib/libkrb5.so* \)\
 | 
				
			||||||
 | 
					#	-a \( -f $krb5_dir/lib/libcom_err.a -o -f $krb5_dir/lib/libcom_err.so* \)\
 | 
				
			||||||
 | 
					#	-a \( -f $krb5_dir/include/krb5.h \) ]; then
 | 
				
			||||||
 | 
					#	options="$options --with-krb5-flavor=Heimdal"
 | 
				
			||||||
 | 
					#    fi
 | 
				
			||||||
 | 
					#fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ -z "$OUT" ]; then
 | 
					if [ -z "$OUT" ]; then
 | 
				
			||||||
  OUT="$CC"
 | 
					  OUT="$CC"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,14 +5,15 @@
 | 
				
			|||||||
DIR=		crypto
 | 
					DIR=		crypto
 | 
				
			||||||
TOP=		..
 | 
					TOP=		..
 | 
				
			||||||
CC=		cc
 | 
					CC=		cc
 | 
				
			||||||
INCLUDE=	-I. -I../include
 | 
					INCLUDE=	-I. -I$(TOP) -I../include
 | 
				
			||||||
INCLUDES=	-I.. -I../../include
 | 
					INCLUDES=	-I.. -I../.. -I../../include
 | 
				
			||||||
CFLAG=		-g
 | 
					CFLAG=		-g
 | 
				
			||||||
INSTALL_PREFIX=
 | 
					INSTALL_PREFIX=
 | 
				
			||||||
OPENSSLDIR=     /usr/local/ssl
 | 
					OPENSSLDIR=     /usr/local/ssl
 | 
				
			||||||
INSTALLTOP=	/usr/local/ssl
 | 
					INSTALLTOP=	/usr/local/ssl
 | 
				
			||||||
MAKE=           make -f Makefile.ssl
 | 
					MAKE=           make -f Makefile.ssl
 | 
				
			||||||
MAKEDEPEND=	$(TOP)/util/domd $(TOP)
 | 
					MAKEDEPPROG=	makedepend
 | 
				
			||||||
 | 
					MAKEDEPEND=	$(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
 | 
				
			||||||
MAKEFILE=       Makefile.ssl
 | 
					MAKEFILE=       Makefile.ssl
 | 
				
			||||||
RM=             rm -f
 | 
					RM=             rm -f
 | 
				
			||||||
AR=		ar r
 | 
					AR=		ar r
 | 
				
			||||||
@@ -27,35 +28,37 @@ LIBS=
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
SDIRS=	md2 md5 sha mdc2 hmac ripemd \
 | 
					SDIRS=	md2 md5 sha mdc2 hmac ripemd \
 | 
				
			||||||
	des rc2 rc4 rc5 idea bf cast \
 | 
						des rc2 rc4 rc5 idea bf cast \
 | 
				
			||||||
	bn rsa dsa dh dso engine \
 | 
						bn ec rsa dsa dh dso engine aes \
 | 
				
			||||||
	buffer bio stack lhash rand err objects \
 | 
						buffer bio stack lhash rand err objects \
 | 
				
			||||||
	evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp
 | 
						evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GENERAL=Makefile README crypto-lib.com install.com
 | 
					GENERAL=Makefile README crypto-lib.com install.com
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIB= $(TOP)/libcrypto.a
 | 
					LIB= $(TOP)/libcrypto.a
 | 
				
			||||||
LIBSRC=	cryptlib.c mem.c mem_dbg.c cversion.c ex_data.c tmdiff.c cpt_err.c ebcdic.c uid.c
 | 
					SHARED_LIB= libcrypto$(SHLIB_EXT)
 | 
				
			||||||
LIBOBJ= cryptlib.o mem.o mem_dbg.o cversion.o ex_data.o tmdiff.o cpt_err.o ebcdic.o uid.o
 | 
					LIBSRC=	cryptlib.c mem.c mem_clr.c mem_dbg.c cversion.c ex_data.c tmdiff.c cpt_err.c ebcdic.c uid.c o_time.c
 | 
				
			||||||
 | 
					LIBOBJ= cryptlib.o mem.o mem_clr.o mem_dbg.o cversion.o ex_data.o tmdiff.o cpt_err.o ebcdic.o uid.o o_time.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SRC= $(LIBSRC)
 | 
					SRC= $(LIBSRC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EXHEADER= crypto.h tmdiff.h opensslv.h opensslconf.h ebcdic.h symhacks.h
 | 
					EXHEADER= crypto.h tmdiff.h opensslv.h opensslconf.h ebcdic.h symhacks.h \
 | 
				
			||||||
HEADER=	cryptlib.h buildinf.h md32_common.h $(EXHEADER)
 | 
						ossl_typ.h
 | 
				
			||||||
 | 
					HEADER=	cryptlib.h buildinf.h md32_common.h o_time.h $(EXHEADER)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALL=    $(GENERAL) $(SRC) $(HEADER)
 | 
					ALL=    $(GENERAL) $(SRC) $(HEADER)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
top:
 | 
					top:
 | 
				
			||||||
	@(cd ..; $(MAKE) DIRS=$(DIR) all)
 | 
						@(cd ..; $(MAKE) DIRS=$(DIR) all)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
all: buildinf.h lib subdirs
 | 
					all: shared
 | 
				
			||||||
 | 
					
 | 
				
			||||||
buildinf.h: ../Makefile.ssl
 | 
					buildinf.h: ../Makefile.ssl
 | 
				
			||||||
	( echo "#ifndef MK1MF_BUILD"; \
 | 
						( echo "#ifndef MK1MF_BUILD"; \
 | 
				
			||||||
	echo "  /* auto-generated by crypto/Makefile.ssl for crypto/cversion.c */"; \
 | 
						echo '  /* auto-generated by crypto/Makefile.ssl for crypto/cversion.c */'; \
 | 
				
			||||||
	echo "  #define CFLAGS \"$(CC) $(CFLAG)\""; \
 | 
						echo '  #define CFLAGS "$(CC) $(CFLAG)"'; \
 | 
				
			||||||
	echo "  #define PLATFORM \"$(PLATFORM)\""; \
 | 
						echo '  #define PLATFORM "$(PLATFORM)"'; \
 | 
				
			||||||
	echo "  #define DATE \"`date`\""; \
 | 
						echo "  #define DATE \"`LC_ALL=C LC_TIME=C date`\""; \
 | 
				
			||||||
	echo "#endif" ) >buildinf.h
 | 
						echo '#endif' ) >buildinf.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
testapps:
 | 
					testapps:
 | 
				
			||||||
	if echo ${SDIRS} | fgrep ' des '; \
 | 
						if echo ${SDIRS} | fgrep ' des '; \
 | 
				
			||||||
@@ -73,38 +76,42 @@ files:
 | 
				
			|||||||
	$(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
 | 
						$(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
 | 
				
			||||||
	@for i in $(SDIRS) ;\
 | 
						@for i in $(SDIRS) ;\
 | 
				
			||||||
	do \
 | 
						do \
 | 
				
			||||||
	(cd $$i; echo "making 'files' in crypto/$$i..."; \
 | 
						(cd $$i && echo "making 'files' in crypto/$$i..." && \
 | 
				
			||||||
	$(MAKE) PERL='${PERL}' files ); \
 | 
						$(MAKE) PERL='${PERL}' files ); \
 | 
				
			||||||
	done;
 | 
						done;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
links:
 | 
					links:
 | 
				
			||||||
	@$(TOP)/util/point.sh Makefile.ssl Makefile
 | 
						@sh $(TOP)/util/point.sh Makefile.ssl Makefile
 | 
				
			||||||
	@$(PERL) $(TOP)/util/mklink.pl ../include/openssl $(EXHEADER)
 | 
						@$(PERL) $(TOP)/util/mklink.pl ../include/openssl $(EXHEADER)
 | 
				
			||||||
	@$(PERL) $(TOP)/util/mklink.pl ../test $(TEST)
 | 
						@$(PERL) $(TOP)/util/mklink.pl ../test $(TEST)
 | 
				
			||||||
	@$(PERL) $(TOP)/util/mklink.pl ../apps $(APPS)
 | 
						@$(PERL) $(TOP)/util/mklink.pl ../apps $(APPS)
 | 
				
			||||||
	@$(TOP)/util/point.sh Makefile.ssl Makefile
 | 
						@sh $(TOP)/util/point.sh Makefile.ssl Makefile
 | 
				
			||||||
	@for i in $(SDIRS); do \
 | 
						@for i in $(SDIRS); do \
 | 
				
			||||||
	(cd $$i; echo "making links in crypto/$$i..."; \
 | 
						(cd $$i && echo "making links in crypto/$$i..." && \
 | 
				
			||||||
	$(MAKE) CC='$(CC)' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' AR='${AR}' PERL='${PERL}' links ); \
 | 
						$(MAKE) CC='$(CC)' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' AR='${AR}' PERL='${PERL}' links ); \
 | 
				
			||||||
	done;
 | 
						done;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
lib:	$(LIBOBJ)
 | 
					lib:	$(LIBOBJ)
 | 
				
			||||||
	$(AR) $(LIB) $(LIBOBJ)
 | 
						$(AR) $(LIB) $(LIBOBJ)
 | 
				
			||||||
	@echo You may get an error following this line.  Please ignore.
 | 
						$(RANLIB) $(LIB) || echo Never mind.
 | 
				
			||||||
	- $(RANLIB) $(LIB)
 | 
					 | 
				
			||||||
	@touch lib
 | 
						@touch lib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					shared: buildinf.h lib subdirs
 | 
				
			||||||
 | 
						if [ -n "$(SHARED_LIBS)" ]; then \
 | 
				
			||||||
 | 
							(cd ..; $(MAKE) $(SHARED_LIB)); \
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libs:
 | 
					libs:
 | 
				
			||||||
	@for i in $(SDIRS) ;\
 | 
						@for i in $(SDIRS) ;\
 | 
				
			||||||
	do \
 | 
						do \
 | 
				
			||||||
	(cd $$i; echo "making libs in crypto/$$i..."; \
 | 
						(cd $$i && echo "making libs in crypto/$$i..." && \
 | 
				
			||||||
	$(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' AR='${AR}' lib ); \
 | 
						$(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' AR='${AR}' lib ); \
 | 
				
			||||||
	done;
 | 
						done;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tests:
 | 
					tests:
 | 
				
			||||||
	@for i in $(SDIRS) ;\
 | 
						@for i in $(SDIRS) ;\
 | 
				
			||||||
	do \
 | 
						do \
 | 
				
			||||||
	(cd $$i; echo "making tests in crypto/$$i..."; \
 | 
						(cd $$i && echo "making tests in crypto/$$i..." && \
 | 
				
			||||||
	$(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' AR='${AR}' tests ); \
 | 
						$(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' AR='${AR}' tests ); \
 | 
				
			||||||
	done;
 | 
						done;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -116,32 +123,32 @@ install:
 | 
				
			|||||||
	done;
 | 
						done;
 | 
				
			||||||
	@for i in $(SDIRS) ;\
 | 
						@for i in $(SDIRS) ;\
 | 
				
			||||||
	do \
 | 
						do \
 | 
				
			||||||
	(cd $$i; echo "making install in crypto/$$i..."; \
 | 
						(cd $$i && echo "making install in crypto/$$i..." && \
 | 
				
			||||||
	$(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}'  INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' install ); \
 | 
						$(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}'  INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' install ); \
 | 
				
			||||||
	done;
 | 
						done;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
lint:
 | 
					lint:
 | 
				
			||||||
	@for i in $(SDIRS) ;\
 | 
						@for i in $(SDIRS) ;\
 | 
				
			||||||
	do \
 | 
						do \
 | 
				
			||||||
	(cd $$i; echo "making lint in crypto/$$i..."; \
 | 
						(cd $$i && echo "making lint in crypto/$$i..." && \
 | 
				
			||||||
	$(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' lint ); \
 | 
						$(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' lint ); \
 | 
				
			||||||
	done;
 | 
						done;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
depend:
 | 
					depend:
 | 
				
			||||||
	if [ ! -f buildinf.h ]; then touch buildinf.h; fi # fake buildinf.h if it does not exist
 | 
						if [ ! -f buildinf.h ]; then touch buildinf.h; fi # fake buildinf.h if it does not exist
 | 
				
			||||||
	$(MAKEDEPEND) $(INCLUDE) $(DEPFLAG) $(PROGS) $(LIBSRC)
 | 
						$(MAKEDEPEND) -- $(CFLAG) $(INCLUDE) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
 | 
				
			||||||
	if [ ! -s buildinf.h ]; then rm buildinf.h; fi
 | 
						if [ ! -s buildinf.h ]; then rm buildinf.h; fi
 | 
				
			||||||
	@for i in $(SDIRS) ;\
 | 
						@for i in $(SDIRS) ;\
 | 
				
			||||||
	do \
 | 
						do \
 | 
				
			||||||
	(cd $$i; echo "making depend in crypto/$$i..."; \
 | 
						(cd $$i && echo "making depend in crypto/$$i..." && \
 | 
				
			||||||
	$(MAKE) MAKEFILE='${MAKEFILE}' INCLUDES='${INCLUDES}' DEPFLAG='${DEPFLAG}' depend ); \
 | 
						$(MAKE) MAKEFILE='${MAKEFILE}' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' DEPFLAG='${DEPFLAG}' MAKEDEPPROG='${MAKEDEPPROG}' KRB5_INCLUDES='${KRB5_INCLUDES}' PERL='${PERL}' depend ); \
 | 
				
			||||||
	done;
 | 
						done;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
clean:
 | 
					clean:
 | 
				
			||||||
	rm -f buildinf.h *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 | 
						rm -f buildinf.h *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 | 
				
			||||||
	@for i in $(SDIRS) ;\
 | 
						@for i in $(SDIRS) ;\
 | 
				
			||||||
	do \
 | 
						do \
 | 
				
			||||||
	(cd $$i; echo "making clean in crypto/$$i..."; \
 | 
						(cd $$i && echo "making clean in crypto/$$i..." && \
 | 
				
			||||||
	$(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' clean ); \
 | 
						$(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' clean ); \
 | 
				
			||||||
	done;
 | 
						done;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -150,54 +157,62 @@ dclean:
 | 
				
			|||||||
	mv -f Makefile.new $(MAKEFILE)
 | 
						mv -f Makefile.new $(MAKEFILE)
 | 
				
			||||||
	@for i in $(SDIRS) ;\
 | 
						@for i in $(SDIRS) ;\
 | 
				
			||||||
	do \
 | 
						do \
 | 
				
			||||||
	(cd $$i; echo "making dclean in crypto/$$i..."; \
 | 
						(cd $$i && echo "making dclean in crypto/$$i..." && \
 | 
				
			||||||
	$(MAKE) PERL='${PERL}' CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' dclean ); \
 | 
						$(MAKE) PERL='${PERL}' CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' dclean ); \
 | 
				
			||||||
	done;
 | 
						done;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
 | 
					# DO NOT DELETE THIS LINE -- make depend depends on it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cpt_err.o: ../include/openssl/bio.h ../include/openssl/crypto.h
 | 
					cpt_err.o: ../include/openssl/bio.h ../include/openssl/crypto.h
 | 
				
			||||||
cpt_err.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
					cpt_err.o: ../include/openssl/e_os2.h ../include/openssl/err.h
 | 
				
			||||||
 | 
					cpt_err.o: ../include/openssl/lhash.h ../include/openssl/opensslconf.h
 | 
				
			||||||
cpt_err.o: ../include/openssl/opensslv.h ../include/openssl/safestack.h
 | 
					cpt_err.o: ../include/openssl/opensslv.h ../include/openssl/safestack.h
 | 
				
			||||||
cpt_err.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
					cpt_err.o: ../include/openssl/stack.h ../include/openssl/symhacks.h cpt_err.c
 | 
				
			||||||
cryptlib.o: ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
					cryptlib.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
				
			||||||
cryptlib.o: ../include/openssl/crypto.h ../include/openssl/e_os.h
 | 
					cryptlib.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
				
			||||||
cryptlib.o: ../include/openssl/e_os2.h ../include/openssl/err.h
 | 
					cryptlib.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
				
			||||||
cryptlib.o: ../include/openssl/lhash.h ../include/openssl/opensslconf.h
 | 
					cryptlib.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
				
			||||||
cryptlib.o: ../include/openssl/opensslv.h ../include/openssl/safestack.h
 | 
					cryptlib.o: ../include/openssl/safestack.h ../include/openssl/stack.h
 | 
				
			||||||
cryptlib.o: ../include/openssl/stack.h ../include/openssl/symhacks.h cryptlib.h
 | 
					cryptlib.o: ../include/openssl/symhacks.h cryptlib.c cryptlib.h
 | 
				
			||||||
cversion.o: ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
					cversion.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
				
			||||||
cversion.o: ../include/openssl/crypto.h ../include/openssl/e_os.h
 | 
					cversion.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
				
			||||||
cversion.o: ../include/openssl/e_os2.h ../include/openssl/err.h
 | 
					cversion.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
				
			||||||
cversion.o: ../include/openssl/lhash.h ../include/openssl/opensslconf.h
 | 
					cversion.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
				
			||||||
cversion.o: ../include/openssl/opensslv.h ../include/openssl/safestack.h
 | 
					cversion.o: ../include/openssl/safestack.h ../include/openssl/stack.h
 | 
				
			||||||
cversion.o: ../include/openssl/stack.h ../include/openssl/symhacks.h buildinf.h
 | 
					cversion.o: ../include/openssl/symhacks.h buildinf.h cryptlib.h cversion.c
 | 
				
			||||||
cversion.o: cryptlib.h
 | 
					ebcdic.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h ebcdic.c
 | 
				
			||||||
ex_data.o: ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
					ex_data.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
				
			||||||
ex_data.o: ../include/openssl/crypto.h ../include/openssl/e_os.h
 | 
					ex_data.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
				
			||||||
ex_data.o: ../include/openssl/e_os2.h ../include/openssl/err.h
 | 
					ex_data.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
				
			||||||
ex_data.o: ../include/openssl/lhash.h ../include/openssl/opensslconf.h
 | 
					ex_data.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
				
			||||||
ex_data.o: ../include/openssl/opensslv.h ../include/openssl/safestack.h
 | 
					ex_data.o: ../include/openssl/safestack.h ../include/openssl/stack.h
 | 
				
			||||||
ex_data.o: ../include/openssl/stack.h ../include/openssl/symhacks.h cryptlib.h
 | 
					ex_data.o: ../include/openssl/symhacks.h cryptlib.h ex_data.c
 | 
				
			||||||
mem.o: ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
					mem.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
				
			||||||
mem.o: ../include/openssl/crypto.h ../include/openssl/e_os.h
 | 
					mem.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
				
			||||||
mem.o: ../include/openssl/e_os2.h ../include/openssl/err.h
 | 
					mem.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
				
			||||||
mem.o: ../include/openssl/lhash.h ../include/openssl/opensslconf.h
 | 
					mem.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
				
			||||||
mem.o: ../include/openssl/opensslv.h ../include/openssl/safestack.h
 | 
					mem.o: ../include/openssl/safestack.h ../include/openssl/stack.h
 | 
				
			||||||
mem.o: ../include/openssl/stack.h ../include/openssl/symhacks.h cryptlib.h
 | 
					mem.o: ../include/openssl/symhacks.h cryptlib.h mem.c
 | 
				
			||||||
mem_dbg.o: ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
					mem_clr.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
				
			||||||
mem_dbg.o: ../include/openssl/crypto.h ../include/openssl/e_os.h
 | 
					mem_clr.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
				
			||||||
mem_dbg.o: ../include/openssl/e_os2.h ../include/openssl/err.h
 | 
					mem_clr.o: ../include/openssl/safestack.h ../include/openssl/stack.h
 | 
				
			||||||
mem_dbg.o: ../include/openssl/lhash.h ../include/openssl/opensslconf.h
 | 
					mem_clr.o: ../include/openssl/symhacks.h mem_clr.c
 | 
				
			||||||
mem_dbg.o: ../include/openssl/opensslv.h ../include/openssl/safestack.h
 | 
					mem_dbg.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
				
			||||||
mem_dbg.o: ../include/openssl/stack.h ../include/openssl/symhacks.h cryptlib.h
 | 
					mem_dbg.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
				
			||||||
tmdiff.o: ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
					mem_dbg.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
				
			||||||
tmdiff.o: ../include/openssl/crypto.h ../include/openssl/e_os.h
 | 
					mem_dbg.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
				
			||||||
tmdiff.o: ../include/openssl/e_os2.h ../include/openssl/err.h
 | 
					mem_dbg.o: ../include/openssl/safestack.h ../include/openssl/stack.h
 | 
				
			||||||
tmdiff.o: ../include/openssl/lhash.h ../include/openssl/opensslconf.h
 | 
					mem_dbg.o: ../include/openssl/symhacks.h cryptlib.h mem_dbg.c
 | 
				
			||||||
tmdiff.o: ../include/openssl/opensslv.h ../include/openssl/safestack.h
 | 
					o_time.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h o_time.c
 | 
				
			||||||
tmdiff.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
 | 
					o_time.o: o_time.h
 | 
				
			||||||
tmdiff.o: ../include/openssl/tmdiff.h cryptlib.h
 | 
					tmdiff.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
				
			||||||
uid.o: ../include/openssl/crypto.h ../include/openssl/opensslv.h
 | 
					tmdiff.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
				
			||||||
 | 
					tmdiff.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
				
			||||||
 | 
					tmdiff.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
				
			||||||
 | 
					tmdiff.o: ../include/openssl/safestack.h ../include/openssl/stack.h
 | 
				
			||||||
 | 
					tmdiff.o: ../include/openssl/symhacks.h ../include/openssl/tmdiff.h cryptlib.h
 | 
				
			||||||
 | 
					tmdiff.o: tmdiff.c
 | 
				
			||||||
 | 
					uid.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
				
			||||||
 | 
					uid.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
				
			||||||
uid.o: ../include/openssl/safestack.h ../include/openssl/stack.h
 | 
					uid.o: ../include/openssl/safestack.h ../include/openssl/stack.h
 | 
				
			||||||
uid.o: ../include/openssl/symhacks.h
 | 
					uid.o: ../include/openssl/symhacks.h uid.c
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										103
									
								
								crypto/aes/Makefile.ssl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								crypto/aes/Makefile.ssl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,103 @@
 | 
				
			|||||||
 | 
					#
 | 
				
			||||||
 | 
					# crypto/aes/Makefile
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DIR=	aes
 | 
				
			||||||
 | 
					TOP=	../..
 | 
				
			||||||
 | 
					CC=	cc
 | 
				
			||||||
 | 
					CPP=	$(CC) -E
 | 
				
			||||||
 | 
					INCLUDES=
 | 
				
			||||||
 | 
					CFLAG=-g
 | 
				
			||||||
 | 
					INSTALL_PREFIX=
 | 
				
			||||||
 | 
					OPENSSLDIR=     /usr/local/ssl
 | 
				
			||||||
 | 
					INSTALLTOP=	/usr/local/ssl
 | 
				
			||||||
 | 
					MAKE=		make -f Makefile.ssl
 | 
				
			||||||
 | 
					MAKEDEPPROG=	makedepend
 | 
				
			||||||
 | 
					MAKEDEPEND=	$(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
 | 
				
			||||||
 | 
					MAKEFILE=	Makefile.ssl
 | 
				
			||||||
 | 
					AR=		ar r
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# CFLAGS= -mpentiumpro $(INCLUDES) $(CFLAG) -O3 -fexpensive-optimizations -funroll-loops -fforce-addr
 | 
				
			||||||
 | 
					CFLAGS= $(INCLUDES) $(CFLAG)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERAL=Makefile
 | 
				
			||||||
 | 
					#TEST=aestest.c
 | 
				
			||||||
 | 
					TEST=
 | 
				
			||||||
 | 
					APPS=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LIB=$(TOP)/libcrypto.a
 | 
				
			||||||
 | 
					LIBSRC=aes_core.c aes_misc.c aes_ecb.c aes_cbc.c aes_cfb.c aes_ofb.c aes_ctr.c
 | 
				
			||||||
 | 
					LIBOBJ=aes_core.o aes_misc.o aes_ecb.o aes_cbc.o aes_cfb.o aes_ofb.o aes_ctr.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SRC= $(LIBSRC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXHEADER= aes.h
 | 
				
			||||||
 | 
					HEADER= aes_locl.h $(EXHEADER)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ALL=    $(GENERAL) $(SRC) $(HEADER)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					top:
 | 
				
			||||||
 | 
						(cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					all:	lib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					lib:	$(LIBOBJ)
 | 
				
			||||||
 | 
						$(AR) $(LIB) $(LIBOBJ)
 | 
				
			||||||
 | 
						$(RANLIB) $(LIB) || echo Never mind.
 | 
				
			||||||
 | 
						@touch lib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(LIBOBJ): $(LIBSRC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					files:
 | 
				
			||||||
 | 
						$(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					links:
 | 
				
			||||||
 | 
						@sh $(TOP)/util/point.sh Makefile.ssl Makefile
 | 
				
			||||||
 | 
						@$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
 | 
				
			||||||
 | 
						@$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
 | 
				
			||||||
 | 
						@$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install: installs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					installs:
 | 
				
			||||||
 | 
						@for i in $(EXHEADER) ; \
 | 
				
			||||||
 | 
						do  \
 | 
				
			||||||
 | 
						(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
 | 
				
			||||||
 | 
						chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
 | 
				
			||||||
 | 
						done;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					tags:
 | 
				
			||||||
 | 
						ctags $(SRC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					tests:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					lint:
 | 
				
			||||||
 | 
						lint -DLINT $(INCLUDES) $(SRC)>fluff
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					depend:
 | 
				
			||||||
 | 
						$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dclean:
 | 
				
			||||||
 | 
						$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
 | 
				
			||||||
 | 
						mv -f Makefile.new $(MAKEFILE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clean:
 | 
				
			||||||
 | 
						rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DO NOT DELETE THIS LINE -- make depend depends on it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					aes_cbc.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
 | 
				
			||||||
 | 
					aes_cbc.o: ../../include/openssl/opensslconf.h aes_cbc.c aes_locl.h
 | 
				
			||||||
 | 
					aes_cfb.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
 | 
				
			||||||
 | 
					aes_cfb.o: ../../include/openssl/opensslconf.h aes_cfb.c aes_locl.h
 | 
				
			||||||
 | 
					aes_core.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
 | 
				
			||||||
 | 
					aes_core.o: ../../include/openssl/opensslconf.h aes_core.c aes_locl.h
 | 
				
			||||||
 | 
					aes_ctr.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
 | 
				
			||||||
 | 
					aes_ctr.o: ../../include/openssl/opensslconf.h aes_ctr.c aes_locl.h
 | 
				
			||||||
 | 
					aes_ecb.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
 | 
				
			||||||
 | 
					aes_ecb.o: ../../include/openssl/opensslconf.h aes_ecb.c aes_locl.h
 | 
				
			||||||
 | 
					aes_misc.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
 | 
				
			||||||
 | 
					aes_misc.o: ../../include/openssl/opensslconf.h
 | 
				
			||||||
 | 
					aes_misc.o: ../../include/openssl/opensslv.h aes_locl.h aes_misc.c
 | 
				
			||||||
 | 
					aes_ofb.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
 | 
				
			||||||
 | 
					aes_ofb.o: ../../include/openssl/opensslconf.h aes_locl.h aes_ofb.c
 | 
				
			||||||
							
								
								
									
										3
									
								
								crypto/aes/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								crypto/aes/README
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					This is an OpenSSL-compatible version of AES (also called Rijndael).
 | 
				
			||||||
 | 
					aes_core.c is basically the same as rijndael-alg-fst.c but with an
 | 
				
			||||||
 | 
					API that looks like the rest of the OpenSSL symmetric cipher suite.
 | 
				
			||||||
							
								
								
									
										112
									
								
								crypto/aes/aes.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								crypto/aes/aes.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,112 @@
 | 
				
			|||||||
 | 
					/* crypto/aes/aes.h -*- mode:C; c-file-style: "eay" -*- */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    openssl-core@openssl.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef HEADER_AES_H
 | 
				
			||||||
 | 
					#define HEADER_AES_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef OPENSSL_NO_AES
 | 
				
			||||||
 | 
					#error AES is disabled.
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define AES_ENCRYPT	1
 | 
				
			||||||
 | 
					#define AES_DECRYPT	0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Because array size can't be a const in C, the following two are macros.
 | 
				
			||||||
 | 
					   Both sizes are in bytes. */
 | 
				
			||||||
 | 
					#define AES_MAXNR 14
 | 
				
			||||||
 | 
					#define AES_BLOCK_SIZE 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef  __cplusplus
 | 
				
			||||||
 | 
					extern "C" {
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* This should be a hidden type, but EVP requires that the size be known */
 | 
				
			||||||
 | 
					struct aes_key_st {
 | 
				
			||||||
 | 
					    unsigned long rd_key[4 *(AES_MAXNR + 1)];
 | 
				
			||||||
 | 
					    int rounds;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					typedef struct aes_key_st AES_KEY;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const char *AES_options(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 | 
				
			||||||
 | 
						AES_KEY *key);
 | 
				
			||||||
 | 
					int AES_set_decrypt_key(const unsigned char *userKey, const int bits,
 | 
				
			||||||
 | 
						AES_KEY *key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void AES_encrypt(const unsigned char *in, unsigned char *out,
 | 
				
			||||||
 | 
						const AES_KEY *key);
 | 
				
			||||||
 | 
					void AES_decrypt(const unsigned char *in, unsigned char *out,
 | 
				
			||||||
 | 
						const AES_KEY *key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void AES_ecb_encrypt(const unsigned char *in, unsigned char *out,
 | 
				
			||||||
 | 
						const AES_KEY *key, const int enc);
 | 
				
			||||||
 | 
					void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
 | 
				
			||||||
 | 
						const unsigned long length, const AES_KEY *key,
 | 
				
			||||||
 | 
						unsigned char *ivec, const int enc);
 | 
				
			||||||
 | 
					void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,
 | 
				
			||||||
 | 
						const unsigned long length, const AES_KEY *key,
 | 
				
			||||||
 | 
						unsigned char *ivec, int *num, const int enc);
 | 
				
			||||||
 | 
					void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out,
 | 
				
			||||||
 | 
						const unsigned long length, const AES_KEY *key,
 | 
				
			||||||
 | 
						unsigned char *ivec, int *num);
 | 
				
			||||||
 | 
					void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
 | 
				
			||||||
 | 
						const unsigned long length, const AES_KEY *key,
 | 
				
			||||||
 | 
						unsigned char ivec[AES_BLOCK_SIZE],
 | 
				
			||||||
 | 
						unsigned char ecount_buf[AES_BLOCK_SIZE],
 | 
				
			||||||
 | 
						unsigned int *num);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef  __cplusplus
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* !HEADER_AES_H */
 | 
				
			||||||
							
								
								
									
										111
									
								
								crypto/aes/aes_cbc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								crypto/aes/aes_cbc.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,111 @@
 | 
				
			|||||||
 | 
					/* crypto/aes/aes_cbc.c -*- mode:C; c-file-style: "eay" -*- */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    openssl-core@openssl.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef AES_DEBUG
 | 
				
			||||||
 | 
					# ifndef NDEBUG
 | 
				
			||||||
 | 
					#  define NDEBUG
 | 
				
			||||||
 | 
					# endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#include <assert.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <openssl/aes.h>
 | 
				
			||||||
 | 
					#include "aes_locl.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
 | 
				
			||||||
 | 
							     const unsigned long length, const AES_KEY *key,
 | 
				
			||||||
 | 
							     unsigned char *ivec, const int enc) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						unsigned long n;
 | 
				
			||||||
 | 
						unsigned long len = length;
 | 
				
			||||||
 | 
						unsigned char tmp[AES_BLOCK_SIZE];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						assert(in && out && key && ivec);
 | 
				
			||||||
 | 
						assert((AES_ENCRYPT == enc)||(AES_DECRYPT == enc));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (AES_ENCRYPT == enc) {
 | 
				
			||||||
 | 
							while (len >= AES_BLOCK_SIZE) {
 | 
				
			||||||
 | 
								for(n=0; n < AES_BLOCK_SIZE; ++n)
 | 
				
			||||||
 | 
									tmp[n] = in[n] ^ ivec[n];
 | 
				
			||||||
 | 
								AES_encrypt(tmp, out, key);
 | 
				
			||||||
 | 
								memcpy(ivec, out, AES_BLOCK_SIZE);
 | 
				
			||||||
 | 
								len -= AES_BLOCK_SIZE;
 | 
				
			||||||
 | 
								in += AES_BLOCK_SIZE;
 | 
				
			||||||
 | 
								out += AES_BLOCK_SIZE;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (len) {
 | 
				
			||||||
 | 
								for(n=0; n < len; ++n)
 | 
				
			||||||
 | 
									tmp[n] = in[n] ^ ivec[n];
 | 
				
			||||||
 | 
								for(n=len; n < AES_BLOCK_SIZE; ++n)
 | 
				
			||||||
 | 
									tmp[n] = ivec[n];
 | 
				
			||||||
 | 
								AES_encrypt(tmp, tmp, key);
 | 
				
			||||||
 | 
								memcpy(out, tmp, AES_BLOCK_SIZE);
 | 
				
			||||||
 | 
								memcpy(ivec, tmp, AES_BLOCK_SIZE);
 | 
				
			||||||
 | 
							}			
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							while (len >= AES_BLOCK_SIZE) {
 | 
				
			||||||
 | 
								memcpy(tmp, in, AES_BLOCK_SIZE);
 | 
				
			||||||
 | 
								AES_decrypt(in, out, key);
 | 
				
			||||||
 | 
								for(n=0; n < AES_BLOCK_SIZE; ++n)
 | 
				
			||||||
 | 
									out[n] ^= ivec[n];
 | 
				
			||||||
 | 
								memcpy(ivec, tmp, AES_BLOCK_SIZE);
 | 
				
			||||||
 | 
								len -= AES_BLOCK_SIZE;
 | 
				
			||||||
 | 
								in += AES_BLOCK_SIZE;
 | 
				
			||||||
 | 
								out += AES_BLOCK_SIZE;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (len) {
 | 
				
			||||||
 | 
								memcpy(tmp, in, AES_BLOCK_SIZE);
 | 
				
			||||||
 | 
								AES_decrypt(tmp, tmp, key);
 | 
				
			||||||
 | 
								for(n=0; n < len; ++n)
 | 
				
			||||||
 | 
									out[n] = tmp[n] ^ ivec[n];
 | 
				
			||||||
 | 
								memcpy(ivec, tmp, AES_BLOCK_SIZE);
 | 
				
			||||||
 | 
							}			
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										157
									
								
								crypto/aes/aes_cfb.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										157
									
								
								crypto/aes/aes_cfb.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,157 @@
 | 
				
			|||||||
 | 
					/* crypto/aes/aes_cfb.c -*- mode:C; c-file-style: "eay" -*- */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    openssl-core@openssl.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 | 
				
			||||||
 | 
					 * All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This package is an SSL implementation written
 | 
				
			||||||
 | 
					 * by Eric Young (eay@cryptsoft.com).
 | 
				
			||||||
 | 
					 * The implementation was written so as to conform with Netscapes SSL.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * This library is free for commercial and non-commercial use as long as
 | 
				
			||||||
 | 
					 * the following conditions are aheared to.  The following conditions
 | 
				
			||||||
 | 
					 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
				
			||||||
 | 
					 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
				
			||||||
 | 
					 * included with this distribution is covered by the same copyright terms
 | 
				
			||||||
 | 
					 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
				
			||||||
 | 
					 * the code are not to be removed.
 | 
				
			||||||
 | 
					 * If this package is used in a product, Eric Young should be given attribution
 | 
				
			||||||
 | 
					 * as the author of the parts of the library used.
 | 
				
			||||||
 | 
					 * This can be in the form of a textual message at program startup or
 | 
				
			||||||
 | 
					 * in documentation (online or textual) provided with the package.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in the
 | 
				
			||||||
 | 
					 *    documentation and/or other materials provided with the distribution.
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this software
 | 
				
			||||||
 | 
					 *    must display the following acknowledgement:
 | 
				
			||||||
 | 
					 *    "This product includes cryptographic software written by
 | 
				
			||||||
 | 
					 *     Eric Young (eay@cryptsoft.com)"
 | 
				
			||||||
 | 
					 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
				
			||||||
 | 
					 *    being used are not cryptographic related :-).
 | 
				
			||||||
 | 
					 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
				
			||||||
 | 
					 *    the apps directory (application code) you must include an acknowledgement:
 | 
				
			||||||
 | 
					 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
				
			||||||
 | 
					 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
				
			||||||
 | 
					 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | 
				
			||||||
 | 
					 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
				
			||||||
 | 
					 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
				
			||||||
 | 
					 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
				
			||||||
 | 
					 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
				
			||||||
 | 
					 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
				
			||||||
 | 
					 * SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * The licence and distribution terms for any publically available version or
 | 
				
			||||||
 | 
					 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
				
			||||||
 | 
					 * copied and put under another distribution licence
 | 
				
			||||||
 | 
					 * [including the GNU Public Licence.]
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef AES_DEBUG
 | 
				
			||||||
 | 
					# ifndef NDEBUG
 | 
				
			||||||
 | 
					#  define NDEBUG
 | 
				
			||||||
 | 
					# endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#include <assert.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <openssl/aes.h>
 | 
				
			||||||
 | 
					#include "aes_locl.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* The input and output encrypted as though 128bit cfb mode is being
 | 
				
			||||||
 | 
					 * used.  The extra state information to record how much of the
 | 
				
			||||||
 | 
					 * 128bit block we have used is contained in *num;
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,
 | 
				
			||||||
 | 
						const unsigned long length, const AES_KEY *key,
 | 
				
			||||||
 | 
						unsigned char *ivec, int *num, const int enc) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						unsigned int n;
 | 
				
			||||||
 | 
						unsigned long l = length;
 | 
				
			||||||
 | 
						unsigned char c;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						assert(in && out && key && ivec && num);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						n = *num;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (enc) {
 | 
				
			||||||
 | 
							while (l--) {
 | 
				
			||||||
 | 
								if (n == 0) {
 | 
				
			||||||
 | 
									AES_encrypt(ivec, ivec, key);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								ivec[n] = *(out++) = *(in++) ^ ivec[n];
 | 
				
			||||||
 | 
								n = (n+1) % AES_BLOCK_SIZE;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							while (l--) {
 | 
				
			||||||
 | 
								if (n == 0) {
 | 
				
			||||||
 | 
									AES_encrypt(ivec, ivec, key);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								c = *(in);
 | 
				
			||||||
 | 
								*(out++) = *(in++) ^ ivec[n];
 | 
				
			||||||
 | 
								ivec[n] = c;
 | 
				
			||||||
 | 
								n = (n+1) % AES_BLOCK_SIZE;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						*num=n;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										1257
									
								
								crypto/aes/aes_core.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1257
									
								
								crypto/aes/aes_core.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										164
									
								
								crypto/aes/aes_ctr.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								crypto/aes/aes_ctr.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,164 @@
 | 
				
			|||||||
 | 
					/* crypto/aes/aes_ctr.c -*- mode:C; c-file-style: "eay" -*- */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    openssl-core@openssl.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef AES_DEBUG
 | 
				
			||||||
 | 
					# ifndef NDEBUG
 | 
				
			||||||
 | 
					#  define NDEBUG
 | 
				
			||||||
 | 
					# endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#include <assert.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <openssl/aes.h>
 | 
				
			||||||
 | 
					#include "aes_locl.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* NOTE: CTR mode is big-endian.  The rest of the AES code
 | 
				
			||||||
 | 
					 * is endian-neutral. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* increment counter (128-bit int) by 1 */
 | 
				
			||||||
 | 
					static void AES_ctr128_inc(unsigned char *counter) {
 | 
				
			||||||
 | 
						unsigned long c;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Grab bottom dword of counter and increment */
 | 
				
			||||||
 | 
					#ifdef L_ENDIAN
 | 
				
			||||||
 | 
						c = GETU32(counter +  0);
 | 
				
			||||||
 | 
						c++;
 | 
				
			||||||
 | 
						PUTU32(counter +  0, c);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						c = GETU32(counter + 12);
 | 
				
			||||||
 | 
						c++;
 | 
				
			||||||
 | 
						PUTU32(counter + 12, c);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* if no overflow, we're done */
 | 
				
			||||||
 | 
						if (c)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Grab 1st dword of counter and increment */
 | 
				
			||||||
 | 
					#ifdef L_ENDIAN
 | 
				
			||||||
 | 
						c = GETU32(counter +  4);
 | 
				
			||||||
 | 
						c++;
 | 
				
			||||||
 | 
						PUTU32(counter +  4, c);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						c = GETU32(counter +  8);
 | 
				
			||||||
 | 
						c++;
 | 
				
			||||||
 | 
						PUTU32(counter +  8, c);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* if no overflow, we're done */
 | 
				
			||||||
 | 
						if (c)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Grab 2nd dword of counter and increment */
 | 
				
			||||||
 | 
					#ifdef L_ENDIAN
 | 
				
			||||||
 | 
						c = GETU32(counter +  8);
 | 
				
			||||||
 | 
						c++;
 | 
				
			||||||
 | 
						PUTU32(counter +  8, c);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						c = GETU32(counter +  4);
 | 
				
			||||||
 | 
						c++;
 | 
				
			||||||
 | 
						PUTU32(counter +  4, c);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* if no overflow, we're done */
 | 
				
			||||||
 | 
						if (c)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Grab top dword of counter and increment */
 | 
				
			||||||
 | 
					#ifdef L_ENDIAN
 | 
				
			||||||
 | 
						c = GETU32(counter + 12);
 | 
				
			||||||
 | 
						c++;
 | 
				
			||||||
 | 
						PUTU32(counter + 12, c);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						c = GETU32(counter +  0);
 | 
				
			||||||
 | 
						c++;
 | 
				
			||||||
 | 
						PUTU32(counter +  0, c);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* The input encrypted as though 128bit counter mode is being
 | 
				
			||||||
 | 
					 * used.  The extra state information to record how much of the
 | 
				
			||||||
 | 
					 * 128bit block we have used is contained in *num, and the
 | 
				
			||||||
 | 
					 * encrypted counter is kept in ecount_buf.  Both *num and
 | 
				
			||||||
 | 
					 * ecount_buf must be initialised with zeros before the first
 | 
				
			||||||
 | 
					 * call to AES_ctr128_encrypt().
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This algorithm assumes that the counter is in the x lower bits
 | 
				
			||||||
 | 
					 * of the IV (ivec), and that the application has full control over
 | 
				
			||||||
 | 
					 * overflow and the rest of the IV.  This implementation takes NO
 | 
				
			||||||
 | 
					 * responsability for checking that the counter doesn't overflow
 | 
				
			||||||
 | 
					 * into the rest of the IV when incremented.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
 | 
				
			||||||
 | 
						const unsigned long length, const AES_KEY *key,
 | 
				
			||||||
 | 
						unsigned char ivec[AES_BLOCK_SIZE],
 | 
				
			||||||
 | 
						unsigned char ecount_buf[AES_BLOCK_SIZE],
 | 
				
			||||||
 | 
						unsigned int *num) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						unsigned int n;
 | 
				
			||||||
 | 
						unsigned long l=length;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						assert(in && out && key && counter && num);
 | 
				
			||||||
 | 
						assert(*num < AES_BLOCK_SIZE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						n = *num;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while (l--) {
 | 
				
			||||||
 | 
							if (n == 0) {
 | 
				
			||||||
 | 
								AES_encrypt(ivec, ecount_buf, key);
 | 
				
			||||||
 | 
					 			AES_ctr128_inc(ivec);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							*(out++) = *(in++) ^ ecount_buf[n];
 | 
				
			||||||
 | 
							n = (n+1) % AES_BLOCK_SIZE;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						*num=n;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										73
									
								
								crypto/aes/aes_ecb.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								crypto/aes/aes_ecb.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
				
			|||||||
 | 
					/* crypto/aes/aes_ecb.c -*- mode:C; c-file-style: "eay" -*- */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    openssl-core@openssl.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef AES_DEBUG
 | 
				
			||||||
 | 
					# ifndef NDEBUG
 | 
				
			||||||
 | 
					#  define NDEBUG
 | 
				
			||||||
 | 
					# endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#include <assert.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <openssl/aes.h>
 | 
				
			||||||
 | 
					#include "aes_locl.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void AES_ecb_encrypt(const unsigned char *in, unsigned char *out,
 | 
				
			||||||
 | 
							     const AES_KEY *key, const int enc) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assert(in && out && key);
 | 
				
			||||||
 | 
						assert((AES_ENCRYPT == enc)||(AES_DECRYPT == enc));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (AES_ENCRYPT == enc)
 | 
				
			||||||
 | 
							AES_encrypt(in, out, key);
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							AES_decrypt(in, out, key);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										85
									
								
								crypto/aes/aes_locl.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								crypto/aes/aes_locl.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
				
			|||||||
 | 
					/* crypto/aes/aes.h -*- mode:C; c-file-style: "eay" -*- */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    openssl-core@openssl.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef HEADER_AES_LOCL_H
 | 
				
			||||||
 | 
					#define HEADER_AES_LOCL_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <openssl/e_os2.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef OPENSSL_NO_AES
 | 
				
			||||||
 | 
					#error AES is disabled.
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(_MSC_VER) && !defined(OPENSSL_SYS_WINCE)
 | 
				
			||||||
 | 
					# define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00)
 | 
				
			||||||
 | 
					# define GETU32(p) SWAP(*((u32 *)(p)))
 | 
				
			||||||
 | 
					# define PUTU32(ct, st) { *((u32 *)(ct)) = SWAP((st)); }
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					# define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
 | 
				
			||||||
 | 
					# define PUTU32(ct, st) { (ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); (ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef unsigned long u32;
 | 
				
			||||||
 | 
					typedef unsigned short u16;
 | 
				
			||||||
 | 
					typedef unsigned char u8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MAXKC   (256/32)
 | 
				
			||||||
 | 
					#define MAXKB   (256/8)
 | 
				
			||||||
 | 
					#define MAXNR   14
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* This controls loop-unrolling in aes_core.c */
 | 
				
			||||||
 | 
					#undef FULL_UNROLL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* !HEADER_AES_LOCL_H */
 | 
				
			||||||
							
								
								
									
										64
									
								
								crypto/aes/aes_misc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								crypto/aes/aes_misc.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
				
			|||||||
 | 
					/* crypto/aes/aes_misc.c -*- mode:C; c-file-style: "eay" -*- */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    openssl-core@openssl.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <openssl/opensslv.h>
 | 
				
			||||||
 | 
					#include <openssl/aes.h>
 | 
				
			||||||
 | 
					#include "aes_locl.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const char *AES_version="AES" OPENSSL_VERSION_PTEXT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const char *AES_options(void) {
 | 
				
			||||||
 | 
					#ifdef FULL_UNROLL
 | 
				
			||||||
 | 
					        return "aes(full)";
 | 
				
			||||||
 | 
					#else   
 | 
				
			||||||
 | 
					        return "aes(partial)";
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										142
									
								
								crypto/aes/aes_ofb.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								crypto/aes/aes_ofb.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,142 @@
 | 
				
			|||||||
 | 
					/* crypto/aes/aes_ofb.c -*- mode:C; c-file-style: "eay" -*- */
 | 
				
			||||||
 | 
					/* ====================================================================
 | 
				
			||||||
 | 
					 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in
 | 
				
			||||||
 | 
					 *    the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					 *    distribution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this
 | 
				
			||||||
 | 
					 *    software must display the following acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
				
			||||||
 | 
					 *    endorse or promote products derived from this software without
 | 
				
			||||||
 | 
					 *    prior written permission. For written permission, please contact
 | 
				
			||||||
 | 
					 *    openssl-core@openssl.org.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 5. Products derived from this software may not be called "OpenSSL"
 | 
				
			||||||
 | 
					 *    nor may "OpenSSL" appear in their names without prior written
 | 
				
			||||||
 | 
					 *    permission of the OpenSSL Project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 6. Redistributions of any form whatsoever must retain the following
 | 
				
			||||||
 | 
					 *    acknowledgment:
 | 
				
			||||||
 | 
					 *    "This product includes software developed by the OpenSSL Project
 | 
				
			||||||
 | 
					 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
				
			||||||
 | 
					 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
				
			||||||
 | 
					 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
				
			||||||
 | 
					 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
				
			||||||
 | 
					 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
				
			||||||
 | 
					 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * ====================================================================
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 | 
				
			||||||
 | 
					 * All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This package is an SSL implementation written
 | 
				
			||||||
 | 
					 * by Eric Young (eay@cryptsoft.com).
 | 
				
			||||||
 | 
					 * The implementation was written so as to conform with Netscapes SSL.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * This library is free for commercial and non-commercial use as long as
 | 
				
			||||||
 | 
					 * the following conditions are aheared to.  The following conditions
 | 
				
			||||||
 | 
					 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
				
			||||||
 | 
					 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
				
			||||||
 | 
					 * included with this distribution is covered by the same copyright terms
 | 
				
			||||||
 | 
					 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
				
			||||||
 | 
					 * the code are not to be removed.
 | 
				
			||||||
 | 
					 * If this package is used in a product, Eric Young should be given attribution
 | 
				
			||||||
 | 
					 * as the author of the parts of the library used.
 | 
				
			||||||
 | 
					 * This can be in the form of a textual message at program startup or
 | 
				
			||||||
 | 
					 * in documentation (online or textual) provided with the package.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in the
 | 
				
			||||||
 | 
					 *    documentation and/or other materials provided with the distribution.
 | 
				
			||||||
 | 
					 * 3. All advertising materials mentioning features or use of this software
 | 
				
			||||||
 | 
					 *    must display the following acknowledgement:
 | 
				
			||||||
 | 
					 *    "This product includes cryptographic software written by
 | 
				
			||||||
 | 
					 *     Eric Young (eay@cryptsoft.com)"
 | 
				
			||||||
 | 
					 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
				
			||||||
 | 
					 *    being used are not cryptographic related :-).
 | 
				
			||||||
 | 
					 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
				
			||||||
 | 
					 *    the apps directory (application code) you must include an acknowledgement:
 | 
				
			||||||
 | 
					 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
				
			||||||
 | 
					 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
				
			||||||
 | 
					 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | 
				
			||||||
 | 
					 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
				
			||||||
 | 
					 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
				
			||||||
 | 
					 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
				
			||||||
 | 
					 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
				
			||||||
 | 
					 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
				
			||||||
 | 
					 * SUCH DAMAGE.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * The licence and distribution terms for any publically available version or
 | 
				
			||||||
 | 
					 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
				
			||||||
 | 
					 * copied and put under another distribution licence
 | 
				
			||||||
 | 
					 * [including the GNU Public Licence.]
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef AES_DEBUG
 | 
				
			||||||
 | 
					# ifndef NDEBUG
 | 
				
			||||||
 | 
					#  define NDEBUG
 | 
				
			||||||
 | 
					# endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#include <assert.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <openssl/aes.h>
 | 
				
			||||||
 | 
					#include "aes_locl.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* The input and output encrypted as though 128bit ofb mode is being
 | 
				
			||||||
 | 
					 * used.  The extra state information to record how much of the
 | 
				
			||||||
 | 
					 * 128bit block we have used is contained in *num;
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out,
 | 
				
			||||||
 | 
						const unsigned long length, const AES_KEY *key,
 | 
				
			||||||
 | 
						unsigned char *ivec, int *num) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						unsigned int n;
 | 
				
			||||||
 | 
						unsigned long l=length;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						assert(in && out && key && ivec && num);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						n = *num;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while (l--) {
 | 
				
			||||||
 | 
							if (n == 0) {
 | 
				
			||||||
 | 
								AES_encrypt(ivec, ivec, key);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							*(out++) = *(in++) ^ ivec[n];
 | 
				
			||||||
 | 
							n = (n+1) % AES_BLOCK_SIZE;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						*num=n;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user